diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2010-03-07 18:14:23 -0800 |
---|---|---|
committer | Eric W. Biederman <ebiederm@xmission.com> | 2011-05-10 14:34:26 -0700 |
commit | 13b6f57623bc485e116344fe91fbcb29f149242b (patch) | |
tree | f2d43576e248ac61b967734a6ccd313b971fb430 /net/core/net_namespace.c | |
parent | 0663c6f8fa37d777ede74ff991a0cba3a42fcbd7 (diff) |
ns proc: Add support for the network namespace.
Implementing file descriptors for the network namespace
is simple and straight forward.
Acked-by: David S. Miller <davem@davemloft.net>
Acked-by: Daniel Lezcano <daniel.lezcano@free.fr>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Diffstat (limited to 'net/core/net_namespace.c')
-rw-r--r-- | net/core/net_namespace.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index 3f860261c5e..bf7707e09a8 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -573,3 +573,34 @@ void unregister_pernet_device(struct pernet_operations *ops) mutex_unlock(&net_mutex); } EXPORT_SYMBOL_GPL(unregister_pernet_device); + +#ifdef CONFIG_NET_NS +static void *netns_get(struct task_struct *task) +{ + struct net *net; + rcu_read_lock(); + net = get_net(task->nsproxy->net_ns); + rcu_read_unlock(); + return net; +} + +static void netns_put(void *ns) +{ + put_net(ns); +} + +static int netns_install(struct nsproxy *nsproxy, void *ns) +{ + put_net(nsproxy->net_ns); + nsproxy->net_ns = get_net(ns); + return 0; +} + +const struct proc_ns_operations netns_operations = { + .name = "net", + .type = CLONE_NEWNET, + .get = netns_get, + .put = netns_put, + .install = netns_install, +}; +#endif |