From da47b297d29a0c2ba6480d092766e05b9d86c64d Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Tue, 29 Nov 1994 22:41:46 +0000 Subject: [PATCH] new env var --- src/rsrv/caservertask.c | 10 ++++++--- src/rsrv/cast_server.c | 7 ++++-- src/rsrv/online_notify.c | 46 +++++++++++++++++++++++++++------------- 3 files changed, 43 insertions(+), 20 deletions(-) diff --git a/src/rsrv/caservertask.c b/src/rsrv/caservertask.c index 9c731a097..0853d848a 100644 --- a/src/rsrv/caservertask.c +++ b/src/rsrv/caservertask.c @@ -66,6 +66,7 @@ static char *sccsId = "@(#)caservertask.c 1.22 5/6/94"; #include #include #include +#include #include LOCAL int terminate_one_client(struct client *client); @@ -88,6 +89,11 @@ int req_server(void) struct sockaddr_in serverAddr; /* server's address */ int status; int i; + short port; + + taskwdInsert((int)taskIdCurrent,NULL,NULL); + + port = caFetchPortConfig(&EPICS_CA_SERVER_PORT, CA_SERVER_PORT); if (IOC_sock != 0 && IOC_sock != ERROR) if ((status = close(IOC_sock)) == ERROR) @@ -113,13 +119,11 @@ int req_server(void) NULL); taskSuspend(0); } - - taskwdInsert((int)taskIdCurrent,NULL,NULL); /* Zero the sock_addr structure */ bfill((char *)&serverAddr, sizeof(serverAddr), 0); serverAddr.sin_family = AF_INET; - serverAddr.sin_port = CA_SERVER_PORT; + serverAddr.sin_port = htons(port); /* get server's Internet address */ if (bind(IOC_sock, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) == ERROR) { diff --git a/src/rsrv/cast_server.c b/src/rsrv/cast_server.c index db4fe0cb2..16b074cb8 100644 --- a/src/rsrv/cast_server.c +++ b/src/rsrv/cast_server.c @@ -79,6 +79,7 @@ static char *sccsId = "@(#)cast_server.c 1.24 5/6/94"; #include #include #include +#include #include @@ -100,9 +101,12 @@ int cast_server(void) struct sockaddr_in new_recv_addr; int recv_addr_size; unsigned nchars; + short port; taskwdInsert((int)taskIdCurrent,NULL,NULL); + port = caFetchPortConfig(&EPICS_CA_SERVER_PORT, CA_SERVER_PORT); + recv_addr_size = sizeof(new_recv_addr); if( IOC_cast_sock!=0 && IOC_cast_sock!=ERROR ) @@ -137,8 +141,7 @@ int cast_server(void) bfill((char *)&sin, sizeof(sin), 0); sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; - sin.sin_port = CA_SERVER_PORT; - + sin.sin_port = htons(port); /* get server's Internet address */ if( bind(IOC_cast_sock, (struct sockaddr *)&sin, sizeof (sin)) == ERROR){ diff --git a/src/rsrv/online_notify.c b/src/rsrv/online_notify.c index fd42314b4..14ef4efbf 100644 --- a/src/rsrv/online_notify.c +++ b/src/rsrv/online_notify.c @@ -74,23 +74,39 @@ int rsrv_online_notify_task() { ELLLIST destAddr; caAddrNode *pNode; - /* - * 1 sec init delay - */ - unsigned long delay = sysClkRateGet(); - /* - * CA_ONLINE_DELAY max delay in ticks - */ - unsigned long maxdelay = CA_ONLINE_DELAY; + unsigned long delay; + unsigned long maxdelay; + long longStatus; + double maxPeriod; struct extmsg msg; - struct sockaddr_in recv_addr; int status; int sock; int true = TRUE; + short port; taskwdInsert(taskIdSelf(),NULL,NULL); + longStatus = envGetDoubleConfigParam ( + &EPICS_CA_BEACON_PERIOD, + &maxPeriod); + if (longStatus) { + maxPeriod = 15.0; + ca_printf ( + "EPICS \"%s\" float fetch failed\n", + EPICS_CA_BEACON_PERIOD.name); + ca_printf ( + "Setting \"%s\" = %f\n", + EPICS_CA_BEACON_PERIOD.name, + maxPeriod); + } + + /* + * 1 sec init delay between beacons + */ + delay = sysClkRateGet(); + maxdelay = max(maxPeriod*sysClkRateGet(),sysClkRateGet()); + /* * Open the socket. * Use ARPA Internet address format and datagram socket. @@ -128,13 +144,13 @@ int rsrv_online_notify_task() msg.m_cmmd = htons(IOC_RSRV_IS_UP); ellInit(&destAddr); - caDiscoverInterfaces(&destAddr, sock, CA_CLIENT_PORT); - caAddConfiguredAddr( - &destAddr, - &EPICS_CA_ADDR_LIST, - sock, - CA_CLIENT_PORT); + /* + * load user and auto configured + * broadcast address list + */ + port = caFetchPortConfig(&EPICS_CA_REPEATER_PORT, CA_REPEATER_PORT); + caSetupBCastAddrList (&destAddr, sock, port); # ifdef DEBUG caPrintAddrList(&destAddr);