Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp3449073imm; Tue, 17 Jul 2018 05:09:52 -0700 (PDT) X-Google-Smtp-Source: AAOMgpc9Dah1OIssyEi4HB1+HvCvp6NphaqIkpiuvSwDBs3buHUBcRyfIp/ADpjtvOXdtHqzOrz/ X-Received: by 2002:a63:35c3:: with SMTP id c186-v6mr1328143pga.217.1531829392058; Tue, 17 Jul 2018 05:09:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531829392; cv=none; d=google.com; s=arc-20160816; b=bXQE9+Pg2z1KZcgOrQARonDqhq98mSj3elIZ3DRPnk/9L3fGCqZ1LOsLEGfnchqiFo 2rynRwX7CairA6bZf9JBsz8YWXbVr9cWHB+Q7h6rew07fFv2dirI8f6cLUPG6gyQvjKd HTzgDPIE3Oc2E2wIGAFGZO0C3Sd2zXvU98w7EanfQGtmDPK75y2Fs3WYgzUWo60yMDI+ fQfTwRKCNpxWvEbuUju6MQDpeaOIjDs18gCnsIBM345Fq8qpJSFe03bgqY0ktB/mgOjW p1qTUF99THa35NoPkhcZXno6HMG8DU0eTrcVo8Yn/hx1aVTOvucAm84KPRvTKjWUqj9C STEg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=v3DYkuSGlGkPagu757zl3DWwLuPhEiMNQo2dRMpgfK4=; b=VLu44pduurSDgyQKjJCqN7im9Ubb3t6GYW6ZKAGJuMJHHk+tortmq9/tqnHvbSpUHS MWWzpJ7k0g7LafWNsRc2QMsvtkX1Vym7yJ/yvxG4s9z3ucKBcRHL8OX9ku5KTPuTkRda q3NVO60Y2OLpwNBuFi43BOCaUB3ZgzGDo2Uhzm33fdxWvF/1IGU9ppW27MUnpqjGEU9b 3FCZJ2MUT05bwsw4FQpM0TKlntlv281JffTosOOHlpIiebRfel8oxkHI6O3WB/gTf0Xh hXtCaEv1gMswiTHNXGBZXWUDDo4Lw6v4rW63NUDVfT0rvVUsEVPfI7brtUfkMfnxBnQK /ISQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=nqMRntTe; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 2-v6si750272pgq.479.2018.07.17.05.09.36; Tue, 17 Jul 2018 05:09:52 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=nqMRntTe; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731576AbeGQMjL (ORCPT + 99 others); Tue, 17 Jul 2018 08:39:11 -0400 Received: from mail.kernel.org ([198.145.29.99]:60710 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731602AbeGQMjK (ORCPT ); Tue, 17 Jul 2018 08:39:10 -0400 Received: from kenny.it.cumulusnetworks.com. (fw.cumulusnetworks.com [216.129.126.126]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 3BEDF20C0E; Tue, 17 Jul 2018 12:06:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1531829209; bh=eQs8CuFaUHFOwxy6sF2+fc2WzZL9bGHBSVBD3Ueopik=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nqMRntTeNMTzudtWHLEl/pWAmO3VRRHjd2nv8Eu8k7vF/ydjcuOiE5hdd8j+gxhuN kwul9gF+cVr6PP9NLJshvMJnx6KbZzq7dQjhOP3Rm9mF1twA2kLrgoOED6WzFlALEW pMT3Je4ov6oPFy8+VgGmgyMuVdUTkKkVbNOV9PLM= From: dsahern@kernel.org To: netdev@vger.kernel.org Cc: nikita.leshchenko@oracle.com, roopa@cumulusnetworks.com, stephen@networkplumber.org, idosch@mellanox.com, jiri@mellanox.com, saeedm@mellanox.com, alex.aring@gmail.com, linux-wpan@vger.kernel.org, netfilter-devel@vger.kernel.org, linux-kernel@vger.kernel.org, David Ahern Subject: [PATCH RFC/RFT net-next 11/17] net: Change neigh_table_init and neigh_table_clear signature Date: Tue, 17 Jul 2018 05:06:45 -0700 Message-Id: <20180717120651.15748-12-dsahern@kernel.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180717120651.15748-1-dsahern@kernel.org> References: <20180717120651.15748-1-dsahern@kernel.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: David Ahern Convert neigh_table_init and neigh_table_clear to use an address family instead of the NEIGH_*_TABLE macros which are effectively the same thing only setup as index into neigh_tables. The functions can do that mapping internally. Further, add net to the arg list for both and remove the dependence on init_net. Signed-off-by: David Ahern --- include/net/neighbour.h | 4 ++-- net/core/neighbour.c | 40 ++++++++++++++++++++++++++++++++-------- net/decnet/dn_neigh.c | 4 ++-- net/ipv4/arp.c | 2 +- net/ipv6/ndisc.c | 4 ++-- 5 files changed, 39 insertions(+), 15 deletions(-) diff --git a/include/net/neighbour.h b/include/net/neighbour.h index 6cf9ce16eac8..b70afea05f86 100644 --- a/include/net/neighbour.h +++ b/include/net/neighbour.h @@ -304,8 +304,8 @@ static inline struct neighbour *__neigh_lookup_noref(struct neigh_table *tbl, return ___neigh_lookup_noref(tbl, tbl->key_eq, tbl->hash, pkey, dev); } -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 net *net, struct neigh_table *tbl); +int neigh_table_clear(struct net *net, struct neigh_table *tbl); struct neighbour *neigh_lookup(struct neigh_table *tbl, const void *pkey, struct net_device *dev); struct neighbour *neigh_lookup_nodev(struct neigh_table *tbl, struct net *net, diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 41841d8e4ea4..8bdaeb080ce4 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c @@ -1548,14 +1548,15 @@ 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 net *net, struct neigh_table *tbl) { unsigned long now = jiffies; + u8 family = tbl->family; unsigned long phsize; INIT_LIST_HEAD(&tbl->parms_list); list_add(&tbl->parms.list, &tbl->parms_list); - write_pnet(&tbl->parms.net, &init_net); + write_pnet(&tbl->parms.net, net); refcount_set(&tbl->parms.refcnt, 1); tbl->parms.reachable_time = neigh_rand_reach_time(NEIGH_VAR(&tbl->parms, BASE_REACHABLE_TIME)); @@ -1565,8 +1566,8 @@ void neigh_table_init(int index, struct neigh_table *tbl) panic("cannot create neighbour cache statistics"); #ifdef CONFIG_PROC_FS - if (!proc_create_seq_data(tbl->id, 0, init_net.proc_net_stat, - &neigh_stat_seq_ops, tbl)) + if (!proc_create_seq_data(tbl->id, 0, net->proc_net_stat, + &neigh_stat_seq_ops, tbl)) panic("cannot create neighbour proc dir entry"); #endif @@ -1595,13 +1596,36 @@ 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; + switch (family) { + case AF_INET: + neigh_tables[NEIGH_ARP_TABLE] = tbl; + break; + case AF_INET6: + neigh_tables[NEIGH_ND_TABLE] = tbl; + break; + case AF_DECnet: + neigh_tables[NEIGH_DN_TABLE] = tbl; + break; + } } EXPORT_SYMBOL(neigh_table_init); -int neigh_table_clear(int index, struct neigh_table *tbl) +int neigh_table_clear(struct net *net, struct neigh_table *tbl) { - neigh_tables[index] = NULL; + u8 family = tbl->family; + + switch (family) { + case AF_INET: + neigh_tables[NEIGH_ARP_TABLE] = NULL; + break; + case AF_INET6: + neigh_tables[NEIGH_ND_TABLE] = NULL; + break; + case AF_DECnet: + neigh_tables[NEIGH_DN_TABLE] = NULL; + break; + } + /* It is not clean... Fix it to unload IPv6 module safely */ cancel_delayed_work_sync(&tbl->gc_work); del_timer_sync(&tbl->proxy_timer); @@ -1617,7 +1641,7 @@ int neigh_table_clear(int index, struct neigh_table *tbl) kfree(tbl->phash_buckets); tbl->phash_buckets = NULL; - remove_proc_entry(tbl->id, init_net.proc_net_stat); + remove_proc_entry(tbl->id, net->proc_net_stat); free_percpu(tbl->stats); tbl->stats = NULL; diff --git a/net/decnet/dn_neigh.c b/net/decnet/dn_neigh.c index 74112777beb0..6d5078ddffac 100644 --- a/net/decnet/dn_neigh.c +++ b/net/decnet/dn_neigh.c @@ -593,7 +593,7 @@ static const struct seq_operations dn_neigh_seq_ops = { void __init dn_neigh_init(void) { - neigh_table_init(NEIGH_DN_TABLE, &dn_neigh_table); + neigh_table_init(&init_net, &dn_neigh_table); proc_create_net("decnet_neigh", 0444, init_net.proc_net, &dn_neigh_seq_ops, sizeof(struct neigh_seq_state)); } @@ -601,5 +601,5 @@ void __init dn_neigh_init(void) void __exit dn_neigh_cleanup(void) { remove_proc_entry("decnet_neigh", init_net.proc_net); - neigh_table_clear(NEIGH_DN_TABLE, &dn_neigh_table); + neigh_table_clear(&init_net, &dn_neigh_table); } diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c index 7b27faefa01b..707b40f76852 100644 --- a/net/ipv4/arp.c +++ b/net/ipv4/arp.c @@ -1291,7 +1291,7 @@ static int arp_proc_init(void); void __init arp_init(void) { - neigh_table_init(NEIGH_ARP_TABLE, &arp_tbl); + neigh_table_init(&init_net, &arp_tbl); dev_add_pack(&arp_packet_type); arp_proc_init(); diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index 5103d8641b04..6105530fe865 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c @@ -1908,7 +1908,7 @@ int __init ndisc_init(void) /* * Initialize the neighbour table */ - neigh_table_init(NEIGH_ND_TABLE, &nd_tbl); + neigh_table_init(&init_net, &nd_tbl); #ifdef CONFIG_SYSCTL err = neigh_sysctl_register(NULL, &nd_tbl.parms, @@ -1941,6 +1941,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(&init_net, &nd_tbl); unregister_pernet_subsys(&ndisc_net_ops); } -- 2.11.0