From: Pooja Jagadeesh Doijode Date: Mon, 10 Apr 2023 23:03:23 +0000 (-0700) Subject: zebra: Install directly connected route after interface flap X-Git-Tag: base_9.0~191^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=e25a0b138a196c7daf389989ebffbd09d345cd53;p=matthieu%2Ffrr.git zebra: Install directly connected route after interface flap Issue: After vlan flap, zebra was not marking the selected/best route as installed. As a result, when a static route was configured with nexthop as directly connected interface's(vlan) IP, the static route was not being installed in the kernel since its nexthop was unresolved. The nexthop was marked unresolved because zebra failed to mark the best route as installed after interface flap. This was happening because, in dplane_route_update_internal() if the old and new context type, and nexthop group id are the same, then zebra doesn't send down a route replace request to kernel. But, the installed (ROUTE_ENTRY_INSTALLED) flag is set when zebra receives a response from kernel. Since the request to kernel was being skipped for the route entry, installed flag was not being set Fix: In dplane_route_update_internal() if the old and new context type, and nexthop group id are the same, then before returning, installed flag will be set on the route-entry if it's not set already. Signed-off-by: Pooja Jagadeesh Doijode --- diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c index fb1ebc6827..4a4fcd2df2 100644 --- a/zebra/zebra_dplane.c +++ b/zebra/zebra_dplane.c @@ -3745,6 +3745,11 @@ dplane_route_update_internal(struct route_node *rn, NEXTHOP_FLAG_FIB); } + if ((op == DPLANE_OP_ROUTE_UPDATE) && old_re && re && + (old_re != re) && + !CHECK_FLAG(re->status, ROUTE_ENTRY_INSTALLED)) + SET_FLAG(re->status, ROUTE_ENTRY_INSTALLED); + dplane_ctx_free(&ctx); return ZEBRA_DPLANE_REQUEST_SUCCESS; }