summaryrefslogtreecommitdiff
path: root/staticd
diff options
context:
space:
mode:
authoranlan_cs <vic.lan@pica8.com>2024-07-12 17:03:03 +0800
committeranlan_cs <vic.lan@pica8.com>2024-07-12 22:23:42 +0800
commit4518d386f7683289b079708fcdb0c42ced4754d9 (patch)
tree751631f72f7d950be4f0c17324a6ef98b455e03b /staticd
parentebf05b4ee18a94086a15207f14b00b05df5a5dde (diff)
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 <vic.lan@pica8.com>
Diffstat (limited to 'staticd')
-rw-r--r--staticd/static_zebra.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/staticd/static_zebra.c b/staticd/static_zebra.c
index c4efc14a9d..420ed7903b 100644
--- a/staticd/static_zebra.c
+++ b/staticd/static_zebra.c
@@ -341,7 +341,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);