⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 net_namespace.h

📁 linux 内核源代码
💻 H
字号:
/* * Operations on the network namespace */#ifndef __NET_NET_NAMESPACE_H#define __NET_NET_NAMESPACE_H#include <asm/atomic.h>#include <linux/workqueue.h>#include <linux/list.h>struct proc_dir_entry;struct net_device;struct net {	atomic_t		count;		/* To decided when the network						 *  namespace should be freed.						 */	atomic_t		use_count;	/* To track references we						 * destroy on demand						 */	struct list_head	list;		/* list of network namespaces */	struct work_struct	work;		/* work struct for freeing */	struct proc_dir_entry 	*proc_net;	struct proc_dir_entry 	*proc_net_stat;	struct proc_dir_entry 	*proc_net_root;	struct net_device       *loopback_dev;          /* The loopback */	struct list_head 	dev_base_head;	struct hlist_head 	*dev_name_head;	struct hlist_head	*dev_index_head;};#ifdef CONFIG_NET/* Init's network namespace */extern struct net init_net;#define INIT_NET_NS(net_ns) .net_ns = &init_net,#else#define INIT_NET_NS(net_ns)#endifextern struct list_head net_namespace_list;#ifdef CONFIG_NETextern struct net *copy_net_ns(unsigned long flags, struct net *net_ns);#elsestatic 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#ifdef CONFIG_NET_NSextern void __put_net(struct net *net);static inline struct net *get_net(struct net *net){	atomic_inc(&net->count);	return net;}static inline struct net *maybe_get_net(struct net *net){	/* Used when we know struct net exists but we	 * aren't guaranteed a previous reference count	 * exists.  If the reference count is zero this	 * function fails and returns NULL.	 */	if (!atomic_inc_not_zero(&net->count))		net = NULL;	return net;}static inline void put_net(struct net *net){	if (atomic_dec_and_test(&net->count))		__put_net(net);}static inline struct net *hold_net(struct net *net){	atomic_inc(&net->use_count);	return net;}static inline void release_net(struct net *net){	atomic_dec(&net->use_count);}#elsestatic inline struct net *get_net(struct net *net){	return net;}static inline void put_net(struct net *net){}static inline struct net *hold_net(struct net *net){	return net;}static inline void release_net(struct net *net){}static inline struct net *maybe_get_net(struct net *net){	return net;}#endif#define for_each_net(VAR)				\	list_for_each_entry(VAR, &net_namespace_list, list)#ifdef CONFIG_NET_NS#define __net_init#define __net_exit#define __net_initdata#else#define __net_init	__init#define __net_exit	__exit_refok#define __net_initdata	__initdata#endifstruct pernet_operations {	struct list_head list;	int (*init)(struct net *net);	void (*exit)(struct net *net);};extern int register_pernet_subsys(struct pernet_operations *);extern void unregister_pernet_subsys(struct pernet_operations *);extern int register_pernet_device(struct pernet_operations *);extern void unregister_pernet_device(struct pernet_operations *);#endif /* __NET_NET_NAMESPACE_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -