![]() PR#13413 introduces reinstall mechanism, but there is problem with the route leak scenario. With route leak configuration: ( `x1` and `x2` are binded to `vrf1` ) ``` vrf vrf2 ip route 75.75.75.75/32 77.75.1.75 nexthop-vrf vrf1 ip route 75.75.75.75/32 77.75.2.75 nexthop-vrf vrf1 exit-vrf ``` Firstly, all are ok. But after `x1` is set down and up ( The interval between the down and up operations should be less than 180 seconds. ) , `x1` is lost from the nexthop group: ``` anlan# ip nexthop id 121 group 122/123 proto zebra id 122 via 77.75.1.75 dev x1 scope link proto zebra id 123 via 77.75.2.75 dev x2 scope link proto zebra anlan# ip route show table 2 75.75.75.75 nhid 121 proto 196 metric 20 nexthop via 77.75.1.75 dev x1 weight 1 nexthop via 77.75.2.75 dev x2 weight 1 anlan# ip link set dev x1 down anlan# ip link set dev x1 up anlan# ip route show table 2 <- Wrong, one nexthop lost from group 75.75.75.75 nhid 121 via 77.75.2.75 dev x2 proto 196 metric 20 anlan# ip nexthop id 121 group 123 proto zebra id 122 via 77.75.1.75 dev x1 scope link proto zebra id 123 via 77.75.2.75 dev x2 scope link proto zebra anlan# show ip route vrf vrf2 <- Still ok VRF vrf2: S>* 75.75.75.75/32 [1/0] via 77.75.1.75, x1 (vrf vrf1), weight 1, 00:00:05 * via 77.75.2.75, x2 (vrf vrf1), weight 1, 00:00:05 ``` From the impact on kernel: The `nh->type` of `id 122` is *always* `NEXTHOP_TYPE_IPV4` in the route leak case. Then, `nexthop_is_ifindex_type()` introduced by commit `5bb877` always returns `false`, so its dependents can't be reinstalled. After `x1` is down, there is only `id 123` in the group of `id 121`. So, Finally `id 121` remains unchanged after `x1` is up, i.e., `id 122` is not added to the group even it is reinstalled itself. From the impact on zebra: The `show ip route vrf vrf2` is still ok because the `id`s are reused/reinstalled successfully within 180 seconds after `x1` is down and up. The group of `id 121` is with old `NEXTHOP_GROUP_INSTALLED` flag, and it is still the group of `id 122` and `id 123` as before. In this way, kernel and zebra have become out of sync. The `nh->type` of `id 122` should be adjusted to `NEXTHOP_TYPE_IPV4_IFINDEX` after nexthop resolved. This commit is for doing this to make that reinstall mechanism work. Signed-off-by: anlan_cs <anlan_cs@tom.com> |
||
---|---|---|
.github | ||
alpine | ||
babeld | ||
bfdd | ||
bgpd | ||
debian | ||
doc | ||
docker | ||
eigrpd | ||
fpm | ||
gdb | ||
grpc | ||
include | ||
isisd | ||
ldpd | ||
lib | ||
m4 | ||
mgmtd | ||
mlag | ||
nhrpd | ||
ospf6d | ||
ospfclient | ||
ospfd | ||
pathd | ||
pbrd | ||
pceplib | ||
pimd | ||
pkgsrc | ||
python | ||
qpb | ||
redhat | ||
ripd | ||
ripngd | ||
sharpd | ||
snapcraft | ||
staticd | ||
tests | ||
tools | ||
vrrpd | ||
vtysh | ||
watchfrr | ||
yang | ||
zebra | ||
.clang-format | ||
.dockerignore | ||
.flake8 | ||
.git-blame-ignore-revs | ||
.gitignore | ||
.isort.cfg | ||
.pylintrc | ||
.travis.yml | ||
bootstrap.sh | ||
buildtest.sh | ||
config.version.in | ||
configure.ac | ||
COPYING | ||
Makefile.am | ||
README.md | ||
stamp-h.in | ||
version.h |
FRRouting
FRR is free software that implements and manages various IPv4 and IPv6 routing protocols. It runs on nearly all distributions of Linux and BSD and supports all modern CPU architectures.
FRR currently supports the following protocols:
- BGP
- OSPFv2
- OSPFv3
- RIPv1
- RIPv2
- RIPng
- IS-IS
- PIM-SM/MSDP
- LDP
- BFD
- Babel
- PBR
- OpenFabric
- VRRP
- EIGRP (alpha)
- NHRP (alpha)
Installation & Use
For source tarballs, see the releases page.
For Debian and its derivatives, use the APT repository at https://deb.frrouting.org/.
Instructions on building and installing from source for supported platforms may be found in the developer docs.
Once installed, please refer to the user guide for instructions on use.
Community
The FRRouting email list server is located here and offers the following public lists:
Topic | List |
---|---|
Development | dev@lists.frrouting.org |
Users & Operators | frog@lists.frrouting.org |
Announcements | announce@lists.frrouting.org |
For chat, we currently use Slack. You can join by clicking the "Slack" link under the Participate section of our website.
Contributing
FRR maintains developer's documentation which contains the project workflow and expectations for contributors. Some technical documentation on project internals is also available.
We welcome and appreciate all contributions, no matter how small!
Security
To report security issues, please use our security mailing list:
security [at] lists.frrouting.org