Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 13b6f576 authored by Eric W. Biederman's avatar Eric W. Biederman
Browse files

ns proc: Add support for the network namespace.



Implementing file descriptors for the network namespace
is simple and straight forward.

Acked-by: default avatarDavid S. Miller <davem@davemloft.net>
Acked-by: default avatarDaniel Lezcano <daniel.lezcano@free.fr>
Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
parent 0663c6f8
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -16,6 +16,9 @@




static const struct proc_ns_operations *ns_entries[] = {
static const struct proc_ns_operations *ns_entries[] = {
#ifdef CONFIG_NET_NS
	&netns_operations,
#endif
};
};


static const struct file_operations ns_file_operations = {
static const struct file_operations ns_file_operations = {
+1 −0
Original line number Original line Diff line number Diff line
@@ -265,6 +265,7 @@ struct proc_ns_operations {
	void (*put)(void *ns);
	void (*put)(void *ns);
	int (*install)(struct nsproxy *nsproxy, void *ns);
	int (*install)(struct nsproxy *nsproxy, void *ns);
};
};
extern const struct proc_ns_operations netns_operations;


union proc_op {
union proc_op {
	int (*proc_get_link)(struct inode *, struct path *);
	int (*proc_get_link)(struct inode *, struct path *);
+31 −0
Original line number Original line Diff line number Diff line
@@ -573,3 +573,34 @@ void unregister_pernet_device(struct pernet_operations *ops)
	mutex_unlock(&net_mutex);
	mutex_unlock(&net_mutex);
}
}
EXPORT_SYMBOL_GPL(unregister_pernet_device);
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