]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: Fix mistakes in applying 'allow inbound connections to non-default view'
authorPaul Jakma <paul@quagga.net>
Wed, 5 Aug 2009 15:25:16 +0000 (16:25 +0100)
committerPaul Jakma <paul@quagga.net>
Wed, 5 Aug 2009 15:25:16 +0000 (16:25 +0100)
* bgpd.c: (peer_lookup_with_open) Bodged application of previous patch
  meant the second loop around bgp->peer wasn't included in the loop
  around bm->bgp as it was supposed to be. Fix..

bgpd/bgpd.c

index 274180b9e918bb0a6d098798b4d72153516d74f9..b34f996bab958ec1a565ef6817ffbfa6e54dc35f 100644 (file)
@@ -2169,38 +2169,40 @@ peer_lookup_with_open (union sockunion *su, as_t remote_as,
                       struct in_addr *remote_id, int *as)
 {
   struct peer *peer;
-  struct listnode *node, *nnode;
-  struct listnode *bgpnode, *nbgpnode;
+  struct listnode *node;
+  struct listnode *bgpnode;
   struct bgp *bgp;
 
   if (! bm->bgp)
     return NULL;
 
-  for (ALL_LIST_ELEMENTS (bm->bgp, bgpnode, nbgpnode, bgp))
-    for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
-      {
-        if (sockunion_same (&peer->su, su)
-            && ! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER))
-          {
-            if (peer->as == remote_as
-                && peer->remote_id.s_addr == remote_id->s_addr)
-              return peer;
-            if (peer->as == remote_as)
-              *as = 1;
-          }
-      }
-
-  for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
+  for (ALL_LIST_ELEMENTS_RO (bm->bgp, bgpnode, bgp))
     {
-      if (sockunion_same (&peer->su, su)
-         &&  ! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER))
-       {
-         if (peer->as == remote_as
-             && peer->remote_id.s_addr == 0)
-           return peer;
-         if (peer->as == remote_as)
-           *as = 1;
-       }
+      for (ALL_LIST_ELEMENTS_RO (bgp->peer, node, peer))
+        {
+          if (sockunion_same (&peer->su, su)
+              && ! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER))
+            {
+              if (peer->as == remote_as
+                  && peer->remote_id.s_addr == remote_id->s_addr)
+                return peer;
+              if (peer->as == remote_as)
+                *as = 1;
+            }
+        }
+
+      for (ALL_LIST_ELEMENTS_RO (bgp->peer, node, peer))
+        {
+          if (sockunion_same (&peer->su, su)
+              &&  ! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER))
+            {
+              if (peer->as == remote_as
+                  && peer->remote_id.s_addr == 0)
+                return peer;
+              if (peer->as == remote_as)
+                *as = 1;
+            }
+        }
     }
   return NULL;
 }