summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_zebra.c45
1 files changed, 24 insertions, 21 deletions
diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c
index 4e02eeb470..99a7be21b4 100644
--- a/bgpd/bgp_zebra.c
+++ b/bgpd/bgp_zebra.c
@@ -822,7 +822,7 @@ bgp_zebra_announce (struct prefix *p, struct bgp_info *info, struct bgp *bgp, sa
if (nexthop == NULL)
return;
- if (IN6_IS_ADDR_LINKLOCAL (nexthop) && ! ifindex)
+ if (!ifindex)
{
if (info->peer->ifname)
ifindex = if_nametoindex (info->peer->ifname);
@@ -836,13 +836,14 @@ bgp_zebra_announce (struct prefix *p, struct bgp_info *info, struct bgp *bgp, sa
for (mpinfo = bgp_info_mpath_first (info); mpinfo;
mpinfo = bgp_info_mpath_next (mpinfo))
{
+ ifindex = 0;
+
/* Only global address nexthop exists. */
if (mpinfo->attr->extra->mp_nexthop_len == 16)
- {
nexthop = &mpinfo->attr->extra->mp_nexthop_global;
- }
+
/* If both global and link-local address present. */
- if (mpinfo->attr->extra->mp_nexthop_len == 32)
+ if (mpinfo->attr->extra->mp_nexthop_len == 32)
{
/* Workaround for Cisco's nexthop bug. */
if (IN6_IS_ADDR_UNSPECIFIED (&mpinfo->attr->extra->mp_nexthop_global)
@@ -860,26 +861,28 @@ bgp_zebra_announce (struct prefix *p, struct bgp_info *info, struct bgp *bgp, sa
ifindex = mpinfo->peer->nexthop.ifp->ifindex;
}
}
- if (nexthop == NULL)
- {
- continue;
- }
- if (IN6_IS_ADDR_LINKLOCAL (nexthop) && ! ifindex)
- {
- if (mpinfo->peer->ifname)
- {
- ifindex = if_nametoindex (mpinfo->peer->ifname);
+ if (nexthop == NULL)
+ {
+ continue;
+ }
+
+ if (!ifindex)
+ {
+ if (mpinfo->peer->ifname)
+ {
+ ifindex = if_nametoindex (mpinfo->peer->ifname);
}
- else if (mpinfo->peer->nexthop.ifp)
- {
- ifindex = mpinfo->peer->nexthop.ifp->ifindex;
- }
- }
- if (ifindex == 0)
- {
- continue;
+ else if (mpinfo->peer->nexthop.ifp)
+ {
+ ifindex = mpinfo->peer->nexthop.ifp->ifindex;
}
+ }
+
+ if (ifindex == 0)
+ {
+ continue;
+ }
stream_put (bgp_nexthop_buf, &nexthop, sizeof (struct in6_addr *));
stream_put (bgp_ifindices_buf, &ifindex, sizeof (unsigned int));