* [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).