summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--zebra/rt_netlink.c6
-rw-r--r--zebra/zebra_rib.c21
2 files changed, 11 insertions, 16 deletions
diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c
index 4625ceab..6e22d63f 100644
--- a/zebra/rt_netlink.c
+++ b/zebra/rt_netlink.c
@@ -1638,7 +1638,7 @@ netlink_route_multipath (int cmd, struct prefix *p, struct rib *rib)
req.r.rtm_table = rib->table;
req.r.rtm_dst_len = p->prefixlen;
req.r.rtm_protocol = RTPROT_ZEBRA;
- req.r.rtm_scope = RT_SCOPE_UNIVERSE;
+ req.r.rtm_scope = RT_SCOPE_LINK;
if ((rib->flags & ZEBRA_FLAG_BLACKHOLE) || (rib->flags & ZEBRA_FLAG_REJECT))
discard = 1;
@@ -1706,6 +1706,10 @@ netlink_route_multipath (int cmd, struct prefix *p, struct rib *rib)
if (cmd == RTM_DELROUTE && !CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB))
continue;
+ if (nexthop->type != NEXTHOP_TYPE_IFINDEX &&
+ nexthop->type != NEXTHOP_TYPE_IFNAME)
+ req.r.rtm_scope = RT_SCOPE_UNIVERSE;
+
nexthop_num++;
}
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c
index 7cce13fe..92640872 100644
--- a/zebra/zebra_rib.c
+++ b/zebra/zebra_rib.c
@@ -439,26 +439,17 @@ nexthop_active_ipv4 (struct rib *rib, struct nexthop *nexthop, int set,
{
resolved_hop->type = newhop->type;
resolved_hop->gate.ipv4 = newhop->gate.ipv4;
-
- if (newhop->ifindex)
- {
- resolved_hop->type = NEXTHOP_TYPE_IPV4_IFINDEX;
- resolved_hop->ifindex = newhop->ifindex;
- }
+ resolved_hop->ifindex = newhop->ifindex;
}
- /* If the resolving route is an interface route,
- * it means the gateway we are looking up is connected
- * to that interface. (The actual network is _not_ onlink).
- * Therefore, the resolved route should have the original
- * gateway as nexthop as it is directly connected.
- *
- * On Linux, we have to set the onlink netlink flag because
- * otherwise, the kernel won't accept the route. */
+ /* If the resolving route is an interface route, it
+ * means the gateway we are looking up is connected
+ * to that interface. Therefore, the resolved route
+ * should have the original gateway as nexthop as it
+ * is directly connected. */
if (newhop->type == NEXTHOP_TYPE_IFINDEX
|| newhop->type == NEXTHOP_TYPE_IFNAME)
{
- resolved_hop->flags |= NEXTHOP_FLAG_ONLINK;
resolved_hop->type = NEXTHOP_TYPE_IPV4_IFINDEX;
resolved_hop->gate.ipv4 = nexthop->gate.ipv4;
resolved_hop->ifindex = newhop->ifindex;