diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index fcac3328c9..84c78a3692 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -1255,14 +1255,6 @@ static void rib_process(struct route_node *rn) bool selected_changed = new_selected && CHECK_FLAG(new_selected->status, ROUTE_ENTRY_CHANGED); - /* Update fib according to selection results */ - if (new_fib && old_fib) - rib_process_update_fib(zvrf, rn, old_fib, new_fib); - else if (new_fib) - rib_process_add_fib(zvrf, rn, new_fib); - else if (old_fib) - rib_process_del_fib(zvrf, rn, old_fib); - /* Update SELECTED entry */ if (old_selected != new_selected || selected_changed) { @@ -1290,6 +1282,14 @@ static void rib_process(struct route_node *rn) } } + /* Update fib according to selection results */ + if (new_fib && old_fib) + rib_process_update_fib(zvrf, rn, old_fib, new_fib); + else if (new_fib) + rib_process_add_fib(zvrf, rn, new_fib); + else if (old_fib) + rib_process_del_fib(zvrf, rn, old_fib); + /* Remove all RE entries queued for removal */ RNODE_FOREACH_RE_SAFE (rn, re, next) { if (CHECK_FLAG(re->status, ROUTE_ENTRY_REMOVED)) {