]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
basic/linux: update kernel headers from v6.10-rc3
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 28 May 2024 02:04:47 +0000 (11:04 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 19 Jun 2024 17:35:35 +0000 (02:35 +0900)
This also
- merges basic/linux and shared/linux,
- moves BPF_JUMP_A() to basic/missing_bpf.h,
- copies from usrspace kernel headers directory generated by 'make headers',
  rather than copying from kernel tree,
- copies const.h into our tree to reduce change in ethtool.h,
- copies auto_fs.h into our tree to reduce change in auto_dev-ioctl.h.

44 files changed:
src/basic/linux/README
src/basic/linux/auto_dev-ioctl.h [moved from src/shared/linux/auto_dev-ioctl.h with 98% similarity]
src/basic/linux/auto_fs.h [new file with mode: 0644]
src/basic/linux/batman_adv.h
src/basic/linux/bpf.h [moved from src/shared/linux/bpf.h with 94% similarity]
src/basic/linux/bpf_common.h [moved from src/shared/linux/bpf_common.h with 100% similarity]
src/basic/linux/bpf_insn.h [moved from src/shared/linux/bpf_insn.h with 97% similarity]
src/basic/linux/btrfs.h
src/basic/linux/btrfs_tree.h
src/basic/linux/can/netlink.h
src/basic/linux/can/vxcan.h
src/basic/linux/cfm_bridge.h
src/basic/linux/const.h [new file with mode: 0644]
src/basic/linux/dm-ioctl.h [moved from src/shared/linux/dm-ioctl.h with 99% similarity]
src/basic/linux/ethtool.h [moved from src/shared/linux/ethtool.h with 92% similarity]
src/basic/linux/fou.h
src/basic/linux/genetlink.h
src/basic/linux/if.h
src/basic/linux/if_addr.h
src/basic/linux/if_bridge.h
src/basic/linux/if_ether.h
src/basic/linux/if_link.h
src/basic/linux/if_macsec.h
src/basic/linux/if_tun.h
src/basic/linux/if_tunnel.h
src/basic/linux/in.h
src/basic/linux/in6.h
src/basic/linux/ipv6_route.h
src/basic/linux/l2tp.h
src/basic/linux/libc-compat.h
src/basic/linux/magic.h
src/basic/linux/mrp_bridge.h
src/basic/linux/netdevice.h
src/basic/linux/netfilter/nfnetlink.h
src/basic/linux/netlink.h
src/basic/linux/nexthop.h
src/basic/linux/nl80211.h
src/basic/linux/rtnetlink.h
src/basic/linux/stddef.h
src/basic/linux/update.sh
src/basic/missing_bpf.h [new file with mode: 0644]
src/core/bpf-devices.c
src/shared/linux/README [deleted file]
src/shared/meson.build

index 790b4feb0ae2edc6f646cf2c0d5dbc1b80489942..1419051a258fe60a6e6b936e07e8922506463a57 100644 (file)
@@ -1,8 +1,6 @@
-The files in this directory are copied from current kernel master
-(b06ed1e7a2fa9b636f368a9e97c3c8877623f8b2) or WireGuard master
-(8416093498ac2c754536dad4757c5d86c9ba8809), and the following
-modifications are applied:
-- btrfs.h: drop '__user' attributes
-- if.h: drop '#include <linux/compiler.h>' and '__user' attributes
-- stddef.h: drop '#include <linux/compiler_types.h>'
-- guard linux/fs.h include to avoid conflict with glibc 2.36
+The headers in this directory are from kernel v6.10-rc1 (1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0),
+and the following modifications are applied:
+- auto_dev-ioctl.h: set AUTOFS_DEV_IOCTL_VERSION_MINOR to 0
+- btrfs.h: guard linux/fs.h include to avoid conflict with glibc 2.36
+- dm-ioctl.h: set DM_VERSION_MINOR to 27
+- ethtool.h: add casts in ethtool_cmd_speed()
similarity index 98%
rename from src/shared/linux/auto_dev-ioctl.h
rename to src/basic/linux/auto_dev-ioctl.h
index c6b7e11087053a08d1a8bc8c36a07754386fd7b6..5902a1a4c08cda57e4413f21a7e39e7b2e2c122a 100644 (file)
@@ -157,10 +157,6 @@ enum {
        AUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD,
 };
 
-#ifndef AUTOFS_IOCTL
-#define AUTOFS_IOCTL 0x93
-#endif
-
 #define AUTOFS_DEV_IOCTL_VERSION \
        _IOWR(AUTOFS_IOCTL, \
              AUTOFS_DEV_IOCTL_VERSION_CMD, struct autofs_dev_ioctl)
diff --git a/src/basic/linux/auto_fs.h b/src/basic/linux/auto_fs.h
new file mode 100644 (file)
index 0000000..6230156
--- /dev/null
@@ -0,0 +1,229 @@
+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
+/*
+ * Copyright 1997 Transmeta Corporation - All Rights Reserved
+ * Copyright 1999-2000 Jeremy Fitzhardinge <jeremy@goop.org>
+ * Copyright 2005-2006,2013,2017-2018 Ian Kent <raven@themaw.net>
+ *
+ * This file is part of the Linux kernel and is made available under
+ * the terms of the GNU General Public License, version 2, or at your
+ * option, any later version, incorporated herein by reference.
+ *
+ * ----------------------------------------------------------------------- */
+
+#ifndef _LINUX_AUTO_FS_H
+#define _LINUX_AUTO_FS_H
+
+#include <linux/types.h>
+#include <linux/limits.h>
+#include <sys/ioctl.h>
+
+#define AUTOFS_PROTO_VERSION           5
+#define AUTOFS_MIN_PROTO_VERSION       3
+#define AUTOFS_MAX_PROTO_VERSION       5
+
+#define AUTOFS_PROTO_SUBVERSION                5
+
+/*
+ * The wait_queue_token (autofs_wqt_t) is part of a structure which is passed
+ * back to the kernel via ioctl from userspace. On architectures where 32- and
+ * 64-bit userspace binaries can be executed it's important that the size of
+ * autofs_wqt_t stays constant between 32- and 64-bit Linux kernels so that we
+ * do not break the binary ABI interface by changing the structure size.
+ */
+#if defined(__ia64__) || defined(__alpha__) /* pure 64bit architectures */
+typedef unsigned long autofs_wqt_t;
+#else
+typedef unsigned int autofs_wqt_t;
+#endif
+
+/* Packet types */
+#define autofs_ptype_missing   0       /* Missing entry (mount request) */
+#define autofs_ptype_expire    1       /* Expire entry (umount request) */
+
+struct autofs_packet_hdr {
+       int proto_version;              /* Protocol version */
+       int type;                       /* Type of packet */
+};
+
+struct autofs_packet_missing {
+       struct autofs_packet_hdr hdr;
+       autofs_wqt_t wait_queue_token;
+       int len;
+       char name[NAME_MAX+1];
+};     
+
+/* v3 expire (via ioctl) */
+struct autofs_packet_expire {
+       struct autofs_packet_hdr hdr;
+       int len;
+       char name[NAME_MAX+1];
+};
+
+#define AUTOFS_IOCTL 0x93
+
+enum {
+       AUTOFS_IOC_READY_CMD = 0x60,
+       AUTOFS_IOC_FAIL_CMD,
+       AUTOFS_IOC_CATATONIC_CMD,
+       AUTOFS_IOC_PROTOVER_CMD,
+       AUTOFS_IOC_SETTIMEOUT_CMD,
+       AUTOFS_IOC_EXPIRE_CMD,
+};
+
+#define AUTOFS_IOC_READY        _IO(AUTOFS_IOCTL, AUTOFS_IOC_READY_CMD)
+#define AUTOFS_IOC_FAIL         _IO(AUTOFS_IOCTL, AUTOFS_IOC_FAIL_CMD)
+#define AUTOFS_IOC_CATATONIC    _IO(AUTOFS_IOCTL, AUTOFS_IOC_CATATONIC_CMD)
+#define AUTOFS_IOC_PROTOVER     _IOR(AUTOFS_IOCTL, \
+                                    AUTOFS_IOC_PROTOVER_CMD, int)
+#define AUTOFS_IOC_SETTIMEOUT32 _IOWR(AUTOFS_IOCTL, \
+                                     AUTOFS_IOC_SETTIMEOUT_CMD, \
+                                     compat_ulong_t)
+#define AUTOFS_IOC_SETTIMEOUT   _IOWR(AUTOFS_IOCTL, \
+                                     AUTOFS_IOC_SETTIMEOUT_CMD, \
+                                     unsigned long)
+#define AUTOFS_IOC_EXPIRE       _IOR(AUTOFS_IOCTL, \
+                                    AUTOFS_IOC_EXPIRE_CMD, \
+                                    struct autofs_packet_expire)
+
+/* autofs version 4 and later definitions */
+
+/* Mask for expire behaviour */
+#define AUTOFS_EXP_NORMAL              0x00
+#define AUTOFS_EXP_IMMEDIATE           0x01
+#define AUTOFS_EXP_LEAVES              0x02
+#define AUTOFS_EXP_FORCED              0x04
+
+#define AUTOFS_TYPE_ANY                        0U
+#define AUTOFS_TYPE_INDIRECT           1U
+#define AUTOFS_TYPE_DIRECT             2U
+#define AUTOFS_TYPE_OFFSET             4U
+
+static __inline__ void set_autofs_type_indirect(unsigned int *type)
+{
+       *type = AUTOFS_TYPE_INDIRECT;
+}
+
+static __inline__ unsigned int autofs_type_indirect(unsigned int type)
+{
+       return (type == AUTOFS_TYPE_INDIRECT);
+}
+
+static __inline__ void set_autofs_type_direct(unsigned int *type)
+{
+       *type = AUTOFS_TYPE_DIRECT;
+}
+
+static __inline__ unsigned int autofs_type_direct(unsigned int type)
+{
+       return (type == AUTOFS_TYPE_DIRECT);
+}
+
+static __inline__ void set_autofs_type_offset(unsigned int *type)
+{
+       *type = AUTOFS_TYPE_OFFSET;
+}
+
+static __inline__ unsigned int autofs_type_offset(unsigned int type)
+{
+       return (type == AUTOFS_TYPE_OFFSET);
+}
+
+static __inline__ unsigned int autofs_type_trigger(unsigned int type)
+{
+       return (type == AUTOFS_TYPE_DIRECT || type == AUTOFS_TYPE_OFFSET);
+}
+
+/*
+ * This isn't really a type as we use it to say "no type set" to
+ * indicate we want to search for "any" mount in the
+ * autofs_dev_ioctl_ismountpoint() device ioctl function.
+ */
+static __inline__ void set_autofs_type_any(unsigned int *type)
+{
+       *type = AUTOFS_TYPE_ANY;
+}
+
+static __inline__ unsigned int autofs_type_any(unsigned int type)
+{
+       return (type == AUTOFS_TYPE_ANY);
+}
+
+/* Daemon notification packet types */
+enum autofs_notify {
+       NFY_NONE,
+       NFY_MOUNT,
+       NFY_EXPIRE
+};
+
+/* Kernel protocol version 4 packet types */
+
+/* Expire entry (umount request) */
+#define autofs_ptype_expire_multi      2
+
+/* Kernel protocol version 5 packet types */
+
+/* Indirect mount missing and expire requests. */
+#define autofs_ptype_missing_indirect  3
+#define autofs_ptype_expire_indirect   4
+
+/* Direct mount missing and expire requests */
+#define autofs_ptype_missing_direct    5
+#define autofs_ptype_expire_direct     6
+
+/* v4 multi expire (via pipe) */
+struct autofs_packet_expire_multi {
+       struct autofs_packet_hdr hdr;
+       autofs_wqt_t wait_queue_token;
+       int len;
+       char name[NAME_MAX+1];
+};
+
+union autofs_packet_union {
+       struct autofs_packet_hdr hdr;
+       struct autofs_packet_missing missing;
+       struct autofs_packet_expire expire;
+       struct autofs_packet_expire_multi expire_multi;
+};
+
+/* autofs v5 common packet struct */
+struct autofs_v5_packet {
+       struct autofs_packet_hdr hdr;
+       autofs_wqt_t wait_queue_token;
+       __u32 dev;
+       __u64 ino;
+       __u32 uid;
+       __u32 gid;
+       __u32 pid;
+       __u32 tgid;
+       __u32 len;
+       char name[NAME_MAX+1];
+};
+
+typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
+typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
+typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
+typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
+
+union autofs_v5_packet_union {
+       struct autofs_packet_hdr hdr;
+       struct autofs_v5_packet v5_packet;
+       autofs_packet_missing_indirect_t missing_indirect;
+       autofs_packet_expire_indirect_t expire_indirect;
+       autofs_packet_missing_direct_t missing_direct;
+       autofs_packet_expire_direct_t expire_direct;
+};
+
+enum {
+       AUTOFS_IOC_EXPIRE_MULTI_CMD = 0x66, /* AUTOFS_IOC_EXPIRE_CMD + 1 */
+       AUTOFS_IOC_PROTOSUBVER_CMD,
+       AUTOFS_IOC_ASKUMOUNT_CMD = 0x70, /* AUTOFS_DEV_IOCTL_VERSION_CMD - 1 */
+};
+
+#define AUTOFS_IOC_EXPIRE_MULTI                _IOW(AUTOFS_IOCTL, \
+                                            AUTOFS_IOC_EXPIRE_MULTI_CMD, int)
+#define AUTOFS_IOC_PROTOSUBVER         _IOR(AUTOFS_IOCTL, \
+                                            AUTOFS_IOC_PROTOSUBVER_CMD, int)
+#define AUTOFS_IOC_ASKUMOUNT           _IOR(AUTOFS_IOCTL, \
+                                            AUTOFS_IOC_ASKUMOUNT_CMD, int)
+
+#endif /* _LINUX_AUTO_FS_H */
index 35dc016c9bb41b91e59ab2b698c1097e6396cbfb..ebe21775a797809d33a5125229aabd190f810fb0 100644 (file)
@@ -4,8 +4,8 @@
  * Matthias Schiffer
  */
 
-#ifndef _UAPI_LINUX_BATMAN_ADV_H_
-#define _UAPI_LINUX_BATMAN_ADV_H_
+#ifndef _LINUX_BATMAN_ADV_H_
+#define _LINUX_BATMAN_ADV_H_
 
 #define BATADV_NL_NAME "batadv"
 
@@ -701,4 +701,4 @@ enum batadv_ifla_attrs {
 
 #define IFLA_BATADV_MAX (__IFLA_BATADV_MAX - 1)
 
-#endif /* _UAPI_LINUX_BATMAN_ADV_H_ */
+#endif /* _LINUX_BATMAN_ADV_H_ */
similarity index 94%
rename from src/shared/linux/bpf.h
rename to src/basic/linux/bpf.h
index 9f8af5eade5c221eb1212ace875e670cdae16fb0..858a89984ec7b303fb18c94916a6961670c50358 100644 (file)
@@ -19,6 +19,7 @@
 
 /* ld/ldx fields */
 #define BPF_DW         0x18    /* double word (64-bit) */
+#define BPF_MEMSX      0x80    /* load with sign extension */
 #define BPF_ATOMIC     0xc0    /* atomic memory ops - op type in immediate */
 #define BPF_XADD       0xc0    /* exclusive add - legacy name */
 
@@ -41,6 +42,7 @@
 #define BPF_JSGE       0x70    /* SGE is signed '>=', GE in x86 */
 #define BPF_JSLT       0xc0    /* SLT is signed, '<' */
 #define BPF_JSLE       0xd0    /* SLE is signed, '<=' */
+#define BPF_JCOND      0xe0    /* conditional pseudo jumps: may_goto, goto_or_nop */
 #define BPF_CALL       0x80    /* function call */
 #define BPF_EXIT       0x90    /* function return */
 
 #define BPF_XCHG       (0xe0 | BPF_FETCH)      /* atomic exchange */
 #define BPF_CMPXCHG    (0xf0 | BPF_FETCH)      /* atomic compare-and-write */
 
+enum bpf_cond_pseudo_jmp {
+       BPF_MAY_GOTO = 0,
+};
+
 /* Register numbers */
 enum {
        BPF_REG_0 = 0,
@@ -76,12 +82,29 @@ struct bpf_insn {
        __s32   imm;            /* signed immediate constant */
 };
 
-/* Key of an a BPF_MAP_TYPE_LPM_TRIE entry */
+/* Deprecated: use struct bpf_lpm_trie_key_u8 (when the "data" member is needed for
+ * byte access) or struct bpf_lpm_trie_key_hdr (when using an alternative type for
+ * the trailing flexible array member) instead.
+ */
 struct bpf_lpm_trie_key {
        __u32   prefixlen;      /* up to 32 for AF_INET, 128 for AF_INET6 */
        __u8    data[0];        /* Arbitrary size */
 };
 
+/* Header for bpf_lpm_trie_key structs */
+struct bpf_lpm_trie_key_hdr {
+       __u32   prefixlen;
+};
+
+/* Key of an a BPF_MAP_TYPE_LPM_TRIE entry, with trailing byte array. */
+struct bpf_lpm_trie_key_u8 {
+       union {
+               struct bpf_lpm_trie_key_hdr     hdr;
+               __u32                           prefixlen;
+       };
+       __u8    data[];         /* Arbitrary size */
+};
+
 struct bpf_cgroup_storage_key {
        __u64   cgroup_inode_id;        /* cgroup inode id */
        __u32   attach_type;            /* program attach type (enum bpf_attach_type) */
@@ -616,7 +639,11 @@ union bpf_iter_link_info {
  *             to NULL to begin the batched operation. After each subsequent
  *             **BPF_MAP_LOOKUP_BATCH**, the caller should pass the resultant
  *             *out_batch* as the *in_batch* for the next operation to
- *             continue iteration from the current point.
+ *             continue iteration from the current point. Both *in_batch* and
+ *             *out_batch* must point to memory large enough to hold a key,
+ *             except for maps of type **BPF_MAP_TYPE_{HASH, PERCPU_HASH,
+ *             LRU_HASH, LRU_PERCPU_HASH}**, for which batch parameters
+ *             must be at least 4 bytes wide regardless of key size.
  *
  *             The *keys* and *values* are output parameters which must point
  *             to memory large enough to hold *count* items based on the key
@@ -846,6 +873,36 @@ union bpf_iter_link_info {
  *             Returns zero on success. On error, -1 is returned and *errno*
  *             is set appropriately.
  *
+ * BPF_TOKEN_CREATE
+ *     Description
+ *             Create BPF token with embedded information about what
+ *             BPF-related functionality it allows:
+ *             - a set of allowed bpf() syscall commands;
+ *             - a set of allowed BPF map types to be created with
+ *             BPF_MAP_CREATE command, if BPF_MAP_CREATE itself is allowed;
+ *             - a set of allowed BPF program types and BPF program attach
+ *             types to be loaded with BPF_PROG_LOAD command, if
+ *             BPF_PROG_LOAD itself is allowed.
+ *
+ *             BPF token is created (derived) from an instance of BPF FS,
+ *             assuming it has necessary delegation mount options specified.
+ *             This BPF token can be passed as an extra parameter to various
+ *             bpf() syscall commands to grant BPF subsystem functionality to
+ *             unprivileged processes.
+ *
+ *             When created, BPF token is "associated" with the owning
+ *             user namespace of BPF FS instance (super block) that it was
+ *             derived from, and subsequent BPF operations performed with
+ *             BPF token would be performing capabilities checks (i.e.,
+ *             CAP_BPF, CAP_PERFMON, CAP_NET_ADMIN, CAP_SYS_ADMIN) within
+ *             that user namespace. Without BPF token, such capabilities
+ *             have to be granted in init user namespace, making bpf()
+ *             syscall incompatible with user namespace, for the most part.
+ *
+ *     Return
+ *             A new file descriptor (a nonnegative integer), or -1 if an
+ *             error occurred (in which case, *errno* is set appropriately).
+ *
  * NOTES
  *     eBPF objects (maps and programs) can be shared between processes.
  *
@@ -900,6 +957,8 @@ enum bpf_cmd {
        BPF_ITER_CREATE,
        BPF_LINK_DETACH,
        BPF_PROG_BIND_MAP,
+       BPF_TOKEN_CREATE,
+       __MAX_BPF_CMD,
 };
 
 enum bpf_map_type {
@@ -931,7 +990,14 @@ enum bpf_map_type {
         */
        BPF_MAP_TYPE_CGROUP_STORAGE = BPF_MAP_TYPE_CGROUP_STORAGE_DEPRECATED,
        BPF_MAP_TYPE_REUSEPORT_SOCKARRAY,
-       BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE,
+       BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE_DEPRECATED,
+       /* BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE is available to bpf programs
+        * attaching to a cgroup. The new mechanism (BPF_MAP_TYPE_CGRP_STORAGE +
+        * local percpu kptr) supports all BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE
+        * functionality and more. So mark * BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE
+        * deprecated.
+        */
+       BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE_DEPRECATED,
        BPF_MAP_TYPE_QUEUE,
        BPF_MAP_TYPE_STACK,
        BPF_MAP_TYPE_SK_STORAGE,
@@ -943,6 +1009,8 @@ enum bpf_map_type {
        BPF_MAP_TYPE_BLOOM_FILTER,
        BPF_MAP_TYPE_USER_RINGBUF,
        BPF_MAP_TYPE_CGRP_STORAGE,
+       BPF_MAP_TYPE_ARENA,
+       __MAX_BPF_MAP_TYPE
 };
 
 /* Note that tracing related programs such as
@@ -986,6 +1054,8 @@ enum bpf_prog_type {
        BPF_PROG_TYPE_LSM,
        BPF_PROG_TYPE_SK_LOOKUP,
        BPF_PROG_TYPE_SYSCALL, /* a program that can execute syscalls */
+       BPF_PROG_TYPE_NETFILTER,
+       __MAX_BPF_PROG_TYPE
 };
 
 enum bpf_attach_type {
@@ -1033,6 +1103,19 @@ enum bpf_attach_type {
        BPF_PERF_EVENT,
        BPF_TRACE_KPROBE_MULTI,
        BPF_LSM_CGROUP,
+       BPF_STRUCT_OPS,
+       BPF_NETFILTER,
+       BPF_TCX_INGRESS,
+       BPF_TCX_EGRESS,
+       BPF_TRACE_UPROBE_MULTI,
+       BPF_CGROUP_UNIX_CONNECT,
+       BPF_CGROUP_UNIX_SENDMSG,
+       BPF_CGROUP_UNIX_RECVMSG,
+       BPF_CGROUP_UNIX_GETPEERNAME,
+       BPF_CGROUP_UNIX_GETSOCKNAME,
+       BPF_NETKIT_PRIMARY,
+       BPF_NETKIT_PEER,
+       BPF_TRACE_KPROBE_SESSION,
        __MAX_BPF_ATTACH_TYPE
 };
 
@@ -1049,8 +1132,24 @@ enum bpf_link_type {
        BPF_LINK_TYPE_PERF_EVENT = 7,
        BPF_LINK_TYPE_KPROBE_MULTI = 8,
        BPF_LINK_TYPE_STRUCT_OPS = 9,
+       BPF_LINK_TYPE_NETFILTER = 10,
+       BPF_LINK_TYPE_TCX = 11,
+       BPF_LINK_TYPE_UPROBE_MULTI = 12,
+       BPF_LINK_TYPE_NETKIT = 13,
+       BPF_LINK_TYPE_SOCKMAP = 14,
+       __MAX_BPF_LINK_TYPE,
+};
 
-       MAX_BPF_LINK_TYPE,
+#define MAX_BPF_LINK_TYPE __MAX_BPF_LINK_TYPE
+
+enum bpf_perf_event_type {
+       BPF_PERF_EVENT_UNSPEC = 0,
+       BPF_PERF_EVENT_UPROBE = 1,
+       BPF_PERF_EVENT_URETPROBE = 2,
+       BPF_PERF_EVENT_KPROBE = 3,
+       BPF_PERF_EVENT_KRETPROBE = 4,
+       BPF_PERF_EVENT_TRACEPOINT = 5,
+       BPF_PERF_EVENT_EVENT = 6,
 };
 
 /* cgroup-bpf attach flags used in BPF_PROG_ATTACH command
@@ -1099,7 +1198,12 @@ enum bpf_link_type {
  */
 #define BPF_F_ALLOW_OVERRIDE   (1U << 0)
 #define BPF_F_ALLOW_MULTI      (1U << 1)
+/* Generic attachment flags. */
 #define BPF_F_REPLACE          (1U << 2)
+#define BPF_F_BEFORE           (1U << 3)
+#define BPF_F_AFTER            (1U << 4)
+#define BPF_F_ID               (1U << 5)
+#define BPF_F_LINK             BPF_F_LINK /* 1 << 13 */
 
 /* If BPF_F_STRICT_ALIGNMENT is used in BPF_PROG_LOAD command, the
  * verifier will perform strict alignment checking as if the kernel
@@ -1108,7 +1212,7 @@ enum bpf_link_type {
  */
 #define BPF_F_STRICT_ALIGNMENT (1U << 0)
 
-/* If BPF_F_ANY_ALIGNMENT is used in BPF_PROF_LOAD command, the
+/* If BPF_F_ANY_ALIGNMENT is used in BPF_PROG_LOAD command, the
  * verifier will allow any alignment whatsoever.  On platforms
  * with strict alignment requirements for loads ands stores (such
  * as sparc and mips) the verifier validates that all loads and
@@ -1156,10 +1260,32 @@ enum bpf_link_type {
  */
 #define BPF_F_XDP_HAS_FRAGS    (1U << 5)
 
+/* If BPF_F_XDP_DEV_BOUND_ONLY is used in BPF_PROG_LOAD command, the loaded
+ * program becomes device-bound but can access XDP metadata.
+ */
+#define BPF_F_XDP_DEV_BOUND_ONLY       (1U << 6)
+
+/* The verifier internal test flag. Behavior is undefined */
+#define BPF_F_TEST_REG_INVARIANTS      (1U << 7)
+
 /* link_create.kprobe_multi.flags used in LINK_CREATE command for
  * BPF_TRACE_KPROBE_MULTI attach type to create return probe.
  */
-#define BPF_F_KPROBE_MULTI_RETURN      (1U << 0)
+enum {
+       BPF_F_KPROBE_MULTI_RETURN = (1U << 0)
+};
+
+/* link_create.uprobe_multi.flags used in LINK_CREATE command for
+ * BPF_TRACE_UPROBE_MULTI attach type to create return probe.
+ */
+enum {
+       BPF_F_UPROBE_MULTI_RETURN = (1U << 0)
+};
+
+/* link_create.netfilter.flags used in LINK_CREATE command for
+ * BPF_PROG_TYPE_NETFILTER to enable IP packet defragmentation.
+ */
+#define BPF_F_NETFILTER_IP_DEFRAG (1U << 0)
 
 /* When BPF ldimm64's insn[0].src_reg != 0 then this can have
  * the following extensions:
@@ -1215,6 +1341,10 @@ enum bpf_link_type {
  */
 #define BPF_PSEUDO_KFUNC_CALL  2
 
+enum bpf_addr_space_cast {
+       BPF_ADDR_SPACE_CAST = 1,
+};
+
 /* flags for BPF_MAP_UPDATE_ELEM command */
 enum {
        BPF_ANY         = 0, /* create new element or update existing */
@@ -1261,6 +1391,24 @@ enum {
 
 /* Create a map that is suitable to be an inner map with dynamic max entries */
        BPF_F_INNER_MAP         = (1U << 12),
+
+/* Create a map that will be registered/unregesitered by the backed bpf_link */
+       BPF_F_LINK              = (1U << 13),
+
+/* Get path from provided FD in BPF_OBJ_PIN/BPF_OBJ_GET commands */
+       BPF_F_PATH_FD           = (1U << 14),
+
+/* Flag for value_type_btf_obj_fd, the fd is available */
+       BPF_F_VTYPE_BTF_OBJ_FD  = (1U << 15),
+
+/* BPF token FD is passed in a corresponding command's token_fd field */
+       BPF_F_TOKEN_FD          = (1U << 16),
+
+/* When user space page faults in bpf_arena send SIGSEGV instead of inserting new page */
+       BPF_F_SEGV_ON_FAULT     = (1U << 17),
+
+/* Do not translate kernel bpf_arena pointers to user pointers */
+       BPF_F_NO_USER_CONV      = (1U << 18),
 };
 
 /* Flags for BPF_PROG_QUERY. */
@@ -1332,8 +1480,20 @@ union bpf_attr {
                 * BPF_MAP_TYPE_BLOOM_FILTER - the lowest 4 bits indicate the
                 * number of hash functions (if 0, the bloom filter will default
                 * to using 5 hash functions).
+                *
+                * BPF_MAP_TYPE_ARENA - contains the address where user space
+                * is going to mmap() the arena. It has to be page aligned.
                 */
                __u64   map_extra;
+
+               __s32   value_type_btf_obj_fd;  /* fd pointing to a BTF
+                                                * type data for
+                                                * btf_vmlinux_value_type_id.
+                                                */
+               /* BPF token FD to use with BPF_MAP_CREATE operation.
+                * If provided, map_flags should have BPF_F_TOKEN_FD flag set.
+                */
+               __s32   map_token_fd;
        };
 
        struct { /* anonymous struct used by BPF_MAP_*_ELEM commands */
@@ -1398,23 +1558,44 @@ union bpf_attr {
                __aligned_u64   fd_array;       /* array of FDs */
                __aligned_u64   core_relos;
                __u32           core_relo_rec_size; /* sizeof(struct bpf_core_relo) */
+               /* output: actual total log contents size (including termintaing zero).
+                * It could be both larger than original log_size (if log was
+                * truncated), or smaller (if log buffer wasn't filled completely).
+                */
+               __u32           log_true_size;
+               /* BPF token FD to use with BPF_PROG_LOAD operation.
+                * If provided, prog_flags should have BPF_F_TOKEN_FD flag set.
+                */
+               __s32           prog_token_fd;
        };
 
        struct { /* anonymous struct used by BPF_OBJ_* commands */
                __aligned_u64   pathname;
                __u32           bpf_fd;
                __u32           file_flags;
+               /* Same as dirfd in openat() syscall; see openat(2)
+                * manpage for details of path FD and pathname semantics;
+                * path_fd should accompanied by BPF_F_PATH_FD flag set in
+                * file_flags field, otherwise it should be set to zero;
+                * if BPF_F_PATH_FD flag is not set, AT_FDCWD is assumed.
+                */
+               __s32           path_fd;
        };
 
        struct { /* anonymous struct used by BPF_PROG_ATTACH/DETACH commands */
-               __u32           target_fd;      /* container object to attach to */
-               __u32           attach_bpf_fd;  /* eBPF program to attach */
+               union {
+                       __u32   target_fd;      /* target object to attach to or ... */
+                       __u32   target_ifindex; /* target ifindex */
+               };
+               __u32           attach_bpf_fd;
                __u32           attach_type;
                __u32           attach_flags;
-               __u32           replace_bpf_fd; /* previously attached eBPF
-                                                * program to replace if
-                                                * BPF_F_REPLACE is used
-                                                */
+               __u32           replace_bpf_fd;
+               union {
+                       __u32   relative_fd;
+                       __u32   relative_id;
+               };
+               __u64           expected_revision;
        };
 
        struct { /* anonymous struct used by BPF_PROG_TEST_RUN command */
@@ -1460,21 +1641,33 @@ union bpf_attr {
        } info;
 
        struct { /* anonymous struct used by BPF_PROG_QUERY command */
-               __u32           target_fd;      /* container object to query */
+               union {
+                       __u32   target_fd;      /* target object to query or ... */
+                       __u32   target_ifindex; /* target ifindex */
+               };
                __u32           attach_type;
                __u32           query_flags;
                __u32           attach_flags;
                __aligned_u64   prog_ids;
-               __u32           prog_cnt;
+               union {
+                       __u32   prog_cnt;
+                       __u32   count;
+               };
+               __u32           :32;
                /* output: per-program attach_flags.
                 * not allowed to be set during effective query.
                 */
                __aligned_u64   prog_attach_flags;
+               __aligned_u64   link_ids;
+               __aligned_u64   link_attach_flags;
+               __u64           revision;
        } query;
 
        struct { /* anonymous struct used by BPF_RAW_TRACEPOINT_OPEN command */
-               __u64 name;
-               __u32 prog_fd;
+               __u64           name;
+               __u32           prog_fd;
+               __u32           :32;
+               __aligned_u64   cookie;
        } raw_tracepoint;
 
        struct { /* anonymous struct for BPF_BTF_LOAD */
@@ -1483,6 +1676,16 @@ union bpf_attr {
                __u32           btf_size;
                __u32           btf_log_size;
                __u32           btf_log_level;
+               /* output: actual total log contents size (including termintaing zero).
+                * It could be both larger than original log_size (if log was
+                * truncated), or smaller (if log buffer wasn't filled completely).
+                */
+               __u32           btf_log_true_size;
+               __u32           btf_flags;
+               /* BPF token FD to use with BPF_BTF_LOAD operation.
+                * If provided, btf_flags should have BPF_F_TOKEN_FD flag set.
+                */
+               __s32           btf_token_fd;
        };
 
        struct {
@@ -1502,15 +1705,18 @@ union bpf_attr {
        } task_fd_query;
 
        struct { /* struct used by BPF_LINK_CREATE command */
-               __u32           prog_fd;        /* eBPF program to attach */
                union {
-                       __u32           target_fd;      /* object to attach to */
-                       __u32           target_ifindex; /* target ifindex */
+                       __u32           prog_fd;        /* eBPF program to attach */
+                       __u32           map_fd;         /* struct_ops to attach */
+               };
+               union {
+                       __u32   target_fd;      /* target object to attach to or ... */
+                       __u32   target_ifindex; /* target ifindex */
                };
                __u32           attach_type;    /* attach type */
                __u32           flags;          /* extra flags */
                union {
-                       __u32           target_btf_id;  /* btf_id of target to attach to */
+                       __u32   target_btf_id;  /* btf_id of target to attach to */
                        struct {
                                __aligned_u64   iter_info;      /* extra bpf_iter_link_info */
                                __u32           iter_info_len;  /* iter_info length */
@@ -1538,17 +1744,57 @@ union bpf_attr {
                                 */
                                __u64           cookie;
                        } tracing;
+                       struct {
+                               __u32           pf;
+                               __u32           hooknum;
+                               __s32           priority;
+                               __u32           flags;
+                       } netfilter;
+                       struct {
+                               union {
+                                       __u32   relative_fd;
+                                       __u32   relative_id;
+                               };
+                               __u64           expected_revision;
+                       } tcx;
+                       struct {
+                               __aligned_u64   path;
+                               __aligned_u64   offsets;
+                               __aligned_u64   ref_ctr_offsets;
+                               __aligned_u64   cookies;
+                               __u32           cnt;
+                               __u32           flags;
+                               __u32           pid;
+                       } uprobe_multi;
+                       struct {
+                               union {
+                                       __u32   relative_fd;
+                                       __u32   relative_id;
+                               };
+                               __u64           expected_revision;
+                       } netkit;
                };
        } link_create;
 
        struct { /* struct used by BPF_LINK_UPDATE command */
                __u32           link_fd;        /* link fd */
-               /* new program fd to update link with */
-               __u32           new_prog_fd;
+               union {
+                       /* new program fd to update link with */
+                       __u32           new_prog_fd;
+                       /* new struct_ops map fd to update link with */
+                       __u32           new_map_fd;
+               };
                __u32           flags;          /* extra flags */
-               /* expected link's program fd; is specified only if
-                * BPF_F_REPLACE flag is set in flags */
-               __u32           old_prog_fd;
+               union {
+                       /* expected link's program fd; is specified only if
+                        * BPF_F_REPLACE flag is set in flags.
+                        */
+                       __u32           old_prog_fd;
+                       /* expected link's map fd; is specified only
+                        * if BPF_F_REPLACE flag is set.
+                        */
+                       __u32           old_map_fd;
+               };
        } link_update;
 
        struct {
@@ -1570,6 +1816,11 @@ union bpf_attr {
                __u32           flags;          /* extra flags */
        } prog_bind_map;
 
+       struct { /* struct used by BPF_TOKEN_CREATE command */
+               __u32           flags;
+               __u32           bpffs_fd;
+       } token_create;
+
 } __attribute__((aligned(8)));
 
 /* The description below is an attempt at providing documentation to eBPF
@@ -1642,17 +1893,17 @@ union bpf_attr {
  *     Description
  *             This helper is a "printk()-like" facility for debugging. It
  *             prints a message defined by format *fmt* (of size *fmt_size*)
- *             to file *\/sys/kernel/debug/tracing/trace* from DebugFS, if
+ *             to file *\/sys/kernel/tracing/trace* from TraceFS, if
  *             available. It can take up to three additional **u64**
  *             arguments (as an eBPF helpers, the total number of arguments is
  *             limited to five).
  *
  *             Each time the helper is called, it appends a line to the trace.
- *             Lines are discarded while *\/sys/kernel/debug/tracing/trace* is
- *             open, use *\/sys/kernel/debug/tracing/trace_pipe* to avoid this.
+ *             Lines are discarded while *\/sys/kernel/tracing/trace* is
+ *             open, use *\/sys/kernel/tracing/trace_pipe* to avoid this.
  *             The format of the trace is customizable, and the exact output
  *             one will get depends on the options set in
- *             *\/sys/kernel/debug/tracing/trace_options* (see also the
+ *             *\/sys/kernel/tracing/trace_options* (see also the
  *             *README* file under the same directory). However, it usually
  *             defaults to something like:
  *
@@ -1845,7 +2096,9 @@ union bpf_attr {
  *             performed again, if the helper is used in combination with
  *             direct packet access.
  *     Return
- *             0 on success, or a negative error in case of failure.
+ *             0 on success, or a negative error in case of failure. Positive
+ *             error indicates a potential drop or congestion in the target
+ *             device. The particular positive error codes are not defined.
  *
  * u64 bpf_get_current_pid_tgid(void)
  *     Description
@@ -2001,6 +2254,9 @@ union bpf_attr {
  *                     sending the packet. This flag was added for GRE
  *                     encapsulation, but might be used with other protocols
  *                     as well in the future.
+ *             **BPF_F_NO_TUNNEL_KEY**
+ *                     Add a flag to tunnel metadata indicating that no tunnel
+ *                     key should be set in the resulting tunnel header.
  *
  *             Here is a typical usage on the transmit path:
  *
@@ -2575,8 +2831,8 @@ union bpf_attr {
  *             *bpf_socket* should be one of the following:
  *
  *             * **struct bpf_sock_ops** for **BPF_PROG_TYPE_SOCK_OPS**.
- *             * **struct bpf_sock_addr** for **BPF_CGROUP_INET4_CONNECT**
- *               and **BPF_CGROUP_INET6_CONNECT**.
+ *             * **struct bpf_sock_addr** for **BPF_CGROUP_INET4_CONNECT**,
+ *               **BPF_CGROUP_INET6_CONNECT** and **BPF_CGROUP_UNIX_CONNECT**.
  *
  *             This helper actually implements a subset of **setsockopt()**.
  *             It supports the following *level*\ s:
@@ -2644,6 +2900,11 @@ union bpf_attr {
  *               Use with BPF_F_ADJ_ROOM_ENCAP_L2 flag to further specify the
  *               L2 type as Ethernet.
  *
+ *             * **BPF_F_ADJ_ROOM_DECAP_L3_IPV4**,
+ *               **BPF_F_ADJ_ROOM_DECAP_L3_IPV6**:
+ *               Indicate the new IP header version after decapsulating the outer
+ *               IP header. Used when the inner and outer IP versions are different.
+ *
  *             A call to this helper is susceptible to change the underlying
  *             packet buffer. Therefore, at load time, all checks on pointers
  *             previously done by the verifier are invalidated and must be
@@ -2788,7 +3049,7 @@ union bpf_attr {
  *
  * long bpf_perf_prog_read_value(struct bpf_perf_event_data *ctx, struct bpf_perf_event_value *buf, u32 buf_size)
  *     Description
- *             For en eBPF program attached to a perf event, retrieve the
+ *             For an eBPF program attached to a perf event, retrieve the
  *             value of the event counter associated to *ctx* and store it in
  *             the structure pointed by *buf* and of size *buf_size*. Enabled
  *             and running times are also stored in the structure (see
@@ -2809,8 +3070,8 @@ union bpf_attr {
  *             *bpf_socket* should be one of the following:
  *
  *             * **struct bpf_sock_ops** for **BPF_PROG_TYPE_SOCK_OPS**.
- *             * **struct bpf_sock_addr** for **BPF_CGROUP_INET4_CONNECT**
- *               and **BPF_CGROUP_INET6_CONNECT**.
+ *             * **struct bpf_sock_addr** for **BPF_CGROUP_INET4_CONNECT**,
+ *               **BPF_CGROUP_INET6_CONNECT** and **BPF_CGROUP_UNIX_CONNECT**.
  *
  *             This helper actually implements a subset of **getsockopt()**.
  *             It supports the same set of *optname*\ s that is supported by
@@ -3118,9 +3379,27 @@ union bpf_attr {
  *             **BPF_FIB_LOOKUP_DIRECT**
  *                     Do a direct table lookup vs full lookup using FIB
  *                     rules.
+ *             **BPF_FIB_LOOKUP_TBID**
+ *                     Used with BPF_FIB_LOOKUP_DIRECT.
+ *                     Use the routing table ID present in *params*->tbid
+ *                     for the fib lookup.
  *             **BPF_FIB_LOOKUP_OUTPUT**
  *                     Perform lookup from an egress perspective (default is
  *                     ingress).
+ *             **BPF_FIB_LOOKUP_SKIP_NEIGH**
+ *                     Skip the neighbour table lookup. *params*->dmac
+ *                     and *params*->smac will not be set as output. A common
+ *                     use case is to call **bpf_redirect_neigh**\ () after
+ *                     doing **bpf_fib_lookup**\ ().
+ *             **BPF_FIB_LOOKUP_SRC**
+ *                     Derive and set source IP addr in *params*->ipv{4,6}_src
+ *                     for the nexthop. If the src addr cannot be derived,
+ *                     **BPF_FIB_LKUP_RET_NO_SRC_ADDR** is returned. In this
+ *                     case, *params*->dmac and *params*->smac are not set either.
+ *             **BPF_FIB_LOOKUP_MARK**
+ *                     Use the mark present in *params*->mark for the fib lookup.
+ *                     This option should not be used with BPF_FIB_LOOKUP_DIRECT,
+ *                     as it only has meaning for full lookups.
  *
  *             *ctx* is either **struct xdp_md** for XDP programs or
  *             **struct sk_buff** tc cls_act programs.
@@ -3972,7 +4251,7 @@ union bpf_attr {
  *
  * u64 bpf_jiffies64(void)
  *     Description
- *             Obtain the 64-bit jiffies
+ *             Obtain the 64bit jiffies
  *     Return
  *             The 64 bit jiffies
  *
@@ -4090,9 +4369,6 @@ union bpf_attr {
  *             **-EOPNOTSUPP** if the operation is not supported, for example
  *             a call from outside of TC ingress.
  *
- *             **-ESOCKTNOSUPPORT** if the socket type is not supported
- *             (reuseport).
- *
  * long bpf_sk_assign(struct bpf_sk_lookup *ctx, struct bpf_sock *sk, u64 flags)
  *     Description
  *             Helper is overloaded depending on BPF program type. This
@@ -4357,6 +4633,8 @@ union bpf_attr {
  * long bpf_get_task_stack(struct task_struct *task, void *buf, u32 size, u64 flags)
  *     Description
  *             Return a user or a kernel stack in bpf program provided buffer.
+ *             Note: the user stack will only be populated if the *task* is
+ *             the current task; all other tasks will return -EOPNOTSUPP.
  *             To achieve this, the helper needs *task*, which is a valid
  *             pointer to **struct task_struct**. To store the stacktrace, the
  *             bpf program provides *buf* with a nonnegative *size*.
@@ -4368,6 +4646,7 @@ union bpf_attr {
  *
  *             **BPF_F_USER_STACK**
  *                     Collect a user space stack instead of a kernel stack.
+ *                     The *task* must be the current task.
  *             **BPF_F_USER_BUILD_ID**
  *                     Collect buildid+offset instead of ips for user stack,
  *                     only valid if **BPF_F_USER_STACK** is also specified.
@@ -4671,9 +4950,9 @@ union bpf_attr {
  *             going through the CPU's backlog queue.
  *
  *             The *flags* argument is reserved and must be 0. The helper is
- *             currently only supported for tc BPF program types at the ingress
- *             hook and for veth device types. The peer device must reside in a
- *             different network namespace.
+ *             currently only supported for tc BPF program types at the
+ *             ingress hook and for veth and netkit target device types. The
+ *             peer device must reside in a different network namespace.
  *     Return
  *             The helper returns **TC_ACT_REDIRECT** on success or
  *             **TC_ACT_SHOT** on error.
@@ -4749,7 +5028,7 @@ union bpf_attr {
  *             bytes will be copied to *dst*
  *     Return
  *             The **hash_algo** is returned on success,
- *             **-EOPNOTSUP** if IMA is disabled or **-EINVAL** if
+ *             **-EOPNOTSUPP** if IMA is disabled or **-EINVAL** if
  *             invalid arguments are passed.
  *
  * struct socket *bpf_sock_from_file(struct file *file)
@@ -4951,6 +5230,14 @@ union bpf_attr {
  *             different maps if key/value layout matches across maps.
  *             Every bpf_timer_set_callback() can have different callback_fn.
  *
+ *             *flags* can be one of:
+ *
+ *             **BPF_F_TIMER_ABS**
+ *                     Start the timer in absolute expire value instead of the
+ *                     default relative one.
+ *             **BPF_F_TIMER_CPU_PIN**
+ *                     Timer will be pinned to the CPU of the caller.
+ *
  *     Return
  *             0 on success.
  *             **-EINVAL** if *timer* was not initialized with bpf_timer_init() earlier
@@ -4969,9 +5256,14 @@ union bpf_attr {
  * u64 bpf_get_func_ip(void *ctx)
  *     Description
  *             Get address of the traced function (for tracing and kprobe programs).
+ *
+ *             When called for kprobe program attached as uprobe it returns
+ *             probe address for both entry and return uprobe.
+ *
  *     Return
- *             Address of the traced function.
+ *             Address of the traced function for kprobe.
  *             0 for kprobes placed within the function (not at the entry).
+ *             Address of the probe for uprobe and return uprobe.
  *
  * u64 bpf_get_attach_cookie(void *ctx)
  *     Description
@@ -5222,7 +5514,7 @@ union bpf_attr {
  *             bytes will be copied to *dst*
  *     Return
  *             The **hash_algo** is returned on success,
- *             **-EOPNOTSUP** if the hash calculation failed or **-EINVAL** if
+ *             **-EOPNOTSUPP** if the hash calculation failed or **-EINVAL** if
  *             invalid arguments are passed.
  *
  * void *bpf_kptr_xchg(void *map_value, void *ptr)
@@ -5307,11 +5599,22 @@ union bpf_attr {
  *     Description
  *             Write *len* bytes from *src* into *dst*, starting from *offset*
  *             into *dst*.
- *             *flags* is currently unused.
+ *
+ *             *flags* must be 0 except for skb-type dynptrs.
+ *
+ *             For skb-type dynptrs:
+ *                 *  All data slices of the dynptr are automatically
+ *                    invalidated after **bpf_dynptr_write**\ (). This is
+ *                    because writing may pull the skb and change the
+ *                    underlying packet buffer.
+ *
+ *                 *  For *flags*, please see the flags accepted by
+ *                    **bpf_skb_store_bytes**\ ().
  *     Return
  *             0 on success, -E2BIG if *offset* + *len* exceeds the length
  *             of *dst*'s data, -EINVAL if *dst* is an invalid dynptr or if *dst*
- *             is a read-only dynptr or if *flags* is not 0.
+ *             is a read-only dynptr or if *flags* is not correct. For skb-type dynptrs,
+ *             other errors correspond to errors returned by **bpf_skb_store_bytes**\ ().
  *
  * void *bpf_dynptr_data(const struct bpf_dynptr *ptr, u32 offset, u32 len)
  *     Description
@@ -5319,6 +5622,9 @@ union bpf_attr {
  *
  *             *len* must be a statically known value. The returned data slice
  *             is invalidated whenever the dynptr is invalidated.
+ *
+ *             skb and xdp type dynptrs may not use bpf_dynptr_data. They should
+ *             instead use bpf_dynptr_slice and bpf_dynptr_slice_rdwr.
  *     Return
  *             Pointer to the underlying dynptr data, NULL if the dynptr is
  *             read-only, if the dynptr is invalid, or if the offset and length
@@ -5764,6 +6070,7 @@ enum {
        BPF_F_ZERO_CSUM_TX              = (1ULL << 1),
        BPF_F_DONT_FRAGMENT             = (1ULL << 2),
        BPF_F_SEQ_NUMBER                = (1ULL << 3),
+       BPF_F_NO_TUNNEL_KEY             = (1ULL << 4),
 };
 
 /* BPF_FUNC_skb_get_tunnel_key flags. */
@@ -5803,6 +6110,8 @@ enum {
        BPF_F_ADJ_ROOM_ENCAP_L4_UDP     = (1ULL << 4),
        BPF_F_ADJ_ROOM_NO_CSUM_RESET    = (1ULL << 5),
        BPF_F_ADJ_ROOM_ENCAP_L2_ETH     = (1ULL << 6),
+       BPF_F_ADJ_ROOM_DECAP_L3_IPV4    = (1ULL << 7),
+       BPF_F_ADJ_ROOM_DECAP_L3_IPV6    = (1ULL << 8),
 };
 
 enum {
@@ -6095,6 +6404,19 @@ struct bpf_sock_tuple {
        };
 };
 
+/* (Simplified) user return codes for tcx prog type.
+ * A valid tcx program must return one of these defined values. All other
+ * return codes are reserved for future use. Must remain compatible with
+ * their TC_ACT_* counter-parts. For compatibility in behavior, unknown
+ * return codes are mapped to TCX_NEXT.
+ */
+enum tcx_action_base {
+       TCX_NEXT        = -1,
+       TCX_PASS        = 0,
+       TCX_DROP        = 2,
+       TCX_REDIRECT    = 7,
+};
+
 struct bpf_xdp_sock {
        __u32 queue_id;
 };
@@ -6276,7 +6598,7 @@ struct bpf_map_info {
        __u32 btf_id;
        __u32 btf_key_type_id;
        __u32 btf_value_type_id;
-       __u32 :32;      /* alignment pad */
+       __u32 btf_vmlinux_id;
        __u64 map_extra;
 } __attribute__((aligned(8)));
 
@@ -6338,6 +6660,76 @@ struct bpf_link_info {
                struct {
                        __u32 ifindex;
                } xdp;
+               struct {
+                       __u32 map_id;
+               } struct_ops;
+               struct {
+                       __u32 pf;
+                       __u32 hooknum;
+                       __s32 priority;
+                       __u32 flags;
+               } netfilter;
+               struct {
+                       __aligned_u64 addrs;
+                       __u32 count; /* in/out: kprobe_multi function count */
+                       __u32 flags;
+                       __u64 missed;
+                       __aligned_u64 cookies;
+               } kprobe_multi;
+               struct {
+                       __aligned_u64 path;
+                       __aligned_u64 offsets;
+                       __aligned_u64 ref_ctr_offsets;
+                       __aligned_u64 cookies;
+                       __u32 path_size; /* in/out: real path size on success, including zero byte */
+                       __u32 count; /* in/out: uprobe_multi offsets/ref_ctr_offsets/cookies count */
+                       __u32 flags;
+                       __u32 pid;
+               } uprobe_multi;
+               struct {
+                       __u32 type; /* enum bpf_perf_event_type */
+                       __u32 :32;
+                       union {
+                               struct {
+                                       __aligned_u64 file_name; /* in/out */
+                                       __u32 name_len;
+                                       __u32 offset; /* offset from file_name */
+                                       __u64 cookie;
+                               } uprobe; /* BPF_PERF_EVENT_UPROBE, BPF_PERF_EVENT_URETPROBE */
+                               struct {
+                                       __aligned_u64 func_name; /* in/out */
+                                       __u32 name_len;
+                                       __u32 offset; /* offset from func_name */
+                                       __u64 addr;
+                                       __u64 missed;
+                                       __u64 cookie;
+                               } kprobe; /* BPF_PERF_EVENT_KPROBE, BPF_PERF_EVENT_KRETPROBE */
+                               struct {
+                                       __aligned_u64 tp_name;   /* in/out */
+                                       __u32 name_len;
+                                       __u32 :32;
+                                       __u64 cookie;
+                               } tracepoint; /* BPF_PERF_EVENT_TRACEPOINT */
+                               struct {
+                                       __u64 config;
+                                       __u32 type;
+                                       __u32 :32;
+                                       __u64 cookie;
+                               } event; /* BPF_PERF_EVENT_EVENT */
+                       };
+               } perf_event;
+               struct {
+                       __u32 ifindex;
+                       __u32 attach_type;
+               } tcx;
+               struct {
+                       __u32 ifindex;
+                       __u32 attach_type;
+               } netkit;
+               struct {
+                       __u32 map_id;
+                       __u32 attach_type;
+               } sockmap;
        };
 } __attribute__((aligned(8)));
 
@@ -6556,6 +6948,8 @@ enum {
                                         * socket transition to LISTEN state.
                                         */
        BPF_SOCK_OPS_RTT_CB,            /* Called on every RTT.
+                                        * Arg1: measured RTT input (mrtt)
+                                        * Arg2: updated srtt
                                         */
        BPF_SOCK_OPS_PARSE_HDR_OPT_CB,  /* Parse the header option.
                                         * It will be called to handle
@@ -6634,6 +7028,7 @@ enum {
        BPF_TCP_LISTEN,
        BPF_TCP_CLOSING,        /* Now a valid state */
        BPF_TCP_NEW_SYN_RECV,
+       BPF_TCP_BOUND_INACTIVE,
 
        BPF_TCP_MAX_STATES      /* Leave at the end! */
 };
@@ -6734,6 +7129,10 @@ struct bpf_raw_tracepoint_args {
 enum {
        BPF_FIB_LOOKUP_DIRECT  = (1U << 0),
        BPF_FIB_LOOKUP_OUTPUT  = (1U << 1),
+       BPF_FIB_LOOKUP_SKIP_NEIGH = (1U << 2),
+       BPF_FIB_LOOKUP_TBID    = (1U << 3),
+       BPF_FIB_LOOKUP_SRC     = (1U << 4),
+       BPF_FIB_LOOKUP_MARK    = (1U << 5),
 };
 
 enum {
@@ -6746,6 +7145,7 @@ enum {
        BPF_FIB_LKUP_RET_UNSUPP_LWT,   /* fwd requires encapsulation */
        BPF_FIB_LKUP_RET_NO_NEIGH,     /* no neighbor entry for nh */
        BPF_FIB_LKUP_RET_FRAG_NEEDED,  /* fragmentation required to fwd */
+       BPF_FIB_LKUP_RET_NO_SRC_ADDR,  /* failed to derive IP src addr */
 };
 
 struct bpf_fib_lookup {
@@ -6765,7 +7165,7 @@ struct bpf_fib_lookup {
 
                /* output: MTU value */
                __u16   mtu_result;
-       };
+       } __attribute__((packed, aligned(2)));
        /* input: L3 device index for lookup
         * output: device index from FIB lookup
         */
@@ -6780,6 +7180,9 @@ struct bpf_fib_lookup {
                __u32   rt_metric;
        };
 
+       /* input: source address to consider for lookup
+        * output: source address result from lookup
+        */
        union {
                __be32          ipv4_src;
                __u32           ipv6_src[4];  /* in6_addr; network order */
@@ -6794,11 +7197,32 @@ struct bpf_fib_lookup {
                __u32           ipv6_dst[4];  /* in6_addr; network order */
        };
 
-       /* output */
-       __be16  h_vlan_proto;
-       __be16  h_vlan_TCI;
-       __u8    smac[6];     /* ETH_ALEN */
-       __u8    dmac[6];     /* ETH_ALEN */
+       union {
+               struct {
+                       /* output */
+                       __be16  h_vlan_proto;
+                       __be16  h_vlan_TCI;
+               };
+               /* input: when accompanied with the
+                * 'BPF_FIB_LOOKUP_DIRECT | BPF_FIB_LOOKUP_TBID` flags, a
+                * specific routing table to use for the fib lookup.
+                */
+               __u32   tbid;
+       };
+
+       union {
+               /* input */
+               struct {
+                       __u32   mark;   /* policy routing */
+                       /* 2 4-byte holes for input */
+               };
+
+               /* output: source and dest mac */
+               struct {
+                       __u8    smac[6];        /* ETH_ALEN */
+                       __u8    dmac[6];        /* ETH_ALEN */
+               };
+       };
 };
 
 struct bpf_redir_neigh {
@@ -6882,25 +7306,37 @@ struct bpf_spin_lock {
 };
 
 struct bpf_timer {
-       __u64 :64;
-       __u64 :64;
+       __u64 __opaque[2];
+} __attribute__((aligned(8)));
+
+struct bpf_wq {
+       __u64 __opaque[2];
 } __attribute__((aligned(8)));
 
 struct bpf_dynptr {
-       __u64 :64;
-       __u64 :64;
+       __u64 __opaque[2];
 } __attribute__((aligned(8)));
 
 struct bpf_list_head {
-       __u64 :64;
-       __u64 :64;
+       __u64 __opaque[2];
 } __attribute__((aligned(8)));
 
 struct bpf_list_node {
-       __u64 :64;
-       __u64 :64;
+       __u64 __opaque[3];
 } __attribute__((aligned(8)));
 
+struct bpf_rb_root {
+       __u64 __opaque[2];
+} __attribute__((aligned(8)));
+
+struct bpf_rb_node {
+       __u64 __opaque[4];
+} __attribute__((aligned(8)));
+
+struct bpf_refcount {
+       __u32 __opaque[1];
+} __attribute__((aligned(4)));
+
 struct bpf_sysctl {
        __u32   write;          /* Sysctl is being read (= 0) or written (= 1).
                                 * Allows 1,2,4-byte read, but no write.
@@ -7050,4 +7486,23 @@ struct bpf_core_relo {
        enum bpf_core_relo_kind kind;
 };
 
+/*
+ * Flags to control bpf_timer_start() behaviour.
+ *     - BPF_F_TIMER_ABS: Timeout passed is absolute time, by default it is
+ *       relative to current time.
+ *     - BPF_F_TIMER_CPU_PIN: Timer will be pinned to the CPU of the caller.
+ */
+enum {
+       BPF_F_TIMER_ABS = (1ULL << 0),
+       BPF_F_TIMER_CPU_PIN = (1ULL << 1),
+};
+
+/* BPF numbers iterator state */
+struct bpf_iter_num {
+       /* opaque iterator state; having __u64 here allows to preserve correct
+        * alignment requirements in vmlinux.h, generated from BTF
+        */
+       __u64 __opaque[1];
+} __attribute__((aligned(8)));
+
 #endif /* __LINUX_BPF_H__ */
similarity index 97%
rename from src/shared/linux/bpf_insn.h
rename to src/basic/linux/bpf_insn.h
index 92ec06b0e6c197a603baa281ad91ad9e5f6573cd..29c3bb6ad1cd8a82983bfd634119eca30853f0c2 100644 (file)
@@ -210,14 +210,6 @@ struct bpf_insn;
                .off   = OFF,                                   \
                .imm   = IMM })
 
-#define BPF_JMP_A(OFF)                                         \
-       ((struct bpf_insn) {                                    \
-               .code  = BPF_JMP | BPF_JA,                      \
-               .dst_reg = 0,                                   \
-               .src_reg = 0,                                   \
-               .off   = OFF,                                   \
-               .imm   = 0 })
-
 /* Raw code statement block */
 
 #define BPF_RAW_INSN(CODE, DST, SRC, OFF, IMM)                 \
index 73a295e37dc8905128abca2ca4e8985990b01db7..265093c125f912b47180c6232b6bf218ec571f52 100644 (file)
@@ -17,8 +17,8 @@
  * Boston, MA 021110-1307, USA.
  */
 
-#ifndef _UAPI_LINUX_BTRFS_H
-#define _UAPI_LINUX_BTRFS_H
+#ifndef _LINUX_BTRFS_H
+#define _LINUX_BTRFS_H
 
 #ifdef __cplusplus
 extern "C" {
@@ -44,10 +44,8 @@ struct btrfs_ioctl_vol_args {
 #define BTRFS_DEVICE_PATH_NAME_MAX     1024
 #define BTRFS_SUBVOL_NAME_MAX          4039
 
-#ifndef __KERNEL__
 /* Deprecated since 5.7 */
 # define BTRFS_SUBVOL_CREATE_ASYNC     (1ULL << 0)
-#endif
 #define BTRFS_SUBVOL_RDONLY            (1ULL << 1)
 #define BTRFS_SUBVOL_QGROUP_INHERIT    (1ULL << 2)
 
@@ -1188,4 +1186,4 @@ enum btrfs_err_code {
 }
 #endif
 
-#endif /* _UAPI_LINUX_BTRFS_H */
+#endif /* _LINUX_BTRFS_H */
index d24e8e121507bb691e3fa272b63b44f3194f6776..ae5e4be887984e44379ae4d1cab4fb08a507b1a0 100644 (file)
@@ -4,11 +4,7 @@
 
 #include <linux/btrfs.h>
 #include <linux/types.h>
-#ifdef __KERNEL__
-#include <linux/stddef.h>
-#else
 #include <stddef.h>
-#endif
 
 /* ASCII for _BHRfS_M, no terminating nul */
 #define BTRFS_MAGIC 0x4D5F53665248425FULL
 #define BTRFS_METADATA_ITEM_KEY        169
 
 /*
- * Special inline ref key which stores the id of the subvolume which originally
+ * Special __inline__ ref key which stores the id of the subvolume which originally
  * created the extent. This subvolume owns the extent permanently from the
  * perspective of simple quotas. Needed to know which subvolume to free quota
  * usage from when the extent is deleted.
  *
- * Stored as an inline ref rather to avoid wasting space on a separate item on
- * top of the existing extent item. However, unlike the other inline refs,
+ * Stored as an __inline__ ref rather to avoid wasting space on a separate item on
+ * top of the existing extent item. However, unlike the other __inline__ refs,
  * there is one one owner ref per extent rather than one per extent.
  *
- * Because of this, it goes at the front of the list of inline refs, and thus
- * must have a lower type value than any other inline ref type (to satisfy the
- * disk format rule that inline refs have non-decreasing type).
+ * Because of this, it goes at the front of the list of __inline__ refs, and thus
+ * must have a lower type value than any other __inline__ ref type (to satisfy the
+ * disk format rule that __inline__ refs have non-decreasing type).
  */
 #define BTRFS_EXTENT_OWNER_REF_KEY     172
 
@@ -404,7 +400,7 @@ enum btrfs_csum_type {
 /* Directory contains encrypted data */
 #define BTRFS_FT_ENCRYPTED     0x80
 
-static inline __u8 btrfs_dir_flags_to_ftype(__u8 flags)
+static __inline__ __u8 btrfs_dir_flags_to_ftype(__u8 flags)
 {
        return flags & ~BTRFS_FT_ENCRYPTED;
 }
@@ -970,7 +966,7 @@ struct btrfs_root_item {
  * Btrfs root item used to be smaller than current size.  The old format ends
  * at where member generation_v2 is.
  */
-static inline __u32 btrfs_legacy_root_item_size(void)
+static __inline__ __u32 btrfs_legacy_root_item_size(void)
 {
        return offsetof(struct btrfs_root_item, generation_v2);
 }
@@ -1094,14 +1090,14 @@ struct btrfs_file_extent_item {
        __u8 encryption;
        __le16 other_encoding; /* spare for later use */
 
-       /* are we inline data or a real extent? */
+       /* are we __inline__ data or a real extent? */
        __u8 type;
 
        /*
         * disk space consumed by the extent, checksum blocks are included
         * in these numbers
         *
-        * At this offset in the structure, the inline extent data start.
+        * At this offset in the structure, the __inline__ extent data start.
         */
        __le64 disk_bytenr;
        __le64 disk_num_bytes;
@@ -1205,14 +1201,14 @@ struct btrfs_dev_replace_item {
 #define BTRFS_EXTENDED_PROFILE_MASK    (BTRFS_BLOCK_GROUP_PROFILE_MASK | \
                                         BTRFS_AVAIL_ALLOC_BIT_SINGLE)
 
-static inline __u64 chunk_to_extended(__u64 flags)
+static __inline__ __u64 chunk_to_extended(__u64 flags)
 {
        if ((flags & BTRFS_BLOCK_GROUP_PROFILE_MASK) == 0)
                flags |= BTRFS_AVAIL_ALLOC_BIT_SINGLE;
 
        return flags;
 }
-static inline __u64 extended_to_chunk(__u64 flags)
+static __inline__ __u64 extended_to_chunk(__u64 flags)
 {
        return flags & ~BTRFS_AVAIL_ALLOC_BIT_SINGLE;
 }
@@ -1231,7 +1227,7 @@ struct btrfs_free_space_info {
 #define BTRFS_FREE_SPACE_USING_BITMAPS (1ULL << 0)
 
 #define BTRFS_QGROUP_LEVEL_SHIFT               48
-static inline __u16 btrfs_qgroup_level(__u64 qgroupid)
+static __inline__ __u16 btrfs_qgroup_level(__u64 qgroupid)
 {
        return (__u16)(qgroupid >> BTRFS_QGROUP_LEVEL_SHIFT);
 }
index 02ec32d694742a32b3a51ff8c33616e109cef9f4..8ec98c21eaeeb499f082ce2c0809719e487055b9 100644 (file)
@@ -16,8 +16,8 @@
  * GNU General Public License for more details.
  */
 
-#ifndef _UAPI_CAN_NETLINK_H
-#define _UAPI_CAN_NETLINK_H
+#ifndef _CAN_NETLINK_H
+#define _CAN_NETLINK_H
 
 #include <linux/types.h>
 
index 4fa9d8777a07b440cdd2a577bd000f9d40d44574..3e3d2eb48470a75dc28f138907c6a3231a8e35b7 100644 (file)
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
-#ifndef _UAPI_CAN_VXCAN_H
-#define _UAPI_CAN_VXCAN_H
+#ifndef _CAN_VXCAN_H
+#define _CAN_VXCAN_H
 
 enum {
        VXCAN_INFO_UNSPEC,
index 3c1cbd1db2f52caae2eb8d4b34264cfe1bb8449f..88e5890d43ce71da358140ab2abd85784d8af0fc 100644 (file)
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
 
-#ifndef _UAPI_LINUX_CFM_BRIDGE_H_
-#define _UAPI_LINUX_CFM_BRIDGE_H_
+#ifndef _LINUX_CFM_BRIDGE_H_
+#define _LINUX_CFM_BRIDGE_H_
 
 #include <linux/types.h>
 #include <linux/if_ether.h>
diff --git a/src/basic/linux/const.h b/src/basic/linux/const.h
new file mode 100644 (file)
index 0000000..1eb84b5
--- /dev/null
@@ -0,0 +1,36 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/* const.h: Macros for dealing with constants.  */
+
+#ifndef _LINUX_CONST_H
+#define _LINUX_CONST_H
+
+/* Some constant macros are used in both assembler and
+ * C code.  Therefore we cannot annotate them always with
+ * 'UL' and other type specifiers unilaterally.  We
+ * use the following macros to deal with this.
+ *
+ * Similarly, _AT() will cast an expression with a type in C, but
+ * leave it unchanged in asm.
+ */
+
+#ifdef __ASSEMBLY__
+#define _AC(X,Y)       X
+#define _AT(T,X)       X
+#else
+#define __AC(X,Y)      (X##Y)
+#define _AC(X,Y)       __AC(X,Y)
+#define _AT(T,X)       ((T)(X))
+#endif
+
+#define _UL(x)         (_AC(x, UL))
+#define _ULL(x)                (_AC(x, ULL))
+
+#define _BITUL(x)      (_UL(1) << (x))
+#define _BITULL(x)     (_ULL(1) << (x))
+
+#define __ALIGN_KERNEL(x, a)           __ALIGN_KERNEL_MASK(x, (__typeof__(x))(a) - 1)
+#define __ALIGN_KERNEL_MASK(x, mask)   (((x) + (mask)) & ~(mask))
+
+#define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
+
+#endif /* _LINUX_CONST_H */
similarity index 99%
rename from src/shared/linux/dm-ioctl.h
rename to src/basic/linux/dm-ioctl.h
index 19a64fc3f2f0412db0fdd2dbcd483e6f303918e8..9910b5eb1c91e4f2c8aed5a0a5c81c8438332874 100644 (file)
@@ -288,7 +288,7 @@ enum {
 #define DM_VERSION_MAJOR       4
 #define DM_VERSION_MINOR       27
 #define DM_VERSION_PATCHLEVEL  0
-#define DM_VERSION_EXTRA       "-ioctl (2022-02-22)"
+#define DM_VERSION_EXTRA       "-ioctl (2023-03-01)"
 
 /* Status bits */
 #define DM_READONLY_FLAG       (1 << 0) /* In/Out */
similarity index 92%
rename from src/shared/linux/ethtool.h
rename to src/basic/linux/ethtool.h
index 3d1da515c080747bb3d1899ea9f98123a74e0a27..1a7169b59df8b57c60c7f887ea458d34bb2a77f6 100644 (file)
 
 #include <limits.h> /* for INT_MAX */
 
-#ifndef __KERNEL_DIV_ROUND_UP
-#define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
-#endif
-
 /* All structures exposed to userland should be defined such that they
  * have the same layout for 32-bit and 64-bit userland.
  */
@@ -713,6 +709,24 @@ enum ethtool_stringset {
        ETH_SS_COUNT
 };
 
+/**
+ * enum ethtool_mac_stats_src - source of ethtool MAC statistics
+ * @ETHTOOL_MAC_STATS_SRC_AGGREGATE:
+ *     if device supports a MAC merge layer, this retrieves the aggregate
+ *     statistics of the eMAC and pMAC. Otherwise, it retrieves just the
+ *     statistics of the single (express) MAC.
+ * @ETHTOOL_MAC_STATS_SRC_EMAC:
+ *     if device supports a MM layer, this retrieves the eMAC statistics.
+ *     Otherwise, it retrieves the statistics of the single (express) MAC.
+ * @ETHTOOL_MAC_STATS_SRC_PMAC:
+ *     if device supports a MM layer, this retrieves the pMAC statistics.
+ */
+enum ethtool_mac_stats_src {
+       ETHTOOL_MAC_STATS_SRC_AGGREGATE,
+       ETHTOOL_MAC_STATS_SRC_EMAC,
+       ETHTOOL_MAC_STATS_SRC_PMAC,
+};
+
 /**
  * enum ethtool_module_power_mode_policy - plug-in module power mode policy
  * @ETHTOOL_MODULE_POWER_MODE_POLICY_HIGH: Module is always in high power mode.
@@ -736,6 +750,61 @@ enum ethtool_module_power_mode {
        ETHTOOL_MODULE_POWER_MODE_HIGH,
 };
 
+/**
+ * enum ethtool_pse_types - Types of PSE controller.
+ * @ETHTOOL_PSE_UNKNOWN: Type of PSE controller is unknown
+ * @ETHTOOL_PSE_PODL: PSE controller which support PoDL
+ * @ETHTOOL_PSE_C33: PSE controller which support Clause 33 (PoE)
+ */
+enum ethtool_pse_types {
+       ETHTOOL_PSE_UNKNOWN =   1 << 0,
+       ETHTOOL_PSE_PODL =      1 << 1,
+       ETHTOOL_PSE_C33 =       1 << 2,
+};
+
+/**
+ * enum ethtool_c33_pse_admin_state - operational state of the PoDL PSE
+ *     functions. IEEE 802.3-2022 30.9.1.1.2 aPSEAdminState
+ * @ETHTOOL_C33_PSE_ADMIN_STATE_UNKNOWN: state of PSE functions is unknown
+ * @ETHTOOL_C33_PSE_ADMIN_STATE_DISABLED: PSE functions are disabled
+ * @ETHTOOL_C33_PSE_ADMIN_STATE_ENABLED: PSE functions are enabled
+ */
+enum ethtool_c33_pse_admin_state {
+       ETHTOOL_C33_PSE_ADMIN_STATE_UNKNOWN = 1,
+       ETHTOOL_C33_PSE_ADMIN_STATE_DISABLED,
+       ETHTOOL_C33_PSE_ADMIN_STATE_ENABLED,
+};
+
+/**
+ * enum ethtool_c33_pse_pw_d_status - power detection status of the PSE.
+ *     IEEE 802.3-2022 30.9.1.1.3 aPoDLPSEPowerDetectionStatus:
+ * @ETHTOOL_C33_PSE_PW_D_STATUS_UNKNOWN: PSE status is unknown
+ * @ETHTOOL_C33_PSE_PW_D_STATUS_DISABLED: The enumeration "disabled"
+ *     indicates that the PSE State diagram is in the state DISABLED.
+ * @ETHTOOL_C33_PSE_PW_D_STATUS_SEARCHING: The enumeration "searching"
+ *     indicates the PSE State diagram is in a state other than those
+ *     listed.
+ * @ETHTOOL_C33_PSE_PW_D_STATUS_DELIVERING: The enumeration
+ *     "deliveringPower" indicates that the PSE State diagram is in the
+ *     state POWER_ON.
+ * @ETHTOOL_C33_PSE_PW_D_STATUS_TEST: The enumeration "test" indicates that
+ *     the PSE State diagram is in the state TEST_MODE.
+ * @ETHTOOL_C33_PSE_PW_D_STATUS_FAULT: The enumeration "fault" indicates that
+ *     the PSE State diagram is in the state TEST_ERROR.
+ * @ETHTOOL_C33_PSE_PW_D_STATUS_OTHERFAULT: The enumeration "otherFault"
+ *     indicates that the PSE State diagram is in the state IDLE due to
+ *     the variable error_condition = true.
+ */
+enum ethtool_c33_pse_pw_d_status {
+       ETHTOOL_C33_PSE_PW_D_STATUS_UNKNOWN = 1,
+       ETHTOOL_C33_PSE_PW_D_STATUS_DISABLED,
+       ETHTOOL_C33_PSE_PW_D_STATUS_SEARCHING,
+       ETHTOOL_C33_PSE_PW_D_STATUS_DELIVERING,
+       ETHTOOL_C33_PSE_PW_D_STATUS_TEST,
+       ETHTOOL_C33_PSE_PW_D_STATUS_FAULT,
+       ETHTOOL_C33_PSE_PW_D_STATUS_OTHERFAULT,
+};
+
 /**
  * enum ethtool_podl_pse_admin_state - operational state of the PoDL PSE
  *     functions. IEEE 802.3-2018 30.15.1.1.2 aPoDLPSEAdminState
@@ -781,6 +850,31 @@ enum ethtool_podl_pse_pw_d_status {
        ETHTOOL_PODL_PSE_PW_D_STATUS_ERROR,
 };
 
+/**
+ * enum ethtool_mm_verify_status - status of MAC Merge Verify function
+ * @ETHTOOL_MM_VERIFY_STATUS_UNKNOWN:
+ *     verification status is unknown
+ * @ETHTOOL_MM_VERIFY_STATUS_INITIAL:
+ *     the 802.3 Verify State diagram is in the state INIT_VERIFICATION
+ * @ETHTOOL_MM_VERIFY_STATUS_VERIFYING:
+ *     the Verify State diagram is in the state VERIFICATION_IDLE,
+ *     SEND_VERIFY or WAIT_FOR_RESPONSE
+ * @ETHTOOL_MM_VERIFY_STATUS_SUCCEEDED:
+ *     indicates that the Verify State diagram is in the state VERIFIED
+ * @ETHTOOL_MM_VERIFY_STATUS_FAILED:
+ *     the Verify State diagram is in the state VERIFY_FAIL
+ * @ETHTOOL_MM_VERIFY_STATUS_DISABLED:
+ *     verification of preemption operation is disabled
+ */
+enum ethtool_mm_verify_status {
+       ETHTOOL_MM_VERIFY_STATUS_UNKNOWN,
+       ETHTOOL_MM_VERIFY_STATUS_INITIAL,
+       ETHTOOL_MM_VERIFY_STATUS_VERIFYING,
+       ETHTOOL_MM_VERIFY_STATUS_SUCCEEDED,
+       ETHTOOL_MM_VERIFY_STATUS_FAILED,
+       ETHTOOL_MM_VERIFY_STATUS_DISABLED,
+};
+
 /**
  * struct ethtool_gstrings - string set for data tagging
  * @cmd: Command number = %ETHTOOL_GSTRINGS
@@ -1093,7 +1187,7 @@ struct ethtool_rx_flow_spec {
 /* How rings are laid out when accessing virtual functions or
  * offloaded queues is device specific. To allow users to do flow
  * steering and specify these queues the ring cookie is partitioned
- * into a 32-bit queue index with an 8 bit virtual function id.
+ * into a 32bit queue index with an 8 bit virtual function id.
  * This also leaves the 3bytes for further specifiers. It is possible
  * future devices may support more than 256 virtual functions if
  * devices start supporting PCIe w/ARI. However at the moment I
@@ -1185,7 +1279,7 @@ struct ethtool_rxnfc {
                __u32                   rule_cnt;
                __u32                   rss_context;
        };
-       __u32                           rule_locs[0];
+       __u32                           rule_locs[];
 };
 
 
@@ -1225,6 +1319,8 @@ struct ethtool_rxfh_indir {
  *     hardware hash key.
  * @hfunc: Defines the current RSS hash function used by HW (or to be set to).
  *     Valid values are one of the %ETH_RSS_HASH_*.
+ * @input_xfrm: Defines how the input data is transformed. Valid values are one
+ *     of %RXH_XFRM_*.
  * @rsvd8: Reserved for future use; see the note on reserved space.
  * @rsvd32: Reserved for future use; see the note on reserved space.
  * @rss_config: RX ring/queue index for each hash value i.e., indirection table
@@ -1244,7 +1340,8 @@ struct ethtool_rxfh {
        __u32   indir_size;
        __u32   key_size;
        __u8    hfunc;
-       __u8    rsvd8[3];
+       __u8    input_xfrm;
+       __u8    rsvd8[2];
        __u32   rsvd32;
        __u32   rss_config[];
 };
@@ -1743,6 +1840,9 @@ enum ethtool_link_mode_bit_indices {
        ETHTOOL_LINK_MODE_800000baseDR8_2_Full_BIT       = 96,
        ETHTOOL_LINK_MODE_800000baseSR8_Full_BIT         = 97,
        ETHTOOL_LINK_MODE_800000baseVR8_Full_BIT         = 98,
+       ETHTOOL_LINK_MODE_10baseT1S_Full_BIT             = 99,
+       ETHTOOL_LINK_MODE_10baseT1S_Half_BIT             = 100,
+       ETHTOOL_LINK_MODE_10baseT1S_P2MP_Half_BIT        = 101,
 
        /* must be last entry */
        __ETHTOOL_LINK_MODE_MASK_NBITS
@@ -1948,6 +2048,15 @@ static __inline__ int ethtool_validate_duplex(__u8 duplex)
 
 #define WOL_MODE_COUNT         8
 
+/* RSS hash function data
+ * XOR the corresponding source and destination fields of each specified
+ * protocol. Both copies of the XOR'ed fields are fed into the RSS and RXHASH
+ * calculation. Note that this XORing reduces the input set entropy and could
+ * be exploited to reduce the RSS queue spread.
+ */
+#define        RXH_XFRM_SYM_XOR        (1 << 0)
+#define        RXH_XFRM_NO_CHANGE      0xff
+
 /* L2-L4 network traffic flow types */
 #define        TCP_V4_FLOW     0x01    /* hash or spec (tcp_ip4_spec) */
 #define        UDP_V4_FLOW     0x02    /* hash or spec (udp_ip4_spec) */
@@ -1967,6 +2076,53 @@ static __inline__ int ethtool_validate_duplex(__u8 duplex)
 #define        IPV4_FLOW       0x10    /* hash only */
 #define        IPV6_FLOW       0x11    /* hash only */
 #define        ETHER_FLOW      0x12    /* spec only (ether_spec) */
+
+/* Used for GTP-U IPv4 and IPv6.
+ * The format of GTP packets only includes
+ * elements such as TEID and GTP version.
+ * It is primarily intended for data communication of the UE.
+ */
+#define GTPU_V4_FLOW 0x13      /* hash only */
+#define GTPU_V6_FLOW 0x14      /* hash only */
+
+/* Use for GTP-C IPv4 and v6.
+ * The format of these GTP packets does not include TEID.
+ * Primarily expected to be used for communication
+ * to create sessions for UE data communication,
+ * commonly referred to as CSR (Create Session Request).
+ */
+#define GTPC_V4_FLOW 0x15      /* hash only */
+#define GTPC_V6_FLOW 0x16      /* hash only */
+
+/* Use for GTP-C IPv4 and v6.
+ * Unlike GTPC_V4_FLOW, the format of these GTP packets includes TEID.
+ * After session creation, it becomes this packet.
+ * This is mainly used for requests to realize UE handover.
+ */
+#define GTPC_TEID_V4_FLOW 0x17 /* hash only */
+#define GTPC_TEID_V6_FLOW 0x18 /* hash only */
+
+/* Use for GTP-U and extended headers for the PSC (PDU Session Container).
+ * The format of these GTP packets includes TEID and QFI.
+ * In 5G communication using UPF (User Plane Function),
+ * data communication with this extended header is performed.
+ */
+#define GTPU_EH_V4_FLOW 0x19   /* hash only */
+#define GTPU_EH_V6_FLOW 0x1a   /* hash only */
+
+/* Use for GTP-U IPv4 and v6 PSC (PDU Session Container) extended headers.
+ * This differs from GTPU_EH_V(4|6)_FLOW in that it is distinguished by
+ * UL/DL included in the PSC.
+ * There are differences in the data included based on Downlink/Uplink,
+ * and can be used to distinguish packets.
+ * The functions described so far are useful when you want to
+ * handle communication from the mobile network in UPF, PGW, etc.
+ */
+#define GTPU_UL_V4_FLOW 0x1b   /* hash only */
+#define GTPU_UL_V6_FLOW 0x1c   /* hash only */
+#define GTPU_DL_V4_FLOW 0x1d   /* hash only */
+#define GTPU_DL_V6_FLOW 0x1e   /* hash only */
+
 /* Flag to enable additional fields in struct ethtool_rx_flow_spec */
 #define        FLOW_EXT        0x80000000
 #define        FLOW_MAC_EXT    0x40000000
@@ -1981,6 +2137,7 @@ static __inline__ int ethtool_validate_duplex(__u8 duplex)
 #define        RXH_IP_DST      (1 << 5)
 #define        RXH_L4_B_0_1    (1 << 6) /* src port in case of TCP/UDP/SCTP */
 #define        RXH_L4_B_2_3    (1 << 7) /* dst port in case of TCP/UDP/SCTP */
+#define        RXH_GTP_TEID    (1 << 8) /* teid in case of GTP */
 #define        RXH_DISCARD     (1 << 31)
 
 #define        RX_CLS_FLOW_DISC        0xffffffffffffffffULL
@@ -2084,18 +2241,6 @@ enum ethtool_reset_flags {
  *     refused. For drivers: ignore this field (use kernel's
  *     __ETHTOOL_LINK_MODE_MASK_NBITS instead), any change to it will
  *     be overwritten by kernel.
- * @supported: Bitmap with each bit meaning given by
- *     %ethtool_link_mode_bit_indices for the link modes, physical
- *     connectors and other link features for which the interface
- *     supports autonegotiation or auto-detection.  Read-only.
- * @advertising: Bitmap with each bit meaning given by
- *     %ethtool_link_mode_bit_indices for the link modes, physical
- *     connectors and other link features that are advertised through
- *     autonegotiation or enabled for auto-detection.
- * @lp_advertising: Bitmap with each bit meaning given by
- *     %ethtool_link_mode_bit_indices for the link modes, and other
- *     link features that the link partner advertised through
- *     autonegotiation; 0 if unknown or not applicable.  Read-only.
  * @transceiver: Used to distinguish different possible PHY types,
  *     reported consistently by PHYLIB.  Read-only.
  * @master_slave_cfg: Master/slave port mode.
@@ -2137,6 +2282,21 @@ enum ethtool_reset_flags {
  * %set_link_ksettings() should validate all fields other than @cmd
  * and @link_mode_masks_nwords that are not described as read-only or
  * deprecated, and must ignore all fields described as read-only.
+ *
+ * @link_mode_masks is divided into three bitfields, each of length
+ * @link_mode_masks_nwords:
+ * - supported: Bitmap with each bit meaning given by
+ *     %ethtool_link_mode_bit_indices for the link modes, physical
+ *     connectors and other link features for which the interface
+ *     supports autonegotiation or auto-detection.  Read-only.
+ * - advertising: Bitmap with each bit meaning given by
+ *     %ethtool_link_mode_bit_indices for the link modes, physical
+ *     connectors and other link features that are advertised through
+ *     autonegotiation or enabled for auto-detection.
+ * - lp_advertising: Bitmap with each bit meaning given by
+ *     %ethtool_link_mode_bit_indices for the link modes, and other
+ *     link features that the link partner advertised through
+ *     autonegotiation; 0 if unknown or not applicable.  Read-only.
  */
 struct ethtool_link_settings {
        __u32   cmd;
index b5cd3e7b3775a61690ce5998b6fe379de34b9e01..1c2b680bb476336166c07e7cdb1e5f6f0142c705 100644 (file)
@@ -3,8 +3,8 @@
 /*     Documentation/netlink/specs/fou.yaml */
 /* YNL-GEN uapi header */
 
-#ifndef _UAPI_LINUX_FOU_H
-#define _UAPI_LINUX_FOU_H
+#ifndef _LINUX_FOU_H
+#define _LINUX_FOU_H
 
 #define FOU_GENL_NAME          "fou"
 #define FOU_GENL_VERSION       1
@@ -43,4 +43,4 @@ enum {
 };
 #define FOU_CMD_MAX (__FOU_CMD_MAX - 1)
 
-#endif /* _UAPI_LINUX_FOU_H */
+#endif /* _LINUX_FOU_H */
index ddba3ca01e39aedd09ee86d1e9145bb66fe09b35..e9b8117bdcf9853c174c9bed1dcaf6732283a961 100644 (file)
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-#ifndef _UAPI__LINUX_GENERIC_NETLINK_H
-#define _UAPI__LINUX_GENERIC_NETLINK_H
+#ifndef __LINUX_GENERIC_NETLINK_H
+#define __LINUX_GENERIC_NETLINK_H
 
 #include <linux/types.h>
 #include <linux/netlink.h>
@@ -100,4 +100,4 @@ enum {
 
 #define CTRL_ATTR_POLICY_MAX (__CTRL_ATTR_POLICY_DUMP_MAX - 1)
 
-#endif /* _UAPI__LINUX_GENERIC_NETLINK_H */
+#endif /* __LINUX_GENERIC_NETLINK_H */
index e79f5c8cebd7ee56cd6d7602fedb1873560303e1..b287b2a0bb7761a597165ed17666b5d846fcd1b5 100644 (file)
 #include <linux/libc-compat.h>          /* for compatibility with glibc */
 #include <linux/types.h>               /* for "__kernel_caddr_t" et al */
 #include <linux/socket.h>              /* for "struct sockaddr" et al  */
+               /* for "__user" et al           */
 
-#ifndef __KERNEL__
 #include <sys/socket.h>                        /* for struct sockaddr.         */
-#endif
 
 #if __UAPI_DEF_IF_IFNAMSIZ
 #define        IFNAMSIZ        16
@@ -50,7 +49,7 @@
  * are annotated below, note that only a few flags can be toggled and some
  * other flags are always preserved from the original net_device flags
  * even if you try to set them via sysfs. Flags which are always preserved
- * are kept under the flag grouping @IFF_VOLATILE. Flags which are volatile
+ * are kept under the flag grouping @IFF_VOLATILE. Flags which are __volatile__
  * are annotated below as such.
  *
  * You should have a pretty good reason to be extending these flags.
@@ -82,26 +81,26 @@ enum net_device_flags {
 /* for compatibility with glibc net/if.h */
 #if __UAPI_DEF_IF_NET_DEVICE_FLAGS
        IFF_UP                          = 1<<0,  /* sysfs */
-       IFF_BROADCAST                   = 1<<1,  /* volatile */
+       IFF_BROADCAST                   = 1<<1,  /* __volatile__ */
        IFF_DEBUG                       = 1<<2,  /* sysfs */
-       IFF_LOOPBACK                    = 1<<3,  /* volatile */
-       IFF_POINTOPOINT                 = 1<<4,  /* volatile */
+       IFF_LOOPBACK                    = 1<<3,  /* __volatile__ */
+       IFF_POINTOPOINT                 = 1<<4,  /* __volatile__ */
        IFF_NOTRAILERS                  = 1<<5,  /* sysfs */
-       IFF_RUNNING                     = 1<<6,  /* volatile */
+       IFF_RUNNING                     = 1<<6,  /* __volatile__ */
        IFF_NOARP                       = 1<<7,  /* sysfs */
        IFF_PROMISC                     = 1<<8,  /* sysfs */
        IFF_ALLMULTI                    = 1<<9,  /* sysfs */
-       IFF_MASTER                      = 1<<10, /* volatile */
-       IFF_SLAVE                       = 1<<11, /* volatile */
+       IFF_MASTER                      = 1<<10, /* __volatile__ */
+       IFF_SLAVE                       = 1<<11, /* __volatile__ */
        IFF_MULTICAST                   = 1<<12, /* sysfs */
        IFF_PORTSEL                     = 1<<13, /* sysfs */
        IFF_AUTOMEDIA                   = 1<<14, /* sysfs */
        IFF_DYNAMIC                     = 1<<15, /* sysfs */
 #endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS */
 #if __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO
-       IFF_LOWER_UP                    = 1<<16, /* volatile */
-       IFF_DORMANT                     = 1<<17, /* volatile */
-       IFF_ECHO                        = 1<<18, /* volatile */
+       IFF_LOWER_UP                    = 1<<16, /* __volatile__ */
+       IFF_DORMANT                     = 1<<17, /* __volatile__ */
+       IFF_ECHO                        = 1<<18, /* __volatile__ */
 #endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO */
 };
 #endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO != 0 || __UAPI_DEF_IF_NET_DEVICE_FLAGS != 0 */
index 1c392dd95a5eebe006479ebec48bd3a460ea0068..d6db3ff7fa1055ce632fcf39bc543f39ecf354e5 100644 (file)
@@ -65,10 +65,8 @@ struct ifa_cacheinfo {
 };
 
 /* backwards compatibility for userspace */
-#ifndef __KERNEL__
 #define IFA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifaddrmsg))))
 #define IFA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifaddrmsg))
-#endif
 
 /* ifa_proto */
 #define IFAPROT_UNSPEC         0
index a5b743a2f77500238b0dfe0f919284dabd671581..c206cf6d9a1edffa5df211d69f8ef4ff772c6078 100644 (file)
@@ -11,8 +11,8 @@
  *     2 of the License, or (at your option) any later version.
  */
 
-#ifndef _UAPI_LINUX_IF_BRIDGE_H
-#define _UAPI_LINUX_IF_BRIDGE_H
+#ifndef _LINUX_IF_BRIDGE_H
+#define _LINUX_IF_BRIDGE_H
 
 #include <linux/types.h>
 #include <linux/if_ether.h>
@@ -855,4 +855,4 @@ enum {
        __BRIDGE_QUERIER_MAX
 };
 #define BRIDGE_QUERIER_MAX (__BRIDGE_QUERIER_MAX - 1)
-#endif /* _UAPI_LINUX_IF_BRIDGE_H */
+#endif /* _LINUX_IF_BRIDGE_H */
index 69e0457eb2000dfda7b96fd4b1daff93f7970f9f..a1aff8e337998e7d870c0fb96f805532f3df7a7a 100644 (file)
@@ -19,8 +19,8 @@
  *             2 of the License, or (at your option) any later version.
  */
 
-#ifndef _UAPI_LINUX_IF_ETHER_H
-#define _UAPI_LINUX_IF_ETHER_H
+#ifndef _LINUX_IF_ETHER_H
+#define _LINUX_IF_ETHER_H
 
 #include <linux/types.h>
 
@@ -178,4 +178,4 @@ struct ethhdr {
 #endif
 
 
-#endif /* _UAPI_LINUX_IF_ETHER_H */
+#endif /* _LINUX_IF_ETHER_H */
index ffa637b38c93bc4f13e68bcaa2b84bc577cb9c81..987efeddc30e987e1fd1b2d39dfc2024c644645f 100644 (file)
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-#ifndef _UAPI_LINUX_IF_LINK_H
-#define _UAPI_LINUX_IF_LINK_H
+#ifndef _LINUX_IF_LINK_H
+#define _LINUX_IF_LINK_H
 
 #include <linux/types.h>
 #include <linux/netlink.h>
@@ -393,10 +393,8 @@ enum {
 };
 
 /* backwards compatibility for userspace */
-#ifndef __KERNEL__
 #define IFLA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg))))
 #define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
-#endif
 
 enum {
        IFLA_INET_UNSPEC,
@@ -1466,6 +1464,8 @@ enum {
        IFLA_GTP_ROLE,
        IFLA_GTP_CREATE_SOCKETS,
        IFLA_GTP_RESTART_COUNT,
+       IFLA_GTP_LOCAL,
+       IFLA_GTP_LOCAL6,
        __IFLA_GTP_MAX,
 };
 #define IFLA_GTP_MAX (__IFLA_GTP_MAX - 1)
@@ -1771,6 +1771,7 @@ enum {
        IFLA_HSR_PROTOCOL,              /* Indicate different protocol than
                                         * HSR. For example PRP.
                                         */
+       IFLA_HSR_INTERLINK,             /* HSR interlink network device */
        __IFLA_HSR_MAX,
 };
 
@@ -1956,4 +1957,4 @@ enum {
 
 #define IFLA_DSA_MAX   (__IFLA_DSA_MAX - 1)
 
-#endif /* _UAPI_LINUX_IF_LINK_H */
+#endif /* _LINUX_IF_LINK_H */
index d5b6d1f37353e788ff8d0fdaf010946986c6a3fd..6edfea0a17a2e6005050ef18ecdf33df2935ac18 100644 (file)
@@ -10,8 +10,8 @@
  * (at your option) any later version.
  */
 
-#ifndef _UAPI_MACSEC_H
-#define _UAPI_MACSEC_H
+#ifndef _MACSEC_H
+#define _MACSEC_H
 
 #include <linux/types.h>
 
@@ -191,4 +191,4 @@ enum macsec_secy_stats_attr {
        MACSEC_SECY_STATS_ATTR_MAX = __MACSEC_SECY_STATS_ATTR_END - 1,
 };
 
-#endif /* _UAPI_MACSEC_H */
+#endif /* _MACSEC_H */
index 287cdc81c9390c289a30545aa7ed23d81c3329d3..8a6d5d41b824578991b05f5dcb38cbc000267143 100644 (file)
@@ -14,8 +14,8 @@
  *  GNU General Public License for more details.
  */
 
-#ifndef _UAPI__IF_TUN_H
-#define _UAPI__IF_TUN_H
+#ifndef __IF_TUN_H
+#define __IF_TUN_H
 
 #include <linux/types.h>
 #include <linux/if_ether.h>
@@ -115,4 +115,4 @@ struct tun_filter {
        __u8   addr[][ETH_ALEN];
 };
 
-#endif /* _UAPI__IF_TUN_H */
+#endif /* __IF_TUN_H */
index 102119628ff54d648f9cf086b18b134af4029ce3..b69183e609eccc94867cec6f8eb68e1b5f983662 100644 (file)
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-#ifndef _UAPI_IF_TUNNEL_H_
-#define _UAPI_IF_TUNNEL_H_
+#ifndef _IF_TUNNEL_H_
+#define _IF_TUNNEL_H_
 
 #include <linux/types.h>
 #include <linux/if.h>
@@ -146,7 +146,7 @@ enum {
 #define IFLA_GRE_MAX   (__IFLA_GRE_MAX - 1)
 
 /* VTI-mode i_flags */
-#define VTI_ISVTI ((__force __be16)0x0001)
+#define VTI_ISVTI ((__be16)0x0001)
 
 enum {
        IFLA_VTI_UNSPEC,
@@ -161,6 +161,13 @@ enum {
 
 #define IFLA_VTI_MAX   (__IFLA_VTI_MAX - 1)
 
+/* Historically, tunnel flags have been defined as __be16 and now there are
+ * no free bits left. It is strongly advised to switch the already existing
+ * userspace code to the new *_BIT definitions from down below, as __be16
+ * can't be simply cast to a wider type on LE systems. All new flags and
+ * code must use *_BIT only.
+ */
+
 #define TUNNEL_CSUM            __cpu_to_be16(0x01)
 #define TUNNEL_ROUTING         __cpu_to_be16(0x02)
 #define TUNNEL_KEY             __cpu_to_be16(0x04)
@@ -182,4 +189,31 @@ enum {
                (TUNNEL_GENEVE_OPT | TUNNEL_VXLAN_OPT | TUNNEL_ERSPAN_OPT | \
                TUNNEL_GTP_OPT)
 
-#endif /* _UAPI_IF_TUNNEL_H_ */
+enum {
+       IP_TUNNEL_CSUM_BIT              = 0U,
+       IP_TUNNEL_ROUTING_BIT,
+       IP_TUNNEL_KEY_BIT,
+       IP_TUNNEL_SEQ_BIT,
+       IP_TUNNEL_STRICT_BIT,
+       IP_TUNNEL_REC_BIT,
+       IP_TUNNEL_VERSION_BIT,
+       IP_TUNNEL_NO_KEY_BIT,
+       IP_TUNNEL_DONT_FRAGMENT_BIT,
+       IP_TUNNEL_OAM_BIT,
+       IP_TUNNEL_CRIT_OPT_BIT,
+       IP_TUNNEL_GENEVE_OPT_BIT,       /* OPTIONS_PRESENT */
+       IP_TUNNEL_VXLAN_OPT_BIT,        /* OPTIONS_PRESENT */
+       IP_TUNNEL_NOCACHE_BIT,
+       IP_TUNNEL_ERSPAN_OPT_BIT,       /* OPTIONS_PRESENT */
+       IP_TUNNEL_GTP_OPT_BIT,          /* OPTIONS_PRESENT */
+
+       IP_TUNNEL_VTI_BIT,
+       IP_TUNNEL_SIT_ISATAP_BIT        = IP_TUNNEL_VTI_BIT,
+
+       /* Flags starting from here are not available via the old UAPI */
+       IP_TUNNEL_PFCP_OPT_BIT,         /* OPTIONS_PRESENT */
+
+       __IP_TUNNEL_FLAG_NUM,
+};
+
+#endif /* _IF_TUNNEL_H_ */
index e682ab628dfa66bcbc10f9b4adc08f2a61db377b..7bdd6843c019dfba76114af6504cdbc3aba2aa77 100644 (file)
@@ -16,8 +16,8 @@
  *             as published by the Free Software Foundation; either version
  *             2 of the License, or (at your option) any later version.
  */
-#ifndef _UAPI_LINUX_IN_H
-#define _UAPI_LINUX_IN_H
+#ifndef _LINUX_IN_H
+#define _LINUX_IN_H
 
 #include <linux/types.h>
 #include <linux/stddef.h>
@@ -330,4 +330,4 @@ struct sockaddr_in {
 #include <asm/byteorder.h> 
 
 
-#endif /* _UAPI_LINUX_IN_H */
+#endif /* _LINUX_IN_H */
index ff8d21f9e95b7798eaf3e00635050e1631d6697a..776fb41c50e40294d7d6a5656fdb99a8b34bcd3e 100644 (file)
@@ -19,8 +19,8 @@
  *      2 of the License, or (at your option) any later version.
  */
 
-#ifndef _UAPI_LINUX_IN6_H
-#define _UAPI_LINUX_IN6_H
+#ifndef _LINUX_IN6_H
+#define _LINUX_IN6_H
 
 #include <linux/types.h>
 #include <linux/libc-compat.h>
@@ -299,4 +299,4 @@ struct in6_flowlabel_req {
  * ...
  * MRT6_MAX
  */
-#endif /* _UAPI_LINUX_IN6_H */
+#endif /* _LINUX_IN6_H */
index 593800a18799d9ea74e4f54df0222d2d628f6f2c..56cad7a60bfeca3f814e36063527bf7506df38d0 100644 (file)
@@ -11,8 +11,8 @@
  *      2 of the License, or (at your option) any later version.
  */
 
-#ifndef _UAPI_LINUX_IPV6_ROUTE_H
-#define _UAPI_LINUX_IPV6_ROUTE_H
+#ifndef _LINUX_IPV6_ROUTE_H
+#define _LINUX_IPV6_ROUTE_H
 
 #include <linux/types.h>
 #include <linux/in6.h>                 /* For struct in6_addr. */
@@ -61,4 +61,4 @@ struct in6_rtmsg {
 #define IP6_RT_PRIO_USER       1024
 #define IP6_RT_PRIO_ADDRCONF   256
 
-#endif /* _UAPI_LINUX_IPV6_ROUTE_H */
+#endif /* _LINUX_IPV6_ROUTE_H */
index 7d81c3e1ec29aabd374e94f70ec1161e9f5f78ad..e7705e875200ec53a4d76eb6441d43e6b264382f 100644 (file)
@@ -5,8 +5,8 @@
  * Author: James Chapman <jchapman@katalix.com>
  */
 
-#ifndef _UAPI_LINUX_L2TP_H_
-#define _UAPI_LINUX_L2TP_H_
+#ifndef _LINUX_L2TP_H_
+#define _LINUX_L2TP_H_
 
 #include <linux/types.h>
 #include <linux/socket.h>
@@ -200,4 +200,4 @@ enum l2tp_debug_flags {
 #define L2TP_GENL_VERSION      0x1
 #define L2TP_GENL_MCGROUP       "l2tp"
 
-#endif /* _UAPI_LINUX_L2TP_H_ */
+#endif /* _LINUX_L2TP_H_ */
index 8254c937c9f45507cd14d400a6dd4b0f8dcecd43..a1599911e7a942322aed41c6aa730caaa66075e9 100644 (file)
@@ -46,8 +46,8 @@
  *
  * This prevents the redefinition of a construct already defined by the kernel.
  */
-#ifndef _UAPI_LIBC_COMPAT_H
-#define _UAPI_LIBC_COMPAT_H
+#ifndef _LIBC_COMPAT_H
+#define _LIBC_COMPAT_H
 
 /* We have included glibc headers... */
 #if defined(__GLIBC__)
 
 #endif /* __GLIBC__ */
 
-#endif /* _UAPI_LIBC_COMPAT_H */
+#endif /* _LIBC_COMPAT_H */
index 1b40a968ba91fc9d2d0a8339261584a0d89ff9a9..bb575f3ab45e59aff283602f8e7c8af13e8bcc6a 100644 (file)
@@ -37,6 +37,7 @@
 #define HOSTFS_SUPER_MAGIC     0x00c0ffee
 #define OVERLAYFS_SUPER_MAGIC  0x794c7630
 #define FUSE_SUPER_MAGIC       0x65735546
+#define BCACHEFS_SUPER_MAGIC   0xca451a4e
 
 #define MINIX_SUPER_MAGIC      0x137F          /* minix v1 fs, 14 char names */
 #define MINIX_SUPER_MAGIC2     0x138F          /* minix v1 fs, 30 char names */
index bd4424de56ff57944617e3ef3ceb7bed7b2fb66a..a578d59dfe93acd0b6f831379b15bff587ef5de4 100644 (file)
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
 
-#ifndef _UAPI_LINUX_MRP_BRIDGE_H_
-#define _UAPI_LINUX_MRP_BRIDGE_H_
+#ifndef _LINUX_MRP_BRIDGE_H_
+#define _LINUX_MRP_BRIDGE_H_
 
 #include <linux/types.h>
 #include <linux/if_ether.h>
index f3770c5b0faca0fa7804e67acc69d93aad7ea6a3..86d961c91136c4c18668594b5e66f6d3d297a88f 100644 (file)
@@ -23,8 +23,8 @@
  *
  *             Moved to /usr/include/linux for NET3
  */
-#ifndef _UAPI_LINUX_NETDEVICE_H
-#define _UAPI_LINUX_NETDEVICE_H
+#ifndef _LINUX_NETDEVICE_H
+#define _LINUX_NETDEVICE_H
 
 #include <linux/if.h>
 #include <linux/if_ether.h>
@@ -63,4 +63,4 @@ enum {
 #define NET_ADDR_SET           3       /* address is set using
                                         * dev_set_mac_address() */
 
-#endif /* _UAPI_LINUX_NETDEVICE_H */
+#endif /* _LINUX_NETDEVICE_H */
index 6cd58cd2a6f00fe485563a2350528d916295852e..b89a3e61b22112cdba553c70c2eb8b480ce90ca1 100644 (file)
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-#ifndef _UAPI_NFNETLINK_H
-#define _UAPI_NFNETLINK_H
+#ifndef _NFNETLINK_H
+#define _NFNETLINK_H
 #include <linux/types.h>
 #include <linux/netfilter/nfnetlink_compat.h>
 
@@ -79,4 +79,4 @@ enum nfnl_batch_attributes {
 };
 #define NFNL_BATCH_MAX                 (__NFNL_BATCH_MAX - 1)
 
-#endif /* _UAPI_NFNETLINK_H */
+#endif /* _NFNETLINK_H */
index f87aaf28a6491d3367aed72b02b5f610d71bb2de..ff64eb18622bc3a929d7a9d5befe93303bc8cf59 100644 (file)
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-#ifndef _UAPI__LINUX_NETLINK_H
-#define _UAPI__LINUX_NETLINK_H
+#ifndef __LINUX_NETLINK_H
+#define __LINUX_NETLINK_H
 
 #include <linux/const.h>
 #include <linux/socket.h> /* for __kernel_sa_family_t */
@@ -165,10 +165,8 @@ enum nlmsgerr_attrs {
 #define NETLINK_PKTINFO                        3
 #define NETLINK_BROADCAST_ERROR                4
 #define NETLINK_NO_ENOBUFS             5
-#ifndef __KERNEL__
 #define NETLINK_RX_RING                        6
 #define NETLINK_TX_RING                        7
-#endif
 #define NETLINK_LISTEN_ALL_NSID                8
 #define NETLINK_LIST_MEMBERSHIPS       9
 #define NETLINK_CAP_ACK                        10
@@ -196,7 +194,6 @@ struct nl_mmap_hdr {
        __u32           nm_gid;
 };
 
-#ifndef __KERNEL__
 enum nl_mmap_status {
        NL_MMAP_STATUS_UNUSED,
        NL_MMAP_STATUS_RESERVED,
@@ -208,7 +205,6 @@ enum nl_mmap_status {
 #define NL_MMAP_MSG_ALIGNMENT          NLMSG_ALIGNTO
 #define NL_MMAP_MSG_ALIGN(sz)          __ALIGN_KERNEL(sz, NL_MMAP_MSG_ALIGNMENT)
 #define NL_MMAP_HDRLEN                 NL_MMAP_MSG_ALIGN(sizeof(struct nl_mmap_hdr))
-#endif
 
 #define NET_MAJOR 36           /* Major 36 is reserved for networking                                          */
 
@@ -380,4 +376,4 @@ enum netlink_policy_type_attr {
        NL_POLICY_TYPE_ATTR_MAX = __NL_POLICY_TYPE_ATTR_MAX - 1
 };
 
-#endif /* _UAPI__LINUX_NETLINK_H */
+#endif /* __LINUX_NETLINK_H */
index dd8787f9cf39a4a3e882b3ad4583772fbdef69a4..7e340bec94f2753a853eaefd9fe3238d0404e58c 100644 (file)
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-#ifndef _UAPI_LINUX_NEXTHOP_H
-#define _UAPI_LINUX_NEXTHOP_H
+#ifndef _LINUX_NEXTHOP_H
+#define _LINUX_NEXTHOP_H
 
 #include <linux/types.h>
 
index f23ecbdd84a284b65944aa5ef82e1d18b4f0c199..f917bc6c9b6ff4f9d5149fdd00f85308b4929404 100644 (file)
  *     are like for %NL80211_CMD_SET_BEACON, and additionally parameters that
  *     do not change are used, these include %NL80211_ATTR_BEACON_INTERVAL,
  *     %NL80211_ATTR_DTIM_PERIOD, %NL80211_ATTR_SSID,
- *     %NL80211_ATTR_HIDDEN_SSID, %NL80211_ATTR_CIPHERS_PAIRWISE,
- *     %NL80211_ATTR_CIPHER_GROUP, %NL80211_ATTR_WPA_VERSIONS,
+ *     %NL80211_ATTR_HIDDEN_SSID, %NL80211_ATTR_CIPHER_SUITES_PAIRWISE,
+ *     %NL80211_ATTR_CIPHER_SUITE_GROUP, %NL80211_ATTR_WPA_VERSIONS,
  *     %NL80211_ATTR_AKM_SUITES, %NL80211_ATTR_PRIVACY,
  *     %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_INACTIVITY_TIMEOUT,
  *     %NL80211_ATTR_ACL_POLICY and %NL80211_ATTR_MAC_ADDRS.
  *     stations connected and using at least that link as one of its links.
  *
  * @NL80211_CMD_GET_MPATH: Get mesh path attributes for mesh path to
- *     destination %NL80211_ATTR_MAC on the interface identified by
- *     %NL80211_ATTR_IFINDEX.
+ *     destination %NL80211_ATTR_MAC on the interface identified by
+ *     %NL80211_ATTR_IFINDEX.
  * @NL80211_CMD_SET_MPATH:  Set mesh path attributes for mesh path to
- *     destination %NL80211_ATTR_MAC on the interface identified by
- *     %NL80211_ATTR_IFINDEX.
+ *     destination %NL80211_ATTR_MAC on the interface identified by
+ *     %NL80211_ATTR_IFINDEX.
  * @NL80211_CMD_NEW_MPATH: Create a new mesh path for the destination given by
  *     %NL80211_ATTR_MAC via %NL80211_ATTR_MPATH_NEXT_HOP.
  * @NL80211_CMD_DEL_MPATH: Delete a mesh path to the destination given by
  *     %NL80211_ATTR_MAC.
- * @NL80211_CMD_NEW_PATH: Add a mesh path with given attributes to the
- *     interface identified by %NL80211_ATTR_IFINDEX.
- * @NL80211_CMD_DEL_PATH: Remove a mesh path identified by %NL80211_ATTR_MAC
- *     or, if no MAC address given, all mesh paths, on the interface identified
- *     by %NL80211_ATTR_IFINDEX.
  * @NL80211_CMD_SET_BSS: Set BSS attributes for BSS identified by
  *     %NL80211_ATTR_IFINDEX.
  *
  *     after being queried by the kernel. CRDA replies by sending a regulatory
  *     domain structure which consists of %NL80211_ATTR_REG_ALPHA set to our
  *     current alpha2 if it found a match. It also provides
- *     NL80211_ATTR_REG_RULE_FLAGS, and a set of regulatory rules. Each
- *     regulatory rule is a nested set of attributes  given by
- *     %NL80211_ATTR_REG_RULE_FREQ_[START|END] and
- *     %NL80211_ATTR_FREQ_RANGE_MAX_BW with an attached power rule given by
- *     %NL80211_ATTR_REG_RULE_POWER_MAX_ANT_GAIN and
- *     %NL80211_ATTR_REG_RULE_POWER_MAX_EIRP.
+ *     NL80211_ATTR_REG_RULE_FLAGS, and a set of regulatory rules. Each
+ *     regulatory rule is a nested set of attributes  given by
+ *     %NL80211_ATTR_REG_RULE_FREQ_[START|END] and
+ *     %NL80211_ATTR_FREQ_RANGE_MAX_BW with an attached power rule given by
+ *     %NL80211_ATTR_REG_RULE_POWER_MAX_ANT_GAIN and
+ *     %NL80211_ATTR_REG_RULE_POWER_MAX_EIRP.
  * @NL80211_CMD_REQ_SET_REG: ask the wireless core to set the regulatory domain
- *     to the specified ISO/IEC 3166-1 alpha2 country code. The core will
- *     store this as a valid request and then query userspace for it.
+ *     to the specified ISO/IEC 3166-1 alpha2 country code. The core will
+ *     store this as a valid request and then query userspace for it.
  *
  * @NL80211_CMD_GET_MESH_CONFIG: Get mesh networking properties for the
  *     interface identified by %NL80211_ATTR_IFINDEX
  * @NL80211_CMD_FLUSH_PMKSA: Flush all PMKSA cache entries.
  *
  * @NL80211_CMD_REG_CHANGE: indicates to userspace the regulatory domain
- *     has been changed and provides details of the request information
- *     that caused the change such as who initiated the regulatory request
- *     (%NL80211_ATTR_REG_INITIATOR), the wiphy_idx
- *     (%NL80211_ATTR_REG_ALPHA2) on which the request was made from if
- *     the initiator was %NL80211_REGDOM_SET_BY_COUNTRY_IE or
- *     %NL80211_REGDOM_SET_BY_DRIVER, the type of regulatory domain
- *     set (%NL80211_ATTR_REG_TYPE), if the type of regulatory domain is
- *     %NL80211_REG_TYPE_COUNTRY the alpha2 to which we have moved on
- *     to (%NL80211_ATTR_REG_ALPHA2).
+ *     has been changed and provides details of the request information
+ *     that caused the change such as who initiated the regulatory request
+ *     (%NL80211_ATTR_REG_INITIATOR), the wiphy_idx
+ *     (%NL80211_ATTR_REG_ALPHA2) on which the request was made from if
+ *     the initiator was %NL80211_REGDOM_SET_BY_COUNTRY_IE or
+ *     %NL80211_REGDOM_SET_BY_DRIVER, the type of regulatory domain
+ *     set (%NL80211_ATTR_REG_TYPE), if the type of regulatory domain is
+ *     %NL80211_REG_TYPE_COUNTRY the alpha2 to which we have moved on
+ *     to (%NL80211_ATTR_REG_ALPHA2).
  * @NL80211_CMD_REG_BEACON_HINT: indicates to userspace that an AP beacon
- *     has been found while world roaming thus enabling active scan or
- *     any mode of operation that initiates TX (beacons) on a channel
- *     where we would not have been able to do either before. As an example
- *     if you are world roaming (regulatory domain set to world or if your
- *     driver is using a custom world roaming regulatory domain) and while
- *     doing a passive scan on the 5 GHz band you find an AP there (if not
- *     on a DFS channel) you will now be able to actively scan for that AP
- *     or use AP mode on your card on that same channel. Note that this will
- *     never be used for channels 1-11 on the 2 GHz band as they are always
- *     enabled world wide. This beacon hint is only sent if your device had
- *     either disabled active scanning or beaconing on a channel. We send to
- *     userspace the wiphy on which we removed a restriction from
- *     (%NL80211_ATTR_WIPHY) and the channel on which this occurred
- *     before (%NL80211_ATTR_FREQ_BEFORE) and after (%NL80211_ATTR_FREQ_AFTER)
- *     the beacon hint was processed.
+ *     has been found while world roaming thus enabling active scan or
+ *     any mode of operation that initiates TX (beacons) on a channel
+ *     where we would not have been able to do either before. As an example
+ *     if you are world roaming (regulatory domain set to world or if your
+ *     driver is using a custom world roaming regulatory domain) and while
+ *     doing a passive scan on the 5 GHz band you find an AP there (if not
+ *     on a DFS channel) you will now be able to actively scan for that AP
+ *     or use AP mode on your card on that same channel. Note that this will
+ *     never be used for channels 1-11 on the 2 GHz band as they are always
+ *     enabled world wide. This beacon hint is only sent if your device had
+ *     either disabled active scanning or beaconing on a channel. We send to
+ *     userspace the wiphy on which we removed a restriction from
+ *     (%NL80211_ATTR_WIPHY) and the channel on which this occurred
+ *     before (%NL80211_ATTR_FREQ_BEFORE) and after (%NL80211_ATTR_FREQ_AFTER)
+ *     the beacon hint was processed.
  *
  * @NL80211_CMD_AUTHENTICATE: authentication request and notification.
  *     This command is used both as a command (request to authenticate) and
  *     current configuration is not changed.  If it is present but
  *     set to zero, the configuration is changed to don't-care
  *     (i.e. the device can decide what to do).
- * @NL80211_CMD_NAN_FUNC_MATCH: Notification sent when a match is reported.
+ * @NL80211_CMD_NAN_MATCH: Notification sent when a match is reported.
  *     This will contain a %NL80211_ATTR_NAN_MATCH nested attribute and
  *     %NL80211_ATTR_COOKIE.
  *
@@ -1715,21 +1710,21 @@ enum nl80211_commands {
  *     (see &enum nl80211_plink_action).
  * @NL80211_ATTR_MPATH_NEXT_HOP: MAC address of the next hop for a mesh path.
  * @NL80211_ATTR_MPATH_INFO: information about a mesh_path, part of mesh path
- *     info given for %NL80211_CMD_GET_MPATH, nested attribute described at
+ *     info given for %NL80211_CMD_GET_MPATH, nested attribute described at
  *     &enum nl80211_mpath_info.
  *
  * @NL80211_ATTR_MNTR_FLAGS: flags, nested element with NLA_FLAG attributes of
  *      &enum nl80211_mntr_flags.
  *
  * @NL80211_ATTR_REG_ALPHA2: an ISO-3166-alpha2 country code for which the
- *     current regulatory domain should be set to or is already set to.
- *     For example, 'CR', for Costa Rica. This attribute is used by the kernel
- *     to query the CRDA to retrieve one regulatory domain. This attribute can
- *     also be used by userspace to query the kernel for the currently set
- *     regulatory domain. We chose an alpha2 as that is also used by the
- *     IEEE-802.11 country information element to identify a country.
- *     Users can also simply ask the wireless core to set regulatory domain
- *     to a specific alpha2.
+ *     current regulatory domain should be set to or is already set to.
+ *     For example, 'CR', for Costa Rica. This attribute is used by the kernel
+ *     to query the CRDA to retrieve one regulatory domain. This attribute can
+ *     also be used by userspace to query the kernel for the currently set
+ *     regulatory domain. We chose an alpha2 as that is also used by the
+ *     IEEE-802.11 country information element to identify a country.
+ *     Users can also simply ask the wireless core to set regulatory domain
+ *     to a specific alpha2.
  * @NL80211_ATTR_REG_RULES: a nested array of regulatory domain regulatory
  *     rules.
  *
@@ -1772,9 +1767,9 @@ enum nl80211_commands {
  * @NL80211_ATTR_BSS: scan result BSS
  *
  * @NL80211_ATTR_REG_INITIATOR: indicates who requested the regulatory domain
- *     currently in effect. This could be any of the %NL80211_REGDOM_SET_BY_*
+ *     currently in effect. This could be any of the %NL80211_REGDOM_SET_BY_*
  * @NL80211_ATTR_REG_TYPE: indicates the type of the regulatory domain currently
- *     set. This can be one of the nl80211_reg_type (%NL80211_REGDOM_TYPE_*)
+ *     set. This can be one of the nl80211_reg_type (%NL80211_REGDOM_TYPE_*)
  *
  * @NL80211_ATTR_SUPPORTED_COMMANDS: wiphy attribute that specifies
  *     an array of command numbers (i.e. a mapping index to command number)
@@ -1793,15 +1788,15 @@ enum nl80211_commands {
  *     a u32
  *
  * @NL80211_ATTR_FREQ_BEFORE: A channel which has suffered a regulatory change
- *     due to considerations from a beacon hint. This attribute reflects
- *     the state of the channel _before_ the beacon hint processing. This
- *     attributes consists of a nested attribute containing
- *     NL80211_FREQUENCY_ATTR_*
+ *     due to considerations from a beacon hint. This attribute reflects
+ *     the state of the channel _before_ the beacon hint processing. This
+ *     attributes consists of a nested attribute containing
+ *     NL80211_FREQUENCY_ATTR_*
  * @NL80211_ATTR_FREQ_AFTER: A channel which has suffered a regulatory change
- *     due to considerations from a beacon hint. This attribute reflects
- *     the state of the channel _after_ the beacon hint processing. This
- *     attributes consists of a nested attribute containing
- *     NL80211_FREQUENCY_ATTR_*
+ *     due to considerations from a beacon hint. This attribute reflects
+ *     the state of the channel _after_ the beacon hint processing. This
+ *     attributes consists of a nested attribute containing
+ *     NL80211_FREQUENCY_ATTR_*
  *
  * @NL80211_ATTR_CIPHER_SUITES: a set of u32 values indicating the supported
  *     cipher suites
@@ -1862,12 +1857,6 @@ enum nl80211_commands {
  *     that protected APs should be used. This is also used with NEW_BEACON to
  *     indicate that the BSS is to use protection.
  *
- * @NL80211_ATTR_CIPHERS_PAIRWISE: Used with CONNECT, ASSOCIATE, and NEW_BEACON
- *     to indicate which unicast key ciphers will be used with the connection
- *     (an array of u32).
- * @NL80211_ATTR_CIPHER_GROUP: Used with CONNECT, ASSOCIATE, and NEW_BEACON to
- *     indicate which group key cipher will be used with the connection (a
- *     u32).
  * @NL80211_ATTR_WPA_VERSIONS: Used with CONNECT, ASSOCIATE, and NEW_BEACON to
  *     indicate which WPA version(s) the AP we want to associate with is using
  *     (a u32 with flags from &enum nl80211_wpa_versions).
@@ -1898,6 +1887,7 @@ enum nl80211_commands {
  *     with %NL80211_KEY_* sub-attributes
  *
  * @NL80211_ATTR_PID: Process ID of a network namespace.
+ * @NL80211_ATTR_NETNS_FD: File descriptor of a network namespace.
  *
  * @NL80211_ATTR_GENERATION: Used to indicate consistent snapshots for
  *     dumps. This number increases whenever the object list being
@@ -1952,6 +1942,7 @@ enum nl80211_commands {
  *
  * @NL80211_ATTR_ACK: Flag attribute indicating that the frame was
  *     acknowledged by the recipient.
+ * @NL80211_ATTR_ACK_SIGNAL: Station's ack signal strength (s32)
  *
  * @NL80211_ATTR_PS_STATE: powersave state, using &enum nl80211_ps_state values.
  *
@@ -2149,6 +2140,9 @@ enum nl80211_commands {
  * @NL80211_ATTR_DISABLE_HE: Force HE capable interfaces to disable
  *      this feature during association. This is a flag attribute.
  *     Currently only supported in mac80211 drivers.
+ * @NL80211_ATTR_DISABLE_EHT: Force EHT capable interfaces to disable
+ *      this feature during association. This is a flag attribute.
+ *     Currently only supported in mac80211 drivers.
  * @NL80211_ATTR_HT_CAPABILITY_MASK: Specify which bits of the
  *      ATTR_HT_CAPABILITY to which attention should be paid.
  *      Currently, only mac80211 NICs support this feature.
@@ -2158,6 +2152,12 @@ enum nl80211_commands {
  *      All values are treated as suggestions and may be ignored
  *      by the driver as required.  The actual values may be seen in
  *      the station debugfs ht_caps file.
+ * @NL80211_ATTR_VHT_CAPABILITY_MASK: Specify which bits of the
+ *      ATTR_VHT_CAPABILITY to which attention should be paid.
+ *      Currently, only mac80211 NICs support this feature.
+ *      All values are treated as suggestions and may be ignored
+ *      by the driver as required.  The actual values may be seen in
+ *      the station debugfs vht_caps file.
  *
  * @NL80211_ATTR_DFS_REGION: region for regulatory rules which this country
  *    abides to when initiating radiation on DFS channels. A country maps
@@ -2416,7 +2416,7 @@ enum nl80211_commands {
  *     scheduled scan is started.  Or the delay before a WoWLAN
  *     net-detect scan is started, counting from the moment the
  *     system is suspended.  This value is a u32, in seconds.
-
+ *
  * @NL80211_ATTR_REG_INDOOR: flag attribute, if set indicates that the device
  *      is operating in an indoor environment.
  *
@@ -3565,7 +3565,7 @@ enum nl80211_sta_flags {
  * enum nl80211_sta_p2p_ps_status - station support of P2P PS
  *
  * @NL80211_P2P_PS_UNSUPPORTED: station doesn't support P2P PS mechanism
- * @@NL80211_P2P_PS_SUPPORTED: station supports P2P PS mechanism
+ * @NL80211_P2P_PS_SUPPORTED: station supports P2P PS mechanism
  * @NUM_NL80211_P2P_PS_STATUS: number of values
  */
 enum nl80211_sta_p2p_ps_status {
@@ -3603,9 +3603,9 @@ enum nl80211_he_gi {
 
 /**
  * enum nl80211_he_ltf - HE long training field
- * @NL80211_RATE_INFO_HE_1xLTF: 3.2 usec
- * @NL80211_RATE_INFO_HE_2xLTF: 6.4 usec
- * @NL80211_RATE_INFO_HE_4xLTF: 12.8 usec
+ * @NL80211_RATE_INFO_HE_1XLTF: 3.2 usec
+ * @NL80211_RATE_INFO_HE_2XLTF: 6.4 usec
+ * @NL80211_RATE_INFO_HE_4XLTF: 12.8 usec
  */
 enum nl80211_he_ltf {
        NL80211_RATE_INFO_HE_1XLTF,
@@ -3720,7 +3720,7 @@ enum nl80211_eht_ru_alloc {
  * @NL80211_RATE_INFO_HE_GI: HE guard interval identifier
  *     (u8, see &enum nl80211_he_gi)
  * @NL80211_RATE_INFO_HE_DCM: HE DCM value (u8, 0/1)
- * @NL80211_RATE_INFO_RU_ALLOC: HE RU allocation, if not present then
+ * @NL80211_RATE_INFO_HE_RU_ALLOC: HE RU allocation, if not present then
  *     non-OFDMA was used (u8, see &enum nl80211_he_ru_alloc)
  * @NL80211_RATE_INFO_320_MHZ_WIDTH: 320 MHz bitrate
  * @NL80211_RATE_INFO_EHT_MCS: EHT MCS index (u8, 0-15)
@@ -3823,7 +3823,7 @@ enum nl80211_sta_bss_param {
  *     (u64, to this station)
  * @NL80211_STA_INFO_SIGNAL: signal strength of last received PPDU (u8, dBm)
  * @NL80211_STA_INFO_TX_BITRATE: current unicast tx rate, nested attribute
- *     containing info as possible, see &enum nl80211_rate_info
+ *     containing info as possible, see &enum nl80211_rate_info
  * @NL80211_STA_INFO_RX_PACKETS: total received packet (MSDUs and MMPDUs)
  *     (u32, from this station)
  * @NL80211_STA_INFO_TX_PACKETS: total transmitted packets (MSDUs and MMPDUs)
@@ -3852,8 +3852,8 @@ enum nl80211_sta_bss_param {
  *     Contains a nested array of signal strength attributes (u8, dBm)
  * @NL80211_STA_INFO_CHAIN_SIGNAL_AVG: per-chain signal strength average
  *     Same format as NL80211_STA_INFO_CHAIN_SIGNAL.
- * @NL80211_STA_EXPECTED_THROUGHPUT: expected throughput considering also the
- *     802.11 header (u32, kbps)
+ * @NL80211_STA_INFO_EXPECTED_THROUGHPUT: expected throughput considering also
+ *     the 802.11 header (u32, kbps)
  * @NL80211_STA_INFO_RX_DROP_MISC: RX packets dropped for unspecified reasons
  *     (u64)
  * @NL80211_STA_INFO_BEACON_RX: number of beacons received from this peer (u64)
@@ -4039,7 +4039,7 @@ enum nl80211_mpath_flags {
  * @NL80211_MPATH_INFO_METRIC: metric (cost) of this mesh path
  * @NL80211_MPATH_INFO_EXPTIME: expiration time for the path, in msec from now
  * @NL80211_MPATH_INFO_FLAGS: mesh path flags, enumerated in
- *     &enum nl80211_mpath_flags;
+ *     &enum nl80211_mpath_flags;
  * @NL80211_MPATH_INFO_DISCOVERY_TIMEOUT: total path discovery timeout, in msec
  * @NL80211_MPATH_INFO_DISCOVERY_RETRIES: mesh path discovery retries
  * @NL80211_MPATH_INFO_HOP_COUNT: hop count to destination
@@ -4179,7 +4179,7 @@ enum nl80211_band_attr {
  * @NL80211_WMMR_CW_MAX: Maximum contention window slot.
  * @NL80211_WMMR_AIFSN: Arbitration Inter Frame Space.
  * @NL80211_WMMR_TXOP: Maximum allowed tx operation time.
- * @nl80211_WMMR_MAX: highest possible wmm rule.
+ * @NL80211_WMMR_MAX: highest possible wmm rule.
  * @__NL80211_WMMR_LAST: Internal use.
  */
 enum nl80211_wmm_rule {
@@ -4201,8 +4201,9 @@ enum nl80211_wmm_rule {
  * @NL80211_FREQUENCY_ATTR_DISABLED: Channel is disabled in current
  *     regulatory domain.
  * @NL80211_FREQUENCY_ATTR_NO_IR: no mechanisms that initiate radiation
- *     are permitted on this channel, this includes sending probe
- *     requests, or modes of operation that require beaconing.
+ *     are permitted on this channel, this includes sending probe
+ *     requests, or modes of operation that require beaconing.
+ * @__NL80211_FREQUENCY_ATTR_NO_IBSS: obsolete, same as _NO_IR
  * @NL80211_FREQUENCY_ATTR_RADAR: Radar detection is mandatory
  *     on this channel in current regulatory domain.
  * @NL80211_FREQUENCY_ATTR_MAX_TX_POWER: Maximum transmission power in mBm
@@ -4357,16 +4358,16 @@ enum nl80211_bitrate_attr {
 };
 
 /**
- * enum nl80211_initiator - Indicates the initiator of a reg domain request
+ * enum nl80211_reg_initiator - Indicates the initiator of a reg domain request
  * @NL80211_REGDOM_SET_BY_CORE: Core queried CRDA for a dynamic world
- *     regulatory domain.
+ *     regulatory domain.
  * @NL80211_REGDOM_SET_BY_USER: User asked the wireless core to set the
- *     regulatory domain.
+ *     regulatory domain.
  * @NL80211_REGDOM_SET_BY_DRIVER: a wireless drivers has hinted to the
- *     wireless core it thinks its knows the regulatory domain we should be in.
+ *     wireless core it thinks its knows the regulatory domain we should be in.
  * @NL80211_REGDOM_SET_BY_COUNTRY_IE: the wireless core has received an
- *     802.11 country information element with regulatory information it
- *     thinks we should consider. cfg80211 only processes the country
+ *     802.11 country information element with regulatory information it
+ *     thinks we should consider. cfg80211 only processes the country
  *     code from the IE, and relies on the regulatory domain information
  *     structure passed by userspace (CRDA) from our wireless-regdb.
  *     If a channel is enabled but the country code indicates it should
@@ -4385,11 +4386,11 @@ enum nl80211_reg_initiator {
  *     to a specific country. When this is set you can count on the
  *     ISO / IEC 3166 alpha2 country code being valid.
  * @NL80211_REGDOM_TYPE_WORLD: the regulatory set domain is the world regulatory
- *     domain.
+ *     domain.
  * @NL80211_REGDOM_TYPE_CUSTOM_WORLD: the regulatory domain set is a custom
- *     driver specific world regulatory domain. These do not apply system-wide
- *     and are only applicable to the individual devices which have requested
- *     them to be applied.
+ *     driver specific world regulatory domain. These do not apply system-wide
+ *     and are only applicable to the individual devices which have requested
+ *     them to be applied.
  * @NL80211_REGDOM_TYPE_INTERSECTION: the regulatory domain set is the product
  *     of an intersection between two regulatory domains -- the previously
  *     set regulatory domain on the system and the last accepted regulatory
@@ -4406,21 +4407,21 @@ enum nl80211_reg_type {
  * enum nl80211_reg_rule_attr - regulatory rule attributes
  * @__NL80211_REG_RULE_ATTR_INVALID: attribute number 0 is reserved
  * @NL80211_ATTR_REG_RULE_FLAGS: a set of flags which specify additional
- *     considerations for a given frequency range. These are the
- *     &enum nl80211_reg_rule_flags.
+ *     considerations for a given frequency range. These are the
+ *     &enum nl80211_reg_rule_flags.
  * @NL80211_ATTR_FREQ_RANGE_START: starting frequencry for the regulatory
- *     rule in KHz. This is not a center of frequency but an actual regulatory
- *     band edge.
+ *     rule in KHz. This is not a center of frequency but an actual regulatory
+ *     band edge.
  * @NL80211_ATTR_FREQ_RANGE_END: ending frequency for the regulatory rule
- *     in KHz. This is not a center a frequency but an actual regulatory
- *     band edge.
+ *     in KHz. This is not a center a frequency but an actual regulatory
+ *     band edge.
  * @NL80211_ATTR_FREQ_RANGE_MAX_BW: maximum allowed bandwidth for this
  *     frequency range, in KHz.
  * @NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN: the maximum allowed antenna gain
- *     for a given frequency range. The value is in mBi (100 * dBi).
- *     If you don't have one then don't send this.
+ *     for a given frequency range. The value is in mBi (100 * dBi).
+ *     If you don't have one then don't send this.
  * @NL80211_ATTR_POWER_RULE_MAX_EIRP: the maximum allowed EIRP for
- *     a given frequency range. The value is in mBm (100 * dBm).
+ *     a given frequency range. The value is in mBm (100 * dBm).
  * @NL80211_ATTR_DFS_CAC_TIME: DFS CAC time in milliseconds.
  *     If not present or 0 default CAC time will be used.
  * @NL80211_ATTR_POWER_RULE_PSD: power spectral density (in dBm).
@@ -4507,8 +4508,9 @@ enum nl80211_sched_scan_match_attr {
  * @NL80211_RRF_PTP_ONLY: this is only for Point To Point links
  * @NL80211_RRF_PTMP_ONLY: this is only for Point To Multi Point links
  * @NL80211_RRF_NO_IR: no mechanisms that initiate radiation are allowed,
- *     this includes probe requests or modes of operation that require
- *     beaconing.
+ *     this includes probe requests or modes of operation that require
+ *     beaconing.
+ * @__NL80211_RRF_NO_IBSS: obsolete, same as NO_IR
  * @NL80211_RRF_AUTO_BW: maximum available bandwidth should be calculated
  *     base on contiguous rules and wider channels will be allowed to cross
  *     multiple contiguous/overlapping frequency ranges.
@@ -4522,9 +4524,9 @@ enum nl80211_sched_scan_match_attr {
  * @NL80211_RRF_NO_EHT: EHT operation not allowed
  * @NL80211_RRF_PSD: Ruleset has power spectral density value
  * @NL80211_RRF_DFS_CONCURRENT: Operation on this channel is allowed for
      peer-to-peer or adhoc communication under the control of a DFS master
      which operates on the same channel (FCC-594280 D01 Section B.3).
      Should be used together with %NL80211_RRF_DFS only.
*     peer-to-peer or adhoc communication under the control of a DFS master
*     which operates on the same channel (FCC-594280 D01 Section B.3).
*     Should be used together with %NL80211_RRF_DFS only.
  * @NL80211_RRF_NO_6GHZ_VLP_CLIENT: Client connection to VLP AP not allowed
  * @NL80211_RRF_NO_6GHZ_AFC_CLIENT: Client connection to AFC AP not allowed
  */
@@ -4707,8 +4709,8 @@ enum nl80211_mntr_flags {
  *     alternate between Active and Doze states, but may not wake up
  *     for neighbor's beacons.
  *
- * @__NL80211_MESH_POWER_AFTER_LAST - internal use
- * @NL80211_MESH_POWER_MAX - highest possible power save level
+ * @__NL80211_MESH_POWER_AFTER_LAST: internal use
+ * @NL80211_MESH_POWER_MAX: highest possible power save level
  */
 
 enum nl80211_mesh_power_mode {
@@ -5728,7 +5730,7 @@ struct nl80211_pattern_support {
  *     "TCP connection wakeup" for more details. This is a nested attribute
  *     containing the exact information for establishing and keeping alive
  *     the TCP connection.
- * @NL80211_WOWLAN_TRIG_TCP_WAKEUP_MATCH: For wakeup reporting only, the
+ * @NL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH: For wakeup reporting only, the
  *     wakeup packet was received on the TCP connection
  * @NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST: For wakeup reporting only, the
  *     TCP connection was lost or failed to be established
@@ -6077,7 +6079,7 @@ enum nl80211_plink_state {
  * @NL80211_PLINK_ACTION_BLOCK: block traffic from this mesh peer
  * @NUM_NL80211_PLINK_ACTIONS: number of possible actions
  */
-enum plink_actions {
+enum nl80211_plink_action {
        NL80211_PLINK_ACTION_NO_ACTION,
        NL80211_PLINK_ACTION_OPEN,
        NL80211_PLINK_ACTION_BLOCK,
@@ -6404,6 +6406,7 @@ enum nl80211_feature_flags {
  *     receiving control port frames over nl80211 instead of the netdevice.
  * @NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT: This driver/device supports
  *     (average) ACK signal strength reporting.
+ * @NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT: Backward-compatible ID
  * @NL80211_EXT_FEATURE_TXQS: Driver supports FQ-CoDel-enabled intermediate
  *      TXQs.
  * @NL80211_EXT_FEATURE_SCAN_RANDOM_SN: Driver/device supports randomizing the
@@ -6787,6 +6790,8 @@ enum nl80211_acl_policy {
  * @NL80211_SMPS_STATIC: static SMPS (use a single antenna)
  * @NL80211_SMPS_DYNAMIC: dynamic smps (start with a single antenna and
  *     turn on other antennas after CTS/RTS).
+ * @__NL80211_SMPS_AFTER_LAST: internal
+ * @NL80211_SMPS_MAX: highest used enumeration
  */
 enum nl80211_smps_mode {
        NL80211_SMPS_OFF,
@@ -7008,6 +7013,8 @@ enum nl80211_bss_select_attr {
  * @NL80211_NAN_FUNC_PUBLISH: function is publish
  * @NL80211_NAN_FUNC_SUBSCRIBE: function is subscribe
  * @NL80211_NAN_FUNC_FOLLOW_UP: function is follow-up
+ * @__NL80211_NAN_FUNC_TYPE_AFTER_LAST: internal use
+ * @NL80211_NAN_FUNC_MAX_TYPE: internal use
  */
 enum nl80211_nan_function_type {
        NL80211_NAN_FUNC_PUBLISH,
@@ -7168,7 +7175,7 @@ enum nl80211_nan_match_attributes {
 };
 
 /**
- * nl80211_external_auth_action - Action to perform with external
+ * enum nl80211_external_auth_action - Action to perform with external
  *     authentication request. Used by NL80211_ATTR_EXTERNAL_AUTH_ACTION.
  * @NL80211_EXTERNAL_AUTH_START: Start the authentication.
  * @NL80211_EXTERNAL_AUTH_ABORT: Abort the ongoing authentication.
@@ -7186,7 +7193,7 @@ enum nl80211_external_auth_action {
  * @NL80211_FTM_RESP_ATTR_LCI: The content of Measurement Report Element
  *     (9.4.2.22 in 802.11-2016) with type 8 - LCI (9.4.2.22.10),
  *     i.e. starting with the measurement token
- * @NL80211_FTM_RESP_ATTR_CIVIC: The content of Measurement Report Element
+ * @NL80211_FTM_RESP_ATTR_CIVICLOC: The content of Measurement Report Element
  *     (9.4.2.22 in 802.11-2016) with type 11 - Civic (Section 9.4.2.22.13),
  *     i.e. starting with the measurement token
  * @__NL80211_FTM_RESP_ATTR_LAST: Internal
@@ -7829,6 +7836,7 @@ enum nl80211_sae_pwe_mechanism {
  *
  * @NL80211_SAR_TYPE_POWER: power limitation specified in 0.25dBm unit
  *
+ * @NUM_NL80211_SAR_TYPE: internal
  */
 enum nl80211_sar_type {
        NL80211_SAR_TYPE_POWER,
@@ -7842,6 +7850,8 @@ enum nl80211_sar_type {
 /**
  * enum nl80211_sar_attrs - Attributes for SAR spec
  *
+ * @__NL80211_SAR_ATTR_INVALID: Invalid
+ *
  * @NL80211_SAR_ATTR_TYPE: the SAR type as defined in &enum nl80211_sar_type.
  *
  * @NL80211_SAR_ATTR_SPECS: Nested array of SAR power
@@ -7873,6 +7883,8 @@ enum nl80211_sar_attrs {
 /**
  * enum nl80211_sar_specs_attrs - Attributes for SAR power limit specs
  *
+ * @__NL80211_SAR_ATTR_SPECS_INVALID: Invalid
+ *
  * @NL80211_SAR_ATTR_SPECS_POWER: Required (s32)value to specify the actual
  *     power limit value in units of 0.25 dBm if type is
  *     NL80211_SAR_TYPE_POWER. (i.e., a value of 44 represents 11 dBm).
index 3b687d20c9ed34e45d565e649d8d890697c1b7b4..4e6c8e14cc300a5e14bfe06481bc349de0f9bb6e 100644 (file)
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-#ifndef _UAPI__LINUX_RTNETLINK_H
-#define _UAPI__LINUX_RTNETLINK_H
+#ifndef __LINUX_RTNETLINK_H
+#define __LINUX_RTNETLINK_H
 
 #include <linux/types.h>
 #include <linux/netlink.h>
@@ -677,7 +677,6 @@ enum {
 
 #define NDUSEROPT_MAX  (__NDUSEROPT_MAX - 1)
 
-#ifndef __KERNEL__
 /* RTnetlink multicast groups - backwards compatibility for userspace */
 #define RTMGRP_LINK            1
 #define RTMGRP_NOTIFY          2
@@ -698,7 +697,6 @@ enum {
 #define RTMGRP_DECnet_ROUTE     0x4000
 
 #define RTMGRP_IPV6_PREFIX     0x20000
-#endif
 
 /* RTnetlink multicast groups */
 enum rtnetlink_groups {
@@ -829,4 +827,4 @@ enum {
 
 
 
-#endif /* _UAPI__LINUX_RTNETLINK_H */
+#endif /* __LINUX_RTNETLINK_H */
index b888a83a106f63bbda333cb7b34108acd226c11a..96aa341942b05003e605c05d69bc68b0eb528b2e 100644 (file)
@@ -1,10 +1,11 @@
 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-#ifndef _UAPI_LINUX_STDDEF_H
-#define _UAPI_LINUX_STDDEF_H
+#ifndef _LINUX_STDDEF_H
+#define _LINUX_STDDEF_H
+
 
 
 #ifndef __always_inline
-#define __always_inline inline
+#define __always_inline __inline__
 #endif
 
 /**
 #define __counted_by(m)
 #endif
 
-#endif /* _UAPI_LINUX_STDDEF_H */
+#ifndef __counted_by_le
+#define __counted_by_le(m)
+#endif
+
+#ifndef __counted_by_be
+#define __counted_by_be(m)
+#endif
+
+#endif /* _LINUX_STDDEF_H */
index 6155766aaf87510bca12a2d8092afb29c2feb2d7..d5ae26312c91511c6421eee4a7f7cf1212c16207 100755 (executable)
@@ -3,9 +3,31 @@
 set -eu
 set -o pipefail
 
+# The directory must be userspace kernel header directory:
+# git clone git@github.com:torvalds/linux.git
+# make -C linux headers
+# ./update.sh linux
+SRCDIR=${1?}
+
 for i in *.h */*.h; do
-    curl --fail "https://raw.githubusercontent.com/torvalds/linux/master/include/uapi/linux/$i" -o "$i"
+    if [[ "$i" == bpf_insn.h ]]; then
+        cp "$SRCDIR/samples/bpf/$i" "$i"
+    else
+        cp "$SRCDIR/usr/include/linux/$i" "$i"
+    fi
 
-    sed -r -i -e 's/__user //g' -e '/^#include <linux\/compiler(_types)?.h>/ d' "$i"
-    sed -r -i 's/^(#include <linux\/fs\.h>)/#if WANT_LINUX_FS_H\n\1\n#endif/' "$i"
+    case "$i" in
+        auto_dev-ioctl.h)
+            sed -r -i '/^#define[[:space:]]+AUTOFS_DEV_IOCTL_VERSION_MINOR/ s/[0-9]+/0/' "$i"
+            ;;
+        btrfs.h)
+            sed -r -i 's/^(#include <linux\/fs\.h>)/#if WANT_LINUX_FS_H\n\1\n#endif/' "$i"
+            ;;
+        ethtool.h)
+            sed -r -i '/return (ep->speed_hi << 16) | ep->speed;/ s/return .*;/return ((__u32) ep->speed_hi << 16) | (__u32) ep->speed;/' "$i"
+            ;;
+        dm-ioctl.h)
+            sed -r -i '/^#define[[:space:]]+DM_VERSION_MINOR/ s/[0-9]+/27/' "$i"
+            ;;
+    esac
 done
diff --git a/src/basic/missing_bpf.h b/src/basic/missing_bpf.h
new file mode 100644 (file)
index 0000000..c0eb2ca
--- /dev/null
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <linux/bpf.h>
+
+/* defined in linux/filter.h */
+/* Unconditional jumps, goto pc + off16 */
+#define BPF_JMP_A(OFF)                                          \
+        ((struct bpf_insn) {                                    \
+                .code  = BPF_JMP | BPF_JA,                      \
+                .dst_reg = 0,                                   \
+                .src_reg = 0,                                   \
+                .off   = OFF,                                   \
+                .imm   = 0 })
index 8484dbc61909871e5db80943ff2eb015ab367f81..59d31b83d4a7256d1260fd3ee318feacd76465d8 100644 (file)
@@ -8,6 +8,7 @@
 #include "devnum-util.h"
 #include "fd-util.h"
 #include "fileio.h"
+#include "missing_bpf.h"
 #include "nulstr-util.h"
 #include "parse-util.h"
 #include "path-util.h"
diff --git a/src/shared/linux/README b/src/shared/linux/README
deleted file mode 100644 (file)
index 34fc09b..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-The files in this directory are copied from kernel-6.2, and the following modifications are applied:
-- auto_dev-ioctl.h: set AUTOFS_DEV_IOCTL_VERSION_MINOR to 0
-- auto_dev-ioctl.h: define AUTOFS_IOCTL if not defined
-- auto_dev-ioctl.h: use of fake flexible array is fixed
-- bpf_insn.h: This is imported from samples/bpf/bpf_insn.h
-- bpf_insn.h: BPF_JMP_A() macro is also imported from include/linux/filter.h
-- dm-ioctl.h: set DM_VERSION_MINOR to 27
-- ethtool.h: define __KERNEL_DIV_ROUND_UP if not defined
-- ethtool.h: add casts in ethtool_cmd_speed()
index 46679c1adabcf9855dfde1ee3ae000e75b5c45bf..5eef659d1ff5d39af52ff049092ac00bdb9fe8ae 100644 (file)
@@ -300,7 +300,7 @@ shared_sources += shared_generated_gperf_headers
 fname = 'ethtool-link-mode.h'
 ethtool_link_mode_h = custom_target(
         fname,
-        input : ['ethtool-link-mode.py', 'linux/ethtool.h'],
+        input : ['ethtool-link-mode.py', '../basic/linux/ethtool.h'],
         output : fname,
         command : [python, '@INPUT0@', '--header', cpp, '@INPUT1@'],
         capture : true)
@@ -309,7 +309,7 @@ shared_sources += ethtool_link_mode_h
 fname = 'ethtool-link-mode.xml'
 ethtool_link_mode_xml = custom_target(
         fname,
-        input : ['ethtool-link-mode.py', 'linux/ethtool.h'],
+        input : ['ethtool-link-mode.py', '../basic/linux/ethtool.h'],
         output : fname,
         command : [python, '@INPUT0@', '--xml', cpp, '@INPUT1@'],
         capture : true)