Hi all, for a current project I’m planning on using Babel as a lightweight, dual-stack routing protocol for a couple of simple tasks. For a proof of concept I’ve been using BIRD, and a plan to continue using BIRD at least in the backend.
Sadly, I quickly hit a showstopper: none of the routes (neither v4 nor v6) exported from one side were imported on the other side. While investigating the problem I quickly stumbled over the following line in the debug log: “bird: bb: Bad TLV from fe80::xxx via vh type 8 pos 16 - parse error” After playing around for a little bit I found out: The problem appears whenever the route advertisement contains v4 routes. I’m using BIRD 2.0.2. I used the following setup to reproduce the problem: Two network namespaces, “default" and “test", connected via an veth pair. In both namespaces I’m running a BIRD instance with the following configs: default: ############################################ debug protocols all; router id 127.0.0.17; protocol device { } protocol babel bb { interface "v*" { }; ipv4 { import all; export none; }; ipv6 { import all; export none; }; }; ############################################ test: ############################################ debug protocols all; router id 127.0.0.18; protocol device { } protocol kernel v4 { ipv4 { import all; export all; }; learn; } protocol kernel v6 { ipv6 { import all; export all; }; learn; }; protocol babel bb { interface "v*" { }; ipv4 { import none; export all; }; ipv6 { import none; export all; }; } ############################################ (1) In test, I create an IPv6 route. It gets propagates to default: test> show route: fd77:8888::/32 unicast [v6 09:02:15.854] * (10) via fd54:7777::1 on gre0 test> show route export bb: fd77:8888::/32 unicast [v6 09:02:15.854] * (10) via fd54:7777::1 on gre0 test> show protocol all bb: ipv4: 0 exported, ipv6: 1 exported default> show route: fd77:8888::/32 unicast [bb 09:04:23.648] * (130/96) [00:00:00:00:7f:00:00:12] via fe80::3028:9aff:fea7:4a62 on vh default> show protocol all bb: ipv4: 0 imported, ipv6: 1 imported (2) Now, I add a v4 route on test: test> ip r a 1.2.3.0/24 via 10.10.10.16 dev gre0 show route [export] now shows both routes, v4 and v6. show protocol all bb show 1 exported for each v4 and v6. In this moment, I start receiving parse errors in the debug log of the other side (default): Bad TLV from fe80::3028:9aff:fea7:4a62 via vh type 8 pos 16 - parse error Interestingly, when retracting the route, the update seems to work: test> ip r d 1.2.3.0/24 via 10.10.10.16 dev gre0 Debug output on other side (default): Handling update for 1.2.3.0/24 with seqno 1 metric 65535 TL;DR: There _seems_ to be a bug in the babel protocol implementation that leads to parse errors and thus missed route advertisements if ipv4 routes are conveyed. This does not happen with ipv4 route retractions. I would really appreciate any help. If it’s a bug I would happily test source code patches. Thanks in advance and best Regards Julian Schuh