From: Mark Stapp Date: Wed, 20 Mar 2019 18:44:29 +0000 (-0400) Subject: zebra: set nexthop install state more accurately X-Git-Tag: base_7.2~300^2~10 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=5695d9ac5d4095872218e74c203fd7f023833713;p=matthieu%2Ffrr.git zebra: set nexthop install state more accurately When setting route nexthops' installation state based on a dataplane context struct, unset the installed state if a nexthop was not present in the dataplane context. Signed-off-by: Mark Stapp --- diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index 13799ac890..977316ef7c 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -1858,31 +1858,30 @@ static int rib_update_re_from_ctx(struct route_entry *re, /* Update zebra nexthop FIB flag for each * nexthop that was installed. */ - for (ALL_NEXTHOPS_PTR(dplane_ctx_get_ng(ctx), - ctx_nexthop)) { + for (ALL_NEXTHOPS(re->ng, nexthop)) { - if (!re) + if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_RECURSIVE)) continue; - for (ALL_NEXTHOPS(re->ng, nexthop)) { + for (ALL_NEXTHOPS_PTR(dplane_ctx_get_ng(ctx), + ctx_nexthop)) { + if (nexthop_same(ctx_nexthop, nexthop)) break; } - if (nexthop == NULL) - continue; - - if (CHECK_FLAG(nexthop->flags, - NEXTHOP_FLAG_RECURSIVE)) + /* If the FIB doesn't know about the nexthop, + * it's not installed + */ + if (ctx_nexthop == NULL) { + UNSET_FLAG(nexthop->flags, NEXTHOP_FLAG_FIB); continue; + } - if (CHECK_FLAG(ctx_nexthop->flags, - NEXTHOP_FLAG_FIB)) - SET_FLAG(nexthop->flags, - NEXTHOP_FLAG_FIB); + if (CHECK_FLAG(ctx_nexthop->flags, NEXTHOP_FLAG_FIB)) + SET_FLAG(nexthop->flags, NEXTHOP_FLAG_FIB); else - UNSET_FLAG(nexthop->flags, - NEXTHOP_FLAG_FIB); + UNSET_FLAG(nexthop->flags, NEXTHOP_FLAG_FIB); } /* Redistribute */