From fc4dc59d08589a887ac33a70d946eb7905541f5f Mon Sep 17 00:00:00 2001 From: Steve Hill Date: Tue, 28 Jul 2009 17:54:35 +0100 Subject: bgpd: Allow inbound connections to non-default view * bgpd.c: (peer_lookup) Search through all BGP instances for matches, not just the default instance, if no specific instance is given. (peer_lookup_with_open) same. --- bgpd/bgpd.c | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) (limited to 'bgpd') 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; } -- cgit v1.2.1