summaryrefslogtreecommitdiff
path: root/ripngd/ripng_interface.c
diff options
context:
space:
mode:
Diffstat (limited to 'ripngd/ripng_interface.c')
-rw-r--r--ripngd/ripng_interface.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/ripngd/ripng_interface.c b/ripngd/ripng_interface.c
index b4299eb0..7437f70f 100644
--- a/ripngd/ripng_interface.c
+++ b/ripngd/ripng_interface.c
@@ -67,6 +67,18 @@ ripng_multicast_join (struct interface *ifp)
ret = setsockopt (ripng->sock, IPPROTO_IPV6, IPV6_JOIN_GROUP,
(char *) &mreq, sizeof (mreq));
+
+ if (ret < 0 && errno == EADDRINUSE)
+ {
+ /*
+ * Group is already joined. This occurs due to sloppy group
+ * management, in particular declining to leave the group on
+ * an interface that has just gone down.
+ */
+ zlog_warn ("ripng join on %s EADDRINUSE (ignoring)\n", ifp->name);
+ return 0; /* not an error */
+ }
+
if (ret < 0)
zlog_warn ("can't setsockopt IPV6_JOIN_GROUP: %s", strerror (errno));