]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
shared/linux: update kernel headers
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 5 Feb 2023 19:11:56 +0000 (20:11 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 6 Feb 2023 09:19:08 +0000 (10:19 +0100)
The kernel was updated to not use fake flex arrays with zero size.
Updating should allow -fstrict-flex-arrays to be used.

Headers pulled from kernel-headers-6.2.0-0.rc6.git0.1.fc38.x86_64.

Note that this is not a straighforward copy: our files have local modifications
(listed in README) that need to be preserved.

src/shared/linux/README
src/shared/linux/auto_dev-ioctl.h
src/shared/linux/bpf.h
src/shared/linux/bpf_common.h
src/shared/linux/dm-ioctl.h
src/shared/linux/ethtool.h

index 46d554764d3edbf191c26196e3383d86b132fda8..71295faf826dd813b2a768fba027243dbfd4d9a7 100644 (file)
@@ -1,4 +1,4 @@
-The files in this directory are copied from kernel-5.2, and the following modifications are applied:
+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
 - bpf_insn.h: This is imported from samples/bpf/bpf_insn.h
index 63f32e3b1386fc6381993195f33772f9b70eaf7e..f2e48b51cc5b147c23580588a730d3a77297be8d 100644 (file)
@@ -8,8 +8,8 @@
  * option, any later version, incorporated herein by reference.
  */
 
-#ifndef _UAPI_LINUX_AUTO_DEV_IOCTL_H
-#define _UAPI_LINUX_AUTO_DEV_IOCTL_H
+#ifndef _LINUX_AUTO_DEV_IOCTL_H
+#define _LINUX_AUTO_DEV_IOCTL_H
 
 #include <linux/auto_fs.h>
 #include <linux/string.h>
@@ -112,7 +112,7 @@ struct autofs_dev_ioctl {
        char path[0];
 };
 
-static inline void init_autofs_dev_ioctl(struct autofs_dev_ioctl *in)
+static __inline__ void init_autofs_dev_ioctl(struct autofs_dev_ioctl *in)
 {
        memset(in, 0, AUTOFS_DEV_IOCTL_SIZE);
        in->ver_major = AUTOFS_DEV_IOCTL_VERSION_MAJOR;
@@ -217,4 +217,4 @@ enum {
        _IOWR(AUTOFS_IOCTL, \
              AUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD, struct autofs_dev_ioctl)
 
-#endif /* _UAPI_LINUX_AUTO_DEV_IOCTL_H */
+#endif /* _LINUX_AUTO_DEV_IOCTL_H */
index 51309a19b33047dc0f4f4f75d242eaae8d407d90..a667908d20809d132bb5258baa07407adfd1a3b2 100644 (file)
@@ -5,8 +5,8 @@
  * modify it under the terms of version 2 of the GNU General Public
  * License as published by the Free Software Foundation.
  */
-#ifndef _UAPI__LINUX_BPF_H__
-#define _UAPI__LINUX_BPF_H__
+#ifndef __LINUX_BPF_H__
+#define __LINUX_BPF_H__
 
 #include <linux/types.h>
 #include <linux/bpf_common.h>
@@ -87,10 +87,35 @@ struct bpf_cgroup_storage_key {
        __u32   attach_type;            /* program attach type (enum bpf_attach_type) */
 };
 
+enum bpf_cgroup_iter_order {
+       BPF_CGROUP_ITER_ORDER_UNSPEC = 0,
+       BPF_CGROUP_ITER_SELF_ONLY,              /* process only a single object. */
+       BPF_CGROUP_ITER_DESCENDANTS_PRE,        /* walk descendants in pre-order. */
+       BPF_CGROUP_ITER_DESCENDANTS_POST,       /* walk descendants in post-order. */
+       BPF_CGROUP_ITER_ANCESTORS_UP,           /* walk ancestors upward. */
+};
+
 union bpf_iter_link_info {
        struct {
                __u32   map_fd;
        } map;
+       struct {
+               enum bpf_cgroup_iter_order order;
+
+               /* At most one of cgroup_fd and cgroup_id can be non-zero. If
+                * both are zero, the walk starts from the default cgroup v2
+                * root. For walking v1 hierarchy, one should always explicitly
+                * specify cgroup_fd.
+                */
+               __u32   cgroup_fd;
+               __u64   cgroup_id;
+       } cgroup;
+       /* Parameters of task iterators. */
+       struct {
+               __u32   tid;
+               __u32   pid;
+               __u32   pid_fd;
+       } task;
 };
 
 /* BPF syscall commands, see bpf(2) man-page for more details. */
@@ -473,7 +498,7 @@ union bpf_iter_link_info {
  *             Verify and load BPF Type Format (BTF) metadata into the kernel,
  *             returning a new file descriptor associated with the metadata.
  *             BTF is described in more detail at
- *             https://docs.kernel.org/bpf/btf.html.
+ *             https://www.kernel.org/doc/html/latest/bpf/btf.html.
  *
  *             The *btf* parameter must point to valid memory providing
  *             *btf_size* bytes of BTF binary metadata.
@@ -897,7 +922,14 @@ enum bpf_map_type {
        BPF_MAP_TYPE_CPUMAP,
        BPF_MAP_TYPE_XSKMAP,
        BPF_MAP_TYPE_SOCKHASH,
-       BPF_MAP_TYPE_CGROUP_STORAGE,
+       BPF_MAP_TYPE_CGROUP_STORAGE_DEPRECATED,
+       /* BPF_MAP_TYPE_CGROUP_STORAGE is available to bpf programs attaching
+        * to a cgroup. The newer BPF_MAP_TYPE_CGRP_STORAGE is available to
+        * both cgroup-attached and other progs and supports all functionality
+        * provided by BPF_MAP_TYPE_CGROUP_STORAGE. So mark
+        * BPF_MAP_TYPE_CGROUP_STORAGE deprecated.
+        */
+       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_QUEUE,
@@ -909,6 +941,8 @@ enum bpf_map_type {
        BPF_MAP_TYPE_INODE_STORAGE,
        BPF_MAP_TYPE_TASK_STORAGE,
        BPF_MAP_TYPE_BLOOM_FILTER,
+       BPF_MAP_TYPE_USER_RINGBUF,
+       BPF_MAP_TYPE_CGRP_STORAGE,
 };
 
 /* Note that tracing related programs such as
@@ -998,6 +1032,7 @@ enum bpf_attach_type {
        BPF_SK_REUSEPORT_SELECT_OR_MIGRATE,
        BPF_PERF_EVENT,
        BPF_TRACE_KPROBE_MULTI,
+       BPF_LSM_CGROUP,
        __MAX_BPF_ATTACH_TYPE
 };
 
@@ -1232,7 +1267,7 @@ enum {
 
 /* Query effective (directly attached + inherited from ancestor cgroups)
  * programs that will be executed for events within a cgroup.
- * attach_flags with this flag are returned only for directly attached programs.
+ * attach_flags with this flag are always returned 0.
  */
 #define BPF_F_QUERY_EFFECTIVE  (1U << 0)
 
@@ -1431,6 +1466,10 @@ union bpf_attr {
                __u32           attach_flags;
                __aligned_u64   prog_ids;
                __u32           prog_cnt;
+               /* output: per-program attach_flags.
+                * not allowed to be set during effective query.
+                */
+               __aligned_u64   prog_attach_flags;
        } query;
 
        struct { /* anonymous struct used by BPF_RAW_TRACEPOINT_OPEN command */
@@ -2359,7 +2398,8 @@ union bpf_attr {
  *             Pull in non-linear data in case the *skb* is non-linear and not
  *             all of *len* are part of the linear section. Make *len* bytes
  *             from *skb* readable and writable. If a zero value is passed for
- *             *len*, then the whole length of the *skb* is pulled.
+ *             *len*, then all bytes in the linear part of *skb* will be made
+ *             readable and writable.
  *
  *             This helper is only needed for reading and writing with direct
  *             packet access.
@@ -2544,14 +2584,19 @@ union bpf_attr {
  *             * **SOL_SOCKET**, which supports the following *optname*\ s:
  *               **SO_RCVBUF**, **SO_SNDBUF**, **SO_MAX_PACING_RATE**,
  *               **SO_PRIORITY**, **SO_RCVLOWAT**, **SO_MARK**,
- *               **SO_BINDTODEVICE**, **SO_KEEPALIVE**.
+ *               **SO_BINDTODEVICE**, **SO_KEEPALIVE**, **SO_REUSEADDR**,
+ *               **SO_REUSEPORT**, **SO_BINDTOIFINDEX**, **SO_TXREHASH**.
  *             * **IPPROTO_TCP**, which supports the following *optname*\ s:
  *               **TCP_CONGESTION**, **TCP_BPF_IW**,
  *               **TCP_BPF_SNDCWND_CLAMP**, **TCP_SAVE_SYN**,
  *               **TCP_KEEPIDLE**, **TCP_KEEPINTVL**, **TCP_KEEPCNT**,
- *               **TCP_SYNCNT**, **TCP_USER_TIMEOUT**, **TCP_NOTSENT_LOWAT**.
+ *               **TCP_SYNCNT**, **TCP_USER_TIMEOUT**, **TCP_NOTSENT_LOWAT**,
+ *               **TCP_NODELAY**, **TCP_MAXSEG**, **TCP_WINDOW_CLAMP**,
+ *               **TCP_THIN_LINEAR_TIMEOUTS**, **TCP_BPF_DELACK_MAX**,
+ *               **TCP_BPF_RTO_MIN**.
  *             * **IPPROTO_IP**, which supports *optname* **IP_TOS**.
- *             * **IPPROTO_IPV6**, which supports *optname* **IPV6_TCLASS**.
+ *             * **IPPROTO_IPV6**, which supports the following *optname*\ s:
+ *               **IPV6_TCLASS**, **IPV6_AUTOFLOWLABEL**.
  *     Return
  *             0 on success, or a negative error in case of failure.
  *
@@ -2570,10 +2615,12 @@ union bpf_attr {
  *             There are two supported modes at this time:
  *
  *             * **BPF_ADJ_ROOM_MAC**: Adjust room at the mac layer
- *               (room space is added or removed below the layer 2 header).
+ *               (room space is added or removed between the layer 2 and
+ *               layer 3 headers).
  *
  *             * **BPF_ADJ_ROOM_NET**: Adjust room at the network layer
- *               (room space is added or removed below the layer 3 header).
+ *               (room space is added or removed between the layer 3 and
+ *               layer 4 headers).
  *
  *             The following flags are supported at this time:
  *
@@ -2605,7 +2652,7 @@ union bpf_attr {
  *     Return
  *             0 on success, or a negative error in case of failure.
  *
- * long bpf_redirect_map(struct bpf_map *map, u32 key, u64 flags)
+ * long bpf_redirect_map(struct bpf_map *map, u64 key, u64 flags)
  *     Description
  *             Redirect the packet to the endpoint referenced by *map* at
  *             index *key*. Depending on its type, this *map* can contain
@@ -2766,12 +2813,10 @@ union bpf_attr {
  *               and **BPF_CGROUP_INET6_CONNECT**.
  *
  *             This helper actually implements a subset of **getsockopt()**.
- *             It supports the following *level*\ s:
- *
- *             * **IPPROTO_TCP**, which supports *optname*
- *               **TCP_CONGESTION**.
- *             * **IPPROTO_IP**, which supports *optname* **IP_TOS**.
- *             * **IPPROTO_IPV6**, which supports *optname* **IPV6_TCLASS**.
+ *             It supports the same set of *optname*\ s that is supported by
+ *             the **bpf_setsockopt**\ () helper.  The exceptions are
+ *             **TCP_BPF_*** is **bpf_setsockopt**\ () only and
+ *             **TCP_SAVED_SYN** is **bpf_getsockopt**\ () only.
  *     Return
  *             0 on success, or a negative error in case of failure.
  *
@@ -3005,8 +3050,18 @@ union bpf_attr {
  *             **BPF_F_USER_STACK**
  *                     Collect a user space stack instead of a kernel stack.
  *             **BPF_F_USER_BUILD_ID**
- *                     Collect buildid+offset instead of ips for user stack,
- *                     only valid if **BPF_F_USER_STACK** is also specified.
+ *                     Collect (build_id, file_offset) instead of ips for user
+ *                     stack, only valid if **BPF_F_USER_STACK** is also
+ *                     specified.
+ *
+ *                     *file_offset* is an offset relative to the beginning
+ *                     of the executable or shared object file backing the vma
+ *                     which the *ip* falls in. It is *not* an offset relative
+ *                     to that object's base address. Accordingly, it must be
+ *                     adjusted by adding (sh_addr - sh_offset), where
+ *                     sh_{addr,offset} correspond to the executable section
+ *                     containing *file_offset* in the object, for comparisons
+ *                     to symbols' st_value to be valid.
  *
  *             **bpf_get_stack**\ () can collect up to
  *             **PERF_MAX_STACK_DEPTH** both kernel and user frames, subject
@@ -3597,10 +3652,11 @@ union bpf_attr {
  *
  *             *iph* points to the start of the IPv4 or IPv6 header, while
  *             *iph_len* contains **sizeof**\ (**struct iphdr**) or
- *             **sizeof**\ (**struct ip6hdr**).
+ *             **sizeof**\ (**struct ipv6hdr**).
  *
  *             *th* points to the start of the TCP header, while *th_len*
- *             contains **sizeof**\ (**struct tcphdr**).
+ *             contains the length of the TCP header (at least
+ *             **sizeof**\ (**struct tcphdr**)).
  *     Return
  *             0 if *iph* and *th* are a valid SYN cookie ACK, or a negative
  *             error otherwise.
@@ -3783,10 +3839,11 @@ union bpf_attr {
  *
  *             *iph* points to the start of the IPv4 or IPv6 header, while
  *             *iph_len* contains **sizeof**\ (**struct iphdr**) or
- *             **sizeof**\ (**struct ip6hdr**).
+ *             **sizeof**\ (**struct ipv6hdr**).
  *
  *             *th* points to the start of the TCP header, while *th_len*
- *             contains the length of the TCP header.
+ *             contains the length of the TCP header with options (at least
+ *             **sizeof**\ (**struct tcphdr**)).
  *     Return
  *             On success, lower 32 bits hold the generated SYN cookie in
  *             followed by 16 bits which hold the MSS value for that cookie,
@@ -4420,7 +4477,7 @@ union bpf_attr {
  *
  *             **-EEXIST** if the option already exists.
  *
- *             **-EFAULT** on failrue to parse the existing header options.
+ *             **-EFAULT** on failure to parse the existing header options.
  *
  *             **-EPERM** if the helper cannot be used under the current
  *             *skops*\ **->op**.
@@ -4629,7 +4686,7 @@ union bpf_attr {
  *             a *map* with *task* as the **key**.  From this
  *             perspective,  the usage is not much different from
  *             **bpf_map_lookup_elem**\ (*map*, **&**\ *task*) except this
- *             helper enforces the key must be an task_struct and the map must also
+ *             helper enforces the key must be a task_struct and the map must also
  *             be a **BPF_MAP_TYPE_TASK_STORAGE**.
  *
  *             Underneath, the value is stored locally at *task* instead of
@@ -4687,7 +4744,7 @@ union bpf_attr {
  *
  * long bpf_ima_inode_hash(struct inode *inode, void *dst, u32 size)
  *     Description
- *             Returns the stored IMA hash of the *inode* (if it's avaialable).
+ *             Returns the stored IMA hash of the *inode* (if it's available).
  *             If the hash is larger than *size*, then only *size*
  *             bytes will be copied to *dst*
  *     Return
@@ -4711,12 +4768,12 @@ union bpf_attr {
  *
  *             The argument *len_diff* can be used for querying with a planned
  *             size change. This allows to check MTU prior to changing packet
- *             ctx. Providing an *len_diff* adjustment that is larger than the
+ *             ctx. Providing a *len_diff* adjustment that is larger than the
  *             actual packet size (resulting in negative packet size) will in
- *             principle not exceed the MTU, why it is not considered a
- *             failure.  Other BPF-helpers are needed for performing the
- *             planned size change, why the responsability for catch a negative
- *             packet size belong in those helpers.
+ *             principle not exceed the MTU, which is why it is not considered
+ *             a failure.  Other BPF helpers are needed for performing the
+ *             planned size change; therefore the responsibility for catching
+ *             a negative packet size belongs in those helpers.
  *
  *             Specifying *ifindex* zero means the MTU check is performed
  *             against the current net device.  This is practical if this isn't
@@ -4914,6 +4971,7 @@ union bpf_attr {
  *             Get address of the traced function (for tracing and kprobe programs).
  *     Return
  *             Address of the traced function.
+ *             0 for kprobes placed within the function (not at the entry).
  *
  * u64 bpf_get_attach_cookie(void *ctx)
  *     Description
@@ -5043,12 +5101,12 @@ union bpf_attr {
  *
  * long bpf_get_func_arg(void *ctx, u32 n, u64 *value)
  *     Description
- *             Get **n**-th argument (zero based) of the traced function (for tracing programs)
+ *             Get **n**-th argument register (zero based) of the traced function (for tracing programs)
  *             returned in **value**.
  *
  *     Return
  *             0 on success.
- *             **-EINVAL** if n >= arguments count of traced function.
+ *             **-EINVAL** if n >= argument register count of traced function.
  *
  * long bpf_get_func_ret(void *ctx, u64 *value)
  *     Description
@@ -5061,24 +5119,37 @@ union bpf_attr {
  *
  * long bpf_get_func_arg_cnt(void *ctx)
  *     Description
- *             Get number of arguments of the traced function (for tracing programs).
+ *             Get number of registers of the traced function (for tracing programs) where
+ *             function arguments are stored in these registers.
  *
  *     Return
- *             The number of arguments of the traced function.
+ *             The number of argument registers of the traced function.
  *
  * int bpf_get_retval(void)
  *     Description
- *             Get the syscall's return value that will be returned to userspace.
+ *             Get the BPF program's return value that will be returned to the upper layers.
  *
- *             This helper is currently supported by cgroup programs only.
+ *             This helper is currently supported by cgroup programs and only by the hooks
+ *             where BPF program's return value is returned to the userspace via errno.
  *     Return
- *             The syscall's return value.
+ *             The BPF program's return value.
  *
  * int bpf_set_retval(int retval)
  *     Description
- *             Set the syscall's return value that will be returned to userspace.
+ *             Set the BPF program's return value that will be returned to the upper layers.
+ *
+ *             This helper is currently supported by cgroup programs and only by the hooks
+ *             where BPF program's return value is returned to the userspace via errno.
+ *
+ *             Note that there is the following corner case where the program exports an error
+ *             via bpf_set_retval but signals success via 'return 1':
+ *
+ *                     bpf_set_retval(-EPERM);
+ *                     return 1;
+ *
+ *             In this case, the BPF program's return value will use helper's -EPERM. This
+ *             still holds true for cgroup/bind{4,6} which supports extra 'return 3' success case.
  *
- *             This helper is currently supported by cgroup programs only.
  *     Return
  *             0 on success, or a negative error in case of failure.
  *
@@ -5222,24 +5293,27 @@ union bpf_attr {
  *     Return
  *             Nothing. Always succeeds.
  *
- * long bpf_dynptr_read(void *dst, u32 len, struct bpf_dynptr *src, u32 offset)
+ * long bpf_dynptr_read(void *dst, u32 len, const struct bpf_dynptr *src, u32 offset, u64 flags)
  *     Description
  *             Read *len* bytes from *src* into *dst*, starting from *offset*
  *             into *src*.
+ *             *flags* is currently unused.
  *     Return
  *             0 on success, -E2BIG if *offset* + *len* exceeds the length
- *             of *src*'s data, -EINVAL if *src* is an invalid dynptr.
+ *             of *src*'s data, -EINVAL if *src* is an invalid dynptr or if
+ *             *flags* is not 0.
  *
- * long bpf_dynptr_write(struct bpf_dynptr *dst, u32 offset, void *src, u32 len)
+ * long bpf_dynptr_write(const struct bpf_dynptr *dst, u32 offset, void *src, u32 len, u64 flags)
  *     Description
  *             Write *len* bytes from *src* into *dst*, starting from *offset*
  *             into *dst*.
+ *             *flags* is currently unused.
  *     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.
+ *             is a read-only dynptr or if *flags* is not 0.
  *
- * void *bpf_dynptr_data(struct bpf_dynptr *ptr, u32 offset, u32 len)
+ * void *bpf_dynptr_data(const struct bpf_dynptr *ptr, u32 offset, u32 len)
  *     Description
  *             Get a pointer to the underlying dynptr data.
  *
@@ -5249,220 +5323,395 @@ union bpf_attr {
  *             Pointer to the underlying dynptr data, NULL if the dynptr is
  *             read-only, if the dynptr is invalid, or if the offset and length
  *             is out of bounds.
+ *
+ * s64 bpf_tcp_raw_gen_syncookie_ipv4(struct iphdr *iph, struct tcphdr *th, u32 th_len)
+ *     Description
+ *             Try to issue a SYN cookie for the packet with corresponding
+ *             IPv4/TCP headers, *iph* and *th*, without depending on a
+ *             listening socket.
+ *
+ *             *iph* points to the IPv4 header.
+ *
+ *             *th* points to the start of the TCP header, while *th_len*
+ *             contains the length of the TCP header (at least
+ *             **sizeof**\ (**struct tcphdr**)).
+ *     Return
+ *             On success, lower 32 bits hold the generated SYN cookie in
+ *             followed by 16 bits which hold the MSS value for that cookie,
+ *             and the top 16 bits are unused.
+ *
+ *             On failure, the returned value is one of the following:
+ *
+ *             **-EINVAL** if *th_len* is invalid.
+ *
+ * s64 bpf_tcp_raw_gen_syncookie_ipv6(struct ipv6hdr *iph, struct tcphdr *th, u32 th_len)
+ *     Description
+ *             Try to issue a SYN cookie for the packet with corresponding
+ *             IPv6/TCP headers, *iph* and *th*, without depending on a
+ *             listening socket.
+ *
+ *             *iph* points to the IPv6 header.
+ *
+ *             *th* points to the start of the TCP header, while *th_len*
+ *             contains the length of the TCP header (at least
+ *             **sizeof**\ (**struct tcphdr**)).
+ *     Return
+ *             On success, lower 32 bits hold the generated SYN cookie in
+ *             followed by 16 bits which hold the MSS value for that cookie,
+ *             and the top 16 bits are unused.
+ *
+ *             On failure, the returned value is one of the following:
+ *
+ *             **-EINVAL** if *th_len* is invalid.
+ *
+ *             **-EPROTONOSUPPORT** if CONFIG_IPV6 is not builtin.
+ *
+ * long bpf_tcp_raw_check_syncookie_ipv4(struct iphdr *iph, struct tcphdr *th)
+ *     Description
+ *             Check whether *iph* and *th* contain a valid SYN cookie ACK
+ *             without depending on a listening socket.
+ *
+ *             *iph* points to the IPv4 header.
+ *
+ *             *th* points to the TCP header.
+ *     Return
+ *             0 if *iph* and *th* are a valid SYN cookie ACK.
+ *
+ *             On failure, the returned value is one of the following:
+ *
+ *             **-EACCES** if the SYN cookie is not valid.
+ *
+ * long bpf_tcp_raw_check_syncookie_ipv6(struct ipv6hdr *iph, struct tcphdr *th)
+ *     Description
+ *             Check whether *iph* and *th* contain a valid SYN cookie ACK
+ *             without depending on a listening socket.
+ *
+ *             *iph* points to the IPv6 header.
+ *
+ *             *th* points to the TCP header.
+ *     Return
+ *             0 if *iph* and *th* are a valid SYN cookie ACK.
+ *
+ *             On failure, the returned value is one of the following:
+ *
+ *             **-EACCES** if the SYN cookie is not valid.
+ *
+ *             **-EPROTONOSUPPORT** if CONFIG_IPV6 is not builtin.
+ *
+ * u64 bpf_ktime_get_tai_ns(void)
+ *     Description
+ *             A nonsettable system-wide clock derived from wall-clock time but
+ *             ignoring leap seconds.  This clock does not experience
+ *             discontinuities and backwards jumps caused by NTP inserting leap
+ *             seconds as CLOCK_REALTIME does.
+ *
+ *             See: **clock_gettime**\ (**CLOCK_TAI**)
+ *     Return
+ *             Current *ktime*.
+ *
+ * long bpf_user_ringbuf_drain(struct bpf_map *map, void *callback_fn, void *ctx, u64 flags)
+ *     Description
+ *             Drain samples from the specified user ring buffer, and invoke
+ *             the provided callback for each such sample:
+ *
+ *             long (\*callback_fn)(const struct bpf_dynptr \*dynptr, void \*ctx);
+ *
+ *             If **callback_fn** returns 0, the helper will continue to try
+ *             and drain the next sample, up to a maximum of
+ *             BPF_MAX_USER_RINGBUF_SAMPLES samples. If the return value is 1,
+ *             the helper will skip the rest of the samples and return. Other
+ *             return values are not used now, and will be rejected by the
+ *             verifier.
+ *     Return
+ *             The number of drained samples if no error was encountered while
+ *             draining samples, or 0 if no samples were present in the ring
+ *             buffer. If a user-space producer was epoll-waiting on this map,
+ *             and at least one sample was drained, they will receive an event
+ *             notification notifying them of available space in the ring
+ *             buffer. If the BPF_RB_NO_WAKEUP flag is passed to this
+ *             function, no wakeup notification will be sent. If the
+ *             BPF_RB_FORCE_WAKEUP flag is passed, a wakeup notification will
+ *             be sent even if no sample was drained.
+ *
+ *             On failure, the returned value is one of the following:
+ *
+ *             **-EBUSY** if the ring buffer is contended, and another calling
+ *             context was concurrently draining the ring buffer.
+ *
+ *             **-EINVAL** if user-space is not properly tracking the ring
+ *             buffer due to the producer position not being aligned to 8
+ *             bytes, a sample not being aligned to 8 bytes, or the producer
+ *             position not matching the advertised length of a sample.
+ *
+ *             **-E2BIG** if user-space has tried to publish a sample which is
+ *             larger than the size of the ring buffer, or which cannot fit
+ *             within a struct bpf_dynptr.
+ *
+ * void *bpf_cgrp_storage_get(struct bpf_map *map, struct cgroup *cgroup, void *value, u64 flags)
+ *     Description
+ *             Get a bpf_local_storage from the *cgroup*.
+ *
+ *             Logically, it could be thought of as getting the value from
+ *             a *map* with *cgroup* as the **key**.  From this
+ *             perspective,  the usage is not much different from
+ *             **bpf_map_lookup_elem**\ (*map*, **&**\ *cgroup*) except this
+ *             helper enforces the key must be a cgroup struct and the map must also
+ *             be a **BPF_MAP_TYPE_CGRP_STORAGE**.
+ *
+ *             In reality, the local-storage value is embedded directly inside of the
+ *             *cgroup* object itself, rather than being located in the
+ *             **BPF_MAP_TYPE_CGRP_STORAGE** map. When the local-storage value is
+ *             queried for some *map* on a *cgroup* object, the kernel will perform an
+ *             O(n) iteration over all of the live local-storage values for that
+ *             *cgroup* object until the local-storage value for the *map* is found.
+ *
+ *             An optional *flags* (**BPF_LOCAL_STORAGE_GET_F_CREATE**) can be
+ *             used such that a new bpf_local_storage will be
+ *             created if one does not exist.  *value* can be used
+ *             together with **BPF_LOCAL_STORAGE_GET_F_CREATE** to specify
+ *             the initial value of a bpf_local_storage.  If *value* is
+ *             **NULL**, the new bpf_local_storage will be zero initialized.
+ *     Return
+ *             A bpf_local_storage pointer is returned on success.
+ *
+ *             **NULL** if not found or there was an error in adding
+ *             a new bpf_local_storage.
+ *
+ * long bpf_cgrp_storage_delete(struct bpf_map *map, struct cgroup *cgroup)
+ *     Description
+ *             Delete a bpf_local_storage from a *cgroup*.
+ *     Return
+ *             0 on success.
+ *
+ *             **-ENOENT** if the bpf_local_storage cannot be found.
  */
-#define __BPF_FUNC_MAPPER(FN)          \
-       FN(unspec),                     \
-       FN(map_lookup_elem),            \
-       FN(map_update_elem),            \
-       FN(map_delete_elem),            \
-       FN(probe_read),                 \
-       FN(ktime_get_ns),               \
-       FN(trace_printk),               \
-       FN(get_prandom_u32),            \
-       FN(get_smp_processor_id),       \
-       FN(skb_store_bytes),            \
-       FN(l3_csum_replace),            \
-       FN(l4_csum_replace),            \
-       FN(tail_call),                  \
-       FN(clone_redirect),             \
-       FN(get_current_pid_tgid),       \
-       FN(get_current_uid_gid),        \
-       FN(get_current_comm),           \
-       FN(get_cgroup_classid),         \
-       FN(skb_vlan_push),              \
-       FN(skb_vlan_pop),               \
-       FN(skb_get_tunnel_key),         \
-       FN(skb_set_tunnel_key),         \
-       FN(perf_event_read),            \
-       FN(redirect),                   \
-       FN(get_route_realm),            \
-       FN(perf_event_output),          \
-       FN(skb_load_bytes),             \
-       FN(get_stackid),                \
-       FN(csum_diff),                  \
-       FN(skb_get_tunnel_opt),         \
-       FN(skb_set_tunnel_opt),         \
-       FN(skb_change_proto),           \
-       FN(skb_change_type),            \
-       FN(skb_under_cgroup),           \
-       FN(get_hash_recalc),            \
-       FN(get_current_task),           \
-       FN(probe_write_user),           \
-       FN(current_task_under_cgroup),  \
-       FN(skb_change_tail),            \
-       FN(skb_pull_data),              \
-       FN(csum_update),                \
-       FN(set_hash_invalid),           \
-       FN(get_numa_node_id),           \
-       FN(skb_change_head),            \
-       FN(xdp_adjust_head),            \
-       FN(probe_read_str),             \
-       FN(get_socket_cookie),          \
-       FN(get_socket_uid),             \
-       FN(set_hash),                   \
-       FN(setsockopt),                 \
-       FN(skb_adjust_room),            \
-       FN(redirect_map),               \
-       FN(sk_redirect_map),            \
-       FN(sock_map_update),            \
-       FN(xdp_adjust_meta),            \
-       FN(perf_event_read_value),      \
-       FN(perf_prog_read_value),       \
-       FN(getsockopt),                 \
-       FN(override_return),            \
-       FN(sock_ops_cb_flags_set),      \
-       FN(msg_redirect_map),           \
-       FN(msg_apply_bytes),            \
-       FN(msg_cork_bytes),             \
-       FN(msg_pull_data),              \
-       FN(bind),                       \
-       FN(xdp_adjust_tail),            \
-       FN(skb_get_xfrm_state),         \
-       FN(get_stack),                  \
-       FN(skb_load_bytes_relative),    \
-       FN(fib_lookup),                 \
-       FN(sock_hash_update),           \
-       FN(msg_redirect_hash),          \
-       FN(sk_redirect_hash),           \
-       FN(lwt_push_encap),             \
-       FN(lwt_seg6_store_bytes),       \
-       FN(lwt_seg6_adjust_srh),        \
-       FN(lwt_seg6_action),            \
-       FN(rc_repeat),                  \
-       FN(rc_keydown),                 \
-       FN(skb_cgroup_id),              \
-       FN(get_current_cgroup_id),      \
-       FN(get_local_storage),          \
-       FN(sk_select_reuseport),        \
-       FN(skb_ancestor_cgroup_id),     \
-       FN(sk_lookup_tcp),              \
-       FN(sk_lookup_udp),              \
-       FN(sk_release),                 \
-       FN(map_push_elem),              \
-       FN(map_pop_elem),               \
-       FN(map_peek_elem),              \
-       FN(msg_push_data),              \
-       FN(msg_pop_data),               \
-       FN(rc_pointer_rel),             \
-       FN(spin_lock),                  \
-       FN(spin_unlock),                \
-       FN(sk_fullsock),                \
-       FN(tcp_sock),                   \
-       FN(skb_ecn_set_ce),             \
-       FN(get_listener_sock),          \
-       FN(skc_lookup_tcp),             \
-       FN(tcp_check_syncookie),        \
-       FN(sysctl_get_name),            \
-       FN(sysctl_get_current_value),   \
-       FN(sysctl_get_new_value),       \
-       FN(sysctl_set_new_value),       \
-       FN(strtol),                     \
-       FN(strtoul),                    \
-       FN(sk_storage_get),             \
-       FN(sk_storage_delete),          \
-       FN(send_signal),                \
-       FN(tcp_gen_syncookie),          \
-       FN(skb_output),                 \
-       FN(probe_read_user),            \
-       FN(probe_read_kernel),          \
-       FN(probe_read_user_str),        \
-       FN(probe_read_kernel_str),      \
-       FN(tcp_send_ack),               \
-       FN(send_signal_thread),         \
-       FN(jiffies64),                  \
-       FN(read_branch_records),        \
-       FN(get_ns_current_pid_tgid),    \
-       FN(xdp_output),                 \
-       FN(get_netns_cookie),           \
-       FN(get_current_ancestor_cgroup_id),     \
-       FN(sk_assign),                  \
-       FN(ktime_get_boot_ns),          \
-       FN(seq_printf),                 \
-       FN(seq_write),                  \
-       FN(sk_cgroup_id),               \
-       FN(sk_ancestor_cgroup_id),      \
-       FN(ringbuf_output),             \
-       FN(ringbuf_reserve),            \
-       FN(ringbuf_submit),             \
-       FN(ringbuf_discard),            \
-       FN(ringbuf_query),              \
-       FN(csum_level),                 \
-       FN(skc_to_tcp6_sock),           \
-       FN(skc_to_tcp_sock),            \
-       FN(skc_to_tcp_timewait_sock),   \
-       FN(skc_to_tcp_request_sock),    \
-       FN(skc_to_udp6_sock),           \
-       FN(get_task_stack),             \
-       FN(load_hdr_opt),               \
-       FN(store_hdr_opt),              \
-       FN(reserve_hdr_opt),            \
-       FN(inode_storage_get),          \
-       FN(inode_storage_delete),       \
-       FN(d_path),                     \
-       FN(copy_from_user),             \
-       FN(snprintf_btf),               \
-       FN(seq_printf_btf),             \
-       FN(skb_cgroup_classid),         \
-       FN(redirect_neigh),             \
-       FN(per_cpu_ptr),                \
-       FN(this_cpu_ptr),               \
-       FN(redirect_peer),              \
-       FN(task_storage_get),           \
-       FN(task_storage_delete),        \
-       FN(get_current_task_btf),       \
-       FN(bprm_opts_set),              \
-       FN(ktime_get_coarse_ns),        \
-       FN(ima_inode_hash),             \
-       FN(sock_from_file),             \
-       FN(check_mtu),                  \
-       FN(for_each_map_elem),          \
-       FN(snprintf),                   \
-       FN(sys_bpf),                    \
-       FN(btf_find_by_name_kind),      \
-       FN(sys_close),                  \
-       FN(timer_init),                 \
-       FN(timer_set_callback),         \
-       FN(timer_start),                \
-       FN(timer_cancel),               \
-       FN(get_func_ip),                \
-       FN(get_attach_cookie),          \
-       FN(task_pt_regs),               \
-       FN(get_branch_snapshot),        \
-       FN(trace_vprintk),              \
-       FN(skc_to_unix_sock),           \
-       FN(kallsyms_lookup_name),       \
-       FN(find_vma),                   \
-       FN(loop),                       \
-       FN(strncmp),                    \
-       FN(get_func_arg),               \
-       FN(get_func_ret),               \
-       FN(get_func_arg_cnt),           \
-       FN(get_retval),                 \
-       FN(set_retval),                 \
-       FN(xdp_get_buff_len),           \
-       FN(xdp_load_bytes),             \
-       FN(xdp_store_bytes),            \
-       FN(copy_from_user_task),        \
-       FN(skb_set_tstamp),             \
-       FN(ima_file_hash),              \
-       FN(kptr_xchg),                  \
-       FN(map_lookup_percpu_elem),     \
-       FN(skc_to_mptcp_sock),          \
-       FN(dynptr_from_mem),            \
-       FN(ringbuf_reserve_dynptr),     \
-       FN(ringbuf_submit_dynptr),      \
-       FN(ringbuf_discard_dynptr),     \
-       FN(dynptr_read),                \
-       FN(dynptr_write),               \
-       FN(dynptr_data),                \
+#define ___BPF_FUNC_MAPPER(FN, ctx...)                 \
+       FN(unspec, 0, ##ctx)                            \
+       FN(map_lookup_elem, 1, ##ctx)                   \
+       FN(map_update_elem, 2, ##ctx)                   \
+       FN(map_delete_elem, 3, ##ctx)                   \
+       FN(probe_read, 4, ##ctx)                        \
+       FN(ktime_get_ns, 5, ##ctx)                      \
+       FN(trace_printk, 6, ##ctx)                      \
+       FN(get_prandom_u32, 7, ##ctx)                   \
+       FN(get_smp_processor_id, 8, ##ctx)              \
+       FN(skb_store_bytes, 9, ##ctx)                   \
+       FN(l3_csum_replace, 10, ##ctx)                  \
+       FN(l4_csum_replace, 11, ##ctx)                  \
+       FN(tail_call, 12, ##ctx)                        \
+       FN(clone_redirect, 13, ##ctx)                   \
+       FN(get_current_pid_tgid, 14, ##ctx)             \
+       FN(get_current_uid_gid, 15, ##ctx)              \
+       FN(get_current_comm, 16, ##ctx)                 \
+       FN(get_cgroup_classid, 17, ##ctx)               \
+       FN(skb_vlan_push, 18, ##ctx)                    \
+       FN(skb_vlan_pop, 19, ##ctx)                     \
+       FN(skb_get_tunnel_key, 20, ##ctx)               \
+       FN(skb_set_tunnel_key, 21, ##ctx)               \
+       FN(perf_event_read, 22, ##ctx)                  \
+       FN(redirect, 23, ##ctx)                         \
+       FN(get_route_realm, 24, ##ctx)                  \
+       FN(perf_event_output, 25, ##ctx)                \
+       FN(skb_load_bytes, 26, ##ctx)                   \
+       FN(get_stackid, 27, ##ctx)                      \
+       FN(csum_diff, 28, ##ctx)                        \
+       FN(skb_get_tunnel_opt, 29, ##ctx)               \
+       FN(skb_set_tunnel_opt, 30, ##ctx)               \
+       FN(skb_change_proto, 31, ##ctx)                 \
+       FN(skb_change_type, 32, ##ctx)                  \
+       FN(skb_under_cgroup, 33, ##ctx)                 \
+       FN(get_hash_recalc, 34, ##ctx)                  \
+       FN(get_current_task, 35, ##ctx)                 \
+       FN(probe_write_user, 36, ##ctx)                 \
+       FN(current_task_under_cgroup, 37, ##ctx)        \
+       FN(skb_change_tail, 38, ##ctx)                  \
+       FN(skb_pull_data, 39, ##ctx)                    \
+       FN(csum_update, 40, ##ctx)                      \
+       FN(set_hash_invalid, 41, ##ctx)                 \
+       FN(get_numa_node_id, 42, ##ctx)                 \
+       FN(skb_change_head, 43, ##ctx)                  \
+       FN(xdp_adjust_head, 44, ##ctx)                  \
+       FN(probe_read_str, 45, ##ctx)                   \
+       FN(get_socket_cookie, 46, ##ctx)                \
+       FN(get_socket_uid, 47, ##ctx)                   \
+       FN(set_hash, 48, ##ctx)                         \
+       FN(setsockopt, 49, ##ctx)                       \
+       FN(skb_adjust_room, 50, ##ctx)                  \
+       FN(redirect_map, 51, ##ctx)                     \
+       FN(sk_redirect_map, 52, ##ctx)                  \
+       FN(sock_map_update, 53, ##ctx)                  \
+       FN(xdp_adjust_meta, 54, ##ctx)                  \
+       FN(perf_event_read_value, 55, ##ctx)            \
+       FN(perf_prog_read_value, 56, ##ctx)             \
+       FN(getsockopt, 57, ##ctx)                       \
+       FN(override_return, 58, ##ctx)                  \
+       FN(sock_ops_cb_flags_set, 59, ##ctx)            \
+       FN(msg_redirect_map, 60, ##ctx)                 \
+       FN(msg_apply_bytes, 61, ##ctx)                  \
+       FN(msg_cork_bytes, 62, ##ctx)                   \
+       FN(msg_pull_data, 63, ##ctx)                    \
+       FN(bind, 64, ##ctx)                             \
+       FN(xdp_adjust_tail, 65, ##ctx)                  \
+       FN(skb_get_xfrm_state, 66, ##ctx)               \
+       FN(get_stack, 67, ##ctx)                        \
+       FN(skb_load_bytes_relative, 68, ##ctx)          \
+       FN(fib_lookup, 69, ##ctx)                       \
+       FN(sock_hash_update, 70, ##ctx)                 \
+       FN(msg_redirect_hash, 71, ##ctx)                \
+       FN(sk_redirect_hash, 72, ##ctx)                 \
+       FN(lwt_push_encap, 73, ##ctx)                   \
+       FN(lwt_seg6_store_bytes, 74, ##ctx)             \
+       FN(lwt_seg6_adjust_srh, 75, ##ctx)              \
+       FN(lwt_seg6_action, 76, ##ctx)                  \
+       FN(rc_repeat, 77, ##ctx)                        \
+       FN(rc_keydown, 78, ##ctx)                       \
+       FN(skb_cgroup_id, 79, ##ctx)                    \
+       FN(get_current_cgroup_id, 80, ##ctx)            \
+       FN(get_local_storage, 81, ##ctx)                \
+       FN(sk_select_reuseport, 82, ##ctx)              \
+       FN(skb_ancestor_cgroup_id, 83, ##ctx)           \
+       FN(sk_lookup_tcp, 84, ##ctx)                    \
+       FN(sk_lookup_udp, 85, ##ctx)                    \
+       FN(sk_release, 86, ##ctx)                       \
+       FN(map_push_elem, 87, ##ctx)                    \
+       FN(map_pop_elem, 88, ##ctx)                     \
+       FN(map_peek_elem, 89, ##ctx)                    \
+       FN(msg_push_data, 90, ##ctx)                    \
+       FN(msg_pop_data, 91, ##ctx)                     \
+       FN(rc_pointer_rel, 92, ##ctx)                   \
+       FN(spin_lock, 93, ##ctx)                        \
+       FN(spin_unlock, 94, ##ctx)                      \
+       FN(sk_fullsock, 95, ##ctx)                      \
+       FN(tcp_sock, 96, ##ctx)                         \
+       FN(skb_ecn_set_ce, 97, ##ctx)                   \
+       FN(get_listener_sock, 98, ##ctx)                \
+       FN(skc_lookup_tcp, 99, ##ctx)                   \
+       FN(tcp_check_syncookie, 100, ##ctx)             \
+       FN(sysctl_get_name, 101, ##ctx)                 \
+       FN(sysctl_get_current_value, 102, ##ctx)        \
+       FN(sysctl_get_new_value, 103, ##ctx)            \
+       FN(sysctl_set_new_value, 104, ##ctx)            \
+       FN(strtol, 105, ##ctx)                          \
+       FN(strtoul, 106, ##ctx)                         \
+       FN(sk_storage_get, 107, ##ctx)                  \
+       FN(sk_storage_delete, 108, ##ctx)               \
+       FN(send_signal, 109, ##ctx)                     \
+       FN(tcp_gen_syncookie, 110, ##ctx)               \
+       FN(skb_output, 111, ##ctx)                      \
+       FN(probe_read_user, 112, ##ctx)                 \
+       FN(probe_read_kernel, 113, ##ctx)               \
+       FN(probe_read_user_str, 114, ##ctx)             \
+       FN(probe_read_kernel_str, 115, ##ctx)           \
+       FN(tcp_send_ack, 116, ##ctx)                    \
+       FN(send_signal_thread, 117, ##ctx)              \
+       FN(jiffies64, 118, ##ctx)                       \
+       FN(read_branch_records, 119, ##ctx)             \
+       FN(get_ns_current_pid_tgid, 120, ##ctx)         \
+       FN(xdp_output, 121, ##ctx)                      \
+       FN(get_netns_cookie, 122, ##ctx)                \
+       FN(get_current_ancestor_cgroup_id, 123, ##ctx)  \
+       FN(sk_assign, 124, ##ctx)                       \
+       FN(ktime_get_boot_ns, 125, ##ctx)               \
+       FN(seq_printf, 126, ##ctx)                      \
+       FN(seq_write, 127, ##ctx)                       \
+       FN(sk_cgroup_id, 128, ##ctx)                    \
+       FN(sk_ancestor_cgroup_id, 129, ##ctx)           \
+       FN(ringbuf_output, 130, ##ctx)                  \
+       FN(ringbuf_reserve, 131, ##ctx)                 \
+       FN(ringbuf_submit, 132, ##ctx)                  \
+       FN(ringbuf_discard, 133, ##ctx)                 \
+       FN(ringbuf_query, 134, ##ctx)                   \
+       FN(csum_level, 135, ##ctx)                      \
+       FN(skc_to_tcp6_sock, 136, ##ctx)                \
+       FN(skc_to_tcp_sock, 137, ##ctx)                 \
+       FN(skc_to_tcp_timewait_sock, 138, ##ctx)        \
+       FN(skc_to_tcp_request_sock, 139, ##ctx)         \
+       FN(skc_to_udp6_sock, 140, ##ctx)                \
+       FN(get_task_stack, 141, ##ctx)                  \
+       FN(load_hdr_opt, 142, ##ctx)                    \
+       FN(store_hdr_opt, 143, ##ctx)                   \
+       FN(reserve_hdr_opt, 144, ##ctx)                 \
+       FN(inode_storage_get, 145, ##ctx)               \
+       FN(inode_storage_delete, 146, ##ctx)            \
+       FN(d_path, 147, ##ctx)                          \
+       FN(copy_from_user, 148, ##ctx)                  \
+       FN(snprintf_btf, 149, ##ctx)                    \
+       FN(seq_printf_btf, 150, ##ctx)                  \
+       FN(skb_cgroup_classid, 151, ##ctx)              \
+       FN(redirect_neigh, 152, ##ctx)                  \
+       FN(per_cpu_ptr, 153, ##ctx)                     \
+       FN(this_cpu_ptr, 154, ##ctx)                    \
+       FN(redirect_peer, 155, ##ctx)                   \
+       FN(task_storage_get, 156, ##ctx)                \
+       FN(task_storage_delete, 157, ##ctx)             \
+       FN(get_current_task_btf, 158, ##ctx)            \
+       FN(bprm_opts_set, 159, ##ctx)                   \
+       FN(ktime_get_coarse_ns, 160, ##ctx)             \
+       FN(ima_inode_hash, 161, ##ctx)                  \
+       FN(sock_from_file, 162, ##ctx)                  \
+       FN(check_mtu, 163, ##ctx)                       \
+       FN(for_each_map_elem, 164, ##ctx)               \
+       FN(snprintf, 165, ##ctx)                        \
+       FN(sys_bpf, 166, ##ctx)                         \
+       FN(btf_find_by_name_kind, 167, ##ctx)           \
+       FN(sys_close, 168, ##ctx)                       \
+       FN(timer_init, 169, ##ctx)                      \
+       FN(timer_set_callback, 170, ##ctx)              \
+       FN(timer_start, 171, ##ctx)                     \
+       FN(timer_cancel, 172, ##ctx)                    \
+       FN(get_func_ip, 173, ##ctx)                     \
+       FN(get_attach_cookie, 174, ##ctx)               \
+       FN(task_pt_regs, 175, ##ctx)                    \
+       FN(get_branch_snapshot, 176, ##ctx)             \
+       FN(trace_vprintk, 177, ##ctx)                   \
+       FN(skc_to_unix_sock, 178, ##ctx)                \
+       FN(kallsyms_lookup_name, 179, ##ctx)            \
+       FN(find_vma, 180, ##ctx)                        \
+       FN(loop, 181, ##ctx)                            \
+       FN(strncmp, 182, ##ctx)                         \
+       FN(get_func_arg, 183, ##ctx)                    \
+       FN(get_func_ret, 184, ##ctx)                    \
+       FN(get_func_arg_cnt, 185, ##ctx)                \
+       FN(get_retval, 186, ##ctx)                      \
+       FN(set_retval, 187, ##ctx)                      \
+       FN(xdp_get_buff_len, 188, ##ctx)                \
+       FN(xdp_load_bytes, 189, ##ctx)                  \
+       FN(xdp_store_bytes, 190, ##ctx)                 \
+       FN(copy_from_user_task, 191, ##ctx)             \
+       FN(skb_set_tstamp, 192, ##ctx)                  \
+       FN(ima_file_hash, 193, ##ctx)                   \
+       FN(kptr_xchg, 194, ##ctx)                       \
+       FN(map_lookup_percpu_elem, 195, ##ctx)          \
+       FN(skc_to_mptcp_sock, 196, ##ctx)               \
+       FN(dynptr_from_mem, 197, ##ctx)                 \
+       FN(ringbuf_reserve_dynptr, 198, ##ctx)          \
+       FN(ringbuf_submit_dynptr, 199, ##ctx)           \
+       FN(ringbuf_discard_dynptr, 200, ##ctx)          \
+       FN(dynptr_read, 201, ##ctx)                     \
+       FN(dynptr_write, 202, ##ctx)                    \
+       FN(dynptr_data, 203, ##ctx)                     \
+       FN(tcp_raw_gen_syncookie_ipv4, 204, ##ctx)      \
+       FN(tcp_raw_gen_syncookie_ipv6, 205, ##ctx)      \
+       FN(tcp_raw_check_syncookie_ipv4, 206, ##ctx)    \
+       FN(tcp_raw_check_syncookie_ipv6, 207, ##ctx)    \
+       FN(ktime_get_tai_ns, 208, ##ctx)                \
+       FN(user_ringbuf_drain, 209, ##ctx)              \
+       FN(cgrp_storage_get, 210, ##ctx)                \
+       FN(cgrp_storage_delete, 211, ##ctx)             \
        /* */
 
+/* backwards-compatibility macros for users of __BPF_FUNC_MAPPER that don't
+ * know or care about integer value that is now passed as second argument
+ */
+#define __BPF_FUNC_MAPPER_APPLY(name, value, FN) FN(name),
+#define __BPF_FUNC_MAPPER(FN) ___BPF_FUNC_MAPPER(__BPF_FUNC_MAPPER_APPLY, FN)
+
 /* integer value in 'imm' field of BPF_CALL instruction selects which helper
  * function eBPF program intends to call
  */
-#define __BPF_ENUM_FN(x) BPF_FUNC_ ## x
+#define __BPF_ENUM_FN(x, y) BPF_FUNC_ ## x = y,
 enum bpf_func_id {
-       __BPF_FUNC_MAPPER(__BPF_ENUM_FN)
+       ___BPF_FUNC_MAPPER(__BPF_ENUM_FN)
        __BPF_FUNC_MAX_ID,
 };
 #undef __BPF_ENUM_FN
@@ -5517,6 +5766,11 @@ enum {
        BPF_F_SEQ_NUMBER                = (1ULL << 3),
 };
 
+/* BPF_FUNC_skb_get_tunnel_key flags. */
+enum {
+       BPF_F_TUNINFO_FLAGS             = (1ULL << 4),
+};
+
 /* BPF_FUNC_perf_event_output, BPF_FUNC_perf_event_read and
  * BPF_FUNC_perf_event_read_value flags.
  */
@@ -5706,7 +5960,10 @@ struct bpf_tunnel_key {
        };
        __u8 tunnel_tos;
        __u8 tunnel_ttl;
-       __u16 tunnel_ext;       /* Padding, future use. */
+       union {
+               __u16 tunnel_ext;       /* compat */
+               __be16 tunnel_flags;
+       };
        __u32 tunnel_label;
        union {
                __u32 local_ipv4;
@@ -5750,6 +6007,11 @@ enum bpf_ret_code {
         *    represented by BPF_REDIRECT above).
         */
        BPF_LWT_REROUTE = 128,
+       /* BPF_FLOW_DISSECTOR_CONTINUE: used by BPF_PROG_TYPE_FLOW_DISSECTOR
+        *   to indicate that no custom dissection was performed, and
+        *   fallback to standard dissector is requested.
+        */
+       BPF_FLOW_DISSECTOR_CONTINUE = 129,
 };
 
 struct bpf_sock {
@@ -5995,6 +6257,8 @@ struct bpf_prog_info {
        __u64 run_cnt;
        __u64 recursion_misses;
        __u32 verified_insns;
+       __u32 attach_btf_obj_id;
+       __u32 attach_btf_id;
 } __attribute__((aligned(8)));
 
 struct bpf_map_info {
@@ -6046,11 +6310,26 @@ struct bpf_link_info {
                struct {
                        __aligned_u64 target_name; /* in/out: target_name buffer ptr */
                        __u32 target_name_len;     /* in/out: target_name buffer len */
+
+                       /* If the iter specific field is 32 bits, it can be put
+                        * in the first or second union. Otherwise it should be
+                        * put in the second union.
+                        */
                        union {
                                struct {
                                        __u32 map_id;
                                } map;
                        };
+                       union {
+                               struct {
+                                       __u64 cgroup_id;
+                                       __u32 order;
+                               } cgroup;
+                               struct {
+                                       __u32 tid;
+                                       __u32 pid;
+                               } task;
+                       };
                } iter;
                struct  {
                        __u32 netns_ino;
@@ -6169,6 +6448,7 @@ struct bpf_sock_ops {
                                 * the outgoing header has not
                                 * been written yet.
                                 */
+       __u64 skb_hwtstamp;
 };
 
 /* Definitions for bpf_sock_ops_cb_flags */
@@ -6611,6 +6891,16 @@ struct bpf_dynptr {
        __u64 :64;
 } __attribute__((aligned(8)));
 
+struct bpf_list_head {
+       __u64 :64;
+       __u64 :64;
+} __attribute__((aligned(8)));
+
+struct bpf_list_node {
+       __u64 :64;
+       __u64 :64;
+} __attribute__((aligned(8)));
+
 struct bpf_sysctl {
        __u32   write;          /* Sysctl is being read (= 0) or written (= 1).
                                 * Allows 1,2,4-byte read, but no write.
@@ -6702,6 +6992,7 @@ enum bpf_core_relo_kind {
        BPF_CORE_TYPE_SIZE = 9,              /* type size in bytes */
        BPF_CORE_ENUMVAL_EXISTS = 10,        /* enum value existence in target kernel */
        BPF_CORE_ENUMVAL_VALUE = 11,         /* enum value integer value */
+       BPF_CORE_TYPE_MATCHES = 12,          /* type match in target kernel */
 };
 
 /*
@@ -6759,4 +7050,4 @@ struct bpf_core_relo {
        enum bpf_core_relo_kind kind;
 };
 
-#endif /* _UAPI__LINUX_BPF_H__ */
+#endif /* __LINUX_BPF_H__ */
index ee97668bdadb31585815e271af40667b6dea8b53..f0fe1394971d19422a3fe39bec4451d2a436b27e 100644 (file)
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-#ifndef _UAPI__LINUX_BPF_COMMON_H__
-#define _UAPI__LINUX_BPF_COMMON_H__
+#ifndef __LINUX_BPF_COMMON_H__
+#define __LINUX_BPF_COMMON_H__
 
 /* Instruction classes */
 #define BPF_CLASS(code) ((code) & 0x07)
@@ -54,4 +54,4 @@
 #define BPF_MAXINSNS 4096
 #endif
 
-#endif /* _UAPI__LINUX_BPF_COMMON_H__ */
+#endif /* __LINUX_BPF_COMMON_H__ */
index 5a4bca34094ddf38a1dcc1d840269a1f1041a6df..19a64fc3f2f0412db0fdd2dbcd483e6f303918e8 100644 (file)
@@ -182,7 +182,7 @@ struct dm_target_spec {
 struct dm_target_deps {
        __u32 count;    /* Array size */
        __u32 padding;  /* unused */
-       __u64 dev[0];   /* out */
+       __u64 dev[];    /* out */
 };
 
 /*
@@ -192,7 +192,7 @@ struct dm_name_list {
        __u64 dev;
        __u32 next;             /* offset to the next record from
                                   the _start_ of this */
-       char name[0];
+       char name[];
 
        /*
         * The following members can be accessed by taking a pointer that
@@ -216,7 +216,7 @@ struct dm_target_versions {
         __u32 next;
         __u32 version[3];
 
-        char name[0];
+        char name[];
 };
 
 /*
@@ -225,7 +225,7 @@ struct dm_target_versions {
 struct dm_target_msg {
        __u64 sector;   /* Device sector */
 
-       char message[0];
+       char message[];
 };
 
 /*
index bcdf4850a07dd3a006bb90a65a95792c760ea9c7..1458de3627333a3fa635a6c2730497c3ebaa3079 100644 (file)
  * Portions Copyright (C) Sun Microsystems 2008
  */
 
-#ifndef _UAPI_LINUX_ETHTOOL_H
-#define _UAPI_LINUX_ETHTOOL_H
+#ifndef _LINUX_ETHTOOL_H
+#define _LINUX_ETHTOOL_H
 
 #include <linux/const.h>
 #include <linux/types.h>
 #include <linux/if_ether.h>
 
-#ifndef __KERNEL__
 #include <limits.h> /* for INT_MAX */
-#endif
 
 #ifndef __KERNEL_DIV_ROUND_UP
 #define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
@@ -126,14 +124,14 @@ struct ethtool_cmd {
        __u32   reserved[2];
 };
 
-static inline void ethtool_cmd_speed_set(struct ethtool_cmd *ep,
+static __inline__ void ethtool_cmd_speed_set(struct ethtool_cmd *ep,
                                         __u32 speed)
 {
        ep->speed = (__u16)(speed & 0xFFFF);
        ep->speed_hi = (__u16)(speed >> 16);
 }
 
-static inline __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep)
+static __inline__ __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep)
 {
        return ((__u32) ep->speed_hi << 16) | (__u32) ep->speed;
 }
@@ -163,8 +161,10 @@ static inline __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep)
  *     in its bus driver structure (e.g. pci_driver::name).  Must
  *     not be an empty string.
  * @version: Driver version string; may be an empty string
- * @fw_version: Firmware version string; may be an empty string
- * @erom_version: Expansion ROM version string; may be an empty string
+ * @fw_version: Firmware version string; driver defined; may be an
+ *     empty string
+ * @erom_version: Expansion ROM version string; driver defined; may be
+ *     an empty string
  * @bus_info: Device bus address.  This should match the dev_name()
  *     string for the underlying bus device, if there is one.  May be
  *     an empty string.
@@ -183,10 +183,6 @@ static inline __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep)
  *
  * Users can use the %ETHTOOL_GSSET_INFO command to get the number of
  * strings in any string set (from Linux 2.6.34).
- *
- * Drivers should set at most @driver, @version, @fw_version and
- * @bus_info in their get_drvinfo() implementation.  The ethtool
- * core fills in the other fields using other driver operations.
  */
 struct ethtool_drvinfo {
        __u32   cmd;
@@ -261,7 +257,7 @@ struct ethtool_tunable {
        __u32   id;
        __u32   type_id;
        __u32   len;
-       void    *data[0];
+       void    *data[];
 };
 
 #define DOWNSHIFT_DEV_DEFAULT_COUNT    0xff
@@ -326,7 +322,7 @@ struct ethtool_regs {
        __u32   cmd;
        __u32   version;
        __u32   len;
-       __u8    data[0];
+       __u8    data[];
 };
 
 /**
@@ -352,7 +348,7 @@ struct ethtool_eeprom {
        __u32   magic;
        __u32   offset;
        __u32   len;
-       __u8    data[0];
+       __u8    data[];
 };
 
 /**
@@ -740,6 +736,51 @@ enum ethtool_module_power_mode {
        ETHTOOL_MODULE_POWER_MODE_HIGH,
 };
 
+/**
+ * enum ethtool_podl_pse_admin_state - operational state of the PoDL PSE
+ *     functions. IEEE 802.3-2018 30.15.1.1.2 aPoDLPSEAdminState
+ * @ETHTOOL_PODL_PSE_ADMIN_STATE_UNKNOWN: state of PoDL PSE functions are
+ *     unknown
+ * @ETHTOOL_PODL_PSE_ADMIN_STATE_DISABLED: PoDL PSE functions are disabled
+ * @ETHTOOL_PODL_PSE_ADMIN_STATE_ENABLED: PoDL PSE functions are enabled
+ */
+enum ethtool_podl_pse_admin_state {
+       ETHTOOL_PODL_PSE_ADMIN_STATE_UNKNOWN = 1,
+       ETHTOOL_PODL_PSE_ADMIN_STATE_DISABLED,
+       ETHTOOL_PODL_PSE_ADMIN_STATE_ENABLED,
+};
+
+/**
+ * enum ethtool_podl_pse_pw_d_status - power detection status of the PoDL PSE.
+ *     IEEE 802.3-2018 30.15.1.1.3 aPoDLPSEPowerDetectionStatus:
+ * @ETHTOOL_PODL_PSE_PW_D_STATUS_UNKNOWN: PoDL PSE
+ * @ETHTOOL_PODL_PSE_PW_D_STATUS_DISABLED: "The enumeration “disabled” is
+ *     asserted true when the PoDL PSE state diagram variable mr_pse_enable is
+ *     false"
+ * @ETHTOOL_PODL_PSE_PW_D_STATUS_SEARCHING: "The enumeration “searching” is
+ *     asserted true when either of the PSE state diagram variables
+ *     pi_detecting or pi_classifying is true."
+ * @ETHTOOL_PODL_PSE_PW_D_STATUS_DELIVERING: "The enumeration “deliveringPower”
+ *     is asserted true when the PoDL PSE state diagram variable pi_powered is
+ *     true."
+ * @ETHTOOL_PODL_PSE_PW_D_STATUS_SLEEP: "The enumeration “sleep” is asserted
+ *     true when the PoDL PSE state diagram variable pi_sleeping is true."
+ * @ETHTOOL_PODL_PSE_PW_D_STATUS_IDLE: "The enumeration “idle” is asserted true
+ *     when the logical combination of the PoDL PSE state diagram variables
+ *     pi_prebiased*!pi_sleeping is true."
+ * @ETHTOOL_PODL_PSE_PW_D_STATUS_ERROR: "The enumeration “error” is asserted
+ *     true when the PoDL PSE state diagram variable overload_held is true."
+ */
+enum ethtool_podl_pse_pw_d_status {
+       ETHTOOL_PODL_PSE_PW_D_STATUS_UNKNOWN = 1,
+       ETHTOOL_PODL_PSE_PW_D_STATUS_DISABLED,
+       ETHTOOL_PODL_PSE_PW_D_STATUS_SEARCHING,
+       ETHTOOL_PODL_PSE_PW_D_STATUS_DELIVERING,
+       ETHTOOL_PODL_PSE_PW_D_STATUS_SLEEP,
+       ETHTOOL_PODL_PSE_PW_D_STATUS_IDLE,
+       ETHTOOL_PODL_PSE_PW_D_STATUS_ERROR,
+};
+
 /**
  * struct ethtool_gstrings - string set for data tagging
  * @cmd: Command number = %ETHTOOL_GSTRINGS
@@ -756,7 +797,7 @@ struct ethtool_gstrings {
        __u32   cmd;
        __u32   string_set;
        __u32   len;
-       __u8    data[0];
+       __u8    data[];
 };
 
 /**
@@ -781,7 +822,7 @@ struct ethtool_sset_info {
        __u32   cmd;
        __u32   reserved;
        __u64   sset_mask;
-       __u32   data[0];
+       __u32   data[];
 };
 
 /**
@@ -821,7 +862,7 @@ struct ethtool_test {
        __u32   flags;
        __u32   reserved;
        __u32   len;
-       __u64   data[0];
+       __u64   data[];
 };
 
 /**
@@ -838,7 +879,7 @@ struct ethtool_test {
 struct ethtool_stats {
        __u32   cmd;
        __u32   n_stats;
-       __u64   data[0];
+       __u64   data[];
 };
 
 /**
@@ -855,7 +896,7 @@ struct ethtool_stats {
 struct ethtool_perm_addr {
        __u32   cmd;
        __u32   size;
-       __u8    data[0];
+       __u8    data[];
 };
 
 /* boolean flags controlling per-interface behavior characteristics.
@@ -1063,12 +1104,12 @@ struct ethtool_rx_flow_spec {
 #define ETHTOOL_RX_FLOW_SPEC_RING      0x00000000FFFFFFFFLL
 #define ETHTOOL_RX_FLOW_SPEC_RING_VF   0x000000FF00000000LL
 #define ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF 32
-static inline __u64 ethtool_get_flow_spec_ring(__u64 ring_cookie)
+static __inline__ __u64 ethtool_get_flow_spec_ring(__u64 ring_cookie)
 {
        return ETHTOOL_RX_FLOW_SPEC_RING & ring_cookie;
 }
 
-static inline __u64 ethtool_get_flow_spec_ring_vf(__u64 ring_cookie)
+static __inline__ __u64 ethtool_get_flow_spec_ring_vf(__u64 ring_cookie)
 {
        return (ETHTOOL_RX_FLOW_SPEC_RING_VF & ring_cookie) >>
                                ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF;
@@ -1164,7 +1205,7 @@ struct ethtool_rxnfc {
 struct ethtool_rxfh_indir {
        __u32   cmd;
        __u32   size;
-       __u32   ring_index[0];
+       __u32   ring_index[];
 };
 
 /**
@@ -1205,7 +1246,7 @@ struct ethtool_rxfh {
        __u8    hfunc;
        __u8    rsvd8[3];
        __u32   rsvd32;
-       __u32   rss_config[0];
+       __u32   rss_config[];
 };
 #define ETH_RXFH_CONTEXT_ALLOC         0xffffffff
 #define ETH_RXFH_INDIR_NO_CHANGE       0xffffffff
@@ -1290,7 +1331,7 @@ struct ethtool_dump {
        __u32   version;
        __u32   flag;
        __u32   len;
-       __u8    data[0];
+       __u8    data[];
 };
 
 #define ETH_FW_DUMP_DISABLE 0
@@ -1322,7 +1363,7 @@ struct ethtool_get_features_block {
 struct ethtool_gfeatures {
        __u32   cmd;
        __u32   size;
-       struct ethtool_get_features_block features[0];
+       struct ethtool_get_features_block features[];
 };
 
 /**
@@ -1344,7 +1385,7 @@ struct ethtool_set_features_block {
 struct ethtool_sfeatures {
        __u32   cmd;
        __u32   size;
-       struct ethtool_set_features_block features[0];
+       struct ethtool_set_features_block features[];
 };
 
 /**
@@ -1696,6 +1737,13 @@ enum ethtool_link_mode_bit_indices {
        ETHTOOL_LINK_MODE_100baseFX_Half_BIT             = 90,
        ETHTOOL_LINK_MODE_100baseFX_Full_BIT             = 91,
        ETHTOOL_LINK_MODE_10baseT1L_Full_BIT             = 92,
+       ETHTOOL_LINK_MODE_800000baseCR8_Full_BIT         = 93,
+       ETHTOOL_LINK_MODE_800000baseKR8_Full_BIT         = 94,
+       ETHTOOL_LINK_MODE_800000baseDR8_Full_BIT         = 95,
+       ETHTOOL_LINK_MODE_800000baseDR8_2_Full_BIT       = 96,
+       ETHTOOL_LINK_MODE_800000baseSR8_Full_BIT         = 97,
+       ETHTOOL_LINK_MODE_800000baseVR8_Full_BIT         = 98,
+
        /* must be last entry */
        __ETHTOOL_LINK_MODE_MASK_NBITS
 };
@@ -1807,10 +1855,11 @@ enum ethtool_link_mode_bit_indices {
 #define SPEED_100000           100000
 #define SPEED_200000           200000
 #define SPEED_400000           400000
+#define SPEED_800000           800000
 
 #define SPEED_UNKNOWN          -1
 
-static inline int ethtool_validate_speed(__u32 speed)
+static __inline__ int ethtool_validate_speed(__u32 speed)
 {
        return speed <= INT_MAX || speed == (__u32)SPEED_UNKNOWN;
 }
@@ -1820,7 +1869,7 @@ static inline int ethtool_validate_speed(__u32 speed)
 #define DUPLEX_FULL            0x01
 #define DUPLEX_UNKNOWN         0xff
 
-static inline int ethtool_validate_duplex(__u8 duplex)
+static __inline__ int ethtool_validate_duplex(__u8 duplex)
 {
        switch (duplex) {
        case DUPLEX_HALF:
@@ -1844,6 +1893,20 @@ static inline int ethtool_validate_duplex(__u8 duplex)
 #define MASTER_SLAVE_STATE_SLAVE               3
 #define MASTER_SLAVE_STATE_ERR                 4
 
+/* These are used to throttle the rate of data on the phy interface when the
+ * native speed of the interface is higher than the link speed. These should
+ * not be used for phy interfaces which natively support multiple speeds (e.g.
+ * MII or SGMII).
+ */
+/* No rate matching performed. */
+#define RATE_MATCH_NONE                0
+/* The phy sends pause frames to throttle the MAC. */
+#define RATE_MATCH_PAUSE       1
+/* The phy asserts CRS to prevent the MAC from transmitting. */
+#define RATE_MATCH_CRS         2
+/* The MAC is programmed with a sufficiently-large IPG. */
+#define RATE_MATCH_OPEN_LOOP   3
+
 /* Which connector port. */
 #define PORT_TP                        0x00
 #define PORT_AUI               0x01
@@ -2037,8 +2100,8 @@ enum ethtool_reset_flags {
  *     reported consistently by PHYLIB.  Read-only.
  * @master_slave_cfg: Master/slave port mode.
  * @master_slave_state: Master/slave port state.
+ * @rate_matching: Rate adaptation performed by the PHY
  * @reserved: Reserved for future use; see the note on reserved space.
- * @reserved1: Reserved for future use; see the note on reserved space.
  * @link_mode_masks: Variable length bitmaps.
  *
  * If autonegotiation is disabled, the speed and @duplex represent the
@@ -2089,13 +2152,13 @@ struct ethtool_link_settings {
        __u8    transceiver;
        __u8    master_slave_cfg;
        __u8    master_slave_state;
-       __u8    reserved1[1];
+       __u8    rate_matching;
        __u32   reserved[7];
-       __u32   link_mode_masks[0];
+       __u32   link_mode_masks[];
        /* layout of link_mode_masks fields:
         * __u32 map_supported[link_mode_masks_nwords];
         * __u32 map_advertising[link_mode_masks_nwords];
         * __u32 map_lp_advertising[link_mode_masks_nwords];
         */
 };
-#endif /* _UAPI_LINUX_ETHTOOL_H */
+#endif /* _LINUX_ETHTOOL_H */