diff options
Diffstat (limited to 'zebra')
| -rw-r--r-- | zebra/interface.c | 2 | ||||
| -rw-r--r-- | zebra/zebra_nhg.c | 2 | ||||
| -rw-r--r-- | zebra/zebra_rib.c | 2 | 
3 files changed, 4 insertions, 2 deletions
diff --git a/zebra/interface.c b/zebra/interface.c index f7fd112cd4..1c86a6a5c7 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -972,6 +972,8 @@ void if_up(struct interface *ifp, bool install_connected)  	event_ignore_late_timer(zif->speed_update);  	if_addr_wakeup(ifp); + +	rib_update_handle_vrf_all(RIB_UPDATE_KERNEL, ZEBRA_ROUTE_KERNEL);  }  /* Interface goes down.  We have to manage different behavior of based diff --git a/zebra/zebra_nhg.c b/zebra/zebra_nhg.c index 1519246c17..e61c158ca9 100644 --- a/zebra/zebra_nhg.c +++ b/zebra/zebra_nhg.c @@ -2648,7 +2648,7 @@ static unsigned nexthop_active_check(struct route_node *rn,  		ifp = if_lookup_by_index(nexthop->ifindex, nexthop->vrf_id); -		if (ifp && ifp->vrf->vrf_id == vrf_id && if_is_up(ifp)) { +		if (ifp && ifp->vrf->vrf_id == vrf_id && if_is_up(ifp) && if_is_operative(ifp)) {  			SET_FLAG(nexthop->flags, NEXTHOP_FLAG_ACTIVE);  			goto skip_check;  		} diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index 51458e4e84..0226c355c8 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -1421,7 +1421,7 @@ static void rib_process(struct route_node *rn)  		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) +	else if (old_fib && !RIB_SYSTEM_ROUTE(old_fib))  		rib_process_del_fib(zvrf, rn, old_fib);  	/* Remove all RE entries queued for removal */  | 
