diff options
author | Rich Roussel <rroussel@artandlogic.com> | 2017-10-12 10:56:04 -0700 |
---|---|---|
committer | Rich Roussel <rroussel@artandlogic.com> | 2017-10-12 10:56:04 -0700 |
commit | 64ee655a00fcc96f89b3c03e8d55683c51227bd7 (patch) | |
tree | 68aa8d1e6ea141276db8bf11b2f53a6a5c5d0f2f | |
parent | fe67446393c7e0d6fd9b2db8be376dce2e0b3f2d (diff) | |
download | Open-AVB-64ee655a00fcc96f89b3c03e8d55683c51227bd7.tar.gz |
Ensure the event and general sockets are bound to a specific interface.
-rw-r--r-- | daemons/gptp/linux/src/linux_hal_common.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/daemons/gptp/linux/src/linux_hal_common.cpp b/daemons/gptp/linux/src/linux_hal_common.cpp index 6b2917a8..d43b4136 100644 --- a/daemons/gptp/linux/src/linux_hal_common.cpp +++ b/daemons/gptp/linux/src/linux_hal_common.cpp @@ -111,7 +111,7 @@ net_result LinuxNetworkInterface::send remoteIpv6.sin6_port = htons(addr->Port()); addr->getAddress(&remoteIpv6.sin6_addr); remote = reinterpret_cast<sockaddr*>(&remoteIpv6); - remoteSize = sizeof(remoteIpv6); + remoteSize = sizeof(remoteIpv6); } #else sockaddr_ll remoteOrig; @@ -132,12 +132,14 @@ net_result LinuxNetworkInterface::send net_lock.lock(); #endif #endif - GPTP_LOG_VERBOSE("sendto sd_event"); + GPTP_LOG_VERBOSE("sendto sd_event ipVersion:%d port:%d remoteSize:%d", + addr->IpVersion(), addr->Port(), remoteSize); err = sendto(sd_event, payload, length, 0, remote, remoteSize); } else { - GPTP_LOG_VERBOSE("sendto sd_general"); + GPTP_LOG_VERBOSE("sendto sd_general ipVersion:%d port:%d remoteSize:%d", + addr->IpVersion(), addr->Port(), remoteSize); err = sendto(sd_general, payload, length, 0, remote, remoteSize); } @@ -1222,6 +1224,14 @@ bool LinuxNetworkInterfaceFactory::createInterface(OSNetworkInterface **net_ifac GPTP_LOG_VERBOSE("device.ifr_name: %s", device.ifr_name); +#ifdef APTP + // Bind each socket to a specific interface + setsockopt(net_iface_l->sd_event, SOL_SOCKET, SO_BINDTODEVICE, + device.ifr_name, strlen(device.ifr_name)); + setsockopt(net_iface_l->sd_general, SOL_SOCKET, SO_BINDTODEVICE, + device.ifr_name, strlen(device.ifr_name)); +#endif + err = ioctl( net_iface_l->sd_event, SIOCGIFHWADDR, &device ); if( err == -1 ) { GPTP_LOG_ERROR |