Bird 1.6.3 filters breaking down on reconfigure.

Roelf "rewbycraft" Wichertjes mailings+bird-users at roelf.org
Mon Feb 5 23:05:05 CET 2018


Hello everyone,

I am experiencing a problem where upon issuing "birdc configure" (or 
"birdc6 configure") some strange things happen.

There are two main things I run into:

1) When adding or removing routes from a static protocol, after 
reconfiguring suddenly bird stops importing any routes at all from this 
protocol.

Relevant parts of my (admittedly fairly large) config (taken from my 
bird6 config) are attached as conf1.conf.

2) When editing filters on, for example, a bgp protocol upon configuring 
it will occasionally stop exporting prefixes or not update what it's 
exporting. (Meaning that a prefix that became unfiltered won't be 
exported until the protocol is restarted.)

Relevant configs for this are attached as conf2.conf.


A lot of these issues sound like bird simply not properly re-applying 
filters after they have changed.

Both problems can be worked around be restarting the affected protocols. 
However this is not a viable long-term solution as flapping bgp sessions 
(or just flat out restarting routers when a lot of protocols exhibit 
these issues)

It would be nice if somebody could give me some insight into what is 
happening as these issues will cause routers to drop offline when doing 
a simple adjustment like adding a prefix.
As you can surely imagine, this is a big problem for me.

For now I'm trying to reconfigure bird as little as possible, to 
hopefully keep some semblance of stability.


Thank you
-------------- next part --------------
function add_control(int kkkey; int value)
{
        bgp_large_community.add((OWNAS, kkkey, value));
}

function strip_control()
{
        bgp_large_community.delete([(OWNAS, *, *)]);
}

function has_control(int kkkey; int value)
{
        return (OWNAS,kkkey,value) ~ bgp_large_community;
}

function tag_route(int origin)
{
        add_control(ROUTEORIGIN, origin);
        add_control(ORIGINROUTER, MYID);
}

function ix_import() {
        strip_control();
        tag_route(DFZ);
}

function ix_export() {
        if !has_control(ANNOUNCETO, DFZ) then reject;
        strip_control();
}

template bgp ixpeers {
        local as OWNAS;

        import limit 1000 action disable;
        import keep filtered;
        import filter {
                ix_import();
                accept;
        };
        export filter {
                ix_export();
                accept;
        };
        next hop self;
}

<Actual protocol omitted, it just adds a neighbor and a description>

-------------- next part --------------
define DFZ=0;
define INTERNAL=2;

define ROUTEORIGIN=0;
define ANNOUNCETO=1;
define ORIGINROUTER=2;

function add_control(int kkkey; int value)
{
        bgp_large_community.add((OWNAS, kkkey, value));
}


function tag_route(int origin)
{
        add_control(ROUTEORIGIN, origin);
        add_control(ORIGINROUTER, MYID);
}

filter static_import {
        tag_route(INTERNAL);
        accept;
}

template static intstatic {
        import filter static_import;
        export none;
}

protocol static announcements from intstatic {
	# Prefixes omitted.
        route abcd:abcd:abcd::/40 unreachable { add_control(ANNOUNCETO, DFZ); };
        route abcd:adef:abcd::/44 unreachable { add_control(ANNOUNCETO, DFZ); };
}



More information about the Bird-users mailing list