1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 #ifndef __LINUX_NSFS_H 3 #define __LINUX_NSFS_H 4 5 #include <linux/ioctl.h> 6 #include <linux/types.h> 7 8 #define NSIO 0xb7 9 10 /* Returns a file descriptor that refers to an owning user namespace */ 11 #define NS_GET_USERNS _IO(NSIO, 0x1) 12 /* Returns a file descriptor that refers to a parent namespace */ 13 #define NS_GET_PARENT _IO(NSIO, 0x2) 14 /* Returns the type of namespace (CLONE_NEW* value) referred to by 15 file descriptor */ 16 #define NS_GET_NSTYPE _IO(NSIO, 0x3) 17 /* Get owner UID (in the caller's user namespace) for a user namespace */ 18 #define NS_GET_OWNER_UID _IO(NSIO, 0x4) 19 /* Translate pid from target pid namespace into the caller's pid namespace. */ 20 #define NS_GET_PID_FROM_PIDNS _IOR(NSIO, 0x6, int) 21 /* Return thread-group leader id of pid in the callers pid namespace. */ 22 #define NS_GET_TGID_FROM_PIDNS _IOR(NSIO, 0x7, int) 23 /* Translate pid from caller's pid namespace into a target pid namespace. */ 24 #define NS_GET_PID_IN_PIDNS _IOR(NSIO, 0x8, int) 25 /* Return thread-group leader id of pid in the target pid namespace. */ 26 #define NS_GET_TGID_IN_PIDNS _IOR(NSIO, 0x9, int) 27 28 struct mnt_ns_info { 29 __u32 size; 30 __u32 nr_mounts; 31 __u64 mnt_ns_id; 32 }; 33 34 #define MNT_NS_INFO_SIZE_VER0 16 /* size of first published struct */ 35 36 /* Get information about namespace. */ 37 #define NS_MNT_GET_INFO _IOR(NSIO, 10, struct mnt_ns_info) 38 /* Get next namespace. */ 39 #define NS_MNT_GET_NEXT _IOR(NSIO, 11, struct mnt_ns_info) 40 /* Get previous namespace. */ 41 #define NS_MNT_GET_PREV _IOR(NSIO, 12, struct mnt_ns_info) 42 43 /* Retrieve namespace identifiers. */ 44 #define NS_GET_MNTNS_ID _IOR(NSIO, 5, __u64) 45 #define NS_GET_ID _IOR(NSIO, 13, __u64) 46 47 enum init_ns_ino { 48 IPC_NS_INIT_INO = 0xEFFFFFFFU, 49 UTS_NS_INIT_INO = 0xEFFFFFFEU, 50 USER_NS_INIT_INO = 0xEFFFFFFDU, 51 PID_NS_INIT_INO = 0xEFFFFFFCU, 52 CGROUP_NS_INIT_INO = 0xEFFFFFFBU, 53 TIME_NS_INIT_INO = 0xEFFFFFFAU, 54 NET_NS_INIT_INO = 0xEFFFFFF9U, 55 MNT_NS_INIT_INO = 0xEFFFFFF8U, 56 #ifdef __KERNEL__ 57 MNT_NS_ANON_INO = 0xEFFFFFF7U, 58 #endif 59 }; 60 61 struct nsfs_file_handle { 62 __u64 ns_id; 63 __u32 ns_type; 64 __u32 ns_inum; 65 }; 66 67 #define NSFS_FILE_HANDLE_SIZE_VER0 16 /* sizeof first published struct */ 68 #define NSFS_FILE_HANDLE_SIZE_LATEST sizeof(struct nsfs_file_handle) /* sizeof latest published struct */ 69 70 enum init_ns_id { 71 IPC_NS_INIT_ID = 1ULL, 72 UTS_NS_INIT_ID = 2ULL, 73 USER_NS_INIT_ID = 3ULL, 74 PID_NS_INIT_ID = 4ULL, 75 CGROUP_NS_INIT_ID = 5ULL, 76 TIME_NS_INIT_ID = 6ULL, 77 NET_NS_INIT_ID = 7ULL, 78 MNT_NS_INIT_ID = 8ULL, 79 #ifdef __KERNEL__ 80 NS_LAST_INIT_ID = MNT_NS_INIT_ID, 81 #endif 82 }; 83 84 enum ns_type { 85 TIME_NS = (1ULL << 7), /* CLONE_NEWTIME */ 86 MNT_NS = (1ULL << 17), /* CLONE_NEWNS */ 87 CGROUP_NS = (1ULL << 25), /* CLONE_NEWCGROUP */ 88 UTS_NS = (1ULL << 26), /* CLONE_NEWUTS */ 89 IPC_NS = (1ULL << 27), /* CLONE_NEWIPC */ 90 USER_NS = (1ULL << 28), /* CLONE_NEWUSER */ 91 PID_NS = (1ULL << 29), /* CLONE_NEWPID */ 92 NET_NS = (1ULL << 30), /* CLONE_NEWNET */ 93 }; 94 95 /** 96 * struct ns_id_req - namespace ID request structure 97 * @size: size of this structure 98 * @spare: reserved for future use 99 * @filter: filter mask 100 * @ns_id: last namespace id 101 * @user_ns_id: owning user namespace ID 102 * 103 * Structure for passing namespace ID and miscellaneous parameters to 104 * statns(2) and listns(2). 105 * 106 * For statns(2) @param represents the request mask. 107 * For listns(2) @param represents the last listed mount id (or zero). 108 */ 109 struct ns_id_req { 110 __u32 size; 111 __u32 spare; 112 __u64 ns_id; 113 struct /* listns */ { 114 __u32 ns_type; 115 __u32 spare2; 116 __u64 user_ns_id; 117 }; 118 }; 119 120 /* 121 * Special @user_ns_id value that can be passed to listns() 122 */ 123 #define LISTNS_CURRENT_USER 0xffffffffffffffff /* Caller's userns */ 124 125 /* List of all ns_id_req versions. */ 126 #define NS_ID_REQ_SIZE_VER0 32 /* sizeof first published struct */ 127 128 #endif /* __LINUX_NSFS_H */ 129