static struct rt6_info *vrf_ip6_route_lookup(struct net *net, const struct net_device *dev, struct flowi6 *fl6, int ifindex, const struct sk_buff *skb, int flags) { struct net_vrf *vrf = netdev_priv(dev); return ip6_pol_route(net, vrf->fib6_table, ifindex, fl6, skb, flags); }
static struct rt6_info *vrf_ip6_route_lookup(struct net *net, const struct net_device *dev, struct flowi6 *fl6, int ifindex, int flags) { struct net_vrf *vrf = netdev_priv(dev); struct fib6_table *table = NULL; struct rt6_info *rt6; rcu_read_lock(); /* fib6_table does not have a refcnt and can not be freed */ rt6 = rcu_dereference(vrf->rt6); if (likely(rt6)) table = rt6->rt6i_table; rcu_read_unlock(); if (!table) return NULL; return ip6_pol_route(net, table, ifindex, fl6, flags); }