]> git.proxmox.com Git - mirror_frr.git/commitdiff
pim: Use INADDR_ANY for current_bsr checking is valid yet
authorDonald Sharp <sharpd@nvidia.com>
Fri, 4 Feb 2022 13:49:39 +0000 (08:49 -0500)
committermergify-bot <noreply@mergify.com>
Mon, 7 Feb 2022 20:50:24 +0000 (20:50 +0000)
In all places that pim_nht_bsr_del is called, the code
needs to not unregister if the current_bsr is INADDR_ANY.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit 5f010b1205a9b4977d08329bd3e100fb5f41c0ff)

pimd/pim_bsm.c
pimd/pim_nht.c

index cd50cdd67823b89939b819e4671ca60401e14883..c8b6d4e404ddacfeb28370f63180956c2699f3c4 100644 (file)
@@ -171,8 +171,7 @@ static int pim_on_bs_timer(struct thread *t)
                zlog_debug("%s: Bootstrap Timer expired for scope: %d",
                           __func__, scope->sz_id);
 
-       if (scope->current_bsr.s_addr)
-               pim_nht_bsr_del(scope->pim, scope->current_bsr);
+       pim_nht_bsr_del(scope->pim, scope->current_bsr);
 
        /* Reset scope zone data */
        scope->accept_nofwd_bsm = false;
@@ -558,8 +557,7 @@ static void pim_bsm_update(struct pim_instance *pim, struct in_addr bsr,
                           uint32_t bsr_prio)
 {
        if (bsr.s_addr != pim->global_scope.current_bsr.s_addr) {
-               if (pim->global_scope.current_bsr.s_addr)
-                       pim_nht_bsr_del(pim, pim->global_scope.current_bsr);
+               pim_nht_bsr_del(pim, pim->global_scope.current_bsr);
                pim_nht_bsr_add(pim, bsr);
 
                pim->global_scope.current_bsr = bsr;
@@ -583,8 +581,7 @@ void pim_bsm_clear(struct pim_instance *pim)
        struct rp_info *rp_info;
        bool upstream_updated = false;
 
-       if (pim->global_scope.current_bsr.s_addr)
-               pim_nht_bsr_del(pim, pim->global_scope.current_bsr);
+       pim_nht_bsr_del(pim, pim->global_scope.current_bsr);
 
        /* Reset scope zone data */
        pim->global_scope.accept_nofwd_bsm = false;
index cd6f4c45fa0c418efcdcf774693f3ba2da7f18c1..94a624e2c4a02e7bca5e8a21303edde74e49e2da 100644 (file)
@@ -259,6 +259,14 @@ void pim_nht_bsr_del(struct pim_instance *pim, struct in_addr addr)
        struct pim_nexthop_cache *pnc = NULL;
        struct pim_nexthop_cache lookup;
 
+       /*
+        * Nothing to do here if the address to unregister
+        * is 0.0.0.0 as that the BSR has not been registered
+        * for tracking yet.
+        */
+       if (addr.s_addr == INADDR_ANY)
+               return;
+
        lookup.rpf.rpf_addr.family = AF_INET;
        lookup.rpf.rpf_addr.prefixlen = IPV4_MAX_BITLEN;
        lookup.rpf.rpf_addr.u.prefix4 = addr;