]> git.proxmox.com Git - mirror_frr.git/commitdiff
pimd: Create pim_socket_bind
authorDonald Sharp <sharpd@cumulusnetwroks.com>
Thu, 28 Jul 2016 00:13:16 +0000 (20:13 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 22 Dec 2016 01:26:04 +0000 (20:26 -0500)
Allow a socket to be bound to a specified
interface.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
pimd/pim_sock.c
pimd/pim_sock.h

index b100c37b4696f8888d5767fb16952e6222f5cef9..70b18b14a4e4c865f6a1a568d79dcf9ca8f2cf37 100644 (file)
@@ -68,6 +68,28 @@ int pim_socket_raw(int protocol)
   return fd;
 }
 
+/*
+ * Given a socket and a interface,
+ * Bind that socket to that interface
+ */
+int pim_socket_bind (int fd, struct interface *ifp)
+{
+  int ret;
+
+  if (pimd_privs.change (ZPRIVS_RAISE))
+    zlog_err ("%s: could not raise privs, %s",
+             __PRETTY_FUNCTION__, safe_strerror (errno));
+
+  ret = setsockopt (fd, SOL_SOCKET,
+                   SO_BINDTODEVICE, ifp->name, strlen (ifp->name));
+
+  if (pimd_privs.change (ZPRIVS_LOWER))
+    zlog_err ("%s: could not lower privs, %s",
+             __PRETTY_FUNCTION__, safe_strerror (errno));
+
+  return ret;
+}
+
 int pim_socket_mcast(int protocol, struct in_addr ifaddr, int ifindex, u_char loop)
 {
   int fd;
@@ -87,17 +109,7 @@ int pim_socket_mcast(int protocol, struct in_addr ifaddr, int ifindex, u_char lo
 
       ifp = if_lookup_by_index_vrf (ifindex, VRF_DEFAULT);
 
-      if (pimd_privs.change (ZPRIVS_RAISE))
-       zlog_err ("%s: could not raise privs, %s",
-                 __PRETTY_FUNCTION__, safe_strerror (errno));
-
-      ret = setsockopt (fd, SOL_SOCKET,
-                       SO_BINDTODEVICE, ifp->name, strlen (ifp->name));
-
-      if (pimd_privs.change (ZPRIVS_LOWER))
-       zlog_err ("%s: could not lower privs, %s",
-                 __PRETTY_FUNCTION__, safe_strerror (errno));
-
+      ret = pim_socket_bind (fd, ifp);
       if (ret)
        {
          zlog_warn("Could not set fd: %d for interface: %s to device",
index 556049d9b02beb369f4c959ef109140c72c5d0a2..51ad88e24ee78d37a96a8c929d42faa872bf268c 100644 (file)
@@ -37,6 +37,7 @@
 #define PIM_SOCK_ERR_NAME    (-10) /* Socket name (getsockname) */
 #define PIM_SOCK_ERR_BIND    (-11) /* Can't bind to interface */
 
+int pim_socket_bind (int fd, struct interface *ifp);
 int pim_socket_raw(int protocol);
 int pim_socket_mcast(int protocol, struct in_addr ifaddr, int ifindex, u_char loop);
 int pim_socket_join(int fd, struct in_addr group,