Skip to contentSkip to conversation

Remove NPROTO.

PATCH In review Rusty Russell 2 participants 6 messages Mar 12, 2008 – Mar 23, 2008

Subsystems (5)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Remove NPROTO.

NPROTO seems redundant; it's equal to AF_MAX/PF_MAX.

It's fairly simple to find all users and replace them appropriately.

include/linux/net.h +1 -2
diff -r 1c65089f4c8f include/linux/net.h
@@ -19,14 +19,13 @@
 #define _LINUX_NET_H
 
 #include <linux/wait.h>
+#include <linux/socket.h>
 #include <asm/socket.h>
 
 struct poll_table_struct;
 struct pipe_inode_info;
 struct inode;
 struct net;
-
-#define NPROTO		34		/* should be enough for now..	*/
 
 #define SYS_SOCKET	1		/* sys_socket(2)		*/
 #define SYS_BIND	2		/* sys_bind(2)			*/
include/linux/netfilter.h +2 -2
diff -r 1c65089f4c8f include/linux/netfilter.h
@@ -128,7 +128,7 @@ extern struct ctl_path nf_net_ipv4_netfi
 extern struct ctl_path nf_net_ipv4_netfilter_sysctl_path[];
 #endif /* CONFIG_SYSCTL */
 
-extern struct list_head nf_hooks[NPROTO][NF_MAX_HOOKS];
+extern struct list_head nf_hooks[AF_MAX][NF_MAX_HOOKS];
 
 int nf_hook_slow(int pf, unsigned int hook, struct sk_buff *skb,
 		 struct net_device *indev, struct net_device *outdev,
@@ -232,7 +232,7 @@ struct nf_afinfo {
 	int		route_key_size;
 };
 
-extern const struct nf_afinfo *nf_afinfo[NPROTO];
+extern const struct nf_afinfo *nf_afinfo[AF_MAX];
 static inline const struct nf_afinfo *nf_get_afinfo(unsigned short family)
 {
 	return rcu_dereference(nf_afinfo[family]);
include/net/netns/x_tables.h +1 -1
diff -r 1c65089f4c8f include/net/netns/x_tables.h
@@ -5,6 +5,6 @@
 #include <linux/net.h>
 
 struct netns_xt {
-	struct list_head tables[NPROTO];
+	struct list_head tables[AF_MAX];
 };
 #endif
net/core/dev.c +3 -3
diff -r 1c65089f4c8f net/core/dev.c
@@ -2247,7 +2247,7 @@ softnet_break:
 	goto out;
 }
 
-static gifconf_func_t * gifconf_list [NPROTO];
+static gifconf_func_t * gifconf_list [AF_MAX];
 
 /**
  *	register_gifconf	-	register a SIOCGIF handler
@@ -2260,7 +2260,7 @@ static gifconf_func_t * gifconf_list [NP
  */
 int register_gifconf(unsigned int family, gifconf_func_t * gifconf)
 {
-	if (family >= NPROTO)
+	if (family >= AF_MAX)
 		return -EINVAL;
 	gifconf_list[family] = gifconf;
 	return 0;
@@ -2336,7 +2336,7 @@ static int dev_ifconf(struct net *net, c
 
 	total = 0;
 	for_each_netdev(net, dev) {
-		for (i = 0; i < NPROTO; i++) {
+		for (i = 0; i < AF_MAX; i++) {
 			if (gifconf_list[i]) {
 				int done;
 				if (!pos)
net/core/rtnetlink.c +6 -6
diff -r 1c65089f4c8f net/core/rtnetlink.c
@@ -82,7 +82,7 @@ int rtnl_trylock(void)
 	return mutex_trylock(&rtnl_mutex);
 }
 
-static struct rtnl_link *rtnl_msg_handlers[NPROTO];
+static struct rtnl_link *rtnl_msg_handlers[PF_MAX];
 
 static inline int rtm_msgindex(int msgtype)
 {
@@ -143,7 +143,7 @@ int __rtnl_register(int protocol, int ms
 	struct rtnl_link *tab;
 	int msgindex;
 
-	BUG_ON(protocol < 0 || protocol >= NPROTO);
+	BUG_ON(protocol < 0 || protocol >= PF_MAX);
 	msgindex = rtm_msgindex(msgtype);
 
 	tab = rtnl_msg_handlers[protocol];
@@ -197,7 +197,7 @@ int rtnl_unregister(int protocol, int ms
 {
 	int msgindex;
 
-	BUG_ON(protocol < 0 || protocol >= NPROTO);
+	BUG_ON(protocol < 0 || protocol >= PF_MAX);
 	msgindex = rtm_msgindex(msgtype);
 
 	if (rtnl_msg_handlers[protocol] == NULL)
@@ -220,7 +220,7 @@ EXPORT_SYMBOL_GPL(rtnl_unregister);
  */
 void rtnl_unregister_all(int protocol)
 {
-	BUG_ON(protocol < 0 || protocol >= NPROTO);
+	BUG_ON(protocol < 0 || protocol >= PF_MAX);
 
 	kfree(rtnl_msg_handlers[protocol]);
 	rtnl_msg_handlers[protocol] = NULL;
@@ -1179,7 +1179,7 @@ static int rtnl_dump_all(struct sk_buff 
 
 	if (s_idx == 0)
 		s_idx = 1;
-	for (idx=1; idx<NPROTO; idx++) {
+	for (idx=1; idx<PF_MAX; idx++) {
 		int type = cb->nlh->nlmsg_type-RTM_BASE;
 		if (idx < s_idx || idx == PF_PACKET)
 			continue;
@@ -1246,7 +1246,7 @@ static int rtnetlink_rcv_msg(struct sk_b
 		return 0;
 
 	family = ((struct rtgenmsg*)NLMSG_DATA(nlh))->rtgen_family;
-	if (family >= NPROTO)
+	if (family >= PF_MAX)
 		return -EAFNOSUPPORT;
 
 	sz_idx = type>>2;
net/netfilter/core.c +3 -3
diff -r 1c65089f4c8f net/netfilter/core.c
@@ -26,7 +26,7 @@
 
 static DEFINE_MUTEX(afinfo_mutex);
 
-const struct nf_afinfo *nf_afinfo[NPROTO] __read_mostly;
+const struct nf_afinfo *nf_afinfo[AF_MAX] __read_mostly;
 EXPORT_SYMBOL(nf_afinfo);
 
 int nf_register_afinfo(const struct nf_afinfo *afinfo)
@@ -51,7 +51,7 @@ void nf_unregister_afinfo(const struct n
 }
 EXPORT_SYMBOL_GPL(nf_unregister_afinfo);
 
-struct list_head nf_hooks[NPROTO][NF_MAX_HOOKS] __read_mostly;
+struct list_head nf_hooks[AF_MAX][NF_MAX_HOOKS] __read_mostly;
 EXPORT_SYMBOL(nf_hooks);
 static DEFINE_MUTEX(nf_hook_mutex);
 
@@ -256,7 +256,7 @@ void __init netfilter_init(void)
 void __init netfilter_init(void)
 {
 	int i, h;
-	for (i = 0; i < NPROTO; i++) {
+	for (i = 0; i < AF_MAX; i++) {
 		for (h = 0; h < NF_MAX_HOOKS; h++)
 			INIT_LIST_HEAD(&nf_hooks[i][h]);
 	}
net/netfilter/nf_log.c +6 -6
diff -r 1c65089f4c8f net/netfilter/nf_log.c
@@ -15,7 +15,7 @@
 
 #define NF_LOG_PREFIXLEN		128
 
-static const struct nf_logger *nf_loggers[NPROTO] __read_mostly;
+static const struct nf_logger *nf_loggers[PF_MAX] __read_mostly;
 static DEFINE_MUTEX(nf_log_mutex);
 
 /* return EBUSY if somebody else is registered, EEXIST if the same logger
@@ -24,7 +24,7 @@ int nf_log_register(int pf, const struct
 {
 	int ret;
 
-	if (pf >= NPROTO)
+	if (pf >= PF_MAX)
 		return -EINVAL;
 
 	/* Any setup of logging members must be done before
@@ -47,7 +47,7 @@ EXPORT_SYMBOL(nf_log_register);
 
 void nf_log_unregister_pf(int pf)
 {
-	if (pf >= NPROTO)
+	if (pf >= PF_MAX)
 		return;
 	mutex_lock(&nf_log_mutex);
 	rcu_assign_pointer(nf_loggers[pf], NULL);
@@ -63,7 +63,7 @@ void nf_log_unregister(const struct nf_l
 	int i;
 
 	mutex_lock(&nf_log_mutex);
-	for (i = 0; i < NPROTO; i++) {
+	for (i = 0; i < PF_MAX; i++) {
 		if (nf_loggers[i] == logger)
 			rcu_assign_pointer(nf_loggers[i], NULL);
 	}
@@ -107,7 +107,7 @@ static void *seq_start(struct seq_file *
 {
 	rcu_read_lock();
 
-	if (*pos >= NPROTO)
+	if (*pos >= PF_MAX)
 		return NULL;
 
 	return pos;
@@ -117,7 +117,7 @@ static void *seq_next(struct seq_file *s
 {
 	(*pos)++;
 
-	if (*pos >= NPROTO)
+	if (*pos >= PF_MAX)
 		return NULL;
 
 	return pos;
net/netfilter/nf_queue.c +6 -6
diff -r 1c65089f4c8f net/netfilter/nf_queue.c
@@ -16,7 +16,7 @@
  * long term mutex.  The handler must provide an an outfn() to accept packets
  * for queueing and must reinject all packets it receives, no matter what.
  */
-static const struct nf_queue_handler *queue_handler[NPROTO];
+static const struct nf_queue_handler *queue_handler[PF_MAX];
 
 static DEFINE_MUTEX(queue_handler_mutex);
 
@@ -26,7 +26,7 @@ int nf_register_queue_handler(int pf, co
 {
 	int ret;
 
-	if (pf >= NPROTO)
+	if (pf >= PF_MAX)
 		return -EINVAL;
 
 	mutex_lock(&queue_handler_mutex);
@@ -47,7 +47,7 @@ EXPORT_SYMBOL(nf_register_queue_handler)
 /* The caller must flush their queue before this */
 int nf_unregister_queue_handler(int pf, const struct nf_queue_handler *qh)
 {
-	if (pf >= NPROTO)
+	if (pf >= PF_MAX)
 		return -EINVAL;
 
 	mutex_lock(&queue_handler_mutex);
@@ -70,7 +70,7 @@ void nf_unregister_queue_handlers(const 
 	int pf;
 
 	mutex_lock(&queue_handler_mutex);
-	for (pf = 0; pf < NPROTO; pf++)  {
+	for (pf = 0; pf < PF_MAX; pf++)  {
 		if (queue_handler[pf] == qh)
 			rcu_assign_pointer(queue_handler[pf], NULL);
 	}
@@ -285,7 +285,7 @@ EXPORT_SYMBOL(nf_reinject);
 #ifdef CONFIG_PROC_FS
 static void *seq_start(struct seq_file *seq, loff_t *pos)
 {
-	if (*pos >= NPROTO)
+	if (*pos >= PF_MAX)
 		return NULL;
 
 	return pos;
@@ -295,7 +295,7 @@ static void *seq_next(struct seq_file *s
 {
 	(*pos)++;
 
-	if (*pos >= NPROTO)
+	if (*pos >= PF_MAX)
 		return NULL;
 
 	return pos;
net/netfilter/x_tables.c +5 -5
diff -r 1c65089f4c8f net/netfilter/x_tables.c
@@ -58,7 +58,7 @@ static struct xt_af *xt;
 #define duprintf(format, args...)
 #endif
 
-static const char *xt_prefix[NPROTO] = {
+static const char *xt_prefix[AF_MAX] = {
 	[AF_INET]	= "ip",
 	[AF_INET6]	= "ip6",
 	[NF_ARP]	= "arp",
@@ -929,7 +929,7 @@ int xt_proto_init(struct net *net, int a
 	struct proc_dir_entry *proc;
 #endif
 
-	if (af >= NPROTO)
+	if (af >= AF_MAX)
 		return -EINVAL;
 
 
@@ -999,7 +999,7 @@ static int __net_init xt_net_init(struct
 {
 	int i;
 
-	for (i = 0; i < NPROTO; i++)
+	for (i = 0; i < ARRAY_SIZE(net->xt.tables); i++)
 		INIT_LIST_HEAD(&net->xt.tables[i]);
 	return 0;
 }
@@ -1012,11 +1012,11 @@ static int __init xt_init(void)
 {
 	int i, rv;
 
-	xt = kmalloc(sizeof(struct xt_af) * NPROTO, GFP_KERNEL);
+	xt = kmalloc(sizeof(struct xt_af) * AF_MAX, GFP_KERNEL);
 	if (!xt)
 		return -ENOMEM;
 
-	for (i = 0; i < NPROTO; i++) {
+	for (i = 0; i < AF_MAX; i++) {
 		mutex_init(&xt[i].mutex);
 #ifdef CONFIG_COMPAT
 		mutex_init(&xt[i].compat_mutex);
net/socket.c +6 -6
diff -r 1c65089f4c8f net/socket.c
@@ -145,7 +145,7 @@ static const struct file_operations sock
  */
 
 static DEFINE_SPINLOCK(net_family_lock);
-static const struct net_proto_family *net_families[NPROTO] __read_mostly;
+static const struct net_proto_family *net_families[PF_MAX] __read_mostly;
 
 /*
  *	Statistics counters of the socket lists
@@ -1101,7 +1101,7 @@ static int __sock_create(struct net *net
 	/*
 	 *      Check protocol is in range
 	 */
-	if (family < 0 || family >= NPROTO)
+	if (family < 0 || family >= PF_MAX)
 		return -EAFNOSUPPORT;
 	if (type < 0 || type >= SOCK_MAX)
 		return -EINVAL;
@@ -2110,9 +2110,9 @@ int sock_register(const struct net_proto
 {
 	int err;
 
-	if (ops->family >= NPROTO) {
-		printk(KERN_CRIT "protocol %d >= NPROTO(%d)\n", ops->family,
-		       NPROTO);
+	if (ops->family >= PF_MAX) {
+		printk(KERN_CRIT "protocol %d >= PF_MAX(%d)\n", ops->family,
+		       PF_MAX);
 		return -ENOBUFS;
 	}
 
@@ -2144,7 +2144,7 @@ int sock_register(const struct net_proto
  */
 void sock_unregister(int family)
 {
-	BUG_ON(family < 0 || family >= NPROTO);
+	BUG_ON(family < 0 || family >= PF_MAX);
 
 	spin_lock(&net_family_lock);
 	net_families[family] = NULL;
net/xfrm/xfrm_policy.c +4 -4
diff -r 1c65089f4c8f net/xfrm/xfrm_policy.c
@@ -50,7 +50,7 @@ EXPORT_SYMBOL(xfrm_policy_count);
 EXPORT_SYMBOL(xfrm_policy_count);
 
 static DEFINE_RWLOCK(xfrm_policy_afinfo_lock);
-static struct xfrm_policy_afinfo *xfrm_policy_afinfo[NPROTO];
+static struct xfrm_policy_afinfo *xfrm_policy_afinfo[AF_MAX];
 
 static struct kmem_cache *xfrm_dst_cache __read_mostly;
 
@@ -2238,7 +2238,7 @@ int xfrm_policy_register_afinfo(struct x
 	int err = 0;
 	if (unlikely(afinfo == NULL))
 		return -EINVAL;
-	if (unlikely(afinfo->family >= NPROTO))
+	if (unlikely(afinfo->family >= AF_MAX))
 		return -EAFNOSUPPORT;
 	write_lock_bh(&xfrm_policy_afinfo_lock);
 	if (unlikely(xfrm_policy_afinfo[afinfo->family] != NULL))
@@ -2267,7 +2267,7 @@ int xfrm_policy_unregister_afinfo(struct
 	int err = 0;
 	if (unlikely(afinfo == NULL))
 		return -EINVAL;
-	if (unlikely(afinfo->family >= NPROTO))
+	if (unlikely(afinfo->family >= AF_MAX))
 		return -EAFNOSUPPORT;
 	write_lock_bh(&xfrm_policy_afinfo_lock);
 	if (likely(xfrm_policy_afinfo[afinfo->family] != NULL)) {
@@ -2291,7 +2291,7 @@ static struct xfrm_policy_afinfo *xfrm_p
 static struct xfrm_policy_afinfo *xfrm_policy_get_afinfo(unsigned short family)
 {
 	struct xfrm_policy_afinfo *afinfo;
-	if (unlikely(family >= NPROTO))
+	if (unlikely(family >= AF_MAX))
 		return NULL;
 	read_lock(&xfrm_policy_afinfo_lock);
 	afinfo = xfrm_policy_afinfo[family];
net/xfrm/xfrm_state.c +5 -5
diff -r 1c65089f4c8f net/xfrm/xfrm_state.c
@@ -187,7 +187,7 @@ EXPORT_SYMBOL(km_waitq);
 EXPORT_SYMBOL(km_waitq);
 
 static DEFINE_RWLOCK(xfrm_state_afinfo_lock);
-static struct xfrm_state_afinfo *xfrm_state_afinfo[NPROTO];
+static struct xfrm_state_afinfo *xfrm_state_afinfo[AF_MAX];
 
 static struct work_struct xfrm_state_gc_work;
 static HLIST_HEAD(xfrm_state_gc_list);
@@ -201,7 +201,7 @@ static struct xfrm_state_afinfo *xfrm_st
 static struct xfrm_state_afinfo *xfrm_state_lock_afinfo(unsigned int family)
 {
 	struct xfrm_state_afinfo *afinfo;
-	if (unlikely(family >= NPROTO))
+	if (unlikely(family >= AF_MAX))
 		return NULL;
 	write_lock_bh(&xfrm_state_afinfo_lock);
 	afinfo = xfrm_state_afinfo[family];
@@ -1863,7 +1863,7 @@ int xfrm_state_register_afinfo(struct xf
 	int err = 0;
 	if (unlikely(afinfo == NULL))
 		return -EINVAL;
-	if (unlikely(afinfo->family >= NPROTO))
+	if (unlikely(afinfo->family >= AF_MAX))
 		return -EAFNOSUPPORT;
 	write_lock_bh(&xfrm_state_afinfo_lock);
 	if (unlikely(xfrm_state_afinfo[afinfo->family] != NULL))
@@ -1880,7 +1880,7 @@ int xfrm_state_unregister_afinfo(struct 
 	int err = 0;
 	if (unlikely(afinfo == NULL))
 		return -EINVAL;
-	if (unlikely(afinfo->family >= NPROTO))
+	if (unlikely(afinfo->family >= AF_MAX))
 		return -EAFNOSUPPORT;
 	write_lock_bh(&xfrm_state_afinfo_lock);
 	if (likely(xfrm_state_afinfo[afinfo->family] != NULL)) {
@@ -1897,7 +1897,7 @@ static struct xfrm_state_afinfo *xfrm_st
 static struct xfrm_state_afinfo *xfrm_state_get_afinfo(unsigned int family)
 {
 	struct xfrm_state_afinfo *afinfo;
-	if (unlikely(family >= NPROTO))
+	if (unlikely(family >= AF_MAX))
 		return NULL;
 	read_lock(&xfrm_state_afinfo_lock);
 	afinfo = xfrm_state_afinfo[family];
maintainer
#1 lore raw

From: Rusty Russell <[email protected]>
Date: Wed, 12 Mar 2008 12:24:25 +1100

Quoted 5 lines

NPROTO seems redundant; it's equal to AF_MAX/PF_MAX.

It's fairly simple to find all users and replace them appropriately.

Redundant, but exported to userspace for about 15 years.

We'd be wise to not remove it.

#2 lore raw
Quoted 5 lines · On Wednesday 12 March 2008 15:14:41 David Miller wrote:

From: Rusty Russell <[email protected]>
Date: Wed, 12 Mar 2008 12:24:25 +1100

Quoted 2 lines

NPROTO seems redundant; it's equal to AF_MAX/PF_MAX.

Quoted 7 lines
Quoted 3 lines

It's fairly simple to find all users and replace them appropriately.

Redundant, but exported to userspace for about 15 years.

We'd be wise to not remove it.

Thanks. Should we #define NPROTO AF_MAX then?

Rusty.

maintainer
#3 lore raw

From: Rusty Russell <[email protected]>
Date: Wed, 12 Mar 2008 18:34:26 +1100

Quoted 6 lines · On Wednesday 12 March 2008 15:14:41 David Miller wrote:
Quoted 3 lines

Redundant, but exported to userspace for about 15 years.

We'd be wise to not remove it.

Thanks. Should we #define NPROTO AF_MAX then?

I can't see a reason why not.

#4 lore raw

PATCH 1/1 NPROTO is redundant; it's equal to AF_MAX/PF_MAX.

DaveM pointed out NPROTO exposed to userspace, so keep it around, just make sure it stays in sync.

include/linux/net.h +2 -1
diff -r 1c65089f4c8f include/linux/net.h
@@ -19,14 +19,15 @@
 #define _LINUX_NET_H
 
 #include <linux/wait.h>
+#include <linux/socket.h>
 #include <asm/socket.h>
 
 struct poll_table_struct;
 struct pipe_inode_info;
 struct inode;
 struct net;
 
-#define NPROTO		34		/* should be enough for now..	*/
+#define NPROTO		AF_MAX
 
 #define SYS_SOCKET	1		/* sys_socket(2)		*/
 #define SYS_BIND	2		/* sys_bind(2)			*/
maintainer Applied
#5 lore raw

Re: [PATCH] NPROTO is redundant; it's equal to AF_MAX/PF_MAX.

From: Rusty Russell <[email protected]>
Date: Thu, 13 Mar 2008 10:50:13 +1100

Quoted 4 lines

DaveM pointed out NPROTO exposed to userspace, so keep it around, just make sure it stays in sync.

Applied to net-2.6.26, thanks Rusty.