mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
ipv6: remove ipv6_stub infrastructure completely
As IPv6 is built-in only and there are no more users of ipv6_stub, the ipv6_stub is now entirely obsolete. Remove all the code related to the definition, initialization and usage. Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de> Tested-by: Ricardo B. Marlière <rbm@suse.com> Link: https://patch.msgid.link/20260325120928.15848-11-fmancera@suse.de Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
ad84b1eefe
commit
964870b4b9
|
|
@ -621,7 +621,6 @@ static inline void fib6_update_sernum_upto_root(struct net *net, struct fib6_inf
|
|||
{
|
||||
}
|
||||
#endif
|
||||
void fib6_update_sernum_stub(struct net *net, struct fib6_info *f6i);
|
||||
|
||||
void fib6_metric_set(struct fib6_info *f6i, int metric, u32 val);
|
||||
static inline bool fib6_metric_locked(struct fib6_info *f6i, int metric)
|
||||
|
|
|
|||
|
|
@ -1,80 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _IPV6_STUBS_H
|
||||
#define _IPV6_STUBS_H
|
||||
|
||||
#include <linux/in6.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/skbuff.h>
|
||||
#include <net/dst.h>
|
||||
#include <net/flow.h>
|
||||
#include <net/neighbour.h>
|
||||
#include <net/sock.h>
|
||||
#include <net/ipv6.h>
|
||||
|
||||
/* structs from net/ip6_fib.h */
|
||||
struct fib6_info;
|
||||
struct fib6_nh;
|
||||
struct fib6_config;
|
||||
struct fib6_result;
|
||||
|
||||
/* This is ugly, ideally these symbols should be built
|
||||
* into the core kernel.
|
||||
*/
|
||||
struct ipv6_stub {
|
||||
int (*ipv6_sock_mc_join)(struct sock *sk, int ifindex,
|
||||
const struct in6_addr *addr);
|
||||
int (*ipv6_sock_mc_drop)(struct sock *sk, int ifindex,
|
||||
const struct in6_addr *addr);
|
||||
struct dst_entry *(*ipv6_dst_lookup_flow)(struct net *net,
|
||||
const struct sock *sk,
|
||||
struct flowi6 *fl6,
|
||||
const struct in6_addr *final_dst);
|
||||
int (*ipv6_route_input)(struct sk_buff *skb);
|
||||
|
||||
struct fib6_table *(*fib6_get_table)(struct net *net, u32 id);
|
||||
int (*fib6_lookup)(struct net *net, int oif, struct flowi6 *fl6,
|
||||
struct fib6_result *res, int flags);
|
||||
int (*fib6_table_lookup)(struct net *net, struct fib6_table *table,
|
||||
int oif, struct flowi6 *fl6,
|
||||
struct fib6_result *res, int flags);
|
||||
void (*fib6_select_path)(const struct net *net, struct fib6_result *res,
|
||||
struct flowi6 *fl6, int oif, bool oif_match,
|
||||
const struct sk_buff *skb, int strict);
|
||||
u32 (*ip6_mtu_from_fib6)(const struct fib6_result *res,
|
||||
const struct in6_addr *daddr,
|
||||
const struct in6_addr *saddr);
|
||||
|
||||
int (*fib6_nh_init)(struct net *net, struct fib6_nh *fib6_nh,
|
||||
struct fib6_config *cfg, gfp_t gfp_flags,
|
||||
struct netlink_ext_ack *extack);
|
||||
void (*fib6_nh_release)(struct fib6_nh *fib6_nh);
|
||||
void (*fib6_nh_release_dsts)(struct fib6_nh *fib6_nh);
|
||||
void (*fib6_update_sernum)(struct net *net, struct fib6_info *rt);
|
||||
int (*ip6_del_rt)(struct net *net, struct fib6_info *rt, bool skip_notify);
|
||||
void (*fib6_rt_update)(struct net *net, struct fib6_info *rt,
|
||||
struct nl_info *info);
|
||||
|
||||
void (*udpv6_encap_enable)(void);
|
||||
void (*ndisc_send_na)(struct net_device *dev, const struct in6_addr *daddr,
|
||||
const struct in6_addr *solicited_addr,
|
||||
bool router, bool solicited, bool override, bool inc_opt);
|
||||
#if IS_ENABLED(CONFIG_XFRM)
|
||||
void (*xfrm6_local_rxpmtu)(struct sk_buff *skb, u32 mtu);
|
||||
int (*xfrm6_udp_encap_rcv)(struct sock *sk, struct sk_buff *skb);
|
||||
struct sk_buff *(*xfrm6_gro_udp_encap_rcv)(struct sock *sk,
|
||||
struct list_head *head,
|
||||
struct sk_buff *skb);
|
||||
int (*xfrm6_rcv_encap)(struct sk_buff *skb, int nexthdr, __be32 spi,
|
||||
int encap_type);
|
||||
#endif
|
||||
struct neigh_table *nd_tbl;
|
||||
|
||||
int (*ipv6_fragment)(struct net *net, struct sock *sk, struct sk_buff *skb,
|
||||
int (*output)(struct net *, struct sock *, struct sk_buff *));
|
||||
struct net_device *(*ipv6_dev_find)(struct net *net, const struct in6_addr *addr,
|
||||
struct net_device *dev);
|
||||
int (*ip6_xmit)(const struct sock *sk, struct sk_buff *skb, struct flowi6 *fl6,
|
||||
__u32 mark, struct ipv6_txoptions *opt, int tclass, u32 priority);
|
||||
};
|
||||
extern const struct ipv6_stub *ipv6_stub __read_mostly;
|
||||
#endif
|
||||
|
|
@ -2,8 +2,6 @@
|
|||
#ifndef _NDISC_H
|
||||
#define _NDISC_H
|
||||
|
||||
#include <net/ipv6_stubs.h>
|
||||
|
||||
/*
|
||||
* ICMP codes for neighbour discovery messages
|
||||
*/
|
||||
|
|
@ -359,14 +357,6 @@ static inline struct neighbour *__ipv6_neigh_lookup_noref(struct net_device *dev
|
|||
return ___neigh_lookup_noref(&nd_tbl, neigh_key_eq128, ndisc_hashfn, pkey, dev);
|
||||
}
|
||||
|
||||
static inline
|
||||
struct neighbour *__ipv6_neigh_lookup_noref_stub(struct net_device *dev,
|
||||
const void *pkey)
|
||||
{
|
||||
return ___neigh_lookup_noref(ipv6_stub->nd_tbl, neigh_key_eq128,
|
||||
ndisc_hashfn, pkey, dev);
|
||||
}
|
||||
|
||||
static inline struct neighbour *__ipv6_neigh_lookup(struct net_device *dev, const void *pkey)
|
||||
{
|
||||
struct neighbour *n;
|
||||
|
|
@ -391,25 +381,13 @@ static inline void __ipv6_confirm_neigh(struct net_device *dev,
|
|||
rcu_read_unlock();
|
||||
}
|
||||
|
||||
static inline void __ipv6_confirm_neigh_stub(struct net_device *dev,
|
||||
const void *pkey)
|
||||
{
|
||||
struct neighbour *n;
|
||||
|
||||
rcu_read_lock();
|
||||
n = __ipv6_neigh_lookup_noref_stub(dev, pkey);
|
||||
neigh_confirm(n);
|
||||
rcu_read_unlock();
|
||||
}
|
||||
|
||||
/* uses ipv6_stub and is meant for use outside of IPv6 core */
|
||||
static inline struct neighbour *ip_neigh_gw6(struct net_device *dev,
|
||||
const void *addr)
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
struct neighbour *neigh;
|
||||
|
||||
neigh = __ipv6_neigh_lookup_noref_stub(dev, addr);
|
||||
neigh = __ipv6_neigh_lookup_noref(dev, addr);
|
||||
if (unlikely(!neigh))
|
||||
neigh = __neigh_create(&nd_tbl, addr, dev, false);
|
||||
|
||||
|
|
@ -438,6 +416,7 @@ void ndisc_send_skb(struct sk_buff *skb, const struct in6_addr *daddr,
|
|||
|
||||
void ndisc_send_rs(struct net_device *dev,
|
||||
const struct in6_addr *saddr, const struct in6_addr *daddr);
|
||||
|
||||
void ndisc_send_na(struct net_device *dev, const struct in6_addr *daddr,
|
||||
const struct in6_addr *solicited_addr,
|
||||
bool router, bool solicited, bool override, bool inc_opt);
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@
|
|||
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
#include <net/ipv6.h>
|
||||
#include <net/ipv6_stubs.h>
|
||||
#endif
|
||||
|
||||
#define UDP_TUNNEL_PARTIAL_FEATURES NETIF_F_GSO_ENCAP_ALL
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
#include <linux/export.h>
|
||||
#include <net/ipv6.h>
|
||||
#include <net/ipv6_stubs.h>
|
||||
#include <net/addrconf.h>
|
||||
#include <net/ip.h>
|
||||
|
||||
|
|
@ -129,96 +128,6 @@ int inet6addr_validator_notifier_call_chain(unsigned long val, void *v)
|
|||
}
|
||||
EXPORT_SYMBOL(inet6addr_validator_notifier_call_chain);
|
||||
|
||||
static struct dst_entry *eafnosupport_ipv6_dst_lookup_flow(struct net *net,
|
||||
const struct sock *sk,
|
||||
struct flowi6 *fl6,
|
||||
const struct in6_addr *final_dst)
|
||||
{
|
||||
return ERR_PTR(-EAFNOSUPPORT);
|
||||
}
|
||||
|
||||
static int eafnosupport_ipv6_route_input(struct sk_buff *skb)
|
||||
{
|
||||
return -EAFNOSUPPORT;
|
||||
}
|
||||
|
||||
static struct fib6_table *eafnosupport_fib6_get_table(struct net *net, u32 id)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int
|
||||
eafnosupport_fib6_table_lookup(struct net *net, struct fib6_table *table,
|
||||
int oif, struct flowi6 *fl6,
|
||||
struct fib6_result *res, int flags)
|
||||
{
|
||||
return -EAFNOSUPPORT;
|
||||
}
|
||||
|
||||
static int
|
||||
eafnosupport_fib6_lookup(struct net *net, int oif, struct flowi6 *fl6,
|
||||
struct fib6_result *res, int flags)
|
||||
{
|
||||
return -EAFNOSUPPORT;
|
||||
}
|
||||
|
||||
static void
|
||||
eafnosupport_fib6_select_path(const struct net *net, struct fib6_result *res,
|
||||
struct flowi6 *fl6, int oif, bool have_oif_match,
|
||||
const struct sk_buff *skb, int strict)
|
||||
{
|
||||
}
|
||||
|
||||
static u32
|
||||
eafnosupport_ip6_mtu_from_fib6(const struct fib6_result *res,
|
||||
const struct in6_addr *daddr,
|
||||
const struct in6_addr *saddr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int eafnosupport_fib6_nh_init(struct net *net, struct fib6_nh *fib6_nh,
|
||||
struct fib6_config *cfg, gfp_t gfp_flags,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
NL_SET_ERR_MSG(extack, "IPv6 support not enabled in kernel");
|
||||
return -EAFNOSUPPORT;
|
||||
}
|
||||
|
||||
static int eafnosupport_ip6_del_rt(struct net *net, struct fib6_info *rt,
|
||||
bool skip_notify)
|
||||
{
|
||||
return -EAFNOSUPPORT;
|
||||
}
|
||||
|
||||
static int eafnosupport_ipv6_fragment(struct net *net, struct sock *sk, struct sk_buff *skb,
|
||||
int (*output)(struct net *, struct sock *, struct sk_buff *))
|
||||
{
|
||||
kfree_skb(skb);
|
||||
return -EAFNOSUPPORT;
|
||||
}
|
||||
|
||||
static struct net_device *eafnosupport_ipv6_dev_find(struct net *net, const struct in6_addr *addr,
|
||||
struct net_device *dev)
|
||||
{
|
||||
return ERR_PTR(-EAFNOSUPPORT);
|
||||
}
|
||||
|
||||
const struct ipv6_stub *ipv6_stub __read_mostly = &(struct ipv6_stub) {
|
||||
.ipv6_dst_lookup_flow = eafnosupport_ipv6_dst_lookup_flow,
|
||||
.ipv6_route_input = eafnosupport_ipv6_route_input,
|
||||
.fib6_get_table = eafnosupport_fib6_get_table,
|
||||
.fib6_table_lookup = eafnosupport_fib6_table_lookup,
|
||||
.fib6_lookup = eafnosupport_fib6_lookup,
|
||||
.fib6_select_path = eafnosupport_fib6_select_path,
|
||||
.ip6_mtu_from_fib6 = eafnosupport_ip6_mtu_from_fib6,
|
||||
.fib6_nh_init = eafnosupport_fib6_nh_init,
|
||||
.ip6_del_rt = eafnosupport_ip6_del_rt,
|
||||
.ipv6_fragment = eafnosupport_ipv6_fragment,
|
||||
.ipv6_dev_find = eafnosupport_ipv6_dev_find,
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(ipv6_stub);
|
||||
|
||||
/* IPv6 Wildcard Address and Loopback Address defined by RFC2553 */
|
||||
const struct in6_addr in6addr_loopback __aligned(BITS_PER_LONG/8)
|
||||
= IN6ADDR_LOOPBACK_INIT;
|
||||
|
|
|
|||
|
|
@ -51,7 +51,6 @@
|
|||
#include <net/transp_v6.h>
|
||||
#include <net/ip6_route.h>
|
||||
#include <net/addrconf.h>
|
||||
#include <net/ipv6_stubs.h>
|
||||
#include <net/ndisc.h>
|
||||
#ifdef CONFIG_IPV6_TUNNEL
|
||||
#include <net/ip6_tunnel.h>
|
||||
|
|
@ -996,42 +995,6 @@ static struct pernet_operations inet6_net_ops = {
|
|||
.exit = inet6_net_exit,
|
||||
};
|
||||
|
||||
static int ipv6_route_input(struct sk_buff *skb)
|
||||
{
|
||||
ip6_route_input(skb);
|
||||
return skb_dst(skb)->error;
|
||||
}
|
||||
|
||||
static const struct ipv6_stub ipv6_stub_impl = {
|
||||
.ipv6_sock_mc_join = ipv6_sock_mc_join,
|
||||
.ipv6_sock_mc_drop = ipv6_sock_mc_drop,
|
||||
.ipv6_dst_lookup_flow = ip6_dst_lookup_flow,
|
||||
.ipv6_route_input = ipv6_route_input,
|
||||
.fib6_get_table = fib6_get_table,
|
||||
.fib6_table_lookup = fib6_table_lookup,
|
||||
.fib6_lookup = fib6_lookup,
|
||||
.fib6_select_path = fib6_select_path,
|
||||
.ip6_mtu_from_fib6 = ip6_mtu_from_fib6,
|
||||
.fib6_nh_init = fib6_nh_init,
|
||||
.fib6_nh_release = fib6_nh_release,
|
||||
.fib6_nh_release_dsts = fib6_nh_release_dsts,
|
||||
.fib6_update_sernum = fib6_update_sernum_stub,
|
||||
.fib6_rt_update = fib6_rt_update,
|
||||
.ip6_del_rt = ip6_del_rt,
|
||||
.udpv6_encap_enable = udpv6_encap_enable,
|
||||
.ndisc_send_na = ndisc_send_na,
|
||||
#if IS_ENABLED(CONFIG_XFRM)
|
||||
.xfrm6_local_rxpmtu = xfrm6_local_rxpmtu,
|
||||
.xfrm6_udp_encap_rcv = xfrm6_udp_encap_rcv,
|
||||
.xfrm6_gro_udp_encap_rcv = xfrm6_gro_udp_encap_rcv,
|
||||
.xfrm6_rcv_encap = xfrm6_rcv_encap,
|
||||
#endif
|
||||
.nd_tbl = &nd_tbl,
|
||||
.ipv6_fragment = ip6_fragment,
|
||||
.ipv6_dev_find = ipv6_dev_find,
|
||||
.ip6_xmit = ip6_xmit,
|
||||
};
|
||||
|
||||
static int __init inet6_init(void)
|
||||
{
|
||||
struct list_head *r;
|
||||
|
|
@ -1188,9 +1151,6 @@ static int __init inet6_init(void)
|
|||
goto sysctl_fail;
|
||||
#endif
|
||||
|
||||
/* ensure that ipv6 stubs are visible only after ipv6 is ready */
|
||||
wmb();
|
||||
ipv6_stub = &ipv6_stub_impl;
|
||||
out:
|
||||
return err;
|
||||
|
||||
|
|
|
|||
|
|
@ -1408,14 +1408,6 @@ void fib6_update_sernum_upto_root(struct net *net, struct fib6_info *rt)
|
|||
__fib6_update_sernum_upto_root(rt, fib6_new_sernum(net));
|
||||
}
|
||||
|
||||
/* allow ipv4 to update sernum via ipv6_stub */
|
||||
void fib6_update_sernum_stub(struct net *net, struct fib6_info *f6i)
|
||||
{
|
||||
spin_lock_bh(&f6i->fib6_table->tb6_lock);
|
||||
fib6_update_sernum_upto_root(net, f6i);
|
||||
spin_unlock_bh(&f6i->fib6_table->tb6_lock);
|
||||
}
|
||||
|
||||
/*
|
||||
* Add routing information to the routing tree.
|
||||
* <destination addr>/<source addr>
|
||||
|
|
|
|||
|
|
@ -162,8 +162,7 @@ struct dst_entry *udp_tunnel6_dst_lookup(struct sk_buff *skb,
|
|||
fl6.fl6_dport = dport;
|
||||
fl6.flowlabel = ip6_make_flowinfo(dsfield, key->label);
|
||||
|
||||
dst = ipv6_stub->ipv6_dst_lookup_flow(net, sock->sk, &fl6,
|
||||
NULL);
|
||||
dst = ip6_dst_lookup_flow(net, sock->sk, &fl6, NULL);
|
||||
if (IS_ERR(dst)) {
|
||||
netdev_dbg(dev, "no route to %pI6\n", &fl6.daddr);
|
||||
return ERR_PTR(-ENETUNREACH);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user