Skip to content

Commit

Permalink
zebra: Fix another ships in the night issue with WFI
Browse files Browse the repository at this point in the history
Effectively When bgp would send a route update down
to zebra and immediately after that a asic update
from the kernel was read.  Zebra would choose the
asic update and drop the bgp update leaving us in
a state where bgp was not used as the true source.

Modify the code so that in rib_multipath_nhe
we notice that we have an unprocessed route update
from bgp.  And if so just drop this kernel update
about an older version of the route since it is
no longer needed.

Ticket: 2722533
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
  • Loading branch information
donaldsharp committed Dec 7, 2024
1 parent 9406c43 commit a58cd6f
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions zebra/zebra_rib.c
Original file line number Diff line number Diff line change
Expand Up @@ -2838,6 +2838,8 @@ static void process_subq_early_route_add(struct zebra_early_route *ere)

if (!ere->startup && (re->flags & ZEBRA_FLAG_SELFROUTE) &&
zrouter.asic_offloaded) {
struct route_entry *entry;

if (!same) {
if (IS_ZEBRA_DEBUG_RIB)
zlog_debug(
Expand All @@ -2854,6 +2856,25 @@ static void process_subq_early_route_add(struct zebra_early_route *ere)
early_route_memory_free(ere);
return;
}

RNODE_FOREACH_RE (rn, entry) {
if (CHECK_FLAG(entry->status, ROUTE_ENTRY_REMOVED))
continue;

if (entry->type != ere->re->type)
continue;

/*
* If we have an entry that is changed but un
* processed and not a self route, then
* we should just drop this new self route
*/
if (CHECK_FLAG(entry->status, ROUTE_ENTRY_CHANGED) &&
!(entry->flags & ZEBRA_FLAG_SELFROUTE)) {
early_route_memory_free(ere);
return;
}
}
}

/* Set default distance by route type. */
Expand Down

0 comments on commit a58cd6f

Please sign in to comment.