diff options
Diffstat (limited to 'zebra/zebra_rib.c')
| -rw-r--r-- | zebra/zebra_rib.c | 54 |
1 files changed, 6 insertions, 48 deletions
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index fa8b5d400a..335cc8294c 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -1128,8 +1128,6 @@ static void rib_process(struct route_node *rn) re->status, re->flags, re->distance, re->metric); - UNSET_FLAG(re->status, ROUTE_ENTRY_NEXTHOPS_CHANGED); - /* Currently selected re. */ if (CHECK_FLAG(re->flags, ZEBRA_FLAG_SELECTED)) { assert(old_selected == NULL); @@ -1364,6 +1362,7 @@ static void zebra_rib_fixup_system(struct route_node *rn) continue; SET_FLAG(re->status, ROUTE_ENTRY_INSTALLED); + UNSET_FLAG(re->status, ROUTE_ENTRY_QUEUED); for (ALL_NEXTHOPS(re->ng, nhop)) { if (CHECK_FLAG(nhop->flags, NEXTHOP_FLAG_RECURSIVE)) @@ -1775,7 +1774,7 @@ static void rib_process_result(struct zebra_dplane_ctx *ctx) /* Redistribute */ redistribute_update(dest_pfx, src_pfx, - re, NULL); + re, old_re); } /* @@ -1927,6 +1926,9 @@ static void rib_process_dplane_notify(struct zebra_dplane_ctx *ctx) goto done; } + /* Ensure we clear the QUEUED flag */ + UNSET_FLAG(re->status, ROUTE_ENTRY_QUEUED); + /* Is this a notification that ... matters? We only really care about * the route that is currently selected for installation. */ @@ -1991,7 +1993,7 @@ static void rib_process_dplane_notify(struct zebra_dplane_ctx *ctx) dplane_ctx_get_vrf(ctx), dest_str); /* We expect this to be the selected route, so we want - * to tell others about this transistion. + * to tell others about this transition. */ SET_FLAG(re->status, ROUTE_ENTRY_INSTALLED); @@ -2967,50 +2969,6 @@ void rib_update_table(struct route_table *table, rib_update_event_t event) RIB_ROUTE_ANY_QUEUED)) continue; switch (event) { - case RIB_UPDATE_IF_CHANGE: - /* Examine all routes that won't get processed by the - * protocol or - * triggered by nexthop evaluation (NHT). This would be - * system, - * kernel and certain static routes. Note that NHT will - * get - * triggered upon an interface event as connected routes - * always - * get queued for processing. - */ - RNODE_FOREACH_RE_SAFE (rn, re, next) { - struct nexthop *nh; - - if (re->type != ZEBRA_ROUTE_SYSTEM - && re->type != ZEBRA_ROUTE_KERNEL - && re->type != ZEBRA_ROUTE_CONNECT - && re->type != ZEBRA_ROUTE_STATIC) - continue; - - if (re->type != ZEBRA_ROUTE_STATIC) { - SET_FLAG(re->status, - ROUTE_ENTRY_CHANGED); - rib_queue_add(rn); - continue; - } - - for (nh = re->ng.nexthop; nh; nh = nh->next) - if (!(nh->type == NEXTHOP_TYPE_IPV4 - || nh->type == NEXTHOP_TYPE_IPV6)) - break; - - /* If we only have nexthops to a - * gateway, NHT will - * take care. - */ - if (nh) { - SET_FLAG(re->status, - ROUTE_ENTRY_CHANGED); - rib_queue_add(rn); - } - } - break; - case RIB_UPDATE_RMAP_CHANGE: case RIB_UPDATE_OTHER: /* Right now, examine all routes. Can restrict to a |
