]> git.puffer.fish Git - matthieu/frr.git/commit
zebra: fix wrong nexthop check for kernel routes
authoranlan_cs <vic.lan@pica8.com>
Mon, 19 Jun 2023 02:21:28 +0000 (10:21 +0800)
committeranlan_cs <vic.lan@pica8.com>
Sun, 2 Jul 2023 02:30:09 +0000 (10:30 +0800)
commit098519caf8836f1bb0df9568ecd5daa5b4d5140b
tree2d9d24d86401eb5db3f5efd2aecd77cf27016288
parentcaf896d6ef18d917a9b9cee9cb48719ea9757e37
zebra: fix wrong nexthop check for kernel routes

When changing one interface's vrf, the kernel routes are wrongly kept
in old vrf.  Finally, the forwarding table in that old vrf can't forward
traffic correctly for those residual entries.

Follow these steps to make this problem happen:
( Firstly, "x1" interface of default vrf is with address of "6.6.6.6/24". )

```
anlan# ip route add 4.4.4.0/24 via 6.6.6.8 dev x1
anlan# ip link add vrf1 type vrf table 1
anlan# ip link set vrf1 up
anlan# ip link set x1 master vrf1
```

Then check `show ip route`, the route of "4.4.4.0/24" is still selected
in default vrf.

If the interface goes down, the kernel routes will be reevaluated.  Those
kernel routes with active interface of nexthop can be kept no change, it
is a fast path.  Otherwise, it enters into slow path to do careful examination
on this nexthop.

After the interface's vrf had been changed into new vrf, the down message of
this interface came.  It means the interface is not in old vrf although it
still exists during that checking, so the kernel routes should be dropped
after this nexthop matching against a default route in slow path. But, in
current code they are wrongly kept in fast path for not checking vrf.

So, modified the checking active nexthop with vrf comparision for the interface
during reevaluation.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
zebra/zebra_nhg.c