openbsd-ports/net/quagga/patches/patch-ripd_rip_interface_c
sthen 1931eaa0b1 revert multicast changes in last upstream release, they do not work on OS
which require the interface IP address for IP_{ADD,DROP}_MEMBERSHIP

reported by Raphael Mazelier
2013-01-04 00:24:10 +00:00

52 lines
1.4 KiB
Plaintext

$OpenBSD: patch-ripd_rip_interface_c,v 1.1 2013/01/04 00:24:10 sthen Exp $
Revert 69bf3a39; does not work on at least (Open/Net)BSD.
This can be put back if we get RFC3678 support.
--- ripd/rip_interface.c.orig Tue Apr 17 14:56:26 2012
+++ ripd/rip_interface.c Thu Jan 3 00:24:26 2013
@@ -78,8 +78,9 @@ ipv4_multicast_join (int sock,
{
int ret;
- ret = setsockopt_ipv4_multicast (sock,
+ ret = setsockopt_multicast_ipv4 (sock,
IP_ADD_MEMBERSHIP,
+ ifa,
group.s_addr,
ifindex);
@@ -99,8 +100,9 @@ ipv4_multicast_leave (int sock,
{
int ret;
- ret = setsockopt_ipv4_multicast (sock,
+ ret = setsockopt_multicast_ipv4 (sock,
IP_DROP_MEMBERSHIP,
+ ifa,
group.s_addr,
ifindex);
@@ -136,13 +138,18 @@ rip_interface_new (void)
void
rip_interface_multicast_set (int sock, struct connected *connected)
{
+ struct in_addr addr;
+
assert (connected != NULL);
- if (setsockopt_ipv4_multicast_if (sock, connected->ifp->ifindex) < 0)
+ addr = CONNECTED_ID(connected)->u.prefix4;
+
+ if (setsockopt_multicast_ipv4 (sock, IP_MULTICAST_IF, addr, 0,
+ connected->ifp->ifindex) < 0)
{
zlog_warn ("Can't setsockopt IP_MULTICAST_IF on fd %d to "
- "ifindex %d for interface %s",
- sock, connected->ifp->ifindex,
+ "source address %s for interface %s",
+ sock, inet_ntoa(addr),
connected->ifp->name);
}