]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: fix process_queue when un-hiding
authorLouis Scalbert <louis.scalbert@6wind.com>
Wed, 12 Feb 2025 12:09:37 +0000 (13:09 +0100)
committerLouis Scalbert <louis.scalbert@6wind.com>
Mon, 24 Feb 2025 14:17:05 +0000 (15:17 +0100)
bgp_process_queue_init() is not called in bgp_create() when leaving the
BGP instance hidden state because of the following goto:

> if (hidden) {
> bgp = bgp_old;
> goto peer_init;
> }

Upon reconfiguration of the default instance, the prefixes are never set
into a meta queue by mq_add_handler(). They are never processed for
zebra RIB installation and announcements of update/withdraw.

Do not delete the BGP process_queue when hiding.

Fixes: 4d0e7a49cf ("bgpd: VRF-Lite fix default bgp delete")
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
bgpd/bgpd.c

index 631482934f3c67582b554b672ec68e4db2e550f3..ae82a4b25fecbaf6e42010b022741e195eceb6af 100644 (file)
@@ -4265,12 +4265,11 @@ int bgp_delete(struct bgp *bgp)
                        bgp_set_evpn(bgp_get_default());
        }
 
-       if (bgp->process_queue)
-               work_queue_free_and_null(&bgp->process_queue);
-
-       if (!IS_BGP_INSTANCE_HIDDEN(bgp))
+       if (!IS_BGP_INSTANCE_HIDDEN(bgp)) {
+               if (bgp->process_queue)
+                       work_queue_free_and_null(&bgp->process_queue);
                bgp_unlock(bgp); /* initial reference */
-       else {
+       else {
                for (afi = AFI_IP; afi < AFI_MAX; afi++) {
                        enum vpn_policy_direction dir;