zebra: set SELECTED flag in rib_process

Set SELECTED re immediately in rib_process, without expecting
that fib install has completed. Remove premature redistribute
call also.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
This commit is contained in:
Mark Stapp 2018-06-27 17:13:26 -04:00
parent ae2992851b
commit 8cb41cd624

View File

@ -1839,22 +1839,12 @@ static void rib_process(struct route_node *rn)
else if (old_fib)
rib_process_del_fib(zvrf, rn, old_fib);
/* Redistribute SELECTED entry */
/* Update SELECTED entry */
if (old_selected != new_selected || selected_changed) {
struct nexthop *nexthop = NULL;
/* Check if we have a FIB route for the destination, otherwise,
* don't redistribute it */
if (new_fib) {
for (ALL_NEXTHOPS(new_fib->ng, nexthop)) {
if (CHECK_FLAG(nexthop->flags,
NEXTHOP_FLAG_FIB)) {
break;
}
}
if (new_selected) {
SET_FLAG(new_selected->flags, ZEBRA_FLAG_SELECTED);
}
if (!nexthop)
new_selected = NULL;
if (new_selected && new_selected != new_fib) {
nexthop_active_update(rn, new_selected, 1);
@ -1868,14 +1858,6 @@ static void rib_process(struct route_node *rn)
UNSET_FLAG(old_selected->flags,
ZEBRA_FLAG_SELECTED);
}
if (new_selected) {
/* Install new or replace existing redistributed entry
*/
SET_FLAG(new_selected->flags, ZEBRA_FLAG_SELECTED);
redistribute_update(p, src_p, new_selected,
old_selected);
}
}
/* Remove all RE entries queued for removal */