duplicate device routes on linux

ico ico at petrzalka.net
Mon Feb 20 19:13:49 CET 2023


Thanks for answer. I tried this filter but the source is RTS_OSPF, not 
RTS_DEVICE. Also the proto is "ospf1".

Can I somehow "mark" routes learned by OSPF from local kernel and filter 
on that mark? Or filter out routes without gw? I tried to filter out 
undefined gw "if !defined(gw)", that didn't work. (gw is defined, the 
stringified value is "::", but that doesn't match the gw in a condition).

Thanks

ico

On 20. 2. 2023 15:01, Petr Boltík wrote:
> Yes, this is the default behavior. You can use RTS_DEVICE filter.
> 
> Petr
> 
>     |protocol kernel kernel4 { ipv4 { import all; export where source !=
>     RTS_DEVICE; }; learn; scan time 300; } protocol kernel kernel6 {
>     ipv6 { import all; export where source != RTS_DEVICE; }; learn; scan
>     time 300; }|
> 
> 
> po 20. 2. 2023 v 14:52 odesílatel ico <ico at petrzalka.net 
> <mailto:ico at petrzalka.net>> napsal:
> 
>     Hello all,
> 
>     Here at $work we are using bird for OSPF at some 30 linux boxes. Works
>     great. But there is a thing that confuses me:
> 
>     Let's have some simple linux box:
> 
>     # ip addr
>     1: lo: ...rest of loopback output
>     2: eth0 at if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
>     state UP group default qlen 1000
>           link/ether 86:37:65:15:fa:d9 brd ff:ff:ff:ff:ff:ff link-netns r2
>           inet 10.0.0.1/24 <http://10.0.0.1/24> scope global eth0
>              valid_lft forever preferred_lft forever
>     # ip route
>     10.0.0.0/24 <http://10.0.0.0/24> dev eth0 proto kernel scope link
>     src 10.0.0.1
> 
>     As you can see, there is single interface with single address, single
>     device route automatically generated by kernel. Simple bird config:
> 
>     # cat bird.conf
>     # BEGIN bird config
>     router id 10.0.0.1;
>     protocol device {
>           scan time 3;
>     }
>     protocol kernel krnl4 {
>           ipv4 {
>               table master4;
>               import all; export all;
>           };
>           learn;
>     }
>     protocol ospf ospf1 {
>           ipv4 {
>               table master4;
>               import all; export all;
>           };
>           area 0.0.0.0 {
>               stub no;
>               interface "eth0" {
>                   stub yes;
>               };
>           };
>     }
>     # END bird config
> 
>     When I run bird with this configuration, it inserts another route:
> 
>     # ip route
>     10.0.0.0/24 <http://10.0.0.0/24> dev eth0 proto kernel scope link
>     src 10.0.0.1
>     10.0.0.0/24 <http://10.0.0.0/24> dev eth0 proto bird scope link
>     metric 32
> 
>     Is this expected/correct behaviour? Or should I somehow filter those
>     device routes out? I want those device routes to be read by OSPF, of
>     course, just not to output them back. What is the best way to get
>     rid of
>     them?
> 
>     Another unrelated question: When I run bird, it logs this:
> 
>     bird: KRT: Netlink strict checking failed, will scan all tables at once
>     bird: Started
> 
>     Should I do something about that failed strict check? Is it
>     important or
>     only some info message I shouldn't worry about?
> 
>     Thank you
> 
>     ico
> 


More information about the Bird-users mailing list