diff options
| author | David Lamparter <equinox@opensourcerouting.org> | 2021-04-20 05:10:17 +0200 |
|---|---|---|
| committer | Martin Winter <mwinter@opensourcerouting.org> | 2021-07-06 01:44:24 +0200 |
| commit | f06c6e3ef91027205e653a4aa72a2bb8969466e9 (patch) | |
| tree | 11489fa42618e3e1562dcbbfda494e87e914af70 /pimd/pim_sock.c | |
| parent | 12536067cc101fe94cb2565771f29329e3c26456 (diff) | |
pimd: IGMP sockets need to be iface-bound too
There's an IGMP socket per interface, so they should be bound to that
interface. Which also makes IGMP work in VRFs.
Fixes: #7889
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'pimd/pim_sock.c')
| -rw-r--r-- | pimd/pim_sock.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/pimd/pim_sock.c b/pimd/pim_sock.c index 504519c8a4..05b0f92a4b 100644 --- a/pimd/pim_sock.c +++ b/pimd/pim_sock.c @@ -112,17 +112,15 @@ int pim_socket_mcast(int protocol, struct in_addr ifaddr, struct interface *ifp, } #ifdef SO_BINDTODEVICE - if (protocol == IPPROTO_PIM) { - int ret; + int ret; - ret = pim_socket_bind(fd, ifp); - if (ret) { - close(fd); - zlog_warn( - "Could not set fd: %d for interface: %s to device", - fd, ifp->name); - return PIM_SOCK_ERR_BIND; - } + ret = pim_socket_bind(fd, ifp); + if (ret) { + close(fd); + zlog_warn( + "Could not set fd: %d for interface: %s to device", + fd, ifp->name); + return PIM_SOCK_ERR_BIND; } #else /* XXX: use IP_PKTINFO / IP_RECVIF to emulate behaviour? Or change to |
