netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next 0/9] ipv6: making UDP mibs per/namespace
@ 2008-10-02 10:13 Denis V. Lunev
       [not found] ` <1222942394.6327.5.camel-aPCOdVxUTlgvJsYlp49lxw@public.gmane.org>
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Denis V. Lunev @ 2008-10-02 10:13 UTC (permalink / raw)
  To: yoshfuji
  Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
	containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
	den-GEFAQzZX7r8dnm+yROfE0A, dlezcano-NmTC/0ZBporQT0dZR+AlfA,
	xemul-GEFAQzZX7r8dnm+yROfE0A, benjamin.thery-6ktuUTfB/bM

This patch series provides a basic infrastructure to make snmp6
statistics per/namespace and actually virtualize udp6/udplite6 mibs.

This set follows approach used by Pavel Emelyanov in IPv4 code.
IP6/icmp6 statistics is also ready and will follow.

Regards,
	Den

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH net-next 1/9] netns: move /proc/net/dev_snmp6 to struct net
       [not found] ` <1222942394.6327.5.camel-aPCOdVxUTlgvJsYlp49lxw@public.gmane.org>
@ 2008-10-02 10:14   ` Denis V. Lunev
  2008-10-02 10:14   ` [PATCH net-next 2/9] netns: register /proc/net/dev_snmp6/* in each ns Denis V. Lunev
                     ` (6 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Denis V. Lunev @ 2008-10-02 10:14 UTC (permalink / raw)
  To: yoshfuji-VfPWfsRibaP+Ru+s062T9g
  Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
	containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
	den-GEFAQzZX7r8dnm+yROfE0A, dlezcano-NmTC/0ZBporQT0dZR+AlfA,
	xemul-GEFAQzZX7r8dnm+yROfE0A, benjamin.thery-6ktuUTfB/bM

Signed-off-by: Denis V. Lunev <den-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
---
 include/net/netns/mib.h |    4 ++++
 net/ipv6/proc.c         |   20 +++++++++++---------
 2 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/include/net/netns/mib.h b/include/net/netns/mib.h
index 4491476..ffcef5d 100644
--- a/include/net/netns/mib.h
+++ b/include/net/netns/mib.h
@@ -11,6 +11,10 @@ struct netns_mib {
 	DEFINE_SNMP_STAT(struct udp_mib, udplite_statistics);
 	DEFINE_SNMP_STAT(struct icmp_mib, icmp_statistics);
 	DEFINE_SNMP_STAT(struct icmpmsg_mib, icmpmsg_statistics);
+
+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
+	struct proc_dir_entry *proc_net_devsnmp6;
+#endif
 };
 
 #endif
diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c
index 0179b66..16ebf85 100644
--- a/net/ipv6/proc.c
+++ b/net/ipv6/proc.c
@@ -29,8 +29,6 @@
 #include <net/transp_v6.h>
 #include <net/ipv6.h>
 
-static struct proc_dir_entry *proc_net_devsnmp6;
-
 static int sockstat6_seq_show(struct seq_file *seq, void *v)
 {
 	struct net *net = seq->private;
@@ -210,18 +208,20 @@ static const struct file_operations snmp6_seq_fops = {
 int snmp6_register_dev(struct inet6_dev *idev)
 {
 	struct proc_dir_entry *p;
+	struct net *net;
 
 	if (!idev || !idev->dev)
 		return -EINVAL;
 
-	if (!net_eq(dev_net(idev->dev), &init_net))
+	net = dev_net(idev->dev);
+	if (!net_eq(net, &init_net))
 		return 0;
 
-	if (!proc_net_devsnmp6)
+	if (!net->mib.proc_net_devsnmp6)
 		return -ENOENT;
 
 	p = proc_create_data(idev->dev->name, S_IRUGO,
-			     proc_net_devsnmp6, &snmp6_seq_fops, idev);
+			     net->mib.proc_net_devsnmp6, &snmp6_seq_fops, idev);
 	if (!p)
 		return -ENOMEM;
 
@@ -231,12 +231,13 @@ int snmp6_register_dev(struct inet6_dev *idev)
 
 int snmp6_unregister_dev(struct inet6_dev *idev)
 {
-	if (!proc_net_devsnmp6)
+	struct net *net = dev_net(idev->dev);
+	if (!net->mib.proc_net_devsnmp6)
 		return -ENOENT;
 	if (!idev || !idev->stats.proc_dir_entry)
 		return -EINVAL;
 	remove_proc_entry(idev->stats.proc_dir_entry->name,
-			  proc_net_devsnmp6);
+			  net->mib.proc_net_devsnmp6);
 	idev->stats.proc_dir_entry = NULL;
 	return 0;
 }
@@ -269,8 +270,9 @@ int __init ipv6_misc_proc_init(void)
 	if (!proc_net_fops_create(&init_net, "snmp6", S_IRUGO, &snmp6_seq_fops))
 		goto proc_snmp6_fail;
 
-	proc_net_devsnmp6 = proc_mkdir("dev_snmp6", init_net.proc_net);
-	if (!proc_net_devsnmp6)
+	init_net.mib.proc_net_devsnmp6 =
+		proc_mkdir("dev_snmp6", init_net.proc_net);
+	if (!init_net.mib.proc_net_devsnmp6)
 		goto proc_dev_snmp6_fail;
 out:
 	return rc;
-- 
1.5.3.rc5

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net-next 2/9] netns: register /proc/net/dev_snmp6/* in each ns
       [not found] ` <1222942394.6327.5.camel-aPCOdVxUTlgvJsYlp49lxw@public.gmane.org>
  2008-10-02 10:14   ` [PATCH net-next 1/9] netns: move /proc/net/dev_snmp6 to struct net Denis V. Lunev
@ 2008-10-02 10:14   ` Denis V. Lunev
  2008-10-02 10:14   ` [PATCH net-next 3/9] ipv6: consolidate ipv6 sock_stat code at the beginning of net/ipv6/proc.c Denis V. Lunev
                     ` (5 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Denis V. Lunev @ 2008-10-02 10:14 UTC (permalink / raw)
  To: yoshfuji-VfPWfsRibaP+Ru+s062T9g
  Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
	containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
	den-GEFAQzZX7r8dnm+yROfE0A, dlezcano-NmTC/0ZBporQT0dZR+AlfA,
	xemul-GEFAQzZX7r8dnm+yROfE0A, benjamin.thery-6ktuUTfB/bM

Do the same for /proc/net/snmp6.

Signed-off-by: Denis V. Lunev <den-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
---
 net/ipv6/proc.c |   40 ++++++++++++++++------------------------
 1 files changed, 16 insertions(+), 24 deletions(-)

diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c
index 16ebf85..5764062 100644
--- a/net/ipv6/proc.c
+++ b/net/ipv6/proc.c
@@ -247,12 +247,27 @@ static int ipv6_proc_init_net(struct net *net)
 	if (!proc_net_fops_create(net, "sockstat6", S_IRUGO,
 			&sockstat6_seq_fops))
 		return -ENOMEM;
+
+	if (!proc_net_fops_create(net, "snmp6", S_IRUGO, &snmp6_seq_fops))
+		goto proc_snmp6_fail;
+
+	net->mib.proc_net_devsnmp6 = proc_mkdir("dev_snmp6", net->proc_net);
+	if (!net->mib.proc_net_devsnmp6)
+		goto proc_dev_snmp6_fail;
 	return 0;
+
+proc_snmp6_fail:
+	proc_net_remove(net, "sockstat6");
+proc_dev_snmp6_fail:
+	proc_net_remove(net, "dev_snmp6");
+	return -ENOMEM;
 }
 
 static void ipv6_proc_exit_net(struct net *net)
 {
 	proc_net_remove(net, "sockstat6");
+	proc_net_remove(net, "dev_snmp6");
+	proc_net_remove(net, "snmp6");
 }
 
 static struct pernet_operations ipv6_proc_ops = {
@@ -262,34 +277,11 @@ static struct pernet_operations ipv6_proc_ops = {
 
 int __init ipv6_misc_proc_init(void)
 {
-	int rc = 0;
-
-	if (register_pernet_subsys(&ipv6_proc_ops))
-		goto proc_net_fail;
-
-	if (!proc_net_fops_create(&init_net, "snmp6", S_IRUGO, &snmp6_seq_fops))
-		goto proc_snmp6_fail;
-
-	init_net.mib.proc_net_devsnmp6 =
-		proc_mkdir("dev_snmp6", init_net.proc_net);
-	if (!init_net.mib.proc_net_devsnmp6)
-		goto proc_dev_snmp6_fail;
-out:
-	return rc;
-
-proc_dev_snmp6_fail:
-	proc_net_remove(&init_net, "snmp6");
-proc_snmp6_fail:
-	unregister_pernet_subsys(&ipv6_proc_ops);
-proc_net_fail:
-	rc = -ENOMEM;
-	goto out;
+	return register_pernet_subsys(&ipv6_proc_ops);
 }
 
 void ipv6_misc_proc_exit(void)
 {
-	proc_net_remove(&init_net, "dev_snmp6");
-	proc_net_remove(&init_net, "snmp6");
 	unregister_pernet_subsys(&ipv6_proc_ops);
 }
 
-- 
1.5.3.rc5

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net-next 3/9] ipv6: consolidate ipv6 sock_stat code at the beginning of net/ipv6/proc.c
       [not found] ` <1222942394.6327.5.camel-aPCOdVxUTlgvJsYlp49lxw@public.gmane.org>
  2008-10-02 10:14   ` [PATCH net-next 1/9] netns: move /proc/net/dev_snmp6 to struct net Denis V. Lunev
  2008-10-02 10:14   ` [PATCH net-next 2/9] netns: register /proc/net/dev_snmp6/* in each ns Denis V. Lunev
@ 2008-10-02 10:14   ` Denis V. Lunev
  2008-10-02 10:14   ` [PATCH net-next 4/9] ipv6: separate seq_ops for global & per/device ipv6 statistics Denis V. Lunev
                     ` (4 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Denis V. Lunev @ 2008-10-02 10:14 UTC (permalink / raw)
  To: yoshfuji-VfPWfsRibaP+Ru+s062T9g
  Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
	containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
	den-GEFAQzZX7r8dnm+yROfE0A, dlezcano-NmTC/0ZBporQT0dZR+AlfA,
	xemul-GEFAQzZX7r8dnm+yROfE0A, benjamin.thery-6ktuUTfB/bM

Simple, comsolidate sockstat6 staff in one place, at the beginning of
the file. Right now sockstat6_seq_open/sockstat6_seq_fops looks like an
intrusion in the middle of snmp6 code.

Signed-off-by: Denis V. Lunev <den-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
---
 net/ipv6/proc.c |   26 +++++++++++++-------------
 1 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c
index 5764062..25eda8b 100644
--- a/net/ipv6/proc.c
+++ b/net/ipv6/proc.c
@@ -46,6 +46,19 @@ static int sockstat6_seq_show(struct seq_file *seq, void *v)
 	return 0;
 }
 
+static int sockstat6_seq_open(struct inode *inode, struct file *file)
+{
+	return single_open_net(inode, file, sockstat6_seq_show);
+}
+
+static const struct file_operations sockstat6_seq_fops = {
+	.owner	 = THIS_MODULE,
+	.open	 = sockstat6_seq_open,
+	.read	 = seq_read,
+	.llseek	 = seq_lseek,
+	.release = single_release_net,
+};
+
 static struct snmp_mib snmp6_ipstats_list[] = {
 /* ipv6 mib according to RFC 2465 */
 	SNMP_MIB_ITEM("Ip6InReceives", IPSTATS_MIB_INRECEIVES),
@@ -179,19 +192,6 @@ static int snmp6_seq_show(struct seq_file *seq, void *v)
 	return 0;
 }
 
-static int sockstat6_seq_open(struct inode *inode, struct file *file)
-{
-	return single_open_net(inode, file, sockstat6_seq_show);
-}
-
-static const struct file_operations sockstat6_seq_fops = {
-	.owner	 = THIS_MODULE,
-	.open	 = sockstat6_seq_open,
-	.read	 = seq_read,
-	.llseek	 = seq_lseek,
-	.release = single_release_net,
-};
-
 static int snmp6_seq_open(struct inode *inode, struct file *file)
 {
 	return single_open(file, snmp6_seq_show, PDE(inode)->data);
-- 
1.5.3.rc5

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net-next 4/9] ipv6: separate seq_ops for global & per/device ipv6 statistics
       [not found] ` <1222942394.6327.5.camel-aPCOdVxUTlgvJsYlp49lxw@public.gmane.org>
                     ` (2 preceding siblings ...)
  2008-10-02 10:14   ` [PATCH net-next 3/9] ipv6: consolidate ipv6 sock_stat code at the beginning of net/ipv6/proc.c Denis V. Lunev
@ 2008-10-02 10:14   ` Denis V. Lunev
  2008-10-02 10:14   ` [PATCH net-next 5/9] netns: register global ipv6 mibs statistics in each namespace Denis V. Lunev
                     ` (3 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Denis V. Lunev @ 2008-10-02 10:14 UTC (permalink / raw)
  To: yoshfuji-VfPWfsRibaP+Ru+s062T9g
  Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
	containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
	den-GEFAQzZX7r8dnm+yROfE0A, dlezcano-NmTC/0ZBporQT0dZR+AlfA,
	xemul-GEFAQzZX7r8dnm+yROfE0A, benjamin.thery-6ktuUTfB/bM

idev has been stored on seq->private. NULL has been stored for global
statistics.

The situation is changed with net namespace. We need to store pointer to
struct net and the only place is seq->private. So, we'll have for
/proc/net/dev_snmp6/* and for /proc/net/snmp6 pointers of two different
types stored in the same field.

This effectively requires to separate seq_ops of these files.

Signed-off-by: Denis V. Lunev <den-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
---
 net/ipv6/proc.c |   48 ++++++++++++++++++++++++++++++++----------------
 1 files changed, 32 insertions(+), 16 deletions(-)

diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c
index 25eda8b..7601f56 100644
--- a/net/ipv6/proc.c
+++ b/net/ipv6/proc.c
@@ -175,26 +175,17 @@ snmp6_seq_show_item(struct seq_file *seq, void **mib, struct snmp_mib *itemlist)
 
 static int snmp6_seq_show(struct seq_file *seq, void *v)
 {
-	struct inet6_dev *idev = (struct inet6_dev *)seq->private;
-
-	if (idev) {
-		seq_printf(seq, "%-32s\t%u\n", "ifIndex", idev->dev->ifindex);
-		snmp6_seq_show_item(seq, (void **)idev->stats.ipv6, snmp6_ipstats_list);
-		snmp6_seq_show_item(seq, (void **)idev->stats.icmpv6, snmp6_icmp6_list);
-		snmp6_seq_show_icmpv6msg(seq, (void **)idev->stats.icmpv6msg);
-	} else {
-		snmp6_seq_show_item(seq, (void **)ipv6_statistics, snmp6_ipstats_list);
-		snmp6_seq_show_item(seq, (void **)icmpv6_statistics, snmp6_icmp6_list);
-		snmp6_seq_show_icmpv6msg(seq, (void **)icmpv6msg_statistics);
-		snmp6_seq_show_item(seq, (void **)udp_stats_in6, snmp6_udp6_list);
-		snmp6_seq_show_item(seq, (void **)udplite_stats_in6, snmp6_udplite6_list);
-	}
+	snmp6_seq_show_item(seq, (void **)ipv6_statistics, snmp6_ipstats_list);
+	snmp6_seq_show_item(seq, (void **)icmpv6_statistics, snmp6_icmp6_list);
+	snmp6_seq_show_icmpv6msg(seq, (void **)icmpv6msg_statistics);
+	snmp6_seq_show_item(seq, (void **)udp_stats_in6, snmp6_udp6_list);
+	snmp6_seq_show_item(seq, (void **)udplite_stats_in6, snmp6_udplite6_list);
 	return 0;
 }
 
 static int snmp6_seq_open(struct inode *inode, struct file *file)
 {
-	return single_open(file, snmp6_seq_show, PDE(inode)->data);
+	return single_open(file, snmp6_seq_show, NULL);
 }
 
 static const struct file_operations snmp6_seq_fops = {
@@ -205,6 +196,30 @@ static const struct file_operations snmp6_seq_fops = {
 	.release = single_release,
 };
 
+static int snmp6_dev_seq_show(struct seq_file *seq, void *v)
+{
+	struct inet6_dev *idev = (struct inet6_dev *)seq->private;
+
+	seq_printf(seq, "%-32s\t%u\n", "ifIndex", idev->dev->ifindex);
+	snmp6_seq_show_item(seq, (void **)idev->stats.ipv6, snmp6_ipstats_list);
+	snmp6_seq_show_item(seq, (void **)idev->stats.icmpv6, snmp6_icmp6_list);
+	snmp6_seq_show_icmpv6msg(seq, (void **)idev->stats.icmpv6msg);
+	return 0;
+}
+
+static int snmp6_dev_seq_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, snmp6_dev_seq_show, PDE(inode)->data);
+}
+
+static const struct file_operations snmp6_dev_seq_fops = {
+	.owner	 = THIS_MODULE,
+	.open	 = snmp6_dev_seq_open,
+	.read	 = seq_read,
+	.llseek	 = seq_lseek,
+	.release = single_release,
+};
+
 int snmp6_register_dev(struct inet6_dev *idev)
 {
 	struct proc_dir_entry *p;
@@ -221,7 +236,8 @@ int snmp6_register_dev(struct inet6_dev *idev)
 		return -ENOENT;
 
 	p = proc_create_data(idev->dev->name, S_IRUGO,
-			     net->mib.proc_net_devsnmp6, &snmp6_seq_fops, idev);
+			     net->mib.proc_net_devsnmp6,
+			     &snmp6_dev_seq_fops, idev);
 	if (!p)
 		return -ENOMEM;
 
-- 
1.5.3.rc5

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net-next 5/9] netns: register global ipv6 mibs statistics in each namespace
       [not found] ` <1222942394.6327.5.camel-aPCOdVxUTlgvJsYlp49lxw@public.gmane.org>
                     ` (3 preceding siblings ...)
  2008-10-02 10:14   ` [PATCH net-next 4/9] ipv6: separate seq_ops for global & per/device ipv6 statistics Denis V. Lunev
@ 2008-10-02 10:14   ` Denis V. Lunev
  2008-10-02 10:14   ` [PATCH net-next 6/9] netns: allow per device ipv6 snmp statistics in non-initial namespace Denis V. Lunev
                     ` (2 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Denis V. Lunev @ 2008-10-02 10:14 UTC (permalink / raw)
  To: yoshfuji-VfPWfsRibaP+Ru+s062T9g
  Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
	containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
	den-GEFAQzZX7r8dnm+yROfE0A, dlezcano-NmTC/0ZBporQT0dZR+AlfA,
	xemul-GEFAQzZX7r8dnm+yROfE0A, benjamin.thery-6ktuUTfB/bM

Unused net variable will become used very soon.

Signed-off-by: Denis V. Lunev <den-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
---
 net/ipv6/proc.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c
index 7601f56..c38c9e5 100644
--- a/net/ipv6/proc.c
+++ b/net/ipv6/proc.c
@@ -175,6 +175,8 @@ snmp6_seq_show_item(struct seq_file *seq, void **mib, struct snmp_mib *itemlist)
 
 static int snmp6_seq_show(struct seq_file *seq, void *v)
 {
+	struct net *net = (struct net *)seq->private;
+
 	snmp6_seq_show_item(seq, (void **)ipv6_statistics, snmp6_ipstats_list);
 	snmp6_seq_show_item(seq, (void **)icmpv6_statistics, snmp6_icmp6_list);
 	snmp6_seq_show_icmpv6msg(seq, (void **)icmpv6msg_statistics);
@@ -185,7 +187,7 @@ static int snmp6_seq_show(struct seq_file *seq, void *v)
 
 static int snmp6_seq_open(struct inode *inode, struct file *file)
 {
-	return single_open(file, snmp6_seq_show, NULL);
+	return single_open_net(inode, file, snmp6_seq_show);
 }
 
 static const struct file_operations snmp6_seq_fops = {
@@ -193,7 +195,7 @@ static const struct file_operations snmp6_seq_fops = {
 	.open	 = snmp6_seq_open,
 	.read	 = seq_read,
 	.llseek	 = seq_lseek,
-	.release = single_release,
+	.release = single_release_net,
 };
 
 static int snmp6_dev_seq_show(struct seq_file *seq, void *v)
-- 
1.5.3.rc5

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net-next 6/9] netns: allow per device ipv6 snmp statistics in non-initial namespace
       [not found] ` <1222942394.6327.5.camel-aPCOdVxUTlgvJsYlp49lxw@public.gmane.org>
                     ` (4 preceding siblings ...)
  2008-10-02 10:14   ` [PATCH net-next 5/9] netns: register global ipv6 mibs statistics in each namespace Denis V. Lunev
@ 2008-10-02 10:14   ` Denis V. Lunev
  2008-10-02 10:14   ` [PATCH net-next 7/9] netns: add stab functions for per/namespace mibs allocation Denis V. Lunev
  2008-10-02 10:14   ` [PATCH net-next 9/9] netns: make uplitev6 mib per/namespace Denis V. Lunev
  7 siblings, 0 replies; 11+ messages in thread
From: Denis V. Lunev @ 2008-10-02 10:14 UTC (permalink / raw)
  To: yoshfuji-VfPWfsRibaP+Ru+s062T9g
  Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
	containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
	den-GEFAQzZX7r8dnm+yROfE0A, dlezcano-NmTC/0ZBporQT0dZR+AlfA,
	xemul-GEFAQzZX7r8dnm+yROfE0A, benjamin.thery-6ktuUTfB/bM

Signed-off-by: Denis V. Lunev <den-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
---
 net/ipv6/proc.c |    3 ---
 1 files changed, 0 insertions(+), 3 deletions(-)

diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c
index c38c9e5..23e567f 100644
--- a/net/ipv6/proc.c
+++ b/net/ipv6/proc.c
@@ -231,9 +231,6 @@ int snmp6_register_dev(struct inet6_dev *idev)
 		return -EINVAL;
 
 	net = dev_net(idev->dev);
-	if (!net_eq(net, &init_net))
-		return 0;
-
 	if (!net->mib.proc_net_devsnmp6)
 		return -ENOENT;
 
-- 
1.5.3.rc5

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net-next 7/9] netns: add stab functions for per/namespace mibs allocation
       [not found] ` <1222942394.6327.5.camel-aPCOdVxUTlgvJsYlp49lxw@public.gmane.org>
                     ` (5 preceding siblings ...)
  2008-10-02 10:14   ` [PATCH net-next 6/9] netns: allow per device ipv6 snmp statistics in non-initial namespace Denis V. Lunev
@ 2008-10-02 10:14   ` Denis V. Lunev
  2008-10-02 10:14   ` [PATCH net-next 9/9] netns: make uplitev6 mib per/namespace Denis V. Lunev
  7 siblings, 0 replies; 11+ messages in thread
From: Denis V. Lunev @ 2008-10-02 10:14 UTC (permalink / raw)
  To: yoshfuji-VfPWfsRibaP+Ru+s062T9g
  Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
	containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
	den-GEFAQzZX7r8dnm+yROfE0A, dlezcano-NmTC/0ZBporQT0dZR+AlfA,
	xemul-GEFAQzZX7r8dnm+yROfE0A, benjamin.thery-6ktuUTfB/bM

The content of init_ipv6_mibs/cleanup_ipv6_mibs will be moved to new
calls one by one next.

Signed-off-by: Denis V. Lunev <den-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
---
 net/ipv6/af_inet6.c |   18 ++++++++++++++++--
 1 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
index 95055f8..46d4e62 100644
--- a/net/ipv6/af_inet6.c
+++ b/net/ipv6/af_inet6.c
@@ -834,6 +834,15 @@ static void cleanup_ipv6_mibs(void)
 	snmp_mib_free((void **)udplite_stats_in6);
 }
 
+static int __net_init ipv6_init_mibs(struct net *net)
+{
+	return 0;
+}
+
+static void __net_exit ipv6_cleanup_mibs(struct net *net)
+{
+}
+
 static int inet6_net_init(struct net *net)
 {
 	int err = 0;
@@ -849,6 +858,9 @@ static int inet6_net_init(struct net *net)
 	net->ipv6.sysctl.ip6_rt_min_advmss = IPV6_MIN_MTU - 20 - 40;
 	net->ipv6.sysctl.icmpv6_time = 1*HZ;
 
+	err = ipv6_init_mibs(net);
+	if (err)
+		return err;
 #ifdef CONFIG_PROC_FS
 	err = udp6_proc_init(net);
 	if (err)
@@ -859,7 +871,6 @@ static int inet6_net_init(struct net *net)
 	err = ac6_proc_init(net);
 	if (err)
 		goto proc_ac6_fail;
-out:
 #endif
 	return err;
 
@@ -868,7 +879,9 @@ proc_ac6_fail:
 	tcp6_proc_exit(net);
 proc_tcp6_fail:
 	udp6_proc_exit(net);
-	goto out;
+out:
+	ipv6_cleanup_mibs(net);
+	return err;
 #endif
 }
 
@@ -879,6 +892,7 @@ static void inet6_net_exit(struct net *net)
 	tcp6_proc_exit(net);
 	ac6_proc_exit(net);
 #endif
+	ipv6_cleanup_mibs(net);
 }
 
 static struct pernet_operations inet6_net_ops = {
-- 
1.5.3.rc5

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net-next 8/9] netns: make udpv6 mib per/namespace
  2008-10-02 10:13 [PATCH net-next 0/9] ipv6: making UDP mibs per/namespace Denis V. Lunev
       [not found] ` <1222942394.6327.5.camel-aPCOdVxUTlgvJsYlp49lxw@public.gmane.org>
@ 2008-10-02 10:14 ` Denis V. Lunev
  2008-10-07 22:00 ` [PATCH net-next 0/9] ipv6: making UDP mibs per/namespace David Miller
  2 siblings, 0 replies; 11+ messages in thread
From: Denis V. Lunev @ 2008-10-02 10:14 UTC (permalink / raw)
  To: yoshfuji; +Cc: netdev, containers, den, benjamin.thery, dlezcano, xemul

Signed-off-by: Denis V. Lunev <den@openvz.org>
---
 include/net/netns/mib.h |    1 +
 include/net/udp.h       |   12 ++++++------
 net/ipv4/udp.c          |    3 ---
 net/ipv6/af_inet6.c     |    9 ++++-----
 net/ipv6/proc.c         |    3 ++-
 5 files changed, 13 insertions(+), 15 deletions(-)

diff --git a/include/net/netns/mib.h b/include/net/netns/mib.h
index ffcef5d..ba622b2 100644
--- a/include/net/netns/mib.h
+++ b/include/net/netns/mib.h
@@ -14,6 +14,7 @@ struct netns_mib {
 
 #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
 	struct proc_dir_entry *proc_net_devsnmp6;
+	DEFINE_SNMP_STAT(struct udp_mib, udp_stats_in6);
 #endif
 };
 
diff --git a/include/net/udp.h b/include/net/udp.h
index addcdc6..e2a5de9 100644
--- a/include/net/udp.h
+++ b/include/net/udp.h
@@ -148,8 +148,6 @@ extern int 	udp_lib_setsockopt(struct sock *sk, int level, int optname,
 				   char __user *optval, int optlen,
 				   int (*push_pending_frames)(struct sock *));
 
-DECLARE_SNMP_STAT(struct udp_mib, udp_stats_in6);
-
 /* UDP-Lite does not have a standardized MIB yet, so we inherit from UDP */
 DECLARE_SNMP_STAT(struct udp_mib, udplite_stats_in6);
 
@@ -163,12 +161,14 @@ DECLARE_SNMP_STAT(struct udp_mib, udplite_stats_in6);
 	if (is_udplite) SNMP_INC_STATS_BH((net)->mib.udplite_statistics, field);         \
 	else		SNMP_INC_STATS_BH((net)->mib.udp_statistics, field);    }  while(0)
 
-#define UDP6_INC_STATS_BH(net, field, is_udplite) 	    do { (void)net;  \
+#define UDP6_INC_STATS_BH(net, field, is_udplite) 	    do { \
 	if (is_udplite) SNMP_INC_STATS_BH(udplite_stats_in6, field);         \
-	else		SNMP_INC_STATS_BH(udp_stats_in6, field);    } while(0)
-#define UDP6_INC_STATS_USER(net, field, is_udplite)	    do { (void)net;    \
+	else		SNMP_INC_STATS_BH((net)->mib.udp_stats_in6, field);  \
+} while(0)
+#define UDP6_INC_STATS_USER(net, field, is_udplite)	    do { \
 	if (is_udplite) SNMP_INC_STATS_USER(udplite_stats_in6, field);         \
-	else		SNMP_INC_STATS_USER(udp_stats_in6, field);    } while(0)
+	else		SNMP_INC_STATS_USER((net)->mib.udp_stats_in6, field);  \
+} while(0)
 
 #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
 #define UDPX_INC_STATS_BH(sk, field) \
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index 8e42fbb..4903420 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -108,9 +108,6 @@
  *	Snmp MIB for the UDP layer
  */
 
-DEFINE_SNMP_STAT(struct udp_mib, udp_stats_in6) __read_mostly;
-EXPORT_SYMBOL(udp_stats_in6);
-
 struct hlist_head udp_hash[UDP_HTABLE_SIZE];
 DEFINE_RWLOCK(udp_hash_lock);
 
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
index 46d4e62..f2933b2 100644
--- a/net/ipv6/af_inet6.c
+++ b/net/ipv6/af_inet6.c
@@ -805,16 +805,12 @@ static int __init init_ipv6_mibs(void)
 	if (snmp_mib_init((void **)icmpv6msg_statistics,
 			  sizeof(struct icmpv6msg_mib)) < 0)
 		goto err_icmpmsg_mib;
-	if (snmp_mib_init((void **)udp_stats_in6, sizeof (struct udp_mib)) < 0)
-		goto err_udp_mib;
 	if (snmp_mib_init((void **)udplite_stats_in6,
 			  sizeof (struct udp_mib)) < 0)
 		goto err_udplite_mib;
 	return 0;
 
 err_udplite_mib:
-	snmp_mib_free((void **)udp_stats_in6);
-err_udp_mib:
 	snmp_mib_free((void **)icmpv6msg_statistics);
 err_icmpmsg_mib:
 	snmp_mib_free((void **)icmpv6_statistics);
@@ -830,17 +826,20 @@ static void cleanup_ipv6_mibs(void)
 	snmp_mib_free((void **)ipv6_statistics);
 	snmp_mib_free((void **)icmpv6_statistics);
 	snmp_mib_free((void **)icmpv6msg_statistics);
-	snmp_mib_free((void **)udp_stats_in6);
 	snmp_mib_free((void **)udplite_stats_in6);
 }
 
 static int __net_init ipv6_init_mibs(struct net *net)
 {
+	if (snmp_mib_init((void **)net->mib.udp_stats_in6,
+			  sizeof (struct udp_mib)) < 0)
+		return -ENOMEM;
 	return 0;
 }
 
 static void __net_exit ipv6_cleanup_mibs(struct net *net)
 {
+	snmp_mib_free((void **)net->mib.udp_stats_in6);
 }
 
 static int inet6_net_init(struct net *net)
diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c
index 23e567f..3eaf20b 100644
--- a/net/ipv6/proc.c
+++ b/net/ipv6/proc.c
@@ -180,7 +180,8 @@ static int snmp6_seq_show(struct seq_file *seq, void *v)
 	snmp6_seq_show_item(seq, (void **)ipv6_statistics, snmp6_ipstats_list);
 	snmp6_seq_show_item(seq, (void **)icmpv6_statistics, snmp6_icmp6_list);
 	snmp6_seq_show_icmpv6msg(seq, (void **)icmpv6msg_statistics);
-	snmp6_seq_show_item(seq, (void **)udp_stats_in6, snmp6_udp6_list);
+	snmp6_seq_show_item(seq, (void **)net->mib.udp_stats_in6,
+			    snmp6_udp6_list);
 	snmp6_seq_show_item(seq, (void **)udplite_stats_in6, snmp6_udplite6_list);
 	return 0;
 }
-- 
1.5.3.rc5


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net-next 9/9] netns: make uplitev6 mib per/namespace
       [not found] ` <1222942394.6327.5.camel-aPCOdVxUTlgvJsYlp49lxw@public.gmane.org>
                     ` (6 preceding siblings ...)
  2008-10-02 10:14   ` [PATCH net-next 7/9] netns: add stab functions for per/namespace mibs allocation Denis V. Lunev
@ 2008-10-02 10:14   ` Denis V. Lunev
  7 siblings, 0 replies; 11+ messages in thread
From: Denis V. Lunev @ 2008-10-02 10:14 UTC (permalink / raw)
  To: yoshfuji-VfPWfsRibaP+Ru+s062T9g
  Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
	containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
	den-GEFAQzZX7r8dnm+yROfE0A, dlezcano-NmTC/0ZBporQT0dZR+AlfA,
	xemul-GEFAQzZX7r8dnm+yROfE0A, benjamin.thery-6ktuUTfB/bM

Signed-off-by: Denis V. Lunev <den-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
---
 include/net/netns/mib.h |    1 +
 include/net/udp.h       |   11 ++++-------
 net/ipv6/af_inet6.c     |   14 ++++++++------
 net/ipv6/proc.c         |    3 ++-
 net/ipv6/udplite.c      |    2 --
 5 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/include/net/netns/mib.h b/include/net/netns/mib.h
index ba622b2..4e58f05 100644
--- a/include/net/netns/mib.h
+++ b/include/net/netns/mib.h
@@ -15,6 +15,7 @@ struct netns_mib {
 #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
 	struct proc_dir_entry *proc_net_devsnmp6;
 	DEFINE_SNMP_STAT(struct udp_mib, udp_stats_in6);
+	DEFINE_SNMP_STAT(struct udp_mib, udplite_stats_in6);
 #endif
 };
 
diff --git a/include/net/udp.h b/include/net/udp.h
index e2a5de9..bd0d21a 100644
--- a/include/net/udp.h
+++ b/include/net/udp.h
@@ -148,9 +148,6 @@ extern int 	udp_lib_setsockopt(struct sock *sk, int level, int optname,
 				   char __user *optval, int optlen,
 				   int (*push_pending_frames)(struct sock *));
 
-/* UDP-Lite does not have a standardized MIB yet, so we inherit from UDP */
-DECLARE_SNMP_STAT(struct udp_mib, udplite_stats_in6);
-
 /*
  * 	SNMP statistics for UDP and UDP-Lite
  */
@@ -162,12 +159,12 @@ DECLARE_SNMP_STAT(struct udp_mib, udplite_stats_in6);
 	else		SNMP_INC_STATS_BH((net)->mib.udp_statistics, field);    }  while(0)
 
 #define UDP6_INC_STATS_BH(net, field, is_udplite) 	    do { \
-	if (is_udplite) SNMP_INC_STATS_BH(udplite_stats_in6, field);         \
+	if (is_udplite) SNMP_INC_STATS_BH((net)->mib.udplite_stats_in6, field);\
 	else		SNMP_INC_STATS_BH((net)->mib.udp_stats_in6, field);  \
 } while(0)
-#define UDP6_INC_STATS_USER(net, field, is_udplite)	    do { \
-	if (is_udplite) SNMP_INC_STATS_USER(udplite_stats_in6, field);         \
-	else		SNMP_INC_STATS_USER((net)->mib.udp_stats_in6, field);  \
+#define UDP6_INC_STATS_USER(net, field, __lite)		    do { \
+	if (__lite) SNMP_INC_STATS_USER((net)->mib.udplite_stats_in6, field);  \
+	else	    SNMP_INC_STATS_USER((net)->mib.udp_stats_in6, field);      \
 } while(0)
 
 #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
index f2933b2..7da9146 100644
--- a/net/ipv6/af_inet6.c
+++ b/net/ipv6/af_inet6.c
@@ -805,13 +805,8 @@ static int __init init_ipv6_mibs(void)
 	if (snmp_mib_init((void **)icmpv6msg_statistics,
 			  sizeof(struct icmpv6msg_mib)) < 0)
 		goto err_icmpmsg_mib;
-	if (snmp_mib_init((void **)udplite_stats_in6,
-			  sizeof (struct udp_mib)) < 0)
-		goto err_udplite_mib;
 	return 0;
 
-err_udplite_mib:
-	snmp_mib_free((void **)icmpv6msg_statistics);
 err_icmpmsg_mib:
 	snmp_mib_free((void **)icmpv6_statistics);
 err_icmp_mib:
@@ -826,7 +821,6 @@ static void cleanup_ipv6_mibs(void)
 	snmp_mib_free((void **)ipv6_statistics);
 	snmp_mib_free((void **)icmpv6_statistics);
 	snmp_mib_free((void **)icmpv6msg_statistics);
-	snmp_mib_free((void **)udplite_stats_in6);
 }
 
 static int __net_init ipv6_init_mibs(struct net *net)
@@ -834,12 +828,20 @@ static int __net_init ipv6_init_mibs(struct net *net)
 	if (snmp_mib_init((void **)net->mib.udp_stats_in6,
 			  sizeof (struct udp_mib)) < 0)
 		return -ENOMEM;
+	if (snmp_mib_init((void **)net->mib.udplite_stats_in6,
+			  sizeof (struct udp_mib)) < 0)
+		goto err_udplite_mib;
 	return 0;
+
+err_udplite_mib:
+	snmp_mib_free((void **)net->mib.udp_stats_in6);
+	return -ENOMEM;
 }
 
 static void __net_exit ipv6_cleanup_mibs(struct net *net)
 {
 	snmp_mib_free((void **)net->mib.udp_stats_in6);
+	snmp_mib_free((void **)net->mib.udplite_stats_in6);
 }
 
 static int inet6_net_init(struct net *net)
diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c
index 3eaf20b..c78cf75 100644
--- a/net/ipv6/proc.c
+++ b/net/ipv6/proc.c
@@ -182,7 +182,8 @@ static int snmp6_seq_show(struct seq_file *seq, void *v)
 	snmp6_seq_show_icmpv6msg(seq, (void **)icmpv6msg_statistics);
 	snmp6_seq_show_item(seq, (void **)net->mib.udp_stats_in6,
 			    snmp6_udp6_list);
-	snmp6_seq_show_item(seq, (void **)udplite_stats_in6, snmp6_udplite6_list);
+	snmp6_seq_show_item(seq, (void **)net->mib.udplite_stats_in6,
+			    snmp6_udplite6_list);
 	return 0;
 }
 
diff --git a/net/ipv6/udplite.c b/net/ipv6/udplite.c
index f6cdcb3..3cd1a1a 100644
--- a/net/ipv6/udplite.c
+++ b/net/ipv6/udplite.c
@@ -13,8 +13,6 @@
  */
 #include "udp_impl.h"
 
-DEFINE_SNMP_STAT(struct udp_mib, udplite_stats_in6) __read_mostly;
-
 static int udplitev6_rcv(struct sk_buff *skb)
 {
 	return __udp6_lib_rcv(skb, udplite_hash, IPPROTO_UDPLITE);
-- 
1.5.3.rc5

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH net-next 0/9] ipv6: making UDP mibs per/namespace
  2008-10-02 10:13 [PATCH net-next 0/9] ipv6: making UDP mibs per/namespace Denis V. Lunev
       [not found] ` <1222942394.6327.5.camel-aPCOdVxUTlgvJsYlp49lxw@public.gmane.org>
  2008-10-02 10:14 ` [PATCH net-next 8/9] netns: make udpv6 " Denis V. Lunev
@ 2008-10-07 22:00 ` David Miller
  2 siblings, 0 replies; 11+ messages in thread
From: David Miller @ 2008-10-07 22:00 UTC (permalink / raw)
  To: den; +Cc: yoshfuji, netdev, containers, benjamin.thery, dlezcano, xemul

From: "Denis V. Lunev" <den@openvz.org>
Date: Thu, 02 Oct 2008 14:13:14 +0400

> This patch series provides a basic infrastructure to make snmp6
> statistics per/namespace and actually virtualize udp6/udplite6 mibs.
> 
> This set follows approach used by Pavel Emelyanov in IPv4 code.
> IP6/icmp6 statistics is also ready and will follow.

Applied and pushed out to net-next-2.6, thanks!

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2008-10-07 22:00 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-10-02 10:13 [PATCH net-next 0/9] ipv6: making UDP mibs per/namespace Denis V. Lunev
     [not found] ` <1222942394.6327.5.camel-aPCOdVxUTlgvJsYlp49lxw@public.gmane.org>
2008-10-02 10:14   ` [PATCH net-next 1/9] netns: move /proc/net/dev_snmp6 to struct net Denis V. Lunev
2008-10-02 10:14   ` [PATCH net-next 2/9] netns: register /proc/net/dev_snmp6/* in each ns Denis V. Lunev
2008-10-02 10:14   ` [PATCH net-next 3/9] ipv6: consolidate ipv6 sock_stat code at the beginning of net/ipv6/proc.c Denis V. Lunev
2008-10-02 10:14   ` [PATCH net-next 4/9] ipv6: separate seq_ops for global & per/device ipv6 statistics Denis V. Lunev
2008-10-02 10:14   ` [PATCH net-next 5/9] netns: register global ipv6 mibs statistics in each namespace Denis V. Lunev
2008-10-02 10:14   ` [PATCH net-next 6/9] netns: allow per device ipv6 snmp statistics in non-initial namespace Denis V. Lunev
2008-10-02 10:14   ` [PATCH net-next 7/9] netns: add stab functions for per/namespace mibs allocation Denis V. Lunev
2008-10-02 10:14   ` [PATCH net-next 9/9] netns: make uplitev6 mib per/namespace Denis V. Lunev
2008-10-02 10:14 ` [PATCH net-next 8/9] netns: make udpv6 " Denis V. Lunev
2008-10-07 22:00 ` [PATCH net-next 0/9] ipv6: making UDP mibs per/namespace David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).