Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revert "bgpd: combine import_check_table and nexthop_check_table" #14742

Merged
merged 1 commit into from
Nov 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 13 additions & 20 deletions bgpd/bgp_nexthop.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,7 @@ void bnc_nexthop_free(struct bgp_nexthop_cache *bnc)

struct bgp_nexthop_cache *bnc_new(struct bgp_nexthop_cache_head *tree,
struct prefix *prefix, uint32_t srte_color,
ifindex_t ifindex, bool import_check_table,
bool nexthop_check_table)
ifindex_t ifindex)
{
struct bgp_nexthop_cache *bnc;

Expand All @@ -69,9 +68,6 @@ struct bgp_nexthop_cache *bnc_new(struct bgp_nexthop_cache_head *tree,
bnc->ifindex_ipv6_ll = ifindex;
bnc->srte_color = srte_color;
bnc->tree = tree;
bnc->import_check_table = import_check_table;
bnc->nexthop_check_table = nexthop_check_table;

LIST_INIT(&(bnc->paths));
bgp_nexthop_cache_add(tree, bnc);

Expand Down Expand Up @@ -972,7 +968,7 @@ static void bgp_show_nexthops_detail(struct vty *vty, struct bgp *bgp,

static void bgp_show_nexthop(struct vty *vty, struct bgp *bgp,
struct bgp_nexthop_cache *bnc, bool specific,
bool import_check_table, json_object *json)
json_object *json)
{
char buf[PREFIX2STR_BUFFER];
time_t tbuf;
Expand All @@ -981,12 +977,6 @@ static void bgp_show_nexthop(struct vty *vty, struct bgp *bgp,
json_object *json_last_update = NULL;
json_object *json_nexthop = NULL;

if (bnc->import_check_table && !import_check_table)
return;

if (bnc->nexthop_check_table && import_check_table)
return;

peer = (struct peer *)bnc->nht_info;

if (json)
Expand Down Expand Up @@ -1113,14 +1103,16 @@ static void bgp_show_nexthops(struct vty *vty, struct bgp *bgp,
else
vty_out(vty, "Current BGP nexthop cache:\n");
}
if (import_table)
tree = &bgp->import_check_table;
else
tree = &bgp->nexthop_cache_table;

tree = &bgp->nexthop_cache_table;
if (afi == AFI_IP || afi == AFI_IP6) {
if (json)
json_afi = json_object_new_object();
frr_each (bgp_nexthop_cache, &(*tree)[afi], bnc) {
bgp_show_nexthop(vty, bgp, bnc, detail, import_table,
json_afi);
bgp_show_nexthop(vty, bgp, bnc, detail, json_afi);
found = true;
}
if (found && json)
Expand All @@ -1134,8 +1126,7 @@ static void bgp_show_nexthops(struct vty *vty, struct bgp *bgp,
if (json && (afi == AFI_IP || afi == AFI_IP6))
json_afi = json_object_new_object();
frr_each (bgp_nexthop_cache, &(*tree)[afi], bnc)
bgp_show_nexthop(vty, bgp, bnc, detail, import_table,
json_afi);
bgp_show_nexthop(vty, bgp, bnc, detail, json_afi);
if (json && (afi == AFI_IP || afi == AFI_IP6))
json_object_object_add(
json, (afi == AFI_IP) ? "ipv4" : "ipv6",
Expand Down Expand Up @@ -1171,15 +1162,15 @@ static int show_ip_bgp_nexthop_table(struct vty *vty, const char *name,
vty_out(vty, "nexthop address is malformed\n");
return CMD_WARNING;
}
tree = &bgp->nexthop_cache_table;
tree = import_table ? &bgp->import_check_table
: &bgp->nexthop_cache_table;
if (json)
json_afi = json_object_new_object();
frr_each (bgp_nexthop_cache, &(*tree)[family2afi(nhop.family)],
bnc) {
if (prefix_cmp(&bnc->prefix, &nhop))
continue;
bgp_show_nexthop(vty, bgp, bnc, true, import_table,
json_afi);
bgp_show_nexthop(vty, bgp, bnc, true, json_afi);
found = true;
}
if (json)
Expand Down Expand Up @@ -1322,6 +1313,7 @@ void bgp_scan_init(struct bgp *bgp)

for (afi = AFI_IP; afi < AFI_MAX; afi++) {
bgp_nexthop_cache_init(&bgp->nexthop_cache_table[afi]);
bgp_nexthop_cache_init(&bgp->import_check_table[afi]);
bgp->connected_table[afi] = bgp_table_init(bgp, afi,
SAFI_UNICAST);
}
Expand All @@ -1341,6 +1333,7 @@ void bgp_scan_finish(struct bgp *bgp)
for (afi = AFI_IP; afi < AFI_MAX; afi++) {
/* Only the current one needs to be reset. */
bgp_nexthop_cache_reset(&bgp->nexthop_cache_table[afi]);
bgp_nexthop_cache_reset(&bgp->import_check_table[afi]);

bgp->connected_table[afi]->route_table->cleanup =
bgp_connected_cleanup;
Expand Down
8 changes: 2 additions & 6 deletions bgpd/bgp_nexthop.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,6 @@ struct bgp_nexthop_cache {
* nexthop.
*/
bool is_evpn_gwip_nexthop;

bool import_check_table;
bool nexthop_check_table;
};

extern int bgp_nexthop_cache_compare(const struct bgp_nexthop_cache *a,
Expand Down Expand Up @@ -135,9 +132,8 @@ extern bool bgp_nexthop_self(struct bgp *bgp, afi_t afi, uint8_t type,
struct bgp_dest *dest);
extern struct bgp_nexthop_cache *bnc_new(struct bgp_nexthop_cache_head *tree,
struct prefix *prefix,
uint32_t srte_color, ifindex_t ifindex,
bool import_check_table,
bool nexthop_check_table);
uint32_t srte_color,
ifindex_t ifindex);
extern bool bnc_existing_for_prefix(struct bgp_nexthop_cache *bnc);
extern void bnc_free(struct bgp_nexthop_cache *bnc);
extern struct bgp_nexthop_cache *bnc_find(struct bgp_nexthop_cache_head *tree,
Expand Down
38 changes: 23 additions & 15 deletions bgpd/bgp_nht.c
Original file line number Diff line number Diff line change
Expand Up @@ -378,24 +378,21 @@ int bgp_find_or_add_nexthop(struct bgp *bgp_route, struct bgp *bgp_nexthop,
} else
return 0;

tree = &bgp_nexthop->nexthop_cache_table[afi];
if (is_bgp_static_route)
tree = &bgp_nexthop->import_check_table[afi];
else
tree = &bgp_nexthop->nexthop_cache_table[afi];

bnc = bnc_find(tree, &p, srte_color, ifindex);
if (!bnc) {
bnc = bnc_new(tree, &p, srte_color, ifindex,
is_bgp_static_route, !is_bgp_static_route);
bnc = bnc_new(tree, &p, srte_color, ifindex);
bnc->bgp = bgp_nexthop;
if (BGP_DEBUG(nht, NHT))
zlog_debug("Allocated bnc %pFX(%d)(%u)(%s) peer %p",
&bnc->prefix, bnc->ifindex_ipv6_ll,
bnc->srte_color, bnc->bgp->name_pretty,
peer);
} else {
if (is_bgp_static_route)
bnc->import_check_table = true;
else
bnc->nexthop_check_table = true;

if (BGP_DEBUG(nht, NHT))
zlog_debug(
"Found existing bnc %pFX(%d)(%s) flags 0x%x ifindex %d #paths %d peer %p",
Expand Down Expand Up @@ -822,8 +819,12 @@ static void bgp_nht_ifp_handle(struct interface *ifp, bool up)

bgp_nht_ifp_table_handle(bgp, &bgp->nexthop_cache_table[AFI_IP], ifp,
up);
bgp_nht_ifp_table_handle(bgp, &bgp->import_check_table[AFI_IP], ifp,
up);
bgp_nht_ifp_table_handle(bgp, &bgp->nexthop_cache_table[AFI_IP6], ifp,
up);
bgp_nht_ifp_table_handle(bgp, &bgp->import_check_table[AFI_IP6], ifp,
up);
}

void bgp_nht_ifp_up(struct interface *ifp)
Expand Down Expand Up @@ -899,7 +900,7 @@ void bgp_nht_interface_events(struct peer *peer)
void bgp_parse_nexthop_update(int command, vrf_id_t vrf_id)
{
struct bgp_nexthop_cache_head *tree = NULL;
struct bgp_nexthop_cache *bnc_nhc;
struct bgp_nexthop_cache *bnc_nhc, *bnc_import;
struct bgp *bgp;
struct prefix match;
struct zapi_route nhr;
Expand Down Expand Up @@ -929,12 +930,19 @@ void bgp_parse_nexthop_update(int command, vrf_id_t vrf_id)
zlog_debug(
"parse nexthop update %pFX(%u)(%s): bnc info not found for nexthop cache",
&nhr.prefix, nhr.srte_color, bgp->name_pretty);
} else {
if (bnc_nhc->nexthop_check_table)
bgp_process_nexthop_update(bnc_nhc, &nhr, false);
if (bnc_nhc->import_check_table)
bgp_process_nexthop_update(bnc_nhc, &nhr, true);
}
} else
bgp_process_nexthop_update(bnc_nhc, &nhr, false);

tree = &bgp->import_check_table[afi];

bnc_import = bnc_find(tree, &match, nhr.srte_color, 0);
if (!bnc_import) {
if (BGP_DEBUG(nht, NHT))
zlog_debug(
"parse nexthop update %pFX(%u)(%s): bnc info not found for import check",
&nhr.prefix, nhr.srte_color, bgp->name_pretty);
} else
bgp_process_nexthop_update(bnc_import, &nhr, true);

/*
* HACK: if any BGP route is dependant on an SR-policy that doesn't
Expand Down
3 changes: 3 additions & 0 deletions bgpd/bgpd.h
Original file line number Diff line number Diff line change
Expand Up @@ -559,6 +559,9 @@ struct bgp {
/* Tree for next-hop lookup cache. */
struct bgp_nexthop_cache_head nexthop_cache_table[AFI_MAX];

/* Tree for import-check */
struct bgp_nexthop_cache_head import_check_table[AFI_MAX];

struct bgp_table *connected_table[AFI_MAX];

struct hash *address_hash;
Expand Down
Loading