Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problems with BGP routes on FRR 10.0-01 #16101

Closed
2 tasks done
cliff-ha opened this issue May 29, 2024 · 32 comments
Closed
2 tasks done

Problems with BGP routes on FRR 10.0-01 #16101

cliff-ha opened this issue May 29, 2024 · 32 comments
Labels

Comments

@cliff-ha
Copy link

cliff-ha commented May 29, 2024

Description

After upgrading FRR from version 9.1 to version 10.0-01, we have problems with routes not being installed correctly on the server.
As soon as we downgrade the FRR version everything start working again.
We have multiple interfaces on the server (eth0,eth1,eth2), the BGP peers is on eth1 and eth2, and it is receiving the same routes on the two interfaces, but the routes is being installed as if they were received on eth0:

Routing entry for 100.64.1.68/32
  Known via "bgp", distance 200, metric 0, best
  Last update 00:12:29 ago
    100.64.1.248 (recursive), weight 1
  *   10.0.9.193, via eth0, weight 1
    100.64.1.250 (recursive), weight 1
      10.0.9.193, via eth0 (duplicate nexthop removed), weight 1
BGP routing table entry for 100.64.1.68/32, version 33
Paths: (2 available, best #2, table default)
  Not advertised to any peer
  Local
    100.64.1.250 (metric 100) from 100.64.1.250 (195.191.143.22)
      Origin IGP, localpref 100, valid, internal, multipath
      Originator: 195.191.143.22, Cluster list: 195.191.143.10
      Last update: Wed May 29 10:19:09 2024
  Local
    100.64.1.248 (metric 100) from 100.64.1.248 (195.191.143.22)
      Origin IGP, localpref 100, valid, internal, multipath, best (Neighbor IP)
      Originator: 195.191.143.22, Cluster list: 195.191.143.10
      Last update: Wed May 29 10:18:46 2024
eth1            up      default         100.64.1.251/31
eth2            up      default         100.64.1.249/31

With ipv6 the routes is just marked as invalid because of the ip being inaccessible even when the peer ip is a direct neighbor.

Version

FRRouting 10.0 (#serverName) on Linux(5.14.0-427.18.1.el9_4.x86_64).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
configured with:
    '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--disable-dependency-tracking' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--sbindir=/usr/lib/frr' '--sysconfdir=/etc' '--localstatedir=/var' '--disable-static' '--disable-werror' '--enable-multipath=256' '--enable-vtysh' '--enable-ospfclient' '--enable-ospfapi' '--enable-rtadv' '--enable-ldpd' '--enable-pimd' '--enable-pim6d' '--enable-pbrd' '--enable-nhrpd' '--enable-eigrpd' '--enable-babeld' '--enable-vrrpd' '--enable-user=frr' '--enable-group=frr' '--enable-vty-group=frrvty' '--enable-fpm' '--enable-watchfrr' '--disable-bgp-vnc' '--enable-isisd' '--enable-rpki' '--enable-bfdd' '--enable-pathd' '--enable-snmp' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig' 'CC=gcc' 'CXX=g++' 'LT_SYS_LIBRARY_PATH=/usr/lib64:'

How to reproduce

Have multiple interfaces on the server and then have BGP peers on eth1 and eth2.

Expected behavior

Routes being installed on the interfaces it is received

Actual behavior

routes is installed as received on eth0

Additional context

No response

Checklist

  • I have searched the open issues for this bug.
  • I have not included sensitive information in this report.
@cliff-ha cliff-ha added the triage Needs further investigation label May 29, 2024
@ton31337 ton31337 added the bgp label May 29, 2024
@ton31337
Copy link
Member

Could you show the configuration also?

@ton31337 ton31337 self-assigned this May 29, 2024
@cliff-ha
Copy link
Author

Sure.
The configuration looks like this:
router bgp 65500
bgp router-id 100.64.1.65
no bgp default ipv4-unicast
neighbor 100.64.1.248 remote-as 65500
neighbor 100.64.1.250 remote-as 65500
neighbor 2001:db8:2::2 remote-as 65500
neighbor 2001:db8:3::2 remote-as 65500
!
address-family ipv4 unicast
network 100.64.1.65/32
neighbor 100.64.1.248 activate
neighbor 100.64.1.248 prefix-list pl-ipv4-wrt-in in
neighbor 100.64.1.248 prefix-list pl-ipv4-wrt-out out
neighbor 100.64.1.250 activate
neighbor 100.64.1.250 prefix-list pl-ipv4-wrt-in in
neighbor 100.64.1.250 prefix-list pl-ipv4-wrt-out out
exit-address-family
!
address-family ipv6 unicast
network 2001:db8:fffe::2/128
neighbor 2001:db8:2::2 activate
neighbor 2001:db8:2::2 prefix-list pl-ipv6-wrt-in in
neighbor 2001:db8:2::2 prefix-list pl-ipv6-wrt-out out

ip prefix-list pl-ipv4-wrt-in seq 10 permit 100.64.1.64/27 ge 32 le 32
ip prefix-list pl-ipv4-wrt-out seq 10 permit 100.64.1.65/32

ipv6 prefix-list pl-ipv6-wrt-out seq 10 permit 2001:db8:fffe::2/128
ipv6 prefix-list pl-ipv6-wrt-in seq 10 permit 2001:db8:8000::/49 ge 128 le 128

@ton31337
Copy link
Member

ton31337 commented May 29, 2024

Could you also show interface configuration? "ip add show" (want to see exact configuration, including eth0).

@cliff-ha
Copy link
Author

cliff-ha commented May 30, 2024

Sure, I have also added som additional commands.
As you can see from the below ipv4 routes is installed as being accessible over eth0, but in ipv6 the routes is not at all installed.

#ip add show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:83:b2:af brd ff:ff:ff:ff:ff:ff
    altname enp11s0
    altname ens192
    inet 10.16.8.66/28 brd 10.16.8.79 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fe83:b2af/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:b1:2c:c8 brd ff:ff:ff:ff:ff:ff
    altname enp19s0
    altname ens224
    inet 100.64.1.247/31 scope global noprefixroute eth1
       valid_lft forever preferred_lft forever
    inet6 2001:db8:4::3/127 scope global noprefixroute
       valid_lft forever preferred_lft forever
    inet6 fe80::fa50:8295:449f:c7c3/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:b1:e0:18 brd ff:ff:ff:ff:ff:ff
    altname enp27s0
    altname ens256
    inet 100.64.1.245/31 scope global noprefixroute eth2
       valid_lft forever preferred_lft forever
    inet6 2001:db8:5::3/127 scope global noprefixroute
       valid_lft forever preferred_lft forever
    inet6 fe80::1513:a0d6:c642:1d9d/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
#ip route
default via 10.16.8.65 dev eth0 proto static metric 100
10.16.8.64/28 dev eth0 proto kernel scope link src 10.16.8.66 metric 100
100.64.1.64 nhid 25 via 10.16.8.65 dev eth0 proto bgp metric 20
100.64.1.65 nhid 25 via 10.16.8.65 dev eth0 proto bgp metric 20
100.64.1.67 nhid 25 via 10.16.8.65 dev eth0 proto bgp metric 20
100.64.1.68 nhid 25 via 10.16.8.65 dev eth0 proto bgp metric 20
100.64.1.69 nhid 25 via 10.16.8.65 dev eth0 proto bgp metric 20
100.64.1.244/31 dev eth2 proto kernel scope link src 100.64.1.245 metric 102
100.64.1.246/31 dev eth1 proto kernel scope link src 100.64.1.247 metric 101
# ip -6 route
::1 dev lo proto kernel metric 256 pref medium
2001:db8:4::2/127 dev eth1 proto kernel metric 101 pref medium
2001:db8:5::2/127 dev eth2 proto kernel metric 102 pref medium
fe80::/64 dev eth0 proto kernel metric 256 pref medium
fe80::/64 dev eth1 proto kernel metric 1024 pref medium
fe80::/64 dev eth2 proto kernel metric 1024 pref medium
#show bgp ipv6 unicast
BGP table version is 1, local router ID is 100.64.1.66, vrf id 0
Default local pref 100, local AS 65500
Status codes:  s suppressed, d damped, h history, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

    Network          Next Hop            Metric LocPrf Weight Path
   i2001:db8:fffa::2/128
                    2001:db8:5::2
                                                  100      0 i
   i                 2001:db8:4::2
                                                  100      0 i
   i2001:db8:fffb::2/128
                    2001:db8:5::2
                                                  100      0 i
   i                 2001:db8:4::2
                                                  100      0 i
   i2001:db8:fffc::2/128
                    2001:db8:5::2
                                                  100      0 i
   i                 2001:db8:4::2
                                                  100      0 i
 *> 2001:db8:fffd::2/128
                    ::                       0         32768 i
   i2001:db8:fffe::2/128
                    2001:db8:5::2
                                             0    100      0 i
   i                 2001:db8:4::2
                                             0    100      0 i
   i2001:db8:ffff::2/128
                    2001:db8:5::2
                                             0    100      0 i
   i                 2001:db8:4::2
                                             0    100      0 i

Displayed 6 routes and 11 total paths
# show bgp ipv6 unicast 2001:db8:fffa::2/128
BGP routing table entry for 2001:db8:fffa::2/128, version 0
Paths: (2 available, no best path)
  Not advertised to any peer
  Local
    2001:db8:5::2 (inaccessible, import-check enabled) from 2001:db8:5::2 (233.252.0.23)
      Origin IGP, localpref 100, invalid, internal
      Originator: 233.252.0.23, Cluster list: 233.252.0.10
      Last update: Thu May 30 09:39:12 2024
  Local
    2001:db8:4::2 (inaccessible, import-check enabled) from 2001:db8:4::2 (233.252.0.23)
      Origin IGP, localpref 100, invalid, internal
      Originator: 233.252.0.23, Cluster list: 233.252.0.10
      Last update: Thu May 30 09:39:11 2024

@ton31337
Copy link
Member

Could you provide these outputs?

show bgp nexthop detail
show ipv6 nht

@cliff-ha
Copy link
Author

Sure, I have attached the commands.

# show bgp nexthop detail
Current BGP nexthop cache:
 100.64.1.244 valid [IGP metric 100], #paths 5, peer 100.64.1.244
  gate 10.16.8.65, if eth0
  Last update: Fri May 31 11:02:55 2024
  Paths:
    1/1 100.64.1.65/32 VRF default flags 0xc10
    1/1 100.64.1.64/32 VRF default flags 0xc10
    1/1 100.64.1.69/32 VRF default flags 0x418
    1/1 100.64.1.67/32 VRF default flags 0x418
    1/1 100.64.1.68/32 VRF default flags 0x418
 100.64.1.246 valid [IGP metric 100], #paths 5, peer 100.64.1.246
  gate 10.16.8.65, if eth0
  Last update: Fri May 31 11:02:55 2024
  Paths:
    1/1 100.64.1.65/32 VRF default flags 0x418
    1/1 100.64.1.64/32 VRF default flags 0x418
    1/1 100.64.1.69/32 VRF default flags 0xc10
    1/1 100.64.1.67/32 VRF default flags 0xc10
    1/1 100.64.1.68/32 VRF default flags 0xc10
 2001:db8:4::2 invalid, #paths 5, peer 2001:db8:4::2
  Last update: Fri May 31 11:02:55 2024
  Paths:
    2/1 2001:db8:fffe::2/128 VRF default flags 0x400
    2/1 2001:db8:ffff::2/128 VRF default flags 0x400
    2/1 2001:db8:fffa::2/128 VRF default flags 0x400
    2/1 2001:db8:fffc::2/128 VRF default flags 0x400
    2/1 2001:db8:fffb::2/128 VRF default flags 0x400
 2001:db8:5::2 invalid, #paths 5, peer 2001:db8:5::2
  Last update: Fri May 31 11:02:55 2024
  Paths:
    2/1 2001:db8:fffe::2/128 VRF default flags 0x400
    2/1 2001:db8:ffff::2/128 VRF default flags 0x400
    2/1 2001:db8:fffa::2/128 VRF default flags 0x400
    2/1 2001:db8:fffb::2/128 VRF default flags 0x400
    2/1 2001:db8:fffc::2/128 VRF default flags 0x400
# show ipv6 nht
VRF default:
 Resolve via default: on
2001:db8:4::2
 unresolved
 Client list: bgp(fd 29)
2001:db8:5::2
 unresolved
 Client list: bgp(fd 29)
2001:db8:fffd::2
 resolved via local
 is directly connected, dummy1 (vrf default)
 Client list: bgp(fd 29)

@ne-vlezay80
Copy link
Contributor

Sure, I have attached the commands.

# show bgp nexthop detail
Current BGP nexthop cache:
 100.64.1.244 valid [IGP metric 100], #paths 5, peer 100.64.1.244
  gate 10.16.8.65, if eth0
  Last update: Fri May 31 11:02:55 2024
  Paths:
    1/1 100.64.1.65/32 VRF default flags 0xc10
    1/1 100.64.1.64/32 VRF default flags 0xc10
    1/1 100.64.1.69/32 VRF default flags 0x418
    1/1 100.64.1.67/32 VRF default flags 0x418
    1/1 100.64.1.68/32 VRF default flags 0x418
 100.64.1.246 valid [IGP metric 100], #paths 5, peer 100.64.1.246
  gate 10.16.8.65, if eth0
  Last update: Fri May 31 11:02:55 2024
  Paths:
    1/1 100.64.1.65/32 VRF default flags 0x418
    1/1 100.64.1.64/32 VRF default flags 0x418
    1/1 100.64.1.69/32 VRF default flags 0xc10
    1/1 100.64.1.67/32 VRF default flags 0xc10
    1/1 100.64.1.68/32 VRF default flags 0xc10
 2001:db8:4::2 invalid, #paths 5, peer 2001:db8:4::2
  Last update: Fri May 31 11:02:55 2024
  Paths:
    2/1 2001:db8:fffe::2/128 VRF default flags 0x400
    2/1 2001:db8:ffff::2/128 VRF default flags 0x400
    2/1 2001:db8:fffa::2/128 VRF default flags 0x400
    2/1 2001:db8:fffc::2/128 VRF default flags 0x400
    2/1 2001:db8:fffb::2/128 VRF default flags 0x400
 2001:db8:5::2 invalid, #paths 5, peer 2001:db8:5::2
  Last update: Fri May 31 11:02:55 2024
  Paths:
    2/1 2001:db8:fffe::2/128 VRF default flags 0x400
    2/1 2001:db8:ffff::2/128 VRF default flags 0x400
    2/1 2001:db8:fffa::2/128 VRF default flags 0x400
    2/1 2001:db8:fffb::2/128 VRF default flags 0x400
    2/1 2001:db8:fffc::2/128 VRF default flags 0x400
# show ipv6 nht
VRF default:
 Resolve via default: on
2001:db8:4::2
 unresolved
 Client list: bgp(fd 29)
2001:db8:5::2
 unresolved
 Client list: bgp(fd 29)
2001:db8:fffd::2
 resolved via local
 is directly connected, dummy1 (vrf default)
 Client list: bgp(fd 29)

remote ipv6 peer address is should 2001:db8:4::3 and 2001:db8:5::3.

@Trae32566
Copy link

Trae32566 commented Jun 1, 2024

I'm having this issue as well with around ~15 lab servers moving from 9.1 to 10.0. I can provide full configurations and troubleshooting if necessary, but I may move most of them back to 9.1 given the number of issues 10.0 has. It looks like the nexthops themselves are incorrect for some reason. Here's a server on 10.0:

ns01-cs9.dal10.trae32566.org(config)# do show ip ro 192.168.1.0/24
Routing entry for 192.168.1.0/24
  Known via "bgp", distance 200, metric 0, best
  Last update 09:37:49 ago
    192.168.253.6 (recursive), weight 1
  *   192.168.31.1, via bond0, weight 1
    192.168.253.7 (recursive), weight 1
      192.168.31.1, via bond0 (duplicate nexthop removed), weight 1

Here's a server on 9.1, on the same exact subnet (it has a different IP, but a fairly similar configuration otherwise):

sec01-cs9.dal10.trae32566.org# show ip ro 192.168.1.0/24
Routing entry for 192.168.1.0/24
  Known via "bgp", distance 200, metric 0, best
  Last update 11:46:56 ago
    192.168.253.6 (recursive), weight 1
  *   192.168.31.1, via bond0, weight 1
    192.168.253.7 (recursive), weight 1
  *   192.168.31.2, via bond0, weight 1

@ton31337 let me know if you want my configuration or output of anything else. Additionally I wanted to point out that I believe no bgp suppress-duplicate should prevent this behavior even if the nexthops were the same, but it does not appear to work.

@ton31337
Copy link
Member

ton31337 commented Jun 1, 2024

Additionally I wanted to point out that I believe no bgp suppress-duplicate should prevent this behavior even if the nexthops were the same, but it does not appear to work.

Suppress duplicates should not influence such a behavior at all, because for outgoing updates only.

@ton31337 ton31337 added this to the 10.1 milestone Jun 3, 2024
@ton31337
Copy link
Member

ton31337 commented Jun 4, 2024

@cliff-ha could you describe what the topology looks like in your case? I'm trying to replicate the same locally, but still struggling. How the peers are connected, and how the route originator is connected also.

@cliff-ha
Copy link
Author

cliff-ha commented Jun 4, 2024

This is a very simple drawing of how the devices is connected:
Screenshot 2024-06-04 at 09 18 59

@ton31337
Copy link
Member

ton31337 commented Jun 4, 2024

But what's in your case is 10.0.9.193, 195.191.143.10, and 195.191.143.22?

@ton31337
Copy link
Member

ton31337 commented Jun 4, 2024

@cliff-ha just in case to eliminate one question (can you try if that changes something or not if you disable no ip nht resolve-via-default? Because it seems your routes recursively are resolved via a default gateway, which is via eth0.

@cliff-ha
Copy link
Author

cliff-ha commented Jun 4, 2024

195.191.143.10 and 195.191.143.22 router-id of the peering devices.
I actually do not know what the 10.0.9.193 ip address is.

I did try to add no ip nht resolve-via-default and then routes are not installed in the routing table.
This is how it is looking after I added the command.

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

K>* 0.0.0.0/0 [0/100] via 10.16.8.65, eth0, 00:03:52
L>* 10.16.8.66/32 is directly connected, eth0, 00:03:52
L>* 100.64.1.66/32 is directly connected, dummy1, 00:03:52
L>* 100.64.1.245/32 is directly connected, eth2, 00:03:52
L>* 100.64.1.247/32 is directly connected, eth1, 00:03:52
# show bgp ipv4 unicast
BGP table version is 16, local router ID is 100.64.1.66, vrf id 0
Default local pref 100, local AS 48854
Status codes:  s suppressed, d damped, h history, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

    Network          Next Hop            Metric LocPrf Weight Path
   i100.64.1.64/32   100.64.1.246             0    100      0 i
   i                 100.64.1.244             0    100      0 i
   i100.64.1.65/32   100.64.1.246             0    100      0 i
   i                 100.64.1.244             0    100      0 i
 *> 100.64.1.66/32   0.0.0.0                  0         32768 i
   i100.64.1.67/32   100.64.1.246                  100      0 i
   i                 100.64.1.244                  100      0 i
   i100.64.1.68/32   100.64.1.246                  100      0 i
   i                 100.64.1.244                  100      0 i
   i100.64.1.69/32   100.64.1.246                  100      0 i
   i                 100.64.1.244                  100      0 i

Displayed 6 routes and 11 total paths
# show bgp ipv4 unicast  100.64.1.68/32
BGP routing table entry for 100.64.1.68/32, version 15
Paths: (2 available, no best path)
  Not advertised to any peer
  Local
    100.64.1.246 (inaccessible, import-check enabled) from 100.64.1.246 (195.191.143.22)
      Origin IGP, localpref 100, invalid, internal
      Originator: 195.191.143.22, Cluster list: 195.191.143.10
      Last update: Tue Jun  4 15:33:47 2024
  Local
    100.64.1.244 (inaccessible, import-check enabled) from 100.64.1.244 (195.191.143.22)
      Origin IGP, localpref 100, invalid, internal
      Originator: 195.191.143.22, Cluster list: 195.191.143.10
      Last update: Tue Jun  4 15:33:47 2024

@ton31337
Copy link
Member

ton31337 commented Jun 6, 2024

That's because you don't have anything in the RIB (no connected routes)... Can you add no ip nht resolve-via-default to frr.conf and restart?

@cliff-ha
Copy link
Author

I have just tried to do it again but I am still having the same problem.
I also just tried to create a static route in vtysh, but it is never being put into the routing table.

@ton31337
Copy link
Member

Unfortunately I'm not able to reproduce this locally... Would it be possible to get the debug logs? At least debug zebra nexthop detail, debug bgp nht?

@Zendorea
Copy link

Hello,

We are trying to deploy FRR v10 with ookla on a RHEL9 server that has two peers to two Nokia 7750s via eBGP.
We are seeing inconsistent behavior with which FRR updates and maintains the FIB and RIB (iptables).

After a failed deployment we shut down a peer, filtered on incoming default routes, and allowed FRR to only advertise the anycast Lo we installed on the server.

We plan to set this up in our company LAB to try to reproduce this issue and would like to work with the FRR community to track down the issue and fix it.

@Trae32566
Copy link

Trae32566 commented Jun 15, 2024

Unfortunately I'm not able to reproduce this locally... Would it be possible to get the debug logs? At least debug zebra nexthop detail, debug bgp nht?

Again, my offer still stands. I have a dozen or more boxes that can be migrated between 9.1 and 10 which all exhibit this issue, and I can get you access or debugging output.

@cliff-ha
Copy link
Author

cliff-ha commented Jun 17, 2024

@ton31337 Sorry for the delay, as this is production servers I have to keep downgrading and upgrading to run the debug commands.

This is the debug of the two commands when I have added no ip nht resolve-via-default:

2024-06-17 13:30:39.787 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.244/32(0)(VRF default) flags 0xa ifindex 0 #paths 0 peer 0x56388cb724b0
2024-06-17 13:30:39.788 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.244/32(0)(VRF default) flags 0xa ifindex 0 #paths 0 peer 0x56388cb724b0
2024-06-17 13:30:39.793 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.246/32(0)(VRF default) flags 0xa ifindex 0 #paths 0 peer 0x56388cb77a10
2024-06-17 13:30:39.794 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.246/32(0)(VRF default) flags 0xa ifindex 0 #paths 0 peer 0x56388cb77a10
2024-06-17 13:30:40.435 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.244/32(0)(VRF default) flags 0xa ifindex 0 #paths 0 peer 0x56388cb724b0
2024-06-17 13:30:40.435 [DEBG] bgpd: [VKMV1-4Y773] bgp_update(100.64.1.244): NH unresolved
2024-06-17 13:30:40.435 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.244/32(0)(VRF default) flags 0xa ifindex 0 #paths 1 peer 0x56388cb724b0
2024-06-17 13:30:40.435 [DEBG] bgpd: [VKMV1-4Y773] bgp_update(100.64.1.244): NH unresolved
2024-06-17 13:30:40.435 [INFO] bgpd: [M59KS-A3ZXZ] bgp_update_receive: rcvd End-of-RIB for IPv4 Unicast from 100.64.1.244 in vrf default
2024-06-17 13:30:40.785 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.244/32(0)(VRF default) flags 0xa ifindex 0 #paths 2 peer 0x56388cb724b0
2024-06-17 13:30:40.785 [DEBG] bgpd: [VKMV1-4Y773] bgp_update(100.64.1.244): NH unresolved
2024-06-17 13:30:41.030 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.246/32(0)(VRF default) flags 0xa ifindex 0 #paths 0 peer 0x56388cb77a10
2024-06-17 13:30:41.030 [DEBG] bgpd: [VKMV1-4Y773] bgp_update(100.64.1.246): NH unresolved
2024-06-17 13:30:41.030 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.246/32(0)(VRF default) flags 0xa ifindex 0 #paths 1 peer 0x56388cb77a10
2024-06-17 13:30:41.030 [DEBG] bgpd: [VKMV1-4Y773] bgp_update(100.64.1.246): NH unresolved
2024-06-17 13:30:41.030 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.246/32(0)(VRF default) flags 0xa ifindex 0 #paths 2 peer 0x56388cb77a10
2024-06-17 13:30:41.030 [DEBG] bgpd: [VKMV1-4Y773] bgp_update(100.64.1.246): NH unresolved
2024-06-17 13:30:41.030 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.246/32(0)(VRF default) flags 0xa ifindex 0 #paths 3 peer 0x56388cb77a10
2024-06-17 13:30:41.030 [DEBG] bgpd: [VKMV1-4Y773] bgp_update(100.64.1.246): NH unresolved
2024-06-17 13:30:41.030 [INFO] bgpd: [M59KS-A3ZXZ] bgp_update_receive: rcvd End-of-RIB for IPv4 Unicast from 100.64.1.246 in vrf default
2024-06-17 13:30:41.065 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.244/32(0)(VRF default) flags 0xa ifindex 0 #paths 3 peer 0x56388cb724b0
2024-06-17 13:30:41.065 [DEBG] bgpd: [VKMV1-4Y773] bgp_update(100.64.1.244): NH unresolved
2024-06-17 13:30:41.065 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.244/32(0)(VRF default) flags 0xa ifindex 0 #paths 4 peer 0x56388cb724b0
2024-06-17 13:30:41.065 [DEBG] bgpd: [VKMV1-4Y773] bgp_update(100.64.1.244): NH unresolved
2024-06-17 13:30:41.870 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.246/32(0)(VRF default) flags 0xa ifindex 0 #paths 4 peer 0x56388cb77a10
2024-06-17 13:30:41.870 [DEBG] bgpd: [VKMV1-4Y773] bgp_update(100.64.1.246): NH unresolved

This is how it looks when I have not added the no ip nht resolve-via-default:

024-06-17 13:27:36.109 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.244/32(0)(VRF default) flags 0xb ifindex 0 #paths 0 peer 0x56388cb724b0
2024-06-17 13:27:36.109 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.244/32(0)(VRF default) flags 0xb ifindex 0 #paths 0 peer 0x56388cb724b0
2024-06-17 13:27:36.116 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.246/32(0)(VRF default) flags 0xb ifindex 0 #paths 0 peer 0x56388cb77a10
2024-06-17 13:27:36.117 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.246/32(0)(VRF default) flags 0xb ifindex 0 #paths 0 peer 0x56388cb77a10
2024-06-17 13:27:37.160 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.246/32(0)(VRF default) flags 0xb ifindex 0 #paths 0 peer 0x56388cb77a10
2024-06-17 13:27:37.160 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.246/32(0)(VRF default) flags 0xb ifindex 0 #paths 1 peer 0x56388cb77a10
2024-06-17 13:27:37.160 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.246/32(0)(VRF default) flags 0xb ifindex 0 #paths 2 peer 0x56388cb77a10
2024-06-17 13:27:37.160 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.246/32(0)(VRF default) flags 0xb ifindex 0 #paths 3 peer 0x56388cb77a10
2024-06-17 13:27:37.160 [INFO] bgpd: [M59KS-A3ZXZ] bgp_update_receive: rcvd End-of-RIB for IPv4 Unicast from 100.64.1.246 in vrf default
2024-06-17 13:27:37.220 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x5598943c89b0, vrf 0, type 29, depends 0x0 => Found 0x0([NULL])
2024-06-17 13:27:37.220 [DEBG] zebra: [PKSQ5-QBSHW] zebra_nhe_find: => created 0x55989429eb00 (41[])
2024-06-17 13:27:37.220 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x5598943c89b0(41[]) => nhe 0x55989429eb00(41[])
2024-06-17 13:27:37.220 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429eb00 (41[]) 0 => 1
2024-06-17 13:27:37.220 [DEBG] zebra: [VKWCR-QB19H] zebra_nhg_free: nhe 0x5598943c89b0 (41[]), refcnt 0, NH 100.64.1.246
2024-06-17 13:27:37.220 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x5598943c88d0, vrf 0, type 29, depends 0x0 => Found 0x55989429eb00(41[])
2024-06-17 13:27:37.220 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x5598943c88d0(0[]) => nhe 0x55989429eb00(41[])
2024-06-17 13:27:37.220 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429eb00 (41[]) 1 => 2
2024-06-17 13:27:37.220 [DEBG] zebra: [VKWCR-QB19H] zebra_nhg_free: nhe 0x5598943c88d0 (0[]), refcnt 0, NH 100.64.1.246
2024-06-17 13:27:37.220 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x55989429e910, vrf 0, type 29, depends 0x0 => Found 0x55989429eb00(41[])
2024-06-17 13:27:37.220 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x55989429e910(0[]) => nhe 0x55989429eb00(41[])
2024-06-17 13:27:37.220 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429eb00 (41[]) 2 => 3
2024-06-17 13:27:37.220 [DEBG] zebra: [VKWCR-QB19H] zebra_nhg_free: nhe 0x55989429e910 (0[]), refcnt 0, NH 100.64.1.246
2024-06-17 13:27:37.220 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x55989429eba0, vrf 0, type 29, depends 0x0 => Found 0x55989429eb00(41[])
2024-06-17 13:27:37.220 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x55989429eba0(0[]) => nhe 0x55989429eb00(41[])
2024-06-17 13:27:37.220 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429eb00 (41[]) 3 => 4
2024-06-17 13:27:37.220 [DEBG] zebra: [VKWCR-QB19H] zebra_nhg_free: nhe 0x55989429eba0 (0[]), refcnt 0, NH 100.64.1.246
2024-06-17 13:27:37.220 [DEBG] zebra: [VTD0C-NR53W] nexthop_active_update: re 0x55989429f3d0 nhe 0x55989429eb00 (41[]), curr_nhe 0x55989429e910
2024-06-17 13:27:37.220 [DEBG] zebra: [T9JWA-N8HM5] nexthop_active_check: re 0x55989429f3d0, nexthop 100.64.1.246
2024-06-17 13:27:37.220 [DEBG] zebra: [G4VYW-RVMTR] nexthop_active: RECURSIVE match 0x559894300e30 (18[10.16.8.65 if 2 vrfid 0]), newhop 10.16.8.65, via eth0
2024-06-17 13:27:37.220 [DEBG] zebra: [ZG85Y-SBJH3] nexthop_active_update: re 0x55989429f3d0 curr_active 1
2024-06-17 13:27:37.220 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x55989429e910, vrf 0, type 29, depends 0x0 => Found 0x5598942a0120(25[24])
2024-06-17 13:27:37.220 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x55989429e910(0[]) => nhe 0x5598942a0120(25[24])
2024-06-17 13:27:37.220 [DEBG] zebra: [J6P4K-BSDDN] nexthop_active_update: re 0x55989429f3d0 CHANGED: nhe 0x55989429eb00 (41[]) => new_nhe 0x5598942a0120 (25[24])
2024-06-17 13:27:37.220 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a0120 (25[24]) 3 => 4
2024-06-17 13:27:37.220 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 8 => 9
2024-06-17 13:27:37.220 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x55989429eb00 (41[]) 4 => 3
2024-06-17 13:27:37.220 [DEBG] zebra: [VKWCR-QB19H] zebra_nhg_free: nhe 0x55989429e910 (0[]), refcnt 0, NH 100.64.1.246
2024-06-17 13:27:37.220 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 24[10.16.8.65 if 2 vrfid 0]
2024-06-17 13:27:37.220 [DEBG] zebra: [VTD0C-NR53W] nexthop_active_update: re 0x55989429f250 nhe 0x55989429eb00 (41[]), curr_nhe 0x55989429eba0
2024-06-17 13:27:37.220 [DEBG] zebra: [T9JWA-N8HM5] nexthop_active_check: re 0x55989429f250, nexthop 100.64.1.246
2024-06-17 13:27:37.220 [DEBG] zebra: [G4VYW-RVMTR] nexthop_active: RECURSIVE match 0x559894300e30 (18[10.16.8.65 if 2 vrfid 0]), newhop 10.16.8.65, via eth0
2024-06-17 13:27:37.220 [DEBG] zebra: [ZG85Y-SBJH3] nexthop_active_update: re 0x55989429f250 curr_active 1
2024-06-17 13:27:37.220 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x55989429eba0, vrf 0, type 29, depends 0x0 => Found 0x5598942a0120(25[24])
2024-06-17 13:27:37.220 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x55989429eba0(0[]) => nhe 0x5598942a0120(25[24])
2024-06-17 13:27:37.220 [DEBG] zebra: [J6P4K-BSDDN] nexthop_active_update: re 0x55989429f250 CHANGED: nhe 0x55989429eb00 (41[]) => new_nhe 0x5598942a0120 (25[24])
2024-06-17 13:27:37.220 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a0120 (25[24]) 4 => 5
2024-06-17 13:27:37.220 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 9 => 10
2024-06-17 13:27:37.220 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x55989429eb00 (41[]) 3 => 2
2024-06-17 13:27:37.220 [DEBG] zebra: [VKWCR-QB19H] zebra_nhg_free: nhe 0x55989429eba0 (0[]), refcnt 0, NH 100.64.1.246
2024-06-17 13:27:37.220 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 24[10.16.8.65 if 2 vrfid 0]
2024-06-17 13:27:37.220 [DEBG] zebra: [VTD0C-NR53W] nexthop_active_update: re 0x5598943c8830 nhe 0x55989429eb00 (41[]), curr_nhe 0x55989429ef70
2024-06-17 13:27:37.220 [DEBG] zebra: [T9JWA-N8HM5] nexthop_active_check: re 0x5598943c8830, nexthop 100.64.1.246
2024-06-17 13:27:37.220 [DEBG] zebra: [G4VYW-RVMTR] nexthop_active: RECURSIVE match 0x559894300e30 (18[10.16.8.65 if 2 vrfid 0]), newhop 10.16.8.65, via eth0
2024-06-17 13:27:37.220 [DEBG] zebra: [ZG85Y-SBJH3] nexthop_active_update: re 0x5598943c8830 curr_active 1
2024-06-17 13:27:37.220 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x55989429ef70, vrf 0, type 29, depends 0x0 => Found 0x5598942a0120(25[24])
2024-06-17 13:27:37.220 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x55989429ef70(0[]) => nhe 0x5598942a0120(25[24])
2024-06-17 13:27:37.220 [DEBG] zebra: [J6P4K-BSDDN] nexthop_active_update: re 0x5598943c8830 CHANGED: nhe 0x55989429eb00 (41[]) => new_nhe 0x5598942a0120 (25[24])
2024-06-17 13:27:37.220 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a0120 (25[24]) 5 => 6
2024-06-17 13:27:37.220 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 10 => 11
2024-06-17 13:27:37.220 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x55989429eb00 (41[]) 2 => 1
2024-06-17 13:27:37.220 [DEBG] zebra: [VKWCR-QB19H] zebra_nhg_free: nhe 0x55989429ef70 (0[]), refcnt 0, NH 100.64.1.246
2024-06-17 13:27:37.220 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 24[10.16.8.65 if 2 vrfid 0]
2024-06-17 13:27:37.220 [DEBG] zebra: [VTD0C-NR53W] nexthop_active_update: re 0x55989429e870 nhe 0x55989429eb00 (41[]), curr_nhe 0x5598942a3360
2024-06-17 13:27:37.220 [DEBG] zebra: [T9JWA-N8HM5] nexthop_active_check: re 0x55989429e870, nexthop 100.64.1.246
2024-06-17 13:27:37.220 [DEBG] zebra: [G4VYW-RVMTR] nexthop_active: RECURSIVE match 0x559894300e30 (18[10.16.8.65 if 2 vrfid 0]), newhop 10.16.8.65, via eth0
2024-06-17 13:27:37.220 [DEBG] zebra: [ZG85Y-SBJH3] nexthop_active_update: re 0x55989429e870 curr_active 1
2024-06-17 13:27:37.220 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x5598942a3360, vrf 0, type 29, depends 0x0 => Found 0x5598942a0120(25[24])
2024-06-17 13:27:37.220 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x5598942a3360(0[]) => nhe 0x5598942a0120(25[24])
2024-06-17 13:27:37.220 [DEBG] zebra: [J6P4K-BSDDN] nexthop_active_update: re 0x55989429e870 CHANGED: nhe 0x55989429eb00 (41[]) => new_nhe 0x5598942a0120 (25[24])
2024-06-17 13:27:37.220 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a0120 (25[24]) 6 => 7
2024-06-17 13:27:37.220 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 11 => 12
2024-06-17 13:27:37.220 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x55989429eb00 (41[]) 1 => 0
2024-06-17 13:27:37.220 [DEBG] zebra: [JE46R-G2NEE] zebra_nhg_release: nhe 0x55989429eb00 (41[])
2024-06-17 13:27:37.220 [DEBG] zebra: [VKWCR-QB19H] zebra_nhg_free: nhe 0x55989429eb00 (41[]), refcnt 0, NH 100.64.1.246
2024-06-17 13:27:37.220 [DEBG] zebra: [VKWCR-QB19H] zebra_nhg_free: nhe 0x5598942a3360 (0[]), refcnt 0, NH 100.64.1.246
2024-06-17 13:27:37.220 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 24[10.16.8.65 if 2 vrfid 0]
2024-06-17 13:27:37.365 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.244/32(0)(VRF default) flags 0xb ifindex 0 #paths 0 peer 0x56388cb724b0
2024-06-17 13:27:37.365 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.244/32(0)(VRF default) flags 0xb ifindex 0 #paths 1 peer 0x56388cb724b0
2024-06-17 13:27:37.365 [INFO] bgpd: [M59KS-A3ZXZ] bgp_update_receive: rcvd End-of-RIB for IPv4 Unicast from 100.64.1.244 in vrf default
2024-06-17 13:27:37.425 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x55989429ef70, vrf 0, type 29, depends 0x0 => Found 0x0([NULL])
2024-06-17 13:27:37.425 [DEBG] zebra: [PKSQ5-QBSHW] zebra_nhe_find: => created 0x55989429f620 (42[])
2024-06-17 13:27:37.425 [DEBG] zebra: [GF4GR-QHD9D] zebra_nhe_find: depends NH 100.64.1.244
2024-06-17 13:27:37.425 [DEBG] zebra: [XBKWK-JHHEB] zebra_nhg_find: id 0, nhg 0x7fffb7883550, vrf 0, type 29, depends 0x0
2024-06-17 13:27:37.425 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x7fffb7883440, vrf 0, type 29, depends 0x0 => Found 0x0([NULL])
2024-06-17 13:27:37.425 [DEBG] zebra: [PKSQ5-QBSHW] zebra_nhe_find: => created 0x5598942a17c0 (43[])
2024-06-17 13:27:37.425 [DEBG] zebra: [WZSW5-08CR9] zebra_nhg_find_nexthop: nh 100.64.1.244 => 0x5598942a17c0 (43[])
2024-06-17 13:27:37.425 [DEBG] zebra: [WZSW5-08CR9] depends_find_singleton: nh 100.64.1.244 => 0x5598942a17c0 (43[])
2024-06-17 13:27:37.425 [DEBG] zebra: [M7KCA-V50J1] depends_find: nh 100.64.1.244  => 0x5598942a17c0 (43[])
2024-06-17 13:27:37.425 [DEBG] zebra: [P9HGF-3YXHA] depends_find_add: nh 100.64.1.244 => 0x5598942a17c0
2024-06-17 13:27:37.425 [DEBG] zebra: [YRY3N-ZSBY6] depends_add: head 0x55989429f688 nh 100.64.1.244
2024-06-17 13:27:37.425 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a17c0 (43[]) 0 => 1
2024-06-17 13:27:37.425 [DEBG] zebra: [GF4GR-QHD9D] zebra_nhe_find: depends NH 100.64.1.246
2024-06-17 13:27:37.425 [DEBG] zebra: [XBKWK-JHHEB] zebra_nhg_find: id 0, nhg 0x7fffb7883550, vrf 0, type 29, depends 0x0
2024-06-17 13:27:37.425 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x7fffb7883440, vrf 0, type 29, depends 0x0 => Found 0x0([NULL])
2024-06-17 13:27:37.425 [DEBG] zebra: [PKSQ5-QBSHW] zebra_nhe_find: => created 0x5598942a1900 (44[])
2024-06-17 13:27:37.425 [DEBG] zebra: [WZSW5-08CR9] zebra_nhg_find_nexthop: nh 100.64.1.246 => 0x5598942a1900 (44[])
2024-06-17 13:27:37.425 [DEBG] zebra: [WZSW5-08CR9] depends_find_singleton: nh 100.64.1.246 => 0x5598942a1900 (44[])
2024-06-17 13:27:37.425 [DEBG] zebra: [M7KCA-V50J1] depends_find: nh 100.64.1.246  => 0x5598942a1900 (44[])
2024-06-17 13:27:37.425 [DEBG] zebra: [P9HGF-3YXHA] depends_find_add: nh 100.64.1.246 => 0x5598942a1900
2024-06-17 13:27:37.425 [DEBG] zebra: [YRY3N-ZSBY6] depends_add: head 0x55989429f688 nh 100.64.1.246
2024-06-17 13:27:37.425 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a1900 (44[]) 0 => 1
2024-06-17 13:27:37.425 [DEBG] zebra: [YAE7F-MXCPH] zebra_nhg_connect_depends: nhe 0x55989429f620 (42[43/44]), dep 0x5598942a17c0 (43[])
2024-06-17 13:27:37.425 [DEBG] zebra: [YAE7F-MXCPH] zebra_nhg_connect_depends: nhe 0x55989429f620 (42[43/44]), dep 0x5598942a1900 (44[])
2024-06-17 13:27:37.425 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x55989429ef70(42[]) => nhe 0x55989429f620(42[43/44])
2024-06-17 13:27:37.425 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429f620 (42[43/44]) 0 => 1
2024-06-17 13:27:37.425 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a17c0 (43[]) 1 => 2
2024-06-17 13:27:37.425 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a1900 (44[]) 1 => 2
2024-06-17 13:27:37.425 [DEBG] zebra: [SCDBM-4H062] zebra_nhg_free: nhe 0x55989429ef70 (42[]), refcnt 0
2024-06-17 13:27:37.425 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x55989429f6c0, vrf 0, type 29, depends 0x0 => Found 0x55989429f620(42[43/44])
2024-06-17 13:27:37.425 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x55989429f6c0(0[]) => nhe 0x55989429f620(42[43/44])
2024-06-17 13:27:37.425 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429f620 (42[43/44]) 1 => 2
2024-06-17 13:27:37.425 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a17c0 (43[]) 2 => 3
2024-06-17 13:27:37.425 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a1900 (44[]) 2 => 3
2024-06-17 13:27:37.425 [DEBG] zebra: [SCDBM-4H062] zebra_nhg_free: nhe 0x55989429f6c0 (0[]), refcnt 0
2024-06-17 13:27:37.425 [DEBG] zebra: [VTD0C-NR53W] nexthop_active_update: re 0x55989429e910 nhe 0x55989429f620 (42[43/44]), curr_nhe 0x55989429f6c0
2024-06-17 13:27:37.425 [DEBG] zebra: [T9JWA-N8HM5] nexthop_active_check: re 0x55989429e910, nexthop 100.64.1.244
2024-06-17 13:27:37.425 [DEBG] zebra: [G4VYW-RVMTR] nexthop_active: RECURSIVE match 0x559894300e30 (18[10.16.8.65 if 2 vrfid 0]), newhop 10.16.8.65, via eth0
2024-06-17 13:27:37.425 [DEBG] zebra: [T9JWA-N8HM5] nexthop_active_check: re 0x55989429e910, nexthop 100.64.1.246
2024-06-17 13:27:37.425 [DEBG] zebra: [G4VYW-RVMTR] nexthop_active: RECURSIVE match 0x559894300e30 (18[10.16.8.65 if 2 vrfid 0]), newhop 10.16.8.65, via eth0
2024-06-17 13:27:37.425 [DEBG] zebra: [ZG85Y-SBJH3] nexthop_active_update: re 0x55989429e910 curr_active 2
2024-06-17 13:27:37.425 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x55989429f6c0, vrf 0, type 29, depends 0x0 => Found 0x55989429f8c0(22[23/25])
2024-06-17 13:27:37.425 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x55989429f6c0(0[]) => nhe 0x55989429f8c0(22[23/25])
2024-06-17 13:27:37.425 [DEBG] zebra: [J6P4K-BSDDN] nexthop_active_update: re 0x55989429e910 CHANGED: nhe 0x55989429f620 (42[43/44]) => new_nhe 0x55989429f8c0 (22[23/25])
2024-06-17 13:27:37.425 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429f8c0 (22[23/25]) 1 => 2
2024-06-17 13:27:37.425 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429fd20 (23[24]) 3 => 4
2024-06-17 13:27:37.425 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 12 => 13
2024-06-17 13:27:37.425 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a0120 (25[24]) 7 => 8
2024-06-17 13:27:37.425 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 13 => 14
2024-06-17 13:27:37.425 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x55989429f620 (42[43/44]) 2 => 1
2024-06-17 13:27:37.425 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a17c0 (43[]) 3 => 2
2024-06-17 13:27:37.425 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a1900 (44[]) 3 => 2
2024-06-17 13:27:37.425 [DEBG] zebra: [SCDBM-4H062] zebra_nhg_free: nhe 0x55989429f6c0 (0[]), refcnt 0
2024-06-17 13:27:37.425 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 22[23/25]
2024-06-17 13:27:37.425 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 24[10.16.8.65 if 2 vrfid 0]
2024-06-17 13:27:37.425 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 24[10.16.8.65 if 2 vrfid 0]
2024-06-17 13:27:37.425 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a0120 (25[24]) 8 => 7
2024-06-17 13:27:37.425 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 14 => 13
2024-06-17 13:27:37.425 [DEBG] zebra: [VTD0C-NR53W] nexthop_active_update: re 0x5598943c88d0 nhe 0x55989429f620 (42[43/44]), curr_nhe 0x55989429f250
2024-06-17 13:27:37.425 [DEBG] zebra: [T9JWA-N8HM5] nexthop_active_check: re 0x5598943c88d0, nexthop 100.64.1.244
2024-06-17 13:27:37.425 [DEBG] zebra: [G4VYW-RVMTR] nexthop_active: RECURSIVE match 0x559894300e30 (18[10.16.8.65 if 2 vrfid 0]), newhop 10.16.8.65, via eth0
2024-06-17 13:27:37.425 [DEBG] zebra: [T9JWA-N8HM5] nexthop_active_check: re 0x5598943c88d0, nexthop 100.64.1.246
2024-06-17 13:27:37.425 [DEBG] zebra: [G4VYW-RVMTR] nexthop_active: RECURSIVE match 0x559894300e30 (18[10.16.8.65 if 2 vrfid 0]), newhop 10.16.8.65, via eth0
2024-06-17 13:27:37.425 [DEBG] zebra: [ZG85Y-SBJH3] nexthop_active_update: re 0x5598943c88d0 curr_active 2
2024-06-17 13:27:37.426 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x55989429f250, vrf 0, type 29, depends 0x0 => Found 0x55989429f8c0(22[23/25])
2024-06-17 13:27:37.426 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x55989429f250(0[]) => nhe 0x55989429f8c0(22[23/25])
2024-06-17 13:27:37.426 [DEBG] zebra: [J6P4K-BSDDN] nexthop_active_update: re 0x5598943c88d0 CHANGED: nhe 0x55989429f620 (42[43/44]) => new_nhe 0x55989429f8c0 (22[23/25])
2024-06-17 13:27:37.426 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429f8c0 (22[23/25]) 1 => 2
2024-06-17 13:27:37.426 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429fd20 (23[24]) 4 => 5
2024-06-17 13:27:37.426 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 13 => 14
2024-06-17 13:27:37.426 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a0120 (25[24]) 7 => 8
2024-06-17 13:27:37.426 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 14 => 15
2024-06-17 13:27:37.426 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x55989429f620 (42[43/44]) 1 => 0
2024-06-17 13:27:37.426 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a17c0 (43[]) 2 => 1
2024-06-17 13:27:37.426 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a1900 (44[]) 2 => 1
2024-06-17 13:27:37.426 [DEBG] zebra: [JE46R-G2NEE] zebra_nhg_release: nhe 0x55989429f620 (42[43/44])
2024-06-17 13:27:37.426 [DEBG] zebra: [SCDBM-4H062] zebra_nhg_free: nhe 0x55989429f620 (42[43/44]), refcnt 0
2024-06-17 13:27:37.426 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a17c0 (43[]) 1 => 0
2024-06-17 13:27:37.426 [DEBG] zebra: [JE46R-G2NEE] zebra_nhg_release: nhe 0x5598942a17c0 (43[])
2024-06-17 13:27:37.426 [DEBG] zebra: [VKWCR-QB19H] zebra_nhg_free: nhe 0x5598942a17c0 (43[]), refcnt 0, NH 100.64.1.244
2024-06-17 13:27:37.427 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a1900 (44[]) 1 => 0
2024-06-17 13:27:37.427 [DEBG] zebra: [JE46R-G2NEE] zebra_nhg_release: nhe 0x5598942a1900 (44[])
2024-06-17 13:27:37.427 [DEBG] zebra: [VKWCR-QB19H] zebra_nhg_free: nhe 0x5598942a1900 (44[]), refcnt 0, NH 100.64.1.246
2024-06-17 13:27:37.427 [DEBG] zebra: [SCDBM-4H062] zebra_nhg_free: nhe 0x55989429f250 (0[]), refcnt 0
2024-06-17 13:27:37.427 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 22[23/25]
2024-06-17 13:27:37.427 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 24[10.16.8.65 if 2 vrfid 0]
2024-06-17 13:27:37.427 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 24[10.16.8.65 if 2 vrfid 0]
2024-06-17 13:27:37.427 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a0120 (25[24]) 8 => 7
2024-06-17 13:27:37.427 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 15 => 14
2024-06-17 13:27:37.715 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.244/32(0)(VRF default) flags 0xb ifindex 0 #paths 2 peer 0x56388cb724b0
2024-06-17 13:27:37.775 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x5598943c8a30, vrf 0, type 29, depends 0x0 => Found 0x0([NULL])
2024-06-17 13:27:37.775 [DEBG] zebra: [PKSQ5-QBSHW] zebra_nhe_find: => created 0x55989429f3d0 (45[])
2024-06-17 13:27:37.775 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x5598943c8a30(45[]) => nhe 0x55989429f3d0(45[])
2024-06-17 13:27:37.775 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429f3d0 (45[]) 0 => 1
2024-06-17 13:27:37.775 [DEBG] zebra: [VKWCR-QB19H] zebra_nhg_free: nhe 0x5598943c8a30 (45[]), refcnt 0, NH 100.64.1.244
2024-06-17 13:27:37.775 [DEBG] zebra: [VTD0C-NR53W] nexthop_active_update: re 0x55989429f250 nhe 0x55989429f3d0 (45[]), curr_nhe 0x55989429f6a0
2024-06-17 13:27:37.775 [DEBG] zebra: [T9JWA-N8HM5] nexthop_active_check: re 0x55989429f250, nexthop 100.64.1.244
2024-06-17 13:27:37.775 [DEBG] zebra: [G4VYW-RVMTR] nexthop_active: RECURSIVE match 0x559894300e30 (18[10.16.8.65 if 2 vrfid 0]), newhop 10.16.8.65, via eth0
2024-06-17 13:27:37.775 [DEBG] zebra: [ZG85Y-SBJH3] nexthop_active_update: re 0x55989429f250 curr_active 1
2024-06-17 13:27:37.775 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x55989429f6a0, vrf 0, type 29, depends 0x0 => Found 0x55989429fd20(23[24])
2024-06-17 13:27:37.775 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x55989429f6a0(0[]) => nhe 0x55989429fd20(23[24])
2024-06-17 13:27:37.775 [DEBG] zebra: [J6P4K-BSDDN] nexthop_active_update: re 0x55989429f250 CHANGED: nhe 0x55989429f3d0 (45[]) => new_nhe 0x55989429fd20 (23[24])
2024-06-17 13:27:37.775 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429fd20 (23[24]) 5 => 6
2024-06-17 13:27:37.775 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 14 => 15
2024-06-17 13:27:37.775 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x55989429f3d0 (45[]) 1 => 0
2024-06-17 13:27:37.775 [DEBG] zebra: [JE46R-G2NEE] zebra_nhg_release: nhe 0x55989429f3d0 (45[])
2024-06-17 13:27:37.775 [DEBG] zebra: [VKWCR-QB19H] zebra_nhg_free: nhe 0x55989429f3d0 (45[]), refcnt 0, NH 100.64.1.244
2024-06-17 13:27:37.775 [DEBG] zebra: [VKWCR-QB19H] zebra_nhg_free: nhe 0x55989429f6a0 (0[]), refcnt 0, NH 100.64.1.244
2024-06-17 13:27:37.775 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 24[10.16.8.65 if 2 vrfid 0]
2024-06-17 13:27:37.995 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.244/32(0)(VRF default) flags 0xb ifindex 0 #paths 3 peer 0x56388cb724b0
2024-06-17 13:27:37.995 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.244/32(0)(VRF default) flags 0xb ifindex 0 #paths 4 peer 0x56388cb724b0
2024-06-17 13:27:38.000 [DEBG] bgpd: [WNKP5-SN018] Found existing bnc 100.64.1.246/32(0)(VRF default) flags 0xb ifindex 0 #paths 4 peer 0x56388cb77a10
2024-06-17 13:27:38.055 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x55989429eae0, vrf 0, type 29, depends 0x0 => Found 0x0([NULL])
2024-06-17 13:27:38.055 [DEBG] zebra: [PKSQ5-QBSHW] zebra_nhe_find: => created 0x5598942a1900 (46[])
2024-06-17 13:27:38.055 [DEBG] zebra: [GF4GR-QHD9D] zebra_nhe_find: depends NH 100.64.1.244
2024-06-17 13:27:38.055 [DEBG] zebra: [XBKWK-JHHEB] zebra_nhg_find: id 0, nhg 0x7fffb7883550, vrf 0, type 29, depends 0x0
2024-06-17 13:27:38.055 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x7fffb7883440, vrf 0, type 29, depends 0x0 => Found 0x0([NULL])
2024-06-17 13:27:38.055 [DEBG] zebra: [PKSQ5-QBSHW] zebra_nhe_find: => created 0x5598942a1ca0 (47[])
2024-06-17 13:27:38.055 [DEBG] zebra: [WZSW5-08CR9] zebra_nhg_find_nexthop: nh 100.64.1.244 => 0x5598942a1ca0 (47[])
2024-06-17 13:27:38.055 [DEBG] zebra: [WZSW5-08CR9] depends_find_singleton: nh 100.64.1.244 => 0x5598942a1ca0 (47[])
2024-06-17 13:27:38.055 [DEBG] zebra: [M7KCA-V50J1] depends_find: nh 100.64.1.244  => 0x5598942a1ca0 (47[])
2024-06-17 13:27:38.055 [DEBG] zebra: [P9HGF-3YXHA] depends_find_add: nh 100.64.1.244 => 0x5598942a1ca0
2024-06-17 13:27:38.055 [DEBG] zebra: [YRY3N-ZSBY6] depends_add: head 0x5598942a1968 nh 100.64.1.244
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a1ca0 (47[]) 0 => 1
2024-06-17 13:27:38.055 [DEBG] zebra: [GF4GR-QHD9D] zebra_nhe_find: depends NH 100.64.1.246
2024-06-17 13:27:38.055 [DEBG] zebra: [XBKWK-JHHEB] zebra_nhg_find: id 0, nhg 0x7fffb7883550, vrf 0, type 29, depends 0x0
2024-06-17 13:27:38.055 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x7fffb7883440, vrf 0, type 29, depends 0x0 => Found 0x0([NULL])
2024-06-17 13:27:38.055 [DEBG] zebra: [PKSQ5-QBSHW] zebra_nhe_find: => created 0x5598942a1de0 (48[])
2024-06-17 13:27:38.055 [DEBG] zebra: [WZSW5-08CR9] zebra_nhg_find_nexthop: nh 100.64.1.246 => 0x5598942a1de0 (48[])
2024-06-17 13:27:38.055 [DEBG] zebra: [WZSW5-08CR9] depends_find_singleton: nh 100.64.1.246 => 0x5598942a1de0 (48[])
2024-06-17 13:27:38.055 [DEBG] zebra: [M7KCA-V50J1] depends_find: nh 100.64.1.246  => 0x5598942a1de0 (48[])
2024-06-17 13:27:38.055 [DEBG] zebra: [P9HGF-3YXHA] depends_find_add: nh 100.64.1.246 => 0x5598942a1de0
2024-06-17 13:27:38.055 [DEBG] zebra: [YRY3N-ZSBY6] depends_add: head 0x5598942a1968 nh 100.64.1.246
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a1de0 (48[]) 0 => 1
2024-06-17 13:27:38.055 [DEBG] zebra: [YAE7F-MXCPH] zebra_nhg_connect_depends: nhe 0x5598942a1900 (46[47/48]), dep 0x5598942a1ca0 (47[])
2024-06-17 13:27:38.055 [DEBG] zebra: [YAE7F-MXCPH] zebra_nhg_connect_depends: nhe 0x5598942a1900 (46[47/48]), dep 0x5598942a1de0 (48[])
2024-06-17 13:27:38.055 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x55989429eae0(46[]) => nhe 0x5598942a1900(46[47/48])
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a1900 (46[47/48]) 0 => 1
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a1ca0 (47[]) 1 => 2
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a1de0 (48[]) 1 => 2
2024-06-17 13:27:38.055 [DEBG] zebra: [SCDBM-4H062] zebra_nhg_free: nhe 0x55989429eae0 (46[]), refcnt 0
2024-06-17 13:27:38.055 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x5598942a16a0, vrf 0, type 29, depends 0x0 => Found 0x5598942a1900(46[47/48])
2024-06-17 13:27:38.055 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x5598942a16a0(0[]) => nhe 0x5598942a1900(46[47/48])
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a1900 (46[47/48]) 1 => 2
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a1ca0 (47[]) 2 => 3
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a1de0 (48[]) 2 => 3
2024-06-17 13:27:38.055 [DEBG] zebra: [SCDBM-4H062] zebra_nhg_free: nhe 0x5598942a16a0 (0[]), refcnt 0
2024-06-17 13:27:38.055 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x5598942a19a0, vrf 0, type 29, depends 0x0 => Found 0x5598942a1900(46[47/48])
2024-06-17 13:27:38.055 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x5598942a19a0(0[]) => nhe 0x5598942a1900(46[47/48])
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a1900 (46[47/48]) 2 => 3
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a1ca0 (47[]) 3 => 4
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a1de0 (48[]) 3 => 4
2024-06-17 13:27:38.055 [DEBG] zebra: [SCDBM-4H062] zebra_nhg_free: nhe 0x5598942a19a0 (0[]), refcnt 0
2024-06-17 13:27:38.055 [DEBG] zebra: [VTD0C-NR53W] nexthop_active_update: re 0x55989429f6a0 nhe 0x5598942a1900 (46[47/48]), curr_nhe 0x5598942a1560
2024-06-17 13:27:38.055 [DEBG] zebra: [T9JWA-N8HM5] nexthop_active_check: re 0x55989429f6a0, nexthop 100.64.1.244
2024-06-17 13:27:38.055 [DEBG] zebra: [G4VYW-RVMTR] nexthop_active: RECURSIVE match 0x559894300e30 (18[10.16.8.65 if 2 vrfid 0]), newhop 10.16.8.65, via eth0
2024-06-17 13:27:38.055 [DEBG] zebra: [T9JWA-N8HM5] nexthop_active_check: re 0x55989429f6a0, nexthop 100.64.1.246
2024-06-17 13:27:38.055 [DEBG] zebra: [G4VYW-RVMTR] nexthop_active: RECURSIVE match 0x559894300e30 (18[10.16.8.65 if 2 vrfid 0]), newhop 10.16.8.65, via eth0
2024-06-17 13:27:38.055 [DEBG] zebra: [ZG85Y-SBJH3] nexthop_active_update: re 0x55989429f6a0 curr_active 2
2024-06-17 13:27:38.055 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x5598942a1560, vrf 0, type 29, depends 0x0 => Found 0x55989429f8c0(22[23/25])
2024-06-17 13:27:38.055 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x5598942a1560(0[]) => nhe 0x55989429f8c0(22[23/25])
2024-06-17 13:27:38.055 [DEBG] zebra: [J6P4K-BSDDN] nexthop_active_update: re 0x55989429f6a0 CHANGED: nhe 0x5598942a1900 (46[47/48]) => new_nhe 0x55989429f8c0 (22[23/25])
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429f8c0 (22[23/25]) 2 => 3
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429fd20 (23[24]) 6 => 7
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 15 => 16
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a0120 (25[24]) 7 => 8
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 16 => 17
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a1900 (46[47/48]) 3 => 2
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a1ca0 (47[]) 4 => 3
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a1de0 (48[]) 4 => 3
2024-06-17 13:27:38.055 [DEBG] zebra: [SCDBM-4H062] zebra_nhg_free: nhe 0x5598942a1560 (0[]), refcnt 0
2024-06-17 13:27:38.055 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 22[23/25]
2024-06-17 13:27:38.055 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 24[10.16.8.65 if 2 vrfid 0]
2024-06-17 13:27:38.055 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 24[10.16.8.65 if 2 vrfid 0]
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a0120 (25[24]) 8 => 7
2024-06-17 13:27:38.055 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 17 => 16
2024-06-17 13:27:38.057 [DEBG] zebra: [VTD0C-NR53W] nexthop_active_update: re 0x5598943c8a30 nhe 0x5598942a1900 (46[47/48]), curr_nhe 0x5598943c8830
2024-06-17 13:27:38.057 [DEBG] zebra: [T9JWA-N8HM5] nexthop_active_check: re 0x5598943c8a30, nexthop 100.64.1.244
2024-06-17 13:27:38.057 [DEBG] zebra: [G4VYW-RVMTR] nexthop_active: RECURSIVE match 0x559894300e30 (18[10.16.8.65 if 2 vrfid 0]), newhop 10.16.8.65, via eth0
2024-06-17 13:27:38.057 [DEBG] zebra: [T9JWA-N8HM5] nexthop_active_check: re 0x5598943c8a30, nexthop 100.64.1.246
2024-06-17 13:27:38.057 [DEBG] zebra: [G4VYW-RVMTR] nexthop_active: RECURSIVE match 0x559894300e30 (18[10.16.8.65 if 2 vrfid 0]), newhop 10.16.8.65, via eth0
2024-06-17 13:27:38.057 [DEBG] zebra: [ZG85Y-SBJH3] nexthop_active_update: re 0x5598943c8a30 curr_active 2
2024-06-17 13:27:38.057 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x5598943c8830, vrf 0, type 29, depends 0x0 => Found 0x55989429f8c0(22[23/25])
2024-06-17 13:27:38.057 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x5598943c8830(0[]) => nhe 0x55989429f8c0(22[23/25])
2024-06-17 13:27:38.057 [DEBG] zebra: [J6P4K-BSDDN] nexthop_active_update: re 0x5598943c8a30 CHANGED: nhe 0x5598942a1900 (46[47/48]) => new_nhe 0x55989429f8c0 (22[23/25])
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429f8c0 (22[23/25]) 3 => 4
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429fd20 (23[24]) 7 => 8
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 16 => 17
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a0120 (25[24]) 7 => 8
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 17 => 18
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a1900 (46[47/48]) 2 => 1
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a1ca0 (47[]) 3 => 2
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a1de0 (48[]) 3 => 2
2024-06-17 13:27:38.057 [DEBG] zebra: [SCDBM-4H062] zebra_nhg_free: nhe 0x5598943c8830 (0[]), refcnt 0
2024-06-17 13:27:38.057 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 22[23/25]
2024-06-17 13:27:38.057 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 24[10.16.8.65 if 2 vrfid 0]
2024-06-17 13:27:38.057 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 24[10.16.8.65 if 2 vrfid 0]
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a0120 (25[24]) 8 => 7
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 18 => 17
2024-06-17 13:27:38.057 [DEBG] zebra: [VTD0C-NR53W] nexthop_active_update: re 0x5598942a1600 nhe 0x5598942a1900 (46[47/48]), curr_nhe 0x55989429e870
2024-06-17 13:27:38.057 [DEBG] zebra: [T9JWA-N8HM5] nexthop_active_check: re 0x5598942a1600, nexthop 100.64.1.244
2024-06-17 13:27:38.057 [DEBG] zebra: [G4VYW-RVMTR] nexthop_active: RECURSIVE match 0x559894300e30 (18[10.16.8.65 if 2 vrfid 0]), newhop 10.16.8.65, via eth0
2024-06-17 13:27:38.057 [DEBG] zebra: [T9JWA-N8HM5] nexthop_active_check: re 0x5598942a1600, nexthop 100.64.1.246
2024-06-17 13:27:38.057 [DEBG] zebra: [G4VYW-RVMTR] nexthop_active: RECURSIVE match 0x559894300e30 (18[10.16.8.65 if 2 vrfid 0]), newhop 10.16.8.65, via eth0
2024-06-17 13:27:38.057 [DEBG] zebra: [ZG85Y-SBJH3] nexthop_active_update: re 0x5598942a1600 curr_active 2
2024-06-17 13:27:38.057 [DEBG] zebra: [WEXBA-A02TB] zebra_nhe_find: id 0, lookup 0x55989429e870, vrf 0, type 29, depends 0x0 => Found 0x55989429f8c0(22[23/25])
2024-06-17 13:27:38.057 [DEBG] zebra: [MGYCQ-XGZST] zebra_nhg_rib_find_nhe: rt_nhe 0x55989429e870(0[]) => nhe 0x55989429f8c0(22[23/25])
2024-06-17 13:27:38.057 [DEBG] zebra: [J6P4K-BSDDN] nexthop_active_update: re 0x5598942a1600 CHANGED: nhe 0x5598942a1900 (46[47/48]) => new_nhe 0x55989429f8c0 (22[23/25])
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429f8c0 (22[23/25]) 4 => 5
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429fd20 (23[24]) 8 => 9
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 17 => 18
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x5598942a0120 (25[24]) 7 => 8
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_increment_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 18 => 19
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a1900 (46[47/48]) 1 => 0
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a1ca0 (47[]) 2 => 1
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a1de0 (48[]) 2 => 1
2024-06-17 13:27:38.057 [DEBG] zebra: [JE46R-G2NEE] zebra_nhg_release: nhe 0x5598942a1900 (46[47/48])
2024-06-17 13:27:38.057 [DEBG] zebra: [SCDBM-4H062] zebra_nhg_free: nhe 0x5598942a1900 (46[47/48]), refcnt 0
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a1ca0 (47[]) 1 => 0
2024-06-17 13:27:38.057 [DEBG] zebra: [JE46R-G2NEE] zebra_nhg_release: nhe 0x5598942a1ca0 (47[])
2024-06-17 13:27:38.057 [DEBG] zebra: [VKWCR-QB19H] zebra_nhg_free: nhe 0x5598942a1ca0 (47[]), refcnt 0, NH 100.64.1.244
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x5598942a1de0 (48[]) 1 => 0
2024-06-17 13:27:38.057 [DEBG] zebra: [JE46R-G2NEE] zebra_nhg_release: nhe 0x5598942a1de0 (48[])
2024-06-17 13:27:38.057 [DEBG] zebra: [VKWCR-QB19H] zebra_nhg_free: nhe 0x5598942a1de0 (48[]), refcnt 0, NH 100.64.1.246
2024-06-17 13:27:38.057 [DEBG] zebra: [SCDBM-4H062] zebra_nhg_free: nhe 0x55989429e870 (0[]), refcnt 0
2024-06-17 13:27:38.057 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 22[23/25]
2024-06-17 13:27:38.057 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 24[10.16.8.65 if 2 vrfid 0]
2024-06-17 13:27:38.057 [DEBG] zebra: [PJXNX-HZST8] zebra_nhg_install_kernel: valid flag set for nh 24[10.16.8.65 if 2 vrfid 0]
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x55989429fd20 (23[24]) 9 => 8
2024-06-17 13:27:38.057 [DEBG] zebra: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x55989429ff40 (24[10.16.8.65 if 2 vrfid 0]) 19 => 18

In the last one the routes are being installed on eth0 and not the correct interface.
The show interface looks like this:

Interface dummy1 is up, line protocol is up
  Link ups:       0    last: (never)
  Link downs:     0    last: (never)
  vrf: default
  index 5 metric 0 mtu 1500 speed 0 txqlen 1000
  flags: <UP,BROADCAST,RUNNING,NOARP>
  Type: Ethernet
  HWaddr: c2:d7:83:34:a7:25
  inet 100.64.1.66/32 noprefixroute unnumbered
  Interface Type Other
  Interface Slave Type None
  protodown: off
Interface eth0 is up, line protocol is up
  Link ups:       0    last: (never)
  Link downs:     0    last: (never)
  vrf: default
  index 2 metric 0 mtu 1500 speed 10000 txqlen 1000
  flags: <UP,BROADCAST,RUNNING,MULTICAST>
  Type: Ethernet
  HWaddr: 00:50:56:83:b2:af
  inet 10.16.8.66/28 noprefixroute
  Interface Type Other
  Interface Slave Type None
  protodown: off
Interface eth1 is up, line protocol is up
  Link ups:       0    last: (never)
  Link downs:     0    last: (never)
  vrf: default
  index 3 metric 0 mtu 1500 speed 10000 txqlen 1000
  flags: <UP,BROADCAST,RUNNING,MULTICAST>
  Type: Ethernet
  HWaddr: 00:50:56:b1:2c:c8
  inet 100.64.1.247/31 noprefixroute
  Interface Type Other
  Interface Slave Type None
  protodown: off
Interface eth2 is up, line protocol is up
  Link ups:       0    last: (never)
  Link downs:     0    last: (never)
  vrf: default
  index 4 metric 0 mtu 1500 speed 10000 txqlen 1000
  flags: <UP,BROADCAST,RUNNING,MULTICAST>
  Type: Ethernet
  HWaddr: 00:50:56:b1:e0:18
  inet 100.64.1.245/31 noprefixroute
  Interface Type Other
  Interface Slave Type None
  protodown: off
Interface lo is up, line protocol is up
  Link ups:       0    last: (never)
  Link downs:     0    last: (never)
  vrf: default
  index 1 metric 0 mtu 65536 speed 0 txqlen 1000
  flags: <UP,LOOPBACK,RUNNING>
  Type: Loopback
  Interface Type Other
  Interface Slave Type None
  protodown: off

@ton31337
Copy link
Member

Something is really strange. Your NHs are always resolved via default route (while you have it disabled):

nexthop_active: RECURSIVE match 0x559894300e30 (18[10.16.8.65 if 2 vrfid 0]), newhop 10.16.8.65, via eth0

Is it possible to somehow access the box and debug/troubleshoot what's going on?

Or if this is the same case, then @Trae32566 could I get the access to your box?

@cliff-ha
Copy link
Author

Yes it is quite strange why it keeps doing that.

Unfortunately it is production devices, so it is not possible to give access to them.

@xinghunzi
Copy link

xinghunzi commented Jun 19, 2024

I deployed RockyLinux 9.4 on two virtual machines using VirtualBox and encountered the same issue. The BGP connection was successful, and in cases where the server had a default route, it would generate a route through that default route. However, if the server did not have a default route, no route would be generated. The problem was resolved by downgrading to FRR 9.1.

192.168.56.106:
[root@localhost ~]# cat /etc/frr/frr.conf
frr version 9.1
frr defaults traditional
hostname localhost.localdomain
log syslog informational
!
router bgp 64512
bgp router-id 192.168.56.106
neighbor 192.168.56.105 remote-as 64512
neighbor 192.168.56.105 update-source enp0s8
!
address-family ipv4 unicast
network 192.168.58.0/24
exit-address-family
exit
!
[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:68:12:85 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3
valid_lft 86053sec preferred_lft 86053sec
inet6 fe80::a00:27ff:fe68:1285/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:82:a6:8b brd ff:ff:ff:ff:ff:ff
inet 192.168.56.106/24 brd 192.168.56.255 scope global dynamic noprefixroute enp0s8
valid_lft 553sec preferred_lft 553sec
inet6 fe80::e9a6:6be9:d30e:bf76/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:22:72:2f brd ff:ff:ff:ff:ff:ff
inet 192.168.58.3/24 brd 192.168.58.255 scope global dynamic noprefixroute enp0s9
valid_lft 553sec preferred_lft 553sec
inet6 fe80::3d31:5e77:54d9:4b58/64 scope link noprefixroute
valid_lft forever preferred_lft forever

192.168.56.105:
[root@localhost ~]# cat /etc/frr/frr.conf
frr version 9.1
frr defaults traditional
hostname localhost.localdomain
log syslog informational
!
router bgp 64512
bgp router-id 192.168.56.105
neighbor 192.168.56.106 remote-as 64512
neighbor 192.168.56.106 update-source enp0s8
!
address-family ipv4 unicast
network 192.168.57.0/24
exit-address-family
exit
!
[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:ca:6a:ee brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3
valid_lft 86079sec preferred_lft 86079sec
inet6 fe80::a00:27ff:feca:6aee/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:10:d5:c9 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.105/24 brd 192.168.56.255 scope global dynamic noprefixroute enp0s8
valid_lft 579sec preferred_lft 579sec
inet6 fe80::d401:e6fa:72a5:1ad0/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:d0:0a:e6 brd ff:ff:ff:ff:ff:ff
inet 192.168.57.3/24 brd 192.168.57.255 scope global dynamic noprefixroute enp0s9
valid_lft 579sec preferred_lft 579sec
inet6 fe80::fd4:59b4:6943:65cc/64 scope link noprefixroute
valid_lft forever preferred_lft forever

@ton31337
Copy link
Member

ton31337 commented Jun 19, 2024

I just noticed that both your cases has noprefixroute for those interfaces. That means they are not installed into the RIB and that's why you have resolved via the default route. I assume you are using NetworkManger, right? If yes, please try using another manager (systemd-networkd, ifupdown2, etc.). More details: https://github.com/FRRouting/frr/releases/tag/frr-10.0.

@Trae32566
Copy link

I didn't realize it would break route selection like that; you may want to be a bit more verbose on those release notes given NetworkManager is the default for RHEL, Rocky Linux, CentOS, Fedora, and many others, and it doesn't clearly mention that it will cause severe routing issues. There are entire sections of the Red Hat documentation dedicated to getting FRR working on RHEL, and now those will no longer be valid due to this change because it breaks every RHEL or Fedora-based distribution. It would be one thing if this were a bug, but now you're doubling down and effectively saying it's a feature. I have a fleet of hundreds of servers..we can't just stop using the default networking provider, and even if we could, I wouldn't want to. Can you please implement a flag or something to change this functionality? It's insane to me that it even made it this far.

@ton31337 ton31337 removed the triage Needs further investigation label Jul 3, 2024
@ton31337 ton31337 removed this from the 10.1 milestone Jul 11, 2024
tohojo added a commit to tohojo/frr that referenced this issue Jul 17, 2024
When importing routes from the kernel, the zebra daemon ignores any routes
marked as 'proto kernel', such as the link-scoped routes that the kernel
generates for addresses assigned to interfaces. Instead, zebra implements its
own logic to synthesise routes for each address assignment, installing them into
the RIB with the ZEBRA_ROUTE_CONNECT proto set.

This behaviour requires zebra to mirror the logic of the kernel, to avoid having
the kernel FIB diverge from the FRR RIB, which can cause routing loops or other
failures. One example of this was the recent addition of support for the
'noprefixroute' flag to zebra[0].

However, attempting to mirror the kernel behaviour this way causes problems when
the mirroring is imperfect. An example of this was seen as a result of the
change mentioned above, where zebra honouring the noprefixroute flag leads to
routes missing from the RIB in some cases. Specifically, this happens when
network management daemons set the noprefixroute on the address assignment, but
subsequently installs a link-scoped route into the kernel identical to the
prefix route the kernel would have installed automatically. The use case for
this is enable the network management daemon to atomically change route
attributes (such as route metric) on the prefix route, but otherwise keep the
behaviour identical to the case where the kernel creates the prefix route
itself.

The failure described above was noticed for NetworkManager and reported as a
NetworkManager bug[1] as well as an FRR issue[2]. Other network management
daemons use the noprefixroute flag for similar purposes (e.g.,
systemd-networkd[3]).

[0] FRRouting#14957
[1] https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1452
[2] FRRouting#16101
[3] https://github.com/systemd/systemd/blob/main/src/network/networkd-dhcp4.c#L962

To resolve this discrepancy between the kernel FIB and the FRR RIB, this patch
changes zebra's behaviour to import 'proto kernel' instead of ignoring them, and
to treat routes with 'scope link' as ZEBRA_ROUTE_CONNECT routes, just like the
ones synthesised by zebra itself. This allows the noprefixroute flag to work
correctly, while still playing nice with network management daemons that install
a different link-scope route for installed addresses. The change in behaviour
can be seen from the following example:

Kernel config:
5: veth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen
1000
    link/ether fe:da:bb:eb:74:17 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.11.1.2/24 scope global veth0
       valid_lft forever preferred_lft forever
    inet 10.12.0.0/24 scope global noprefixroute veth0
       valid_lft forever preferred_lft forever

10.11.0.0/16 via 10.11.1.1 dev veth0
10.11.1.0/24 dev veth0 proto kernel scope link src 10.11.1.2
10.12.0.0/24 dev veth0 proto kernel scope link metric 100

The 10.12.0.0/24 route was manually added with:

Running zebra, pre-patch:

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

K>* 10.11.0.0/16 [0/0] via 10.11.1.1, veth0, 00:00:22
C>* 10.11.1.0/24 is directly connected, veth0, 00:00:22
L>* 10.11.1.2/32 is directly connected, veth0, 00:00:22
L>* 10.12.0.0/32 is directly connected, veth0, 00:00:22

Notice that the 10.12.0.0/24 route is missing from the RIB.

After the patch:

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

K>* 10.11.0.0/16 [0/0] via 10.11.1.1, veth0, 00:00:05
C * 10.11.1.0/24 is directly connected, veth0, 00:00:05
C>* 10.11.1.0/24 is directly connected, veth0, 00:00:05
L>* 10.11.1.2/32 is directly connected, veth0, 00:00:05
C>* 10.12.0.0/24 [0/100] is directly connected, veth0, 00:00:05
L>* 10.12.0.0/32 is directly connected, veth0, 00:00:05

The prefix is now shown as connected (C>) as it should. Note also that the other
prefix (10.11.1.0/24, without the noprefix flag) now appears twice, because it's
both created by zebra from the interface config, and imported from the kernel.
This is harmless as the routes are identical, and an arbitrary one just ends up
being selected.

Signed-off-by: Toke Høiland-Jørgensen <[email protected]>
Signed-off-by: Toke Høiland-Jørgensen <[email protected]>
tohojo added a commit to tohojo/frr that referenced this issue Jul 17, 2024
When importing routes from the kernel, the zebra daemon ignores any routes
marked as 'proto kernel', such as the link-scoped routes that the kernel
generates for addresses assigned to interfaces. Instead, zebra implements its
own logic to synthesise routes for each address assignment, installing them into
the RIB with the ZEBRA_ROUTE_CONNECT proto set.

This behaviour requires zebra to mirror the logic of the kernel, to avoid having
the kernel FIB diverge from the FRR RIB, which can cause routing loops or other
failures. One example of this was the recent addition of support for the
'noprefixroute' flag to zebra[0].

However, attempting to mirror the kernel behaviour this way causes problems when
the mirroring is imperfect. An example of this was seen as a result of the
change mentioned above, where zebra honouring the noprefixroute flag leads to
routes missing from the RIB in some cases. Specifically, this happens when
network management daemons set the noprefixroute on the address assignment, but
subsequently installs a link-scoped route into the kernel identical to the
prefix route the kernel would have installed automatically. The use case for
this is enable the network management daemon to atomically change route
attributes (such as route metric) on the prefix route, but otherwise keep the
behaviour identical to the case where the kernel creates the prefix route
itself.

The failure described above was noticed for NetworkManager and reported as a
NetworkManager bug[1] as well as an FRR issue[2]. Other network management
daemons use the noprefixroute flag for similar purposes (e.g.,
systemd-networkd[3]).

[0] FRRouting#14957
[1] https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1452
[2] FRRouting#16101
[3] https://github.com/systemd/systemd/blob/main/src/network/networkd-dhcp4.c#L962

To resolve this discrepancy between the kernel FIB and the FRR RIB, this patch
changes zebra's behaviour to import 'proto kernel' instead of ignoring them, and
to treat routes with 'scope link' as ZEBRA_ROUTE_CONNECT routes, just like the
ones synthesised by zebra itself. This allows the noprefixroute flag to work
correctly, while still playing nice with network management daemons that install
a different link-scope route for installed addresses. The change in behaviour
can be seen from the following example:

Kernel config:
5: veth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen
1000
    link/ether fe:da:bb:eb:74:17 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.11.1.2/24 scope global veth0
       valid_lft forever preferred_lft forever
    inet 10.12.0.0/24 scope global noprefixroute veth0
       valid_lft forever preferred_lft forever

10.11.0.0/16 via 10.11.1.1 dev veth0
10.11.1.0/24 dev veth0 proto kernel scope link src 10.11.1.2
10.12.0.0/24 dev veth0 proto kernel scope link metric 100

The 10.12.0.0/24 route was manually added with:

Running zebra, pre-patch:

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

K>* 10.11.0.0/16 [0/0] via 10.11.1.1, veth0, 00:00:22
C>* 10.11.1.0/24 is directly connected, veth0, 00:00:22
L>* 10.11.1.2/32 is directly connected, veth0, 00:00:22
L>* 10.12.0.0/32 is directly connected, veth0, 00:00:22

Notice that the 10.12.0.0/24 route is missing from the RIB.

After the patch:

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

K>* 10.11.0.0/16 [0/0] via 10.11.1.1, veth0, 00:00:05
C * 10.11.1.0/24 is directly connected, veth0, 00:00:05
C>* 10.11.1.0/24 is directly connected, veth0, 00:00:05
L>* 10.11.1.2/32 is directly connected, veth0, 00:00:05
C>* 10.12.0.0/24 [0/100] is directly connected, veth0, 00:00:05
L>* 10.12.0.0/32 is directly connected, veth0, 00:00:05

The prefix is now shown as connected (C>) as it should. Note also that the other
prefix (10.11.1.0/24, without the noprefix flag) now appears twice, because it's
both created by zebra from the interface config, and imported from the kernel.
This is harmless as the routes are identical, and an arbitrary one just ends up
being selected.

Signed-off-by: Toke Høiland-Jørgensen <[email protected]>
Signed-off-by: Toke Høiland-Jørgensen <[email protected]>
tohojo added a commit to tohojo/frr that referenced this issue Jul 17, 2024
When importing routes from the kernel, the zebra daemon ignores any routes
marked as 'proto kernel', such as the link-scoped routes that the kernel
generates for addresses assigned to interfaces. Instead, zebra implements its
own logic to synthesise routes for each address assignment, installing them into
the RIB with the ZEBRA_ROUTE_CONNECT proto set.

This behaviour requires zebra to mirror the logic of the kernel, to avoid having
the kernel FIB diverge from the FRR RIB, which can cause routing loops or other
failures. One example of this was the recent addition of support for the
'noprefixroute' flag to zebra[0].

However, attempting to mirror the kernel behaviour this way causes problems when
the mirroring is imperfect. An example of this was seen as a result of the
change mentioned above, where zebra honouring the noprefixroute flag leads to
routes missing from the RIB in some cases. Specifically, this happens when
network management daemons set the noprefixroute on the address assignment, but
subsequently installs a link-scoped route into the kernel identical to the
prefix route the kernel would have installed automatically. The use case for
this is enable the network management daemon to atomically change route
attributes (such as route metric) on the prefix route, but otherwise keep the
behaviour identical to the case where the kernel creates the prefix route
itself.

The failure described above was noticed for NetworkManager and reported as a
NetworkManager bug[1] as well as an FRR issue[2]. Other network management
daemons use the noprefixroute flag for similar purposes (e.g.,
systemd-networkd[3]).

[0] FRRouting#14957
[1] https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1452
[2] FRRouting#16101
[3] https://github.com/systemd/systemd/blob/main/src/network/networkd-dhcp4.c#L962

To resolve this discrepancy between the kernel FIB and the FRR RIB, this patch
changes zebra's behaviour to import 'proto kernel' instead of ignoring them, and
to treat routes with 'scope link' as ZEBRA_ROUTE_CONNECT routes, just like the
ones synthesised by zebra itself. This allows the noprefixroute flag to work
correctly, while still playing nice with network management daemons that install
a different link-scope route for installed addresses. The change in behaviour
can be seen from the following example:

Kernel config:
5: veth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen
1000
    link/ether fe:da:bb:eb:74:17 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.11.1.2/24 scope global veth0
       valid_lft forever preferred_lft forever
    inet 10.12.0.0/24 scope global noprefixroute veth0
       valid_lft forever preferred_lft forever

10.11.0.0/16 via 10.11.1.1 dev veth0
10.11.1.0/24 dev veth0 proto kernel scope link src 10.11.1.2
10.12.0.0/24 dev veth0 proto kernel scope link metric 100

The 10.12.0.0/24 route was manually added with:

Running zebra, pre-patch:

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

K>* 10.11.0.0/16 [0/0] via 10.11.1.1, veth0, 00:00:22
C>* 10.11.1.0/24 is directly connected, veth0, 00:00:22
L>* 10.11.1.2/32 is directly connected, veth0, 00:00:22
L>* 10.12.0.0/32 is directly connected, veth0, 00:00:22

Notice that the 10.12.0.0/24 route is missing from the RIB.

After the patch:

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

K>* 10.11.0.0/16 [0/0] via 10.11.1.1, veth0, 00:00:05
C * 10.11.1.0/24 is directly connected, veth0, 00:00:05
C>* 10.11.1.0/24 is directly connected, veth0, 00:00:05
L>* 10.11.1.2/32 is directly connected, veth0, 00:00:05
C>* 10.12.0.0/24 [0/100] is directly connected, veth0, 00:00:05
L>* 10.12.0.0/32 is directly connected, veth0, 00:00:05

The prefix is now shown as connected (C>) as it should. Note also that the other
prefix (10.11.1.0/24, without the noprefix flag) now appears twice, because it's
both created by zebra from the interface config, and imported from the kernel.
This is harmless as the routes are identical, and an arbitrary one just ends up
being selected.

Signed-off-by: Toke Høiland-Jørgensen <[email protected]>
tohojo added a commit to tohojo/frr that referenced this issue Jul 17, 2024
When importing routes from the kernel, the zebra daemon ignores any routes
marked as 'proto kernel', such as the link-scoped routes that the kernel
generates for addresses assigned to interfaces. Instead, zebra implements its
own logic to synthesise routes for each address assignment, installing them into
the RIB with the ZEBRA_ROUTE_CONNECT proto set.

This behaviour requires zebra to mirror the logic of the kernel, to avoid having
the kernel FIB diverge from the FRR RIB, which can cause routing loops or other
failures. One example of this was the recent addition of support for the
'noprefixroute' flag to zebra[0].

However, attempting to mirror the kernel behaviour this way causes problems when
the mirroring is imperfect. An example of this was seen as a result of the
change mentioned above, where zebra honouring the noprefixroute flag leads to
routes missing from the RIB in some cases. Specifically, this happens when
network management daemons set the noprefixroute on the address assignment, but
subsequently installs a link-scoped route into the kernel identical to the
prefix route the kernel would have installed automatically. The use case for
this is enable the network management daemon to atomically change route
attributes (such as route metric) on the prefix route, but otherwise keep the
behaviour identical to the case where the kernel creates the prefix route
itself.

The failure described above was noticed for NetworkManager and reported as a
NetworkManager bug[1] as well as an FRR issue[2]. Other network management
daemons use the noprefixroute flag for similar purposes (e.g.,
systemd-networkd[3]).

[0] FRRouting#14957
[1] https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1452
[2] FRRouting#16101
[3] https://github.com/systemd/systemd/blob/main/src/network/networkd-dhcp4.c#L962

To resolve this discrepancy between the kernel FIB and the FRR RIB, this patch
changes zebra's behaviour to import 'proto kernel' instead of ignoring them, and
to treat routes with 'scope link' as ZEBRA_ROUTE_CONNECT routes, just like the
ones synthesised by zebra itself. This allows the noprefixroute flag to work
correctly, while still playing nice with network management daemons that install
a different link-scope route for installed addresses. The change in behaviour
can be seen from the following example:

Kernel config:
5: veth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen
1000
    link/ether fe:da:bb:eb:74:17 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.11.1.2/24 scope global veth0
       valid_lft forever preferred_lft forever
    inet 10.12.0.0/24 scope global noprefixroute veth0
       valid_lft forever preferred_lft forever

10.11.0.0/16 via 10.11.1.1 dev veth0
10.11.1.0/24 dev veth0 proto kernel scope link src 10.11.1.2
10.12.0.0/24 dev veth0 proto kernel scope link metric 100

The 10.12.0.0/24 route was manually added with:

Running zebra, pre-patch:

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

K>* 10.11.0.0/16 [0/0] via 10.11.1.1, veth0, 00:00:22
C>* 10.11.1.0/24 is directly connected, veth0, 00:00:22
L>* 10.11.1.2/32 is directly connected, veth0, 00:00:22
L>* 10.12.0.0/32 is directly connected, veth0, 00:00:22

Notice that the 10.12.0.0/24 route is missing from the RIB.

After the patch:

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

K>* 10.11.0.0/16 [0/0] via 10.11.1.1, veth0, 00:00:05
C * 10.11.1.0/24 is directly connected, veth0, 00:00:05
C>* 10.11.1.0/24 is directly connected, veth0, 00:00:05
L>* 10.11.1.2/32 is directly connected, veth0, 00:00:05
C>* 10.12.0.0/24 [0/100] is directly connected, veth0, 00:00:05
L>* 10.12.0.0/32 is directly connected, veth0, 00:00:05

The prefix is now shown as connected (C>) as it should. Note also that the other
prefix (10.11.1.0/24, without the noprefix flag) now appears twice, because it's
both created by zebra from the interface config, and imported from the kernel.
This is harmless as the routes are identical, and an arbitrary one just ends up
being selected.

Signed-off-by: Toke Høiland-Jørgensen <[email protected]>
tohojo added a commit to tohojo/frr that referenced this issue Jul 17, 2024
When importing routes from the kernel, the zebra daemon ignores any routes
marked as 'proto kernel', such as the link-scoped routes that the kernel
generates for addresses assigned to interfaces. Instead, zebra implements its
own logic to synthesise routes for each address assignment, installing them into
the RIB with the ZEBRA_ROUTE_CONNECT proto set.

This behaviour requires zebra to mirror the logic of the kernel, to avoid having
the kernel FIB diverge from the FRR RIB, which can cause routing loops or other
failures. One example of this was the recent addition of support for the
'noprefixroute' flag to zebra[0].

However, attempting to mirror the kernel behaviour this way causes problems when
the mirroring is imperfect. An example of this was seen as a result of the
change mentioned above, where zebra honouring the noprefixroute flag leads to
routes missing from the RIB in some cases. Specifically, this happens when
network management daemons set the noprefixroute on the address assignment, but
subsequently installs a link-scoped route into the kernel identical to the
prefix route the kernel would have installed automatically. The use case for
this is enable the network management daemon to atomically change route
attributes (such as route metric) on the prefix route, but otherwise keep the
behaviour identical to the case where the kernel creates the prefix route
itself.

The failure described above was noticed for NetworkManager and reported as a
NetworkManager bug[1] as well as an FRR issue[2]. Other network management
daemons use the noprefixroute flag for similar purposes (e.g.,
systemd-networkd[3]).

[0] FRRouting#14957
[1] https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1452
[2] FRRouting#16101
[3] https://github.com/systemd/systemd/blob/main/src/network/networkd-dhcp4.c#L962

To resolve this discrepancy between the kernel FIB and the FRR RIB, this patch
changes zebra's behaviour to import 'proto kernel' instead of ignoring them, and
to treat routes with 'scope link' as ZEBRA_ROUTE_CONNECT routes, just like the
ones synthesised by zebra itself. This allows the noprefixroute flag to work
correctly, while still playing nice with network management daemons that install
a different link-scope route for installed addresses. The change in behaviour
can be seen from the following example:

Kernel config:
5: veth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen
1000
    link/ether fe:da:bb:eb:74:17 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.11.1.2/24 scope global veth0
       valid_lft forever preferred_lft forever
    inet 10.12.0.0/24 scope global noprefixroute veth0
       valid_lft forever preferred_lft forever

10.11.0.0/16 via 10.11.1.1 dev veth0
10.11.1.0/24 dev veth0 proto kernel scope link src 10.11.1.2
10.12.0.0/24 dev veth0 proto kernel scope link metric 100

The 10.12.0.0/24 route was manually added with:

Running zebra, pre-patch:

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

K>* 10.11.0.0/16 [0/0] via 10.11.1.1, veth0, 00:00:22
C>* 10.11.1.0/24 is directly connected, veth0, 00:00:22
L>* 10.11.1.2/32 is directly connected, veth0, 00:00:22
L>* 10.12.0.0/32 is directly connected, veth0, 00:00:22

Notice that the 10.12.0.0/24 route is missing from the RIB.

After the patch:

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

K>* 10.11.0.0/16 [0/0] via 10.11.1.1, veth0, 00:00:05
C * 10.11.1.0/24 is directly connected, veth0, 00:00:05
C>* 10.11.1.0/24 is directly connected, veth0, 00:00:05
L>* 10.11.1.2/32 is directly connected, veth0, 00:00:05
C>* 10.12.0.0/24 [0/100] is directly connected, veth0, 00:00:05
L>* 10.12.0.0/32 is directly connected, veth0, 00:00:05

The prefix is now shown as connected (C>) as it should. Note also that the other
prefix (10.11.1.0/24, without the noprefix flag) now appears twice, because it's
both created by zebra from the interface config, and imported from the kernel.
This is harmless as the routes are identical, and an arbitrary one just ends up
being selected.

Signed-off-by: Toke Høiland-Jørgensen <[email protected]>
@ton31337 ton31337 removed their assignment Jul 22, 2024
@Darwin4053
Copy link

Is this issue closed or not ?

@ton31337
Copy link
Member

ton31337 commented Aug 7, 2024

This is not FRR's issue, it's a network daemon's (in this case NetworkManager) issue.

@ton31337 ton31337 closed this as completed Aug 7, 2024
@k0ste
Copy link
Contributor

k0ste commented Aug 7, 2024

This is not FRR's issue, it's a network daemon's (in this case NetworkManager) issue.

May be possible to build FRR without this "new feature" via configure flag? Or with frr.conf option? Is not possible to change NetworkManager - this is what the community highlights to the developers

@Trae32566
Copy link

Trae32566 commented Aug 10, 2024

This is not FRR's issue, it's a network daemon's (in this case NetworkManager) issue.

This is patently false. NetworkManager is using the flag correctly, as is proven above several times by kernel and NetworkManager developers. the FRR team's misunderstanding and misuse of the noprefixroute flag is the true issue here..the sad part is that they fail to see that, and instead double down that NetworkManager is "wrong" which is completely unwarranted, especially given other network daemons like systemd-networkd also use this functionality identically.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1452#note_2225586

From kernel perspective, the noprefixroute flag indicates whether to add a onlink route to the subnet with metric zero.
You can see that from the usage of the flag in kernel (git grep -30 IFA_F_NOPREFIXROUTE) and from the commit messages that introduced the flag (1, 2.
The goal is to suppress an automatism of kernel. The flag is not a description of deeper semantics of the address. Those prefixroutes are managed by NetworkManager, as they should have a configurable route-metric or route-table. If you want to know which route is used to reach a subnet (or whether it's onlink, or has a prefix route), you need to ask kernel with something like ip route get $SUBNET from $ADDRESS or interpret ip route && ip rule output.
If you want a flag to indicate a certain semantic for an address, then this is not it. And it wasn't intended for this.

TLDR: FRR, not NetworkManager or the Linux kernel, is doing it wrong here. You basically took an existing routing mechanism and decided to use it in a way it was never designed to be used. We are actually version locking on 9, and long term looking at migrating to BIRD or another project because of this, but we really like the CLI and syntax of FRR.

@Trae32566
Copy link

@ton31337 It's very obvious this isn't complete, and neither is the discussion. It was pretty untoward of you to close an active issue, it does nothing but throw the efforts of everyone in this issue away and spit in the face of the bug reporters. You might as well stop packaging for RHEL, CentOS, Fedora, and every other RPM-based distro too while you're at it, since they're literally unusable beyond 9.X. Why would you think that it's acceptable to break this?

@ton31337
Copy link
Member

This is closed, because it's already fixed (backported to 10.1), and gonna be released next week.

@k0ste
Copy link
Contributor

k0ste commented Sep 20, 2024

@Trae32566 see #16300

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

8 participants