Skip to content

Commit

Permalink
ns proc: Add support for the network namespace.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Eric W. Biederman committed May 10, 2011
1 parent 0663c6f commit 13b6f57
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 0 deletions.
3 changes: 3 additions & 0 deletions fs/proc/namespaces.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {
Expand Down
1 change: 1 addition & 0 deletions include/linux/proc_fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 *);
Expand Down
31 changes: 31 additions & 0 deletions net/core/net_namespace.c
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 13b6f57

Please sign in to comment.