diff options
Diffstat (limited to 'include/net/net_namespace.h')
-rw-r--r-- | include/net/net_namespace.h | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h index ded434b032a4..a1202841aadd 100644 --- a/include/net/net_namespace.h +++ b/include/net/net_namespace.h | |||
@@ -26,6 +26,7 @@ struct net_device; | |||
26 | struct sock; | 26 | struct sock; |
27 | struct ctl_table_header; | 27 | struct ctl_table_header; |
28 | struct net_generic; | 28 | struct net_generic; |
29 | struct sock; | ||
29 | 30 | ||
30 | struct net { | 31 | struct net { |
31 | atomic_t count; /* To decided when the network | 32 | atomic_t count; /* To decided when the network |
@@ -57,6 +58,7 @@ struct net { | |||
57 | spinlock_t rules_mod_lock; | 58 | spinlock_t rules_mod_lock; |
58 | 59 | ||
59 | struct sock *rtnl; /* rtnetlink socket */ | 60 | struct sock *rtnl; /* rtnetlink socket */ |
61 | struct sock *genl_sock; | ||
60 | 62 | ||
61 | struct netns_core core; | 63 | struct netns_core core; |
62 | struct netns_mib mib; | 64 | struct netns_mib mib; |
@@ -78,6 +80,9 @@ struct net { | |||
78 | #ifdef CONFIG_XFRM | 80 | #ifdef CONFIG_XFRM |
79 | struct netns_xfrm xfrm; | 81 | struct netns_xfrm xfrm; |
80 | #endif | 82 | #endif |
83 | #ifdef CONFIG_WIRELESS_EXT | ||
84 | struct sk_buff_head wext_nlevents; | ||
85 | #endif | ||
81 | struct net_generic *gen; | 86 | struct net_generic *gen; |
82 | }; | 87 | }; |
83 | 88 | ||
@@ -106,6 +111,8 @@ static inline struct net *copy_net_ns(unsigned long flags, struct net *net_ns) | |||
106 | 111 | ||
107 | extern struct list_head net_namespace_list; | 112 | extern struct list_head net_namespace_list; |
108 | 113 | ||
114 | extern struct net *get_net_ns_by_pid(pid_t pid); | ||
115 | |||
109 | #ifdef CONFIG_NET_NS | 116 | #ifdef CONFIG_NET_NS |
110 | extern void __put_net(struct net *net); | 117 | extern void __put_net(struct net *net); |
111 | 118 | ||
@@ -208,6 +215,9 @@ static inline struct net *read_pnet(struct net * const *pnet) | |||
208 | #define for_each_net(VAR) \ | 215 | #define for_each_net(VAR) \ |
209 | list_for_each_entry(VAR, &net_namespace_list, list) | 216 | list_for_each_entry(VAR, &net_namespace_list, list) |
210 | 217 | ||
218 | #define for_each_net_rcu(VAR) \ | ||
219 | list_for_each_entry_rcu(VAR, &net_namespace_list, list) | ||
220 | |||
211 | #ifdef CONFIG_NET_NS | 221 | #ifdef CONFIG_NET_NS |
212 | #define __net_init | 222 | #define __net_init |
213 | #define __net_exit | 223 | #define __net_exit |
@@ -229,13 +239,15 @@ struct pernet_operations { | |||
229 | * needs per network namespace operations use device pernet operations, | 239 | * needs per network namespace operations use device pernet operations, |
230 | * otherwise use pernet subsys operations. | 240 | * otherwise use pernet subsys operations. |
231 | * | 241 | * |
232 | * This is critically important. Most of the network code cleanup | 242 | * Network interfaces need to be removed from a dying netns _before_ |
233 | * runs with the assumption that dev_remove_pack has been called so no | 243 | * subsys notifiers can be called, as most of the network code cleanup |
234 | * new packets will arrive during and after the cleanup functions have | 244 | * (which is done from subsys notifiers) runs with the assumption that |
235 | * been called. dev_remove_pack is not per namespace so instead the | 245 | * dev_remove_pack has been called so no new packets will arrive during |
236 | * guarantee of no more packets arriving in a network namespace is | 246 | * and after the cleanup functions have been called. dev_remove_pack |
237 | * provided by ensuring that all network devices and all sockets have | 247 | * is not per namespace so instead the guarantee of no more packets |
238 | * left the network namespace before the cleanup methods are called. | 248 | * arriving in a network namespace is provided by ensuring that all |
249 | * network devices and all sockets have left the network namespace | ||
250 | * before the cleanup methods are called. | ||
239 | * | 251 | * |
240 | * For the longest time the ipv4 icmp code was registered as a pernet | 252 | * For the longest time the ipv4 icmp code was registered as a pernet |
241 | * device which caused kernel oops, and panics during network | 253 | * device which caused kernel oops, and panics during network |