diff options
| -rw-r--r-- | bgpd/bgp_nexthop.c | 4 | ||||
| -rw-r--r-- | bgpd/bgp_nexthop.h | 2 | ||||
| -rw-r--r-- | bgpd/bgp_route.c | 7 | 
3 files changed, 7 insertions, 6 deletions
diff --git a/bgpd/bgp_nexthop.c b/bgpd/bgp_nexthop.c index d0c4d2c945..ed3594e7a0 100644 --- a/bgpd/bgp_nexthop.c +++ b/bgpd/bgp_nexthop.c @@ -329,11 +329,11 @@ bgp_connected_delete (struct bgp *bgp, struct connected *ifc)  }  int -bgp_nexthop_self (struct bgp *bgp, struct attr *attr) +bgp_nexthop_self (struct bgp *bgp, struct in_addr nh_addr)  {    struct bgp_addr tmp, *addr; -  tmp.addr = attr->nexthop; +  tmp.addr = nh_addr;    addr = hash_lookup (bgp->address_hash, &tmp);    if (addr) diff --git a/bgpd/bgp_nexthop.h b/bgpd/bgp_nexthop.h index c5d9232e33..3aa20a9d5b 100644 --- a/bgpd/bgp_nexthop.h +++ b/bgpd/bgp_nexthop.h @@ -74,7 +74,7 @@ extern void bgp_connected_add (struct bgp *bgp, struct connected *c);  extern void bgp_connected_delete (struct bgp *bgp, struct connected *c);  extern int bgp_multiaccess_check_v4 (struct in_addr, struct peer *);  extern int bgp_config_write_scan_time (struct vty *); -extern int bgp_nexthop_self (struct bgp *, struct attr *); +extern int bgp_nexthop_self (struct bgp *, struct in_addr);  extern struct bgp_nexthop_cache *bnc_new(void);  extern void bnc_free(struct bgp_nexthop_cache *bnc);  extern void bnc_nexthop_free(struct bgp_nexthop_cache *bnc); diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 12ad65883e..d72da431f1 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -2442,8 +2442,8 @@ bgp_update_martian_nexthop (struct bgp *bgp, afi_t afi, safi_t safi, struct attr      {        if (attr->nexthop.s_addr == 0 ||            IPV4_CLASS_DE (ntohl (attr->nexthop.s_addr)) || -          bgp_nexthop_self (bgp, attr)) -        ret = 1; +          bgp_nexthop_self (bgp, attr->nexthop)) +        return 1;      }    /* If MP_NEXTHOP is present, validate it. */ @@ -2458,7 +2458,8 @@ bgp_update_martian_nexthop (struct bgp *bgp, afi_t afi, safi_t safi, struct attr          case BGP_ATTR_NHLEN_IPV4:          case BGP_ATTR_NHLEN_VPNV4:            ret = (attre->mp_nexthop_global_in.s_addr == 0 || -                 IPV4_CLASS_DE (ntohl (attre->mp_nexthop_global_in.s_addr))); +                 IPV4_CLASS_DE (ntohl (attre->mp_nexthop_global_in.s_addr)) || +                 bgp_nexthop_self (bgp, attre->mp_nexthop_global_in));            break;          case BGP_ATTR_NHLEN_IPV6_GLOBAL:  | 
