Commit Graph

5084 Commits

Author SHA1 Message Date
Stephen Worley
d30d63f4f7
Merge pull request #11694 from sigeryang/master
zebra: add basic traffic control API
2022-08-16 11:21:04 -04:00
Donald Sharp
b545e0f99b
Merge pull request #11813 from anlancs/fix/minor-11
zebra: correct one comment about ethtool ioctl
2022-08-16 09:46:53 -04:00
Russ White
261e70c66a
Merge pull request #11804 from donaldsharp/aug_coverity_update
Aug coverity update
2022-08-15 18:10:03 -04:00
Donald Sharp
e1a39919e1
Merge pull request #11771 from anlancs/fix/minor-zebra-mh-comment
zebra: correct one comment for evpn-mh
2022-08-15 17:43:15 -04:00
Donald Sharp
50a38e23fd zebra: Remove unused assignment in zebra_dplane.c
Coverity spotted 3 places where `int ret = XXX` was
being used and FRR was immediately assigning a different
value.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-15 11:20:59 -04:00
Donald Sharp
86c4fdfac8 zebra: Fix crash in shutdown w/ pw thread still running
I am seeing the zebra_pw_install_retry timer thread crashing
on shutdown

The shutdown of the timer is only in an
if () {
   ...
} else if

Let's just always shut it down.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-11 16:31:28 -04:00
Siger Yang
c8e718ce1f
zebra: add empty placeholders for tc via BSD socket
This commit adds unimplemented updating functions for traffic control via
BSD socket.

Signed-off-by: Siger Yang <siger.yang@outlook.com>
2022-08-11 02:32:50 +08:00
Siger Yang
449a30edf6
zebra: add tc netlink and dplane ops
This commit implements necessary netlink encoders for traffic control
including QDISC, TCLASS and TFILTER, and adds basic dplane operations.

Co-authored-by: Stephen Worley <sworley@nvidia.com>
Signed-off-by: Siger Yang <siger.yang@outlook.com>
2022-08-11 02:32:43 +08:00
Donald Sharp
1548fbbc44 zebra: Remove unused return codes in zebra_mpls.c
There are some return codes for functions that
are not really used.  Clean them up.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-10 07:15:31 -04:00
Donald Sharp
a310ebc114 zebra: Combine meta_queue_free and meta_queue_vrf_free functions
These functions essentially do the same thing.  Combine them
for the goodness of mankind.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-10 07:14:43 -04:00
Donald Sharp
57a5524578 zebra: System routes should be processed the same time as kernel
For whatever reason.  ZEBRA_ROUTE_SYSTEM routes were being processed
last.  Since a system route is just another kernel route type.  Let's
just switch it to be processed the same time as kernel routes.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-10 07:14:43 -04:00
Donald Sharp
014e732d3e zebra: Let's use enum for META Queue indexes
Convert the meta queue values to an enum and use
them.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-10 07:14:43 -04:00
Donald Sharp
4bbbd1f6b3 zebra: Explicitly call out the correct queue name
There were more than a few places where the NHG meta
queue was not being explicitly called out.  Let's
be consistent and use the same nomenclature as much
as possible when talking about metaQ's.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-10 07:14:43 -04:00
anlan_cs
d2fb26ef9f zebra: correct one comment about ethtool ioctl
`get_iflink_speed()` uses ioctl to get speed, not ip address. Additionally
adjust format for another one comment line.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-08-09 01:55:31 -04:00
anlan_cs
209813e94d zebra: correct one comment for evpn-mh
These moved mac addresses are actually in active status during moving
phase, just correct comment.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-08-09 00:29:16 -04:00
Donald Sharp
db1c2223fd zebra: Don't install connected routes multiple times into FRR
When moving an interface between vrf's we do not need
to install the connected routes multiple times.

eva# show ip route vrf all
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
       F - PBR, f - OpenFabric,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

VRF BLUE:
C>* 4.5.6.7/32 is directly connected, dummy7, 00:00:10

VRF default:
K>* 0.0.0.0/0 [0/100] via 192.168.119.1, enp39s0, 00:00:10
C>* 192.168.119.0/24 is directly connected, enp39s0, 00:00:10
eva# exit
sharpd@eva ~/f/t/topotests (multiple_connected_installs)> sudo ip link add GREEN type vrf table 11000
sharpd@eva ~/f/t/topotests (multiple_connected_installs)> sudo ip link set GREEN up
sharpd@eva ~/f/t/topotests (multiple_connected_installs)> sudo ip link set dummy7 master GREEN
sharpd@eva ~/f/t/topotests (multiple_connected_installs)> vtysh

Hello, this is FRRouting (version 8.4-dev).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

eva# show ip route vrf all
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
       F - PBR, f - OpenFabric,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

VRF GREEN:
C>* 4.5.6.7/32 is directly connected, dummy7, 00:00:05

VRF default:
K>* 0.0.0.0/0 [0/100] via 192.168.119.1, enp39s0, 00:01:03
C>* 192.168.119.0/24 is directly connected, enp39s0, 00:01:03
eva# exit
sharpd@eva ~/f/t/topotests (multiple_connected_installs)> sudo ip link set dummy7 nomaster
sharpd@eva ~/f/t/topotests (multiple_connected_installs)> sudo vtysh -c "show ip route vrf all"
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
       F - PBR, f - OpenFabric,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

VRF default:
K>* 0.0.0.0/0 [0/100] via 192.168.119.1, enp39s0, 00:03:22
C>* 4.5.6.7/32 is directly connected, dummy7, 00:00:08
C>* 192.168.119.0/24 is directly connected, enp39s0, 00:03:22
sharpd@eva ~/f/t/topotests (multiple_connected_installs)>
 @  11 0:-*                                                                                                                                                         5h50m 0.06 24x1.9GHz 31.4G26% 426G70% 2022-08-08 13:49:24

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-08 13:51:24 -04:00
Donald Sharp
39ffa8e8e8 zebra: Add a mpls enable interface node command
Allow individual interfaces to turn on/off the mpls subsystem
for it in linux.

sharpd@eva:~/frr9$ sudo sysctl -a | grep enp39s0 | grep mpls
net.mpls.conf.enp39s0.input = 0
sharpd@eva:~/frr9$ vtysh -c "conf" -c "int enp39s0" -c "mpls enable"
sharpd@eva:~/frr9$ sudo sysctl -a | grep enp39s0 | grep mpls
net.mpls.conf.enp39s0.input = 1
sharpd@eva:~/frr9$ vtysh -c "conf" -c "int enp39s0" -c "no mpls enable"
sharpd@eva:~/frr9$ sudo sysctl -a | grep enp39s0 | grep mpls
net.mpls.conf.enp39s0.input = 0
sharpd@eva:~/frr9$

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-08 09:15:22 -04:00
Donald Sharp
c87f5c2392 zebra: Notice when an interface is turned on w/ mpls and enable mpls subsystem
Currently when FRR starts up it queries the kernel to see if mpls is turned on.
If not FRR does not enable zebra's mpls subsection.  If at a later time mpls
is turned on, let's notice that an interface now is enabled for mpls( thus
implying that all the bits and bobs in the kernel are now setup properly ).

a) convert mpls_enabled to a bool
b) abstract a new function zebra_mpls_turned_on and call it
when FRR notices that an interface now has mpls enabled.
c) mpls_processq_init cannot fail, so actually notice that
and don't have special code to detect a failure.

New results:

sharpd@eva ~> vtysh -c "show zebra"
 OS                           Linux(5.10.0-12-amd64)
 ECMP Maximum                 128
 v4 Forwarding                On
 v6 Forwarding                On
 MPLS                         Off
 EVPN                         Off
 Kernel socket buffer size    90000000
 VRF                          l3mdev Available
 ASIC offload                 Unavailable
 RA                           Compiled in
 RFC 5549                     BGP is not using
 Kernel NHG                   Available
 v4 All LinkDown Routes       Off
 v4 Default LinkDown Routes   Off
 v6 All LinkDown Routes       Off
 v6 Default LinkDown Routes   Off
 v4 All MC Forwarding         On
 v4 Default MC Forwarding     Off
 v6 All MC Forwarding         On
 v6 Default MC Forwarding     Off

                            Route      Route      Neighbor   LSP        LSP
VRF                         Installs   Removals    Updates   Installs   Removals
default                           26          7          0          0          0
<turn on mpls_iptunnel and mpls_router modules in the kernel and then do this>:
sharpd@eva ~> sudo sysctl -w net.mpls.conf.enp39s0.input=1
[sudo] password for sharpd:
net.mpls.conf.enp39s0.input = 1
sharpd@eva ~> vtysh -c "show zebra"
 OS                           Linux(5.10.0-12-amd64)
 ECMP Maximum                 128
 v4 Forwarding                On
 v6 Forwarding                On
 MPLS                         On
 EVPN                         Off
 Kernel socket buffer size    90000000
 VRF                          l3mdev Available
 ASIC offload                 Unavailable
 RA                           Compiled in
 RFC 5549                     BGP is not using
 Kernel NHG                   Available
 v4 All LinkDown Routes       Off
 v4 Default LinkDown Routes   Off
 v6 All LinkDown Routes       Off
 v6 Default LinkDown Routes   Off
 v4 All MC Forwarding         On
 v4 Default MC Forwarding     Off
 v6 All MC Forwarding         On
 v6 Default MC Forwarding     Off

                            Route      Route      Neighbor   LSP        LSP
VRF                         Installs   Removals    Updates   Installs   Removals
default                           26          7          0          0          0
sharpd@eva ~>

I am doing this work because FRR keeps having operators not know about how
to properly use mpls.  Let's make FRR behave a bit better in this weird edge
case.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-08 09:15:22 -04:00
Donald Sharp
e63831f133 zebra: Add IF_ZEBRA_DATA_X define
There are 2 defines IF_ZEBRA_MULTICAST_X and
IF_ZEBRA_SHUTDOWN_X macros that do the same
thing.  Combine into one.

Future commits will use the IF_ZEBRA_DATA_X macro
as well.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-08 09:15:22 -04:00
Donald Sharp
a69b10c1e6 zebra: Cleanup unguarded debug
Left over debug from earlier commits

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-08 09:15:22 -04:00
Donald Sharp
0a5f9773a8 zebra: zrouter.in_shutdown is an atomic variable
So let's treat the variable like it is atomic and
properly load it when we need to look at it.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-05 07:51:27 -04:00
Donald Sharp
d5795103bc zebra: Fix memory leaks and use after frees in nhg's on shutdown
Fixup both memory leaks as well as use after free's in nhg's
on shutdown.

This approach is effectively just iterating through all the
hash items and directly just freeing the memory instead
of handling ref counts or cross references.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-05 07:51:27 -04:00
Donald Sharp
34a67a7d1e zebra: When saving nhg for later stop processing
Commit 35729f38fa introduced the idea of
holding a nexthop group for a small amount of time
before removing it from the system.  When this code
was introduced the nexthop group entry was saved
and a timer started, except instead of stopping
processing at that point in time, zebra was
continuing on and deleting nexthop group entries
that that entry depended on as well.  This
should not be done until the timer pops.

Fixes: #11596
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-05 07:51:27 -04:00
Stephen Worley
098a55c5f8
Merge pull request #11713 from anlancs/fix/evpn-mh-bond-redirect
zebra: fix bond down for evpn-mh
2022-08-03 10:11:08 -04:00
anlan_cs
df6c198269 zebra: fix bond down for evpn-mh
The test case is with `redirect-off` in evpn multi-homing environment:
```
evpn mh redirect-off
```

After the environment is setup, do the following steps:
1) Let one member of ES learn one mac:
```
2e:52:bb:bb:2f:46 dev ae1 vlan 100 master bridge0 static
```
Now everything is ok and the mac can be synced to other ES peers.

2) Shutdown bond1. At this time, zebra will get three netlink messages,
not one as current code expected. Like:
```
e4:f0:04:89:b6:46 dev vxlan10030 vlan 30 master bridge0 static <-A
e4:f0:04:89:b6:46 dev vxlan10030 nhid 536870913 self extern_learn <-B
e4:f0:04:89:b6:46 dev vxlan10030 vlan 30 self <-C
```

With A), zebra will wrongly remove this mac again:
```
ZEBRA: dpAdd remote MAC e4:f0:04:89:b6:46 VID 30
ZEBRA: Add/update remote MAC e4:f0:04:89:b6:46 intf vxlan10030(26) VNI 10030 flags 0xa01 - del local
ZEBRA: Send MACIP Del f None  MAC e4:f0:04:89:b6:46 IP (null) seq 0 L2-VNI 10030 ESI - to bgp
```

With C), zebra will wrongly add this mac again:
```
ZEBRA: Rx RTM_NEWNEIGH AF_BRIDGE IF 26 VLAN 30 st 0x2 fl 0x2 MAC e4:f0:04:89:b6:46 nhg 0
ZEBRA: dpAdd remote MAC e4:f0:04:89:b6:46 VID 30
```

zebra should skip the two messages with `vid`. Otherwise, it will send many
*wrong* messages to bgpd, and the logic is wrong.

`nhg/dst` is in 2nd message without `vid`, it is useful to call
`zebra_evpn_add_update_local_mac()`. But it will fail with "could not find EVPN"
warning for no `vid`, can't call `zebra_evpn_add_update_local_mac()`:
With B):
```
ZEBRA: Rx RTM_NEWNEIGH AF_BRIDGE IF 26 st 0x2 fl 0x12 MAC e4:f0:04:89:b6:46 nhg 536870913
ZEBRA: dpAdd local-nw-MAC e4:f0:04:89:b6:46 VID 0
ZEBRA:         Add/Update MAC e4:f0:04:89:b6:46 intf ae1(18) VID 0, could not find EVPN
```
Here, we can get `vid` from vxlan interface instead of from netlink message.

In summary, `zebra_vxlan_dp_network_mac_add()` will process the three messages
wrongly expecting only one messsage, so its logic is wrong. Just skip the two
unuseful messages with `vid`.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-08-03 02:47:16 -04:00
Donald Sharp
a17eb04734 zebra: Remove usage of newline in zlog_X message
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-07-29 18:31:58 -04:00
Donald Sharp
1cf42d6a00 zebra: Fix lost memory on lsp free
When cleaning up memory associated with a lsp the
nhlfe is lost in some cases.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-07-26 12:41:11 -04:00
Donatas Abraitis
eed5b70f94
Merge pull request #11657 from donaldsharp/why_timer
convert thread_cancel to THREAD_OFF
2022-07-22 08:26:08 +03:00
Donald Sharp
146bcb9b92 zebra: Convert thread_cancel to THREAD_OFF
Just convert all uses of thread_cancel to THREAD_OFF

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-07-21 08:30:50 -04:00
Donald Sharp
cb1991af8c *: frr_with_mutex change to follow our standard
convert:
	frr_with_mutex(..)

to:
	frr_with_mutex (..)

To make all our code agree with what clang-format is going to produce

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-07-20 15:50:32 -04:00
Donald Sharp
e05506b8dd zebra: Add some more data to rtadv socket failures
The creation of the rtadv socket can fail but there
is very very little data associated with this event
to let the operator know something has gone terribly
wrong.

Please note if this socket fails to create or fails
the setsockopt's rtadv is basically just really really
messed up.  I am not sure what can be done here.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-07-19 13:57:56 -04:00
Russ White
b40a74fc2d
Merge pull request #11613 from anlancs/fix/minor-6
zebra: correctly display one debug flag about ES Peer
2022-07-19 11:16:54 -04:00
Jafar Al-Gharaibeh
13d7231039
Merge pull request #11635 from opensourcerouting/fix/memory_leak_for_mpls
zebra: Cleanup the memory from the hash for MPLS stuff
2022-07-18 12:42:36 -05:00
Donald Sharp
5f5b29862f
Merge pull request #11626 from opensourcerouting/fix/avoid_buffer_overflow
zebra: Avoid buffer overflow using netlink_parse_rtattr_nested()
2022-07-18 09:20:11 -04:00
Donatas Abraitis
912b6a5b5c zebra: Cleanup the memory from the hash for MPLS stuff
==1595641== 280 (80 direct, 200 indirect) bytes in 1 blocks are definitely lost in loss record 30 of 38
==1595641== at 0x483AB65: calloc (vg_replace_malloc.c:760)
==1595641== by 0x493C89C: qcalloc (memory.c:116)
==1595641== by 0x1E8426: lsp_alloc (zebra_mpls.c:1116)
==1595641== by 0x49147F1: hash_get (hash.c:162)
==1595641== by 0x1EC880: mpls_lsp_install (zebra_mpls.c:3192)
==1595641== by 0x1C51BB: zread_vrf_label (zapi_msg.c:3197)
==1595641== by 0x1C6F11: zserv_handle_commands (zapi_msg.c:3863)
==1595641== by 0x24D0F4: zserv_process_messages (zserv.c:523)
==1595641== by 0x498F4CC: thread_call (thread.c:2002)
==1595641== by 0x49253A2: frr_run (libfrr.c:1198)
==1595641== by 0x1A28BA: main (main.c:475)
==1595641==
==1595641== 1,400 (400 direct, 1,000 indirect) bytes in 5 blocks are definitely lost in loss record 35 of 38
==1595641== at 0x483AB65: calloc (vg_replace_malloc.c:760)
==1595641== by 0x493C89C: qcalloc (memory.c:116)
==1595641== by 0x1E8426: lsp_alloc (zebra_mpls.c:1116)
==1595641== by 0x49147F1: hash_get (hash.c:162)
==1595641== by 0x1EBD7C: mpls_zapi_labels_process (zebra_mpls.c:2915)
==1595641== by 0x1C35D9: zread_mpls_labels_add (zapi_msg.c:2513)
==1595641== by 0x1C6F11: zserv_handle_commands (zapi_msg.c:3863)
==1595641== by 0x24D0F4: zserv_process_messages (zserv.c:523)
==1595641== by 0x498F4CC: thread_call (thread.c:2002)
==1595641== by 0x49253A2: frr_run (libfrr.c:1198)
==1595641== by 0x1A28BA: main (main.c:475)

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-07-18 14:26:29 +03:00
Donatas Abraitis
ce39ca16dd zebra: Avoid buffer overflow using netlink_parse_rtattr_nested()
memset(tb, 0, sizeof(struct rtattr *) * (max + 1)); in netlink_parse_rtattr()
seems a good candidate to buffer overflow.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-07-17 22:31:48 +03:00
Donald Sharp
2e4e3ba10b zebra: Delete the malloced memory under show zebra
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-07-16 19:01:12 -04:00
Donald Sharp
9d1fec4c7e zebra: When deleting nexthop group entries ensure the thread is off
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-07-16 19:00:43 -04:00
anlan_cs
0ef63eb5cc zebra: correctly display one debug flag about ES Peer
Since the `mac->flags` with `ZEBRA_MAC_ES_PEER_ACTIVE` is about ES Peer,
it should be displayed as `PEER Active`.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-07-15 19:24:24 -04:00
Christian Hopps
11c9ab3202
zebra: free neighbor state before exit to avoid memleaks
Signed-off-by: Christian Hopps <chopps@labn.net>
2022-07-14 12:20:01 -04:00
anlan_cs
9faf4e426c zebra: remove redundant flags assignment
The assignment of neigh flags on ES peers is set twice. Just clean it.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-07-12 14:18:18 -04:00
David Lamparter
ca8a395da8 zebra: debug decode RTA_EXPIRES and RTA_MFC_STATS
Just adding two more attributes to decode and show nicely in netlink
msgdump debug output.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-07-07 11:36:44 +02:00
David Lamparter
e1cd4bb178 zebra: fix remaining MR RTM_GETROUTE oddities
The IPv6 version needs rtm_src_len and rtm_dst_len filled in due to
strict validation.  IPv4 also has this requirement, but zebra is running
in non-strict mode there so the kernel accepts it...

Also the table ID hack is IPv4 only.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-07-07 11:36:40 +02:00
David Lamparter
c6a89c8ef5 zebra: IIF/OIF are not used in MR RTM_GETROUTE
The multicast routing RTM_GETROUTE command does not use IIF/OIF
attributes, and the IPv6 version will refuse them with an error due to
being new netlink API and thus using strict validation.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-07-06 11:29:56 +02:00
David Lamparter
31071fe357 zebra: netlink MR is a rtmsg, not ndmsg
These two structs happen to be the same size and have the family field
in the same spot, but the correct one to use here is rtmsg not ndmsg.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-07-06 11:23:06 +02:00
David Lamparter
afeb8524e2 zebra: correctly ignore multicast nl msgs
zebra does not care about _notifications_ from the kernel regarding
multicast routing;  we only use the MR netlink API to request stats from
the kernel by actively sending a RTM_GETROUTE.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-07-06 11:19:05 +02:00
Russ White
1dc900fe27
Merge pull request #11502 from donaldsharp/zebra_dplane_fini
zebra: make rib_process_dplane_results own ctx freeing
2022-07-05 09:49:02 -04:00
David Lamparter
87101cd399
Merge pull request #11507 from donaldsharp/setsockopt_changes 2022-07-04 10:38:25 +02:00
Donatas Abraitis
484cc1bd97
Merge pull request #11514 from donaldsharp/zebra_odds_and_ends
Zebra odds and ends
2022-07-04 08:11:29 +03:00
Donald Sharp
7a96ccc7b4 zebra: Add a subqueue2str function to give more useful data in debugs
New output example:

2022-07-03 09:40:29.310 [DEBG] zebra: [JF0K0-DVHWH] rib_meta_queue_add: (0:254):4.5.6.8/32: queued rn 0x55937f586ee0 into sub-queue Kernel Routes
2022-07-03 09:40:29.321 [DEBG] zebra: [HH6N2-PDCJS] default(0:254):4.5.6.8/32 rn 0x55937f586ee0 dequeued from sub-queue Kernel Routes

Let's make it a bit more human readable.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-07-03 09:41:31 -04:00