summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Roussel <rroussel@artandlogic.com>2017-10-12 10:56:04 -0700
committerRich Roussel <rroussel@artandlogic.com>2017-10-12 10:56:04 -0700
commit64ee655a00fcc96f89b3c03e8d55683c51227bd7 (patch)
tree68aa8d1e6ea141276db8bf11b2f53a6a5c5d0f2f
parentfe67446393c7e0d6fd9b2db8be376dce2e0b3f2d (diff)
downloadOpen-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.cpp16
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