]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: Allow interfaces to be unnumbered.
authorDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 1 Sep 2016 22:49:53 +0000 (18:49 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 22 Dec 2016 01:26:08 +0000 (20:26 -0500)
Specify the ifindex of the interface that we want
to turn on IP_MULTICAST_IF on instead of the
address.  If we pass in the address then the
fact that we have multiple interfaces with the
same ip address causes confusion in the kernel.

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

index 8f8f4f191fb635624228a6486826b16cef45411c..4312fe73b2f3c718a5e5dc88cb7b6cd05b128c0b 100644 (file)
@@ -113,6 +113,7 @@ pim_socket_bind (int fd, struct interface *ifp)
 
 int pim_socket_mcast(int protocol, struct in_addr ifaddr, int ifindex, u_char loop)
 {
+  struct ip_mreqn mreq;
   int fd;
 
   fd = pim_socket_raw(protocol);
@@ -214,8 +215,10 @@ int pim_socket_mcast(int protocol, struct in_addr ifaddr, int ifindex, u_char lo
     return PIM_SOCK_ERR_LOOP;
   }
 
+  memset (&mreq, 0, sizeof (mreq));
+  mreq.imr_ifindex = ifindex;
   if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
-                (void *) &ifaddr, sizeof(ifaddr))) {
+                (void *) &mreq, sizeof(mreq))) {
     zlog_warn("Could not set Outgoing Interface Option on socket fd=%d: errno=%d: %s",
              fd, errno, safe_strerror(errno));
     close(fd);