Hi,
we are using RIP(v2|NG) with very low timers for the one hop between our
routers and our Anycast cluster nodes for DNS, NTP and others due to its
simplicity. Historically we are running either Quagga or a self-written Python
daemon to announce the anycast cluster address. In order to get to use a modern
software, I've tried to use BIRD in a new deployment and failed horribly.
RIPv2
=====
protocol rip RIP {
debug all;
period 10;
port 520;
interface "eth0" { metric 3; mode multicast; };
honor neighbor;
authentication none;
import filter { print "importing"; accept; };
export filter { print "exporting"; accept; };
}
Importing routes (which is the thing we don't need) seems to work. Exporting
routes does not work at all. I get a single message at startup saying
bird: RIP: Broadcasting routing table to eth0
bird: RIP: Unexpected error at rip transmit: Invalid argument
bird: RIP: Unexpected error at rip transmit: Unknown error 18446744073709551615
and nothing more of that.
RIPng
=====
protocol rip RIPng {
debug all;
period 10;
port 521;
interface "eth0" { metric 3; mode multicast; };
honor neighbor;
authentication none;
import filter { print "importing"; accept; };
export filter { print "exporting"; accept; };
}
Importing routes does not work at all, probably because it has bound the
listening socket to the global address on eth0
udp 0 0 2001:4ca0:0:101::81:521 :::*
4895/bird6
Sending routes does not really work either.
a) it completely ignores the period setting and sends every 30 seconds
b) it speaks RIPng on port 520 by default, you have to set it in the config
c) it sets version=2 in the RIPng header (probably because it thinks
multicast=RIPv2), which makes all routers ignore the update anyway
So, the big question is, am I doing something horribly wrong or is RIP just
broken/untested in BIRD?
Best Regards,
Bernhard