For our version of ospf unnumbered Cumulus is using this: RT_SCOPE_LINK + RTNH_F_ONLINK -> Unnumbered interface RT_SCOPE_LINK - IFINDEX based link. RT_SCOPE_UNIVERSE - Everything else.
This patch would remove that ability to use the scope + RTNH_F_ONLINK to indicate to the kernel that a link is UNNUMBERED and should just be trusted. thanks! donald On Mon, Nov 2, 2015 at 6:50 AM, Timo Teräs <[email protected]> wrote: > In linux, 'scope' is a hint of distance of the IP. And this is > evident from the fact that only lower scope can be used as recursive > via lookup result. This changes all interface routes scope to link > so kernel will allow regular routes to use it as via. Then we do > not need to use the 'onlink' attribute. > > Signed-off-by: Timo Teräs <[email protected]> > --- > zebra/rt_netlink.c | 6 +++++- > zebra/zebra_rib.c | 21 ++++++--------------- > 2 files changed, 11 insertions(+), 16 deletions(-) > > diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c > index 02a2d72..dd75e79 100644 > --- a/zebra/rt_netlink.c > +++ b/zebra/rt_netlink.c > @@ -1639,7 +1639,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; > @@ -1707,6 +1707,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 385e2d6..4e276b0 100644 > --- a/zebra/zebra_rib.c > +++ b/zebra/zebra_rib.c > @@ -441,26 +441,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; > -- > 2.6.1 > > > _______________________________________________ > Quagga-dev mailing list > [email protected] > https://lists.quagga.net/mailman/listinfo/quagga-dev
_______________________________________________ Quagga-dev mailing list [email protected] https://lists.quagga.net/mailman/listinfo/quagga-dev
