add EPICS_CA_MCAST_TTL

may be necessary/helpful for mcast search/beacon usage
across sub-nets.
This commit is contained in:
Michael Davidsaver
2017-05-02 20:35:00 -04:00
parent 6572816a6a
commit f2a1834dc9
5 changed files with 39 additions and 0 deletions

View File

@@ -38,6 +38,7 @@ EPICS_CA_MAX_ARRAY_BYTES=16384
EPICS_CA_AUTO_MAX_ARRAY_BYTES=NO
EPICS_CA_BEACON_PERIOD=15.0
EPICS_CA_MAX_SEARCH_PERIOD=300.0
EPICS_CA_MCAST_TTL=1
EPICS_CAS_BEACON_PERIOD=
EPICS_CAS_BEACON_PORT=
EPICS_CAS_AUTO_BEACON_ADDR_LIST=""

View File

@@ -21,6 +21,11 @@
-->
<h3>Add EPICS_CA_MCAST_TTL</h3>
<p>Add option EPICS_CA_MCAST_TTL to set the Time To Live (TTL) of any IP multi-cast
CA search or beacon packets sent.</p>
<h3>EPICS_CA_MAX_ARRAY_BYTES is optional</h3>
<p>

View File

@@ -191,6 +191,22 @@ udpiiu::udpiiu (
}
#endif
#ifdef IP_MULTICAST_TTL
{
int ttl;
long val;
if(envGetLongConfigParam(&EPICS_CA_MCAST_TTL, &val))
val =1;
ttl = val;
if ( setsockopt(this->sock, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ttl, sizeof(ttl))) {
char sockErrBuf[64];
epicsSocketConvertErrnoToString (
sockErrBuf, sizeof ( sockErrBuf ) );
errlogPrintf("CAC: failed to set mcast ttl %d\n", ttl);
}
}
#endif
int boolValue = true;
int status = setsockopt ( this->sock, SOL_SOCKET, SO_BROADCAST,
(char *) &boolValue, sizeof ( boolValue ) );

View File

@@ -320,6 +320,22 @@ void rsrv_build_addr_lists(void)
}
}
#endif
#ifdef IP_MULTICAST_TTL
{
int ttl;
long val;
if(envGetLongConfigParam(&EPICS_CA_MCAST_TTL, &val))
val =1;
ttl = val;
if ( setsockopt(beaconSocket, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ttl, sizeof(ttl))) {
char sockErrBuf[64];
epicsSocketConvertErrnoToString (
sockErrBuf, sizeof ( sockErrBuf ) );
errlogPrintf("rsrv: failed to set mcast ttl %d\n", ttl);
}
}
#endif
}
/* populate the interface address list (default is empty) */

View File

@@ -51,6 +51,7 @@ epicsShareExtern const ENV_PARAM EPICS_CA_MAX_ARRAY_BYTES;
epicsShareExtern const ENV_PARAM EPICS_CA_AUTO_MAX_ARRAY_BYTES;
epicsShareExtern const ENV_PARAM EPICS_CA_MAX_SEARCH_PERIOD;
epicsShareExtern const ENV_PARAM EPICS_CA_NAME_SERVERS;
epicsShareExtern const ENV_PARAM EPICS_CA_MCAST_TTL;
epicsShareExtern const ENV_PARAM EPICS_CAS_INTF_ADDR_LIST;
epicsShareExtern const ENV_PARAM EPICS_CAS_IGNORE_ADDR_LIST;
epicsShareExtern const ENV_PARAM EPICS_CAS_AUTO_BEACON_ADDR_LIST;