Doesn't answer your question, but it seems to me that rather than doing :

       export filter {
               if source = RTS_STATIC then {


To make sure you only export the static routes, not the "device" routes,

it might be better to set up a separate routing table like so:

log syslog { debug, trace, info, remote, warning, error, auth, fatal, bug };
log stderr all;

router id <omitted>;
debug protocols all;

table export_routes; # <-------------

protocol device {
       scan time 10;           # Scan interfaces every 10 seconds
}

protocol static {
       table export_routes;
       route <subnet>/64 via <gateway>;
       route <subnet>/64 via <gateway>;
       route <subnet>/64 via <gateway>;
}

protocol bgp {
       table export_routes;
       local as 64515;
       source address <own address>;
       rs client;
       neighbor <omitted> as <omitted>;
}


That way you've segragated the routing table you want to announce from the kernel routing table altogether, and saved yourself the filter.


2009/11/20 S.H. Verbrugge <ief@soleus.nu>
Hello,

I'm new to this list, so please bear with me.

I'm trying to set up a BGP route advertising server with BIRD,
in order to update IPv6 static routes to a juniper router.

My configuration is as follows (addresses omitted to avoid identification):

==START==
log syslog { debug, trace, info, remote, warning, error, auth, fatal, bug };
log stderr all;

router id <omitted>;
debug protocols all;

protocol device {
       scan time 10;           # Scan interfaces every 10 seconds
}

protocol static {
       route <subnet>/64 via <gateway>;
       route <subnet>/64 via <gateway>;
       route <subnet>/64 via <gateway>;
}

protocol bgp {
       local as 64515;
       source address <own address>;
       rs client;

       export filter {
               if source = RTS_STATIC then {
                       #bgp_next_hop = <gateway>;
                       #gw = <gateway>;
                       accept;
               }
       };

       neighbor <omitted> as <omitted>;
}
==END==

I can see the correct routes being advertised, even with the correct 'via'
in Debug traces,
However, received routes are in the form of:

<subnet>/64 via <bird source address>.

I'm sure I haven't set next-hop self, so this behaviour seems strange to me.

Could anyone please provide some insight into this?

Cheers,
--
 /\/\  Hostingvereniging Soleus                |  Community-driven
< ** > http://soleus.nu                        |  Virtual Private Servers
 \/\/  Sen (IEF) Verbrugge (CT-Projectlead)    |  & more ...