diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2007-09-12 06:01:34 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-10 19:49:06 -0400 |
commit | 457c4cbc5a3dde259d2a1f15d5f9785290397267 (patch) | |
tree | a2ceee88780cbce27433b9a4434b3e9251efd81a /net/core/pktgen.c | |
parent | 07feaebfcc10cd35e745c7073667935246494bee (diff) |
[NET]: Make /proc/net per network namespace
This patch makes /proc/net per network namespace. It modifies the global
variables proc_net and proc_net_stat to be per network namespace.
The proc_net file helpers are modified to take a network namespace argument,
and all of their callers are fixed to pass &init_net for that argument.
This ensures that all of the /proc/net files are only visible and
usable in the initial network namespace until the code behind them
has been updated to be handle multiple network namespaces.
Making /proc/net per namespace is necessary as at least some files
in /proc/net depend upon the set of network devices which is per
network namespace, and even more files in /proc/net have contents
that are relevant to a single network namespace.
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/pktgen.c')
-rw-r--r-- | net/core/pktgen.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 84c0edeedf6d..33d7247fb19d 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c | |||
@@ -152,6 +152,7 @@ | |||
152 | #include <linux/wait.h> | 152 | #include <linux/wait.h> |
153 | #include <linux/etherdevice.h> | 153 | #include <linux/etherdevice.h> |
154 | #include <linux/kthread.h> | 154 | #include <linux/kthread.h> |
155 | #include <net/net_namespace.h> | ||
155 | #include <net/checksum.h> | 156 | #include <net/checksum.h> |
156 | #include <net/ipv6.h> | 157 | #include <net/ipv6.h> |
157 | #include <net/addrconf.h> | 158 | #include <net/addrconf.h> |
@@ -3808,7 +3809,7 @@ static int __init pg_init(void) | |||
3808 | 3809 | ||
3809 | printk(KERN_INFO "%s", version); | 3810 | printk(KERN_INFO "%s", version); |
3810 | 3811 | ||
3811 | pg_proc_dir = proc_mkdir(PG_PROC_DIR, proc_net); | 3812 | pg_proc_dir = proc_mkdir(PG_PROC_DIR, init_net.proc_net); |
3812 | if (!pg_proc_dir) | 3813 | if (!pg_proc_dir) |
3813 | return -ENODEV; | 3814 | return -ENODEV; |
3814 | pg_proc_dir->owner = THIS_MODULE; | 3815 | pg_proc_dir->owner = THIS_MODULE; |
@@ -3817,7 +3818,7 @@ static int __init pg_init(void) | |||
3817 | if (pe == NULL) { | 3818 | if (pe == NULL) { |
3818 | printk(KERN_ERR "pktgen: ERROR: cannot create %s " | 3819 | printk(KERN_ERR "pktgen: ERROR: cannot create %s " |
3819 | "procfs entry.\n", PGCTRL); | 3820 | "procfs entry.\n", PGCTRL); |
3820 | proc_net_remove(PG_PROC_DIR); | 3821 | proc_net_remove(&init_net, PG_PROC_DIR); |
3821 | return -EINVAL; | 3822 | return -EINVAL; |
3822 | } | 3823 | } |
3823 | 3824 | ||
@@ -3841,7 +3842,7 @@ static int __init pg_init(void) | |||
3841 | "all threads\n"); | 3842 | "all threads\n"); |
3842 | unregister_netdevice_notifier(&pktgen_notifier_block); | 3843 | unregister_netdevice_notifier(&pktgen_notifier_block); |
3843 | remove_proc_entry(PGCTRL, pg_proc_dir); | 3844 | remove_proc_entry(PGCTRL, pg_proc_dir); |
3844 | proc_net_remove(PG_PROC_DIR); | 3845 | proc_net_remove(&init_net, PG_PROC_DIR); |
3845 | return -ENODEV; | 3846 | return -ENODEV; |
3846 | } | 3847 | } |
3847 | 3848 | ||
@@ -3868,7 +3869,7 @@ static void __exit pg_cleanup(void) | |||
3868 | 3869 | ||
3869 | /* Clean up proc file system */ | 3870 | /* Clean up proc file system */ |
3870 | remove_proc_entry(PGCTRL, pg_proc_dir); | 3871 | remove_proc_entry(PGCTRL, pg_proc_dir); |
3871 | proc_net_remove(PG_PROC_DIR); | 3872 | proc_net_remove(&init_net, PG_PROC_DIR); |
3872 | } | 3873 | } |
3873 | 3874 | ||
3874 | module_init(pg_init); | 3875 | module_init(pg_init); |