From 54daa9892c28a713e436925945b7073d11c4d1e2 Mon Sep 17 00:00:00 2001 From: Rafael Zalamena Date: Sat, 26 Jan 2019 13:49:35 -0200 Subject: [PATCH] ospf6d: fix FreeBSD IPv6 multicast group join race Avoid a IPv6 multicast group join race by delaying the group install before processing all event queue. Signed-off-by: Rafael Zalamena (cherry picked from commit bc482dc0caeed76505623426edf58c6de48f013e) --- ospf6d/ospf6_interface.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/ospf6d/ospf6_interface.c b/ospf6d/ospf6_interface.c index 9aafb6d813..c56b1eae19 100644 --- a/ospf6d/ospf6_interface.c +++ b/ospf6d/ospf6_interface.c @@ -729,6 +729,22 @@ int interface_up(struct thread *thread) return 0; } +#ifdef __FreeBSD__ + /* + * XXX: Schedule IPv6 group join for later, otherwise we might + * lose the multicast group registration caused by IPv6 group + * leave race. + */ + if (oi->sso_try_cnt == 0) { + oi->sso_try_cnt++; + zlog_info("Scheduling %s for sso", oi->interface->name); + thread_add_timer(master, interface_up, oi, + OSPF6_INTERFACE_SSO_RETRY_INT, + &oi->thread_sso); + return 0; + } +#endif /* __FreeBSD__ */ + /* Join AllSPFRouters */ if (ospf6_sso(oi->interface->ifindex, &allspfrouters6, IPV6_JOIN_GROUP) < 0) { -- 2.39.5