From b8ecfc0e978335c70fe9143b8b30604c5fa6300d Mon Sep 17 00:00:00 2001 From: anlan_cs Date: Fri, 12 Jul 2024 17:03:03 +0800 Subject: [PATCH] zebra: fix missing static routes Use `vtysh` with this input file: ``` ip route A nh1 ip route A nh2 ip route B nh1 ip route B nh2 ``` When running "ip route B" with "nh1" and "nh2", the procedure maybe is: 1) Create the two nexthops: "nh1" and "nh2". 2) Register "nh1" with `static_zebra_nht_register()`, then the states of both "nh1" and "nht2" are set to "STATIC_SENT_TO_ZEBRA". 3) Register "nh2" with `static_zebra_nht_register()`, then only the routes with nexthop of "STATIC_START" will be sent to zebra. So, send the routes with the nexthop of "STATIC_SENT_TO_ZEBRA" to zebra. Signed-off-by: anlan_cs (cherry picked from commit 4518d386f7683289b079708fcdb0c42ced4754d9) --- staticd/static_zebra.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/staticd/static_zebra.c b/staticd/static_zebra.c index 6abbdadc085d..beecd1e061bb 100644 --- a/staticd/static_zebra.c +++ b/staticd/static_zebra.c @@ -346,7 +346,8 @@ void static_zebra_nht_register(struct static_nexthop *nh, bool reg) /* refresh with existing data */ afi_t afi = prefix_afi(&lookup.nh); - if (nh->state == STATIC_NOT_INSTALLED) + if (nh->state == STATIC_NOT_INSTALLED || + nh->state == STATIC_SENT_TO_ZEBRA) nh->state = STATIC_START; static_nht_update(&rn->p, &nhtd->nh, nhtd->nh_num, afi, si->safi, nh->nh_vrf_id);