| David Howells | 0bb80f2 | 2013-04-12 01:50:06 +0100 | [diff] [blame] | 1 | /* | 
 | 2 |  * procfs namespace bits | 
 | 3 |  */ | 
 | 4 | #ifndef _LINUX_PROC_NS_H | 
 | 5 | #define _LINUX_PROC_NS_H | 
 | 6 |  | 
 | 7 | struct pid_namespace; | 
 | 8 | struct nsproxy; | 
 | 9 |  | 
 | 10 | struct proc_ns_operations { | 
 | 11 | 	const char *name; | 
 | 12 | 	int type; | 
 | 13 | 	void *(*get)(struct task_struct *task); | 
 | 14 | 	void (*put)(void *ns); | 
 | 15 | 	int (*install)(struct nsproxy *nsproxy, void *ns); | 
 | 16 | 	unsigned int (*inum)(void *ns); | 
 | 17 | }; | 
 | 18 |  | 
 | 19 | struct proc_ns { | 
 | 20 | 	void *ns; | 
 | 21 | 	const struct proc_ns_operations *ns_ops; | 
 | 22 | }; | 
 | 23 |  | 
 | 24 | extern const struct proc_ns_operations netns_operations; | 
 | 25 | extern const struct proc_ns_operations utsns_operations; | 
 | 26 | extern const struct proc_ns_operations ipcns_operations; | 
 | 27 | extern const struct proc_ns_operations pidns_operations; | 
 | 28 | extern const struct proc_ns_operations userns_operations; | 
 | 29 | extern const struct proc_ns_operations mntns_operations; | 
 | 30 |  | 
 | 31 | /* | 
 | 32 |  * We always define these enumerators | 
 | 33 |  */ | 
 | 34 | enum { | 
 | 35 | 	PROC_ROOT_INO		= 1, | 
 | 36 | 	PROC_IPC_INIT_INO	= 0xEFFFFFFFU, | 
 | 37 | 	PROC_UTS_INIT_INO	= 0xEFFFFFFEU, | 
 | 38 | 	PROC_USER_INIT_INO	= 0xEFFFFFFDU, | 
 | 39 | 	PROC_PID_INIT_INO	= 0xEFFFFFFCU, | 
 | 40 | }; | 
 | 41 |  | 
 | 42 | #ifdef CONFIG_PROC_FS | 
 | 43 |  | 
 | 44 | extern int pid_ns_prepare_proc(struct pid_namespace *ns); | 
 | 45 | extern void pid_ns_release_proc(struct pid_namespace *ns); | 
 | 46 | extern struct file *proc_ns_fget(int fd); | 
 | 47 | extern struct proc_ns *get_proc_ns(struct inode *); | 
 | 48 | extern int proc_alloc_inum(unsigned int *pino); | 
 | 49 | extern void proc_free_inum(unsigned int inum); | 
 | 50 | extern bool proc_ns_inode(struct inode *inode); | 
 | 51 |  | 
 | 52 | #else /* CONFIG_PROC_FS */ | 
 | 53 |  | 
 | 54 | static inline int pid_ns_prepare_proc(struct pid_namespace *ns) { return 0; } | 
 | 55 | static inline void pid_ns_release_proc(struct pid_namespace *ns) {} | 
 | 56 |  | 
 | 57 | static inline struct file *proc_ns_fget(int fd) | 
 | 58 | { | 
 | 59 | 	return ERR_PTR(-EINVAL); | 
 | 60 | } | 
 | 61 |  | 
 | 62 | static inline struct proc_ns *get_proc_ns(struct inode *inode) { return NULL; } | 
 | 63 |  | 
 | 64 | static inline int proc_alloc_inum(unsigned int *inum) | 
 | 65 | { | 
 | 66 | 	*inum = 1; | 
 | 67 | 	return 0; | 
 | 68 | } | 
 | 69 | static inline void proc_free_inum(unsigned int inum) {} | 
 | 70 | static inline bool proc_ns_inode(struct inode *inode) { return false; } | 
 | 71 |  | 
 | 72 | #endif /* CONFIG_PROC_FS */ | 
 | 73 |  | 
 | 74 | #endif /* _LINUX_PROC_NS_H */ |