]> git.proxmox.com Git - mirror_frr.git/commitdiff
bgpd: reduce cut-n-paste code in bgp_pbr.c
authorDonald Sharp <sharpd@nvidia.com>
Sat, 24 Apr 2021 00:57:14 +0000 (20:57 -0400)
committerDonald Sharp <sharpd@nvidia.com>
Wed, 12 May 2021 11:33:08 +0000 (07:33 -0400)
Create a function bgp_bpr_bpa_remove that is this cut-n-paste code:

       if (bpa->refcnt == 0) {
               if (bpa->installed && bpa->table_id != 0) {
                       bgp_send_pbr_rule_action(bpa, NULL, false);
                       bgp_zebra_announce_default(bpa->bgp, &(bpa->nh),
                                                  AFI_IP,
                                                  bpa->table_id,
                                                  false);
                       bpa->installed = false;
               }
       }

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
bgpd/bgp_pbr.c

index 01443c778fc6e365a0d93f16cc04bf415ed43cfa..e2e094d0bd9fdc5a52355ddafec32ae0da653aeb 100644 (file)
@@ -1072,22 +1072,22 @@ static void *bgp_pbr_rule_alloc_intern(void *arg)
        return new;
 }
 
+static void bgp_pbr_bpa_remove(struct bgp_pbr_action *bpa)
+{
+       if ((bpa->refcnt == 0) && bpa->installed && bpa->table_id != 0) {
+               bgp_send_pbr_rule_action(bpa, NULL, false);
+               bgp_zebra_announce_default(bpa->bgp, &bpa->nh, bpa->afi,
+                                          bpa->table_id, false);
+               bpa->installed = false;
+       }
+}
+
 static void bgp_pbr_action_free(void *arg)
 {
-       struct bgp_pbr_action *bpa;
+       struct bgp_pbr_action *bpa = arg;
 
-       bpa = (struct bgp_pbr_action *)arg;
+       bgp_pbr_bpa_remove(bpa);
 
-       if (bpa->refcnt == 0) {
-               if (bpa->installed && bpa->table_id != 0) {
-                       bgp_send_pbr_rule_action(bpa, NULL, false);
-                       bgp_zebra_announce_default(bpa->bgp, &(bpa->nh),
-                                                  AFI_IP,
-                                                  bpa->table_id,
-                                                  false);
-                       bpa->installed = false;
-               }
-       }
        XFREE(MTYPE_PBR_ACTION, bpa);
 }
 
@@ -1691,16 +1691,7 @@ static void bgp_pbr_flush_iprule(struct bgp *bgp, struct bgp_pbr_action *bpa,
                }
        }
        hash_release(bgp->pbr_rule_hash, bpr);
-       if (bpa->refcnt == 0) {
-               if (bpa->installed && bpa->table_id != 0) {
-                       bgp_send_pbr_rule_action(bpa, NULL, false);
-                       bgp_zebra_announce_default(bpa->bgp, &(bpa->nh),
-                                                  AFI_IP,
-                                                  bpa->table_id,
-                                                  false);
-                       bpa->installed = false;
-               }
-       }
+       bgp_pbr_bpa_remove(bpa);
 }
 
 static void bgp_pbr_flush_entry(struct bgp *bgp, struct bgp_pbr_action *bpa,
@@ -1748,16 +1739,7 @@ static void bgp_pbr_flush_entry(struct bgp *bgp, struct bgp_pbr_action *bpa,
                 * note that drop does not need to call send_pbr_action
                 */
        }
-       if (bpa->refcnt == 0) {
-               if (bpa->installed && bpa->table_id != 0) {
-                       bgp_send_pbr_rule_action(bpa, NULL, false);
-                       bgp_zebra_announce_default(bpa->bgp, &(bpa->nh),
-                                                  bpa->afi,
-                                                  bpa->table_id,
-                                                  false);
-                       bpa->installed = false;
-               }
-       }
+       bgp_pbr_bpa_remove(bpa);
 }
 
 struct bgp_pbr_match_entry_remain {