Next-hop check not needed?
Vincent Bernat
bernat at luffy.cx
Thu Jun 29 10:12:07 CEST 2017
❦ 28 juin 2017 16:12 +0200, Vincent Bernat <bernat at luffy.cx> :
>> Note that when learning route from the kernel you could workaround it by
>> using 'onlink' route flag.
>
> Great!
>
> It seems to work:
>
> $ ip route show table public dev eth2
> 203.0.113.1 scope link metric 10
> 203.0.113.10 via 203.0.113.1 metric 10 onlink
>
> bird> show route table public
> 203.0.113.10/32 via 203.0.113.1 on eth2 [kernel_public 15:58:09] * (200)
> 203.0.113.1/32 dev eth2 [kernel_public 15:58:09] * (200)
>
> But BIRD (1.6.3) still seems to be a bit confused, since I got this
> message in a loop:
>
> 2017-06-28 16:01:20 <ERR> KRT: Received route 203.0.113.10/32 with strange next-hop 203.0.113.1
> 2017-06-28 16:01:20 <WARN> Netlink: File exists
>
> Other than that, everything works as expected. I don't know how to
> interpret the first message (is it receiving two routes?) but the second
> message seems to say that it tries to reinstall the same route it
> received.
After investigating a bit more, the problem is triggered by the fact
that BIRD doesn't install the route with the "onlink" attribute. I am
using this kind of configuration to maintain a stripped version of the
routing table for local use:
table local_out;
protocol kernel kernel_local_out {
persist;
import none;
export filter {
krt_prefsrc = loopback_private;
accept;
};
scan time 10;
kernel table 100;
table local_out;
device routes yes;
merge paths yes;
}
protocol pipe private_local_out {
table private;
peer table local_out;
import none;
export all;
}
protocol pipe public_local_out {
table public;
peer table local_out;
import none;
export filter {
if proto = "kernel_public" then accept;
reject;
};
}
So, when the route is copied to the "local_out" table, it is copied
without the "onlink" parameter:
$ ip route show table public dev eth2
203.0.113.1 scope link metric 10
203.0.113.10 via 203.0.113.1 metric 10 onlink
$ ip route show table local-out dev eth2
203.0.113.1 proto bird scope link src 172.22.2.1 metric 10
203.0.113.10 via 203.0.113.1 proto bird src 172.22.2.1 metric 10
On the next pass, BIRD doesn't recognize it (KRT: Received route
203.0.113.10/32 with strange next-hop 203.0.113.1) and tries to install
it again but it already exists (Netlink: File exists). I'll dig more to
find a workaround.
--
"Elves and Dragons!" I says to him. "Cabbages and potatoes are better
for you and me."
-- J. R. R. Tolkien
More information about the Bird-users
mailing list