diff options
Diffstat (limited to 'zebra/zebra_rib.c')
| -rw-r--r-- | zebra/zebra_rib.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index fceaaaa9f0..54ef4768eb 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -292,13 +292,16 @@ static char *_dump_re_status(const struct route_entry *re, char *buf, } snprintfrr( - buf, len, "%s%s%s%s%s%s%s", + buf, len, "%s%s%s%s%s%s%s%s", CHECK_FLAG(re->status, ROUTE_ENTRY_REMOVED) ? "Removed " : "", CHECK_FLAG(re->status, ROUTE_ENTRY_CHANGED) ? "Changed " : "", CHECK_FLAG(re->status, ROUTE_ENTRY_LABELS_CHANGED) ? "Label Changed " : "", CHECK_FLAG(re->status, ROUTE_ENTRY_QUEUED) ? "Queued " : "", + CHECK_FLAG(re->status, ROUTE_ENTRY_ROUTE_REPLACING) + ? "Replacing" + : "", CHECK_FLAG(re->status, ROUTE_ENTRY_INSTALLED) ? "Installed " : "", CHECK_FLAG(re->status, ROUTE_ENTRY_FAILED) ? "Failed " : "", @@ -713,6 +716,7 @@ void rib_install_kernel(struct route_node *rn, struct route_entry *re, if (old) { SET_FLAG(old->status, ROUTE_ENTRY_QUEUED); + SET_FLAG(re->status, ROUTE_ENTRY_ROUTE_REPLACING); /* Free old FIB nexthop group */ UNSET_FLAG(old->status, ROUTE_ENTRY_USE_FIB_NHG); @@ -1538,6 +1542,7 @@ static void zebra_rib_fixup_system(struct route_node *rn) SET_FLAG(re->status, ROUTE_ENTRY_INSTALLED); UNSET_FLAG(re->status, ROUTE_ENTRY_QUEUED); + UNSET_FLAG(re->status, ROUTE_ENTRY_ROUTE_REPLACING); for (ALL_NEXTHOPS(re->nhe->nhg, nhop)) { if (CHECK_FLAG(nhop->flags, NEXTHOP_FLAG_RECURSIVE)) @@ -1995,8 +2000,12 @@ static void rib_process_result(struct zebra_dplane_ctx *ctx) } else { if (!zrouter.asic_offloaded || (CHECK_FLAG(re->flags, ZEBRA_FLAG_OFFLOADED) || - CHECK_FLAG(re->flags, ZEBRA_FLAG_OFFLOAD_FAILED))) + CHECK_FLAG(re->flags, + ZEBRA_FLAG_OFFLOAD_FAILED))) { + UNSET_FLAG(re->status, + ROUTE_ENTRY_ROUTE_REPLACING); UNSET_FLAG(re->status, ROUTE_ENTRY_QUEUED); + } } } @@ -2252,8 +2261,10 @@ static void rib_process_dplane_notify(struct zebra_dplane_ctx *ctx) } /* Ensure we clear the QUEUED flag */ - if (!zrouter.asic_offloaded) + if (!zrouter.asic_offloaded) { UNSET_FLAG(re->status, ROUTE_ENTRY_QUEUED); + UNSET_FLAG(re->status, ROUTE_ENTRY_ROUTE_REPLACING); + } /* Is this a notification that ... matters? We mostly care about * the route that is currently selected for installation; we may also |
