zebra: Convert redistribute_delete to use a route_node

FRR is passing around a bunch of data that is encapsulated
within the route node.  Let's just pass that around instead.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
This commit is contained in:
Donald Sharp 2022-01-14 09:48:00 -05:00
parent 40e9c14429
commit b3a9fca150
3 changed files with 17 additions and 21 deletions

View file

@ -247,13 +247,12 @@ void redistribute_update(const struct prefix *p, const struct prefix *src_p,
* may have seen a redist for 'old_re', but will not see * may have seen a redist for 'old_re', but will not see
* the redist for 'new_re'. * the redist for 'new_re'.
*/ */
void redistribute_delete(const struct prefix *p, const struct prefix *src_p, void redistribute_delete(const struct route_node *rn,
const struct route_entry *old_re, const struct route_entry *old_re,
const struct route_entry *new_re) const struct route_entry *new_re)
{ {
struct listnode *node, *nnode; struct listnode *node, *nnode;
struct zserv *client; struct zserv *client;
int afi;
vrf_id_t vrfid; vrf_id_t vrfid;
if (old_re) if (old_re)
@ -264,27 +263,19 @@ void redistribute_delete(const struct prefix *p, const struct prefix *src_p,
return; return;
if (IS_ZEBRA_DEBUG_RIB) { if (IS_ZEBRA_DEBUG_RIB) {
zlog_debug("%u:%pFX: Redist del: re %p (%s), new re %p (%s)", zlog_debug("%u:%pRN: Redist del: re %p (%s), new re %p (%s)",
vrfid, p, old_re, vrfid, rn, old_re,
old_re ? zebra_route_string(old_re->type) : "None", old_re ? zebra_route_string(old_re->type) : "None",
new_re, new_re,
new_re ? zebra_route_string(new_re->type) : "None"); new_re ? zebra_route_string(new_re->type) : "None");
} }
afi = family2afi(p->family);
if (!afi) {
flog_warn(EC_ZEBRA_REDISTRIBUTE_UNKNOWN_AF,
"%s: Unknown AFI/SAFI prefix received",
__func__);
return;
}
/* Skip invalid (e.g. linklocal) prefix */ /* Skip invalid (e.g. linklocal) prefix */
if (!zebra_check_addr(p)) { if (!zebra_check_addr(&rn->p)) {
if (IS_ZEBRA_DEBUG_RIB) { if (IS_ZEBRA_DEBUG_RIB) {
zlog_debug( zlog_debug(
"%u:%pFX: Redist del old: skipping invalid prefix", "%u:%pRN: Redist del old: skipping invalid prefix",
vrfid, p); vrfid, rn);
} }
return; return;
} }
@ -297,13 +288,19 @@ void redistribute_delete(const struct prefix *p, const struct prefix *src_p,
* Skip this client if it will receive an update for the * Skip this client if it will receive an update for the
* 'new' re * 'new' re
*/ */
if (zebra_redistribute_check(new_re, client, p, afi)) if (zebra_redistribute_check(new_re, client, &rn->p,
family2afi(rn->p.family)))
continue; continue;
/* Send a delete for the 'old' re to any subscribed client. */ /* Send a delete for the 'old' re to any subscribed client. */
if (zebra_redistribute_check(old_re, client, p, afi)) if (zebra_redistribute_check(old_re, client, &rn->p,
family2afi(rn->p.family))) {
const struct prefix *p, *src_p;
srcdest_rnode_prefixes(rn, &p, &src_p);
zsend_redistribute_route(ZEBRA_REDISTRIBUTE_ROUTE_DEL, zsend_redistribute_route(ZEBRA_REDISTRIBUTE_ROUTE_DEL,
client, p, src_p, old_re); client, p, src_p, old_re);
}
} }
} }

View file

@ -52,7 +52,7 @@ extern void redistribute_update(const struct prefix *p,
* may have seen a redist for 'old_re', but will not see * may have seen a redist for 'old_re', but will not see
* the redist for 'new_re'. * the redist for 'new_re'.
*/ */
void redistribute_delete(const struct prefix *p, const struct prefix *src_p, void redistribute_delete(const struct route_node *rn,
const struct route_entry *old_re, const struct route_entry *old_re,
const struct route_entry *new_re); const struct route_entry *new_re);

View file

@ -1288,8 +1288,7 @@ static void rib_process(struct route_node *rn)
*/ */
if (!new_selected || CHECK_FLAG(old_selected->status, if (!new_selected || CHECK_FLAG(old_selected->status,
ROUTE_ENTRY_REMOVED)) ROUTE_ENTRY_REMOVED))
redistribute_delete(p, src_p, redistribute_delete(rn, old_selected,
old_selected,
new_selected); new_selected);
if (old_selected != new_selected) if (old_selected != new_selected)
@ -2274,7 +2273,7 @@ static void rib_process_dplane_notify(struct zebra_dplane_ctx *ctx)
dplane_route_notif_update(rn, re, DPLANE_OP_ROUTE_DELETE, ctx); dplane_route_notif_update(rn, re, DPLANE_OP_ROUTE_DELETE, ctx);
/* Redistribute, lsp, and nht update */ /* Redistribute, lsp, and nht update */
redistribute_delete(dest_pfx, src_pfx, re, NULL); redistribute_delete(rn, re, NULL);
} }
/* Make any changes visible for lsp and nexthop-tracking processing */ /* Make any changes visible for lsp and nexthop-tracking processing */