[NET]: Add network namespace clone & unshare support.
This patch allows you to create a new network namespace using sys_clone, or sys_unshare. As the network namespace is still experimental and under development clone and unshare support is only made available when CONFIG_NET_NS is selected at compile time. As this patch introduces network namespace support into code paths that exist when the CONFIG_NET is not selected there are a few additions made to net_namespace.h to allow a few more functions to be used when the networking stack is not compiled in. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

szülő
8b41d1887d
commit
9dd776b6d7
@@ -38,11 +38,23 @@ extern struct net init_net;
|
||||
|
||||
extern struct list_head net_namespace_list;
|
||||
|
||||
#ifdef CONFIG_NET
|
||||
extern struct net *copy_net_ns(unsigned long flags, struct net *net_ns);
|
||||
#else
|
||||
static inline struct net *copy_net_ns(unsigned long flags, struct net *net_ns)
|
||||
{
|
||||
/* There is nothing to copy so this is a noop */
|
||||
return net_ns;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern void __put_net(struct net *net);
|
||||
|
||||
static inline struct net *get_net(struct net *net)
|
||||
{
|
||||
#ifdef CONFIG_NET
|
||||
atomic_inc(&net->count);
|
||||
#endif
|
||||
return net;
|
||||
}
|
||||
|
||||
@@ -60,19 +72,25 @@ static inline struct net *maybe_get_net(struct net *net)
|
||||
|
||||
static inline void put_net(struct net *net)
|
||||
{
|
||||
#ifdef CONFIG_NET
|
||||
if (atomic_dec_and_test(&net->count))
|
||||
__put_net(net);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline struct net *hold_net(struct net *net)
|
||||
{
|
||||
#ifdef CONFIG_NET
|
||||
atomic_inc(&net->use_count);
|
||||
#endif
|
||||
return net;
|
||||
}
|
||||
|
||||
static inline void release_net(struct net *net)
|
||||
{
|
||||
#ifdef CONFIG_NET
|
||||
atomic_dec(&net->use_count);
|
||||
#endif
|
||||
}
|
||||
|
||||
extern void net_lock(void);
|
||||
|
Reference in New Issue
Block a user