]> git.puffer.fish Git - matthieu/frr.git/commitdiff
ospf6d: fix FreeBSD IPv6 multicast group join race
authorRafael Zalamena <rzalamena@opensourcerouting.org>
Sat, 26 Jan 2019 15:49:35 +0000 (13:49 -0200)
committerRafael Zalamena <rzalamena@opensourcerouting.org>
Sat, 26 Jan 2019 15:55:27 +0000 (13:55 -0200)
Avoid a IPv6 multicast group join race by delaying the group install
before processing all event queue.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
ospf6d/ospf6_interface.c

index abdf244c85667532c2c6eaad1bdde406137aa875..dd08144daaf33ece08b4f7a3dcc6e9c21fbf074a 100644 (file)
@@ -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) {