chiark / gitweb /
fs-util: add new unlinkat_deallocate() helper
[elogind.git] / src / basic / missing.h
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2 #pragma once
3
4 /***
5   This file is part of systemd.
6
7   Copyright 2010 Lennart Poettering
8
9   systemd is free software; you can redistribute it and/or modify it
10   under the terms of the GNU Lesser General Public License as published by
11   the Free Software Foundation; either version 2.1 of the License, or
12   (at your option) any later version.
13
14   systemd is distributed in the hope that it will be useful, but
15   WITHOUT ANY WARRANTY; without even the implied warranty of
16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17   Lesser General Public License for more details.
18
19   You should have received a copy of the GNU Lesser General Public License
20   along with systemd; If not, see <http://www.gnu.org/licenses/>.
21 ***/
22
23 /* Missing glibc definitions to access certain kernel APIs */
24
25 #include <errno.h>
26 #include <fcntl.h>
27 #include <inttypes.h>
28 #include <linux/audit.h>
29 #include <linux/capability.h>
30 //#include <linux/falloc.h>
31 #include <linux/if_link.h>
32 #include <linux/input.h>
33 #include <linux/loop.h>
34 #include <linux/neighbour.h>
35 #include <linux/oom.h>
36 #include <linux/rtnetlink.h>
37 #include <net/ethernet.h>
38 #include <stdlib.h>
39 #include <sys/resource.h>
40 #include <sys/socket.h>
41 #include <sys/syscall.h>
42 #include <uchar.h>
43 #include <unistd.h>
44
45 /// Additional includes needed by elogind
46 #include "musl_missing.h"
47
48 #if HAVE_AUDIT
49 #include <libaudit.h>
50 #endif
51
52 #ifdef ARCH_MIPS
53 #include <asm/sgidefs.h>
54 #endif
55
56 #if HAVE_LINUX_BTRFS_H
57 #include <linux/btrfs.h>
58 #endif
59
60 #if HAVE_LINUX_VM_SOCKETS_H
61 #include <linux/vm_sockets.h>
62 #else
63 #define VMADDR_CID_ANY -1U
64 struct sockaddr_vm {
65         unsigned short svm_family;
66         unsigned short svm_reserved1;
67         unsigned int svm_port;
68         unsigned int svm_cid;
69         unsigned char svm_zero[sizeof(struct sockaddr) -
70                                sizeof(unsigned short) -
71                                sizeof(unsigned short) -
72                                sizeof(unsigned int) -
73                                sizeof(unsigned int)];
74 };
75 #endif /* !HAVE_LINUX_VM_SOCKETS_H */
76
77 #ifndef RLIMIT_RTTIME
78 #define RLIMIT_RTTIME 15
79 #endif
80
81 /* If RLIMIT_RTTIME is not defined, then we cannot use RLIMIT_NLIMITS as is */
82 #define _RLIMIT_MAX (RLIMIT_RTTIME+1 > RLIMIT_NLIMITS ? RLIMIT_RTTIME+1 : RLIMIT_NLIMITS)
83
84 #ifndef F_LINUX_SPECIFIC_BASE
85 #define F_LINUX_SPECIFIC_BASE 1024
86 #endif
87
88 #ifndef F_SETPIPE_SZ
89 #define F_SETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 7)
90 #endif
91
92 #ifndef F_GETPIPE_SZ
93 #define F_GETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 8)
94 #endif
95
96 #ifndef F_ADD_SEALS
97 #define F_ADD_SEALS (F_LINUX_SPECIFIC_BASE + 9)
98 #define F_GET_SEALS (F_LINUX_SPECIFIC_BASE + 10)
99
100 #define F_SEAL_SEAL     0x0001  /* prevent further seals from being set */
101 #define F_SEAL_SHRINK   0x0002  /* prevent file from shrinking */
102 #define F_SEAL_GROW     0x0004  /* prevent file from growing */
103 #define F_SEAL_WRITE    0x0008  /* prevent writes */
104 #endif
105
106 #ifndef F_OFD_GETLK
107 #define F_OFD_GETLK     36
108 #define F_OFD_SETLK     37
109 #define F_OFD_SETLKW    38
110 #endif
111
112 #ifndef MFD_ALLOW_SEALING
113 #define MFD_ALLOW_SEALING 0x0002U
114 #endif
115
116 #ifndef MFD_CLOEXEC
117 #define MFD_CLOEXEC 0x0001U
118 #endif
119
120 #ifndef IP_FREEBIND
121 #define IP_FREEBIND 15
122 #endif
123
124 #ifndef OOM_SCORE_ADJ_MIN
125 #define OOM_SCORE_ADJ_MIN (-1000)
126 #endif
127
128 #ifndef OOM_SCORE_ADJ_MAX
129 #define OOM_SCORE_ADJ_MAX 1000
130 #endif
131
132 #ifndef AUDIT_SERVICE_START
133 #define AUDIT_SERVICE_START 1130 /* Service (daemon) start */
134 #endif
135
136 #ifndef AUDIT_SERVICE_STOP
137 #define AUDIT_SERVICE_STOP 1131 /* Service (daemon) stop */
138 #endif
139
140 #ifndef TIOCVHANGUP
141 #define TIOCVHANGUP 0x5437
142 #endif
143
144 #ifndef IP_TRANSPARENT
145 #define IP_TRANSPARENT 19
146 #endif
147
148 #ifndef SOL_NETLINK
149 #define SOL_NETLINK 270
150 #endif
151
152 #ifndef NETLINK_LIST_MEMBERSHIPS
153 #define NETLINK_LIST_MEMBERSHIPS 9
154 #endif
155
156 #ifndef SOL_SCTP
157 #define SOL_SCTP 132
158 #endif
159
160 #ifndef GRND_NONBLOCK
161 #define GRND_NONBLOCK 0x0001
162 #endif
163
164 #ifndef GRND_RANDOM
165 #define GRND_RANDOM 0x0002
166 #endif
167
168 #ifndef FS_NOCOW_FL
169 #define FS_NOCOW_FL 0x00800000
170 #endif
171
172 #ifndef BTRFS_IOCTL_MAGIC
173 #define BTRFS_IOCTL_MAGIC 0x94
174 #endif
175
176 #ifndef BTRFS_PATH_NAME_MAX
177 #define BTRFS_PATH_NAME_MAX 4087
178 #endif
179
180 #ifndef BTRFS_DEVICE_PATH_NAME_MAX
181 #define BTRFS_DEVICE_PATH_NAME_MAX 1024
182 #endif
183
184 #ifndef BTRFS_FSID_SIZE
185 #define BTRFS_FSID_SIZE 16
186 #endif
187
188 #ifndef BTRFS_UUID_SIZE
189 #define BTRFS_UUID_SIZE 16
190 #endif
191
192 #ifndef BTRFS_SUBVOL_RDONLY
193 #define BTRFS_SUBVOL_RDONLY (1ULL << 1)
194 #endif
195
196 #ifndef BTRFS_SUBVOL_NAME_MAX
197 #define BTRFS_SUBVOL_NAME_MAX 4039
198 #endif
199
200 #ifndef BTRFS_INO_LOOKUP_PATH_MAX
201 #define BTRFS_INO_LOOKUP_PATH_MAX 4080
202 #endif
203
204 #ifndef BTRFS_SEARCH_ARGS_BUFSIZE
205 #define BTRFS_SEARCH_ARGS_BUFSIZE (4096 - sizeof(struct btrfs_ioctl_search_key))
206 #endif
207
208 #ifndef BTRFS_QGROUP_LEVEL_SHIFT
209 #define BTRFS_QGROUP_LEVEL_SHIFT 48
210 #endif
211
212 #if 0 /// UNNEEDED by elogind (It can not support BTRFS at all)
213 #if ! HAVE_LINUX_BTRFS_H
214 #define BTRFS_IOC_QGROUP_ASSIGN _IOW(BTRFS_IOCTL_MAGIC, 41, \
215                                struct btrfs_ioctl_qgroup_assign_args)
216 #define BTRFS_IOC_QGROUP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 42, \
217                                struct btrfs_ioctl_qgroup_create_args)
218 #define BTRFS_IOC_QUOTA_RESCAN _IOW(BTRFS_IOCTL_MAGIC, 44, \
219                                struct btrfs_ioctl_quota_rescan_args)
220 #define BTRFS_IOC_QUOTA_RESCAN_STATUS _IOR(BTRFS_IOCTL_MAGIC, 45, \
221                                struct btrfs_ioctl_quota_rescan_args)
222
223 struct btrfs_ioctl_quota_rescan_args {
224         __u64   flags;
225         __u64   progress;
226         __u64   reserved[6];
227 };
228
229 struct btrfs_ioctl_qgroup_assign_args {
230         __u64 assign;
231         __u64 src;
232         __u64 dst;
233 };
234
235 struct btrfs_ioctl_qgroup_create_args {
236         __u64 create;
237         __u64 qgroupid;
238 };
239
240 struct btrfs_ioctl_vol_args {
241         int64_t fd;
242         char name[BTRFS_PATH_NAME_MAX + 1];
243 };
244
245 struct btrfs_qgroup_limit {
246         __u64 flags;
247         __u64 max_rfer;
248         __u64 max_excl;
249         __u64 rsv_rfer;
250         __u64 rsv_excl;
251 };
252
253 struct btrfs_qgroup_inherit {
254         __u64 flags;
255         __u64 num_qgroups;
256         __u64 num_ref_copies;
257         __u64 num_excl_copies;
258         struct btrfs_qgroup_limit lim;
259         __u64 qgroups[0];
260 };
261
262 struct btrfs_ioctl_qgroup_limit_args {
263         __u64 qgroupid;
264         struct btrfs_qgroup_limit lim;
265 };
266
267 struct btrfs_ioctl_vol_args_v2 {
268         __s64 fd;
269         __u64 transid;
270         __u64 flags;
271         union {
272                 struct {
273                         __u64 size;
274                         struct btrfs_qgroup_inherit *qgroup_inherit;
275                 };
276                 __u64 unused[4];
277         };
278         char name[BTRFS_SUBVOL_NAME_MAX + 1];
279 };
280
281 struct btrfs_ioctl_dev_info_args {
282         uint64_t devid;                         /* in/out */
283         uint8_t uuid[BTRFS_UUID_SIZE];          /* in/out */
284         uint64_t bytes_used;                    /* out */
285         uint64_t total_bytes;                   /* out */
286         uint64_t unused[379];                   /* pad to 4k */
287         char path[BTRFS_DEVICE_PATH_NAME_MAX];  /* out */
288 };
289
290 struct btrfs_ioctl_fs_info_args {
291         uint64_t max_id;                        /* out */
292         uint64_t num_devices;                   /* out */
293         uint8_t fsid[BTRFS_FSID_SIZE];          /* out */
294         uint64_t reserved[124];                 /* pad to 1k */
295 };
296
297 struct btrfs_ioctl_ino_lookup_args {
298         __u64 treeid;
299         __u64 objectid;
300         char name[BTRFS_INO_LOOKUP_PATH_MAX];
301 };
302
303 struct btrfs_ioctl_search_key {
304         /* which root are we searching.  0 is the tree of tree roots */
305         __u64 tree_id;
306
307         /* keys returned will be >= min and <= max */
308         __u64 min_objectid;
309         __u64 max_objectid;
310
311         /* keys returned will be >= min and <= max */
312         __u64 min_offset;
313         __u64 max_offset;
314
315         /* max and min transids to search for */
316         __u64 min_transid;
317         __u64 max_transid;
318
319         /* keys returned will be >= min and <= max */
320         __u32 min_type;
321         __u32 max_type;
322
323         /*
324          * how many items did userland ask for, and how many are we
325          * returning
326          */
327         __u32 nr_items;
328
329         /* align to 64 bits */
330         __u32 unused;
331
332         /* some extra for later */
333         __u64 unused1;
334         __u64 unused2;
335         __u64 unused3;
336         __u64 unused4;
337 };
338
339 struct btrfs_ioctl_search_header {
340         __u64 transid;
341         __u64 objectid;
342         __u64 offset;
343         __u32 type;
344         __u32 len;
345 };
346
347
348 struct btrfs_ioctl_search_args {
349         struct btrfs_ioctl_search_key key;
350         char buf[BTRFS_SEARCH_ARGS_BUFSIZE];
351 };
352
353 struct btrfs_ioctl_clone_range_args {
354         __s64 src_fd;
355         __u64 src_offset, src_length;
356         __u64 dest_offset;
357 };
358
359 #define BTRFS_QUOTA_CTL_ENABLE  1
360 #define BTRFS_QUOTA_CTL_DISABLE 2
361 #define BTRFS_QUOTA_CTL_RESCAN__NOTUSED 3
362 struct btrfs_ioctl_quota_ctl_args {
363         __u64 cmd;
364         __u64 status;
365 };
366 #endif
367
368 #ifndef BTRFS_IOC_DEFRAG
369 #define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, \
370                                  struct btrfs_ioctl_vol_args)
371 #endif
372
373 #ifndef BTRFS_IOC_RESIZE
374 #define BTRFS_IOC_RESIZE _IOW(BTRFS_IOCTL_MAGIC, 3, \
375                                  struct btrfs_ioctl_vol_args)
376 #endif
377
378 #ifndef BTRFS_IOC_CLONE
379 #define BTRFS_IOC_CLONE _IOW(BTRFS_IOCTL_MAGIC, 9, int)
380 #endif
381
382 #ifndef BTRFS_IOC_CLONE_RANGE
383 #define BTRFS_IOC_CLONE_RANGE _IOW(BTRFS_IOCTL_MAGIC, 13, \
384                                  struct btrfs_ioctl_clone_range_args)
385 #endif
386
387 #ifndef BTRFS_IOC_SUBVOL_CREATE
388 #define BTRFS_IOC_SUBVOL_CREATE _IOW(BTRFS_IOCTL_MAGIC, 14, \
389                                  struct btrfs_ioctl_vol_args)
390 #endif
391
392 #ifndef BTRFS_IOC_SNAP_DESTROY
393 #define BTRFS_IOC_SNAP_DESTROY _IOW(BTRFS_IOCTL_MAGIC, 15, \
394                                  struct btrfs_ioctl_vol_args)
395 #endif
396
397 #ifndef BTRFS_IOC_TREE_SEARCH
398 #define BTRFS_IOC_TREE_SEARCH _IOWR(BTRFS_IOCTL_MAGIC, 17, \
399                                  struct btrfs_ioctl_search_args)
400 #endif
401
402 #ifndef BTRFS_IOC_INO_LOOKUP
403 #define BTRFS_IOC_INO_LOOKUP _IOWR(BTRFS_IOCTL_MAGIC, 18, \
404                                  struct btrfs_ioctl_ino_lookup_args)
405 #endif
406
407 #ifndef BTRFS_IOC_SNAP_CREATE_V2
408 #define BTRFS_IOC_SNAP_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 23, \
409                                  struct btrfs_ioctl_vol_args_v2)
410 #endif
411
412 #ifndef BTRFS_IOC_SUBVOL_GETFLAGS
413 #define BTRFS_IOC_SUBVOL_GETFLAGS _IOR(BTRFS_IOCTL_MAGIC, 25, __u64)
414 #endif
415
416 #ifndef BTRFS_IOC_SUBVOL_SETFLAGS
417 #define BTRFS_IOC_SUBVOL_SETFLAGS _IOW(BTRFS_IOCTL_MAGIC, 26, __u64)
418 #endif
419
420 #ifndef BTRFS_IOC_DEV_INFO
421 #define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \
422                                  struct btrfs_ioctl_dev_info_args)
423 #endif
424
425 #ifndef BTRFS_IOC_FS_INFO
426 #define BTRFS_IOC_FS_INFO _IOR(BTRFS_IOCTL_MAGIC, 31, \
427                                  struct btrfs_ioctl_fs_info_args)
428 #endif
429
430 #ifndef BTRFS_IOC_DEVICES_READY
431 #define BTRFS_IOC_DEVICES_READY _IOR(BTRFS_IOCTL_MAGIC, 39, \
432                                  struct btrfs_ioctl_vol_args)
433 #endif
434
435 #ifndef BTRFS_IOC_QUOTA_CTL
436 #define BTRFS_IOC_QUOTA_CTL _IOWR(BTRFS_IOCTL_MAGIC, 40, \
437                                struct btrfs_ioctl_quota_ctl_args)
438 #endif
439
440 #ifndef BTRFS_IOC_QGROUP_LIMIT
441 #define BTRFS_IOC_QGROUP_LIMIT _IOR(BTRFS_IOCTL_MAGIC, 43, \
442                                struct btrfs_ioctl_qgroup_limit_args)
443 #endif
444
445 #ifndef BTRFS_IOC_QUOTA_RESCAN_WAIT
446 #define BTRFS_IOC_QUOTA_RESCAN_WAIT _IO(BTRFS_IOCTL_MAGIC, 46)
447 #endif
448
449 #ifndef BTRFS_FIRST_FREE_OBJECTID
450 #define BTRFS_FIRST_FREE_OBJECTID 256
451 #endif
452
453 #ifndef BTRFS_LAST_FREE_OBJECTID
454 #define BTRFS_LAST_FREE_OBJECTID -256ULL
455 #endif
456
457 #ifndef BTRFS_ROOT_TREE_OBJECTID
458 #define BTRFS_ROOT_TREE_OBJECTID 1
459 #endif
460
461 #ifndef BTRFS_QUOTA_TREE_OBJECTID
462 #define BTRFS_QUOTA_TREE_OBJECTID 8ULL
463 #endif
464
465 #ifndef BTRFS_ROOT_ITEM_KEY
466 #define BTRFS_ROOT_ITEM_KEY 132
467 #endif
468
469 #ifndef BTRFS_QGROUP_STATUS_KEY
470 #define BTRFS_QGROUP_STATUS_KEY 240
471 #endif
472
473 #ifndef BTRFS_QGROUP_INFO_KEY
474 #define BTRFS_QGROUP_INFO_KEY 242
475 #endif
476
477 #ifndef BTRFS_QGROUP_LIMIT_KEY
478 #define BTRFS_QGROUP_LIMIT_KEY 244
479 #endif
480
481 #ifndef BTRFS_QGROUP_RELATION_KEY
482 #define BTRFS_QGROUP_RELATION_KEY 246
483 #endif
484
485 #ifndef BTRFS_ROOT_BACKREF_KEY
486 #define BTRFS_ROOT_BACKREF_KEY 144
487 #endif
488
489 #ifndef BTRFS_SUPER_MAGIC
490 #define BTRFS_SUPER_MAGIC 0x9123683E
491 #endif
492
493 #endif // 0
494 #ifndef CGROUP_SUPER_MAGIC
495 #define CGROUP_SUPER_MAGIC 0x27e0eb
496 #endif
497
498 #ifndef CGROUP2_SUPER_MAGIC
499 #define CGROUP2_SUPER_MAGIC 0x63677270
500 #endif
501
502 #ifndef CLONE_NEWCGROUP
503 #define CLONE_NEWCGROUP 0x02000000
504 #endif
505
506 #ifndef TMPFS_MAGIC
507 #define TMPFS_MAGIC 0x01021994
508 #endif
509
510 #ifndef MQUEUE_MAGIC
511 #define MQUEUE_MAGIC 0x19800202
512 #endif
513
514 #ifndef SECURITYFS_MAGIC
515 #define SECURITYFS_MAGIC 0x73636673
516 #endif
517
518 #ifndef TRACEFS_MAGIC
519 #define TRACEFS_MAGIC 0x74726163
520 #endif
521
522 #ifndef BPF_FS_MAGIC
523 #define BPF_FS_MAGIC 0xcafe4a11
524 #endif
525
526 #ifndef OCFS2_SUPER_MAGIC
527 #define OCFS2_SUPER_MAGIC 0x7461636f
528 #endif
529
530 #ifndef MS_MOVE
531 #define MS_MOVE 8192
532 #endif
533
534 #ifndef MS_REC
535 #define MS_REC 16384
536 #endif
537
538 #ifndef MS_PRIVATE
539 #define MS_PRIVATE      (1<<18)
540 #endif
541
542 #ifndef MS_REC
543 #define MS_REC          (1<<19)
544 #endif
545
546 #ifndef MS_SHARED
547 #define MS_SHARED       (1<<20)
548 #endif
549
550 #ifndef MS_RELATIME
551 #define MS_RELATIME     (1<<21)
552 #endif
553
554 #ifndef MS_KERNMOUNT
555 #define MS_KERNMOUNT    (1<<22)
556 #endif
557
558 #ifndef MS_I_VERSION
559 #define MS_I_VERSION    (1<<23)
560 #endif
561
562 #ifndef MS_STRICTATIME
563 #define MS_STRICTATIME  (1<<24)
564 #endif
565
566 #ifndef MS_LAZYTIME
567 #define MS_LAZYTIME     (1<<25)
568 #endif
569
570 #ifndef SCM_SECURITY
571 #define SCM_SECURITY 0x03
572 #endif
573
574 #ifndef PR_SET_NO_NEW_PRIVS
575 #define PR_SET_NO_NEW_PRIVS 38
576 #endif
577
578 #ifndef PR_SET_CHILD_SUBREAPER
579 #define PR_SET_CHILD_SUBREAPER 36
580 #endif
581
582 #ifndef PR_SET_MM_ARG_START
583 #define PR_SET_MM_ARG_START 8
584 #endif
585
586 #ifndef PR_SET_MM_ARG_END
587 #define PR_SET_MM_ARG_END 9
588 #endif
589
590 #ifndef PR_SET_MM_ENV_START
591 #define PR_SET_MM_ENV_START 10
592 #endif
593
594 #ifndef PR_SET_MM_ENV_END
595 #define PR_SET_MM_ENV_END 11
596 #endif
597
598 #ifndef EFIVARFS_MAGIC
599 #define EFIVARFS_MAGIC 0xde5e81e4
600 #endif
601
602 #ifndef SMACK_MAGIC
603 #define SMACK_MAGIC 0x43415d53
604 #endif
605
606 #ifndef DM_DEFERRED_REMOVE
607 #define DM_DEFERRED_REMOVE (1 << 17)
608 #endif
609
610 #ifndef MAX_HANDLE_SZ
611 #define MAX_HANDLE_SZ 128
612 #endif
613
614 #if ! HAVE_SECURE_GETENV
615 #  if HAVE___SECURE_GETENV
616 #    define secure_getenv __secure_getenv
617 #  else
618 #    error "neither secure_getenv nor __secure_getenv are available"
619 #  endif
620 #endif
621
622 #ifndef CIFS_MAGIC_NUMBER
623 #  define CIFS_MAGIC_NUMBER 0xFF534D42
624 #endif
625
626 #ifndef TFD_TIMER_CANCEL_ON_SET
627 #  define TFD_TIMER_CANCEL_ON_SET (1 << 1)
628 #endif
629
630 #ifndef SO_REUSEPORT
631 #  define SO_REUSEPORT 15
632 #endif
633
634 #ifndef SO_PEERGROUPS
635 #  define SO_PEERGROUPS 59
636 #endif
637
638 #ifndef EVIOCREVOKE
639 #  define EVIOCREVOKE _IOW('E', 0x91, int)
640 #endif
641
642 #ifndef EVIOCSMASK
643
644 struct input_mask {
645         uint32_t type;
646         uint32_t codes_size;
647         uint64_t codes_ptr;
648 };
649
650 #define EVIOCSMASK _IOW('E', 0x93, struct input_mask)
651 #endif
652
653 #ifndef DRM_IOCTL_SET_MASTER
654 #  define DRM_IOCTL_SET_MASTER _IO('d', 0x1e)
655 #endif
656
657 #ifndef DRM_IOCTL_DROP_MASTER
658 #  define DRM_IOCTL_DROP_MASTER _IO('d', 0x1f)
659 #endif
660
661 /* The precise definition of __O_TMPFILE is arch specific; use the
662  * values defined by the kernel (note: some are hexa, some are octal,
663  * duplicated as-is from the kernel definitions):
664  * - alpha, parisc, sparc: each has a specific value;
665  * - others: they use the "generic" value.
666  */
667
668 #ifndef __O_TMPFILE
669 #if defined(__alpha__)
670 #define __O_TMPFILE     0100000000
671 #elif defined(__parisc__) || defined(__hppa__)
672 #define __O_TMPFILE     0400000000
673 #elif defined(__sparc__) || defined(__sparc64__)
674 #define __O_TMPFILE     0x2000000
675 #else
676 #define __O_TMPFILE     020000000
677 #endif
678 #endif
679
680 /* a horrid kludge trying to make sure that this will fail on old kernels */
681 #ifndef O_TMPFILE
682 #define O_TMPFILE (__O_TMPFILE | O_DIRECTORY)
683 #endif
684
685 #if !HAVE_LO_FLAGS_PARTSCAN
686 #define LO_FLAGS_PARTSCAN 8
687 #endif
688
689 #ifndef LOOP_CTL_REMOVE
690 #define LOOP_CTL_REMOVE 0x4C81
691 #endif
692
693 #ifndef LOOP_CTL_GET_FREE
694 #define LOOP_CTL_GET_FREE 0x4C82
695 #endif
696
697 #if !HAVE_IFLA_INET6_ADDR_GEN_MODE
698 #define IFLA_INET6_UNSPEC 0
699 #define IFLA_INET6_FLAGS 1
700 #define IFLA_INET6_CONF 2
701 #define IFLA_INET6_STATS 3
702 #define IFLA_INET6_MCAST 4
703 #define IFLA_INET6_CACHEINFO 5
704 #define IFLA_INET6_ICMP6STATS 6
705 #define IFLA_INET6_TOKEN 7
706 #define IFLA_INET6_ADDR_GEN_MODE 8
707 #define __IFLA_INET6_MAX 9
708
709 #define IFLA_INET6_MAX (__IFLA_INET6_MAX - 1)
710
711 #define IN6_ADDR_GEN_MODE_EUI64 0
712 #define IN6_ADDR_GEN_MODE_NONE 1
713 #endif
714
715 #if !HAVE_IN6_ADDR_GEN_MODE_STABLE_PRIVACY
716 #define IN6_ADDR_GEN_MODE_STABLE_PRIVACY 2
717 #endif
718
719 #if !HAVE_IFLA_MACVLAN_FLAGS
720 #define IFLA_MACVLAN_UNSPEC 0
721 #define IFLA_MACVLAN_MODE 1
722 #define IFLA_MACVLAN_FLAGS 2
723 #define __IFLA_MACVLAN_MAX 3
724
725 #define IFLA_MACVLAN_MAX (__IFLA_MACVLAN_MAX - 1)
726 #endif
727
728 #if !HAVE_IFLA_IPVLAN_FLAGS
729 #define IFLA_IPVLAN_UNSPEC 0
730 #define IFLA_IPVLAN_MODE 1
731 #define IFLA_IPVLAN_FLAGS 2
732 #define __IFLA_IPVLAN_MAX 3
733
734 #define IFLA_IPVLAN_MAX (__IFLA_IPVLAN_MAX - 1)
735
736 #define IPVLAN_MODE_L2 0
737 #define IPVLAN_MODE_L3 1
738 #define IPVLAN_MODE_L3S 2
739 #define IPVLAN_MAX 2
740 #endif
741
742 #if !HAVE_IPVLAN_F_PRIVATE
743 #define IPVLAN_F_PRIVATE 0x01
744 #define IPVLAN_F_VEPA    0x02
745 #define __IPVLAN_F_PRIVATE_MAX 3
746
747 #define HAVE_IPVLAN_F_PRIVATE_MAX (__HAVE_IPVLAN_F_PRIVATE_MAX - 1)
748 #endif
749
750 #if !HAVE_IFLA_VTI_REMOTE
751 #define IFLA_VTI_UNSPEC 0
752 #define IFLA_VTI_LINK 1
753 #define IFLA_VTI_IKEY 2
754 #define IFLA_VTI_OKEY 3
755 #define IFLA_VTI_LOCAL 4
756 #define IFLA_VTI_REMOTE 5
757 #define __IFLA_VTI_MAX 6
758
759 #define IFLA_VTI_MAX (__IFLA_VTI_MAX - 1)
760 #endif
761
762 #if !HAVE_IFLA_PHYS_PORT_ID
763 #define IFLA_EXT_MASK 29
764 #undef IFLA_PROMISCUITY
765 #define IFLA_PROMISCUITY 30
766 #define IFLA_NUM_TX_QUEUES 31
767 #define IFLA_NUM_RX_QUEUES 32
768 #define IFLA_CARRIER 33
769 #define IFLA_PHYS_PORT_ID 34
770 #define __IFLA_MAX 35
771
772 #define IFLA_MAX (__IFLA_MAX - 1)
773 #endif
774
775 #if !HAVE_IFLA_BOND_AD_INFO
776 #define IFLA_BOND_UNSPEC 0
777 #define IFLA_BOND_MODE 1
778 #define IFLA_BOND_ACTIVE_SLAVE 2
779 #define IFLA_BOND_MIIMON 3
780 #define IFLA_BOND_UPDELAY 4
781 #define IFLA_BOND_DOWNDELAY 5
782 #define IFLA_BOND_USE_CARRIER 6
783 #define IFLA_BOND_ARP_INTERVAL 7
784 #define IFLA_BOND_ARP_IP_TARGET 8
785 #define IFLA_BOND_ARP_VALIDATE 9
786 #define IFLA_BOND_ARP_ALL_TARGETS 10
787 #define IFLA_BOND_PRIMARY 11
788 #define IFLA_BOND_PRIMARY_RESELECT 12
789 #define IFLA_BOND_FAIL_OVER_MAC 13
790 #define IFLA_BOND_XMIT_HASH_POLICY 14
791 #define IFLA_BOND_RESEND_IGMP 15
792 #define IFLA_BOND_NUM_PEER_NOTIF 16
793 #define IFLA_BOND_ALL_SLAVES_ACTIVE 17
794 #define IFLA_BOND_MIN_LINKS 18
795 #define IFLA_BOND_LP_INTERVAL 19
796 #define IFLA_BOND_PACKETS_PER_SLAVE 20
797 #define IFLA_BOND_AD_LACP_RATE 21
798 #define IFLA_BOND_AD_SELECT 22
799 #define IFLA_BOND_AD_INFO 23
800 #define __IFLA_BOND_MAX 24
801
802 #define IFLA_BOND_MAX   (__IFLA_BOND_MAX - 1)
803 #endif
804
805 #if !HAVE_IFLA_VLAN_PROTOCOL
806 #define IFLA_VLAN_UNSPEC 0
807 #define IFLA_VLAN_ID 1
808 #define IFLA_VLAN_FLAGS 2
809 #define IFLA_VLAN_EGRESS_QOS 3
810 #define IFLA_VLAN_INGRESS_QOS 4
811 #define IFLA_VLAN_PROTOCOL 5
812 #define __IFLA_VLAN_MAX 6
813
814 #define IFLA_VLAN_MAX   (__IFLA_VLAN_MAX - 1)
815 #endif
816
817 #if !HAVE_IFLA_VXLAN_GPE
818 #define IFLA_VXLAN_UNSPEC 0
819 #define IFLA_VXLAN_ID 1
820 #define IFLA_VXLAN_GROUP 2
821 #define IFLA_VXLAN_LINK 3
822 #define IFLA_VXLAN_LOCAL 4
823 #define IFLA_VXLAN_TTL 5
824 #define IFLA_VXLAN_TOS 6
825 #define IFLA_VXLAN_LEARNING 7
826 #define IFLA_VXLAN_AGEING 8
827 #define IFLA_VXLAN_LIMIT 9
828 #define IFLA_VXLAN_PORT_RANGE 10
829 #define IFLA_VXLAN_PROXY 11
830 #define IFLA_VXLAN_RSC 12
831 #define IFLA_VXLAN_L2MISS 13
832 #define IFLA_VXLAN_L3MISS 14
833 #define IFLA_VXLAN_PORT 15
834 #define IFLA_VXLAN_GROUP6 16
835 #define IFLA_VXLAN_LOCAL6 17
836 #define IFLA_VXLAN_UDP_CSUM 18
837 #define IFLA_VXLAN_UDP_ZERO_CSUM6_TX 19
838 #define IFLA_VXLAN_UDP_ZERO_CSUM6_RX 20
839 #define IFLA_VXLAN_REMCSUM_TX 21
840 #define IFLA_VXLAN_REMCSUM_RX 22
841 #define IFLA_VXLAN_GBP 23
842 #define IFLA_VXLAN_REMCSUM_NOPARTIAL 24
843 #define IFLA_VXLAN_COLLECT_METADATA 25
844 #define IFLA_VXLAN_LABEL 26
845 #define IFLA_VXLAN_GPE 27
846
847 #define __IFLA_VXLAN_MAX 28
848
849 #define IFLA_VXLAN_MAX  (__IFLA_VXLAN_MAX - 1)
850 #endif
851
852 #if !HAVE_IFLA_GENEVE_LABEL
853 #define IFLA_GENEVE_UNSPEC 0
854 #define IFLA_GENEVE_ID 1
855 #define IFLA_GENEVE_REMOTE 2
856 #define IFLA_GENEVE_TTL 3
857 #define IFLA_GENEVE_TOS 4
858 #define IFLA_GENEVE_PORT 5
859 #define IFLA_GENEVE_COLLECT_METADATA 6
860 #define IFLA_GENEVE_REMOTE6 7
861 #define IFLA_GENEVE_UDP_CSUM 8
862 #define IFLA_GENEVE_UDP_ZERO_CSUM6_TX 9
863 #define IFLA_GENEVE_UDP_ZERO_CSUM6_RX 10
864 #define IFLA_GENEVE_LABEL 11
865
866 #define __IFLA_GENEVE_MAX 12
867
868 #define IFLA_GENEVE_MAX  (__IFLA_GENEVE_MAX - 1)
869 #endif
870
871 #if !HAVE_IFLA_IPTUN_ENCAP_DPORT
872 #define IFLA_IPTUN_UNSPEC 0
873 #define IFLA_IPTUN_LINK 1
874 #define IFLA_IPTUN_LOCAL 2
875 #define IFLA_IPTUN_REMOTE 3
876 #define IFLA_IPTUN_TTL 4
877 #define IFLA_IPTUN_TOS 5
878 #define IFLA_IPTUN_ENCAP_LIMIT 6
879 #define IFLA_IPTUN_FLOWINFO 7
880 #define IFLA_IPTUN_FLAGS 8
881 #define IFLA_IPTUN_PROTO 9
882 #define IFLA_IPTUN_PMTUDISC 10
883 #define IFLA_IPTUN_6RD_PREFIX 11
884 #define IFLA_IPTUN_6RD_RELAY_PREFIX 12
885 #define IFLA_IPTUN_6RD_PREFIXLEN 13
886 #define IFLA_IPTUN_6RD_RELAY_PREFIXLEN 14
887 #define IFLA_IPTUN_ENCAP_TYPE 15
888 #define IFLA_IPTUN_ENCAP_FLAGS 16
889 #define IFLA_IPTUN_ENCAP_SPORT 17
890 #define IFLA_IPTUN_ENCAP_DPORT 18
891
892 #define __IFLA_IPTUN_MAX 19
893
894 #define IFLA_IPTUN_MAX  (__IFLA_IPTUN_MAX - 1)
895 #endif
896
897 #if !HAVE_IFLA_GRE_ENCAP_DPORT
898 #define IFLA_GRE_UNSPEC 0
899 #define IFLA_GRE_LINK 1
900 #define IFLA_GRE_IFLAGS 2
901 #define IFLA_GRE_OFLAGS 3
902 #define IFLA_GRE_IKEY 4
903 #define IFLA_GRE_OKEY 5
904 #define IFLA_GRE_LOCAL 6
905 #define IFLA_GRE_REMOTE 7
906 #define IFLA_GRE_TTL 8
907 #define IFLA_GRE_TOS 9
908 #define IFLA_GRE_PMTUDISC 10
909 #define IFLA_GRE_ENCAP_LIMIT 11
910 #define IFLA_GRE_FLOWINFO 12
911 #define IFLA_GRE_FLAGS 13
912 #define IFLA_GRE_ENCAP_TYPE 14
913 #define IFLA_GRE_ENCAP_FLAGS 15
914 #define IFLA_GRE_ENCAP_SPORT 16
915 #define IFLA_GRE_ENCAP_DPORT 17
916
917 #define __IFLA_GRE_MAX 18
918
919 #define IFLA_GRE_MAX  (__IFLA_GRE_MAX - 1)
920 #endif
921
922 #if !HAVE_IFLA_BRIDGE_VLAN_INFO
923 #define IFLA_BRIDGE_FLAGS 0
924 #define IFLA_BRIDGE_MODE 1
925 #define IFLA_BRIDGE_VLAN_INFO 2
926 #define __IFLA_BRIDGE_MAX 3
927
928 #define IFLA_BRIDGE_MAX (__IFLA_BRIDGE_MAX - 1)
929 #endif
930
931 #ifndef BRIDGE_VLAN_INFO_RANGE_BEGIN
932 #define BRIDGE_VLAN_INFO_RANGE_BEGIN (1<<3) /* VLAN is start of vlan range */
933 #endif
934
935 #ifndef BRIDGE_VLAN_INFO_RANGE_END
936 #define BRIDGE_VLAN_INFO_RANGE_END (1<<4) /* VLAN is end of vlan range */
937 #endif
938
939 #if !HAVE_IFLA_BR_VLAN_DEFAULT_PVID
940 #define IFLA_BR_UNSPEC 0
941 #define IFLA_BR_FORWARD_DELAY 1
942 #define IFLA_BR_HELLO_TIME 2
943 #define IFLA_BR_MAX_AGE 3
944 #define IFLA_BR_AGEING_TIME 4
945 #define IFLA_BR_STP_STATE 5
946 #define IFLA_BR_PRIORITY 6
947 #define IFLA_BR_VLAN_FILTERING 7
948 #define IFLA_BR_VLAN_PROTOCOL 8
949 #define IFLA_BR_GROUP_FWD_MASK 9
950 #define IFLA_BR_ROOT_ID 10
951 #define IFLA_BR_BRIDGE_ID 11
952 #define IFLA_BR_ROOT_PORT 12
953 #define IFLA_BR_ROOT_PATH_COST 13
954 #define IFLA_BR_TOPOLOGY_CHANGE 14
955 #define IFLA_BR_TOPOLOGY_CHANGE_DETECTED 15
956 #define IFLA_BR_HELLO_TIMER 16
957 #define IFLA_BR_TCN_TIMER 17
958 #define IFLA_BR_TOPOLOGY_CHANGE_TIMER 18
959 #define IFLA_BR_GC_TIMER 19
960 #define IFLA_BR_GROUP_ADDR 20
961 #define IFLA_BR_FDB_FLUSH 21
962 #define IFLA_BR_MCAST_ROUTER 22
963 #define IFLA_BR_MCAST_SNOOPING 23
964 #define IFLA_BR_MCAST_QUERY_USE_IFADDR 24
965 #define IFLA_BR_MCAST_QUERIER 25
966 #define IFLA_BR_MCAST_HASH_ELASTICITY 26
967 #define IFLA_BR_MCAST_HASH_MAX 27
968 #define IFLA_BR_MCAST_LAST_MEMBER_CNT 28
969 #define IFLA_BR_MCAST_STARTUP_QUERY_CNT 29
970 #define IFLA_BR_MCAST_LAST_MEMBER_INTVL 30
971 #define IFLA_BR_MCAST_MEMBERSHIP_INTVL 31
972 #define IFLA_BR_MCAST_QUERIER_INTVL 32
973 #define IFLA_BR_MCAST_QUERY_INTVL 33
974 #define IFLA_BR_MCAST_QUERY_RESPONSE_INTVL 34
975 #define IFLA_BR_MCAST_STARTUP_QUERY_INTVL 35
976 #define IFLA_BR_NF_CALL_IPTABLES 36
977 #define IFLA_BR_NF_CALL_IP6TABLES 37
978 #define IFLA_BR_NF_CALL_ARPTABLES 38
979 #define IFLA_BR_VLAN_DEFAULT_PVID 39
980 #define __IFLA_BR_MAX 40
981
982 #define IFLA_BR_MAX (__IFLA_BR_MAX - 1)
983 #endif
984
985 #if !HAVE_IFLA_BRPORT_LEARNING_SYNC
986 #define IFLA_BRPORT_UNSPEC 0
987 #define IFLA_BRPORT_STATE 1
988 #define IFLA_BRPORT_PRIORITY 2
989 #define IFLA_BRPORT_COST 3
990 #define IFLA_BRPORT_MODE 4
991 #define IFLA_BRPORT_GUARD 5
992 #define IFLA_BRPORT_PROTECT 6
993 #define IFLA_BRPORT_FAST_LEAVE 7
994 #define IFLA_BRPORT_LEARNING 8
995 #define IFLA_BRPORT_UNICAST_FLOOD 9
996 #define IFLA_BRPORT_LEARNING_SYNC 11
997 #define __IFLA_BRPORT_MAX 12
998
999 #define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1)
1000 #endif
1001
1002 #if !HAVE_FRA_UID_RANGE
1003 #define FRA_UNSPEC 0
1004 #define FRA_DST 1
1005 #define FRA_SRC 2
1006 #define FRA_IIFNAME 3
1007 #define FRA_GOTO 4
1008 #define FRA_UNUSED2 5
1009 #define FRA_PRIORITY 6
1010 #define FRA_UNUSED3 7
1011 #define FRA_UNUSED4 8
1012 #define FRA_UNUSED5 9
1013 #define FRA_FWMARK 10
1014 #define FRA_FLOW 11
1015 #define FRA_TUN_ID 12
1016 #define FRA_SUPPRESS_IFGROUP 13
1017 #define FRA_SUPPRESS_PREFIXLEN 14
1018 #define FRA_TABLE 15
1019 #define FRA_FWMASK 16
1020 #define FRA_OIFNAME 17
1021 #define FRA_PAD 18
1022 #define FRA_L3MDEV 19
1023 #define FRA_UID_RANGE 20
1024 #define __FRA_MAX 12
1025
1026 #define FRA_MAX (__FRA_MAX - 1)
1027 #endif
1028
1029 #if !HAVE_IFLA_BRPORT_PROXYARP
1030 #define IFLA_BRPORT_PROXYARP 10
1031 #endif
1032
1033 #if !HAVE_IFLA_VRF_TABLE
1034 #define IFLA_VRF_TABLE 1
1035 #endif
1036
1037 #if !HAVE_VXCAN_INFO_PEER
1038 #define VXCAN_INFO_PEER 1
1039 #endif
1040
1041 #if !HAVE_NDA_IFINDEX
1042 #define NDA_UNSPEC 0
1043 #define NDA_DST 1
1044 #define NDA_LLADDR 2
1045 #define NDA_CACHEINFO 3
1046 #define NDA_PROBES 4
1047 #define NDA_VLAN 5
1048 #define NDA_PORT 6
1049 #define NDA_VNI 7
1050 #define NDA_IFINDEX 8
1051 #define __NDA_MAX 9
1052
1053 #define NDA_MAX (__NDA_MAX - 1)
1054 #endif
1055
1056 #ifndef RTA_PREF
1057 #define RTA_PREF 20
1058 #endif
1059
1060 #ifndef RTAX_QUICKACK
1061 #define RTAX_QUICKACK 15
1062 #endif
1063
1064 #ifndef IPV6_UNICAST_IF
1065 #define IPV6_UNICAST_IF 76
1066 #endif
1067
1068 #ifndef IPV6_MIN_MTU
1069 #define IPV6_MIN_MTU 1280
1070 #endif
1071
1072 #ifndef IFF_MULTI_QUEUE
1073 #define IFF_MULTI_QUEUE 0x100
1074 #endif
1075
1076 #ifndef IFF_LOWER_UP
1077 #define IFF_LOWER_UP 0x10000
1078 #endif
1079
1080 #ifndef IFF_DORMANT
1081 #define IFF_DORMANT 0x20000
1082 #endif
1083
1084 #ifndef BOND_XMIT_POLICY_ENCAP23
1085 #define BOND_XMIT_POLICY_ENCAP23 3
1086 #endif
1087
1088 #ifndef BOND_XMIT_POLICY_ENCAP34
1089 #define BOND_XMIT_POLICY_ENCAP34 4
1090 #endif
1091
1092 #ifndef NET_ADDR_RANDOM
1093 #  define NET_ADDR_RANDOM 1
1094 #endif
1095
1096 #ifndef NET_NAME_UNKNOWN
1097 #  define NET_NAME_UNKNOWN 0
1098 #endif
1099
1100 #ifndef NET_NAME_ENUM
1101 #  define NET_NAME_ENUM 1
1102 #endif
1103
1104 #ifndef NET_NAME_PREDICTABLE
1105 #  define NET_NAME_PREDICTABLE 2
1106 #endif
1107
1108 #ifndef NET_NAME_USER
1109 #  define NET_NAME_USER 3
1110 #endif
1111
1112 #ifndef NET_NAME_RENAMED
1113 #  define NET_NAME_RENAMED 4
1114 #endif
1115
1116 #ifndef BPF_XOR
1117 #  define BPF_XOR 0xa0
1118 #endif
1119
1120 /* Note that LOOPBACK_IFINDEX is currently not exported by the
1121  * kernel/glibc, but hardcoded internally by the kernel.  However, as
1122  * it is exported to userspace indirectly via rtnetlink and the
1123  * ioctls, and made use of widely we define it here too, in a way that
1124  * is compatible with the kernel's internal definition. */
1125 #ifndef LOOPBACK_IFINDEX
1126 #define LOOPBACK_IFINDEX 1
1127 #endif
1128
1129 #if !HAVE_IFA_FLAGS
1130 #define IFA_FLAGS 8
1131 #endif
1132
1133 #ifndef IFA_F_MANAGETEMPADDR
1134 #define IFA_F_MANAGETEMPADDR 0x100
1135 #endif
1136
1137 #ifndef IFA_F_NOPREFIXROUTE
1138 #define IFA_F_NOPREFIXROUTE 0x200
1139 #endif
1140
1141 #ifndef MAX_AUDIT_MESSAGE_LENGTH
1142 #define MAX_AUDIT_MESSAGE_LENGTH 8970
1143 #endif
1144
1145 #ifndef AUDIT_NLGRP_MAX
1146 #define AUDIT_NLGRP_READLOG 1
1147 #endif
1148
1149 #ifndef CAP_MAC_OVERRIDE
1150 #define CAP_MAC_OVERRIDE 32
1151 #endif
1152
1153 #ifndef CAP_MAC_ADMIN
1154 #define CAP_MAC_ADMIN 33
1155 #endif
1156
1157 #ifndef CAP_SYSLOG
1158 #define CAP_SYSLOG 34
1159 #endif
1160
1161 #ifndef CAP_WAKE_ALARM
1162 #define CAP_WAKE_ALARM 35
1163 #endif
1164
1165 #ifndef CAP_BLOCK_SUSPEND
1166 #define CAP_BLOCK_SUSPEND 36
1167 #endif
1168
1169 #ifndef CAP_AUDIT_READ
1170 #define CAP_AUDIT_READ 37
1171 #endif
1172
1173 #if 0 /// UNNEEDED by elogind
1174 #ifndef RENAME_NOREPLACE
1175 #define RENAME_NOREPLACE (1 << 0)
1176 #endif
1177
1178 #ifndef KCMP_FILE
1179 #define KCMP_FILE 0
1180 #endif
1181
1182 #ifndef INPUT_PROP_POINTING_STICK
1183 #define INPUT_PROP_POINTING_STICK 0x05
1184 #endif
1185
1186 #ifndef INPUT_PROP_ACCELEROMETER
1187 #define INPUT_PROP_ACCELEROMETER  0x06
1188 #endif
1189
1190 #ifndef BTN_DPAD_UP
1191 #define BTN_DPAD_UP 0x220
1192 #define BTN_DPAD_RIGHT 0x223
1193 #endif
1194
1195 #ifndef KEY_ALS_TOGGLE
1196 #define KEY_ALS_TOGGLE 0x230
1197 #endif
1198 #endif // 0
1199
1200 #if ! HAVE_KEY_SERIAL_T
1201 typedef int32_t key_serial_t;
1202 #endif
1203
1204 #ifndef KEYCTL_JOIN_SESSION_KEYRING
1205 #define KEYCTL_JOIN_SESSION_KEYRING 1
1206 #endif
1207
1208 #ifndef KEYCTL_CHOWN
1209 #define KEYCTL_CHOWN 4
1210 #endif
1211
1212 #ifndef KEYCTL_SETPERM
1213 #define KEYCTL_SETPERM 5
1214 #endif
1215
1216 #ifndef KEYCTL_DESCRIBE
1217 #define KEYCTL_DESCRIBE 6
1218 #endif
1219
1220 #ifndef KEYCTL_LINK
1221 #define KEYCTL_LINK 8
1222 #endif
1223
1224 #ifndef KEYCTL_READ
1225 #define KEYCTL_READ 11
1226 #endif
1227
1228 #ifndef KEYCTL_SET_TIMEOUT
1229 #define KEYCTL_SET_TIMEOUT 15
1230 #endif
1231
1232 #ifndef KEY_POS_VIEW
1233 #define KEY_POS_VIEW    0x01000000
1234 #define KEY_POS_READ    0x02000000
1235 #define KEY_POS_WRITE   0x04000000
1236 #define KEY_POS_SEARCH  0x08000000
1237 #define KEY_POS_LINK    0x10000000
1238 #define KEY_POS_SETATTR 0x20000000
1239
1240 #define KEY_USR_VIEW    0x00010000
1241 #define KEY_USR_READ    0x00020000
1242 #define KEY_USR_WRITE   0x00040000
1243 #define KEY_USR_SEARCH  0x00080000
1244 #define KEY_USR_LINK    0x00100000
1245 #define KEY_USR_SETATTR 0x00200000
1246
1247 #define KEY_GRP_VIEW    0x00000100
1248 #define KEY_GRP_READ    0x00000200
1249 #define KEY_GRP_WRITE   0x00000400
1250 #define KEY_GRP_SEARCH  0x00000800
1251 #define KEY_GRP_LINK    0x00001000
1252 #define KEY_GRP_SETATTR 0x00002000
1253
1254 #define KEY_OTH_VIEW    0x00000001
1255 #define KEY_OTH_READ    0x00000002
1256 #define KEY_OTH_WRITE   0x00000004
1257 #define KEY_OTH_SEARCH  0x00000008
1258 #define KEY_OTH_LINK    0x00000010
1259 #define KEY_OTH_SETATTR 0x00000020
1260 #endif
1261
1262 #ifndef KEY_SPEC_USER_KEYRING
1263 #define KEY_SPEC_USER_KEYRING -4
1264 #endif
1265
1266 #ifndef KEY_SPEC_SESSION_KEYRING
1267 #define KEY_SPEC_SESSION_KEYRING -3
1268 #endif
1269
1270 #ifndef PR_CAP_AMBIENT
1271 #define PR_CAP_AMBIENT 47
1272 #endif
1273
1274 #ifndef PR_CAP_AMBIENT_IS_SET
1275 #define PR_CAP_AMBIENT_IS_SET 1
1276 #endif
1277
1278 #ifndef PR_CAP_AMBIENT_RAISE
1279 #define PR_CAP_AMBIENT_RAISE 2
1280 #endif
1281
1282 #ifndef PR_CAP_AMBIENT_CLEAR_ALL
1283 #define PR_CAP_AMBIENT_CLEAR_ALL 4
1284 #endif
1285
1286 /* The following two defines are actually available in the kernel headers for longer, but we define them here anyway,
1287  * since that makes it easier to use them in conjunction with the glibc net/if.h header which conflicts with
1288  * linux/if.h. */
1289 #ifndef IF_OPER_UNKNOWN
1290 #define IF_OPER_UNKNOWN 0
1291 #endif
1292
1293 #ifndef IF_OPER_UP
1294 #define IF_OPER_UP 6
1295
1296 #if ! HAVE_CHAR32_T
1297 #define char32_t uint32_t
1298 #endif
1299
1300 #if ! HAVE_CHAR16_T
1301 #define char16_t uint16_t
1302 #endif
1303
1304 #ifndef ETHERTYPE_LLDP
1305 #define ETHERTYPE_LLDP 0x88cc
1306 #endif
1307
1308 #ifndef IFA_F_MCAUTOJOIN
1309 #define IFA_F_MCAUTOJOIN 0x400
1310 #endif
1311
1312 #if 0 /// UNNEEDED by elogind
1313 #if ! HAVE_STRUCT_ETHTOOL_LINK_SETTINGS
1314
1315 #define ETHTOOL_GLINKSETTINGS   0x0000004c /* Get ethtool_link_settings */
1316 #define ETHTOOL_SLINKSETTINGS   0x0000004d /* Set ethtool_link_settings */
1317
1318 struct ethtool_link_settings {
1319         __u32   cmd;
1320         __u32   speed;
1321         __u8    duplex;
1322         __u8    port;
1323         __u8    phy_address;
1324         __u8    autoneg;
1325         __u8    mdio_support;
1326         __u8    eth_tp_mdix;
1327         __u8    eth_tp_mdix_ctrl;
1328         __s8    link_mode_masks_nwords;
1329         __u32   reserved[8];
1330         __u32   link_mode_masks[0];
1331         /* layout of link_mode_masks fields:
1332          * __u32 map_supported[link_mode_masks_nwords];
1333          * __u32 map_advertising[link_mode_masks_nwords];
1334          * __u32 map_lp_advertising[link_mode_masks_nwords];
1335          */
1336 };
1337
1338 #endif
1339 #endif // 0
1340
1341 #if ! HAVE_STRUCT_FIB_RULE_UID_RANGE
1342
1343 struct fib_rule_uid_range {
1344         __u32 start;
1345         __u32 end;
1346 };
1347
1348 #endif
1349
1350 #endif
1351
1352 #ifndef SOL_ALG
1353 #define SOL_ALG 279
1354 #endif
1355
1356 #ifndef AF_VSOCK
1357 #define AF_VSOCK 40
1358 #endif
1359
1360 #ifndef EXT4_IOC_RESIZE_FS
1361 #  define EXT4_IOC_RESIZE_FS              _IOW('f', 16, __u64)
1362 #endif
1363
1364 #ifndef NSFS_MAGIC
1365 #define NSFS_MAGIC 0x6e736673
1366 #endif
1367
1368 #ifndef NS_GET_NSTYPE
1369 #define NS_GET_NSTYPE _IO(0xb7, 0x3)
1370 #endif
1371
1372 #ifndef FALLOC_FL_KEEP_SIZE
1373 #define FALLOC_FL_KEEP_SIZE 0x01
1374 #endif
1375
1376 #ifndef FALLOC_FL_PUNCH_HOLE
1377 #define FALLOC_FL_PUNCH_HOLE 0x02
1378 #endif
1379
1380 #include "missing_syscall.h"