RIPng

Ladislav Lhotka lhotka at cesnet.cz
Wed Apr 20 10:40:20 CEST 2005


Hi all,

I've been testing BIRD's RIPng and found a number of problems:

Two of them are trivial: RIPng port is 521 and not 520, and the only
version defined so far is 1. The patch below solves these two.

Now the following two problems are more serious and affect also the IPv4
RIP implementation:

1. RIP should automatically advertise all connected networks to its
neighbours (modulo split horizon). BIRD's RIP advertises only the routes
found in the main BIRD routing table - and the "connected" routes are
not there even though the kernel protocol is configured to "import all".

2. The updates should be sent every 30 seconds, and indeed this is what
seems to be set in rip.c. Without changing this default, I see the
updates coming in irregular intervals around 50 seconds (see below).

 No. Time      Source              Destination  Protocol Info
 1   0.000000  2001:718:1a02:7::1  ff02::9      RIPng version 1 Response
 2  50.991634  2001:718:1a02:7::1  ff02::9      RIPng version 1 Response
 3 101.983225  2001:718:1a02:7::1  ff02::9      RIPng version 1 Response
 4 153.974728  2001:718:1a02:7::1  ff02::9      RIPng version 1 Response
 5 198.967385  2001:718:1a02:7::1  ff02::9      RIPng version 1 Response

Cheers, Lada

===============================PATCH====================================
diff -uNr bird-1.0.11.orig/proto/rip/rip.c bird-1.0.11/proto/rip/rip.c
--- bird-1.0.11.orig/proto/rip/rip.c	2004-07-15 19:28:13.000000000 +0200
+++ bird-1.0.11/proto/rip/rip.c	2005-04-20 09:56:54.484233854 +0200
@@ -146,7 +146,11 @@
     DBG( "Preparing packet to send: " );
 
     packet->heading.command = RIPCMD_RESPONSE;
+#ifndef IPV6
     packet->heading.version = RIP_V2;
+#else
+    packet->heading.version = RIP_V1;
+#endif
     packet->heading.unused  = 0;
 
     i = !!P_CF->authtype;
@@ -963,7 +967,11 @@
   init_list(&c->iface_list);
   c->c.preference = DEF_PREF_RIP;
   c->infinity	= 16;
+#ifndef IPV6
   c->port	= 520;
+#else
+  c->port	= 521;
+#endif
   c->period	= 30;
   c->garbage_time = 120+180;
   c->timeout_time = 120;

-- 
Ladislav Lhotka, CESNET



More information about the Bird-users mailing list