From: Mark Stapp Date: Mon, 10 Feb 2020 18:12:58 +0000 (-0500) Subject: zebra: fix handling of failed route install via notification X-Git-Tag: base_7.4~21^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=a126f120039dd27485c17843087486019923ca80;p=matthieu%2Ffrr.git zebra: fix handling of failed route install via notification An async route notification can indicate that installation has failed, but the handling code wasn't dealing with that possibility correctly. Signed-off-by: Mark Stapp --- diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index 2dbe907751..b979de9ab7 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -1334,19 +1334,15 @@ static bool rib_update_re_from_ctx(struct route_entry *re, * we use the fib-specific nexthop-group to record the actual FIB * status. */ + matched = false; + ctxnhg = dplane_ctx_get_ng(ctx); /* Check both fib group and notif group for equivalence. * * Let's assume the nexthops are ordered here to save time. */ - if (nexthop_group_equal(&re->fib_ng, dplane_ctx_get_ng(ctx)) == false) { - if (IS_ZEBRA_DEBUG_RIB_DETAILED) - zlog_debug( - "%s(%u):%s update_from_ctx: notif nh and fib nh mismatch", - VRF_LOGNAME(vrf), re->vrf_id, dest_str); - - matched = false; - } else + if (re->fib_ng.nexthop && ctxnhg->nexthop && + nexthop_group_equal(&re->fib_ng, ctxnhg)) matched = true; /* If the new FIB set matches the existing FIB set, we're done. */ @@ -1387,7 +1383,7 @@ static bool rib_update_re_from_ctx(struct route_entry *re, */ matched = true; - ctx_nexthop = dplane_ctx_get_ng(ctx)->nexthop; + ctx_nexthop = ctxnhg->nexthop; /* Nothing installed - we can skip some of the checking/comparison * of nexthops. @@ -1471,8 +1467,6 @@ no_nexthops: VRF_LOGNAME(vrf), re->vrf_id, dest_str, (changed_p ? "true" : "false")); - ctxnhg = dplane_ctx_get_ng(ctx); - if (ctxnhg->nexthop) copy_nexthops(&(re->fib_ng.nexthop), ctxnhg->nexthop, NULL); else {