diff options
| -rw-r--r-- | bgpd/bgp_pbr.c | 70 | ||||
| -rw-r--r-- | bgpd/bgp_zebra.c | 18 | ||||
| -rw-r--r-- | tests/topotests/bgp_flowspec/test_bgp_flowspec_topo.py | 4 |
3 files changed, 38 insertions, 54 deletions
diff --git a/bgpd/bgp_pbr.c b/bgpd/bgp_pbr.c index 01443c778f..27d868afa1 100644 --- a/bgpd/bgp_pbr.c +++ b/bgpd/bgp_pbr.c @@ -1072,22 +1072,31 @@ 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_bpa_add(struct bgp_pbr_action *bpa) +{ + if (!bpa->installed && !bpa->install_in_progress) { + bgp_send_pbr_rule_action(bpa, NULL, true); + bgp_zebra_announce_default(bpa->bgp, &bpa->nh, bpa->afi, + bpa->table_id, true); + } +} + 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 +1700,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 +1748,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 { @@ -2374,12 +2365,9 @@ static void bgp_pbr_policyroute_add_to_zebra_unit(struct bgp *bgp, return; } } - if (!bpa->installed && !bpa->install_in_progress) { - bgp_send_pbr_rule_action(bpa, NULL, true); - bgp_zebra_announce_default(bgp, nh, - bpa->afi, - bpa->table_id, true); - } + + bgp_pbr_bpa_add(bpa); + /* ip rule add */ if (bpr && !bpr->installed) bgp_send_pbr_rule_action(bpa, bpr, true); @@ -2547,11 +2535,7 @@ static void bgp_pbr_policyroute_add_to_zebra_unit(struct bgp *bgp, * it will be suppressed subsequently */ /* ip rule add */ - if (!bpa->installed && !bpa->install_in_progress) { - bgp_send_pbr_rule_action(bpa, NULL, true); - bgp_zebra_announce_default(bgp, nh, - bpa->afi, bpa->table_id, true); - } + bgp_pbr_bpa_add(bpa); /* ipset create */ if (!bpm->installed) diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c index 05d00a4851..63214c5676 100644 --- a/bgpd/bgp_zebra.c +++ b/bgpd/bgp_zebra.c @@ -1180,7 +1180,6 @@ void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, route_tag_t tag; mpls_label_t label; int nh_othervrf = 0; - char buf_prefix[PREFIX_STRLEN]; /* filled in if we are debugging */ bool is_evpn; bool nh_updated = false; bool do_wt_ecmp; @@ -1197,9 +1196,6 @@ void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, if (bgp->main_zebra_update_hold) return; - if (bgp_debug_zebra(p)) - prefix2str(p, buf_prefix, sizeof(buf_prefix)); - if (safi == SAFI_FLOWSPEC) { bgp_pbr_update_entry(bgp, bgp_dest_get_prefix(dest), info, afi, safi, true); @@ -1312,13 +1308,14 @@ void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, if (bgp_debug_zebra(&api.prefix)) { if (mpinfo->extra) { - zlog_debug("%s: p=%s, bgp_is_valid_label: %d", - __func__, buf_prefix, + zlog_debug("%s: p=%pFX, bgp_is_valid_label: %d", + __func__, p, bgp_is_valid_label( &mpinfo->extra->label[0])); } else { - zlog_debug("%s: p=%s, extra is NULL, no label", - __func__, buf_prefix); + zlog_debug( + "%s: p=%pFX, extra is NULL, no label", + __func__, p); } } @@ -1500,9 +1497,8 @@ void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, if (CHECK_FLAG(api.flags, ZEBRA_FLAG_ALLOW_RECURSION)) recursion_flag = 1; - zlog_debug("%s: %s: announcing to zebra (recursion %sset)", - __func__, buf_prefix, - (recursion_flag ? "" : "NOT ")); + zlog_debug("%s: %pFX: announcing to zebra (recursion %sset)", + __func__, p, (recursion_flag ? "" : "NOT ")); } zclient_route_send(is_add ? ZEBRA_ROUTE_ADD : ZEBRA_ROUTE_DELETE, zclient, &api); diff --git a/tests/topotests/bgp_flowspec/test_bgp_flowspec_topo.py b/tests/topotests/bgp_flowspec/test_bgp_flowspec_topo.py index a772a2aab1..fdd84fcd40 100644 --- a/tests/topotests/bgp_flowspec/test_bgp_flowspec_topo.py +++ b/tests/topotests/bgp_flowspec/test_bgp_flowspec_topo.py @@ -71,6 +71,10 @@ from lib.lutil import luCommand # Required to instantiate the topology builder class. from mininet.topo import Topo + +pytestmark = [pytest.mark.bgpd] + + ##################################################### ## ## Network Topology Definition |
