n; \
})
+
+extern int zebra_rnh_ip_default_route;
+extern int zebra_rnh_ipv6_default_route;
+
+static inline int
+nh_resolve_via_default(int family)
+{
+ if (((family == AF_INET) && zebra_rnh_ip_default_route) ||
+ ((family == AF_INET6) && zebra_rnh_ipv6_default_route))
+ return 1;
+ else
+ return 0;
+}
+
extern const char *nexthop_type_to_str (enum nexthop_types_t nh_type);
extern int nexthop_same_no_recurse (struct nexthop *next1, struct nexthop *next2);
return 0;
}
+static inline int
+is_default_prefix (struct prefix *p)
+{
+ if (!p)
+ return 0;
+
+ if (((p->family == AF_INET) && (p->u.prefix4.s_addr == INADDR_ANY))
+ || ((p->family == AF_INET6) &&
+ !memcmp(&p->u.prefix6, &in6addr_any, sizeof (struct in6_addr))))
+ return 1;
+
+ return 0;
+}
+
#endif /* _ZEBRA_PREFIX_H */
return 0;
/* Pick up selected route. */
+ /* However, do not resolve over default route unless explicitly allowed. */
+ if (is_default_prefix (&rn->p) &&
+ !nh_resolve_via_default (p.family))
+ return 0;
+
RNODE_FOREACH_RIB (rn, match)
{
if (CHECK_FLAG (match->status, RIB_ENTRY_REMOVED))
return 0;
/* Pick up selected route. */
+ /* However, do not resolve over default route unless explicitly allowed. */
+ if (is_default_prefix (&rn->p) &&
+ !nh_resolve_via_default (p.family))
+ return 0;
+
RNODE_FOREACH_RIB (rn, match)
{
if (CHECK_FLAG (match->status, RIB_ENTRY_REMOVED))
zebra_delete_rnh(rnh, RNH_NEXTHOP_TYPE);
}
-static inline int
-zebra_rnh_is_default_route(struct prefix *p)
-{
- if (!p)
- return 0;
-
- if (((p->family == AF_INET) && (p->u.prefix4.s_addr == INADDR_ANY))
- || ((p->family == AF_INET6) &&
- !memcmp(&p->u.prefix6, &in6addr_any, sizeof (struct in6_addr))))
- return 1;
-
- return 0;
-}
-
-static inline int
-zebra_rnh_resolve_via_default(int family)
-{
- if (((family == AF_INET) && zebra_rnh_ip_default_route) ||
- ((family == AF_INET6) && zebra_rnh_ipv6_default_route))
- return 1;
- else
- return 0;
-}
-
static int
zebra_evaluate_rnh_nexthops(int family, struct rib *rib, struct route_node *prn,
int proto)
if (!prn)
rib = NULL;
else if ((type == RNH_NEXTHOP_TYPE) &&
- (zebra_rnh_is_default_route(&prn->p) &&
- !zebra_rnh_resolve_via_default(prn->p.family)))
+ (is_default_prefix (&prn->p) &&
+ !nh_resolve_via_default(prn->p.family)))
rib = NULL;
else if ((type == RNH_IMPORT_CHECK_TYPE) &&
- ((zebra_rnh_is_default_route(&prn->p)) ||
+ ((is_default_prefix(&prn->p)) ||
((CHECK_FLAG(rnh->flags, ZEBRA_NHT_EXACT_MATCH)) &&
!prefix_same(&nrn->p, &prn->p))))
rib = NULL;