diff options
Diffstat (limited to 'bgpd')
-rw-r--r-- | bgpd/bgpd.c | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index ef8fbe97..366ee432 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -2144,18 +2144,29 @@ peer_lookup (struct bgp *bgp, union sockunion *su) struct peer *peer; struct listnode *node, *nnode; - if (! bgp) - bgp = bgp_get_default (); - - if (! bgp) - return NULL; + if (bgp != NULL) + { + for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer)) + { + if (sockunion_same (&peer->su, su) + && ! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER)) + return peer; + } + } + else if (bm->bgp != NULL) + { + struct listnode *bgpnode, *nbgpnode; + 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)) return peer; } + } + } return NULL; } @@ -2165,12 +2176,14 @@ peer_lookup_with_open (union sockunion *su, as_t remote_as, { struct peer *peer; struct listnode *node, *nnode; + struct listnode *bgpnode, *nbgpnode; struct bgp *bgp; - bgp = bgp_get_default (); - if (! 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) @@ -2183,6 +2196,7 @@ peer_lookup_with_open (union sockunion *su, as_t remote_as, *as = 1; } } + for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer)) { if (sockunion_same (&peer->su, su) @@ -2195,6 +2209,7 @@ peer_lookup_with_open (union sockunion *su, as_t remote_as, *as = 1; } } + } return NULL; } |