Hello.

We have bird 1.4.5 on servers with CentOS 6.5.

We use it for advertise loopback sub-interfaces by OSPF. All subifs with /32 mask.

We use IPVS+keepalived to bring up and down loopback subifs.

 

Ifconfig:

# ifconfig

eth0.79   Link encap:Ethernet  HWaddr 00:50:56:BA:37:70 

          inet addr:10.1.79.2  Bcast:10.1.79.255  Mask:255.255.255.0

          inet6 addr: fe80::250:56ff:feba:3770/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:34948906 errors:0 dropped:0 overruns:0 frame:0

          TX packets:34154161 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:3954197378 (3.6 GiB)  TX bytes:3820153316 (3.5 GiB)

 

lo        Link encap:Local Loopback 

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:65536  Metric:1

          RX packets:19544 errors:0 dropped:0 overruns:0 frame:0

          TX packets:19544 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:977404 (954.4 KiB)  TX bytes:977404 (954.4 KiB)

 

lo:34     Link encap:Local Loopback 

          inet addr:10.9.200.100  Mask:255.255.255.255

          UP LOOPBACK RUNNING  MTU:65536  Metric:1

 

OSPF works on eth0.79 interface.

 

Problem – when IPVS+keepalived brings up any loopback subif – Bird additionally accept same network but with /8 mask and advertise it to the network.

 

From Bird log:

Jun 11 10:36:23 bird: net accepted:10.0.0.0/8

2015-06-11 10:36:22 <INFO> net accepted:10.9.200.100/32

 

So in network I see:

10.0.0.0/8, ubest/mbest: 1/0

    *via 10.1.79.2, Vlan79, [110/10], 00:02:06, ospf-0, type-2

and

10.9.200.100/32, ubest/mbest: 1/0

    *via 10.1.79.2, Vlan79, [110/10], 02:12:08, ospf-0, type-2

 

Filter for the Bird to advertise loopbacks:

protocol direct {

        interface "lo*";        # Restrict network interfaces it works with

}

filter connected_OSPF {

# redistribute connected

    if ( source = RTS_DEVICE ) then {

        print "net accepted:", net;

        ospf_metric2 = 10;

        accept;

    }

}

 

 

As workaround we configure another filter that accept only /32 nets:

filter connected_OSPF

# redistribute connected

prefix set DEVICE_NETWORKS;

{

        DEVICE_NETWORKS = [ 0.0.0.0/0{32,32} ];

    if ( source = RTS_DEVICE && net ~ DEVICE_NETWORKS ) then {

        print "net accepted:", net;

        ospf_metric2 = 10;

        accept;

    }

        reject;

}

 

Is it expected behavior of Bird to advertise prefixes like this or I missed something?

 

Alexey