summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_nexthop.c4
-rw-r--r--bgpd/bgp_nexthop.h2
-rw-r--r--bgpd/bgp_route.c7
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: