diff options
| -rw-r--r-- | bgpd/bgp_nexthop.c | 30 | ||||
| -rw-r--r-- | bgpd/bgp_nexthop.h | 2 | ||||
| -rw-r--r-- | bgpd/bgp_route.c | 2 | 
3 files changed, 15 insertions, 19 deletions
diff --git a/bgpd/bgp_nexthop.c b/bgpd/bgp_nexthop.c index 60efa195..d888c8f2 100644 --- a/bgpd/bgp_nexthop.c +++ b/bgpd/bgp_nexthop.c @@ -146,7 +146,7 @@ bgp_nexthop_same (struct nexthop *next1, struct nexthop *next2)  }  static int -bgp_nexthop_cache_changed (struct bgp_nexthop_cache *bnc1, +bgp_nexthop_cache_different (struct bgp_nexthop_cache *bnc1,  			   struct bgp_nexthop_cache *bnc2)  {    int i; @@ -171,7 +171,7 @@ bgp_nexthop_cache_changed (struct bgp_nexthop_cache *bnc1,  /* If nexthop exists on connected network return 1. */  int -bgp_nexthop_check_ebgp (afi_t afi, struct attr *attr) +bgp_nexthop_onlink (afi_t afi, struct attr *attr)  {    struct bgp_node *rn; @@ -256,12 +256,11 @@ bgp_nexthop_lookup_ipv6 (struct peer *peer, struct bgp_info *ri, int *changed,        bnc = zlookup_query_ipv6 (&attr->extra->mp_nexthop_global);        if (bnc)  	{ -	  struct bgp_table *old; -	  struct bgp_node *oldrn; -	  struct bgp_nexthop_cache *oldbnc; -  	  if (changed)  	    { +	      struct bgp_table *old; +	      struct bgp_node *oldrn; +  	      if (bgp_nexthop_cache_table[AFI_IP6] == cache1_table[AFI_IP6])  		old = cache2_table[AFI_IP6];  	      else @@ -270,9 +269,9 @@ bgp_nexthop_lookup_ipv6 (struct peer *peer, struct bgp_info *ri, int *changed,  	      oldrn = bgp_node_lookup (old, &p);  	      if (oldrn)  		{ -		  oldbnc = oldrn->info; +		  struct bgp_nexthop_cache *oldbnc = oldrn->info; -		  bnc->changed = bgp_nexthop_cache_changed (bnc, oldbnc); +		  bnc->changed = bgp_nexthop_cache_different (bnc, oldbnc);  		  if (bnc->metric != oldbnc->metric)  		    bnc->metricchanged = 1; @@ -284,7 +283,6 @@ bgp_nexthop_lookup_ipv6 (struct peer *peer, struct bgp_info *ri, int *changed,        else  	{  	  bnc = bnc_new (); -	  bnc->valid = 0;  	}        rn->info = bnc;      } @@ -347,12 +345,11 @@ bgp_nexthop_lookup (afi_t afi, struct peer *peer, struct bgp_info *ri,        bnc = zlookup_query (addr);        if (bnc)  	{ -	  struct bgp_table *old; -	  struct bgp_node *oldrn; -	  struct bgp_nexthop_cache *oldbnc; -  	  if (changed)  	    { +	      struct bgp_table *old; +	      struct bgp_node *oldrn; +  	      if (bgp_nexthop_cache_table[AFI_IP] == cache1_table[AFI_IP])  		old = cache2_table[AFI_IP];  	      else @@ -361,9 +358,9 @@ bgp_nexthop_lookup (afi_t afi, struct peer *peer, struct bgp_info *ri,  	      oldrn = bgp_node_lookup (old, &p);  	      if (oldrn)  		{ -		  oldbnc = oldrn->info; +		  struct bgp_nexthop_cache *oldbnc = oldrn->info; -		  bnc->changed = bgp_nexthop_cache_changed (bnc, oldbnc); +		  bnc->changed = bgp_nexthop_cache_different (bnc, oldbnc);  		  if (bnc->metric != oldbnc->metric)  		    bnc->metricchanged = 1; @@ -375,7 +372,6 @@ bgp_nexthop_lookup (afi_t afi, struct peer *peer, struct bgp_info *ri,        else  	{  	  bnc = bnc_new (); -	  bnc->valid = 0;  	}        rn->info = bnc;      } @@ -462,7 +458,7 @@ bgp_scan (afi_t afi, safi_t safi)  	      metricchanged = 0;  	      if (peer_sort (bi->peer) == BGP_PEER_EBGP && bi->peer->ttl == 1) -		valid = bgp_nexthop_check_ebgp (afi, bi->attr); +		valid = bgp_nexthop_onlink (afi, bi->attr);  	      else  		valid = bgp_nexthop_lookup (afi, bi->peer, bi,  					    &changed, &metricchanged); diff --git a/bgpd/bgp_nexthop.h b/bgpd/bgp_nexthop.h index 2dad742f..874f3bba 100644 --- a/bgpd/bgp_nexthop.h +++ b/bgpd/bgp_nexthop.h @@ -54,7 +54,7 @@ extern void bgp_connected_add (struct connected *c);  extern void bgp_connected_delete (struct connected *c);  extern int bgp_multiaccess_check_v4 (struct in_addr, char *);  extern int bgp_config_write_scan_time (struct vty *); -extern int bgp_nexthop_check_ebgp (afi_t, struct attr *); +extern int bgp_nexthop_onlink (afi_t, struct attr *);  extern int bgp_nexthop_self (afi_t, struct attr *);  #endif /* _QUAGGA_BGP_NEXTHOP_H */ diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 6477a7cc..68d05484 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -2061,7 +2061,7 @@ bgp_update_main (struct peer *peer, struct prefix *p, struct attr *attr,        /* If the peer is EBGP and nexthop is not on connected route,  	 discard it.  */        if (peer_sort (peer) == BGP_PEER_EBGP && peer->ttl == 1 -	  && ! bgp_nexthop_check_ebgp (afi, &new_attr) +	  && ! bgp_nexthop_onlink (afi, &new_attr)  	  && ! CHECK_FLAG (peer->flags, PEER_FLAG_DISABLE_CONNECTED_CHECK))  	{  	  reason = "non-connected next-hop;";  | 
