]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Make RIP nolisten mode actually work. The socket is required for
authorMartin Mares <mj@ucw.cz>
Mon, 31 May 2004 17:42:38 +0000 (17:42 +0000)
committerMartin Mares <mj@ucw.cz>
Mon, 31 May 2004 17:42:38 +0000 (17:42 +0000)
sending, the received data has to be discarded instead.

(patch by Andreas Steinmetz modified by me)

proto/rip/rip.c

index 392a687fa0cfd746194e98ae4a95b0fb77952a63..c3a495100637f820707251d2515124d53de51910 100644 (file)
@@ -457,6 +457,10 @@ rip_rx(sock *s, int size)
   struct proto *p = i->proto;
   int num;
 
+  /* In non-listening mode, just ignore packet */
+  if (i->mode & IM_NOLISTEN)
+    return 1;
+
   CHK_MAGIC;
   DBG( "RIP: message came: %d bytes from %I via %s\n", size, s->faddr, i->iface ? i->iface->name : "(dummy)" );
   size -= sizeof( struct rip_packet_heading );
@@ -716,17 +720,15 @@ new_iface(struct proto *p, struct iface *new, unsigned long flags, struct iface_
   if (!ipa_nonzero(rif->sock->daddr)) {
     if (rif->iface)
       log( L_WARN "%s: interface %s is too strange for me", P_NAME, rif->iface->name );
-  } else
-    if (!(rif->mode & IM_NOLISTEN))
-      if (sk_open(rif->sock)<0) {
-       log( L_ERR "%s: could not listen on %s", P_NAME, rif->iface ? rif->iface->name : "(dummy)" );
-       if (rif->iface) {
-         rfree(rif->sock);
-         mb_free(rif);
-         return NULL;
-       }
-       /* On dummy, we just return non-working socket, so that user gets error every time anyone requests table */
-      }
+  } else if (sk_open(rif->sock)<0) {
+    log( L_ERR "%s: could not create socket for %s", P_NAME, rif->iface ? rif->iface->name : "(dummy)" );
+    if (rif->iface) {
+      rfree(rif->sock);
+      mb_free(rif);
+      return NULL;
+    }
+    /* On dummy, we just return non-working socket, so that user gets error every time anyone requests table */
+  }
 
   TRACE(D_EVENTS, "Listening on %s, port %d, mode %s (%I)", rif->iface ? rif->iface->name : "(dummy)", P_CF->port, rif->multicast ? "multicast" : "broadcast", rif->sock->daddr );