IPv6 routes not imported into Kernel

Gerdriaan Mulder gmulder+birdcz at freedom.nl
Mon Jan 1 19:15:31 CET 2024


Hi Robert,

On 15/11/2023 22:58, Robert Finze wrote:
> The Bird config on both systems is nearly identical (only IPs differ) 
> and also the systems are setup in a similar manner.

It would be good to have a dump of the configuration of the non-working 
system (redact sensitive information such as passwords etc, but leave 
other information intact).

> The routes are correctly learned from upstream and exported to the 
> kernel, but the kernel is not "learning" them.

Interesting. The following dumps you sent might further help debugging 
the problem.

> Netlink route
> 0000   00 04 03 38 00 00 00 00 00 00 00 00 00 00 00 00   ...8............
> 0010   68 00 00 00 18 00 05 05 13 0d 66 02 00 00 00 00   h.........f.....
> 0020   0a 28 00 00 fe 0c 00 01 00 00 00 00 14 00 01 00   .(..............
> 0030   26 07 ff 00 0b 00 00 00 00 00 00 00 00 00 00 00   &...............
> 0040   08 00 06 00 20 00 00 00 14 00 07 00 2a 0e 39 40   .... .......*.9@
> 0050   10 00 00 00 00 00 00 00 00 00 00 02 08 00 04 00   ................
> 0060   02 00 00 00 14 00 05 00 2a 0e 39 40 de ad 00 00   ........*.9 at ....
> 0070   00 00 00 00 00 00 00 01                           ........

This decodes to (Wireshark supports "Import from hexdump", as I found out):

Linux rtnetlink (route netlink) protocol
     Netlink message header (type: Add network route)
         Length: 104
         Message type: Add network route (24)
         Flags: 0x0505
         Flags: 0x0505
         Sequence: 40242451
         Port ID: 0
     Address family: AF_INET6 (10)
     Length of destination: 40
     Length of source: 0
     TOS filter: 0x00
     Routing table ID: 254
     Routing protocol: BIRD (0x0c)
     Route origin: global route (0x00)
     Route type: Gateway or direct route (0x01)
     Route flags: 0x00000000
     Attribute: Route destination address
         Len: 20
         Type: 0x0001, Route destination address (1)
         Data: 2607ff000b0000000000000000000000
     Attribute: RTA_PRIORITY
         Len: 8
         Type: 0x0006, RTA_PRIORITY (6)
         Data: 20000000
     Attribute: RTA_PREFSRC
         Len: 20
         Type: 0x0007, RTA_PREFSRC (7)
         Data: 2a0e3940100000000000000000000002
     Attribute: Output interface index: 2
         Len: 8
         Type: 0x0004, Output interface index (4)
         Output interface index: 2
     Attribute: Gateway of the route
         Len: 20
         Type: 0x0005, Gateway of the route (5)
         Data: 2a0e3940dead00000000000000000001

> 0000   00 04 03 38 00 00 00 00 00 00 00 00 00 00 00 00   ...8............
> 0010   7c 00 00 00 02 00 00 00 13 0d 66 02 7a 31 09 81   |.........f.z1..
> 0020   ea ff ff ff 68 00 00 00 18 00 05 05 13 0d 66 02   ....h.........f.
> 0030   00 00 00 00 0a 28 00 00 fe 0c 00 01 00 00 00 00   .....(..........
> 0040   14 00 01 00 26 07 ff 00 0b 00 00 00 00 00 00 00   ....&...........
> 0050   00 00 00 00 08 00 06 00 20 00 00 00 14 00 07 00   ........ .......
> 0060   2a 0e 39 40 10 00 00 00 00 00 00 00 00 00 00 02   *.9 at ............
> 0070   08 00 04 00 02 00 00 00 14 00 05 00 2a 0e 39 40   ............*.9@
> 0080   de ad 00 00 00 00 00 00 00 00 00 01               ............

decodes as:

Netlink message
     Netlink message header (type: Error)
         Length: 124
         Message type: Error (0x0002)
         Flags: 0x0000
         Sequence: 40242451
         Port ID: 2164863354
     Error code: Invalid argument (-EINVAL) (-22)
     Netlink message header (type: 0x0018)
         Length: 104
         Message type: Protocol-specific (0x0018)
         Flags: 0x0505
         Flags: 0x0505
         Sequence: 40242451
         Port ID: 0

The first message could probably be replicated by running:

ip -6 route add 2607:ff00:b::/40 via 2a0e:3940:dead::1 table 254 
protocol bird scope global src 2a0e:3940:1000::2 dev 2

- where dev 2 indicates the network interface with index 2, this is 
probably ens20 in your setup?
- table 254 is most likely the main table (see /etc/iproute2/rt_tables)

I'm unsure how to decode RTA_PRIORITY correctly here. Regardless, you 
could run this command on the non-working host. Perhaps `ip route` can 
tell you a bit more information. In a slightly modified case (I've 
replaced the `via ...` with a known gateway), I get: "Error: Invalid 
source address." (with: iproute2-6.5.0)

My current hunch is that `src 2a0e:3940:1000::2` is not a valid address 
on your system. A closer read on your earlier comment:

> The Bird config on both systems is nearly identical (only IPs differ) 

suggests to look in this direction.

Best regards,
Gerdriaan Mulder


More information about the Bird-users mailing list