mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
neighbour: Remove neigh_tables[].
Now, &arp_tbl and &nd_tbl are stored in net->neigh_tables[]. Let's use net->neigh_tables[] in neighbour.c and remove the global neigh_tables[]. Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com> Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org> Reviewed-by: Ido Schimmel <idosch@nvidia.com> Link: https://patch.msgid.link/20260902203722.926528-8-kuniyu@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
b4f0115efd
commit
7bb5d7675c
|
|
@ -341,8 +341,8 @@ static inline void neigh_confirm(struct neighbour *n)
|
|||
|
||||
int neigh_table_register(struct net *net, struct neigh_table *tbl, int index);
|
||||
void neigh_table_unregister(struct net *net, int index);
|
||||
void neigh_table_init(int index, struct neigh_table *tbl);
|
||||
int neigh_table_clear(int index, struct neigh_table *tbl);
|
||||
void neigh_table_init(struct neigh_table *tbl);
|
||||
int neigh_table_clear(struct neigh_table *tbl);
|
||||
struct neighbour *neigh_lookup(struct neigh_table *tbl, const void *pkey,
|
||||
struct net_device *dev);
|
||||
struct neighbour *__neigh_create(struct neigh_table *tbl, const void *pkey,
|
||||
|
|
|
|||
|
|
@ -1807,9 +1807,7 @@ void neigh_parms_release(struct neigh_table *tbl, struct neigh_parms *parms)
|
|||
|
||||
static struct lock_class_key neigh_table_proxy_queue_class;
|
||||
|
||||
static struct neigh_table *neigh_tables[NEIGH_NR_TABLES] __read_mostly;
|
||||
|
||||
void neigh_table_init(int index, struct neigh_table *tbl)
|
||||
void neigh_table_init(struct neigh_table *tbl)
|
||||
{
|
||||
unsigned long now = jiffies;
|
||||
unsigned long phsize;
|
||||
|
|
@ -1863,18 +1861,14 @@ void neigh_table_init(int index, struct neigh_table *tbl)
|
|||
|
||||
tbl->last_flush = now;
|
||||
tbl->last_rand = now + tbl->parms.reachable_time * 20;
|
||||
|
||||
neigh_tables[index] = tbl;
|
||||
}
|
||||
|
||||
/*
|
||||
* Only called from ndisc_cleanup(), which means this is dead code
|
||||
* because we no longer can unload IPv6 module.
|
||||
*/
|
||||
int neigh_table_clear(int index, struct neigh_table *tbl)
|
||||
int neigh_table_clear(struct neigh_table *tbl)
|
||||
{
|
||||
neigh_tables[index] = NULL;
|
||||
|
||||
/* It is not clean... Fix it to unload IPv6 module safely */
|
||||
cancel_delayed_work_sync(&tbl->managed_work);
|
||||
cancel_delayed_work_sync(&tbl->gc_work);
|
||||
|
|
@ -1911,16 +1905,16 @@ void neigh_table_unregister(struct net *net, int index)
|
|||
net->neigh_tables[index] = NULL;
|
||||
}
|
||||
|
||||
static struct neigh_table *neigh_find_table(int family)
|
||||
static struct neigh_table *neigh_find_table(struct net *net, int family)
|
||||
{
|
||||
struct neigh_table *tbl = NULL;
|
||||
|
||||
switch (family) {
|
||||
case AF_INET:
|
||||
tbl = neigh_tables[NEIGH_ARP_TABLE];
|
||||
tbl = net->neigh_tables[NEIGH_ARP_TABLE];
|
||||
break;
|
||||
case AF_INET6:
|
||||
tbl = neigh_tables[NEIGH_ND_TABLE];
|
||||
tbl = net->neigh_tables[NEIGH_ND_TABLE];
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -1974,7 +1968,7 @@ static int neigh_delete(struct sk_buff *skb, struct nlmsghdr *nlh,
|
|||
}
|
||||
}
|
||||
|
||||
tbl = neigh_find_table(ndm->ndm_family);
|
||||
tbl = neigh_find_table(net, ndm->ndm_family);
|
||||
if (tbl == NULL)
|
||||
return -EAFNOSUPPORT;
|
||||
|
||||
|
|
@ -2060,7 +2054,7 @@ static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh,
|
|||
}
|
||||
}
|
||||
|
||||
tbl = neigh_find_table(ndm->ndm_family);
|
||||
tbl = neigh_find_table(net, ndm->ndm_family);
|
||||
if (tbl == NULL)
|
||||
return -EAFNOSUPPORT;
|
||||
|
||||
|
|
@ -2403,7 +2397,7 @@ static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh,
|
|||
ndtmsg = nlmsg_data(nlh);
|
||||
|
||||
for (tidx = 0; tidx < NEIGH_NR_TABLES; tidx++) {
|
||||
tbl = neigh_tables[tidx];
|
||||
tbl = net->neigh_tables[tidx];
|
||||
if (!tbl)
|
||||
continue;
|
||||
|
||||
|
|
@ -2596,7 +2590,7 @@ static int neightbl_dump_info(struct sk_buff *skb, struct netlink_callback *cb)
|
|||
for (tidx = 0; tidx < NEIGH_NR_TABLES; tidx++) {
|
||||
struct neigh_parms *p;
|
||||
|
||||
tbl = neigh_tables[tidx];
|
||||
tbl = net->neigh_tables[tidx];
|
||||
if (!tbl)
|
||||
continue;
|
||||
|
||||
|
|
@ -2933,6 +2927,7 @@ static int neigh_dump_info(struct sk_buff *skb, struct netlink_callback *cb)
|
|||
{
|
||||
const struct nlmsghdr *nlh = cb->nlh;
|
||||
struct neigh_dump_filter filter = {};
|
||||
struct net *net = sock_net(skb->sk);
|
||||
struct neigh_table *tbl;
|
||||
int t, family, s_t;
|
||||
int proxy = 0;
|
||||
|
|
@ -2956,8 +2951,7 @@ static int neigh_dump_info(struct sk_buff *skb, struct netlink_callback *cb)
|
|||
|
||||
rcu_read_lock();
|
||||
for (t = 0; t < NEIGH_NR_TABLES; t++) {
|
||||
tbl = neigh_tables[t];
|
||||
|
||||
tbl = net->neigh_tables[t];
|
||||
if (!tbl)
|
||||
continue;
|
||||
if (t < s_t || (family && tbl->family != family))
|
||||
|
|
@ -3079,7 +3073,7 @@ static int neigh_get(struct sk_buff *in_skb, struct nlmsghdr *nlh,
|
|||
|
||||
rcu_read_lock();
|
||||
|
||||
tbl = neigh_find_table(ndm->ndm_family);
|
||||
tbl = neigh_find_table(net, ndm->ndm_family);
|
||||
if (!tbl) {
|
||||
NL_SET_ERR_MSG(extack, "Unsupported family in header for neighbor get request");
|
||||
err = -EAFNOSUPPORT;
|
||||
|
|
@ -3167,9 +3161,11 @@ int neigh_xmit(int index, struct net_device *dev,
|
|||
if (likely(index < NEIGH_NR_TABLES)) {
|
||||
struct neigh_table *tbl;
|
||||
struct neighbour *neigh;
|
||||
struct net *net;
|
||||
|
||||
rcu_read_lock();
|
||||
tbl = neigh_tables[index];
|
||||
net = dev_net_rcu(dev);
|
||||
tbl = net->neigh_tables[index];
|
||||
if (!tbl) {
|
||||
rcu_read_unlock();
|
||||
goto out_kfree_skb;
|
||||
|
|
|
|||
|
|
@ -1532,7 +1532,7 @@ static struct pernet_operations arp_net_ops = {
|
|||
|
||||
void __init arp_init(void)
|
||||
{
|
||||
neigh_table_init(NEIGH_ARP_TABLE, &arp_tbl);
|
||||
neigh_table_init(&arp_tbl);
|
||||
|
||||
dev_add_pack(&arp_packet_type);
|
||||
register_pernet_subsys(&arp_net_ops);
|
||||
|
|
|
|||
|
|
@ -2022,7 +2022,7 @@ int __init ndisc_init(void)
|
|||
/*
|
||||
* Initialize the neighbour table
|
||||
*/
|
||||
neigh_table_init(NEIGH_ND_TABLE, &nd_tbl);
|
||||
neigh_table_init(&nd_tbl);
|
||||
|
||||
#ifdef CONFIG_SYSCTL
|
||||
err = neigh_sysctl_register(NULL, &nd_tbl.parms,
|
||||
|
|
@ -2055,6 +2055,6 @@ void ndisc_cleanup(void)
|
|||
#ifdef CONFIG_SYSCTL
|
||||
neigh_sysctl_unregister(&nd_tbl.parms);
|
||||
#endif
|
||||
neigh_table_clear(NEIGH_ND_TABLE, &nd_tbl);
|
||||
neigh_table_clear(&nd_tbl);
|
||||
unregister_pernet_subsys(&ndisc_net_ops);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user