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>
This commit is contained in:
parent
0663c6f8fa
commit
13b6f57623
3 changed files with 35 additions and 0 deletions
|
@ -16,6 +16,9 @@
|
|||
|
||||
|
||||
static const struct proc_ns_operations *ns_entries[] = {
|
||||
#ifdef CONFIG_NET_NS
|
||||
&netns_operations,
|
||||
#endif
|
||||
};
|
||||
|
||||
static const struct file_operations ns_file_operations = {
|
||||
|
|
|
@ -265,6 +265,7 @@ struct proc_ns_operations {
|
|||
void (*put)(void *ns);
|
||||
int (*install)(struct nsproxy *nsproxy, void *ns);
|
||||
};
|
||||
extern const struct proc_ns_operations netns_operations;
|
||||
|
||||
union proc_op {
|
||||
int (*proc_get_link)(struct inode *, struct path *);
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue