Babel + IPv4 = parse error
Julian Schuh
julez at julez.in
Sun Jun 10 11:22:17 CEST 2018
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
More information about the Bird-users
mailing list