]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Cleanup in preparation for ipv6.
authorPavel Machek <pavel@ucw.cz>
Wed, 26 Apr 2000 11:07:57 +0000 (11:07 +0000)
committerPavel Machek <pavel@ucw.cz>
Wed, 26 Apr 2000 11:07:57 +0000 (11:07 +0000)
bird.conf
proto/rip/rip.c
proto/rip/rip.h

index e6c6c8e796bd115b1df4e186b018e5a21bfd7ee0..c16798652f097f39efff8593e84dca6e5436e7e9 100644 (file)
--- a/bird.conf
+++ b/bird.conf
@@ -58,7 +58,7 @@ protocol static {
        bgp_community.empty;
        print "community = ", bgp_community;
        print "done";
-       quitbird;
+       accept;
        };
 
        route 0.0.0.0/0 via 195.113.31.113;
index 084ea99eb6ae9b2279f6ebe4504b8d5532f90c40..4c88cc88589c25cfdbafe1c807b1ad108629ccd0 100644 (file)
@@ -75,8 +75,8 @@ rip_tx_err( sock *s, int err )
   log( L_ERR "Unexpected error at rip transmit: %m" );
 }
 
-static void
-rip_tx_prepare(struct proto *p, ip_addr daddr, struct rip_block *b, struct rip_entry *e, struct rip_interface *rif )
+static int
+rip_tx_prepare(struct proto *p, ip_addr daddr, struct rip_block *b, struct rip_entry *e, struct rip_interface *rif, int pos )
 {
   DBG( "." );
   b->family  = htons( 2 ); /* AF_INET */
@@ -100,6 +100,8 @@ rip_tx_prepare(struct proto *p, ip_addr daddr, struct rip_block *b, struct rip_e
     b->metric = htonl( P_CF->infinity );
   }
   ipa_hton( b->network );
+
+  return pos+1;
 }
 
 static void
@@ -110,6 +112,7 @@ rip_tx( sock *s )
   struct proto *p = c->proto;
   struct rip_packet *packet = (void *) s->tbuf;
   int i, packetlen;
+  int maxi, nullupdate = 1;
 
   DBG( "Sending to %I\n", s->daddr );
   do {
@@ -124,13 +127,15 @@ rip_tx( sock *s )
     packet->heading.unused  = 0;
 
     i = !!P_CF->authtype;
+    maxi = ((P_CF->authtype == AT_MD5) ? PACKET_MD5_MAX : PACKET_MAX);
+    
     FIB_ITERATE_START(&P->rtable, &c->iter, z) {
       struct rip_entry *e = (struct rip_entry *) z;
 
       if (!rif->triggered || (!(e->updated < now-5))) {
-
-       rip_tx_prepare( p, s->daddr, packet->block + i, e, rif );
-       if (i++ == ((P_CF->authtype == AT_MD5) ? PACKET_MD5_MAX : PACKET_MAX)) {
+       nullupdate = 0;
+       i = rip_tx_prepare( p, s->daddr, packet->block + i, e, rif, i );
+       if (i >= maxi) {
          FIB_ITERATE_PUT(&c->iter, z);
          goto break_loop;
        }
@@ -143,7 +148,7 @@ rip_tx( sock *s )
     packetlen = rip_outgoing_authentication(p, (void *) &packet->block[0], packet, i);
 
     DBG( ", sending %d blocks, ", i );
-    if (i == !!P_CF->authtype) {
+    if (nullupdate) {
       DBG( "not sending NULL update\n" );
       c->done = 1;
       goto done;
@@ -389,7 +394,7 @@ rip_rx(sock *s, int size)
   if (size < 0) BAD( "Too small packet" );
   if (size % sizeof( struct rip_block )) BAD( "Odd sized packet" );
   num = size / sizeof( struct rip_block );
-  if (num>25) BAD( "Too many blocks" );
+  if (num>PACKET_MAX) BAD( "Too many blocks" );
 
   rip_process_packet( p, (struct rip_packet *) s->rbuf, num, s->faddr, s->fport );
   return 1;
index 96c5646532ef3ae32fb28c6aa765c385eb02baf3..90f9beb1048fa915fee491678206990809093be7 100644 (file)
@@ -92,7 +92,7 @@ struct rip_entry {
 
 struct rip_packet {
   struct rip_packet_heading heading;
-  struct rip_block block[25];
+  struct rip_block block[PACKET_MAX];
 };
 
 struct rip_interface {