Louis Scalbert [Thu, 22 Aug 2024 09:12:29 +0000 (11:12 +0200)]
zebra: remove vrf route entries at vrf disabling
This is the continuation of the previous commit.
When a VRF is deleted, the kernel retains only its own routing entries
in the former VRF table and removes all others.
This change ensures that routing entries created by FRR daemons are also
removed from the former zebra VRF table when the VRF is disabled.
To test:
> echo "100 my_table" | tee -a /etc/iproute2/rt_tables
> ip l add du0 type dummy
> ifconfig du0 192.168.0.1/24 up
> ip route add blackhole default table 100
> ip route show table 100
> ip l add red type vrf table 100
> ip l set du0 master red
> vtysh -c 'configure' -c 'vrf red' -c 'ip route 10.0.0.0/24 192.168.0.254'
> vtysh -c 'show ip route table 100'
> sleep 0.1
> ip l del red
> sleep 0.1
> vtysh -c 'show ip route table 100'
> ip l add red type vrf table 100
> ip l set du0 master red
> vtysh -c 'configure' -c 'vrf red' -c 'ip route 10.0.0.0/24 192.168.0.254'
> vtysh -c 'show ip route table 100'
> sleep 0.1
> ip l del red
> sleep 0.1
> vtysh -c 'show ip route table 100'
Fixes: d8612e6 ("zebra: Track tables allocated by vrf and cleanup") Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
Louis Scalbert [Wed, 20 Nov 2024 15:33:55 +0000 (16:33 +0100)]
zebra: fix table heap-after-free crash
Fix a heap-after-free that causes zebra to crash even without
address-sanitizer. To reproduce:
> echo "100 my_table" | tee -a /etc/iproute2/rt_tables
> ip route add blackhole default table 100
> ip route show table 100
> ip l add red type vrf table 100
> ip l del red
> ip route del blackhole default table 100
Zebra manages routing tables for all existing Linux RT tables,
regardless of whether they are assigned to a VRF interface. When a table
is not assigned to any VRF, zebra arbitrarily assigns it to the default
VRF, even though this is not strictly accurate (the code expects this
behavior).
When an RT table is created after a VRF, zebra correctly assigns the
table to the VRF. However, if a VRF interface is assigned to an existing
RT table, zebra does not update the table owner, which remains as the
default VRF. As a result, existing routing entries remain under the
default VRF, while new entries are correctly assigned to the VRF. The
VRF mismatch is unexpected in the code and creates crashes and memory
related issues.
Furthermore, Linux does not automatically delete RT tables when they are
unassigned from a VRF. It is incorrect to delete these tables from zebra.
Instead, at VRF disabling, do not release the table but reassign it to
the default VRF. At VRF enabling, change the table owner back to the
appropriate VRF.
> ==2866266==ERROR: AddressSanitizer: heap-use-after-free on address 0x606000154f54 at pc 0x7fa32474b83f bp 0x7ffe94f67d90 sp 0x7ffe94f67d88
> READ of size 1 at 0x606000154f54 thread T0
> #0 0x7fa32474b83e in rn_hash_node_const_find lib/table.c:28
> #1 0x7fa32474bab1 in rn_hash_node_find lib/table.c:28
> #2 0x7fa32474d783 in route_node_get lib/table.c:283
> #3 0x7fa3247328dd in srcdest_rnode_get lib/srcdest_table.c:231
> #4 0x55b0e4fa8da4 in rib_find_rn_from_ctx zebra/zebra_rib.c:1957
> #5 0x55b0e4fa8e31 in rib_process_result zebra/zebra_rib.c:1988
> #6 0x55b0e4fb9d64 in rib_process_dplane_results zebra/zebra_rib.c:4894
> #7 0x7fa32476689c in event_call lib/event.c:1996
> #8 0x7fa32463b7b2 in frr_run lib/libfrr.c:1232
> #9 0x55b0e4e6c32a in main zebra/main.c:526
> #10 0x7fa32424fd09 in __libc_start_main ../csu/libc-start.c:308
> #11 0x55b0e4e2d649 in _start (/usr/lib/frr/zebra+0x1a1649)
>
> 0x606000154f54 is located 20 bytes inside of 56-byte region [0x606000154f40,0x606000154f78)
> freed by thread T0 here:
> #0 0x7fa324ca9b6f in __interceptor_free ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:123
> #1 0x7fa324668d8f in qfree lib/memory.c:130
> #2 0x7fa32474c421 in route_table_free lib/table.c:126
> #3 0x7fa32474bf96 in route_table_finish lib/table.c:46
> #4 0x55b0e4fbca3a in zebra_router_free_table zebra/zebra_router.c:191
> #5 0x55b0e4fbccea in zebra_router_release_table zebra/zebra_router.c:214
> #6 0x55b0e4fd428e in zebra_vrf_disable zebra/zebra_vrf.c:219
> #7 0x7fa32476fabf in vrf_disable lib/vrf.c:326
> #8 0x7fa32476f5d4 in vrf_delete lib/vrf.c:231
> #9 0x55b0e4e4ad36 in interface_vrf_change zebra/interface.c:1478
> #10 0x55b0e4e4d5d2 in zebra_if_dplane_ifp_handling zebra/interface.c:1949
> #11 0x55b0e4e4fb89 in zebra_if_dplane_result zebra/interface.c:2268
> #12 0x55b0e4fb9f26 in rib_process_dplane_results zebra/zebra_rib.c:4954
> #13 0x7fa32476689c in event_call lib/event.c:1996
> #14 0x7fa32463b7b2 in frr_run lib/libfrr.c:1232
> #15 0x55b0e4e6c32a in main zebra/main.c:526
> #16 0x7fa32424fd09 in __libc_start_main ../csu/libc-start.c:308
>
> previously allocated by thread T0 here:
> #0 0x7fa324caa037 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154
> #1 0x7fa324668c4d in qcalloc lib/memory.c:105
> #2 0x7fa32474bf33 in route_table_init_with_delegate lib/table.c:38
> #3 0x7fa32474e73c in route_table_init lib/table.c:512
> #4 0x55b0e4fbc353 in zebra_router_get_table zebra/zebra_router.c:137
> #5 0x55b0e4fd4da0 in zebra_vrf_table_create zebra/zebra_vrf.c:358
> #6 0x55b0e4fd3d30 in zebra_vrf_enable zebra/zebra_vrf.c:140
> #7 0x7fa32476f9b2 in vrf_enable lib/vrf.c:286
> #8 0x55b0e4e4af76 in interface_vrf_change zebra/interface.c:1533
> #9 0x55b0e4e4d612 in zebra_if_dplane_ifp_handling zebra/interface.c:1968
> #10 0x55b0e4e4fb89 in zebra_if_dplane_result zebra/interface.c:2268
> #11 0x55b0e4fb9f26 in rib_process_dplane_results zebra/zebra_rib.c:4954
> #12 0x7fa32476689c in event_call lib/event.c:1996
> #13 0x7fa32463b7b2 in frr_run lib/libfrr.c:1232
> #14 0x55b0e4e6c32a in main zebra/main.c:526
> #15 0x7fa32424fd09 in __libc_start_main ../csu/libc-start.c:308
Fixes: d8612e6 ("zebra: Track tables allocated by vrf and cleanup") Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
Donald Sharp [Fri, 7 Mar 2025 23:35:53 +0000 (18:35 -0500)]
tests: Allow mgmtd and zebra to fully come up before other daemons
Currently the topotest infrastructure is starting up daemons
in mgmtd,zebra, staticd then everything else.
The problem that is happening, under heavy load, is that
zebra may not be fully started and when a daemon attempts
to connect to it, it will not be able to connect.
Some of the daemons do not have great retry mechanisms at all.
In addition our normal systemctl startup scripts actually
wait a small amount of time for zebra to be ready before
moving onto the other daemons.
Let's make topotests startup a tiny bit more nuanced
and have mgmtd fully up before starting up zebra.
Quentin Young [Wed, 5 Mar 2025 20:15:35 +0000 (12:15 -0800)]
doc: don't override automake builtin targets
Automake generates default targets for `info`, `html`, `pdf` and
corresponding `install-info` and `install-html` targets to install the
artifacts generated by those rules. Prior to this change we are
overriding those targets which generates a warning.
The automake targets are designed to automatically build texinfo sources
without requiring user-specified rules. We do not have texinfo sources
so this functionality is not in use, but we are still overriding the
built in targets which is considered poor form. Automake has facilities
to modify the built in targets in the form of `-local` rules; this patch
renames the rules we had defined to use the `-local` ones.
The resulting targets generated by Automake look like this:
html: html-am
html-am: html-local
i.e. the final `html` target generated when using `html-local` to define
our custom rules is identical to the one we get by overriding the built
in `html` target. The same goes for the others.
So, the only effect this patch has is suppressing the warnings and
bringing us in line with Automake best practice.
Martin Buck [Tue, 4 Mar 2025 13:24:33 +0000 (14:24 +0100)]
pimd: Fix PIM6 MLD VRF support (use recvmsg() pktinfo)
When receiving MLD messages, prefer pktinfo over msghdr.msg_name for
determining the source interface. The latter is just the VRF master
interface in case of VRF and we need the true interface the packet was
received on instead.
Signed-off-by: Martin Buck <mb-tmp-tvguho.pbz@gromit.dyndns.org>
Soumya Roy [Sat, 15 Feb 2025 02:13:37 +0000 (18:13 -0800)]
zebra: Bring up 514 BGP neighbor sessions
Issue:
When 514 inerfaces/neighbors are configured, it creates socket error,
"Cannot allocate memory", when back to back V6 RA messages are tried
to be sent over the socket. This prevents interface, to know its peer's
link local address. Socket error comes when 1) try to join ICMPv6 all
router multicast group, back to back for all interfaces 2)send back to
back RA for all interfaces
Fix:
1)For ICMPv6 join case, we check if the interface has already joined
all router group, if not try to join. On failure, retry joining after
random amount of time determined 1 ms to ICMPV6_JOIN_TIMER_EXP_MS(100 ms)
2) For RA issue case, batch sending of RA mesages using wheel timer
Testing:
Monitor BGP session running sh bgp summary command
Before fix:
r1# sh bgp summary
IPv4 Unicast Summary:
BGP router identifier 192.168.1.1, local AS number 1001 VRF default vrf-id 0
BGP table version 0
RIB entries 0, using 0 bytes of memory
Peers 515, using 12 MiB of memory
IPv4 Unicast Summary:
BGP router identifier 192.168.1.1, local AS number 1001 VRF default vrf-id 0
BGP table version 0
RIB entries 0, using 0 bytes of memory
Peers 515, using 12 MiB of memory
Rafael Zalamena [Tue, 4 Mar 2025 19:54:18 +0000 (16:54 -0300)]
configure.ac: fix sed failure on FreeBSD
Simplify the sed expression to make sure it works on all platforms.
The previous expression failed on FreeBSD and it caused the SNMP_LIBS
variable to be empty. When SNMP_LIBS is empty it will cause binaries
and/or libraries to not link against the correct libraries.
Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
bgpd: fix remove vpn aggregated prefix upon unconfiguration
When unconfiguring an aggregated prefix, the VPN prefix is not
removed. Fix this by refreshing the VPN leak when the aggregated route
is or is not available.
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
bgpd: fix export, and selects l3vpn aggregated prefix
On a L3VPN setup, an aggretated prefix can not be exported and selected.
The below example illustrates the 172.31.0.0/24 aggregated prefix, which
is valid as a VRF prefix, but invalid as a VPN prefix:
> r1# show bgp ipv4 vpn 172.31.0.0/24
> BGP routing table entry for 444:1:172.31.0.0/24, version 0
> not allocated
> Paths: (1 available, no best path)
> Not advertised to any peer
> Local, (aggregated by 65500 192.0.2.1)
> 0.0.0.0 from 0.0.0.0 (192.0.2.1) vrf vrf1(4) announce-nh-self
> Origin incomplete, metric 0, weight 32768, invalid, sourced,
local, atomic-aggregate
> Extended Community: RT:52:100
> Originator: 192.0.2.1
> Remote label: 101
> Last update: Mon Mar 3 14:35:04 2025
> r1# show bgp vrf vrf1 ipv4 172.31.0.0/24
> BGP routing table entry for 172.31.0.0/24, version 1
> Paths: (1 available, best #1, vrf vrf1)
> Not advertised to any peer
> Local, (aggregated by 65500 192.0.2.1)
> 0.0.0.0 from 0.0.0.0 (192.0.2.1)
> Origin incomplete, metric 0, weight 32768, valid, aggregated,
local, atomic-aggregate, best (First path received)
> Last update: Mon Mar 3 14:35:03 2025
> r1#
Actually, the aggregated prefix nexthop is considered, and 0.0.0.0 is
an invalid nexthop.
> r1# show bgp vrf vrf1 nexthop
> Current BGP nexthop cache:
> 0.0.0.0 invalid, #paths 1
> Is not Registered
> Last update: Thu Feb 13 18:33:43 2025
Fix this by considering the L3VPN prefix selected, if the VRF prefix
is selected too.
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
Olivier Dugeon [Mon, 3 Mar 2025 09:08:17 +0000 (10:08 +0100)]
isisd: Correct edge insertion into TED
Edges are not correctly linked to Vertices during LSP processing. In function
lsp_to_edge_cb(), once edge created or updated from the LSP TLVs, the code try
to link the edge to destination vertices. In case the revert edge is not found,
the code try to found a destination vertex to link to. But, the sys_id used
for this operation corresponds to the source vertex. As a result, the edge is
attached as source and destination of the vertex. When Traffic Engineering is
stopped, TED is deleted which result into a double free of the edge attributes.
This cause a crash when attempt to free extended admin groupi the second time.
This patch removed wrong code which link twice the edge to the source vertex.
tools: Fix `frr-reload.py` error related to `static-sids`
```
[...]
segment-routing
srv6
static-sids
sid fcbb:bbbb:1::/48 locator MAIN behavior uN
sid fcbb:bbbb:1:fe10::/64 locator MAIN behavior uDT4 vrf Vrf10
sid fcbb:bbbb:1:fe20::/64 locator MAIN behavior uDT6 vrf Vrf20
sid fcbb:bbbb:1:fe30::/64 locator MAIN behavior uDT46 vrf Vrf30
sid fcbb:bbbb:1:fe40::/64 locator MAIN behavior uA interface sr0 nexthop 2001::2
[...]
```
When the user has a configuration like the one above and runs the
command `frr-reload.py --reload`, the following error occurs:
```
[1129654|mgmtd] sending configuration
line 17: % Unknown command[76]: sid fcbb:bbbb:1::/48 locator MAIN behavior uN
line 23: % Unknown command[76]: sid fcbb:bbbb:1:fe10::/64 locator MAIN behavior uDT4 vrf Vrf10
line 29: % Unknown command[76]: sid fcbb:bbbb:1:fe20::/64 locator MAIN behavior uDT6 vrf Vrf20
line 35: % Unknown command[76]: sid fcbb:bbbb:1:fe30::/64 locator MAIN behavior uDT46 vrf Vrf30
line 41: % Unknown command[76]: sid fcbb:bbbb:1:fe40::/64 locator MAIN behavior uA interface sr0 nexthop 2001::2
```
The problem is that in `frr-reload-py` all commands that start a new
multi-line context must be included in the `ctx_keyword` dictionary.
However, the `static-sids` command is not part of the `ctx_keyword`
dictionary.
This commit fixes the problem by adding `static-sids` to `ctx_keyword`.
[...]
segment-routing
srv6
static-sids
sid fcbb:bbbb:1::/48 locator MAIN behavior uN
sid fcbb:bbbb:1:fe00::/64 locator MAIN behavior uDT46
[...]
When the user runs vtysh and executes the `no srv6` command, the
expectation is that staticd will deallocate all SIDs.
However, currently FRR does not behaves as expected. After the user
executes `no srv6`, the SIDs are still present.
The problem is that vtysh does not forward the `no srv6` command to
mgmtd/staticd.
The `no srv6` command is defined using the `DEFUN_YANG_NOSH` macro,
which instructs `xref2vtysh.py` to skip the `no srv6` command during
the generation of `vtysh_cmd.c`. As a result, vtysh is unaware that it
should forward the `no srv6` command to mgmtd/staticd.
This commit fixes the issue by replacing `DEFUN_YANG_NOSH` with
`DEFUN_YANG`. This change ensures that `xref2vtysh.py` includes the
`no srv6` command when generating `vtysh_cmd.c` and makes vtysh forward
the `no srv6` command to mgmtd/staticd.
Donald Sharp [Sun, 16 Feb 2025 00:56:54 +0000 (19:56 -0500)]
bgpd: Rename peer1 to just peer
The bgp_accept function was calling the existing
peer data structure peer1 for some reason. Let's
just call it peer instead of peer1.
Author's Note: I am changing the bgp_accept function
in this manner because I find it incredibly confusing
remembering what is what direction and all my other
attempts at getting this straight has caused real
problems. So I am resorting to doing really small
transformational changes at a time.
Donald Sharp [Sun, 16 Feb 2025 00:50:37 +0000 (19:50 -0500)]
bgpd: Call the doppelganger the doppelganger
Currently the code in bgp_accept is calling the
doppelganger `peer`. This is confusing with
peer and peer1. Let's just call it doppelganger.
Author's Note: I am changing the bgp_accept function
in this manner because I find it incredibly confusing
remembering what is what direction and all my other
attempts at getting this straight has caused real
problems. So I am resorting to doing really small
transformational changes at a time.
Donald Sharp [Sun, 16 Feb 2025 00:43:36 +0000 (19:43 -0500)]
bgpd: Call newly created dynamic_peer appropriately
The dynamic peer being created is being called peer1
let's call it dynamic_peer instead. This will make
what is being done clearer for future developers.
Author's Note: I am changing the bgp_accept function
in this manner because I find it incredibly confusing
remembering what is what direction and all my other
attempts at getting this straight has caused real
problems. So I am resorting to doing really small
transformational changes at a time.
Donald Sharp [Sun, 16 Feb 2025 00:36:45 +0000 (19:36 -0500)]
bgpd: Change existing connection to be called connection
bgp_accept looks up the peer data structure. The found
one represents the peer data structure that is created
when configuration is created. This connection is being
called connection1. Let's rename this to connection
to reduce some confusion.
Author's Note: I am changing the bgp_accept function
in this manner because I find it incredibly confusing
remembering what is what direction and all my other
attempts at getting this straight has caused real
problems. So I am resorting to doing really small
transformational changes at a time.
Donald Sharp [Sun, 16 Feb 2025 00:30:56 +0000 (19:30 -0500)]
bgpd: Call the new doppelganger connection incoming
In bgp_accept, the newly created doppelganger is
accepting a connection and setting it up to work
properly. For this incoming connection let's call
it incoming as well.
Author's Note: I am changing the bgp_accept function
in this manner because I find it incredibly confusing
remembering what is what direction and all my other
attempts at getting this straight has caused real
problems. So I am resorting to doing really small
transformational changes at a time.
The bgp_accept code calls the different connections
connection and connection1. Frankly this is confusing
and hard to keep track of what we are talking about
since they are poorly named. Let's start naming
these variables things that make logical sense.
Author's Note: I am changing the bgp_accept function
in this manner because I find it incredibly confusing
remembering what is what direction and all my other
attempts at getting this straight has caused real
problems. So I am resorting to doing really small
transformational changes at a time.
Donald Sharp [Sat, 15 Feb 2025 23:47:21 +0000 (18:47 -0500)]
bgpd: Add connection direction to debug logs
Currently the incoming and outgoing connections mix up their
logs and there is absolutely no way to tell which way is being
talked about when both are operating.
Rafael Zalamena [Fri, 28 Feb 2025 13:40:35 +0000 (10:40 -0300)]
pimd: fix null memory access on IGMP source limit
When the IGMP group source limit is reached the function
`igmp_get_source_by_addr` won't return a `struct gm_source` so we must
test for that condition before attempting to access its fields.
Philippe Guibert [Fri, 14 Feb 2025 09:47:23 +0000 (10:47 +0100)]
topotests: add bgp ecommunity-list match test
Add a test suite that checks that it is possible to filter out
BGP updates based on the extcommunity-list match operation of the
route-map. Check also the extcommunity-limit option.
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
Philippe Guibert [Fri, 14 Feb 2025 09:27:11 +0000 (10:27 +0100)]
bgpd: add match ecommunity <exact|any> options
The exact-match and the any options are missing for the extended
communities. Add missing options that are present on the match
operations for communities and large-communities.
> route-map rmap permit 1
> match extcommunity 1
> exit
> !
> route-map rmap permit 2
> match extcommunity 2 any
> exit
> !
> route-map rmap permit 3
> match extcommunity 3 exact-match
> exit
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
Donald Sharp [Wed, 26 Feb 2025 22:10:32 +0000 (17:10 -0500)]
lib: Prevent crash in getting label chunk
ldpd has this crash:
(gdb) bt
0 __pthread_kill_implementation (no_tid=0, signo=11, threadid=140329211443648) at ./nptl/pthread_kill.c:44
1 __pthread_kill_internal (signo=11, threadid=140329211443648) at ./nptl/pthread_kill.c:78
2 __GI___pthread_kill (threadid=140329211443648, signo=signo@entry=11) at ./nptl/pthread_kill.c:89
3 0x00007fa0f0642476 in __GI_raise (sig=11) at ../sysdeps/posix/raise.c:26
4 0x00007fa0f0b51944 in core_handler (signo=11, siginfo=0x7fff562810b0, context=0x7fff56280f80) at lib/sigevent.c:268
5 <signal handler called>
6 0x00007fa0f0b9534d in lm_get_label_chunk (zclient=0x0, keep=0 '\000', base=0, chunk_size=64, start=0x7fff56281bdc, end=0x7fff56281be0) at lib/zclient.c:3667
7 0x0000564e0d1c011e in lde_get_label_chunk () at ldpd/lde.c:2211
8 0x0000564e0d1c05f8 in lde_get_next_label () at ldpd/lde.c:2318
9 0x0000564e0d1bcb29 in lde_update_label (fn=0x564e16653050) at ldpd/lde.c:783
10 0x0000564e0d1c1fbe in lde_kernel_update (fec=0x7fff56281cb0) at ldpd/lde_lib.c:422
11 0x0000564e0d1b96c0 in l2vpn_pw_init (pw=0x564e165d1fa0) at ldpd/l2vpn.c:242
12 0x0000564e0d1b2d32 in merge_l2vpn (xconf=0x564e166424f0, l2vpn=0x564e166160a0, xl=0x564e165eabb0) at ldpd/ldpd.c:1883
13 0x0000564e0d1b28ea in merge_l2vpns (conf=0x564e166424f0, xconf=0x564e16653650) at ldpd/ldpd.c:1813
14 0x0000564e0d1b1244 in merge_config (conf=0x564e166424f0, xconf=0x564e16653650) at ldpd/ldpd.c:1321
15 0x0000564e0d1bc485 in lde_dispatch_parent (thread=0x7fff56282060) at ldpd/lde.c:611
16 0x00007fa0f0b6cebc in event_call (thread=0x7fff56282060) at lib/event.c:2019
17 0x0000564e0d1baee7 in lde () at ldpd/lde.c:155
18 0x0000564e0d1ae4b8 in main (argc=0, argv=0x7fff56282298) at ldpd/ldpd.c:312
(gdb)
Since it is possible to be asking for label data before the zclient has
been connected, let's just return -1 in the case where zclient is not
initialized yet either, since this is effectively the same thing as
the sock being < 0.
staticd: Do not log uninitialized `nexthop` variable
When running valgrind, the following error is observed.
```
==2474568== Memcheck, a memory error detector
==2474568== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==2474568== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
==2474568== Command: /usr/lib/frr/staticd --command-log-always --log file:staticd.log --log-level debug -d
==2474568== Parent PID: 2474525
==2474568==
==2474568== Conditional jump or move depends on uninitialised value(s)
==2474568== at 0x490B32A: inet_ntop (ntop.c:105)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== Conditional jump or move depends on uninitialised value(s)
==2474568== at 0x490B334: inet_ntop (ntop.c:105)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== Conditional jump or move depends on uninitialised value(s)
==2474568== at 0x490B343: inet_ntop (ntop.c:105)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== Conditional jump or move depends on uninitialised value(s)
==2474568== at 0x490B34D: inet_ntop (ntop.c:105)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== Conditional jump or move depends on uninitialised value(s)
==2474568== at 0x490B35B: inet_ntop (ntop.c:105)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== Conditional jump or move depends on uninitialised value(s)
==2474568== at 0x490B367: inet_ntop (ntop.c:105)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== Conditional jump or move depends on uninitialised value(s)
==2474568== at 0x490B6B9: inet_ntop (ntop.c:105)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== Conditional jump or move depends on uninitialised value(s)
==2474568== at 0x490B6C6: inet_ntop (ntop.c:105)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== Conditional jump or move depends on uninitialised value(s)
==2474568== at 0x490B3AA: inet_ntop (ntop.c:105)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== Conditional jump or move depends on uninitialised value(s)
==2474568== at 0x490B708: inet_ntop (ntop.c:105)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== Conditional jump or move depends on uninitialised value(s)
==2474568== at 0x490B711: inet_ntop (ntop.c:105)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== Conditional jump or move depends on uninitialised value(s)
==2474568== at 0x490B3DE: inet_ntop (ntop.c:105)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== Conditional jump or move depends on uninitialised value(s)
==2474568== at 0x490B3E8: inet_ntop (ntop.c:105)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== Conditional jump or move depends on uninitialised value(s)
==2474568== at 0x490B499: puthex (ntop.c:64)
==2474568== by 0x490B499: inet_ntop (ntop.c:150)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== Conditional jump or move depends on uninitialised value(s)
==2474568== at 0x490B73D: puthex (ntop.c:66)
==2474568== by 0x490B73D: inet_ntop (ntop.c:150)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== Conditional jump or move depends on uninitialised value(s)
==2474568== at 0x490B747: puthex (ntop.c:68)
==2474568== by 0x490B747: inet_ntop (ntop.c:150)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== Use of uninitialised value of size 8
==2474568== at 0x490B4D2: puthex (ntop.c:69)
==2474568== by 0x490B4D2: inet_ntop (ntop.c:150)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== Use of uninitialised value of size 8
==2474568== at 0x490B4DD: puthex (ntop.c:70)
==2474568== by 0x490B4DD: inet_ntop (ntop.c:150)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== Use of uninitialised value of size 8
==2474568== at 0x490B4A8: puthex (ntop.c:65)
==2474568== by 0x490B4A8: inet_ntop (ntop.c:150)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== Use of uninitialised value of size 8
==2474568== at 0x490B4BC: puthex (ntop.c:67)
==2474568== by 0x490B4BC: inet_ntop (ntop.c:150)
==2474568== by 0x49AB9CB: printfrr_i6 (prefix.c:1614)
==2474568== by 0x4A24B19: printfrr_extp (glue.c:220)
==2474568== by 0x4A2286E: vbprintfrr (vfprintf.c:626)
==2474568== by 0x4A12AE2: zlog_msg_text (zlog.c:838)
==2474568== by 0x4A11B83: vzlog_tls (zlog.c:497)
==2474568== by 0x4A12561: vzlogx (zlog.c:722)
==2474568== by 0x129AE8: zlog_ref (zlog.h:84)
==2474568== by 0x12BD35: routing_control_plane_protocols_control_plane_protocol_staticd_segment_routing_srv6_local_sids_sid_paths_next_hop_modify (static_nb_config.c:1299)
==2474568== by 0x498ABF8: nb_callback_modify (northbound.c:1579)
==2474568== by 0x498BB35: nb_callback_configuration (northbound.c:1930)
==2474568== by 0x498A03C: nb_candidate_validate_code (northbound.c:1287)
==2474568== by 0x498A2C1: nb_candidate_commit_prepare (northbound.c:1358)
==2474568== by 0x496F414: mgmt_be_txn_cfg_prepare (mgmt_be_client.c:579)
==2474568== by 0x496FBB8: mgmt_be_process_cfgdata_req (mgmt_be_client.c:717)
==2474568== by 0x49703A9: mgmt_be_client_handle_msg (mgmt_be_client.c:851)
==2474568== by 0x49718B9: mgmt_be_client_process_msg (mgmt_be_client.c:1261)
==2474568== by 0x4976810: mgmt_msg_procbufs (mgmt_msg.c:193)
==2474568== by 0x497771A: msg_conn_proc_msgs (mgmt_msg.c:526)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568==
==2474568== HEAP SUMMARY:
==2474568== in use at exit: 2,098 bytes in 8 blocks
==2474568== total heap usage: 48,668 allocs, 48,660 frees, 15,837,383 bytes allocated
==2474568==
==2474568== 69 bytes in 1 blocks are still reachable in loss record 3 of 8
==2474568== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==2474568== by 0x4D2058E: strdup (strdup.c:42)
==2474568== by 0x496CA96: qstrdup (memory.c:118)
==2474568== by 0x4A1DD4B: zlog_file_set_filename (zlog_targets.c:244)
==2474568== by 0x4969ADA: set_log_file (log_vty.c:371)
==2474568== by 0x4969CD0: command_setup_early_logging (log_vty.c:419)
==2474568== by 0x49576FE: frr_init (libfrr.c:770)
==2474568== by 0x1156C6: main (static_main.c:164)
==2474568==
==2474568== 69 bytes in 1 blocks are still reachable in loss record 4 of 8
==2474568== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==2474568== by 0x4D2058E: strdup (strdup.c:42)
==2474568== by 0x496CA96: qstrdup (memory.c:118)
==2474568== by 0x4A1DD4B: zlog_file_set_filename (zlog_targets.c:244)
==2474568== by 0x4969ADA: set_log_file (log_vty.c:371)
==2474568== by 0x496A052: config_log_file_magic (log_vty.c:542)
==2474568== by 0x496845F: config_log_file (log_vty_clippy.c:148)
==2474568== by 0x4915E8B: cmd_execute_command_real (command.c:1003)
==2474568== by 0x4916004: cmd_execute_command (command.c:1062)
==2474568== by 0x49165B4: cmd_execute (command.c:1228)
==2474568== by 0x49EB7EA: vty_command (vty.c:626)
==2474568== by 0x49ED70E: vty_execute (vty.c:1389)
==2474568== by 0x49EFF39: vtysh_read (vty.c:2408)
==2474568== by 0x49E40E2: event_call (event.c:2019)
==2474568== by 0x4958AD9: frr_run (libfrr.c:1246)
==2474568== by 0x11581D: main (static_main.c:193)
==2474568==
==2474568== LEAK SUMMARY:
==2474568== definitely lost: 0 bytes in 0 blocks
==2474568== indirectly lost: 0 bytes in 0 blocks
==2474568== possibly lost: 0 bytes in 0 blocks
==2474568== still reachable: 138 bytes in 2 blocks
==2474568== suppressed: 1,960 bytes in 6 blocks
==2474568==
==2474568== Use --track-origins=yes to see where uninitialised values come from
==2474568== For lists of detected and suppressed errors, rerun with: -s
==2474568== ERROR SUMMARY: 41 errors from 20 contexts (suppressed: 0 from 0)
```
The error is caused by staticd attempting to log the `nexthop` variable
before it is initialized.
Since logging that variable currently does not work and would not
provide any useful information anyway, this commit fixes the problem by
changing the staticd code to not log that variable.
Donald Sharp [Wed, 26 Feb 2025 17:34:05 +0000 (12:34 -0500)]
mgmtd: Prevent use after free
ci is picking up this use after free on occasion:
ERROR: AddressSanitizer: attempting to call malloc_usable_size() for pointer which is not owned: 0x6030001d94a0
0 0x7fab994b7f04 in __interceptor_malloc_usable_size ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:119
1 0x7fab994264f6 in __sanitizer::BufferedStackTrace::Unwind(unsigned long, unsigned long, void*, bool, unsigned int) ../../../../src/libsanitizer/sanitizer_common/sanitizer_stacktrace.h:131
2 0x7fab994264f6 in __asan::asan_malloc_usable_size(void const*, unsigned long, unsigned long) ../../../../src/libsanitizer/asan/asan_allocator.cpp:1058
3 0x7fab99039bcf in mt_count_free lib/memory.c:78
4 0x7fab99039bcf in qfree lib/memory.c:130
5 0x7fab98ff971a in hash_clean lib/hash.c:290
6 0x56110cdb0e7f in mgmt_txn_hash_destroy mgmtd/mgmt_txn.c:1881
7 0x56110cdb0e7f in mgmt_txn_destroy mgmtd/mgmt_txn.c:2013
8 0x56110cd8e5de in mgmt_terminate mgmtd/mgmt.c:91
9 0x56110cd8e003 in sigint mgmtd/mgmt_main.c:90
10 0x7fab990bf4b0 in frr_sigevent_process lib/sigevent.c:117
11 0x7fab990ea7a1 in event_fetch lib/event.c:1740
12 0x7fab9901a24e in frr_run lib/libfrr.c:1245
13 0x56110cd8e21f in main mgmtd/mgmt_main.c:290
14 0x7fab98af9249 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
15 0x7fab98af9304 in __libc_start_main_impl ../csu/libc-start.c:360
16 0x56110cd8dd30 in _start (/usr/lib/frr/mgmtd+0x3ad30)
0x6030001d94a0 is located 0 bytes inside of 24-byte region [0x6030001d94a0,0x6030001d94b8)
freed by thread T0 here:
0 0x7fab994b76a8 in __interceptor_free ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:52
1 0x7fab99039bf0 in qfree lib/memory.c:131
2 0x7fab98ff93e1 in hash_release lib/hash.c:227
3 0x56110cdaabdc in mgmt_txn_unlock mgmtd/mgmt_txn.c:1931
4 0x56110cdab049 in mgmt_txn_delete mgmtd/mgmt_txn.c:1841
5 0x56110cdab0ce in mgmt_txn_hash_free mgmtd/mgmt_txn.c:1864
6 0x7fab98ff970b in hash_clean lib/hash.c:288
7 0x56110cdb0e7f in mgmt_txn_hash_destroy mgmtd/mgmt_txn.c:1881
8 0x56110cdb0e7f in mgmt_txn_destroy mgmtd/mgmt_txn.c:2013
9 0x56110cd8e5de in mgmt_terminate mgmtd/mgmt.c:91
10 0x56110cd8e003 in sigint mgmtd/mgmt_main.c:90
11 0x7fab990bf4b0 in frr_sigevent_process lib/sigevent.c:117
12 0x7fab990ea7a1 in event_fetch lib/event.c:1740
13 0x7fab9901a24e in frr_run lib/libfrr.c:1245
14 0x56110cd8e21f in main mgmtd/mgmt_main.c:290
15 0x7fab98af9249 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
previously allocated by thread T0 here:
0 0x7fab994b83b7 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:77
1 0x7fab990392fd in qcalloc lib/memory.c:106
2 0x7fab98ff8b4f in hash_get lib/hash.c:156
3 0x56110cdb13ae in mgmt_txn_create_new mgmtd/mgmt_txn.c:1825
4 0x56110cdb3b4d in mgmt_txn_notify_be_adapter_conn mgmtd/mgmt_txn.c:2212
5 0x56110cd91178 in mgmt_be_adapter_conn_init mgmtd/mgmt_be_adapter.c:842
6 0x7fab990ec6de in event_call lib/event.c:2019
7 0x7fab9901a243 in frr_run lib/libfrr.c:1246
8 0x56110cd8e21f in main mgmtd/mgmt_main.c:290
9 0x7fab98af9249 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
The only time that mgmt_txn_hash_free is called is in hash_clean.
There are other places that mgmt_txn_unlock/delete are called and
hash_release should be called. Let's just notice when mgmtd is
being called from the hash_clean and not call hash_release (since
we know it is being released already)
Christian Hopps [Wed, 26 Feb 2025 13:34:59 +0000 (13:34 +0000)]
lib: nb: fix bug with oper-state query on list data
The capacity of the xpath string was not guaranteed to be sufficient to hold all
the key predicates and so would truncate. Calculate the required space and
guarantee that it is available.
Gabriel Goller [Tue, 25 Feb 2025 09:24:58 +0000 (10:24 +0100)]
fabricd: add option to treat dummy interfaces as loopback interfaces
Enable dummy-interfaces to be used as router-id interfaces in openfabric
networks. This allows multiple openfabric routers with different
router-ids on a single node when using IP unnumbered setup (interfaces
without IPs configured). Previously we were limited by having a single
loopback interface, allowing only one openfabric router per node.
Signed-off-by: Gabriel Goller <g.goller@proxmox.com>