summaryrefslogtreecommitdiffstats
path: root/pimd
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@opensourcerouting.org>2016-12-05 16:25:58 +0100
committerDavid Lamparter <equinox@opensourcerouting.org>2016-12-05 16:25:58 +0100
commita93baa31d34bf11fa0ec44f84470583398154b57 (patch)
treefe00d9c18332569d0b64bec70137f476c4f3bad7 /pimd
parentMerge branch '-renato' into stable/2.0 (diff)
parentripngd: fix drop of multicast membership when the interface is down (diff)
downloadfrr-a93baa31d34bf11fa0ec44f84470583398154b57.tar.xz
frr-a93baa31d34bf11fa0ec44f84470583398154b57.zip
Merge branch '-rip' into stable/2.0
This fixes up a lot of RIP/RIPng compliance tests that were still flagged up. Tested-by: Martin Winter <mwinter@opensourcerouting.org>
Diffstat (limited to 'pimd')
-rw-r--r--pimd/pim_sock.c6
-rw-r--r--pimd/pim_sock.h2
-rw-r--r--pimd/pim_ssmpingd.c18
3 files changed, 11 insertions, 15 deletions
diff --git a/pimd/pim_sock.c b/pimd/pim_sock.c
index a024e3ae0..231efd0f2 100644
--- a/pimd/pim_sock.c
+++ b/pimd/pim_sock.c
@@ -35,6 +35,7 @@
#include "privs.h"
#include "if.h"
#include "vrf.h"
+#include "sockopt.h"
#include "pimd.h"
#include "pim_mroute.h"
@@ -68,7 +69,7 @@ int pim_socket_raw(int protocol)
return fd;
}
-int pim_socket_mcast(int protocol, struct in_addr ifaddr, int ifindex, int loop)
+int pim_socket_mcast(int protocol, struct in_addr ifaddr, int ifindex, u_char loop)
{
int fd;
@@ -173,8 +174,7 @@ int pim_socket_mcast(int protocol, struct in_addr ifaddr, int ifindex, int loop)
}
}
- if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_LOOP,
- (void *) &loop, sizeof(loop))) {
+ if (setsockopt_ipv4_multicast_loop (fd, loop)) {
zlog_warn("Could not %s Multicast Loopback Option on socket fd=%d: errno=%d: %s",
loop ? "enable" : "disable",
fd, errno, safe_strerror(errno));
diff --git a/pimd/pim_sock.h b/pimd/pim_sock.h
index f0a160081..cd29543fa 100644
--- a/pimd/pim_sock.h
+++ b/pimd/pim_sock.h
@@ -39,7 +39,7 @@
#define PIM_SOCK_ERR_BIND (-11) /* Can't bind to interface */
int pim_socket_raw(int protocol);
-int pim_socket_mcast(int protocol, struct in_addr ifaddr, int ifindex, int loop);
+int pim_socket_mcast(int protocol, struct in_addr ifaddr, int ifindex, u_char loop);
int pim_socket_join(int fd, struct in_addr group,
struct in_addr ifaddr, ifindex_t ifindex);
int pim_socket_join_source(int fd, ifindex_t ifindex,
diff --git a/pimd/pim_ssmpingd.c b/pimd/pim_ssmpingd.c
index fe88eba27..fba563a6f 100644
--- a/pimd/pim_ssmpingd.c
+++ b/pimd/pim_ssmpingd.c
@@ -25,6 +25,7 @@
#include "if.h"
#include "log.h"
#include "memory.h"
+#include "sockopt.h"
#include "pim_ssmpingd.h"
#include "pim_time.h"
@@ -150,17 +151,12 @@ static int ssmpingd_socket(struct in_addr addr, int port, int mttl)
return -1;
}
- {
- int loop = 0;
- if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_LOOP,
- (void *) &loop, sizeof(loop))) {
- zlog_warn("%s: could not %s Multicast Loopback Option on socket fd=%d: errno=%d: %s",
- __PRETTY_FUNCTION__,
- loop ? "enable" : "disable",
- fd, errno, safe_strerror(errno));
- close(fd);
- return PIM_SOCK_ERR_LOOP;
- }
+ if (setsockopt_ipv4_multicast_loop (fd, 0)) {
+ zlog_warn("%s: could not disable Multicast Loopback Option on socket fd=%d: errno=%d: %s",
+ __PRETTY_FUNCTION__,
+ fd, errno, safe_strerror(errno));
+ close(fd);
+ return PIM_SOCK_ERR_LOOP;
}
if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,