]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: fix missing static routes 16389/head
authoranlan_cs <vic.lan@pica8.com>
Fri, 12 Jul 2024 09:03:03 +0000 (17:03 +0800)
committerMergify <37929162+mergify[bot]@users.noreply.github.com>
Mon, 15 Jul 2024 18:46:25 +0000 (18:46 +0000)
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>
(cherry picked from commit 4518d386f7683289b079708fcdb0c42ced4754d9)

staticd/static_zebra.c

index 6abbdadc085dc9ac5c21a5f54916485247759cd6..beecd1e061bb7e46ff0a82a2f18c00576b9ac83a 100644 (file)
@@ -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);