diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-07-10 05:51:35 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-07-12 17:03:28 -0400 |
commit | 30ffee8480c13fbcf8ab6c28e31f79dfff683117 (patch) | |
tree | ca86e974221761b813811047286142804f906ee2 /net/core/net_namespace.c | |
parent | 134e63756d5f3d0f7604dfcca847b09d1b14fd66 (diff) |
net: move and export get_net_ns_by_pid
The function get_net_ns_by_pid(), to get a network
namespace from a pid_t, will be required in cfg80211
as well. Therefore, let's move it to net_namespace.c
and export it. We can't make it a static inline in
the !NETNS case because it needs to verify that the
given pid even exists (and return -ESRCH).
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/net_namespace.c')
-rw-r--r-- | net/core/net_namespace.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index 5cd0b22e649d..ddd2cd2b1775 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c | |||
@@ -7,6 +7,7 @@ | |||
7 | #include <linux/sched.h> | 7 | #include <linux/sched.h> |
8 | #include <linux/idr.h> | 8 | #include <linux/idr.h> |
9 | #include <linux/rculist.h> | 9 | #include <linux/rculist.h> |
10 | #include <linux/nsproxy.h> | ||
10 | #include <net/net_namespace.h> | 11 | #include <net/net_namespace.h> |
11 | #include <net/netns/generic.h> | 12 | #include <net/netns/generic.h> |
12 | 13 | ||
@@ -201,6 +202,26 @@ struct net *copy_net_ns(unsigned long flags, struct net *old_net) | |||
201 | } | 202 | } |
202 | #endif | 203 | #endif |
203 | 204 | ||
205 | struct net *get_net_ns_by_pid(pid_t pid) | ||
206 | { | ||
207 | struct task_struct *tsk; | ||
208 | struct net *net; | ||
209 | |||
210 | /* Lookup the network namespace */ | ||
211 | net = ERR_PTR(-ESRCH); | ||
212 | rcu_read_lock(); | ||
213 | tsk = find_task_by_vpid(pid); | ||
214 | if (tsk) { | ||
215 | struct nsproxy *nsproxy; | ||
216 | nsproxy = task_nsproxy(tsk); | ||
217 | if (nsproxy) | ||
218 | net = get_net(nsproxy->net_ns); | ||
219 | } | ||
220 | rcu_read_unlock(); | ||
221 | return net; | ||
222 | } | ||
223 | EXPORT_SYMBOL_GPL(get_net_ns_by_pid); | ||
224 | |||
204 | static int __init net_ns_init(void) | 225 | static int __init net_ns_init(void) |
205 | { | 226 | { |
206 | struct net_generic *ng; | 227 | struct net_generic *ng; |