]>
git.proxmox.com Git - mirror_lxc.git/blob - src/lxc/macro.h
1 /* SPDX-License-Identifier: LGPL-2.1+ */
9 #define __STDC_FORMAT_MACROS
10 #include <asm/types.h>
12 #include <linux/if_link.h>
13 #include <linux/loop.h>
14 #include <linux/netlink.h>
15 #include <linux/rtnetlink.h>
16 #include <linux/types.h>
19 #include <sys/mount.h>
20 #include <sys/socket.h>
28 #ifndef MAX_GRBUF_SIZE
29 #define MAX_GRBUF_SIZE 2097152
32 #define INT64_FMT "%" PRId64
34 /* Define __S_ISTYPE if missing from the C library. */
36 #define __S_ISTYPE(mode, mask) (((mode)&S_IFMT) == (mask))
49 #define CAP_SYS_ADMIN 21
53 #define CAP_SETFCAP 31
56 #ifndef CAP_MAC_OVERRIDE
57 #define CAP_MAC_OVERRIDE 32
61 #define CAP_MAC_ADMIN 33
65 #ifndef PR_CAPBSET_READ
66 #define PR_CAPBSET_READ 23
69 #ifndef PR_CAPBSET_DROP
70 #define PR_CAPBSET_DROP 24
73 /* Control the ambient capability set */
74 #ifndef PR_CAP_AMBIENT
75 #define PR_CAP_AMBIENT 47
78 #ifndef PR_CAP_AMBIENT_IS_SET
79 #define PR_CAP_AMBIENT_IS_SET 1
82 #ifndef PR_CAP_AMBIENT_RAISE
83 #define PR_CAP_AMBIENT_RAISE 2
86 #ifndef PR_CAP_AMBIENT_LOWER
87 #define PR_CAP_AMBIENT_LOWER 3
90 #ifndef PR_CAP_AMBIENT_CLEAR_ALL
91 #define PR_CAP_AMBIENT_CLEAR_ALL 4
94 #ifndef PR_SET_NO_NEW_PRIVS
95 #define PR_SET_NO_NEW_PRIVS 38
98 #ifndef PR_GET_NO_NEW_PRIVS
99 #define PR_GET_NO_NEW_PRIVS 39
102 /* filesystem magic values */
103 #ifndef CGROUP_SUPER_MAGIC
104 #define CGROUP_SUPER_MAGIC 0x27e0eb
107 #ifndef CGROUP2_SUPER_MAGIC
108 #define CGROUP2_SUPER_MAGIC 0x63677270
112 #define NSFS_MAGIC 0x6e736673
115 /* current overlayfs */
116 #ifndef OVERLAY_SUPER_MAGIC
117 #define OVERLAY_SUPER_MAGIC 0x794c7630
120 /* legacy overlayfs */
121 #ifndef OVERLAYFS_SUPER_MAGIC
122 #define OVERLAYFS_SUPER_MAGIC 0x794c764f
125 /* Calculate the number of chars needed to represent a given integer as a C
126 * string. Include room for '-' to indicate negative numbers and the \0 byte.
127 * This is based on systemd.
129 #define INTTYPE_TO_STRLEN(type) \
130 (2 + (sizeof(type) <= 1 \
132 : sizeof(type) <= 2 \
134 : sizeof(type) <= 4 \
136 : sizeof(type) <= 8 \
138 : sizeof(int[-2 * (sizeof(type) > 8)])))
141 #define LXC_LINELEN 4096
142 #define LXC_IDMAPLEN 4096
143 #define LXC_MAX_BUFFER 4096
144 #define LXC_NAMESPACE_NAME_MAX 256
148 * <pid-as-str> = INTTYPE_TO_STRLEN(pid_t)
152 * <fd-as-str> = INTTYPE_TO_STRLEN(int)
156 #define LXC_PROC_PID_FD_LEN \
157 (6 + INTTYPE_TO_STRLEN(pid_t) + 4 + INTTYPE_TO_STRLEN(int) + 1)
161 * <pid-as-str> = INTTYPE_TO_STRLEN(pid_t)
167 #define LXC_PROC_STATUS_LEN (6 + INTTYPE_TO_STRLEN(pid_t) + 7 + 1)
171 * <pid-as-str> = INTTYPE_TO_STRLEN(pid_t)
179 #define LXC_LSMATTRLEN (6 + INTTYPE_TO_STRLEN(pid_t) + 6 + 8 + 1)
181 #define LXC_CMD_DATA_MAX (PATH_MAX * 2)
184 #ifndef LO_FLAGS_AUTOCLEAR
185 #define LO_FLAGS_AUTOCLEAR 4
188 #ifndef LOOP_CTL_GET_FREE
189 #define LOOP_CTL_GET_FREE 0x4C82
194 #define MFD_CLOEXEC 0x0001U
197 #ifndef MFD_ALLOW_SEALING
198 #define MFD_ALLOW_SEALING 0x0002U
202 * BUILD_BUG_ON - break compile if a condition is true.
203 * @condition: the condition which the compiler should know is false.
205 * If you have some code which relies on certain constants being equal, or
206 * other compile-time-evaluated condition, you should use BUILD_BUG_ON to
207 * detect if someone changes it.
209 * The implementation uses gcc's reluctance to create a negative array, but
210 * gcc (as of 4.4) only emits that error for obvious cases (eg. not arguments
211 * to inline functions). So as a fallback we use the optimizer; if it can't
212 * prove the condition is false, it will cause a link error on the undefined
213 * "__build_bug_on_failed". This error message can be harder to track down
214 * though, hence the two different methods.
217 #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2 * !!(condition)]))
219 extern int __build_bug_on_failed
;
220 #define BUILD_BUG_ON(condition) \
222 ((void)sizeof(char[1 - 2 * !!(condition)])); \
224 __build_bug_on_failed = 1; \
228 #define lxc_iterate_parts(__iterator, __splitme, __separators) \
229 for (char *__p = NULL, *__it = strtok_r(__splitme, __separators, &__p); \
230 (__iterator = __it); \
231 __iterator = __it = strtok_r(NULL, __separators, &__p))
233 #define prctl_arg(x) ((unsigned long)x)
236 #ifndef NETLINK_GET_STRICT_CHK
237 #define NETLINK_GET_STRICT_CHK 12
241 #define SOL_NETLINK 270
244 #ifndef IFLA_LINKMODE
245 #define IFLA_LINKMODE 17
248 #ifndef IFLA_LINKINFO
249 #define IFLA_LINKINFO 18
252 #ifndef IFLA_NET_NS_PID
253 #define IFLA_NET_NS_PID 19
256 #ifndef IFLA_NET_NS_FD
257 #define IFLA_NET_NS_FD 28
260 #ifndef IFLA_INFO_KIND
261 #define IFLA_INFO_KIND 1
265 #define IFLA_VLAN_ID 1
268 #ifndef IFLA_INFO_DATA
269 #define IFLA_INFO_DATA 2
272 #ifndef VETH_INFO_PEER
273 #define VETH_INFO_PEER 1
276 #ifndef VETH_MODE_BRIDGE
277 #define VETH_MODE_BRIDGE 1
280 #ifndef VETH_MODE_ROUTER
281 #define VETH_MODE_ROUTER 2
284 #ifndef IFLA_MACVLAN_MODE
285 #define IFLA_MACVLAN_MODE 1
288 #ifndef IFLA_IPVLAN_MODE
289 #define IFLA_IPVLAN_MODE 1
292 #ifndef IFLA_IPVLAN_ISOLATION
293 #define IFLA_IPVLAN_ISOLATION 2
296 #ifndef IFLA_NEW_NETNSID
297 #define IFLA_NEW_NETNSID 45
300 #ifdef IFLA_IF_NETNSID
301 #ifndef IFLA_TARGET_NETNSID
302 #define IFLA_TARGET_NETNSID = IFLA_IF_NETNSID
305 #define IFLA_IF_NETNSID 46
306 #define IFLA_TARGET_NETNSID 46
309 #ifndef IFA_TARGET_NETNSID
310 #define IFA_TARGET_NETNSID 10
318 #define IFLA_STATS64 23
322 #define RTM_NEWNSID 88
326 #define RTM_GETNSID 90
330 #define NLMSG_ERROR 0x2
333 #ifndef MACVLAN_MODE_PRIVATE
334 #define MACVLAN_MODE_PRIVATE 1
337 #ifndef MACVLAN_MODE_VEPA
338 #define MACVLAN_MODE_VEPA 2
341 #ifndef MACVLAN_MODE_BRIDGE
342 #define MACVLAN_MODE_BRIDGE 4
345 #ifndef MACVLAN_MODE_PASSTHRU
346 #define MACVLAN_MODE_PASSTHRU 8
349 #ifndef IPVLAN_MODE_L2
350 #define IPVLAN_MODE_L2 0
353 #ifndef IPVLAN_MODE_L3
354 #define IPVLAN_MODE_L3 1
357 #ifndef IPVLAN_MODE_L3S
358 #define IPVLAN_MODE_L3S 2
361 #ifndef IPVLAN_ISOLATION_BRIDGE
362 #define IPVLAN_ISOLATION_BRIDGE 0
365 #ifndef IPVLAN_ISOLATION_PRIVATE
366 #define IPVLAN_ISOLATION_PRIVATE 1
369 #ifndef IPVLAN_ISOLATION_VEPA
370 #define IPVLAN_ISOLATION_VEPA 2
373 /* Attributes of RTM_NEWNSID/RTM_GETNSID messages */
376 #define __LXC_NETNSA_NSID_NOT_ASSIGNED -1
383 /* Length of abstract unix domain socket socket address. */
384 #define LXC_AUDS_ADDR_LEN sizeof(((struct sockaddr_un *)0)->sun_path)
388 #define MS_PRIVATE (1<<18)
392 #define MS_SLAVE (1 << 19)
396 #define MS_LAZYTIME (1<<25)
405 #define O_PATH 010000000
409 #define O_NOFOLLOW 00400000
414 #define SOCK_CLOEXEC 02000000
417 /* pointer conversion macros */
418 #define PTR_TO_INT(p) ((int)((intptr_t)(p)))
419 #define INT_TO_PTR(u) ((void *)((intptr_t)(u)))
421 #define PTR_TO_PID(p) ((pid_t)((intptr_t)(p)))
422 #define PID_TO_PTR(u) ((void *)((intptr_t)(u)))
424 #define PTR_TO_UINT64(p) ((uint64_t)((intptr_t)(p)))
426 #define UINT_TO_PTR(u) ((void *) ((uintptr_t) (u)))
427 #define PTR_TO_USHORT(p) ((unsigned short)((uintptr_t)(p)))
429 #define LXC_INVALID_UID ((uid_t)-1)
430 #define LXC_INVALID_GID ((gid_t)-1)
432 #define STRLITERALLEN(x) (sizeof(""x"") - 1)
433 #define STRARRAYLEN(x) (sizeof(x) - 1)
435 /* Maximum number of bytes sendfile() is able to send in one go. */
436 #define LXC_SENDFILE_MAX 0x7ffff000
438 #define move_ptr(ptr) \
440 typeof(ptr) __internal_ptr__ = (ptr); \
445 #define move_fd(fd) \
447 int __internal_fd__ = (fd); \
452 #define ret_set_errno(__ret__, __errno__) \
454 typeof(__ret__) __internal_ret__ = (__ret__); \
455 errno = (__errno__); \
459 #define ret_errno(__errno__) \
461 errno = (__errno__); \
465 #define free_move_ptr(a, b) \
468 (a) = move_ptr((b)); \
471 /* Container's specific file/directory names */
472 #define LXC_CONFIG_FNAME "config"
473 #define LXC_PARTIAL_FNAME "partial"
474 #define LXC_ROOTFS_DNAME "rootfs"
475 #define LXC_TIMESTAMP_FNAME "ts"
476 #define LXC_COMMENT_FNAME "comment"
478 #define ARRAY_SIZE(x) \
479 (__builtin_choose_expr(!__builtin_types_compatible_p(typeof(x), \
481 sizeof(x) / sizeof((x)[0]), ((void)0)))
484 #if defined __sparc__
485 #define TIOCGPTPEER _IO('t', 137)
487 #define TIOCGPTPEER _IO('T', 0x41)
491 #endif /* __LXC_MACRO_H */