]>
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
52 #ifndef CAP_AUDIT_WRITE
53 #define CAP_AUDIT_WRITE 29
56 #ifndef CAP_AUDIT_CONTROL
57 #define CAP_AUDIT_CONTROL 30
61 #define CAP_SETFCAP 31
64 #ifndef CAP_MAC_OVERRIDE
65 #define CAP_MAC_OVERRIDE 32
69 #define CAP_MAC_ADMIN 33
76 #ifndef CAP_WAKE_ALARM
77 #define CAP_WAKE_ALARM 35
80 #ifndef CAP_BLOCK_SUSPEND
81 #define CAP_BLOCK_SUSPEND 36
84 #ifndef CAP_AUDIT_READ
85 #define CAP_AUDIT_READ 37
89 #ifndef PR_CAPBSET_READ
90 #define PR_CAPBSET_READ 23
93 #ifndef PR_CAPBSET_DROP
94 #define PR_CAPBSET_DROP 24
97 /* Control the ambient capability set */
98 #ifndef PR_CAP_AMBIENT
99 #define PR_CAP_AMBIENT 47
102 #ifndef PR_CAP_AMBIENT_IS_SET
103 #define PR_CAP_AMBIENT_IS_SET 1
106 #ifndef PR_CAP_AMBIENT_RAISE
107 #define PR_CAP_AMBIENT_RAISE 2
110 #ifndef PR_CAP_AMBIENT_LOWER
111 #define PR_CAP_AMBIENT_LOWER 3
114 #ifndef PR_CAP_AMBIENT_CLEAR_ALL
115 #define PR_CAP_AMBIENT_CLEAR_ALL 4
118 #ifndef PR_SET_NO_NEW_PRIVS
119 #define PR_SET_NO_NEW_PRIVS 38
122 #ifndef PR_GET_NO_NEW_PRIVS
123 #define PR_GET_NO_NEW_PRIVS 39
126 /* filesystem magic values */
127 #ifndef CGROUP_SUPER_MAGIC
128 #define CGROUP_SUPER_MAGIC 0x27e0eb
131 #ifndef CGROUP2_SUPER_MAGIC
132 #define CGROUP2_SUPER_MAGIC 0x63677270
136 #define NSFS_MAGIC 0x6e736673
139 /* current overlayfs */
140 #ifndef OVERLAY_SUPER_MAGIC
141 #define OVERLAY_SUPER_MAGIC 0x794c7630
144 /* legacy overlayfs */
145 #ifndef OVERLAYFS_SUPER_MAGIC
146 #define OVERLAYFS_SUPER_MAGIC 0x794c764f
149 /* Calculate the number of chars needed to represent a given integer as a C
150 * string. Include room for '-' to indicate negative numbers and the \0 byte.
151 * This is based on systemd.
153 #define INTTYPE_TO_STRLEN(type) \
154 (2 + (sizeof(type) <= 1 \
156 : sizeof(type) <= 2 \
158 : sizeof(type) <= 4 \
160 : sizeof(type) <= 8 \
162 : sizeof(int[-2 * (sizeof(type) > 8)])))
165 #define LXC_LINELEN 4096
166 #define LXC_IDMAPLEN 4096
167 #define LXC_MAX_BUFFER 4096
168 #define LXC_NAMESPACE_NAME_MAX 256
172 * <pid-as-str> = INTTYPE_TO_STRLEN(pid_t)
176 * <fd-as-str> = INTTYPE_TO_STRLEN(int)
180 #define LXC_PROC_PID_FD_LEN \
181 (6 + INTTYPE_TO_STRLEN(pid_t) + 4 + INTTYPE_TO_STRLEN(int) + 1)
185 * <pid-as-str> = INTTYPE_TO_STRLEN(pid_t)
191 #define LXC_PROC_STATUS_LEN (6 + INTTYPE_TO_STRLEN(pid_t) + 7 + 1)
195 * <pid-as-str> = INTTYPE_TO_STRLEN(pid_t)
203 #define LXC_LSMATTRLEN (6 + INTTYPE_TO_STRLEN(pid_t) + 6 + 8 + 1)
205 #define LXC_CMD_DATA_MAX (PATH_MAX * 2)
208 #ifndef LO_FLAGS_AUTOCLEAR
209 #define LO_FLAGS_AUTOCLEAR 4
212 #ifndef LOOP_CTL_GET_FREE
213 #define LOOP_CTL_GET_FREE 0x4C82
218 #define MFD_CLOEXEC 0x0001U
221 #ifndef MFD_ALLOW_SEALING
222 #define MFD_ALLOW_SEALING 0x0002U
226 * BUILD_BUG_ON - break compile if a condition is true.
227 * @condition: the condition which the compiler should know is false.
229 * If you have some code which relies on certain constants being equal, or
230 * other compile-time-evaluated condition, you should use BUILD_BUG_ON to
231 * detect if someone changes it.
233 * The implementation uses gcc's reluctance to create a negative array, but
234 * gcc (as of 4.4) only emits that error for obvious cases (eg. not arguments
235 * to inline functions). So as a fallback we use the optimizer; if it can't
236 * prove the condition is false, it will cause a link error on the undefined
237 * "__build_bug_on_failed". This error message can be harder to track down
238 * though, hence the two different methods.
241 #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2 * !!(condition)]))
243 extern int __build_bug_on_failed
;
244 #define BUILD_BUG_ON(condition) \
246 ((void)sizeof(char[1 - 2 * !!(condition)])); \
248 __build_bug_on_failed = 1; \
252 #define lxc_iterate_parts(__iterator, __splitme, __separators) \
253 for (char *__p = NULL, *__it = strtok_r(__splitme, __separators, &__p); \
254 (__iterator = __it); \
255 __iterator = __it = strtok_r(NULL, __separators, &__p))
257 #define prctl_arg(x) ((unsigned long)x)
260 #ifndef NETLINK_GET_STRICT_CHK
261 #define NETLINK_GET_STRICT_CHK 12
265 #define SOL_NETLINK 270
268 #ifndef IFLA_LINKMODE
269 #define IFLA_LINKMODE 17
272 #ifndef IFLA_LINKINFO
273 #define IFLA_LINKINFO 18
276 #ifndef IFLA_NET_NS_PID
277 #define IFLA_NET_NS_PID 19
280 #ifndef IFLA_NET_NS_FD
281 #define IFLA_NET_NS_FD 28
284 #ifndef IFLA_INFO_KIND
285 #define IFLA_INFO_KIND 1
289 #define IFLA_VLAN_ID 1
292 #ifndef IFLA_INFO_DATA
293 #define IFLA_INFO_DATA 2
296 #ifndef VETH_INFO_PEER
297 #define VETH_INFO_PEER 1
300 #ifndef VETH_MODE_BRIDGE
301 #define VETH_MODE_BRIDGE 1
304 #ifndef VETH_MODE_ROUTER
305 #define VETH_MODE_ROUTER 2
308 #ifndef IFLA_MACVLAN_MODE
309 #define IFLA_MACVLAN_MODE 1
312 #ifndef IFLA_IPVLAN_MODE
313 #define IFLA_IPVLAN_MODE 1
316 #ifndef IFLA_IPVLAN_ISOLATION
317 #define IFLA_IPVLAN_ISOLATION 2
320 #ifndef IFLA_NEW_NETNSID
321 #define IFLA_NEW_NETNSID 45
324 #ifdef IFLA_IF_NETNSID
325 #ifndef IFLA_TARGET_NETNSID
326 #define IFLA_TARGET_NETNSID = IFLA_IF_NETNSID
329 #define IFLA_IF_NETNSID 46
330 #define IFLA_TARGET_NETNSID 46
333 #ifndef IFA_TARGET_NETNSID
334 #define IFA_TARGET_NETNSID 10
342 #define IFLA_STATS64 23
346 #define RTM_NEWNSID 88
350 #define RTM_GETNSID 90
354 #define NLMSG_ERROR 0x2
357 #ifndef MACVLAN_MODE_PRIVATE
358 #define MACVLAN_MODE_PRIVATE 1
361 #ifndef MACVLAN_MODE_VEPA
362 #define MACVLAN_MODE_VEPA 2
365 #ifndef MACVLAN_MODE_BRIDGE
366 #define MACVLAN_MODE_BRIDGE 4
369 #ifndef MACVLAN_MODE_PASSTHRU
370 #define MACVLAN_MODE_PASSTHRU 8
373 #ifndef IPVLAN_MODE_L2
374 #define IPVLAN_MODE_L2 0
377 #ifndef IPVLAN_MODE_L3
378 #define IPVLAN_MODE_L3 1
381 #ifndef IPVLAN_MODE_L3S
382 #define IPVLAN_MODE_L3S 2
385 #ifndef IPVLAN_ISOLATION_BRIDGE
386 #define IPVLAN_ISOLATION_BRIDGE 0
389 #ifndef IPVLAN_ISOLATION_PRIVATE
390 #define IPVLAN_ISOLATION_PRIVATE 1
393 #ifndef IPVLAN_ISOLATION_VEPA
394 #define IPVLAN_ISOLATION_VEPA 2
397 /* Attributes of RTM_NEWNSID/RTM_GETNSID messages */
400 #define __LXC_NETNSA_NSID_NOT_ASSIGNED -1
407 /* Length of abstract unix domain socket socket address. */
408 #define LXC_AUDS_ADDR_LEN sizeof(((struct sockaddr_un *)0)->sun_path)
412 #define MS_PRIVATE (1<<18)
416 #define MS_SLAVE (1 << 19)
420 #define MS_LAZYTIME (1<<25)
429 #define O_PATH 010000000
433 #define O_NOFOLLOW 00400000
438 #define SOCK_CLOEXEC 02000000
441 /* pointer conversion macros */
442 #define PTR_TO_INT(p) ((int)((intptr_t)(p)))
443 #define INT_TO_PTR(u) ((void *)((intptr_t)(u)))
445 #define PTR_TO_PID(p) ((pid_t)((intptr_t)(p)))
446 #define PID_TO_PTR(u) ((void *)((intptr_t)(u)))
448 #define PTR_TO_UINT64(p) ((uint64_t)((intptr_t)(p)))
450 #define UINT_TO_PTR(u) ((void *) ((uintptr_t) (u)))
451 #define PTR_TO_USHORT(p) ((unsigned short)((uintptr_t)(p)))
453 #define LXC_INVALID_UID ((uid_t)-1)
454 #define LXC_INVALID_GID ((gid_t)-1)
456 #define STRLITERALLEN(x) (sizeof(""x"") - 1)
457 #define STRARRAYLEN(x) (sizeof(x) - 1)
459 /* Maximum number of bytes sendfile() is able to send in one go. */
460 #define LXC_SENDFILE_MAX 0x7ffff000
462 #define move_ptr(ptr) \
464 typeof(ptr) __internal_ptr__ = (ptr); \
469 #define move_fd(fd) \
471 int __internal_fd__ = (fd); \
476 #define ret_set_errno(__ret__, __errno__) \
478 typeof(__ret__) __internal_ret__ = (__ret__); \
479 errno = (__errno__); \
483 #define ret_errno(__errno__) \
485 errno = (__errno__); \
489 #define free_move_ptr(a, b) \
492 (a) = move_ptr((b)); \
495 /* Container's specific file/directory names */
496 #define LXC_CONFIG_FNAME "config"
497 #define LXC_PARTIAL_FNAME "partial"
498 #define LXC_ROOTFS_DNAME "rootfs"
499 #define LXC_TIMESTAMP_FNAME "ts"
500 #define LXC_COMMENT_FNAME "comment"
502 #define ARRAY_SIZE(x) \
503 (__builtin_choose_expr(!__builtin_types_compatible_p(typeof(x), \
505 sizeof(x) / sizeof((x)[0]), ((void)0)))
508 #if defined __sparc__
509 #define TIOCGPTPEER _IO('t', 137)
511 #define TIOCGPTPEER _IO('T', 0x41)
515 #endif /* __LXC_MACRO_H */