The nl batch buffer was destroyed too early when a netns was
terminated. Now freeing the buffer later in router_terminate allows
netlink messages to be still processed.
Signed-off-by: Christopher Dziomba <christopher.dziomba@telekom.de>
Donald Sharp [Mon, 28 Apr 2025 18:05:28 +0000 (14:05 -0400)]
*: Allow returns to work with --enable-undefined-behavior
If you have undefined behavior compilation checking gcc
starts to complain about a bunch of places that do not
have return's. When most of them actually do and we
have the assert's to prove it. I'm just doing this
to make the compiler happy for me, so I can continue
to do work.
An additional VRF, 102, is introduced on both routers, importing
r1 routes from VRF 101 into VRF 102 on r2 and vice versa (both
on r2, because r1 is in netns mode and can not use route import).
RMACs and ping (from VRF 101 to VRF 102 on r1, going through r2) is
then checked.
All RMACs are created deterministically, using
52:54:00:00:<router>:<vrf> to ease debugging and checks.
Signed-off-by: Christopher Dziomba <christopher.dziomba@telekom.de>
zebra: use nexthop instead of route vrf_id for EVPN
Today zebra tracks EVPN vtep_ips in the L3-VNI of the route_entry.
Leaking routes in bgpd and using different RMACs on the remote side
for different L3-VNIs for a single VTEP leads to updates in the leak
destination VRF which is not desired. Zebra gets the source VRF in
vrf_id of the nexthops. This nexthop vrf_id is now used for adding/
updating/deleting the l3vni nexthop.
Signed-off-by: Christopher Dziomba <christopher.dziomba@telekom.de>
Problem:
Zebra crashed while going down. This happened because zebra was
trying to process a new client accept request after closing ZAPI's
listener socket zsock and setting it to -1.
Fix:
Skip rescheduling zserv_accept() and accepting a new client if global
ZAPI listener socket FD, zsock is already closed and set to -1.
Also use global ZAPI listener socket FD zsock in zserv_accept() instead
of using a copy of zsock.
Louis Scalbert [Thu, 24 Apr 2025 09:06:10 +0000 (11:06 +0200)]
tests: bgp_evpn_rt5 test match evpn vni
0d5bd461af commit was supposed to check that route-map "match evpn vni"
was working by adding a r3 router that injected prefixes with VNI 102.
A route-map on r1 was filtering r3 prefixes. However, the test was
working even after removing r3. A check was needed without the route-map
to check that r3 prefixes were received before applying the filter.
Test "match evpn vni" route-map filtering applied to r2 input instead.
Fixes: 0d5bd461af ("topotests: bgp_evpn_rt5, add test with match evpn vni command") Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
Donald Sharp [Sun, 13 Apr 2025 17:47:00 +0000 (13:47 -0400)]
tests: Add a simple ssmping test to the system
There are no tests that attempt to cover the ssmpingd
functionality in pimd. Add a very very simple test case.
This test requires the ssmping package to be installed.
Signed-off-by: Donald Sharp <donaldsharp72@gmail.com>
Donald Sharp [Sun, 13 Apr 2025 16:47:44 +0000 (12:47 -0400)]
pimd: Allow ssmpingd command to work for pim
Commit: 1c56018f66723a5ea478f0d6607a8f81f4d6ada5
broke the ssmpingd implementation in pim. This
is because it just completely botched the bind
to the correct port and address.
Signed-off-by: Donald Sharp <donaldsharp72@gmail.com>
Donald Sharp [Wed, 23 Apr 2025 16:00:55 +0000 (12:00 -0400)]
zebra: Display nhg's afi as `No Afi`
When displaying `show nexthop-group rib` the afi
displayed for Nexthop Groups ( not singletons ) is
`bad-value` which while true to the specific of
the AFI it's not necessarily what we want to display
to the end operator. Add a wrapper function for
nhg's to do the right thing.
During vrf delete, the vxlan_info.work_list
linked list was deleted which is a global list
containing the SGs for all the VRFs.
If two vrfs are configured, vrf a and vrf b and
both has SGs assocaited with them which are
inserted in the vxlan_info.work_list. Now if
vrf a is deleted, it deletes the work_list also.
Due to this when any SG add or del comes for vrf b
it tries to access the work_list and crashes.
Fix
Delete the vxlan_info.work_list only when all the
VRFs are terminated and unset the vxlan_info.flags
so if new add cmd comes it re-allocates the work_list.
Removal of IPv6 was already tested in bgp_evpn_rt5 topotest, however
IPv4 was not tested afterwards. This now removes IPv6 routes first,
then adds them back and removes IPv4 afterwards, waiting for
convergence everytime.
Signed-off-by: Christopher Dziomba <christopher.dziomba@telekom.de>
zebra rmac has a nh_list which tracks the assigned VTEP IPs to RMACs.
It can also receive IPv6 encoded IPv4 addresses as VTEPs. Changing/
Installing the RMAC into the Kernel is only important when the IPv4
address changes. However because nh_list is a nodup list used to
track usage or RMACs by VTEP IPs, both IP addresses (IPv4 and IPv6
encoded IPv4) should be written into it, as both could be removed
in l3vni_rmac_nh_list_nh_delete independently.
Signed-off-by: Christopher Dziomba <christopher.dziomba@telekom.de>
Petr Vaganov [Mon, 21 Apr 2025 15:52:24 +0000 (20:52 +0500)]
bgpd: Fix deref after free in bgp_vrf_unlink
Found by the static analyzer Svace (ISP RAS): DEREF_AFTER_FREE -
Pointer '&bgp->vrf_id' is dereferenced after the referenced memory
was deallocated by passing as 1st parameter to function 'bgp_unlock'.
Signed-off-by: Petr Vaganov <petrvaganoff@gmail.com>
Donald Sharp [Fri, 18 Apr 2025 21:44:39 +0000 (17:44 -0400)]
zebra: Save event pointer for rib sweeping
The rib_sweep_route function when not doing graceful
restart does not attempt to save the event on the
t_rib_sweep pointer for shutdown. Prevent any
weird shenanigans by allowing shutdown to clean
up the rib_sweep_route event.
Signed-off-by: Donald Sharp <donaldsharp72@gmail.com>
Donald Sharp [Fri, 18 Apr 2025 17:50:33 +0000 (13:50 -0400)]
bgpd: ensure that bgp_generate_updgrp_packets shares nicely
The bgp_generate_updgrp_packet function will attempt to write
up to `write quanta 64` packets at one time. This is extremely
expensive at scale and is causing CPU_HOGS as well as STARVATION
messages. Check to see if we should yield the CPU to allow
something else in BGP to continue working.
David Lamparter [Wed, 16 Apr 2025 10:44:38 +0000 (12:44 +0200)]
bgpd: fix misused rfapi conditional
bgpd/bgpd.c:8975:5: error: "ENABLE_BGP_VNC" is not defined, evaluates to 0 [-Werror=undef]
8975 | #if ENABLE_BGP_VNC
Fixes: FRRouting#18546 Fixes: 1629c05924fe9 ("bgpd: rfapi: track outstanding rib and import timers, free mem at exit") Cc: G. Paul Ziemba <paulz@labn.net> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Donald Sharp [Wed, 9 Apr 2025 15:20:49 +0000 (11:20 -0400)]
tests: Add ability to test ipv6 ra pref64 extension
This is the test to ensure that the ipv6 ra pref64
extension is working properly..
This is a very simple test. Enables the feature
on r1 to send out the ra's once every 3 seconds
with the feature turned on. Then on r2 ensure
that we see the ra with the appropriate values.