]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: Fix dropped(?) telling of the kernel to recv cmsg data
authorDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 2 Jun 2017 17:30:48 +0000 (13:30 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Mon, 24 Jul 2017 17:51:38 +0000 (13:51 -0400)
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
pimd/pim_mroute.c

index 884295dbbdd3ce8c7a6ca616e0f1041ad4519168..3d71da440e3ea3589a8aa6f92ccb51c0c1db715e 100644 (file)
@@ -89,6 +89,20 @@ static int pim_mroute_set(struct pim_instance *pim, int enable)
                return -1;
        }
 
+#if defined(HAVE_IP_PKTINFO)
+       if (enable) {
+               /* Linux and Solaris IP_PKTINFO */
+               opt = 1;
+               if (setsockopt(pim->mroute_socket, IPPROTO_IP, IP_PKTINFO, &opt,
+                              sizeof(opt))) {
+                       zlog_warn(
+                               "Could not set IP_PKTINFO on socket fd=%d: errno=%d: %s",
+                               pim->mroute_socket, errno,
+                               safe_strerror(errno));
+               }
+       }
+#endif
+
        setsockopt_so_recvbuf(pim->mroute_socket, 1024 * 1024 * 8);
 
        flags = fcntl(pim->mroute_socket, F_GETFL, 0);
@@ -698,8 +712,10 @@ int pim_mroute_socket_enable(struct pim_instance *pim)
 
        fd = socket(AF_INET, SOCK_RAW, IPPROTO_IGMP);
 
+#ifdef SO_BINDTODEVICE
        setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, pim->vrf->name,
                   strlen(pim->vrf->name));
+#endif
 
        if (pimd_privs.change(ZPRIVS_LOWER))
                zlog_err("pim_mroute_socket_enable: could not lower privs, %s",