From: Christian Franke Date: Thu, 7 Jun 2018 10:58:21 +0000 (+0200) Subject: zebra: add a ZEBRA_FLAG_ONLINK so that routes bypass the is-unnumbered check X-Git-Tag: frr-7.1-dev~384^2~4 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=103e4a718fb6ddc1b8dab00cf87ea91b44dedf9e;p=mirror%2Ffrr.git zebra: add a ZEBRA_FLAG_ONLINK so that routes bypass the is-unnumbered check For OpenFabric operation, we need to be able to install routes via interfaces without any IPv4 addresses configured. Introduce a flag ZEBRA_FLAG_ONLINK which upper protocols can set on a route they send towards zebra, to force the nexthops to be considered onlink. Signed-off-by: Christian Franke --- diff --git a/lib/zebra.h b/lib/zebra.h index b12f6616ba..7b7a42d908 100644 --- a/lib/zebra.h +++ b/lib/zebra.h @@ -414,6 +414,7 @@ extern const char *zserv_command_string(unsigned int command); #define ZEBRA_FLAG_FIB_OVERRIDE 0x200 #define ZEBRA_FLAG_EVPN_ROUTE 0x400 #define ZEBRA_FLAG_RR_USE_DISTANCE 0x800 +#define ZEBRA_FLAG_ONLINK 0x1000 /* ZEBRA_FLAG_BLACKHOLE was 0x04 */ /* ZEBRA_FLAG_REJECT was 0x80 */ diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index ab07549ec2..1088a97278 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -266,7 +266,8 @@ struct nexthop *route_entry_nexthop_ipv4_ifindex_add(struct route_entry *re, There was a crash because ifp here was coming to be NULL */ if (ifp) if (connected_is_unnumbered(ifp) - || CHECK_FLAG(re->flags, ZEBRA_FLAG_EVPN_ROUTE)) { + || CHECK_FLAG(re->flags, ZEBRA_FLAG_EVPN_ROUTE) + || CHECK_FLAG(re->flags, ZEBRA_FLAG_ONLINK)) { SET_FLAG(nexthop->flags, NEXTHOP_FLAG_ONLINK); } @@ -303,8 +304,10 @@ struct nexthop *route_entry_nexthop_ipv6_ifindex_add(struct route_entry *re, nexthop->type = NEXTHOP_TYPE_IPV6_IFINDEX; nexthop->gate.ipv6 = *ipv6; nexthop->ifindex = ifindex; - if (CHECK_FLAG(re->flags, ZEBRA_FLAG_EVPN_ROUTE)) + if (CHECK_FLAG(re->flags, ZEBRA_FLAG_EVPN_ROUTE) + || CHECK_FLAG(re->flags, ZEBRA_FLAG_ONLINK)) { SET_FLAG(nexthop->flags, NEXTHOP_FLAG_ONLINK); + } route_entry_nexthop_add(re, nexthop); @@ -438,7 +441,8 @@ static int nexthop_active(afi_t afi, struct route_entry *re, */ if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_ONLINK)) { ifp = if_lookup_by_index(nexthop->ifindex, nexthop->vrf_id); - if (ifp && connected_is_unnumbered(ifp)) { + if ((ifp && connected_is_unnumbered(ifp)) + || CHECK_FLAG(re->flags, ZEBRA_FLAG_ONLINK)) { if (if_is_operative(ifp)) return 1; else