From: Donald Sharp Date: Fri, 2 Jun 2017 17:30:48 +0000 (-0400) Subject: pimd: Fix dropped(?) telling of the kernel to recv cmsg data X-Git-Tag: frr-4.0-dev~468^2~70 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=466e4e5b1699c2acc81bdbb211201880ed8fad9a;p=mirror%2Ffrr.git pimd: Fix dropped(?) telling of the kernel to recv cmsg data Signed-off-by: Donald Sharp --- diff --git a/pimd/pim_mroute.c b/pimd/pim_mroute.c index 884295dbbd..3d71da440e 100644 --- a/pimd/pim_mroute.c +++ b/pimd/pim_mroute.c @@ -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",