Loading drivers/net/vrf.c +0 −41 Original line number Diff line number Diff line Loading @@ -1084,46 +1084,6 @@ static struct dst_entry *vrf_link_scope_lookup(const struct net_device *dev, return dst; } /* called under rcu_read_lock */ static int vrf_get_saddr6(struct net_device *dev, const struct sock *sk, struct flowi6 *fl6) { struct net *net = dev_net(dev); struct dst_entry *dst; struct rt6_info *rt; int err; if (rt6_need_strict(&fl6->daddr)) { rt = vrf_ip6_route_lookup(net, dev, fl6, fl6->flowi6_oif, RT6_LOOKUP_F_IFACE); if (unlikely(!rt)) return 0; dst = &rt->dst; } else { __u8 flags = fl6->flowi6_flags; fl6->flowi6_flags |= FLOWI_FLAG_L3MDEV_SRC; fl6->flowi6_flags |= FLOWI_FLAG_SKIP_NH_OIF; dst = ip6_route_output(net, sk, fl6); rt = (struct rt6_info *)dst; fl6->flowi6_flags = flags; } err = dst->error; if (!err) { err = ip6_route_get_saddr(net, rt, &fl6->daddr, sk ? inet6_sk(sk)->srcprefs : 0, &fl6->saddr); } dst_release(dst); return err; } #endif static const struct l3mdev_ops vrf_l3mdev_ops = { Loading @@ -1133,7 +1093,6 @@ static const struct l3mdev_ops vrf_l3mdev_ops = { .l3mdev_l3_out = vrf_l3_out, #if IS_ENABLED(CONFIG_IPV6) .l3mdev_link_scope_lookup = vrf_link_scope_lookup, .l3mdev_get_saddr6 = vrf_get_saddr6, #endif }; Loading include/net/l3mdev.h +0 −11 Original line number Diff line number Diff line Loading @@ -43,9 +43,6 @@ struct l3mdev_ops { /* IPv6 ops */ struct dst_entry * (*l3mdev_link_scope_lookup)(const struct net_device *dev, struct flowi6 *fl6); int (*l3mdev_get_saddr6)(struct net_device *dev, const struct sock *sk, struct flowi6 *fl6); }; #ifdef CONFIG_NET_L3_MASTER_DEV Loading Loading @@ -172,8 +169,6 @@ static inline bool netif_index_is_l3_master(struct net *net, int ifindex) } struct dst_entry *l3mdev_link_scope_lookup(struct net *net, struct flowi6 *fl6); int l3mdev_get_saddr6(struct net *net, const struct sock *sk, struct flowi6 *fl6); static inline struct sk_buff *l3mdev_l3_rcv(struct sk_buff *skb, u16 proto) Loading Loading @@ -292,12 +287,6 @@ struct dst_entry *l3mdev_link_scope_lookup(struct net *net, struct flowi6 *fl6) return NULL; } static inline int l3mdev_get_saddr6(struct net *net, const struct sock *sk, struct flowi6 *fl6) { return 0; } static inline struct sk_buff *l3mdev_ip_rcv(struct sk_buff *skb) { Loading net/ipv6/ip6_output.c +1 −8 Original line number Diff line number Diff line Loading @@ -926,13 +926,6 @@ static int ip6_dst_lookup_tail(struct net *net, const struct sock *sk, int err; int flags = 0; if (ipv6_addr_any(&fl6->saddr) && fl6->flowi6_oif && (!*dst || !(*dst)->error)) { err = l3mdev_get_saddr6(net, sk, fl6); if (err) goto out_err; } /* The correct way to handle this would be to do * ip6_route_get_saddr, and then ip6_route_output; however, * the route-specific preferred source forces the Loading Loading @@ -1024,7 +1017,7 @@ static int ip6_dst_lookup_tail(struct net *net, const struct sock *sk, out_err_release: dst_release(*dst); *dst = NULL; out_err: if (err == -ENETUNREACH) IP6_INC_STATS(net, NULL, IPSTATS_MIB_OUTNOROUTES); return err; Loading net/l3mdev/l3mdev.c +0 −24 Original line number Diff line number Diff line Loading @@ -130,30 +130,6 @@ struct dst_entry *l3mdev_link_scope_lookup(struct net *net, } EXPORT_SYMBOL_GPL(l3mdev_link_scope_lookup); int l3mdev_get_saddr6(struct net *net, const struct sock *sk, struct flowi6 *fl6) { struct net_device *dev; int rc = 0; if (fl6->flowi6_oif) { rcu_read_lock(); dev = dev_get_by_index_rcu(net, fl6->flowi6_oif); if (dev && netif_is_l3_slave(dev)) dev = netdev_master_upper_dev_get_rcu(dev); if (dev && netif_is_l3_master(dev) && dev->l3mdev_ops->l3mdev_get_saddr6) rc = dev->l3mdev_ops->l3mdev_get_saddr6(dev, sk, fl6); rcu_read_unlock(); } return rc; } EXPORT_SYMBOL_GPL(l3mdev_get_saddr6); /** * l3mdev_fib_rule_match - Determine if flowi references an * L3 master device Loading Loading
drivers/net/vrf.c +0 −41 Original line number Diff line number Diff line Loading @@ -1084,46 +1084,6 @@ static struct dst_entry *vrf_link_scope_lookup(const struct net_device *dev, return dst; } /* called under rcu_read_lock */ static int vrf_get_saddr6(struct net_device *dev, const struct sock *sk, struct flowi6 *fl6) { struct net *net = dev_net(dev); struct dst_entry *dst; struct rt6_info *rt; int err; if (rt6_need_strict(&fl6->daddr)) { rt = vrf_ip6_route_lookup(net, dev, fl6, fl6->flowi6_oif, RT6_LOOKUP_F_IFACE); if (unlikely(!rt)) return 0; dst = &rt->dst; } else { __u8 flags = fl6->flowi6_flags; fl6->flowi6_flags |= FLOWI_FLAG_L3MDEV_SRC; fl6->flowi6_flags |= FLOWI_FLAG_SKIP_NH_OIF; dst = ip6_route_output(net, sk, fl6); rt = (struct rt6_info *)dst; fl6->flowi6_flags = flags; } err = dst->error; if (!err) { err = ip6_route_get_saddr(net, rt, &fl6->daddr, sk ? inet6_sk(sk)->srcprefs : 0, &fl6->saddr); } dst_release(dst); return err; } #endif static const struct l3mdev_ops vrf_l3mdev_ops = { Loading @@ -1133,7 +1093,6 @@ static const struct l3mdev_ops vrf_l3mdev_ops = { .l3mdev_l3_out = vrf_l3_out, #if IS_ENABLED(CONFIG_IPV6) .l3mdev_link_scope_lookup = vrf_link_scope_lookup, .l3mdev_get_saddr6 = vrf_get_saddr6, #endif }; Loading
include/net/l3mdev.h +0 −11 Original line number Diff line number Diff line Loading @@ -43,9 +43,6 @@ struct l3mdev_ops { /* IPv6 ops */ struct dst_entry * (*l3mdev_link_scope_lookup)(const struct net_device *dev, struct flowi6 *fl6); int (*l3mdev_get_saddr6)(struct net_device *dev, const struct sock *sk, struct flowi6 *fl6); }; #ifdef CONFIG_NET_L3_MASTER_DEV Loading Loading @@ -172,8 +169,6 @@ static inline bool netif_index_is_l3_master(struct net *net, int ifindex) } struct dst_entry *l3mdev_link_scope_lookup(struct net *net, struct flowi6 *fl6); int l3mdev_get_saddr6(struct net *net, const struct sock *sk, struct flowi6 *fl6); static inline struct sk_buff *l3mdev_l3_rcv(struct sk_buff *skb, u16 proto) Loading Loading @@ -292,12 +287,6 @@ struct dst_entry *l3mdev_link_scope_lookup(struct net *net, struct flowi6 *fl6) return NULL; } static inline int l3mdev_get_saddr6(struct net *net, const struct sock *sk, struct flowi6 *fl6) { return 0; } static inline struct sk_buff *l3mdev_ip_rcv(struct sk_buff *skb) { Loading
net/ipv6/ip6_output.c +1 −8 Original line number Diff line number Diff line Loading @@ -926,13 +926,6 @@ static int ip6_dst_lookup_tail(struct net *net, const struct sock *sk, int err; int flags = 0; if (ipv6_addr_any(&fl6->saddr) && fl6->flowi6_oif && (!*dst || !(*dst)->error)) { err = l3mdev_get_saddr6(net, sk, fl6); if (err) goto out_err; } /* The correct way to handle this would be to do * ip6_route_get_saddr, and then ip6_route_output; however, * the route-specific preferred source forces the Loading Loading @@ -1024,7 +1017,7 @@ static int ip6_dst_lookup_tail(struct net *net, const struct sock *sk, out_err_release: dst_release(*dst); *dst = NULL; out_err: if (err == -ENETUNREACH) IP6_INC_STATS(net, NULL, IPSTATS_MIB_OUTNOROUTES); return err; Loading
net/l3mdev/l3mdev.c +0 −24 Original line number Diff line number Diff line Loading @@ -130,30 +130,6 @@ struct dst_entry *l3mdev_link_scope_lookup(struct net *net, } EXPORT_SYMBOL_GPL(l3mdev_link_scope_lookup); int l3mdev_get_saddr6(struct net *net, const struct sock *sk, struct flowi6 *fl6) { struct net_device *dev; int rc = 0; if (fl6->flowi6_oif) { rcu_read_lock(); dev = dev_get_by_index_rcu(net, fl6->flowi6_oif); if (dev && netif_is_l3_slave(dev)) dev = netdev_master_upper_dev_get_rcu(dev); if (dev && netif_is_l3_master(dev) && dev->l3mdev_ops->l3mdev_get_saddr6) rc = dev->l3mdev_ops->l3mdev_get_saddr6(dev, sk, fl6); rcu_read_unlock(); } return rc; } EXPORT_SYMBOL_GPL(l3mdev_get_saddr6); /** * l3mdev_fib_rule_match - Determine if flowi references an * L3 master device Loading