How redistribute routes from kernel table to OSPF protocol?

Владислав Гришин Vladislav.Grishin at vts24.ru
Wed Feb 22 12:19:48 CET 2012


Problem solved. I find it

Kernel protocol with learn may generate these routes, but there is an
exception for device routes in sysdep/linux/netlink/netlink.c:848 :

          /*
           * In Linux IPv6, 'native' device routes have proto
           * RTPROT_BOOT and not RTPROT_KERNEL (which they have in
           * IPv4 and which is expected). We cannot distinguish
           * 'native' and user defined device routes, so we ignore all
           * such device routes and for consistency, we have the same
           * behavior in IPv4. Anyway, users should use RTPROT_STATIC
           * for their 'alien' routes.
           */

	if (i->rtm_protocol == RTPROT_BOOT)
		src = KRT_SRC_KERNEL;

If you remove these two lines and recompile BIRD, you could probably be able
to import device routes.


Vladislav Grishin



After I restart bird

proxmox-host1:/var/log# tail /var/log/debug
Feb 22 14:59:09 proxmox-host1 bird: kernel1: Pruning inherited routes
Feb 22 14:59:11 proxmox-host1 bird: device1: Scanning interfaces
Feb 22 14:59:11 proxmox-host1 bird: kernel1: Scanning routing table
Feb 22 14:59:11 proxmox-host1 bird: kernel1: 10.18.1.25/32: ignored  <------
Feb 22 14:59:11 proxmox-host1 bird: kernel1: 10.18.1.26/32: ignored  <------
Feb 22 14:59:11 proxmox-host1 bird: kernel1: 0.0.0.0/0: [alien] seen
Feb 22 14:59:11 proxmox-host1 bird: kernel1: Pruning table master
Feb 22 14:59:11 proxmox-host1 bird: kernel1: 10.16.1.0/24: reinstalling
Feb 22 14:59:11 proxmox-host1 bird: kernel1: 10.17.1.0/24: reinstalling
Feb 22 14:59:11 proxmox-host1 bird: kernel1: Pruning inherited routes
proxmox-host1:/var/log#

Vladislav Grishin

-----Original Message-----
From: owner-bird-users at atrey.karlin.mff.cuni.cz
[mailto:owner-bird-users at atrey.karlin.mff.cuni.cz] On Behalf Of Владислав
Гришин
Sent: Wednesday, February 22, 2012 1:23 PM
To: bird-users at trubka.network.cz
Subject: How redistribute routes from kernel table to OSPF protocol?

1. Routes into kernel routing table

proxmox-host1:/# ip ro list
10.18.1.25 dev venet0  scope link
10.18.1.26 dev venet0  scope link
10.16.1.0/24 dev vmbr0  proto kernel  scope link  src 10.16.1.27
10.17.1.0/24 dev eth1  proto kernel  scope link  src 10.17.1.27
default via 10.16.1.1 dev vmbr0
proxmox-host1:/#

2. Bird Config file 

filter export_OSPF {
# redistribute connected
    if ( source = RTS_DEVICE ) then {
        print "net accepted:", net;
        ospf_metric2 = 20;
        accept;
    }
# redistribute static
    if ( source = RTS_STATIC_DEVICE ) then {
        print "net accepted:", net;
        ospf_metric2 = 20;
        accept;
    }

    if ( source = RTS_STATIC ) then {
        print "net accepted:", net;
        ospf_metric2 = 20;
        accept;
    }

    reject;
}

filter import_OSPF {
    if ( source = RTS_OSPF_EXT2 && net != 0.0.0.0/0 ) then {
        print "net accepted:", net;
        accept;
    }
    reject;
}

protocol direct {
        interface "eth1";
        interface "venet0";
}

protocol kernel {
#       table main;
        learn;                  # Learn all alien routes from the kernel
        device routes;
#       persist off;            # Don't remove routes on bird shutdown
#       scan time 20;           # Scan kernel routing table every 20 seconds
        scan time 2;            # Scan kernel routing table every 60 seconds
        import all;             # Default is import all
        export all;             # Default is export none
#       kernel table 5;         # Kernel table to synchronize with (default:
main)
}
protocol ospf myospf {
        router id 10.17.1.27;
        debug all;
        export filter export_OSPF;
        import filter import_OSPF;
        area 0.0.0.0 {
                interface "eth1" {
                        hello 10;
                        retransmit 5;
                        cost 10;
                        transmit delay 1;
                        dead count 4;
                        wait 40;
                        type broadcast;
                        priority 0;
                        authentication cryptographic;
                        password "ХХХХХХХХХХ";
                };
        };
}

3. Output bird console

bird> show route all
0.0.0.0/0          via 10.16.1.1 on vmbr0 [kernel1 2012-02-22 12:47:54] *
(10)
        Type: inherit unicast univ
10.16.1.0/24       via 10.17.1.28 on eth1 [myospf 2012-02-22 12:48:04] * E2
(150/10/20) [10.17.1.28]
        Type: OSPF-boundary unicast univ
        OSPF.metric1: 10
        OSPF.metric2: 20
        OSPF.tag: 0x00000000
        OSPF.router_id: 10.17.1.28
10.17.1.0/24       dev eth1 [direct1 2012-02-22 12:47:54] * (240)
        Type: device unicast univ
bird>

But I don't see these routes in a bird

10.18.1.25 dev venet0  scope link
10.18.1.26 dev venet0  scope link

(Only default route present from kernel.)

It is necessary to declare these routes to OSPF neighbors.

Vladislav Grishin









More information about the Bird-users mailing list