diff options
Diffstat (limited to 'ripngd/ripng_interface.c')
-rw-r--r-- | ripngd/ripng_interface.c | 12 |
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)); |