aboutsummaryrefslogtreecommitdiffstats
path: root/include/uapi/linux
diff options
context:
space:
mode:
Diffstat (limited to 'include/uapi/linux')
-rw-r--r--include/uapi/linux/aio_abi.h1
-rw-r--r--include/uapi/linux/audit.h2
-rw-r--r--include/uapi/linux/auto_fs.h169
-rw-r--r--include/uapi/linux/auto_fs4.h153
-rw-r--r--include/uapi/linux/bpf.h2220
-rw-r--r--include/uapi/linux/bpfilter.h21
-rw-r--r--include/uapi/linux/btf.h113
-rw-r--r--include/uapi/linux/cn_proc.h4
-rw-r--r--include/uapi/linux/dcbnl.h11
-rw-r--r--include/uapi/linux/devlink.h14
-rw-r--r--include/uapi/linux/elf.h1
-rw-r--r--include/uapi/linux/fs.h10
-rw-r--r--include/uapi/linux/fuse.h7
-rw-r--r--include/uapi/linux/if_addr.h1
-rw-r--r--include/uapi/linux/if_link.h2
-rw-r--r--include/uapi/linux/if_xdp.h78
-rw-r--r--include/uapi/linux/kernel-page-flags.h2
-rw-r--r--include/uapi/linux/lirc.h6
-rw-r--r--include/uapi/linux/ncp.h202
-rw-r--r--include/uapi/linux/ncp_fs.h147
-rw-r--r--include/uapi/linux/ncp_mount.h72
-rw-r--r--include/uapi/linux/ncp_no.h20
-rw-r--r--include/uapi/linux/netfilter/nf_nat.h12
-rw-r--r--include/uapi/linux/netfilter/nf_osf.h86
-rw-r--r--include/uapi/linux/netfilter/nf_tables.h67
-rw-r--r--include/uapi/linux/netfilter/nfnetlink_conntrack.h1
-rw-r--r--include/uapi/linux/netfilter/xt_osf.h106
-rw-r--r--include/uapi/linux/netfilter_bridge/ebtables.h6
-rw-r--r--include/uapi/linux/netfilter_ipv6/ip6t_srh.h43
-rw-r--r--include/uapi/linux/nl80211.h99
-rw-r--r--include/uapi/linux/omap3isp.h22
-rw-r--r--include/uapi/linux/openvswitch.h28
-rw-r--r--include/uapi/linux/pci_regs.h8
-rw-r--r--include/uapi/linux/pkt_cls.h1
-rw-r--r--include/uapi/linux/psp-sev.h12
-rw-r--r--include/uapi/linux/rseq.h133
-rw-r--r--include/uapi/linux/rtnetlink.h8
-rw-r--r--include/uapi/linux/seg6_local.h12
-rw-r--r--include/uapi/linux/snmp.h3
-rw-r--r--include/uapi/linux/tcp.h16
-rw-r--r--include/uapi/linux/time.h7
-rw-r--r--include/uapi/linux/tipc.h12
-rw-r--r--include/uapi/linux/tipc_config.h5
-rw-r--r--include/uapi/linux/tipc_netlink.h1
-rw-r--r--include/uapi/linux/tty_flags.h2
-rw-r--r--include/uapi/linux/types_32_64.h50
-rw-r--r--include/uapi/linux/udp.h1
-rw-r--r--include/uapi/linux/usb/audio.h19
-rw-r--r--include/uapi/linux/usb/ch11.h5
-rw-r--r--include/uapi/linux/virtio_gpu.h1
-rw-r--r--include/uapi/linux/virtio_net.h3
-rw-r--r--include/uapi/linux/vmcore.h18
52 files changed, 2949 insertions, 1094 deletions
diff --git a/include/uapi/linux/aio_abi.h b/include/uapi/linux/aio_abi.h
index ed0185945bb2..75846164290e 100644
--- a/include/uapi/linux/aio_abi.h
+++ b/include/uapi/linux/aio_abi.h
@@ -53,6 +53,7 @@ enum {
53 * is valid. 53 * is valid.
54 */ 54 */
55#define IOCB_FLAG_RESFD (1 << 0) 55#define IOCB_FLAG_RESFD (1 << 0)
56#define IOCB_FLAG_IOPRIO (1 << 1)
56 57
57/* read() from /dev/aio returns these structures. */ 58/* read() from /dev/aio returns these structures. */
58struct io_event { 59struct io_event {
diff --git a/include/uapi/linux/audit.h b/include/uapi/linux/audit.h
index 4e61a9e05132..c35aee9ad4a6 100644
--- a/include/uapi/linux/audit.h
+++ b/include/uapi/linux/audit.h
@@ -147,6 +147,7 @@
147#define AUDIT_INTEGRITY_HASH 1803 /* Integrity HASH type */ 147#define AUDIT_INTEGRITY_HASH 1803 /* Integrity HASH type */
148#define AUDIT_INTEGRITY_PCR 1804 /* PCR invalidation msgs */ 148#define AUDIT_INTEGRITY_PCR 1804 /* PCR invalidation msgs */
149#define AUDIT_INTEGRITY_RULE 1805 /* policy rule */ 149#define AUDIT_INTEGRITY_RULE 1805 /* policy rule */
150#define AUDIT_INTEGRITY_EVM_XATTR 1806 /* New EVM-covered xattr */
150 151
151#define AUDIT_KERNEL 2000 /* Asynchronous audit record. NOT A REQUEST. */ 152#define AUDIT_KERNEL 2000 /* Asynchronous audit record. NOT A REQUEST. */
152 153
@@ -465,6 +466,7 @@ struct audit_tty_status {
465}; 466};
466 467
467#define AUDIT_UID_UNSET (unsigned int)-1 468#define AUDIT_UID_UNSET (unsigned int)-1
469#define AUDIT_SID_UNSET ((unsigned int)-1)
468 470
469/* audit_rule_data supports filter rules with both integer and string 471/* audit_rule_data supports filter rules with both integer and string
470 * fields. It corresponds with AUDIT_ADD_RULE, AUDIT_DEL_RULE and 472 * fields. It corresponds with AUDIT_ADD_RULE, AUDIT_DEL_RULE and
diff --git a/include/uapi/linux/auto_fs.h b/include/uapi/linux/auto_fs.h
index 2a4432c7a4b4..e13eec3dfb2f 100644
--- a/include/uapi/linux/auto_fs.h
+++ b/include/uapi/linux/auto_fs.h
@@ -1,6 +1,8 @@
1/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ 1/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
2/* 2/*
3 * Copyright 1997 Transmeta Corporation - All Rights Reserved 3 * Copyright 1997 Transmeta Corporation - All Rights Reserved
4 * Copyright 1999-2000 Jeremy Fitzhardinge <jeremy@goop.org>
5 * Copyright 2005-2006,2013,2017-2018 Ian Kent <raven@themaw.net>
4 * 6 *
5 * This file is part of the Linux kernel and is made available under 7 * This file is part of the Linux kernel and is made available under
6 * the terms of the GNU General Public License, version 2, or at your 8 * the terms of the GNU General Public License, version 2, or at your
@@ -8,7 +10,6 @@
8 * 10 *
9 * ----------------------------------------------------------------------- */ 11 * ----------------------------------------------------------------------- */
10 12
11
12#ifndef _UAPI_LINUX_AUTO_FS_H 13#ifndef _UAPI_LINUX_AUTO_FS_H
13#define _UAPI_LINUX_AUTO_FS_H 14#define _UAPI_LINUX_AUTO_FS_H
14 15
@@ -18,13 +19,11 @@
18#include <sys/ioctl.h> 19#include <sys/ioctl.h>
19#endif /* __KERNEL__ */ 20#endif /* __KERNEL__ */
20 21
22#define AUTOFS_PROTO_VERSION 5
23#define AUTOFS_MIN_PROTO_VERSION 3
24#define AUTOFS_MAX_PROTO_VERSION 5
21 25
22/* This file describes autofs v3 */ 26#define AUTOFS_PROTO_SUBVERSION 2
23#define AUTOFS_PROTO_VERSION 3
24
25/* Range of protocol versions defined */
26#define AUTOFS_MAX_PROTO_VERSION AUTOFS_PROTO_VERSION
27#define AUTOFS_MIN_PROTO_VERSION AUTOFS_PROTO_VERSION
28 27
29/* 28/*
30 * The wait_queue_token (autofs_wqt_t) is part of a structure which is passed 29 * The wait_queue_token (autofs_wqt_t) is part of a structure which is passed
@@ -76,9 +75,155 @@ enum {
76#define AUTOFS_IOC_READY _IO(AUTOFS_IOCTL, AUTOFS_IOC_READY_CMD) 75#define AUTOFS_IOC_READY _IO(AUTOFS_IOCTL, AUTOFS_IOC_READY_CMD)
77#define AUTOFS_IOC_FAIL _IO(AUTOFS_IOCTL, AUTOFS_IOC_FAIL_CMD) 76#define AUTOFS_IOC_FAIL _IO(AUTOFS_IOCTL, AUTOFS_IOC_FAIL_CMD)
78#define AUTOFS_IOC_CATATONIC _IO(AUTOFS_IOCTL, AUTOFS_IOC_CATATONIC_CMD) 77#define AUTOFS_IOC_CATATONIC _IO(AUTOFS_IOCTL, AUTOFS_IOC_CATATONIC_CMD)
79#define AUTOFS_IOC_PROTOVER _IOR(AUTOFS_IOCTL, AUTOFS_IOC_PROTOVER_CMD, int) 78#define AUTOFS_IOC_PROTOVER _IOR(AUTOFS_IOCTL, \
80#define AUTOFS_IOC_SETTIMEOUT32 _IOWR(AUTOFS_IOCTL, AUTOFS_IOC_SETTIMEOUT_CMD, compat_ulong_t) 79 AUTOFS_IOC_PROTOVER_CMD, int)
81#define AUTOFS_IOC_SETTIMEOUT _IOWR(AUTOFS_IOCTL, AUTOFS_IOC_SETTIMEOUT_CMD, unsigned long) 80#define AUTOFS_IOC_SETTIMEOUT32 _IOWR(AUTOFS_IOCTL, \
82#define AUTOFS_IOC_EXPIRE _IOR(AUTOFS_IOCTL, AUTOFS_IOC_EXPIRE_CMD, struct autofs_packet_expire) 81 AUTOFS_IOC_SETTIMEOUT_CMD, \
82 compat_ulong_t)
83#define AUTOFS_IOC_SETTIMEOUT _IOWR(AUTOFS_IOCTL, \
84 AUTOFS_IOC_SETTIMEOUT_CMD, \
85 unsigned long)
86#define AUTOFS_IOC_EXPIRE _IOR(AUTOFS_IOCTL, \
87 AUTOFS_IOC_EXPIRE_CMD, \
88 struct autofs_packet_expire)
89
90/* autofs version 4 and later definitions */
91
92/* Mask for expire behaviour */
93#define AUTOFS_EXP_IMMEDIATE 1
94#define AUTOFS_EXP_LEAVES 2
95
96#define AUTOFS_TYPE_ANY 0U
97#define AUTOFS_TYPE_INDIRECT 1U
98#define AUTOFS_TYPE_DIRECT 2U
99#define AUTOFS_TYPE_OFFSET 4U
100
101static inline void set_autofs_type_indirect(unsigned int *type)
102{
103 *type = AUTOFS_TYPE_INDIRECT;
104}
105
106static inline unsigned int autofs_type_indirect(unsigned int type)
107{
108 return (type == AUTOFS_TYPE_INDIRECT);
109}
110
111static inline void set_autofs_type_direct(unsigned int *type)
112{
113 *type = AUTOFS_TYPE_DIRECT;
114}
115
116static inline unsigned int autofs_type_direct(unsigned int type)
117{
118 return (type == AUTOFS_TYPE_DIRECT);
119}
120
121static inline void set_autofs_type_offset(unsigned int *type)
122{
123 *type = AUTOFS_TYPE_OFFSET;
124}
125
126static inline unsigned int autofs_type_offset(unsigned int type)
127{
128 return (type == AUTOFS_TYPE_OFFSET);
129}
130
131static inline unsigned int autofs_type_trigger(unsigned int type)
132{
133 return (type == AUTOFS_TYPE_DIRECT || type == AUTOFS_TYPE_OFFSET);
134}
135
136/*
137 * This isn't really a type as we use it to say "no type set" to
138 * indicate we want to search for "any" mount in the
139 * autofs_dev_ioctl_ismountpoint() device ioctl function.
140 */
141static inline void set_autofs_type_any(unsigned int *type)
142{
143 *type = AUTOFS_TYPE_ANY;
144}
145
146static inline unsigned int autofs_type_any(unsigned int type)
147{
148 return (type == AUTOFS_TYPE_ANY);
149}
150
151/* Daemon notification packet types */
152enum autofs_notify {
153 NFY_NONE,
154 NFY_MOUNT,
155 NFY_EXPIRE
156};
157
158/* Kernel protocol version 4 packet types */
159
160/* Expire entry (umount request) */
161#define autofs_ptype_expire_multi 2
162
163/* Kernel protocol version 5 packet types */
164
165/* Indirect mount missing and expire requests. */
166#define autofs_ptype_missing_indirect 3
167#define autofs_ptype_expire_indirect 4
168
169/* Direct mount missing and expire requests */
170#define autofs_ptype_missing_direct 5
171#define autofs_ptype_expire_direct 6
172
173/* v4 multi expire (via pipe) */
174struct autofs_packet_expire_multi {
175 struct autofs_packet_hdr hdr;
176 autofs_wqt_t wait_queue_token;
177 int len;
178 char name[NAME_MAX+1];
179};
180
181union autofs_packet_union {
182 struct autofs_packet_hdr hdr;
183 struct autofs_packet_missing missing;
184 struct autofs_packet_expire expire;
185 struct autofs_packet_expire_multi expire_multi;
186};
187
188/* autofs v5 common packet struct */
189struct autofs_v5_packet {
190 struct autofs_packet_hdr hdr;
191 autofs_wqt_t wait_queue_token;
192 __u32 dev;
193 __u64 ino;
194 __u32 uid;
195 __u32 gid;
196 __u32 pid;
197 __u32 tgid;
198 __u32 len;
199 char name[NAME_MAX+1];
200};
201
202typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
203typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
204typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
205typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
206
207union autofs_v5_packet_union {
208 struct autofs_packet_hdr hdr;
209 struct autofs_v5_packet v5_packet;
210 autofs_packet_missing_indirect_t missing_indirect;
211 autofs_packet_expire_indirect_t expire_indirect;
212 autofs_packet_missing_direct_t missing_direct;
213 autofs_packet_expire_direct_t expire_direct;
214};
215
216enum {
217 AUTOFS_IOC_EXPIRE_MULTI_CMD = 0x66, /* AUTOFS_IOC_EXPIRE_CMD + 1 */
218 AUTOFS_IOC_PROTOSUBVER_CMD,
219 AUTOFS_IOC_ASKUMOUNT_CMD = 0x70, /* AUTOFS_DEV_IOCTL_VERSION_CMD - 1 */
220};
221
222#define AUTOFS_IOC_EXPIRE_MULTI _IOW(AUTOFS_IOCTL, \
223 AUTOFS_IOC_EXPIRE_MULTI_CMD, int)
224#define AUTOFS_IOC_PROTOSUBVER _IOR(AUTOFS_IOCTL, \
225 AUTOFS_IOC_PROTOSUBVER_CMD, int)
226#define AUTOFS_IOC_ASKUMOUNT _IOR(AUTOFS_IOCTL, \
227 AUTOFS_IOC_ASKUMOUNT_CMD, int)
83 228
84#endif /* _UAPI_LINUX_AUTO_FS_H */ 229#endif /* _UAPI_LINUX_AUTO_FS_H */
diff --git a/include/uapi/linux/auto_fs4.h b/include/uapi/linux/auto_fs4.h
index 1f608e27a06f..d01ef0a0189c 100644
--- a/include/uapi/linux/auto_fs4.h
+++ b/include/uapi/linux/auto_fs4.h
@@ -7,156 +7,9 @@
7 * option, any later version, incorporated herein by reference. 7 * option, any later version, incorporated herein by reference.
8 */ 8 */
9 9
10#ifndef _LINUX_AUTO_FS4_H 10#ifndef _UAPI_LINUX_AUTO_FS4_H
11#define _LINUX_AUTO_FS4_H 11#define _UAPI_LINUX_AUTO_FS4_H
12 12
13/* Include common v3 definitions */
14#include <linux/types.h>
15#include <linux/auto_fs.h> 13#include <linux/auto_fs.h>
16 14
17/* autofs v4 definitions */ 15#endif /* _UAPI_LINUX_AUTO_FS4_H */
18#undef AUTOFS_PROTO_VERSION
19#undef AUTOFS_MIN_PROTO_VERSION
20#undef AUTOFS_MAX_PROTO_VERSION
21
22#define AUTOFS_PROTO_VERSION 5
23#define AUTOFS_MIN_PROTO_VERSION 3
24#define AUTOFS_MAX_PROTO_VERSION 5
25
26#define AUTOFS_PROTO_SUBVERSION 2
27
28/* Mask for expire behaviour */
29#define AUTOFS_EXP_IMMEDIATE 1
30#define AUTOFS_EXP_LEAVES 2
31
32#define AUTOFS_TYPE_ANY 0U
33#define AUTOFS_TYPE_INDIRECT 1U
34#define AUTOFS_TYPE_DIRECT 2U
35#define AUTOFS_TYPE_OFFSET 4U
36
37static inline void set_autofs_type_indirect(unsigned int *type)
38{
39 *type = AUTOFS_TYPE_INDIRECT;
40}
41
42static inline unsigned int autofs_type_indirect(unsigned int type)
43{
44 return (type == AUTOFS_TYPE_INDIRECT);
45}
46
47static inline void set_autofs_type_direct(unsigned int *type)
48{
49 *type = AUTOFS_TYPE_DIRECT;
50}
51
52static inline unsigned int autofs_type_direct(unsigned int type)
53{
54 return (type == AUTOFS_TYPE_DIRECT);
55}
56
57static inline void set_autofs_type_offset(unsigned int *type)
58{
59 *type = AUTOFS_TYPE_OFFSET;
60}
61
62static inline unsigned int autofs_type_offset(unsigned int type)
63{
64 return (type == AUTOFS_TYPE_OFFSET);
65}
66
67static inline unsigned int autofs_type_trigger(unsigned int type)
68{
69 return (type == AUTOFS_TYPE_DIRECT || type == AUTOFS_TYPE_OFFSET);
70}
71
72/*
73 * This isn't really a type as we use it to say "no type set" to
74 * indicate we want to search for "any" mount in the
75 * autofs_dev_ioctl_ismountpoint() device ioctl function.
76 */
77static inline void set_autofs_type_any(unsigned int *type)
78{
79 *type = AUTOFS_TYPE_ANY;
80}
81
82static inline unsigned int autofs_type_any(unsigned int type)
83{
84 return (type == AUTOFS_TYPE_ANY);
85}
86
87/* Daemon notification packet types */
88enum autofs_notify {
89 NFY_NONE,
90 NFY_MOUNT,
91 NFY_EXPIRE
92};
93
94/* Kernel protocol version 4 packet types */
95
96/* Expire entry (umount request) */
97#define autofs_ptype_expire_multi 2
98
99/* Kernel protocol version 5 packet types */
100
101/* Indirect mount missing and expire requests. */
102#define autofs_ptype_missing_indirect 3
103#define autofs_ptype_expire_indirect 4
104
105/* Direct mount missing and expire requests */
106#define autofs_ptype_missing_direct 5
107#define autofs_ptype_expire_direct 6
108
109/* v4 multi expire (via pipe) */
110struct autofs_packet_expire_multi {
111 struct autofs_packet_hdr hdr;
112 autofs_wqt_t wait_queue_token;
113 int len;
114 char name[NAME_MAX+1];
115};
116
117union autofs_packet_union {
118 struct autofs_packet_hdr hdr;
119 struct autofs_packet_missing missing;
120 struct autofs_packet_expire expire;
121 struct autofs_packet_expire_multi expire_multi;
122};
123
124/* autofs v5 common packet struct */
125struct autofs_v5_packet {
126 struct autofs_packet_hdr hdr;
127 autofs_wqt_t wait_queue_token;
128 __u32 dev;
129 __u64 ino;
130 __u32 uid;
131 __u32 gid;
132 __u32 pid;
133 __u32 tgid;
134 __u32 len;
135 char name[NAME_MAX+1];
136};
137
138typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
139typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
140typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
141typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
142
143union autofs_v5_packet_union {
144 struct autofs_packet_hdr hdr;
145 struct autofs_v5_packet v5_packet;
146 autofs_packet_missing_indirect_t missing_indirect;
147 autofs_packet_expire_indirect_t expire_indirect;
148 autofs_packet_missing_direct_t missing_direct;
149 autofs_packet_expire_direct_t expire_direct;
150};
151
152enum {
153 AUTOFS_IOC_EXPIRE_MULTI_CMD = 0x66, /* AUTOFS_IOC_EXPIRE_CMD + 1 */
154 AUTOFS_IOC_PROTOSUBVER_CMD,
155 AUTOFS_IOC_ASKUMOUNT_CMD = 0x70, /* AUTOFS_DEV_IOCTL_VERSION_CMD - 1 */
156};
157
158#define AUTOFS_IOC_EXPIRE_MULTI _IOW(AUTOFS_IOCTL, AUTOFS_IOC_EXPIRE_MULTI_CMD, int)
159#define AUTOFS_IOC_PROTOSUBVER _IOR(AUTOFS_IOCTL, AUTOFS_IOC_PROTOSUBVER_CMD, int)
160#define AUTOFS_IOC_ASKUMOUNT _IOR(AUTOFS_IOCTL, AUTOFS_IOC_ASKUMOUNT_CMD, int)
161
162#endif /* _LINUX_AUTO_FS4_H */
diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
index 8c317737ba3f..59b19b6a40d7 100644
--- a/include/uapi/linux/bpf.h
+++ b/include/uapi/linux/bpf.h
@@ -95,6 +95,9 @@ enum bpf_cmd {
95 BPF_OBJ_GET_INFO_BY_FD, 95 BPF_OBJ_GET_INFO_BY_FD,
96 BPF_PROG_QUERY, 96 BPF_PROG_QUERY,
97 BPF_RAW_TRACEPOINT_OPEN, 97 BPF_RAW_TRACEPOINT_OPEN,
98 BPF_BTF_LOAD,
99 BPF_BTF_GET_FD_BY_ID,
100 BPF_TASK_FD_QUERY,
98}; 101};
99 102
100enum bpf_map_type { 103enum bpf_map_type {
@@ -115,6 +118,8 @@ enum bpf_map_type {
115 BPF_MAP_TYPE_DEVMAP, 118 BPF_MAP_TYPE_DEVMAP,
116 BPF_MAP_TYPE_SOCKMAP, 119 BPF_MAP_TYPE_SOCKMAP,
117 BPF_MAP_TYPE_CPUMAP, 120 BPF_MAP_TYPE_CPUMAP,
121 BPF_MAP_TYPE_XSKMAP,
122 BPF_MAP_TYPE_SOCKHASH,
118}; 123};
119 124
120enum bpf_prog_type { 125enum bpf_prog_type {
@@ -137,6 +142,8 @@ enum bpf_prog_type {
137 BPF_PROG_TYPE_SK_MSG, 142 BPF_PROG_TYPE_SK_MSG,
138 BPF_PROG_TYPE_RAW_TRACEPOINT, 143 BPF_PROG_TYPE_RAW_TRACEPOINT,
139 BPF_PROG_TYPE_CGROUP_SOCK_ADDR, 144 BPF_PROG_TYPE_CGROUP_SOCK_ADDR,
145 BPF_PROG_TYPE_LWT_SEG6LOCAL,
146 BPF_PROG_TYPE_LIRC_MODE2,
140}; 147};
141 148
142enum bpf_attach_type { 149enum bpf_attach_type {
@@ -154,6 +161,9 @@ enum bpf_attach_type {
154 BPF_CGROUP_INET6_CONNECT, 161 BPF_CGROUP_INET6_CONNECT,
155 BPF_CGROUP_INET4_POST_BIND, 162 BPF_CGROUP_INET4_POST_BIND,
156 BPF_CGROUP_INET6_POST_BIND, 163 BPF_CGROUP_INET6_POST_BIND,
164 BPF_CGROUP_UDP4_SENDMSG,
165 BPF_CGROUP_UDP6_SENDMSG,
166 BPF_LIRC_MODE2,
157 __MAX_BPF_ATTACH_TYPE 167 __MAX_BPF_ATTACH_TYPE
158}; 168};
159 169
@@ -279,6 +289,9 @@ union bpf_attr {
279 */ 289 */
280 char map_name[BPF_OBJ_NAME_LEN]; 290 char map_name[BPF_OBJ_NAME_LEN];
281 __u32 map_ifindex; /* ifindex of netdev to create on */ 291 __u32 map_ifindex; /* ifindex of netdev to create on */
292 __u32 btf_fd; /* fd pointing to a BTF type data */
293 __u32 btf_key_type_id; /* BTF type_id of the key */
294 __u32 btf_value_type_id; /* BTF type_id of the value */
282 }; 295 };
283 296
284 struct { /* anonymous struct used by BPF_MAP_*_ELEM commands */ 297 struct { /* anonymous struct used by BPF_MAP_*_ELEM commands */
@@ -339,6 +352,7 @@ union bpf_attr {
339 __u32 start_id; 352 __u32 start_id;
340 __u32 prog_id; 353 __u32 prog_id;
341 __u32 map_id; 354 __u32 map_id;
355 __u32 btf_id;
342 }; 356 };
343 __u32 next_id; 357 __u32 next_id;
344 __u32 open_flags; 358 __u32 open_flags;
@@ -363,398 +377,1704 @@ union bpf_attr {
363 __u64 name; 377 __u64 name;
364 __u32 prog_fd; 378 __u32 prog_fd;
365 } raw_tracepoint; 379 } raw_tracepoint;
380
381 struct { /* anonymous struct for BPF_BTF_LOAD */
382 __aligned_u64 btf;
383 __aligned_u64 btf_log_buf;
384 __u32 btf_size;
385 __u32 btf_log_size;
386 __u32 btf_log_level;
387 };
388
389 struct {
390 __u32 pid; /* input: pid */
391 __u32 fd; /* input: fd */
392 __u32 flags; /* input: flags */
393 __u32 buf_len; /* input/output: buf len */
394 __aligned_u64 buf; /* input/output:
395 * tp_name for tracepoint
396 * symbol for kprobe
397 * filename for uprobe
398 */
399 __u32 prog_id; /* output: prod_id */
400 __u32 fd_type; /* output: BPF_FD_TYPE_* */
401 __u64 probe_offset; /* output: probe_offset */
402 __u64 probe_addr; /* output: probe_addr */
403 } task_fd_query;
366} __attribute__((aligned(8))); 404} __attribute__((aligned(8)));
367 405
368/* BPF helper function descriptions: 406/* The description below is an attempt at providing documentation to eBPF
369 * 407 * developers about the multiple available eBPF helper functions. It can be
370 * void *bpf_map_lookup_elem(&map, &key) 408 * parsed and used to produce a manual page. The workflow is the following,
371 * Return: Map value or NULL 409 * and requires the rst2man utility:
372 * 410 *
373 * int bpf_map_update_elem(&map, &key, &value, flags) 411 * $ ./scripts/bpf_helpers_doc.py \
374 * Return: 0 on success or negative error 412 * --filename include/uapi/linux/bpf.h > /tmp/bpf-helpers.rst
375 * 413 * $ rst2man /tmp/bpf-helpers.rst > /tmp/bpf-helpers.7
376 * int bpf_map_delete_elem(&map, &key) 414 * $ man /tmp/bpf-helpers.7
377 * Return: 0 on success or negative error 415 *
378 * 416 * Note that in order to produce this external documentation, some RST
379 * int bpf_probe_read(void *dst, int size, void *src) 417 * formatting is used in the descriptions to get "bold" and "italics" in
380 * Return: 0 on success or negative error 418 * manual pages. Also note that the few trailing white spaces are
419 * intentional, removing them would break paragraphs for rst2man.
420 *
421 * Start of BPF helper function descriptions:
422 *
423 * void *bpf_map_lookup_elem(struct bpf_map *map, const void *key)
424 * Description
425 * Perform a lookup in *map* for an entry associated to *key*.
426 * Return
427 * Map value associated to *key*, or **NULL** if no entry was
428 * found.
429 *
430 * int bpf_map_update_elem(struct bpf_map *map, const void *key, const void *value, u64 flags)
431 * Description
432 * Add or update the value of the entry associated to *key* in
433 * *map* with *value*. *flags* is one of:
434 *
435 * **BPF_NOEXIST**
436 * The entry for *key* must not exist in the map.
437 * **BPF_EXIST**
438 * The entry for *key* must already exist in the map.
439 * **BPF_ANY**
440 * No condition on the existence of the entry for *key*.
441 *
442 * Flag value **BPF_NOEXIST** cannot be used for maps of types
443 * **BPF_MAP_TYPE_ARRAY** or **BPF_MAP_TYPE_PERCPU_ARRAY** (all
444 * elements always exist), the helper would return an error.
445 * Return
446 * 0 on success, or a negative error in case of failure.
447 *
448 * int bpf_map_delete_elem(struct bpf_map *map, const void *key)
449 * Description
450 * Delete entry with *key* from *map*.
451 * Return
452 * 0 on success, or a negative error in case of failure.
453 *
454 * int bpf_probe_read(void *dst, u32 size, const void *src)
455 * Description
456 * For tracing programs, safely attempt to read *size* bytes from
457 * address *src* and store the data in *dst*.
458 * Return
459 * 0 on success, or a negative error in case of failure.
381 * 460 *
382 * u64 bpf_ktime_get_ns(void) 461 * u64 bpf_ktime_get_ns(void)
383 * Return: current ktime 462 * Description
384 * 463 * Return the time elapsed since system boot, in nanoseconds.
385 * int bpf_trace_printk(const char *fmt, int fmt_size, ...) 464 * Return
386 * Return: length of buffer written or negative error 465 * Current *ktime*.
387 * 466 *
388 * u32 bpf_prandom_u32(void) 467 * int bpf_trace_printk(const char *fmt, u32 fmt_size, ...)
389 * Return: random value 468 * Description
390 * 469 * This helper is a "printk()-like" facility for debugging. It
391 * u32 bpf_raw_smp_processor_id(void) 470 * prints a message defined by format *fmt* (of size *fmt_size*)
392 * Return: SMP processor ID 471 * to file *\/sys/kernel/debug/tracing/trace* from DebugFS, if
393 * 472 * available. It can take up to three additional **u64**
394 * int bpf_skb_store_bytes(skb, offset, from, len, flags) 473 * arguments (as an eBPF helpers, the total number of arguments is
395 * store bytes into packet 474 * limited to five).
396 * @skb: pointer to skb 475 *
397 * @offset: offset within packet from skb->mac_header 476 * Each time the helper is called, it appends a line to the trace.
398 * @from: pointer where to copy bytes from 477 * The format of the trace is customizable, and the exact output
399 * @len: number of bytes to store into packet 478 * one will get depends on the options set in
400 * @flags: bit 0 - if true, recompute skb->csum 479 * *\/sys/kernel/debug/tracing/trace_options* (see also the
401 * other bits - reserved 480 * *README* file under the same directory). However, it usually
402 * Return: 0 on success or negative error 481 * defaults to something like:
403 * 482 *
404 * int bpf_l3_csum_replace(skb, offset, from, to, flags) 483 * ::
405 * recompute IP checksum 484 *
406 * @skb: pointer to skb 485 * telnet-470 [001] .N.. 419421.045894: 0x00000001: <formatted msg>
407 * @offset: offset within packet where IP checksum is located 486 *
408 * @from: old value of header field 487 * In the above:
409 * @to: new value of header field 488 *
410 * @flags: bits 0-3 - size of header field 489 * * ``telnet`` is the name of the current task.
411 * other bits - reserved 490 * * ``470`` is the PID of the current task.
412 * Return: 0 on success or negative error 491 * * ``001`` is the CPU number on which the task is
413 * 492 * running.
414 * int bpf_l4_csum_replace(skb, offset, from, to, flags) 493 * * In ``.N..``, each character refers to a set of
415 * recompute TCP/UDP checksum 494 * options (whether irqs are enabled, scheduling
416 * @skb: pointer to skb 495 * options, whether hard/softirqs are running, level of
417 * @offset: offset within packet where TCP/UDP checksum is located 496 * preempt_disabled respectively). **N** means that
418 * @from: old value of header field 497 * **TIF_NEED_RESCHED** and **PREEMPT_NEED_RESCHED**
419 * @to: new value of header field 498 * are set.
420 * @flags: bits 0-3 - size of header field 499 * * ``419421.045894`` is a timestamp.
421 * bit 4 - is pseudo header 500 * * ``0x00000001`` is a fake value used by BPF for the
422 * other bits - reserved 501 * instruction pointer register.
423 * Return: 0 on success or negative error 502 * * ``<formatted msg>`` is the message formatted with
424 * 503 * *fmt*.
425 * int bpf_tail_call(ctx, prog_array_map, index) 504 *
426 * jump into another BPF program 505 * The conversion specifiers supported by *fmt* are similar, but
427 * @ctx: context pointer passed to next program 506 * more limited than for printk(). They are **%d**, **%i**,
428 * @prog_array_map: pointer to map which type is BPF_MAP_TYPE_PROG_ARRAY 507 * **%u**, **%x**, **%ld**, **%li**, **%lu**, **%lx**, **%lld**,
429 * @index: 32-bit index inside array that selects specific program to run 508 * **%lli**, **%llu**, **%llx**, **%p**, **%s**. No modifier (size
430 * Return: 0 on success or negative error 509 * of field, padding with zeroes, etc.) is available, and the
431 * 510 * helper will return **-EINVAL** (but print nothing) if it
432 * int bpf_clone_redirect(skb, ifindex, flags) 511 * encounters an unknown specifier.
433 * redirect to another netdev 512 *
434 * @skb: pointer to skb 513 * Also, note that **bpf_trace_printk**\ () is slow, and should
435 * @ifindex: ifindex of the net device 514 * only be used for debugging purposes. For this reason, a notice
436 * @flags: bit 0 - if set, redirect to ingress instead of egress 515 * bloc (spanning several lines) is printed to kernel logs and
437 * other bits - reserved 516 * states that the helper should not be used "for production use"
438 * Return: 0 on success or negative error 517 * the first time this helper is used (or more precisely, when
518 * **trace_printk**\ () buffers are allocated). For passing values
519 * to user space, perf events should be preferred.
520 * Return
521 * The number of bytes written to the buffer, or a negative error
522 * in case of failure.
523 *
524 * u32 bpf_get_prandom_u32(void)
525 * Description
526 * Get a pseudo-random number.
527 *
528 * From a security point of view, this helper uses its own
529 * pseudo-random internal state, and cannot be used to infer the
530 * seed of other random functions in the kernel. However, it is
531 * essential to note that the generator used by the helper is not
532 * cryptographically secure.
533 * Return
534 * A random 32-bit unsigned value.
535 *
536 * u32 bpf_get_smp_processor_id(void)
537 * Description
538 * Get the SMP (symmetric multiprocessing) processor id. Note that
539 * all programs run with preemption disabled, which means that the
540 * SMP processor id is stable during all the execution of the
541 * program.
542 * Return
543 * The SMP id of the processor running the program.
544 *
545 * int bpf_skb_store_bytes(struct sk_buff *skb, u32 offset, const void *from, u32 len, u64 flags)
546 * Description
547 * Store *len* bytes from address *from* into the packet
548 * associated to *skb*, at *offset*. *flags* are a combination of
549 * **BPF_F_RECOMPUTE_CSUM** (automatically recompute the
550 * checksum for the packet after storing the bytes) and
551 * **BPF_F_INVALIDATE_HASH** (set *skb*\ **->hash**, *skb*\
552 * **->swhash** and *skb*\ **->l4hash** to 0).
553 *
554 * A call to this helper is susceptible to change the underlaying
555 * packet buffer. Therefore, at load time, all checks on pointers
556 * previously done by the verifier are invalidated and must be
557 * performed again, if the helper is used in combination with
558 * direct packet access.
559 * Return
560 * 0 on success, or a negative error in case of failure.
561 *
562 * int bpf_l3_csum_replace(struct sk_buff *skb, u32 offset, u64 from, u64 to, u64 size)
563 * Description
564 * Recompute the layer 3 (e.g. IP) checksum for the packet
565 * associated to *skb*. Computation is incremental, so the helper
566 * must know the former value of the header field that was
567 * modified (*from*), the new value of this field (*to*), and the
568 * number of bytes (2 or 4) for this field, stored in *size*.
569 * Alternatively, it is possible to store the difference between
570 * the previous and the new values of the header field in *to*, by
571 * setting *from* and *size* to 0. For both methods, *offset*
572 * indicates the location of the IP checksum within the packet.
573 *
574 * This helper works in combination with **bpf_csum_diff**\ (),
575 * which does not update the checksum in-place, but offers more
576 * flexibility and can handle sizes larger than 2 or 4 for the
577 * checksum to update.
578 *
579 * A call to this helper is susceptible to change the underlaying
580 * packet buffer. Therefore, at load time, all checks on pointers
581 * previously done by the verifier are invalidated and must be
582 * performed again, if the helper is used in combination with
583 * direct packet access.
584 * Return
585 * 0 on success, or a negative error in case of failure.
586 *
587 * int bpf_l4_csum_replace(struct sk_buff *skb, u32 offset, u64 from, u64 to, u64 flags)
588 * Description
589 * Recompute the layer 4 (e.g. TCP, UDP or ICMP) checksum for the
590 * packet associated to *skb*. Computation is incremental, so the
591 * helper must know the former value of the header field that was
592 * modified (*from*), the new value of this field (*to*), and the
593 * number of bytes (2 or 4) for this field, stored on the lowest
594 * four bits of *flags*. Alternatively, it is possible to store
595 * the difference between the previous and the new values of the
596 * header field in *to*, by setting *from* and the four lowest
597 * bits of *flags* to 0. For both methods, *offset* indicates the
598 * location of the IP checksum within the packet. In addition to
599 * the size of the field, *flags* can be added (bitwise OR) actual
600 * flags. With **BPF_F_MARK_MANGLED_0**, a null checksum is left
601 * untouched (unless **BPF_F_MARK_ENFORCE** is added as well), and
602 * for updates resulting in a null checksum the value is set to
603 * **CSUM_MANGLED_0** instead. Flag **BPF_F_PSEUDO_HDR** indicates
604 * the checksum is to be computed against a pseudo-header.
605 *
606 * This helper works in combination with **bpf_csum_diff**\ (),
607 * which does not update the checksum in-place, but offers more
608 * flexibility and can handle sizes larger than 2 or 4 for the
609 * checksum to update.
610 *
611 * A call to this helper is susceptible to change the underlaying
612 * packet buffer. Therefore, at load time, all checks on pointers
613 * previously done by the verifier are invalidated and must be
614 * performed again, if the helper is used in combination with
615 * direct packet access.
616 * Return
617 * 0 on success, or a negative error in case of failure.
618 *
619 * int bpf_tail_call(void *ctx, struct bpf_map *prog_array_map, u32 index)
620 * Description
621 * This special helper is used to trigger a "tail call", or in
622 * other words, to jump into another eBPF program. The same stack
623 * frame is used (but values on stack and in registers for the
624 * caller are not accessible to the callee). This mechanism allows
625 * for program chaining, either for raising the maximum number of
626 * available eBPF instructions, or to execute given programs in
627 * conditional blocks. For security reasons, there is an upper
628 * limit to the number of successive tail calls that can be
629 * performed.
630 *
631 * Upon call of this helper, the program attempts to jump into a
632 * program referenced at index *index* in *prog_array_map*, a
633 * special map of type **BPF_MAP_TYPE_PROG_ARRAY**, and passes
634 * *ctx*, a pointer to the context.
635 *
636 * If the call succeeds, the kernel immediately runs the first
637 * instruction of the new program. This is not a function call,
638 * and it never returns to the previous program. If the call
639 * fails, then the helper has no effect, and the caller continues
640 * to run its subsequent instructions. A call can fail if the
641 * destination program for the jump does not exist (i.e. *index*
642 * is superior to the number of entries in *prog_array_map*), or
643 * if the maximum number of tail calls has been reached for this
644 * chain of programs. This limit is defined in the kernel by the
645 * macro **MAX_TAIL_CALL_CNT** (not accessible to user space),
646 * which is currently set to 32.
647 * Return
648 * 0 on success, or a negative error in case of failure.
649 *
650 * int bpf_clone_redirect(struct sk_buff *skb, u32 ifindex, u64 flags)
651 * Description
652 * Clone and redirect the packet associated to *skb* to another
653 * net device of index *ifindex*. Both ingress and egress
654 * interfaces can be used for redirection. The **BPF_F_INGRESS**
655 * value in *flags* is used to make the distinction (ingress path
656 * is selected if the flag is present, egress path otherwise).
657 * This is the only flag supported for now.
658 *
659 * In comparison with **bpf_redirect**\ () helper,
660 * **bpf_clone_redirect**\ () has the associated cost of
661 * duplicating the packet buffer, but this can be executed out of
662 * the eBPF program. Conversely, **bpf_redirect**\ () is more
663 * efficient, but it is handled through an action code where the
664 * redirection happens only after the eBPF program has returned.
665 *
666 * A call to this helper is susceptible to change the underlaying
667 * packet buffer. Therefore, at load time, all checks on pointers
668 * previously done by the verifier are invalidated and must be
669 * performed again, if the helper is used in combination with
670 * direct packet access.
671 * Return
672 * 0 on success, or a negative error in case of failure.
439 * 673 *
440 * u64 bpf_get_current_pid_tgid(void) 674 * u64 bpf_get_current_pid_tgid(void)
441 * Return: current->tgid << 32 | current->pid 675 * Return
676 * A 64-bit integer containing the current tgid and pid, and
677 * created as such:
678 * *current_task*\ **->tgid << 32 \|**
679 * *current_task*\ **->pid**.
442 * 680 *
443 * u64 bpf_get_current_uid_gid(void) 681 * u64 bpf_get_current_uid_gid(void)
444 * Return: current_gid << 32 | current_uid 682 * Return
445 * 683 * A 64-bit integer containing the current GID and UID, and
446 * int bpf_get_current_comm(char *buf, int size_of_buf) 684 * created as such: *current_gid* **<< 32 \|** *current_uid*.
447 * stores current->comm into buf 685 *
448 * Return: 0 on success or negative error 686 * int bpf_get_current_comm(char *buf, u32 size_of_buf)
449 * 687 * Description
450 * u32 bpf_get_cgroup_classid(skb) 688 * Copy the **comm** attribute of the current task into *buf* of
451 * retrieve a proc's classid 689 * *size_of_buf*. The **comm** attribute contains the name of
452 * @skb: pointer to skb 690 * the executable (excluding the path) for the current task. The
453 * Return: classid if != 0 691 * *size_of_buf* must be strictly positive. On success, the
454 * 692 * helper makes sure that the *buf* is NUL-terminated. On failure,
455 * int bpf_skb_vlan_push(skb, vlan_proto, vlan_tci) 693 * it is filled with zeroes.
456 * Return: 0 on success or negative error 694 * Return
457 * 695 * 0 on success, or a negative error in case of failure.
458 * int bpf_skb_vlan_pop(skb) 696 *
459 * Return: 0 on success or negative error 697 * u32 bpf_get_cgroup_classid(struct sk_buff *skb)
460 * 698 * Description
461 * int bpf_skb_get_tunnel_key(skb, key, size, flags) 699 * Retrieve the classid for the current task, i.e. for the net_cls
462 * int bpf_skb_set_tunnel_key(skb, key, size, flags) 700 * cgroup to which *skb* belongs.
463 * retrieve or populate tunnel metadata 701 *
464 * @skb: pointer to skb 702 * This helper can be used on TC egress path, but not on ingress.
465 * @key: pointer to 'struct bpf_tunnel_key' 703 *
466 * @size: size of 'struct bpf_tunnel_key' 704 * The net_cls cgroup provides an interface to tag network packets
467 * @flags: room for future extensions 705 * based on a user-provided identifier for all traffic coming from
468 * Return: 0 on success or negative error 706 * the tasks belonging to the related cgroup. See also the related
469 * 707 * kernel documentation, available from the Linux sources in file
470 * u64 bpf_perf_event_read(map, flags) 708 * *Documentation/cgroup-v1/net_cls.txt*.
471 * read perf event counter value 709 *
472 * @map: pointer to perf_event_array map 710 * The Linux kernel has two versions for cgroups: there are
473 * @flags: index of event in the map or bitmask flags 711 * cgroups v1 and cgroups v2. Both are available to users, who can
474 * Return: value of perf event counter read or error code 712 * use a mixture of them, but note that the net_cls cgroup is for
475 * 713 * cgroup v1 only. This makes it incompatible with BPF programs
476 * int bpf_redirect(ifindex, flags) 714 * run on cgroups, which is a cgroup-v2-only feature (a socket can
477 * redirect to another netdev 715 * only hold data for one version of cgroups at a time).
478 * @ifindex: ifindex of the net device 716 *
479 * @flags: 717 * This helper is only available is the kernel was compiled with
480 * cls_bpf: 718 * the **CONFIG_CGROUP_NET_CLASSID** configuration option set to
481 * bit 0 - if set, redirect to ingress instead of egress 719 * "**y**" or to "**m**".
482 * other bits - reserved 720 * Return
483 * xdp_bpf: 721 * The classid, or 0 for the default unconfigured classid.
484 * all bits - reserved 722 *
485 * Return: cls_bpf: TC_ACT_REDIRECT on success or TC_ACT_SHOT on error 723 * int bpf_skb_vlan_push(struct sk_buff *skb, __be16 vlan_proto, u16 vlan_tci)
486 * xdp_bfp: XDP_REDIRECT on success or XDP_ABORT on error 724 * Description
487 * int bpf_redirect_map(map, key, flags) 725 * Push a *vlan_tci* (VLAN tag control information) of protocol
488 * redirect to endpoint in map 726 * *vlan_proto* to the packet associated to *skb*, then update
489 * @map: pointer to dev map 727 * the checksum. Note that if *vlan_proto* is different from
490 * @key: index in map to lookup 728 * **ETH_P_8021Q** and **ETH_P_8021AD**, it is considered to
491 * @flags: -- 729 * be **ETH_P_8021Q**.
492 * Return: XDP_REDIRECT on success or XDP_ABORT on error 730 *
493 * 731 * A call to this helper is susceptible to change the underlaying
494 * u32 bpf_get_route_realm(skb) 732 * packet buffer. Therefore, at load time, all checks on pointers
495 * retrieve a dst's tclassid 733 * previously done by the verifier are invalidated and must be
496 * @skb: pointer to skb 734 * performed again, if the helper is used in combination with
497 * Return: realm if != 0 735 * direct packet access.
498 * 736 * Return
499 * int bpf_perf_event_output(ctx, map, flags, data, size) 737 * 0 on success, or a negative error in case of failure.
500 * output perf raw sample 738 *
501 * @ctx: struct pt_regs* 739 * int bpf_skb_vlan_pop(struct sk_buff *skb)
502 * @map: pointer to perf_event_array map 740 * Description
503 * @flags: index of event in the map or bitmask flags 741 * Pop a VLAN header from the packet associated to *skb*.
504 * @data: data on stack to be output as raw data 742 *
505 * @size: size of data 743 * A call to this helper is susceptible to change the underlaying
506 * Return: 0 on success or negative error 744 * packet buffer. Therefore, at load time, all checks on pointers
507 * 745 * previously done by the verifier are invalidated and must be
508 * int bpf_get_stackid(ctx, map, flags) 746 * performed again, if the helper is used in combination with
509 * walk user or kernel stack and return id 747 * direct packet access.
510 * @ctx: struct pt_regs* 748 * Return
511 * @map: pointer to stack_trace map 749 * 0 on success, or a negative error in case of failure.
512 * @flags: bits 0-7 - numer of stack frames to skip 750 *
513 * bit 8 - collect user stack instead of kernel 751 * int bpf_skb_get_tunnel_key(struct sk_buff *skb, struct bpf_tunnel_key *key, u32 size, u64 flags)
514 * bit 9 - compare stacks by hash only 752 * Description
515 * bit 10 - if two different stacks hash into the same stackid 753 * Get tunnel metadata. This helper takes a pointer *key* to an
516 * discard old 754 * empty **struct bpf_tunnel_key** of **size**, that will be
517 * other bits - reserved 755 * filled with tunnel metadata for the packet associated to *skb*.
518 * Return: >= 0 stackid on success or negative error 756 * The *flags* can be set to **BPF_F_TUNINFO_IPV6**, which
519 * 757 * indicates that the tunnel is based on IPv6 protocol instead of
520 * s64 bpf_csum_diff(from, from_size, to, to_size, seed) 758 * IPv4.
521 * calculate csum diff 759 *
522 * @from: raw from buffer 760 * The **struct bpf_tunnel_key** is an object that generalizes the
523 * @from_size: length of from buffer 761 * principal parameters used by various tunneling protocols into a
524 * @to: raw to buffer 762 * single struct. This way, it can be used to easily make a
525 * @to_size: length of to buffer 763 * decision based on the contents of the encapsulation header,
526 * @seed: optional seed 764 * "summarized" in this struct. In particular, it holds the IP
527 * Return: csum result or negative error code 765 * address of the remote end (IPv4 or IPv6, depending on the case)
528 * 766 * in *key*\ **->remote_ipv4** or *key*\ **->remote_ipv6**. Also,
529 * int bpf_skb_get_tunnel_opt(skb, opt, size) 767 * this struct exposes the *key*\ **->tunnel_id**, which is
530 * retrieve tunnel options metadata 768 * generally mapped to a VNI (Virtual Network Identifier), making
531 * @skb: pointer to skb 769 * it programmable together with the **bpf_skb_set_tunnel_key**\
532 * @opt: pointer to raw tunnel option data 770 * () helper.
533 * @size: size of @opt 771 *
534 * Return: option size 772 * Let's imagine that the following code is part of a program
535 * 773 * attached to the TC ingress interface, on one end of a GRE
536 * int bpf_skb_set_tunnel_opt(skb, opt, size) 774 * tunnel, and is supposed to filter out all messages coming from
537 * populate tunnel options metadata 775 * remote ends with IPv4 address other than 10.0.0.1:
538 * @skb: pointer to skb 776 *
539 * @opt: pointer to raw tunnel option data 777 * ::
540 * @size: size of @opt 778 *
541 * Return: 0 on success or negative error 779 * int ret;
542 * 780 * struct bpf_tunnel_key key = {};
543 * int bpf_skb_change_proto(skb, proto, flags) 781 *
544 * Change protocol of the skb. Currently supported is v4 -> v6, 782 * ret = bpf_skb_get_tunnel_key(skb, &key, sizeof(key), 0);
545 * v6 -> v4 transitions. The helper will also resize the skb. eBPF 783 * if (ret < 0)
546 * program is expected to fill the new headers via skb_store_bytes 784 * return TC_ACT_SHOT; // drop packet
547 * and lX_csum_replace. 785 *
548 * @skb: pointer to skb 786 * if (key.remote_ipv4 != 0x0a000001)
549 * @proto: new skb->protocol type 787 * return TC_ACT_SHOT; // drop packet
550 * @flags: reserved 788 *
551 * Return: 0 on success or negative error 789 * return TC_ACT_OK; // accept packet
552 * 790 *
553 * int bpf_skb_change_type(skb, type) 791 * This interface can also be used with all encapsulation devices
554 * Change packet type of skb. 792 * that can operate in "collect metadata" mode: instead of having
555 * @skb: pointer to skb 793 * one network device per specific configuration, the "collect
556 * @type: new skb->pkt_type type 794 * metadata" mode only requires a single device where the
557 * Return: 0 on success or negative error 795 * configuration can be extracted from this helper.
558 * 796 *
559 * int bpf_skb_under_cgroup(skb, map, index) 797 * This can be used together with various tunnels such as VXLan,
560 * Check cgroup2 membership of skb 798 * Geneve, GRE or IP in IP (IPIP).
561 * @skb: pointer to skb 799 * Return
562 * @map: pointer to bpf_map in BPF_MAP_TYPE_CGROUP_ARRAY type 800 * 0 on success, or a negative error in case of failure.
563 * @index: index of the cgroup in the bpf_map 801 *
564 * Return: 802 * int bpf_skb_set_tunnel_key(struct sk_buff *skb, struct bpf_tunnel_key *key, u32 size, u64 flags)
565 * == 0 skb failed the cgroup2 descendant test 803 * Description
566 * == 1 skb succeeded the cgroup2 descendant test 804 * Populate tunnel metadata for packet associated to *skb.* The
567 * < 0 error 805 * tunnel metadata is set to the contents of *key*, of *size*. The
568 * 806 * *flags* can be set to a combination of the following values:
569 * u32 bpf_get_hash_recalc(skb) 807 *
570 * Retrieve and possibly recalculate skb->hash. 808 * **BPF_F_TUNINFO_IPV6**
571 * @skb: pointer to skb 809 * Indicate that the tunnel is based on IPv6 protocol
572 * Return: hash 810 * instead of IPv4.
811 * **BPF_F_ZERO_CSUM_TX**
812 * For IPv4 packets, add a flag to tunnel metadata
813 * indicating that checksum computation should be skipped
814 * and checksum set to zeroes.
815 * **BPF_F_DONT_FRAGMENT**
816 * Add a flag to tunnel metadata indicating that the
817 * packet should not be fragmented.
818 * **BPF_F_SEQ_NUMBER**
819 * Add a flag to tunnel metadata indicating that a
820 * sequence number should be added to tunnel header before
821 * sending the packet. This flag was added for GRE
822 * encapsulation, but might be used with other protocols
823 * as well in the future.
824 *
825 * Here is a typical usage on the transmit path:
826 *
827 * ::
828 *
829 * struct bpf_tunnel_key key;
830 * populate key ...
831 * bpf_skb_set_tunnel_key(skb, &key, sizeof(key), 0);
832 * bpf_clone_redirect(skb, vxlan_dev_ifindex, 0);
833 *
834 * See also the description of the **bpf_skb_get_tunnel_key**\ ()
835 * helper for additional information.
836 * Return
837 * 0 on success, or a negative error in case of failure.
838 *
839 * u64 bpf_perf_event_read(struct bpf_map *map, u64 flags)
840 * Description
841 * Read the value of a perf event counter. This helper relies on a
842 * *map* of type **BPF_MAP_TYPE_PERF_EVENT_ARRAY**. The nature of
843 * the perf event counter is selected when *map* is updated with
844 * perf event file descriptors. The *map* is an array whose size
845 * is the number of available CPUs, and each cell contains a value
846 * relative to one CPU. The value to retrieve is indicated by
847 * *flags*, that contains the index of the CPU to look up, masked
848 * with **BPF_F_INDEX_MASK**. Alternatively, *flags* can be set to
849 * **BPF_F_CURRENT_CPU** to indicate that the value for the
850 * current CPU should be retrieved.
851 *
852 * Note that before Linux 4.13, only hardware perf event can be
853 * retrieved.
854 *
855 * Also, be aware that the newer helper
856 * **bpf_perf_event_read_value**\ () is recommended over
857 * **bpf_perf_event_read**\ () in general. The latter has some ABI
858 * quirks where error and counter value are used as a return code
859 * (which is wrong to do since ranges may overlap). This issue is
860 * fixed with **bpf_perf_event_read_value**\ (), which at the same
861 * time provides more features over the **bpf_perf_event_read**\
862 * () interface. Please refer to the description of
863 * **bpf_perf_event_read_value**\ () for details.
864 * Return
865 * The value of the perf event counter read from the map, or a
866 * negative error code in case of failure.
867 *
868 * int bpf_redirect(u32 ifindex, u64 flags)
869 * Description
870 * Redirect the packet to another net device of index *ifindex*.
871 * This helper is somewhat similar to **bpf_clone_redirect**\
872 * (), except that the packet is not cloned, which provides
873 * increased performance.
874 *
875 * Except for XDP, both ingress and egress interfaces can be used
876 * for redirection. The **BPF_F_INGRESS** value in *flags* is used
877 * to make the distinction (ingress path is selected if the flag
878 * is present, egress path otherwise). Currently, XDP only
879 * supports redirection to the egress interface, and accepts no
880 * flag at all.
881 *
882 * The same effect can be attained with the more generic
883 * **bpf_redirect_map**\ (), which requires specific maps to be
884 * used but offers better performance.
885 * Return
886 * For XDP, the helper returns **XDP_REDIRECT** on success or
887 * **XDP_ABORTED** on error. For other program types, the values
888 * are **TC_ACT_REDIRECT** on success or **TC_ACT_SHOT** on
889 * error.
890 *
891 * u32 bpf_get_route_realm(struct sk_buff *skb)
892 * Description
893 * Retrieve the realm or the route, that is to say the
894 * **tclassid** field of the destination for the *skb*. The
895 * indentifier retrieved is a user-provided tag, similar to the
896 * one used with the net_cls cgroup (see description for
897 * **bpf_get_cgroup_classid**\ () helper), but here this tag is
898 * held by a route (a destination entry), not by a task.
899 *
900 * Retrieving this identifier works with the clsact TC egress hook
901 * (see also **tc-bpf(8)**), or alternatively on conventional
902 * classful egress qdiscs, but not on TC ingress path. In case of
903 * clsact TC egress hook, this has the advantage that, internally,
904 * the destination entry has not been dropped yet in the transmit
905 * path. Therefore, the destination entry does not need to be
906 * artificially held via **netif_keep_dst**\ () for a classful
907 * qdisc until the *skb* is freed.
908 *
909 * This helper is available only if the kernel was compiled with
910 * **CONFIG_IP_ROUTE_CLASSID** configuration option.
911 * Return
912 * The realm of the route for the packet associated to *skb*, or 0
913 * if none was found.
914 *
915 * int bpf_perf_event_output(struct pt_reg *ctx, struct bpf_map *map, u64 flags, void *data, u64 size)
916 * Description
917 * Write raw *data* blob into a special BPF perf event held by
918 * *map* of type **BPF_MAP_TYPE_PERF_EVENT_ARRAY**. This perf
919 * event must have the following attributes: **PERF_SAMPLE_RAW**
920 * as **sample_type**, **PERF_TYPE_SOFTWARE** as **type**, and
921 * **PERF_COUNT_SW_BPF_OUTPUT** as **config**.
922 *
923 * The *flags* are used to indicate the index in *map* for which
924 * the value must be put, masked with **BPF_F_INDEX_MASK**.
925 * Alternatively, *flags* can be set to **BPF_F_CURRENT_CPU**
926 * to indicate that the index of the current CPU core should be
927 * used.
928 *
929 * The value to write, of *size*, is passed through eBPF stack and
930 * pointed by *data*.
931 *
932 * The context of the program *ctx* needs also be passed to the
933 * helper.
934 *
935 * On user space, a program willing to read the values needs to
936 * call **perf_event_open**\ () on the perf event (either for
937 * one or for all CPUs) and to store the file descriptor into the
938 * *map*. This must be done before the eBPF program can send data
939 * into it. An example is available in file
940 * *samples/bpf/trace_output_user.c* in the Linux kernel source
941 * tree (the eBPF program counterpart is in
942 * *samples/bpf/trace_output_kern.c*).
943 *
944 * **bpf_perf_event_output**\ () achieves better performance
945 * than **bpf_trace_printk**\ () for sharing data with user
946 * space, and is much better suitable for streaming data from eBPF
947 * programs.
948 *
949 * Note that this helper is not restricted to tracing use cases
950 * and can be used with programs attached to TC or XDP as well,
951 * where it allows for passing data to user space listeners. Data
952 * can be:
953 *
954 * * Only custom structs,
955 * * Only the packet payload, or
956 * * A combination of both.
957 * Return
958 * 0 on success, or a negative error in case of failure.
959 *
960 * int bpf_skb_load_bytes(const struct sk_buff *skb, u32 offset, void *to, u32 len)
961 * Description
962 * This helper was provided as an easy way to load data from a
963 * packet. It can be used to load *len* bytes from *offset* from
964 * the packet associated to *skb*, into the buffer pointed by
965 * *to*.
966 *
967 * Since Linux 4.7, usage of this helper has mostly been replaced
968 * by "direct packet access", enabling packet data to be
969 * manipulated with *skb*\ **->data** and *skb*\ **->data_end**
970 * pointing respectively to the first byte of packet data and to
971 * the byte after the last byte of packet data. However, it
972 * remains useful if one wishes to read large quantities of data
973 * at once from a packet into the eBPF stack.
974 * Return
975 * 0 on success, or a negative error in case of failure.
976 *
977 * int bpf_get_stackid(struct pt_reg *ctx, struct bpf_map *map, u64 flags)
978 * Description
979 * Walk a user or a kernel stack and return its id. To achieve
980 * this, the helper needs *ctx*, which is a pointer to the context
981 * on which the tracing program is executed, and a pointer to a
982 * *map* of type **BPF_MAP_TYPE_STACK_TRACE**.
983 *
984 * The last argument, *flags*, holds the number of stack frames to
985 * skip (from 0 to 255), masked with
986 * **BPF_F_SKIP_FIELD_MASK**. The next bits can be used to set
987 * a combination of the following flags:
988 *
989 * **BPF_F_USER_STACK**
990 * Collect a user space stack instead of a kernel stack.
991 * **BPF_F_FAST_STACK_CMP**
992 * Compare stacks by hash only.
993 * **BPF_F_REUSE_STACKID**
994 * If two different stacks hash into the same *stackid*,
995 * discard the old one.
996 *
997 * The stack id retrieved is a 32 bit long integer handle which
998 * can be further combined with other data (including other stack
999 * ids) and used as a key into maps. This can be useful for
1000 * generating a variety of graphs (such as flame graphs or off-cpu
1001 * graphs).
1002 *
1003 * For walking a stack, this helper is an improvement over
1004 * **bpf_probe_read**\ (), which can be used with unrolled loops
1005 * but is not efficient and consumes a lot of eBPF instructions.
1006 * Instead, **bpf_get_stackid**\ () can collect up to
1007 * **PERF_MAX_STACK_DEPTH** both kernel and user frames. Note that
1008 * this limit can be controlled with the **sysctl** program, and
1009 * that it should be manually increased in order to profile long
1010 * user stacks (such as stacks for Java programs). To do so, use:
1011 *
1012 * ::
1013 *
1014 * # sysctl kernel.perf_event_max_stack=<new value>
1015 * Return
1016 * The positive or null stack id on success, or a negative error
1017 * in case of failure.
1018 *
1019 * s64 bpf_csum_diff(__be32 *from, u32 from_size, __be32 *to, u32 to_size, __wsum seed)
1020 * Description
1021 * Compute a checksum difference, from the raw buffer pointed by
1022 * *from*, of length *from_size* (that must be a multiple of 4),
1023 * towards the raw buffer pointed by *to*, of size *to_size*
1024 * (same remark). An optional *seed* can be added to the value
1025 * (this can be cascaded, the seed may come from a previous call
1026 * to the helper).
1027 *
1028 * This is flexible enough to be used in several ways:
1029 *
1030 * * With *from_size* == 0, *to_size* > 0 and *seed* set to
1031 * checksum, it can be used when pushing new data.
1032 * * With *from_size* > 0, *to_size* == 0 and *seed* set to
1033 * checksum, it can be used when removing data from a packet.
1034 * * With *from_size* > 0, *to_size* > 0 and *seed* set to 0, it
1035 * can be used to compute a diff. Note that *from_size* and
1036 * *to_size* do not need to be equal.
1037 *
1038 * This helper can be used in combination with
1039 * **bpf_l3_csum_replace**\ () and **bpf_l4_csum_replace**\ (), to
1040 * which one can feed in the difference computed with
1041 * **bpf_csum_diff**\ ().
1042 * Return
1043 * The checksum result, or a negative error code in case of
1044 * failure.
1045 *
1046 * int bpf_skb_get_tunnel_opt(struct sk_buff *skb, u8 *opt, u32 size)
1047 * Description
1048 * Retrieve tunnel options metadata for the packet associated to
1049 * *skb*, and store the raw tunnel option data to the buffer *opt*
1050 * of *size*.
1051 *
1052 * This helper can be used with encapsulation devices that can
1053 * operate in "collect metadata" mode (please refer to the related
1054 * note in the description of **bpf_skb_get_tunnel_key**\ () for
1055 * more details). A particular example where this can be used is
1056 * in combination with the Geneve encapsulation protocol, where it
1057 * allows for pushing (with **bpf_skb_get_tunnel_opt**\ () helper)
1058 * and retrieving arbitrary TLVs (Type-Length-Value headers) from
1059 * the eBPF program. This allows for full customization of these
1060 * headers.
1061 * Return
1062 * The size of the option data retrieved.
1063 *
1064 * int bpf_skb_set_tunnel_opt(struct sk_buff *skb, u8 *opt, u32 size)
1065 * Description
1066 * Set tunnel options metadata for the packet associated to *skb*
1067 * to the option data contained in the raw buffer *opt* of *size*.
1068 *
1069 * See also the description of the **bpf_skb_get_tunnel_opt**\ ()
1070 * helper for additional information.
1071 * Return
1072 * 0 on success, or a negative error in case of failure.
1073 *
1074 * int bpf_skb_change_proto(struct sk_buff *skb, __be16 proto, u64 flags)
1075 * Description
1076 * Change the protocol of the *skb* to *proto*. Currently
1077 * supported are transition from IPv4 to IPv6, and from IPv6 to
1078 * IPv4. The helper takes care of the groundwork for the
1079 * transition, including resizing the socket buffer. The eBPF
1080 * program is expected to fill the new headers, if any, via
1081 * **skb_store_bytes**\ () and to recompute the checksums with
1082 * **bpf_l3_csum_replace**\ () and **bpf_l4_csum_replace**\
1083 * (). The main case for this helper is to perform NAT64
1084 * operations out of an eBPF program.
1085 *
1086 * Internally, the GSO type is marked as dodgy so that headers are
1087 * checked and segments are recalculated by the GSO/GRO engine.
1088 * The size for GSO target is adapted as well.
1089 *
1090 * All values for *flags* are reserved for future usage, and must
1091 * be left at zero.
1092 *
1093 * A call to this helper is susceptible to change the underlaying
1094 * packet buffer. Therefore, at load time, all checks on pointers
1095 * previously done by the verifier are invalidated and must be
1096 * performed again, if the helper is used in combination with
1097 * direct packet access.
1098 * Return
1099 * 0 on success, or a negative error in case of failure.
1100 *
1101 * int bpf_skb_change_type(struct sk_buff *skb, u32 type)
1102 * Description
1103 * Change the packet type for the packet associated to *skb*. This
1104 * comes down to setting *skb*\ **->pkt_type** to *type*, except
1105 * the eBPF program does not have a write access to *skb*\
1106 * **->pkt_type** beside this helper. Using a helper here allows
1107 * for graceful handling of errors.
1108 *
1109 * The major use case is to change incoming *skb*s to
1110 * **PACKET_HOST** in a programmatic way instead of having to
1111 * recirculate via **redirect**\ (..., **BPF_F_INGRESS**), for
1112 * example.
1113 *
1114 * Note that *type* only allows certain values. At this time, they
1115 * are:
1116 *
1117 * **PACKET_HOST**
1118 * Packet is for us.
1119 * **PACKET_BROADCAST**
1120 * Send packet to all.
1121 * **PACKET_MULTICAST**
1122 * Send packet to group.
1123 * **PACKET_OTHERHOST**
1124 * Send packet to someone else.
1125 * Return
1126 * 0 on success, or a negative error in case of failure.
1127 *
1128 * int bpf_skb_under_cgroup(struct sk_buff *skb, struct bpf_map *map, u32 index)
1129 * Description
1130 * Check whether *skb* is a descendant of the cgroup2 held by
1131 * *map* of type **BPF_MAP_TYPE_CGROUP_ARRAY**, at *index*.
1132 * Return
1133 * The return value depends on the result of the test, and can be:
1134 *
1135 * * 0, if the *skb* failed the cgroup2 descendant test.
1136 * * 1, if the *skb* succeeded the cgroup2 descendant test.
1137 * * A negative error code, if an error occurred.
1138 *
1139 * u32 bpf_get_hash_recalc(struct sk_buff *skb)
1140 * Description
1141 * Retrieve the hash of the packet, *skb*\ **->hash**. If it is
1142 * not set, in particular if the hash was cleared due to mangling,
1143 * recompute this hash. Later accesses to the hash can be done
1144 * directly with *skb*\ **->hash**.
1145 *
1146 * Calling **bpf_set_hash_invalid**\ (), changing a packet
1147 * prototype with **bpf_skb_change_proto**\ (), or calling
1148 * **bpf_skb_store_bytes**\ () with the
1149 * **BPF_F_INVALIDATE_HASH** are actions susceptible to clear
1150 * the hash and to trigger a new computation for the next call to
1151 * **bpf_get_hash_recalc**\ ().
1152 * Return
1153 * The 32-bit hash.
573 * 1154 *
574 * u64 bpf_get_current_task(void) 1155 * u64 bpf_get_current_task(void)
575 * Returns current task_struct 1156 * Return
576 * Return: current 1157 * A pointer to the current task struct.
577 * 1158 *
578 * int bpf_probe_write_user(void *dst, void *src, int len) 1159 * int bpf_probe_write_user(void *dst, const void *src, u32 len)
579 * safely attempt to write to a location 1160 * Description
580 * @dst: destination address in userspace 1161 * Attempt in a safe way to write *len* bytes from the buffer
581 * @src: source address on stack 1162 * *src* to *dst* in memory. It only works for threads that are in
582 * @len: number of bytes to copy 1163 * user context, and *dst* must be a valid user space address.
583 * Return: 0 on success or negative error 1164 *
584 * 1165 * This helper should not be used to implement any kind of
585 * int bpf_current_task_under_cgroup(map, index) 1166 * security mechanism because of TOC-TOU attacks, but rather to
586 * Check cgroup2 membership of current task 1167 * debug, divert, and manipulate execution of semi-cooperative
587 * @map: pointer to bpf_map in BPF_MAP_TYPE_CGROUP_ARRAY type 1168 * processes.
588 * @index: index of the cgroup in the bpf_map 1169 *
589 * Return: 1170 * Keep in mind that this feature is meant for experiments, and it
590 * == 0 current failed the cgroup2 descendant test 1171 * has a risk of crashing the system and running programs.
591 * == 1 current succeeded the cgroup2 descendant test 1172 * Therefore, when an eBPF program using this helper is attached,
592 * < 0 error 1173 * a warning including PID and process name is printed to kernel
593 * 1174 * logs.
594 * int bpf_skb_change_tail(skb, len, flags) 1175 * Return
595 * The helper will resize the skb to the given new size, to be used f.e. 1176 * 0 on success, or a negative error in case of failure.
596 * with control messages. 1177 *
597 * @skb: pointer to skb 1178 * int bpf_current_task_under_cgroup(struct bpf_map *map, u32 index)
598 * @len: new skb length 1179 * Description
599 * @flags: reserved 1180 * Check whether the probe is being run is the context of a given
600 * Return: 0 on success or negative error 1181 * subset of the cgroup2 hierarchy. The cgroup2 to test is held by
601 * 1182 * *map* of type **BPF_MAP_TYPE_CGROUP_ARRAY**, at *index*.
602 * int bpf_skb_pull_data(skb, len) 1183 * Return
603 * The helper will pull in non-linear data in case the skb is non-linear 1184 * The return value depends on the result of the test, and can be:
604 * and not all of len are part of the linear section. Only needed for 1185 *
605 * read/write with direct packet access. 1186 * * 0, if the *skb* task belongs to the cgroup2.
606 * @skb: pointer to skb 1187 * * 1, if the *skb* task does not belong to the cgroup2.
607 * @len: len to make read/writeable 1188 * * A negative error code, if an error occurred.
608 * Return: 0 on success or negative error 1189 *
609 * 1190 * int bpf_skb_change_tail(struct sk_buff *skb, u32 len, u64 flags)
610 * s64 bpf_csum_update(skb, csum) 1191 * Description
611 * Adds csum into skb->csum in case of CHECKSUM_COMPLETE. 1192 * Resize (trim or grow) the packet associated to *skb* to the
612 * @skb: pointer to skb 1193 * new *len*. The *flags* are reserved for future usage, and must
613 * @csum: csum to add 1194 * be left at zero.
614 * Return: csum on success or negative error 1195 *
615 * 1196 * The basic idea is that the helper performs the needed work to
616 * void bpf_set_hash_invalid(skb) 1197 * change the size of the packet, then the eBPF program rewrites
617 * Invalidate current skb->hash. 1198 * the rest via helpers like **bpf_skb_store_bytes**\ (),
618 * @skb: pointer to skb 1199 * **bpf_l3_csum_replace**\ (), **bpf_l3_csum_replace**\ ()
619 * 1200 * and others. This helper is a slow path utility intended for
620 * int bpf_get_numa_node_id() 1201 * replies with control messages. And because it is targeted for
621 * Return: Id of current NUMA node. 1202 * slow path, the helper itself can afford to be slow: it
622 * 1203 * implicitly linearizes, unclones and drops offloads from the
623 * int bpf_skb_change_head() 1204 * *skb*.
624 * Grows headroom of skb and adjusts MAC header offset accordingly. 1205 *
625 * Will extends/reallocae as required automatically. 1206 * A call to this helper is susceptible to change the underlaying
626 * May change skb data pointer and will thus invalidate any check 1207 * packet buffer. Therefore, at load time, all checks on pointers
627 * performed for direct packet access. 1208 * previously done by the verifier are invalidated and must be
628 * @skb: pointer to skb 1209 * performed again, if the helper is used in combination with
629 * @len: length of header to be pushed in front 1210 * direct packet access.
630 * @flags: Flags (unused for now) 1211 * Return
631 * Return: 0 on success or negative error 1212 * 0 on success, or a negative error in case of failure.
632 * 1213 *
633 * int bpf_xdp_adjust_head(xdp_md, delta) 1214 * int bpf_skb_pull_data(struct sk_buff *skb, u32 len)
634 * Adjust the xdp_md.data by delta 1215 * Description
635 * @xdp_md: pointer to xdp_md 1216 * Pull in non-linear data in case the *skb* is non-linear and not
636 * @delta: An positive/negative integer to be added to xdp_md.data 1217 * all of *len* are part of the linear section. Make *len* bytes
637 * Return: 0 on success or negative on error 1218 * from *skb* readable and writable. If a zero value is passed for
1219 * *len*, then the whole length of the *skb* is pulled.
1220 *
1221 * This helper is only needed for reading and writing with direct
1222 * packet access.
1223 *
1224 * For direct packet access, testing that offsets to access
1225 * are within packet boundaries (test on *skb*\ **->data_end**) is
1226 * susceptible to fail if offsets are invalid, or if the requested
1227 * data is in non-linear parts of the *skb*. On failure the
1228 * program can just bail out, or in the case of a non-linear
1229 * buffer, use a helper to make the data available. The
1230 * **bpf_skb_load_bytes**\ () helper is a first solution to access
1231 * the data. Another one consists in using **bpf_skb_pull_data**
1232 * to pull in once the non-linear parts, then retesting and
1233 * eventually access the data.
1234 *
1235 * At the same time, this also makes sure the *skb* is uncloned,
1236 * which is a necessary condition for direct write. As this needs
1237 * to be an invariant for the write part only, the verifier
1238 * detects writes and adds a prologue that is calling
1239 * **bpf_skb_pull_data()** to effectively unclone the *skb* from
1240 * the very beginning in case it is indeed cloned.
1241 *
1242 * A call to this helper is susceptible to change the underlaying
1243 * packet buffer. Therefore, at load time, all checks on pointers
1244 * previously done by the verifier are invalidated and must be
1245 * performed again, if the helper is used in combination with
1246 * direct packet access.
1247 * Return
1248 * 0 on success, or a negative error in case of failure.
1249 *
1250 * s64 bpf_csum_update(struct sk_buff *skb, __wsum csum)
1251 * Description
1252 * Add the checksum *csum* into *skb*\ **->csum** in case the
1253 * driver has supplied a checksum for the entire packet into that
1254 * field. Return an error otherwise. This helper is intended to be
1255 * used in combination with **bpf_csum_diff**\ (), in particular
1256 * when the checksum needs to be updated after data has been
1257 * written into the packet through direct packet access.
1258 * Return
1259 * The checksum on success, or a negative error code in case of
1260 * failure.
1261 *
1262 * void bpf_set_hash_invalid(struct sk_buff *skb)
1263 * Description
1264 * Invalidate the current *skb*\ **->hash**. It can be used after
1265 * mangling on headers through direct packet access, in order to
1266 * indicate that the hash is outdated and to trigger a
1267 * recalculation the next time the kernel tries to access this
1268 * hash or when the **bpf_get_hash_recalc**\ () helper is called.
1269 *
1270 * int bpf_get_numa_node_id(void)
1271 * Description
1272 * Return the id of the current NUMA node. The primary use case
1273 * for this helper is the selection of sockets for the local NUMA
1274 * node, when the program is attached to sockets using the
1275 * **SO_ATTACH_REUSEPORT_EBPF** option (see also **socket(7)**),
1276 * but the helper is also available to other eBPF program types,
1277 * similarly to **bpf_get_smp_processor_id**\ ().
1278 * Return
1279 * The id of current NUMA node.
1280 *
1281 * int bpf_skb_change_head(struct sk_buff *skb, u32 len, u64 flags)
1282 * Description
1283 * Grows headroom of packet associated to *skb* and adjusts the
1284 * offset of the MAC header accordingly, adding *len* bytes of
1285 * space. It automatically extends and reallocates memory as
1286 * required.
1287 *
1288 * This helper can be used on a layer 3 *skb* to push a MAC header
1289 * for redirection into a layer 2 device.
1290 *
1291 * All values for *flags* are reserved for future usage, and must
1292 * be left at zero.
1293 *
1294 * A call to this helper is susceptible to change the underlaying
1295 * packet buffer. Therefore, at load time, all checks on pointers
1296 * previously done by the verifier are invalidated and must be
1297 * performed again, if the helper is used in combination with
1298 * direct packet access.
1299 * Return
1300 * 0 on success, or a negative error in case of failure.
1301 *
1302 * int bpf_xdp_adjust_head(struct xdp_buff *xdp_md, int delta)
1303 * Description
1304 * Adjust (move) *xdp_md*\ **->data** by *delta* bytes. Note that
1305 * it is possible to use a negative value for *delta*. This helper
1306 * can be used to prepare the packet for pushing or popping
1307 * headers.
1308 *
1309 * A call to this helper is susceptible to change the underlaying
1310 * packet buffer. Therefore, at load time, all checks on pointers
1311 * previously done by the verifier are invalidated and must be
1312 * performed again, if the helper is used in combination with
1313 * direct packet access.
1314 * Return
1315 * 0 on success, or a negative error in case of failure.
638 * 1316 *
639 * int bpf_probe_read_str(void *dst, int size, const void *unsafe_ptr) 1317 * int bpf_probe_read_str(void *dst, int size, const void *unsafe_ptr)
640 * Copy a NUL terminated string from unsafe address. In case the string 1318 * Description
641 * length is smaller than size, the target is not padded with further NUL 1319 * Copy a NUL terminated string from an unsafe address
642 * bytes. In case the string length is larger than size, just count-1 1320 * *unsafe_ptr* to *dst*. The *size* should include the
643 * bytes are copied and the last byte is set to NUL. 1321 * terminating NUL byte. In case the string length is smaller than
644 * @dst: destination address 1322 * *size*, the target is not padded with further NUL bytes. If the
645 * @size: maximum number of bytes to copy, including the trailing NUL 1323 * string length is larger than *size*, just *size*-1 bytes are
646 * @unsafe_ptr: unsafe address 1324 * copied and the last byte is set to NUL.
647 * Return: 1325 *
648 * > 0 length of the string including the trailing NUL on success 1326 * On success, the length of the copied string is returned. This
649 * < 0 error 1327 * makes this helper useful in tracing programs for reading
650 * 1328 * strings, and more importantly to get its length at runtime. See
651 * u64 bpf_get_socket_cookie(skb) 1329 * the following snippet:
652 * Get the cookie for the socket stored inside sk_buff. 1330 *
653 * @skb: pointer to skb 1331 * ::
654 * Return: 8 Bytes non-decreasing number on success or 0 if the socket 1332 *
655 * field is missing inside sk_buff 1333 * SEC("kprobe/sys_open")
656 * 1334 * void bpf_sys_open(struct pt_regs *ctx)
657 * u32 bpf_get_socket_uid(skb) 1335 * {
658 * Get the owner uid of the socket stored inside sk_buff. 1336 * char buf[PATHLEN]; // PATHLEN is defined to 256
659 * @skb: pointer to skb 1337 * int res = bpf_probe_read_str(buf, sizeof(buf),
660 * Return: uid of the socket owner on success or overflowuid if failed. 1338 * ctx->di);
661 * 1339 *
662 * u32 bpf_set_hash(skb, hash) 1340 * // Consume buf, for example push it to
663 * Set full skb->hash. 1341 * // userspace via bpf_perf_event_output(); we
664 * @skb: pointer to skb 1342 * // can use res (the string length) as event
665 * @hash: hash to set 1343 * // size, after checking its boundaries.
666 * 1344 * }
667 * int bpf_setsockopt(bpf_socket, level, optname, optval, optlen) 1345 *
668 * Calls setsockopt. Not all opts are available, only those with 1346 * In comparison, using **bpf_probe_read()** helper here instead
669 * integer optvals plus TCP_CONGESTION. 1347 * to read the string would require to estimate the length at
670 * Supported levels: SOL_SOCKET and IPPROTO_TCP 1348 * compile time, and would often result in copying more memory
671 * @bpf_socket: pointer to bpf_socket 1349 * than necessary.
672 * @level: SOL_SOCKET or IPPROTO_TCP 1350 *
673 * @optname: option name 1351 * Another useful use case is when parsing individual process
674 * @optval: pointer to option value 1352 * arguments or individual environment variables navigating
675 * @optlen: length of optval in bytes 1353 * *current*\ **->mm->arg_start** and *current*\
676 * Return: 0 or negative error 1354 * **->mm->env_start**: using this helper and the return value,
677 * 1355 * one can quickly iterate at the right offset of the memory area.
678 * int bpf_getsockopt(bpf_socket, level, optname, optval, optlen) 1356 * Return
679 * Calls getsockopt. Not all opts are available. 1357 * On success, the strictly positive length of the string,
680 * Supported levels: IPPROTO_TCP 1358 * including the trailing NUL character. On error, a negative
681 * @bpf_socket: pointer to bpf_socket 1359 * value.
682 * @level: IPPROTO_TCP 1360 *
683 * @optname: option name 1361 * u64 bpf_get_socket_cookie(struct sk_buff *skb)
684 * @optval: pointer to option value 1362 * Description
685 * @optlen: length of optval in bytes 1363 * If the **struct sk_buff** pointed by *skb* has a known socket,
686 * Return: 0 or negative error 1364 * retrieve the cookie (generated by the kernel) of this socket.
687 * 1365 * If no cookie has been set yet, generate a new cookie. Once
688 * int bpf_sock_ops_cb_flags_set(bpf_sock_ops, flags) 1366 * generated, the socket cookie remains stable for the life of the
689 * Set callback flags for sock_ops 1367 * socket. This helper can be useful for monitoring per socket
690 * @bpf_sock_ops: pointer to bpf_sock_ops_kern struct 1368 * networking traffic statistics as it provides a unique socket
691 * @flags: flags value 1369 * identifier per namespace.
692 * Return: 0 for no error 1370 * Return
693 * -EINVAL if there is no full tcp socket 1371 * A 8-byte long non-decreasing number on success, or 0 if the
694 * bits in flags that are not supported by current kernel 1372 * socket field is missing inside *skb*.
695 * 1373 *
696 * int bpf_skb_adjust_room(skb, len_diff, mode, flags) 1374 * u32 bpf_get_socket_uid(struct sk_buff *skb)
697 * Grow or shrink room in sk_buff. 1375 * Return
698 * @skb: pointer to skb 1376 * The owner UID of the socket associated to *skb*. If the socket
699 * @len_diff: (signed) amount of room to grow/shrink 1377 * is **NULL**, or if it is not a full socket (i.e. if it is a
700 * @mode: operation mode (enum bpf_adj_room_mode) 1378 * time-wait or a request socket instead), **overflowuid** value
701 * @flags: reserved for future use 1379 * is returned (note that **overflowuid** might also be the actual
702 * Return: 0 on success or negative error code 1380 * UID value for the socket).
703 * 1381 *
704 * int bpf_sk_redirect_map(map, key, flags) 1382 * u32 bpf_set_hash(struct sk_buff *skb, u32 hash)
705 * Redirect skb to a sock in map using key as a lookup key for the 1383 * Description
706 * sock in map. 1384 * Set the full hash for *skb* (set the field *skb*\ **->hash**)
707 * @map: pointer to sockmap 1385 * to value *hash*.
708 * @key: key to lookup sock in map 1386 * Return
709 * @flags: reserved for future use 1387 * 0
710 * Return: SK_PASS 1388 *
711 * 1389 * int bpf_setsockopt(struct bpf_sock_ops *bpf_socket, int level, int optname, char *optval, int optlen)
712 * int bpf_sock_map_update(skops, map, key, flags) 1390 * Description
713 * @skops: pointer to bpf_sock_ops 1391 * Emulate a call to **setsockopt()** on the socket associated to
714 * @map: pointer to sockmap to update 1392 * *bpf_socket*, which must be a full socket. The *level* at
715 * @key: key to insert/update sock in map 1393 * which the option resides and the name *optname* of the option
716 * @flags: same flags as map update elem 1394 * must be specified, see **setsockopt(2)** for more information.
717 * 1395 * The option value of length *optlen* is pointed by *optval*.
718 * int bpf_xdp_adjust_meta(xdp_md, delta) 1396 *
719 * Adjust the xdp_md.data_meta by delta 1397 * This helper actually implements a subset of **setsockopt()**.
720 * @xdp_md: pointer to xdp_md 1398 * It supports the following *level*\ s:
721 * @delta: An positive/negative integer to be added to xdp_md.data_meta 1399 *
722 * Return: 0 on success or negative on error 1400 * * **SOL_SOCKET**, which supports the following *optname*\ s:
723 * 1401 * **SO_RCVBUF**, **SO_SNDBUF**, **SO_MAX_PACING_RATE**,
724 * int bpf_perf_event_read_value(map, flags, buf, buf_size) 1402 * **SO_PRIORITY**, **SO_RCVLOWAT**, **SO_MARK**.
725 * read perf event counter value and perf event enabled/running time 1403 * * **IPPROTO_TCP**, which supports the following *optname*\ s:
726 * @map: pointer to perf_event_array map 1404 * **TCP_CONGESTION**, **TCP_BPF_IW**,
727 * @flags: index of event in the map or bitmask flags 1405 * **TCP_BPF_SNDCWND_CLAMP**.
728 * @buf: buf to fill 1406 * * **IPPROTO_IP**, which supports *optname* **IP_TOS**.
729 * @buf_size: size of the buf 1407 * * **IPPROTO_IPV6**, which supports *optname* **IPV6_TCLASS**.
730 * Return: 0 on success or negative error code 1408 * Return
731 * 1409 * 0 on success, or a negative error in case of failure.
732 * int bpf_perf_prog_read_value(ctx, buf, buf_size) 1410 *
733 * read perf prog attached perf event counter and enabled/running time 1411 * int bpf_skb_adjust_room(struct sk_buff *skb, u32 len_diff, u32 mode, u64 flags)
734 * @ctx: pointer to ctx 1412 * Description
735 * @buf: buf to fill 1413 * Grow or shrink the room for data in the packet associated to
736 * @buf_size: size of the buf 1414 * *skb* by *len_diff*, and according to the selected *mode*.
737 * Return : 0 on success or negative error code 1415 *
738 * 1416 * There is a single supported mode at this time:
739 * int bpf_override_return(pt_regs, rc) 1417 *
740 * @pt_regs: pointer to struct pt_regs 1418 * * **BPF_ADJ_ROOM_NET**: Adjust room at the network layer
741 * @rc: the return value to set 1419 * (room space is added or removed below the layer 3 header).
742 * 1420 *
743 * int bpf_msg_redirect_map(map, key, flags) 1421 * All values for *flags* are reserved for future usage, and must
744 * Redirect msg to a sock in map using key as a lookup key for the 1422 * be left at zero.
745 * sock in map. 1423 *
746 * @map: pointer to sockmap 1424 * A call to this helper is susceptible to change the underlaying
747 * @key: key to lookup sock in map 1425 * packet buffer. Therefore, at load time, all checks on pointers
748 * @flags: reserved for future use 1426 * previously done by the verifier are invalidated and must be
749 * Return: SK_PASS 1427 * performed again, if the helper is used in combination with
750 * 1428 * direct packet access.
751 * int bpf_bind(ctx, addr, addr_len) 1429 * Return
752 * Bind socket to address. Only binding to IP is supported, no port can be 1430 * 0 on success, or a negative error in case of failure.
753 * set in addr. 1431 *
754 * @ctx: pointer to context of type bpf_sock_addr 1432 * int bpf_redirect_map(struct bpf_map *map, u32 key, u64 flags)
755 * @addr: pointer to struct sockaddr to bind socket to 1433 * Description
756 * @addr_len: length of sockaddr structure 1434 * Redirect the packet to the endpoint referenced by *map* at
757 * Return: 0 on success or negative error code 1435 * index *key*. Depending on its type, this *map* can contain
1436 * references to net devices (for forwarding packets through other
1437 * ports), or to CPUs (for redirecting XDP frames to another CPU;
1438 * but this is only implemented for native XDP (with driver
1439 * support) as of this writing).
1440 *
1441 * All values for *flags* are reserved for future usage, and must
1442 * be left at zero.
1443 *
1444 * When used to redirect packets to net devices, this helper
1445 * provides a high performance increase over **bpf_redirect**\ ().
1446 * This is due to various implementation details of the underlying
1447 * mechanisms, one of which is the fact that **bpf_redirect_map**\
1448 * () tries to send packet as a "bulk" to the device.
1449 * Return
1450 * **XDP_REDIRECT** on success, or **XDP_ABORTED** on error.
1451 *
1452 * int bpf_sk_redirect_map(struct bpf_map *map, u32 key, u64 flags)
1453 * Description
1454 * Redirect the packet to the socket referenced by *map* (of type
1455 * **BPF_MAP_TYPE_SOCKMAP**) at index *key*. Both ingress and
1456 * egress interfaces can be used for redirection. The
1457 * **BPF_F_INGRESS** value in *flags* is used to make the
1458 * distinction (ingress path is selected if the flag is present,
1459 * egress path otherwise). This is the only flag supported for now.
1460 * Return
1461 * **SK_PASS** on success, or **SK_DROP** on error.
1462 *
1463 * int bpf_sock_map_update(struct bpf_sock_ops *skops, struct bpf_map *map, void *key, u64 flags)
1464 * Description
1465 * Add an entry to, or update a *map* referencing sockets. The
1466 * *skops* is used as a new value for the entry associated to
1467 * *key*. *flags* is one of:
1468 *
1469 * **BPF_NOEXIST**
1470 * The entry for *key* must not exist in the map.
1471 * **BPF_EXIST**
1472 * The entry for *key* must already exist in the map.
1473 * **BPF_ANY**
1474 * No condition on the existence of the entry for *key*.
1475 *
1476 * If the *map* has eBPF programs (parser and verdict), those will
1477 * be inherited by the socket being added. If the socket is
1478 * already attached to eBPF programs, this results in an error.
1479 * Return
1480 * 0 on success, or a negative error in case of failure.
1481 *
1482 * int bpf_xdp_adjust_meta(struct xdp_buff *xdp_md, int delta)
1483 * Description
1484 * Adjust the address pointed by *xdp_md*\ **->data_meta** by
1485 * *delta* (which can be positive or negative). Note that this
1486 * operation modifies the address stored in *xdp_md*\ **->data**,
1487 * so the latter must be loaded only after the helper has been
1488 * called.
1489 *
1490 * The use of *xdp_md*\ **->data_meta** is optional and programs
1491 * are not required to use it. The rationale is that when the
1492 * packet is processed with XDP (e.g. as DoS filter), it is
1493 * possible to push further meta data along with it before passing
1494 * to the stack, and to give the guarantee that an ingress eBPF
1495 * program attached as a TC classifier on the same device can pick
1496 * this up for further post-processing. Since TC works with socket
1497 * buffers, it remains possible to set from XDP the **mark** or
1498 * **priority** pointers, or other pointers for the socket buffer.
1499 * Having this scratch space generic and programmable allows for
1500 * more flexibility as the user is free to store whatever meta
1501 * data they need.
1502 *
1503 * A call to this helper is susceptible to change the underlaying
1504 * packet buffer. Therefore, at load time, all checks on pointers
1505 * previously done by the verifier are invalidated and must be
1506 * performed again, if the helper is used in combination with
1507 * direct packet access.
1508 * Return
1509 * 0 on success, or a negative error in case of failure.
1510 *
1511 * int bpf_perf_event_read_value(struct bpf_map *map, u64 flags, struct bpf_perf_event_value *buf, u32 buf_size)
1512 * Description
1513 * Read the value of a perf event counter, and store it into *buf*
1514 * of size *buf_size*. This helper relies on a *map* of type
1515 * **BPF_MAP_TYPE_PERF_EVENT_ARRAY**. The nature of the perf event
1516 * counter is selected when *map* is updated with perf event file
1517 * descriptors. The *map* is an array whose size is the number of
1518 * available CPUs, and each cell contains a value relative to one
1519 * CPU. The value to retrieve is indicated by *flags*, that
1520 * contains the index of the CPU to look up, masked with
1521 * **BPF_F_INDEX_MASK**. Alternatively, *flags* can be set to
1522 * **BPF_F_CURRENT_CPU** to indicate that the value for the
1523 * current CPU should be retrieved.
1524 *
1525 * This helper behaves in a way close to
1526 * **bpf_perf_event_read**\ () helper, save that instead of
1527 * just returning the value observed, it fills the *buf*
1528 * structure. This allows for additional data to be retrieved: in
1529 * particular, the enabled and running times (in *buf*\
1530 * **->enabled** and *buf*\ **->running**, respectively) are
1531 * copied. In general, **bpf_perf_event_read_value**\ () is
1532 * recommended over **bpf_perf_event_read**\ (), which has some
1533 * ABI issues and provides fewer functionalities.
1534 *
1535 * These values are interesting, because hardware PMU (Performance
1536 * Monitoring Unit) counters are limited resources. When there are
1537 * more PMU based perf events opened than available counters,
1538 * kernel will multiplex these events so each event gets certain
1539 * percentage (but not all) of the PMU time. In case that
1540 * multiplexing happens, the number of samples or counter value
1541 * will not reflect the case compared to when no multiplexing
1542 * occurs. This makes comparison between different runs difficult.
1543 * Typically, the counter value should be normalized before
1544 * comparing to other experiments. The usual normalization is done
1545 * as follows.
1546 *
1547 * ::
1548 *
1549 * normalized_counter = counter * t_enabled / t_running
1550 *
1551 * Where t_enabled is the time enabled for event and t_running is
1552 * the time running for event since last normalization. The
1553 * enabled and running times are accumulated since the perf event
1554 * open. To achieve scaling factor between two invocations of an
1555 * eBPF program, users can can use CPU id as the key (which is
1556 * typical for perf array usage model) to remember the previous
1557 * value and do the calculation inside the eBPF program.
1558 * Return
1559 * 0 on success, or a negative error in case of failure.
1560 *
1561 * int bpf_perf_prog_read_value(struct bpf_perf_event_data *ctx, struct bpf_perf_event_value *buf, u32 buf_size)
1562 * Description
1563 * For en eBPF program attached to a perf event, retrieve the
1564 * value of the event counter associated to *ctx* and store it in
1565 * the structure pointed by *buf* and of size *buf_size*. Enabled
1566 * and running times are also stored in the structure (see
1567 * description of helper **bpf_perf_event_read_value**\ () for
1568 * more details).
1569 * Return
1570 * 0 on success, or a negative error in case of failure.
1571 *
1572 * int bpf_getsockopt(struct bpf_sock_ops *bpf_socket, int level, int optname, char *optval, int optlen)
1573 * Description
1574 * Emulate a call to **getsockopt()** on the socket associated to
1575 * *bpf_socket*, which must be a full socket. The *level* at
1576 * which the option resides and the name *optname* of the option
1577 * must be specified, see **getsockopt(2)** for more information.
1578 * The retrieved value is stored in the structure pointed by
1579 * *opval* and of length *optlen*.
1580 *
1581 * This helper actually implements a subset of **getsockopt()**.
1582 * It supports the following *level*\ s:
1583 *
1584 * * **IPPROTO_TCP**, which supports *optname*
1585 * **TCP_CONGESTION**.
1586 * * **IPPROTO_IP**, which supports *optname* **IP_TOS**.
1587 * * **IPPROTO_IPV6**, which supports *optname* **IPV6_TCLASS**.
1588 * Return
1589 * 0 on success, or a negative error in case of failure.
1590 *
1591 * int bpf_override_return(struct pt_reg *regs, u64 rc)
1592 * Description
1593 * Used for error injection, this helper uses kprobes to override
1594 * the return value of the probed function, and to set it to *rc*.
1595 * The first argument is the context *regs* on which the kprobe
1596 * works.
1597 *
1598 * This helper works by setting setting the PC (program counter)
1599 * to an override function which is run in place of the original
1600 * probed function. This means the probed function is not run at
1601 * all. The replacement function just returns with the required
1602 * value.
1603 *
1604 * This helper has security implications, and thus is subject to
1605 * restrictions. It is only available if the kernel was compiled
1606 * with the **CONFIG_BPF_KPROBE_OVERRIDE** configuration
1607 * option, and in this case it only works on functions tagged with
1608 * **ALLOW_ERROR_INJECTION** in the kernel code.
1609 *
1610 * Also, the helper is only available for the architectures having
1611 * the CONFIG_FUNCTION_ERROR_INJECTION option. As of this writing,
1612 * x86 architecture is the only one to support this feature.
1613 * Return
1614 * 0
1615 *
1616 * int bpf_sock_ops_cb_flags_set(struct bpf_sock_ops *bpf_sock, int argval)
1617 * Description
1618 * Attempt to set the value of the **bpf_sock_ops_cb_flags** field
1619 * for the full TCP socket associated to *bpf_sock_ops* to
1620 * *argval*.
1621 *
1622 * The primary use of this field is to determine if there should
1623 * be calls to eBPF programs of type
1624 * **BPF_PROG_TYPE_SOCK_OPS** at various points in the TCP
1625 * code. A program of the same type can change its value, per
1626 * connection and as necessary, when the connection is
1627 * established. This field is directly accessible for reading, but
1628 * this helper must be used for updates in order to return an
1629 * error if an eBPF program tries to set a callback that is not
1630 * supported in the current kernel.
1631 *
1632 * The supported callback values that *argval* can combine are:
1633 *
1634 * * **BPF_SOCK_OPS_RTO_CB_FLAG** (retransmission time out)
1635 * * **BPF_SOCK_OPS_RETRANS_CB_FLAG** (retransmission)
1636 * * **BPF_SOCK_OPS_STATE_CB_FLAG** (TCP state change)
1637 *
1638 * Here are some examples of where one could call such eBPF
1639 * program:
1640 *
1641 * * When RTO fires.
1642 * * When a packet is retransmitted.
1643 * * When the connection terminates.
1644 * * When a packet is sent.
1645 * * When a packet is received.
1646 * Return
1647 * Code **-EINVAL** if the socket is not a full TCP socket;
1648 * otherwise, a positive number containing the bits that could not
1649 * be set is returned (which comes down to 0 if all bits were set
1650 * as required).
1651 *
1652 * int bpf_msg_redirect_map(struct sk_msg_buff *msg, struct bpf_map *map, u32 key, u64 flags)
1653 * Description
1654 * This helper is used in programs implementing policies at the
1655 * socket level. If the message *msg* is allowed to pass (i.e. if
1656 * the verdict eBPF program returns **SK_PASS**), redirect it to
1657 * the socket referenced by *map* (of type
1658 * **BPF_MAP_TYPE_SOCKMAP**) at index *key*. Both ingress and
1659 * egress interfaces can be used for redirection. The
1660 * **BPF_F_INGRESS** value in *flags* is used to make the
1661 * distinction (ingress path is selected if the flag is present,
1662 * egress path otherwise). This is the only flag supported for now.
1663 * Return
1664 * **SK_PASS** on success, or **SK_DROP** on error.
1665 *
1666 * int bpf_msg_apply_bytes(struct sk_msg_buff *msg, u32 bytes)
1667 * Description
1668 * For socket policies, apply the verdict of the eBPF program to
1669 * the next *bytes* (number of bytes) of message *msg*.
1670 *
1671 * For example, this helper can be used in the following cases:
1672 *
1673 * * A single **sendmsg**\ () or **sendfile**\ () system call
1674 * contains multiple logical messages that the eBPF program is
1675 * supposed to read and for which it should apply a verdict.
1676 * * An eBPF program only cares to read the first *bytes* of a
1677 * *msg*. If the message has a large payload, then setting up
1678 * and calling the eBPF program repeatedly for all bytes, even
1679 * though the verdict is already known, would create unnecessary
1680 * overhead.
1681 *
1682 * When called from within an eBPF program, the helper sets a
1683 * counter internal to the BPF infrastructure, that is used to
1684 * apply the last verdict to the next *bytes*. If *bytes* is
1685 * smaller than the current data being processed from a
1686 * **sendmsg**\ () or **sendfile**\ () system call, the first
1687 * *bytes* will be sent and the eBPF program will be re-run with
1688 * the pointer for start of data pointing to byte number *bytes*
1689 * **+ 1**. If *bytes* is larger than the current data being
1690 * processed, then the eBPF verdict will be applied to multiple
1691 * **sendmsg**\ () or **sendfile**\ () calls until *bytes* are
1692 * consumed.
1693 *
1694 * Note that if a socket closes with the internal counter holding
1695 * a non-zero value, this is not a problem because data is not
1696 * being buffered for *bytes* and is sent as it is received.
1697 * Return
1698 * 0
1699 *
1700 * int bpf_msg_cork_bytes(struct sk_msg_buff *msg, u32 bytes)
1701 * Description
1702 * For socket policies, prevent the execution of the verdict eBPF
1703 * program for message *msg* until *bytes* (byte number) have been
1704 * accumulated.
1705 *
1706 * This can be used when one needs a specific number of bytes
1707 * before a verdict can be assigned, even if the data spans
1708 * multiple **sendmsg**\ () or **sendfile**\ () calls. The extreme
1709 * case would be a user calling **sendmsg**\ () repeatedly with
1710 * 1-byte long message segments. Obviously, this is bad for
1711 * performance, but it is still valid. If the eBPF program needs
1712 * *bytes* bytes to validate a header, this helper can be used to
1713 * prevent the eBPF program to be called again until *bytes* have
1714 * been accumulated.
1715 * Return
1716 * 0
1717 *
1718 * int bpf_msg_pull_data(struct sk_msg_buff *msg, u32 start, u32 end, u64 flags)
1719 * Description
1720 * For socket policies, pull in non-linear data from user space
1721 * for *msg* and set pointers *msg*\ **->data** and *msg*\
1722 * **->data_end** to *start* and *end* bytes offsets into *msg*,
1723 * respectively.
1724 *
1725 * If a program of type **BPF_PROG_TYPE_SK_MSG** is run on a
1726 * *msg* it can only parse data that the (**data**, **data_end**)
1727 * pointers have already consumed. For **sendmsg**\ () hooks this
1728 * is likely the first scatterlist element. But for calls relying
1729 * on the **sendpage** handler (e.g. **sendfile**\ ()) this will
1730 * be the range (**0**, **0**) because the data is shared with
1731 * user space and by default the objective is to avoid allowing
1732 * user space to modify data while (or after) eBPF verdict is
1733 * being decided. This helper can be used to pull in data and to
1734 * set the start and end pointer to given values. Data will be
1735 * copied if necessary (i.e. if data was not linear and if start
1736 * and end pointers do not point to the same chunk).
1737 *
1738 * A call to this helper is susceptible to change the underlaying
1739 * packet buffer. Therefore, at load time, all checks on pointers
1740 * previously done by the verifier are invalidated and must be
1741 * performed again, if the helper is used in combination with
1742 * direct packet access.
1743 *
1744 * All values for *flags* are reserved for future usage, and must
1745 * be left at zero.
1746 * Return
1747 * 0 on success, or a negative error in case of failure.
1748 *
1749 * int bpf_bind(struct bpf_sock_addr *ctx, struct sockaddr *addr, int addr_len)
1750 * Description
1751 * Bind the socket associated to *ctx* to the address pointed by
1752 * *addr*, of length *addr_len*. This allows for making outgoing
1753 * connection from the desired IP address, which can be useful for
1754 * example when all processes inside a cgroup should use one
1755 * single IP address on a host that has multiple IP configured.
1756 *
1757 * This helper works for IPv4 and IPv6, TCP and UDP sockets. The
1758 * domain (*addr*\ **->sa_family**) must be **AF_INET** (or
1759 * **AF_INET6**). Looking for a free port to bind to can be
1760 * expensive, therefore binding to port is not permitted by the
1761 * helper: *addr*\ **->sin_port** (or **sin6_port**, respectively)
1762 * must be set to zero.
1763 * Return
1764 * 0 on success, or a negative error in case of failure.
1765 *
1766 * int bpf_xdp_adjust_tail(struct xdp_buff *xdp_md, int delta)
1767 * Description
1768 * Adjust (move) *xdp_md*\ **->data_end** by *delta* bytes. It is
1769 * only possible to shrink the packet as of this writing,
1770 * therefore *delta* must be a negative integer.
1771 *
1772 * A call to this helper is susceptible to change the underlaying
1773 * packet buffer. Therefore, at load time, all checks on pointers
1774 * previously done by the verifier are invalidated and must be
1775 * performed again, if the helper is used in combination with
1776 * direct packet access.
1777 * Return
1778 * 0 on success, or a negative error in case of failure.
1779 *
1780 * int bpf_skb_get_xfrm_state(struct sk_buff *skb, u32 index, struct bpf_xfrm_state *xfrm_state, u32 size, u64 flags)
1781 * Description
1782 * Retrieve the XFRM state (IP transform framework, see also
1783 * **ip-xfrm(8)**) at *index* in XFRM "security path" for *skb*.
1784 *
1785 * The retrieved value is stored in the **struct bpf_xfrm_state**
1786 * pointed by *xfrm_state* and of length *size*.
1787 *
1788 * All values for *flags* are reserved for future usage, and must
1789 * be left at zero.
1790 *
1791 * This helper is available only if the kernel was compiled with
1792 * **CONFIG_XFRM** configuration option.
1793 * Return
1794 * 0 on success, or a negative error in case of failure.
1795 *
1796 * int bpf_get_stack(struct pt_regs *regs, void *buf, u32 size, u64 flags)
1797 * Description
1798 * Return a user or a kernel stack in bpf program provided buffer.
1799 * To achieve this, the helper needs *ctx*, which is a pointer
1800 * to the context on which the tracing program is executed.
1801 * To store the stacktrace, the bpf program provides *buf* with
1802 * a nonnegative *size*.
1803 *
1804 * The last argument, *flags*, holds the number of stack frames to
1805 * skip (from 0 to 255), masked with
1806 * **BPF_F_SKIP_FIELD_MASK**. The next bits can be used to set
1807 * the following flags:
1808 *
1809 * **BPF_F_USER_STACK**
1810 * Collect a user space stack instead of a kernel stack.
1811 * **BPF_F_USER_BUILD_ID**
1812 * Collect buildid+offset instead of ips for user stack,
1813 * only valid if **BPF_F_USER_STACK** is also specified.
1814 *
1815 * **bpf_get_stack**\ () can collect up to
1816 * **PERF_MAX_STACK_DEPTH** both kernel and user frames, subject
1817 * to sufficient large buffer size. Note that
1818 * this limit can be controlled with the **sysctl** program, and
1819 * that it should be manually increased in order to profile long
1820 * user stacks (such as stacks for Java programs). To do so, use:
1821 *
1822 * ::
1823 *
1824 * # sysctl kernel.perf_event_max_stack=<new value>
1825 * Return
1826 * A non-negative value equal to or less than *size* on success,
1827 * or a negative error in case of failure.
1828 *
1829 * int skb_load_bytes_relative(const struct sk_buff *skb, u32 offset, void *to, u32 len, u32 start_header)
1830 * Description
1831 * This helper is similar to **bpf_skb_load_bytes**\ () in that
1832 * it provides an easy way to load *len* bytes from *offset*
1833 * from the packet associated to *skb*, into the buffer pointed
1834 * by *to*. The difference to **bpf_skb_load_bytes**\ () is that
1835 * a fifth argument *start_header* exists in order to select a
1836 * base offset to start from. *start_header* can be one of:
1837 *
1838 * **BPF_HDR_START_MAC**
1839 * Base offset to load data from is *skb*'s mac header.
1840 * **BPF_HDR_START_NET**
1841 * Base offset to load data from is *skb*'s network header.
1842 *
1843 * In general, "direct packet access" is the preferred method to
1844 * access packet data, however, this helper is in particular useful
1845 * in socket filters where *skb*\ **->data** does not always point
1846 * to the start of the mac header and where "direct packet access"
1847 * is not available.
1848 * Return
1849 * 0 on success, or a negative error in case of failure.
1850 *
1851 * int bpf_fib_lookup(void *ctx, struct bpf_fib_lookup *params, int plen, u32 flags)
1852 * Description
1853 * Do FIB lookup in kernel tables using parameters in *params*.
1854 * If lookup is successful and result shows packet is to be
1855 * forwarded, the neighbor tables are searched for the nexthop.
1856 * If successful (ie., FIB lookup shows forwarding and nexthop
1857 * is resolved), the nexthop address is returned in ipv4_dst
1858 * or ipv6_dst based on family, smac is set to mac address of
1859 * egress device, dmac is set to nexthop mac address, rt_metric
1860 * is set to metric from route (IPv4/IPv6 only).
1861 *
1862 * *plen* argument is the size of the passed in struct.
1863 * *flags* argument can be a combination of one or more of the
1864 * following values:
1865 *
1866 * **BPF_FIB_LOOKUP_DIRECT**
1867 * Do a direct table lookup vs full lookup using FIB
1868 * rules.
1869 * **BPF_FIB_LOOKUP_OUTPUT**
1870 * Perform lookup from an egress perspective (default is
1871 * ingress).
1872 *
1873 * *ctx* is either **struct xdp_md** for XDP programs or
1874 * **struct sk_buff** tc cls_act programs.
1875 * Return
1876 * Egress device index on success, 0 if packet needs to continue
1877 * up the stack for further processing or a negative error in case
1878 * of failure.
1879 *
1880 * int bpf_sock_hash_update(struct bpf_sock_ops_kern *skops, struct bpf_map *map, void *key, u64 flags)
1881 * Description
1882 * Add an entry to, or update a sockhash *map* referencing sockets.
1883 * The *skops* is used as a new value for the entry associated to
1884 * *key*. *flags* is one of:
1885 *
1886 * **BPF_NOEXIST**
1887 * The entry for *key* must not exist in the map.
1888 * **BPF_EXIST**
1889 * The entry for *key* must already exist in the map.
1890 * **BPF_ANY**
1891 * No condition on the existence of the entry for *key*.
1892 *
1893 * If the *map* has eBPF programs (parser and verdict), those will
1894 * be inherited by the socket being added. If the socket is
1895 * already attached to eBPF programs, this results in an error.
1896 * Return
1897 * 0 on success, or a negative error in case of failure.
1898 *
1899 * int bpf_msg_redirect_hash(struct sk_msg_buff *msg, struct bpf_map *map, void *key, u64 flags)
1900 * Description
1901 * This helper is used in programs implementing policies at the
1902 * socket level. If the message *msg* is allowed to pass (i.e. if
1903 * the verdict eBPF program returns **SK_PASS**), redirect it to
1904 * the socket referenced by *map* (of type
1905 * **BPF_MAP_TYPE_SOCKHASH**) using hash *key*. Both ingress and
1906 * egress interfaces can be used for redirection. The
1907 * **BPF_F_INGRESS** value in *flags* is used to make the
1908 * distinction (ingress path is selected if the flag is present,
1909 * egress path otherwise). This is the only flag supported for now.
1910 * Return
1911 * **SK_PASS** on success, or **SK_DROP** on error.
1912 *
1913 * int bpf_sk_redirect_hash(struct sk_buff *skb, struct bpf_map *map, void *key, u64 flags)
1914 * Description
1915 * This helper is used in programs implementing policies at the
1916 * skb socket level. If the sk_buff *skb* is allowed to pass (i.e.
1917 * if the verdeict eBPF program returns **SK_PASS**), redirect it
1918 * to the socket referenced by *map* (of type
1919 * **BPF_MAP_TYPE_SOCKHASH**) using hash *key*. Both ingress and
1920 * egress interfaces can be used for redirection. The
1921 * **BPF_F_INGRESS** value in *flags* is used to make the
1922 * distinction (ingress path is selected if the flag is present,
1923 * egress otherwise). This is the only flag supported for now.
1924 * Return
1925 * **SK_PASS** on success, or **SK_DROP** on error.
1926 *
1927 * int bpf_lwt_push_encap(struct sk_buff *skb, u32 type, void *hdr, u32 len)
1928 * Description
1929 * Encapsulate the packet associated to *skb* within a Layer 3
1930 * protocol header. This header is provided in the buffer at
1931 * address *hdr*, with *len* its size in bytes. *type* indicates
1932 * the protocol of the header and can be one of:
1933 *
1934 * **BPF_LWT_ENCAP_SEG6**
1935 * IPv6 encapsulation with Segment Routing Header
1936 * (**struct ipv6_sr_hdr**). *hdr* only contains the SRH,
1937 * the IPv6 header is computed by the kernel.
1938 * **BPF_LWT_ENCAP_SEG6_INLINE**
1939 * Only works if *skb* contains an IPv6 packet. Insert a
1940 * Segment Routing Header (**struct ipv6_sr_hdr**) inside
1941 * the IPv6 header.
1942 *
1943 * A call to this helper is susceptible to change the underlaying
1944 * packet buffer. Therefore, at load time, all checks on pointers
1945 * previously done by the verifier are invalidated and must be
1946 * performed again, if the helper is used in combination with
1947 * direct packet access.
1948 * Return
1949 * 0 on success, or a negative error in case of failure.
1950 *
1951 * int bpf_lwt_seg6_store_bytes(struct sk_buff *skb, u32 offset, const void *from, u32 len)
1952 * Description
1953 * Store *len* bytes from address *from* into the packet
1954 * associated to *skb*, at *offset*. Only the flags, tag and TLVs
1955 * inside the outermost IPv6 Segment Routing Header can be
1956 * modified through this helper.
1957 *
1958 * A call to this helper is susceptible to change the underlaying
1959 * packet buffer. Therefore, at load time, all checks on pointers
1960 * previously done by the verifier are invalidated and must be
1961 * performed again, if the helper is used in combination with
1962 * direct packet access.
1963 * Return
1964 * 0 on success, or a negative error in case of failure.
1965 *
1966 * int bpf_lwt_seg6_adjust_srh(struct sk_buff *skb, u32 offset, s32 delta)
1967 * Description
1968 * Adjust the size allocated to TLVs in the outermost IPv6
1969 * Segment Routing Header contained in the packet associated to
1970 * *skb*, at position *offset* by *delta* bytes. Only offsets
1971 * after the segments are accepted. *delta* can be as well
1972 * positive (growing) as negative (shrinking).
1973 *
1974 * A call to this helper is susceptible to change the underlaying
1975 * packet buffer. Therefore, at load time, all checks on pointers
1976 * previously done by the verifier are invalidated and must be
1977 * performed again, if the helper is used in combination with
1978 * direct packet access.
1979 * Return
1980 * 0 on success, or a negative error in case of failure.
1981 *
1982 * int bpf_lwt_seg6_action(struct sk_buff *skb, u32 action, void *param, u32 param_len)
1983 * Description
1984 * Apply an IPv6 Segment Routing action of type *action* to the
1985 * packet associated to *skb*. Each action takes a parameter
1986 * contained at address *param*, and of length *param_len* bytes.
1987 * *action* can be one of:
1988 *
1989 * **SEG6_LOCAL_ACTION_END_X**
1990 * End.X action: Endpoint with Layer-3 cross-connect.
1991 * Type of *param*: **struct in6_addr**.
1992 * **SEG6_LOCAL_ACTION_END_T**
1993 * End.T action: Endpoint with specific IPv6 table lookup.
1994 * Type of *param*: **int**.
1995 * **SEG6_LOCAL_ACTION_END_B6**
1996 * End.B6 action: Endpoint bound to an SRv6 policy.
1997 * Type of param: **struct ipv6_sr_hdr**.
1998 * **SEG6_LOCAL_ACTION_END_B6_ENCAP**
1999 * End.B6.Encap action: Endpoint bound to an SRv6
2000 * encapsulation policy.
2001 * Type of param: **struct ipv6_sr_hdr**.
2002 *
2003 * A call to this helper is susceptible to change the underlaying
2004 * packet buffer. Therefore, at load time, all checks on pointers
2005 * previously done by the verifier are invalidated and must be
2006 * performed again, if the helper is used in combination with
2007 * direct packet access.
2008 * Return
2009 * 0 on success, or a negative error in case of failure.
2010 *
2011 * int bpf_rc_keydown(void *ctx, u32 protocol, u64 scancode, u32 toggle)
2012 * Description
2013 * This helper is used in programs implementing IR decoding, to
2014 * report a successfully decoded key press with *scancode*,
2015 * *toggle* value in the given *protocol*. The scancode will be
2016 * translated to a keycode using the rc keymap, and reported as
2017 * an input key down event. After a period a key up event is
2018 * generated. This period can be extended by calling either
2019 * **bpf_rc_keydown** () again with the same values, or calling
2020 * **bpf_rc_repeat** ().
2021 *
2022 * Some protocols include a toggle bit, in case the button was
2023 * released and pressed again between consecutive scancodes.
2024 *
2025 * The *ctx* should point to the lirc sample as passed into
2026 * the program.
2027 *
2028 * The *protocol* is the decoded protocol number (see
2029 * **enum rc_proto** for some predefined values).
2030 *
2031 * This helper is only available is the kernel was compiled with
2032 * the **CONFIG_BPF_LIRC_MODE2** configuration option set to
2033 * "**y**".
2034 *
2035 * Return
2036 * 0
2037 *
2038 * int bpf_rc_repeat(void *ctx)
2039 * Description
2040 * This helper is used in programs implementing IR decoding, to
2041 * report a successfully decoded repeat key message. This delays
2042 * the generation of a key up event for previously generated
2043 * key down event.
2044 *
2045 * Some IR protocols like NEC have a special IR message for
2046 * repeating last button, for when a button is held down.
2047 *
2048 * The *ctx* should point to the lirc sample as passed into
2049 * the program.
2050 *
2051 * This helper is only available is the kernel was compiled with
2052 * the **CONFIG_BPF_LIRC_MODE2** configuration option set to
2053 * "**y**".
2054 *
2055 * Return
2056 * 0
2057 *
2058 * uint64_t bpf_skb_cgroup_id(struct sk_buff *skb)
2059 * Description
2060 * Return the cgroup v2 id of the socket associated with the *skb*.
2061 * This is roughly similar to the **bpf_get_cgroup_classid**\ ()
2062 * helper for cgroup v1 by providing a tag resp. identifier that
2063 * can be matched on or used for map lookups e.g. to implement
2064 * policy. The cgroup v2 id of a given path in the hierarchy is
2065 * exposed in user space through the f_handle API in order to get
2066 * to the same 64-bit id.
2067 *
2068 * This helper can be used on TC egress path, but not on ingress,
2069 * and is available only if the kernel was compiled with the
2070 * **CONFIG_SOCK_CGROUP_DATA** configuration option.
2071 * Return
2072 * The id is returned or 0 in case the id could not be retrieved.
2073 *
2074 * u64 bpf_get_current_cgroup_id(void)
2075 * Return
2076 * A 64-bit integer containing the current cgroup id based
2077 * on the cgroup within which the current task is running.
758 */ 2078 */
759#define __BPF_FUNC_MAPPER(FN) \ 2079#define __BPF_FUNC_MAPPER(FN) \
760 FN(unspec), \ 2080 FN(unspec), \
@@ -821,7 +2141,23 @@ union bpf_attr {
821 FN(msg_apply_bytes), \ 2141 FN(msg_apply_bytes), \
822 FN(msg_cork_bytes), \ 2142 FN(msg_cork_bytes), \
823 FN(msg_pull_data), \ 2143 FN(msg_pull_data), \
824 FN(bind), 2144 FN(bind), \
2145 FN(xdp_adjust_tail), \
2146 FN(skb_get_xfrm_state), \
2147 FN(get_stack), \
2148 FN(skb_load_bytes_relative), \
2149 FN(fib_lookup), \
2150 FN(sock_hash_update), \
2151 FN(msg_redirect_hash), \
2152 FN(sk_redirect_hash), \
2153 FN(lwt_push_encap), \
2154 FN(lwt_seg6_store_bytes), \
2155 FN(lwt_seg6_adjust_srh), \
2156 FN(lwt_seg6_action), \
2157 FN(rc_repeat), \
2158 FN(rc_keydown), \
2159 FN(skb_cgroup_id), \
2160 FN(get_current_cgroup_id),
825 2161
826/* integer value in 'imm' field of BPF_CALL instruction selects which helper 2162/* integer value in 'imm' field of BPF_CALL instruction selects which helper
827 * function eBPF program intends to call 2163 * function eBPF program intends to call
@@ -855,11 +2191,14 @@ enum bpf_func_id {
855/* BPF_FUNC_skb_set_tunnel_key and BPF_FUNC_skb_get_tunnel_key flags. */ 2191/* BPF_FUNC_skb_set_tunnel_key and BPF_FUNC_skb_get_tunnel_key flags. */
856#define BPF_F_TUNINFO_IPV6 (1ULL << 0) 2192#define BPF_F_TUNINFO_IPV6 (1ULL << 0)
857 2193
858/* BPF_FUNC_get_stackid flags. */ 2194/* flags for both BPF_FUNC_get_stackid and BPF_FUNC_get_stack. */
859#define BPF_F_SKIP_FIELD_MASK 0xffULL 2195#define BPF_F_SKIP_FIELD_MASK 0xffULL
860#define BPF_F_USER_STACK (1ULL << 8) 2196#define BPF_F_USER_STACK (1ULL << 8)
2197/* flags used by BPF_FUNC_get_stackid only. */
861#define BPF_F_FAST_STACK_CMP (1ULL << 9) 2198#define BPF_F_FAST_STACK_CMP (1ULL << 9)
862#define BPF_F_REUSE_STACKID (1ULL << 10) 2199#define BPF_F_REUSE_STACKID (1ULL << 10)
2200/* flags used by BPF_FUNC_get_stack only. */
2201#define BPF_F_USER_BUILD_ID (1ULL << 11)
863 2202
864/* BPF_FUNC_skb_set_tunnel_key flags. */ 2203/* BPF_FUNC_skb_set_tunnel_key flags. */
865#define BPF_F_ZERO_CSUM_TX (1ULL << 1) 2204#define BPF_F_ZERO_CSUM_TX (1ULL << 1)
@@ -879,6 +2218,18 @@ enum bpf_adj_room_mode {
879 BPF_ADJ_ROOM_NET, 2218 BPF_ADJ_ROOM_NET,
880}; 2219};
881 2220
2221/* Mode for BPF_FUNC_skb_load_bytes_relative helper. */
2222enum bpf_hdr_start_off {
2223 BPF_HDR_START_MAC,
2224 BPF_HDR_START_NET,
2225};
2226
2227/* Encapsulation type for BPF_FUNC_lwt_push_encap helper. */
2228enum bpf_lwt_encap_mode {
2229 BPF_LWT_ENCAP_SEG6,
2230 BPF_LWT_ENCAP_SEG6_INLINE
2231};
2232
882/* user accessible mirror of in-kernel sk_buff. 2233/* user accessible mirror of in-kernel sk_buff.
883 * new fields can only be added to the end of this structure 2234 * new fields can only be added to the end of this structure
884 */ 2235 */
@@ -923,10 +2274,24 @@ struct bpf_tunnel_key {
923 }; 2274 };
924 __u8 tunnel_tos; 2275 __u8 tunnel_tos;
925 __u8 tunnel_ttl; 2276 __u8 tunnel_ttl;
926 __u16 tunnel_ext; 2277 __u16 tunnel_ext; /* Padding, future use. */
927 __u32 tunnel_label; 2278 __u32 tunnel_label;
928}; 2279};
929 2280
2281/* user accessible mirror of in-kernel xfrm_state.
2282 * new fields can only be added to the end of this structure
2283 */
2284struct bpf_xfrm_state {
2285 __u32 reqid;
2286 __u32 spi; /* Stored in network byte order */
2287 __u16 family;
2288 __u16 ext; /* Padding, future use. */
2289 union {
2290 __u32 remote_ipv4; /* Stored in network byte order */
2291 __u32 remote_ipv6[4]; /* Stored in network byte order */
2292 };
2293};
2294
930/* Generic BPF return codes which all BPF program types may support. 2295/* Generic BPF return codes which all BPF program types may support.
931 * The values are binary compatible with their TC_ACT_* counter-part to 2296 * The values are binary compatible with their TC_ACT_* counter-part to
932 * provide backwards compatibility with existing SCHED_CLS and SCHED_ACT 2297 * provide backwards compatibility with existing SCHED_CLS and SCHED_ACT
@@ -999,6 +2364,14 @@ enum sk_action {
999struct sk_msg_md { 2364struct sk_msg_md {
1000 void *data; 2365 void *data;
1001 void *data_end; 2366 void *data_end;
2367
2368 __u32 family;
2369 __u32 remote_ip4; /* Stored in network byte order */
2370 __u32 local_ip4; /* Stored in network byte order */
2371 __u32 remote_ip6[4]; /* Stored in network byte order */
2372 __u32 local_ip6[4]; /* Stored in network byte order */
2373 __u32 remote_port; /* Stored in network byte order */
2374 __u32 local_port; /* stored in host byte order */
1002}; 2375};
1003 2376
1004#define BPF_TAG_SIZE 8 2377#define BPF_TAG_SIZE 8
@@ -1017,9 +2390,13 @@ struct bpf_prog_info {
1017 __aligned_u64 map_ids; 2390 __aligned_u64 map_ids;
1018 char name[BPF_OBJ_NAME_LEN]; 2391 char name[BPF_OBJ_NAME_LEN];
1019 __u32 ifindex; 2392 __u32 ifindex;
1020 __u32 :32; 2393 __u32 gpl_compatible:1;
1021 __u64 netns_dev; 2394 __u64 netns_dev;
1022 __u64 netns_ino; 2395 __u64 netns_ino;
2396 __u32 nr_jited_ksyms;
2397 __u32 nr_jited_func_lens;
2398 __aligned_u64 jited_ksyms;
2399 __aligned_u64 jited_func_lens;
1023} __attribute__((aligned(8))); 2400} __attribute__((aligned(8)));
1024 2401
1025struct bpf_map_info { 2402struct bpf_map_info {
@@ -1034,6 +2411,15 @@ struct bpf_map_info {
1034 __u32 :32; 2411 __u32 :32;
1035 __u64 netns_dev; 2412 __u64 netns_dev;
1036 __u64 netns_ino; 2413 __u64 netns_ino;
2414 __u32 btf_id;
2415 __u32 btf_key_type_id;
2416 __u32 btf_value_type_id;
2417} __attribute__((aligned(8)));
2418
2419struct bpf_btf_info {
2420 __aligned_u64 btf;
2421 __u32 btf_size;
2422 __u32 id;
1037} __attribute__((aligned(8))); 2423} __attribute__((aligned(8)));
1038 2424
1039/* User bpf_sock_addr struct to access socket fields and sockaddr struct passed 2425/* User bpf_sock_addr struct to access socket fields and sockaddr struct passed
@@ -1054,6 +2440,12 @@ struct bpf_sock_addr {
1054 __u32 family; /* Allows 4-byte read, but no write */ 2440 __u32 family; /* Allows 4-byte read, but no write */
1055 __u32 type; /* Allows 4-byte read, but no write */ 2441 __u32 type; /* Allows 4-byte read, but no write */
1056 __u32 protocol; /* Allows 4-byte read, but no write */ 2442 __u32 protocol; /* Allows 4-byte read, but no write */
2443 __u32 msg_src_ip4; /* Allows 1,2,4-byte read an 4-byte write.
2444 * Stored in network byte order.
2445 */
2446 __u32 msg_src_ip6[4]; /* Allows 1,2,4-byte read an 4-byte write.
2447 * Stored in network byte order.
2448 */
1057}; 2449};
1058 2450
1059/* User bpf_sock_ops struct to access socket values and specify request ops 2451/* User bpf_sock_ops struct to access socket values and specify request ops
@@ -1214,4 +2606,64 @@ struct bpf_raw_tracepoint_args {
1214 __u64 args[0]; 2606 __u64 args[0];
1215}; 2607};
1216 2608
2609/* DIRECT: Skip the FIB rules and go to FIB table associated with device
2610 * OUTPUT: Do lookup from egress perspective; default is ingress
2611 */
2612#define BPF_FIB_LOOKUP_DIRECT BIT(0)
2613#define BPF_FIB_LOOKUP_OUTPUT BIT(1)
2614
2615struct bpf_fib_lookup {
2616 /* input: network family for lookup (AF_INET, AF_INET6)
2617 * output: network family of egress nexthop
2618 */
2619 __u8 family;
2620
2621 /* set if lookup is to consider L4 data - e.g., FIB rules */
2622 __u8 l4_protocol;
2623 __be16 sport;
2624 __be16 dport;
2625
2626 /* total length of packet from network header - used for MTU check */
2627 __u16 tot_len;
2628 __u32 ifindex; /* L3 device index for lookup */
2629
2630 union {
2631 /* inputs to lookup */
2632 __u8 tos; /* AF_INET */
2633 __be32 flowinfo; /* AF_INET6, flow_label + priority */
2634
2635 /* output: metric of fib result (IPv4/IPv6 only) */
2636 __u32 rt_metric;
2637 };
2638
2639 union {
2640 __be32 ipv4_src;
2641 __u32 ipv6_src[4]; /* in6_addr; network order */
2642 };
2643
2644 /* input to bpf_fib_lookup, ipv{4,6}_dst is destination address in
2645 * network header. output: bpf_fib_lookup sets to gateway address
2646 * if FIB lookup returns gateway route
2647 */
2648 union {
2649 __be32 ipv4_dst;
2650 __u32 ipv6_dst[4]; /* in6_addr; network order */
2651 };
2652
2653 /* output */
2654 __be16 h_vlan_proto;
2655 __be16 h_vlan_TCI;
2656 __u8 smac[6]; /* ETH_ALEN */
2657 __u8 dmac[6]; /* ETH_ALEN */
2658};
2659
2660enum bpf_task_fd_type {
2661 BPF_FD_TYPE_RAW_TRACEPOINT, /* tp name */
2662 BPF_FD_TYPE_TRACEPOINT, /* tp name */
2663 BPF_FD_TYPE_KPROBE, /* (symbol + offset) or addr */
2664 BPF_FD_TYPE_KRETPROBE, /* (symbol + offset) or addr */
2665 BPF_FD_TYPE_UPROBE, /* filename + offset */
2666 BPF_FD_TYPE_URETPROBE, /* filename + offset */
2667};
2668
1217#endif /* _UAPI__LINUX_BPF_H__ */ 2669#endif /* _UAPI__LINUX_BPF_H__ */
diff --git a/include/uapi/linux/bpfilter.h b/include/uapi/linux/bpfilter.h
new file mode 100644
index 000000000000..2ec3cc99ea4c
--- /dev/null
+++ b/include/uapi/linux/bpfilter.h
@@ -0,0 +1,21 @@
1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _UAPI_LINUX_BPFILTER_H
3#define _UAPI_LINUX_BPFILTER_H
4
5#include <linux/if.h>
6
7enum {
8 BPFILTER_IPT_SO_SET_REPLACE = 64,
9 BPFILTER_IPT_SO_SET_ADD_COUNTERS = 65,
10 BPFILTER_IPT_SET_MAX,
11};
12
13enum {
14 BPFILTER_IPT_SO_GET_INFO = 64,
15 BPFILTER_IPT_SO_GET_ENTRIES = 65,
16 BPFILTER_IPT_SO_GET_REVISION_MATCH = 66,
17 BPFILTER_IPT_SO_GET_REVISION_TARGET = 67,
18 BPFILTER_IPT_GET_MAX,
19};
20
21#endif /* _UAPI_LINUX_BPFILTER_H */
diff --git a/include/uapi/linux/btf.h b/include/uapi/linux/btf.h
new file mode 100644
index 000000000000..0b5ddbe135a4
--- /dev/null
+++ b/include/uapi/linux/btf.h
@@ -0,0 +1,113 @@
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2/* Copyright (c) 2018 Facebook */
3#ifndef _UAPI__LINUX_BTF_H__
4#define _UAPI__LINUX_BTF_H__
5
6#include <linux/types.h>
7
8#define BTF_MAGIC 0xeB9F
9#define BTF_VERSION 1
10
11struct btf_header {
12 __u16 magic;
13 __u8 version;
14 __u8 flags;
15 __u32 hdr_len;
16
17 /* All offsets are in bytes relative to the end of this header */
18 __u32 type_off; /* offset of type section */
19 __u32 type_len; /* length of type section */
20 __u32 str_off; /* offset of string section */
21 __u32 str_len; /* length of string section */
22};
23
24/* Max # of type identifier */
25#define BTF_MAX_TYPE 0x0000ffff
26/* Max offset into the string section */
27#define BTF_MAX_NAME_OFFSET 0x0000ffff
28/* Max # of struct/union/enum members or func args */
29#define BTF_MAX_VLEN 0xffff
30
31struct btf_type {
32 __u32 name_off;
33 /* "info" bits arrangement
34 * bits 0-15: vlen (e.g. # of struct's members)
35 * bits 16-23: unused
36 * bits 24-27: kind (e.g. int, ptr, array...etc)
37 * bits 28-31: unused
38 */
39 __u32 info;
40 /* "size" is used by INT, ENUM, STRUCT and UNION.
41 * "size" tells the size of the type it is describing.
42 *
43 * "type" is used by PTR, TYPEDEF, VOLATILE, CONST and RESTRICT.
44 * "type" is a type_id referring to another type.
45 */
46 union {
47 __u32 size;
48 __u32 type;
49 };
50};
51
52#define BTF_INFO_KIND(info) (((info) >> 24) & 0x0f)
53#define BTF_INFO_VLEN(info) ((info) & 0xffff)
54
55#define BTF_KIND_UNKN 0 /* Unknown */
56#define BTF_KIND_INT 1 /* Integer */
57#define BTF_KIND_PTR 2 /* Pointer */
58#define BTF_KIND_ARRAY 3 /* Array */
59#define BTF_KIND_STRUCT 4 /* Struct */
60#define BTF_KIND_UNION 5 /* Union */
61#define BTF_KIND_ENUM 6 /* Enumeration */
62#define BTF_KIND_FWD 7 /* Forward */
63#define BTF_KIND_TYPEDEF 8 /* Typedef */
64#define BTF_KIND_VOLATILE 9 /* Volatile */
65#define BTF_KIND_CONST 10 /* Const */
66#define BTF_KIND_RESTRICT 11 /* Restrict */
67#define BTF_KIND_MAX 11
68#define NR_BTF_KINDS 12
69
70/* For some specific BTF_KIND, "struct btf_type" is immediately
71 * followed by extra data.
72 */
73
74/* BTF_KIND_INT is followed by a u32 and the following
75 * is the 32 bits arrangement:
76 */
77#define BTF_INT_ENCODING(VAL) (((VAL) & 0x0f000000) >> 24)
78#define BTF_INT_OFFSET(VAL) (((VAL & 0x00ff0000)) >> 16)
79#define BTF_INT_BITS(VAL) ((VAL) & 0x0000ffff)
80
81/* Attributes stored in the BTF_INT_ENCODING */
82#define BTF_INT_SIGNED (1 << 0)
83#define BTF_INT_CHAR (1 << 1)
84#define BTF_INT_BOOL (1 << 2)
85
86/* BTF_KIND_ENUM is followed by multiple "struct btf_enum".
87 * The exact number of btf_enum is stored in the vlen (of the
88 * info in "struct btf_type").
89 */
90struct btf_enum {
91 __u32 name_off;
92 __s32 val;
93};
94
95/* BTF_KIND_ARRAY is followed by one "struct btf_array" */
96struct btf_array {
97 __u32 type;
98 __u32 index_type;
99 __u32 nelems;
100};
101
102/* BTF_KIND_STRUCT and BTF_KIND_UNION are followed
103 * by multiple "struct btf_member". The exact number
104 * of btf_member is stored in the vlen (of the info in
105 * "struct btf_type").
106 */
107struct btf_member {
108 __u32 name_off;
109 __u32 type;
110 __u32 offset; /* offset in bits */
111};
112
113#endif /* _UAPI__LINUX_BTF_H__ */
diff --git a/include/uapi/linux/cn_proc.h b/include/uapi/linux/cn_proc.h
index 68ff25414700..db210625cee8 100644
--- a/include/uapi/linux/cn_proc.h
+++ b/include/uapi/linux/cn_proc.h
@@ -116,12 +116,16 @@ struct proc_event {
116 struct coredump_proc_event { 116 struct coredump_proc_event {
117 __kernel_pid_t process_pid; 117 __kernel_pid_t process_pid;
118 __kernel_pid_t process_tgid; 118 __kernel_pid_t process_tgid;
119 __kernel_pid_t parent_pid;
120 __kernel_pid_t parent_tgid;
119 } coredump; 121 } coredump;
120 122
121 struct exit_proc_event { 123 struct exit_proc_event {
122 __kernel_pid_t process_pid; 124 __kernel_pid_t process_pid;
123 __kernel_pid_t process_tgid; 125 __kernel_pid_t process_tgid;
124 __u32 exit_code, exit_signal; 126 __u32 exit_code, exit_signal;
127 __kernel_pid_t parent_pid;
128 __kernel_pid_t parent_tgid;
125 } exit; 129 } exit;
126 130
127 } event_data; 131 } event_data;
diff --git a/include/uapi/linux/dcbnl.h b/include/uapi/linux/dcbnl.h
index 2c0c6453c3f4..60aa2e446698 100644
--- a/include/uapi/linux/dcbnl.h
+++ b/include/uapi/linux/dcbnl.h
@@ -163,6 +163,16 @@ struct ieee_pfc {
163 __u64 indications[IEEE_8021QAZ_MAX_TCS]; 163 __u64 indications[IEEE_8021QAZ_MAX_TCS];
164}; 164};
165 165
166#define IEEE_8021Q_MAX_PRIORITIES 8
167#define DCBX_MAX_BUFFERS 8
168struct dcbnl_buffer {
169 /* priority to buffer mapping */
170 __u8 prio2buffer[IEEE_8021Q_MAX_PRIORITIES];
171 /* buffer size in Bytes */
172 __u32 buffer_size[DCBX_MAX_BUFFERS];
173 __u32 total_size;
174};
175
166/* CEE DCBX std supported values */ 176/* CEE DCBX std supported values */
167#define CEE_DCBX_MAX_PGS 8 177#define CEE_DCBX_MAX_PGS 8
168#define CEE_DCBX_MAX_PRIO 8 178#define CEE_DCBX_MAX_PRIO 8
@@ -406,6 +416,7 @@ enum ieee_attrs {
406 DCB_ATTR_IEEE_MAXRATE, 416 DCB_ATTR_IEEE_MAXRATE,
407 DCB_ATTR_IEEE_QCN, 417 DCB_ATTR_IEEE_QCN,
408 DCB_ATTR_IEEE_QCN_STATS, 418 DCB_ATTR_IEEE_QCN_STATS,
419 DCB_ATTR_DCB_BUFFER,
409 __DCB_ATTR_IEEE_MAX 420 __DCB_ATTR_IEEE_MAX
410}; 421};
411#define DCB_ATTR_IEEE_MAX (__DCB_ATTR_IEEE_MAX - 1) 422#define DCB_ATTR_IEEE_MAX (__DCB_ATTR_IEEE_MAX - 1)
diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h
index 1df65a4c2044..75cb5450c851 100644
--- a/include/uapi/linux/devlink.h
+++ b/include/uapi/linux/devlink.h
@@ -132,6 +132,16 @@ enum devlink_eswitch_encap_mode {
132 DEVLINK_ESWITCH_ENCAP_MODE_BASIC, 132 DEVLINK_ESWITCH_ENCAP_MODE_BASIC,
133}; 133};
134 134
135enum devlink_port_flavour {
136 DEVLINK_PORT_FLAVOUR_PHYSICAL, /* Any kind of a port physically
137 * facing the user.
138 */
139 DEVLINK_PORT_FLAVOUR_CPU, /* CPU port */
140 DEVLINK_PORT_FLAVOUR_DSA, /* Distributed switch architecture
141 * interconnect port.
142 */
143};
144
135enum devlink_attr { 145enum devlink_attr {
136 /* don't change the order or add anything between, this is ABI! */ 146 /* don't change the order or add anything between, this is ABI! */
137 DEVLINK_ATTR_UNSPEC, 147 DEVLINK_ATTR_UNSPEC,
@@ -224,6 +234,10 @@ enum devlink_attr {
224 DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID, /* u64 */ 234 DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID, /* u64 */
225 DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS,/* u64 */ 235 DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS,/* u64 */
226 236
237 DEVLINK_ATTR_PORT_FLAVOUR, /* u16 */
238 DEVLINK_ATTR_PORT_NUMBER, /* u32 */
239 DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER, /* u32 */
240
227 /* add new attributes above here, update the policy in devlink.c */ 241 /* add new attributes above here, update the policy in devlink.c */
228 242
229 __DEVLINK_ATTR_MAX, 243 __DEVLINK_ATTR_MAX,
diff --git a/include/uapi/linux/elf.h b/include/uapi/linux/elf.h
index e2535d6dcec7..4e12c423b9fe 100644
--- a/include/uapi/linux/elf.h
+++ b/include/uapi/linux/elf.h
@@ -421,6 +421,7 @@ typedef struct elf64_shdr {
421#define NT_ARM_SYSTEM_CALL 0x404 /* ARM system call number */ 421#define NT_ARM_SYSTEM_CALL 0x404 /* ARM system call number */
422#define NT_ARM_SVE 0x405 /* ARM Scalable Vector Extension registers */ 422#define NT_ARM_SVE 0x405 /* ARM Scalable Vector Extension registers */
423#define NT_ARC_V2 0x600 /* ARCv2 accumulator/extra registers */ 423#define NT_ARC_V2 0x600 /* ARCv2 accumulator/extra registers */
424#define NT_VMCOREDD 0x700 /* Vmcore Device Dump Note */
424 425
425/* Note header in a PT_NOTE section */ 426/* Note header in a PT_NOTE section */
426typedef struct elf32_note { 427typedef struct elf32_note {
diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h
index d2a8313fabd7..73e01918f996 100644
--- a/include/uapi/linux/fs.h
+++ b/include/uapi/linux/fs.h
@@ -242,6 +242,8 @@ struct fsxattr {
242#define FICLONERANGE _IOW(0x94, 13, struct file_clone_range) 242#define FICLONERANGE _IOW(0x94, 13, struct file_clone_range)
243#define FIDEDUPERANGE _IOWR(0x94, 54, struct file_dedupe_range) 243#define FIDEDUPERANGE _IOWR(0x94, 54, struct file_dedupe_range)
244 244
245#define FSLABEL_MAX 256 /* Max chars for the interface; each fs may differ */
246
245#define FS_IOC_GETFLAGS _IOR('f', 1, long) 247#define FS_IOC_GETFLAGS _IOR('f', 1, long)
246#define FS_IOC_SETFLAGS _IOW('f', 2, long) 248#define FS_IOC_SETFLAGS _IOW('f', 2, long)
247#define FS_IOC_GETVERSION _IOR('v', 1, long) 249#define FS_IOC_GETVERSION _IOR('v', 1, long)
@@ -251,8 +253,10 @@ struct fsxattr {
251#define FS_IOC32_SETFLAGS _IOW('f', 2, int) 253#define FS_IOC32_SETFLAGS _IOW('f', 2, int)
252#define FS_IOC32_GETVERSION _IOR('v', 1, int) 254#define FS_IOC32_GETVERSION _IOR('v', 1, int)
253#define FS_IOC32_SETVERSION _IOW('v', 2, int) 255#define FS_IOC32_SETVERSION _IOW('v', 2, int)
254#define FS_IOC_FSGETXATTR _IOR ('X', 31, struct fsxattr) 256#define FS_IOC_FSGETXATTR _IOR('X', 31, struct fsxattr)
255#define FS_IOC_FSSETXATTR _IOW ('X', 32, struct fsxattr) 257#define FS_IOC_FSSETXATTR _IOW('X', 32, struct fsxattr)
258#define FS_IOC_GETFSLABEL _IOR(0x94, 49, char[FSLABEL_MAX])
259#define FS_IOC_SETFSLABEL _IOW(0x94, 50, char[FSLABEL_MAX])
256 260
257/* 261/*
258 * File system encryption support 262 * File system encryption support
@@ -275,6 +279,8 @@ struct fsxattr {
275#define FS_ENCRYPTION_MODE_AES_256_CTS 4 279#define FS_ENCRYPTION_MODE_AES_256_CTS 4
276#define FS_ENCRYPTION_MODE_AES_128_CBC 5 280#define FS_ENCRYPTION_MODE_AES_128_CBC 5
277#define FS_ENCRYPTION_MODE_AES_128_CTS 6 281#define FS_ENCRYPTION_MODE_AES_128_CTS 6
282#define FS_ENCRYPTION_MODE_SPECK128_256_XTS 7
283#define FS_ENCRYPTION_MODE_SPECK128_256_CTS 8
278 284
279struct fscrypt_policy { 285struct fscrypt_policy {
280 __u8 version; 286 __u8 version;
diff --git a/include/uapi/linux/fuse.h b/include/uapi/linux/fuse.h
index 4b5001c57f46..92fa24c24c92 100644
--- a/include/uapi/linux/fuse.h
+++ b/include/uapi/linux/fuse.h
@@ -113,6 +113,9 @@
113 * 7.26 113 * 7.26
114 * - add FUSE_HANDLE_KILLPRIV 114 * - add FUSE_HANDLE_KILLPRIV
115 * - add FUSE_POSIX_ACL 115 * - add FUSE_POSIX_ACL
116 *
117 * 7.27
118 * - add FUSE_ABORT_ERROR
116 */ 119 */
117 120
118#ifndef _LINUX_FUSE_H 121#ifndef _LINUX_FUSE_H
@@ -148,7 +151,7 @@
148#define FUSE_KERNEL_VERSION 7 151#define FUSE_KERNEL_VERSION 7
149 152
150/** Minor version number of this interface */ 153/** Minor version number of this interface */
151#define FUSE_KERNEL_MINOR_VERSION 26 154#define FUSE_KERNEL_MINOR_VERSION 27
152 155
153/** The node ID of the root inode */ 156/** The node ID of the root inode */
154#define FUSE_ROOT_ID 1 157#define FUSE_ROOT_ID 1
@@ -245,6 +248,7 @@ struct fuse_file_lock {
245 * FUSE_PARALLEL_DIROPS: allow parallel lookups and readdir 248 * FUSE_PARALLEL_DIROPS: allow parallel lookups and readdir
246 * FUSE_HANDLE_KILLPRIV: fs handles killing suid/sgid/cap on write/chown/trunc 249 * FUSE_HANDLE_KILLPRIV: fs handles killing suid/sgid/cap on write/chown/trunc
247 * FUSE_POSIX_ACL: filesystem supports posix acls 250 * FUSE_POSIX_ACL: filesystem supports posix acls
251 * FUSE_ABORT_ERROR: reading the device after abort returns ECONNABORTED
248 */ 252 */
249#define FUSE_ASYNC_READ (1 << 0) 253#define FUSE_ASYNC_READ (1 << 0)
250#define FUSE_POSIX_LOCKS (1 << 1) 254#define FUSE_POSIX_LOCKS (1 << 1)
@@ -267,6 +271,7 @@ struct fuse_file_lock {
267#define FUSE_PARALLEL_DIROPS (1 << 18) 271#define FUSE_PARALLEL_DIROPS (1 << 18)
268#define FUSE_HANDLE_KILLPRIV (1 << 19) 272#define FUSE_HANDLE_KILLPRIV (1 << 19)
269#define FUSE_POSIX_ACL (1 << 20) 273#define FUSE_POSIX_ACL (1 << 20)
274#define FUSE_ABORT_ERROR (1 << 21)
270 275
271/** 276/**
272 * CUSE INIT request/reply flags 277 * CUSE INIT request/reply flags
diff --git a/include/uapi/linux/if_addr.h b/include/uapi/linux/if_addr.h
index 2ef053d265de..ebaf5701c9db 100644
--- a/include/uapi/linux/if_addr.h
+++ b/include/uapi/linux/if_addr.h
@@ -33,6 +33,7 @@ enum {
33 IFA_CACHEINFO, 33 IFA_CACHEINFO,
34 IFA_MULTICAST, 34 IFA_MULTICAST,
35 IFA_FLAGS, 35 IFA_FLAGS,
36 IFA_RT_PRIORITY, /* u32, priority/metric for prefix route */
36 __IFA_MAX, 37 __IFA_MAX,
37}; 38};
38 39
diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h
index 68699f654118..cf01b6824244 100644
--- a/include/uapi/linux/if_link.h
+++ b/include/uapi/linux/if_link.h
@@ -333,6 +333,7 @@ enum {
333 IFLA_BRPORT_BCAST_FLOOD, 333 IFLA_BRPORT_BCAST_FLOOD,
334 IFLA_BRPORT_GROUP_FWD_MASK, 334 IFLA_BRPORT_GROUP_FWD_MASK,
335 IFLA_BRPORT_NEIGH_SUPPRESS, 335 IFLA_BRPORT_NEIGH_SUPPRESS,
336 IFLA_BRPORT_ISOLATED,
336 __IFLA_BRPORT_MAX 337 __IFLA_BRPORT_MAX
337}; 338};
338#define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1) 339#define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1)
@@ -516,6 +517,7 @@ enum {
516 IFLA_VXLAN_COLLECT_METADATA, 517 IFLA_VXLAN_COLLECT_METADATA,
517 IFLA_VXLAN_LABEL, 518 IFLA_VXLAN_LABEL,
518 IFLA_VXLAN_GPE, 519 IFLA_VXLAN_GPE,
520 IFLA_VXLAN_TTL_INHERIT,
519 __IFLA_VXLAN_MAX 521 __IFLA_VXLAN_MAX
520}; 522};
521#define IFLA_VXLAN_MAX (__IFLA_VXLAN_MAX - 1) 523#define IFLA_VXLAN_MAX (__IFLA_VXLAN_MAX - 1)
diff --git a/include/uapi/linux/if_xdp.h b/include/uapi/linux/if_xdp.h
new file mode 100644
index 000000000000..1fa0e977ea8d
--- /dev/null
+++ b/include/uapi/linux/if_xdp.h
@@ -0,0 +1,78 @@
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2/*
3 * if_xdp: XDP socket user-space interface
4 * Copyright(c) 2018 Intel Corporation.
5 *
6 * Author(s): Björn Töpel <bjorn.topel@intel.com>
7 * Magnus Karlsson <magnus.karlsson@intel.com>
8 */
9
10#ifndef _LINUX_IF_XDP_H
11#define _LINUX_IF_XDP_H
12
13#include <linux/types.h>
14
15/* Options for the sxdp_flags field */
16#define XDP_SHARED_UMEM (1 << 0)
17#define XDP_COPY (1 << 1) /* Force copy-mode */
18#define XDP_ZEROCOPY (1 << 2) /* Force zero-copy mode */
19
20struct sockaddr_xdp {
21 __u16 sxdp_family;
22 __u16 sxdp_flags;
23 __u32 sxdp_ifindex;
24 __u32 sxdp_queue_id;
25 __u32 sxdp_shared_umem_fd;
26};
27
28struct xdp_ring_offset {
29 __u64 producer;
30 __u64 consumer;
31 __u64 desc;
32};
33
34struct xdp_mmap_offsets {
35 struct xdp_ring_offset rx;
36 struct xdp_ring_offset tx;
37 struct xdp_ring_offset fr; /* Fill */
38 struct xdp_ring_offset cr; /* Completion */
39};
40
41/* XDP socket options */
42#define XDP_MMAP_OFFSETS 1
43#define XDP_RX_RING 2
44#define XDP_TX_RING 3
45#define XDP_UMEM_REG 4
46#define XDP_UMEM_FILL_RING 5
47#define XDP_UMEM_COMPLETION_RING 6
48#define XDP_STATISTICS 7
49
50struct xdp_umem_reg {
51 __u64 addr; /* Start of packet data area */
52 __u64 len; /* Length of packet data area */
53 __u32 chunk_size;
54 __u32 headroom;
55};
56
57struct xdp_statistics {
58 __u64 rx_dropped; /* Dropped for reasons other than invalid desc */
59 __u64 rx_invalid_descs; /* Dropped due to invalid descriptor */
60 __u64 tx_invalid_descs; /* Dropped due to invalid descriptor */
61};
62
63/* Pgoff for mmaping the rings */
64#define XDP_PGOFF_RX_RING 0
65#define XDP_PGOFF_TX_RING 0x80000000
66#define XDP_UMEM_PGOFF_FILL_RING 0x100000000
67#define XDP_UMEM_PGOFF_COMPLETION_RING 0x180000000
68
69/* Rx/Tx descriptor */
70struct xdp_desc {
71 __u64 addr;
72 __u32 len;
73 __u32 options;
74};
75
76/* UMEM descriptor is __u64 */
77
78#endif /* _LINUX_IF_XDP_H */
diff --git a/include/uapi/linux/kernel-page-flags.h b/include/uapi/linux/kernel-page-flags.h
index fa139841ec18..21b9113c69da 100644
--- a/include/uapi/linux/kernel-page-flags.h
+++ b/include/uapi/linux/kernel-page-flags.h
@@ -35,6 +35,6 @@
35#define KPF_BALLOON 23 35#define KPF_BALLOON 23
36#define KPF_ZERO_PAGE 24 36#define KPF_ZERO_PAGE 24
37#define KPF_IDLE 25 37#define KPF_IDLE 25
38 38#define KPF_PGTABLE 26
39 39
40#endif /* _UAPILINUX_KERNEL_PAGE_FLAGS_H */ 40#endif /* _UAPILINUX_KERNEL_PAGE_FLAGS_H */
diff --git a/include/uapi/linux/lirc.h b/include/uapi/linux/lirc.h
index f189931042a7..6b319581882f 100644
--- a/include/uapi/linux/lirc.h
+++ b/include/uapi/linux/lirc.h
@@ -134,6 +134,12 @@
134#define LIRC_SET_WIDEBAND_RECEIVER _IOW('i', 0x00000023, __u32) 134#define LIRC_SET_WIDEBAND_RECEIVER _IOW('i', 0x00000023, __u32)
135 135
136/* 136/*
137 * Return the recording timeout, which is either set by
138 * the ioctl LIRC_SET_REC_TIMEOUT or by the kernel after setting the protocols.
139 */
140#define LIRC_GET_REC_TIMEOUT _IOR('i', 0x00000024, __u32)
141
142/*
137 * struct lirc_scancode - decoded scancode with protocol for use with 143 * struct lirc_scancode - decoded scancode with protocol for use with
138 * LIRC_MODE_SCANCODE 144 * LIRC_MODE_SCANCODE
139 * 145 *
diff --git a/include/uapi/linux/ncp.h b/include/uapi/linux/ncp.h
deleted file mode 100644
index ca6f3d42c88f..000000000000
--- a/include/uapi/linux/ncp.h
+++ /dev/null
@@ -1,202 +0,0 @@
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2/*
3 * ncp.h
4 *
5 * Copyright (C) 1995 by Volker Lendecke
6 * Modified for sparc by J.F. Chadima
7 * Modified for __constant_ntoh by Frank A. Vorstenbosch
8 *
9 */
10
11#ifndef _LINUX_NCP_H
12#define _LINUX_NCP_H
13
14#include <linux/types.h>
15
16#define NCP_PTYPE (0x11)
17#define NCP_PORT (0x0451)
18
19#define NCP_ALLOC_SLOT_REQUEST (0x1111)
20#define NCP_REQUEST (0x2222)
21#define NCP_DEALLOC_SLOT_REQUEST (0x5555)
22
23struct ncp_request_header {
24 __u16 type;
25 __u8 sequence;
26 __u8 conn_low;
27 __u8 task;
28 __u8 conn_high;
29 __u8 function;
30 __u8 data[0];
31} __attribute__((packed));
32
33#define NCP_REPLY (0x3333)
34#define NCP_WATCHDOG (0x3E3E)
35#define NCP_POSITIVE_ACK (0x9999)
36
37struct ncp_reply_header {
38 __u16 type;
39 __u8 sequence;
40 __u8 conn_low;
41 __u8 task;
42 __u8 conn_high;
43 __u8 completion_code;
44 __u8 connection_state;
45 __u8 data[0];
46} __attribute__((packed));
47
48#define NCP_VOLNAME_LEN (16)
49#define NCP_NUMBER_OF_VOLUMES (256)
50struct ncp_volume_info {
51 __u32 total_blocks;
52 __u32 free_blocks;
53 __u32 purgeable_blocks;
54 __u32 not_yet_purgeable_blocks;
55 __u32 total_dir_entries;
56 __u32 available_dir_entries;
57 __u8 sectors_per_block;
58 char volume_name[NCP_VOLNAME_LEN + 1];
59};
60
61#define AR_READ (cpu_to_le16(1))
62#define AR_WRITE (cpu_to_le16(2))
63#define AR_EXCLUSIVE (cpu_to_le16(0x20))
64
65#define NCP_FILE_ID_LEN 6
66
67/* Defines for Name Spaces */
68#define NW_NS_DOS 0
69#define NW_NS_MAC 1
70#define NW_NS_NFS 2
71#define NW_NS_FTAM 3
72#define NW_NS_OS2 4
73
74/* Defines for ReturnInformationMask */
75#define RIM_NAME (cpu_to_le32(1))
76#define RIM_SPACE_ALLOCATED (cpu_to_le32(2))
77#define RIM_ATTRIBUTES (cpu_to_le32(4))
78#define RIM_DATA_SIZE (cpu_to_le32(8))
79#define RIM_TOTAL_SIZE (cpu_to_le32(0x10))
80#define RIM_EXT_ATTR_INFO (cpu_to_le32(0x20))
81#define RIM_ARCHIVE (cpu_to_le32(0x40))
82#define RIM_MODIFY (cpu_to_le32(0x80))
83#define RIM_CREATION (cpu_to_le32(0x100))
84#define RIM_OWNING_NAMESPACE (cpu_to_le32(0x200))
85#define RIM_DIRECTORY (cpu_to_le32(0x400))
86#define RIM_RIGHTS (cpu_to_le32(0x800))
87#define RIM_ALL (cpu_to_le32(0xFFF))
88#define RIM_COMPRESSED_INFO (cpu_to_le32(0x80000000))
89
90/* Defines for NSInfoBitMask */
91#define NSIBM_NFS_NAME 0x0001
92#define NSIBM_NFS_MODE 0x0002
93#define NSIBM_NFS_GID 0x0004
94#define NSIBM_NFS_NLINKS 0x0008
95#define NSIBM_NFS_RDEV 0x0010
96#define NSIBM_NFS_LINK 0x0020
97#define NSIBM_NFS_CREATED 0x0040
98#define NSIBM_NFS_UID 0x0080
99#define NSIBM_NFS_ACSFLAG 0x0100
100#define NSIBM_NFS_MYFLAG 0x0200
101
102/* open/create modes */
103#define OC_MODE_OPEN 0x01
104#define OC_MODE_TRUNCATE 0x02
105#define OC_MODE_REPLACE 0x02
106#define OC_MODE_CREATE 0x08
107
108/* open/create results */
109#define OC_ACTION_NONE 0x00
110#define OC_ACTION_OPEN 0x01
111#define OC_ACTION_CREATE 0x02
112#define OC_ACTION_TRUNCATE 0x04
113#define OC_ACTION_REPLACE 0x04
114
115/* access rights attributes */
116#ifndef AR_READ_ONLY
117#define AR_READ_ONLY 0x0001
118#define AR_WRITE_ONLY 0x0002
119#define AR_DENY_READ 0x0004
120#define AR_DENY_WRITE 0x0008
121#define AR_COMPATIBILITY 0x0010
122#define AR_WRITE_THROUGH 0x0040
123#define AR_OPEN_COMPRESSED 0x0100
124#endif
125
126struct nw_nfs_info {
127 __u32 mode;
128 __u32 rdev;
129};
130
131struct nw_info_struct {
132 __u32 spaceAlloc;
133 __le32 attributes;
134 __u16 flags;
135 __le32 dataStreamSize;
136 __le32 totalStreamSize;
137 __u16 numberOfStreams;
138 __le16 creationTime;
139 __le16 creationDate;
140 __u32 creatorID;
141 __le16 modifyTime;
142 __le16 modifyDate;
143 __u32 modifierID;
144 __le16 lastAccessDate;
145 __u16 archiveTime;
146 __u16 archiveDate;
147 __u32 archiverID;
148 __u16 inheritedRightsMask;
149 __le32 dirEntNum;
150 __le32 DosDirNum;
151 __u32 volNumber;
152 __u32 EADataSize;
153 __u32 EAKeyCount;
154 __u32 EAKeySize;
155 __u32 NSCreator;
156 __u8 nameLen;
157 __u8 entryName[256];
158 /* libncp may depend on there being nothing after entryName */
159#ifdef __KERNEL__
160 struct nw_nfs_info nfs;
161#endif
162} __attribute__((packed));
163
164/* modify mask - use with MODIFY_DOS_INFO structure */
165#define DM_ATTRIBUTES (cpu_to_le32(0x02))
166#define DM_CREATE_DATE (cpu_to_le32(0x04))
167#define DM_CREATE_TIME (cpu_to_le32(0x08))
168#define DM_CREATOR_ID (cpu_to_le32(0x10))
169#define DM_ARCHIVE_DATE (cpu_to_le32(0x20))
170#define DM_ARCHIVE_TIME (cpu_to_le32(0x40))
171#define DM_ARCHIVER_ID (cpu_to_le32(0x80))
172#define DM_MODIFY_DATE (cpu_to_le32(0x0100))
173#define DM_MODIFY_TIME (cpu_to_le32(0x0200))
174#define DM_MODIFIER_ID (cpu_to_le32(0x0400))
175#define DM_LAST_ACCESS_DATE (cpu_to_le32(0x0800))
176#define DM_INHERITED_RIGHTS_MASK (cpu_to_le32(0x1000))
177#define DM_MAXIMUM_SPACE (cpu_to_le32(0x2000))
178
179struct nw_modify_dos_info {
180 __le32 attributes;
181 __le16 creationDate;
182 __le16 creationTime;
183 __u32 creatorID;
184 __le16 modifyDate;
185 __le16 modifyTime;
186 __u32 modifierID;
187 __u16 archiveDate;
188 __u16 archiveTime;
189 __u32 archiverID;
190 __le16 lastAccessDate;
191 __u16 inheritanceGrantMask;
192 __u16 inheritanceRevokeMask;
193 __u32 maximumSpace;
194} __attribute__((packed));
195
196struct nw_search_sequence {
197 __u8 volNumber;
198 __u32 dirBase;
199 __u32 sequence;
200} __attribute__((packed));
201
202#endif /* _LINUX_NCP_H */
diff --git a/include/uapi/linux/ncp_fs.h b/include/uapi/linux/ncp_fs.h
deleted file mode 100644
index e76a44229d2f..000000000000
--- a/include/uapi/linux/ncp_fs.h
+++ /dev/null
@@ -1,147 +0,0 @@
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2/*
3 * ncp_fs.h
4 *
5 * Copyright (C) 1995, 1996 by Volker Lendecke
6 *
7 */
8
9#ifndef _LINUX_NCP_FS_H
10#define _LINUX_NCP_FS_H
11
12#include <linux/fs.h>
13#include <linux/in.h>
14#include <linux/types.h>
15#include <linux/magic.h>
16
17#include <linux/ipx.h>
18#include <linux/ncp_no.h>
19
20/*
21 * ioctl commands
22 */
23
24struct ncp_ioctl_request {
25 unsigned int function;
26 unsigned int size;
27 char __user *data;
28};
29
30struct ncp_fs_info {
31 int version;
32 struct sockaddr_ipx addr;
33 __kernel_uid_t mounted_uid;
34 int connection; /* Connection number the server assigned us */
35 int buffer_size; /* The negotiated buffer size, to be
36 used for read/write requests! */
37
38 int volume_number;
39 __le32 directory_id;
40};
41
42struct ncp_fs_info_v2 {
43 int version;
44 unsigned long mounted_uid;
45 unsigned int connection;
46 unsigned int buffer_size;
47
48 unsigned int volume_number;
49 __le32 directory_id;
50
51 __u32 dummy1;
52 __u32 dummy2;
53 __u32 dummy3;
54};
55
56struct ncp_sign_init
57{
58 char sign_root[8];
59 char sign_last[16];
60};
61
62struct ncp_lock_ioctl
63{
64#define NCP_LOCK_LOG 0
65#define NCP_LOCK_SH 1
66#define NCP_LOCK_EX 2
67#define NCP_LOCK_CLEAR 256
68 int cmd;
69 int origin;
70 unsigned int offset;
71 unsigned int length;
72#define NCP_LOCK_DEFAULT_TIMEOUT 18
73#define NCP_LOCK_MAX_TIMEOUT 180
74 int timeout;
75};
76
77struct ncp_setroot_ioctl
78{
79 int volNumber;
80 int namespace;
81 __le32 dirEntNum;
82};
83
84struct ncp_objectname_ioctl
85{
86#define NCP_AUTH_NONE 0x00
87#define NCP_AUTH_BIND 0x31
88#define NCP_AUTH_NDS 0x32
89 int auth_type;
90 size_t object_name_len;
91 void __user * object_name; /* a userspace data, in most cases user name */
92};
93
94struct ncp_privatedata_ioctl
95{
96 size_t len;
97 void __user * data; /* ~1000 for NDS */
98};
99
100/* NLS charsets by ioctl */
101#define NCP_IOCSNAME_LEN 20
102struct ncp_nls_ioctl
103{
104 unsigned char codepage[NCP_IOCSNAME_LEN+1];
105 unsigned char iocharset[NCP_IOCSNAME_LEN+1];
106};
107
108#define NCP_IOC_NCPREQUEST _IOR('n', 1, struct ncp_ioctl_request)
109#define NCP_IOC_GETMOUNTUID _IOW('n', 2, __kernel_old_uid_t)
110#define NCP_IOC_GETMOUNTUID2 _IOW('n', 2, unsigned long)
111
112#define NCP_IOC_CONN_LOGGED_IN _IO('n', 3)
113
114#define NCP_GET_FS_INFO_VERSION (1)
115#define NCP_IOC_GET_FS_INFO _IOWR('n', 4, struct ncp_fs_info)
116#define NCP_GET_FS_INFO_VERSION_V2 (2)
117#define NCP_IOC_GET_FS_INFO_V2 _IOWR('n', 4, struct ncp_fs_info_v2)
118
119#define NCP_IOC_SIGN_INIT _IOR('n', 5, struct ncp_sign_init)
120#define NCP_IOC_SIGN_WANTED _IOR('n', 6, int)
121#define NCP_IOC_SET_SIGN_WANTED _IOW('n', 6, int)
122
123#define NCP_IOC_LOCKUNLOCK _IOR('n', 7, struct ncp_lock_ioctl)
124
125#define NCP_IOC_GETROOT _IOW('n', 8, struct ncp_setroot_ioctl)
126#define NCP_IOC_SETROOT _IOR('n', 8, struct ncp_setroot_ioctl)
127
128#define NCP_IOC_GETOBJECTNAME _IOWR('n', 9, struct ncp_objectname_ioctl)
129#define NCP_IOC_SETOBJECTNAME _IOR('n', 9, struct ncp_objectname_ioctl)
130#define NCP_IOC_GETPRIVATEDATA _IOWR('n', 10, struct ncp_privatedata_ioctl)
131#define NCP_IOC_SETPRIVATEDATA _IOR('n', 10, struct ncp_privatedata_ioctl)
132
133#define NCP_IOC_GETCHARSETS _IOWR('n', 11, struct ncp_nls_ioctl)
134#define NCP_IOC_SETCHARSETS _IOR('n', 11, struct ncp_nls_ioctl)
135
136#define NCP_IOC_GETDENTRYTTL _IOW('n', 12, __u32)
137#define NCP_IOC_SETDENTRYTTL _IOR('n', 12, __u32)
138
139/*
140 * The packet size to allocate. One page should be enough.
141 */
142#define NCP_PACKET_SIZE 4070
143
144#define NCP_MAXPATHLEN 255
145#define NCP_MAXNAMELEN 14
146
147#endif /* _LINUX_NCP_FS_H */
diff --git a/include/uapi/linux/ncp_mount.h b/include/uapi/linux/ncp_mount.h
deleted file mode 100644
index 9bdbcd68c329..000000000000
--- a/include/uapi/linux/ncp_mount.h
+++ /dev/null
@@ -1,72 +0,0 @@
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2/*
3 * ncp_mount.h
4 *
5 * Copyright (C) 1995, 1996 by Volker Lendecke
6 *
7 */
8
9#ifndef _LINUX_NCP_MOUNT_H
10#define _LINUX_NCP_MOUNT_H
11
12#include <linux/types.h>
13#include <linux/ncp.h>
14
15#define NCP_MOUNT_VERSION 3 /* Binary */
16
17/* Values for flags */
18#define NCP_MOUNT_SOFT 0x0001
19#define NCP_MOUNT_INTR 0x0002
20#define NCP_MOUNT_STRONG 0x0004 /* enable delete/rename of r/o files */
21#define NCP_MOUNT_NO_OS2 0x0008 /* do not use OS/2 (LONG) namespace */
22#define NCP_MOUNT_NO_NFS 0x0010 /* do not use NFS namespace */
23#define NCP_MOUNT_EXTRAS 0x0020
24#define NCP_MOUNT_SYMLINKS 0x0040 /* enable symlinks */
25#define NCP_MOUNT_NFS_EXTRAS 0x0080 /* Enable use of NFS NS meta-info */
26
27struct ncp_mount_data {
28 int version;
29 unsigned int ncp_fd; /* The socket to the ncp port */
30 __kernel_uid_t mounted_uid; /* Who may umount() this filesystem? */
31 __kernel_pid_t wdog_pid; /* Who cares for our watchdog packets? */
32
33 unsigned char mounted_vol[NCP_VOLNAME_LEN + 1];
34 unsigned int time_out; /* How long should I wait after
35 sending a NCP request? */
36 unsigned int retry_count; /* And how often should I retry? */
37 unsigned int flags;
38
39 __kernel_uid_t uid;
40 __kernel_gid_t gid;
41 __kernel_mode_t file_mode;
42 __kernel_mode_t dir_mode;
43};
44
45#define NCP_MOUNT_VERSION_V4 (4) /* Binary or text */
46
47struct ncp_mount_data_v4 {
48 int version;
49 unsigned long flags; /* NCP_MOUNT_* flags */
50 /* MIPS uses long __kernel_uid_t, but... */
51 /* we neever pass -1, so it is safe */
52 unsigned long mounted_uid; /* Who may umount() this filesystem? */
53 /* MIPS uses long __kernel_pid_t */
54 long wdog_pid; /* Who cares for our watchdog packets? */
55
56 unsigned int ncp_fd; /* The socket to the ncp port */
57 unsigned int time_out; /* How long should I wait after
58 sending a NCP request? */
59 unsigned int retry_count; /* And how often should I retry? */
60
61 /* MIPS uses long __kernel_uid_t... */
62 /* we never pass -1, so it is safe */
63 unsigned long uid;
64 unsigned long gid;
65 /* MIPS uses unsigned long __kernel_mode_t */
66 unsigned long file_mode;
67 unsigned long dir_mode;
68};
69
70#define NCP_MOUNT_VERSION_V5 (5) /* Text only */
71
72#endif
diff --git a/include/uapi/linux/ncp_no.h b/include/uapi/linux/ncp_no.h
deleted file mode 100644
index 654d7c7f5d92..000000000000
--- a/include/uapi/linux/ncp_no.h
+++ /dev/null
@@ -1,20 +0,0 @@
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2#ifndef _NCP_NO
3#define _NCP_NO
4
5/* these define the attribute byte as seen by NCP */
6#define aRONLY (__cpu_to_le32(1))
7#define aHIDDEN (__cpu_to_le32(2))
8#define aSYSTEM (__cpu_to_le32(4))
9#define aEXECUTE (__cpu_to_le32(8))
10#define aDIR (__cpu_to_le32(0x10))
11#define aARCH (__cpu_to_le32(0x20))
12#define aSHARED (__cpu_to_le32(0x80))
13#define aDONTSUBALLOCATE (__cpu_to_le32(1L<<11))
14#define aTRANSACTIONAL (__cpu_to_le32(1L<<12))
15#define aPURGE (__cpu_to_le32(1L<<16))
16#define aRENAMEINHIBIT (__cpu_to_le32(1L<<17))
17#define aDELETEINHIBIT (__cpu_to_le32(1L<<18))
18#define aDONTCOMPRESS (__cpu_to_le32(1L<<27))
19
20#endif /* _NCP_NO */
diff --git a/include/uapi/linux/netfilter/nf_nat.h b/include/uapi/linux/netfilter/nf_nat.h
index a33000da7229..4a95c0db14d4 100644
--- a/include/uapi/linux/netfilter/nf_nat.h
+++ b/include/uapi/linux/netfilter/nf_nat.h
@@ -10,6 +10,7 @@
10#define NF_NAT_RANGE_PROTO_RANDOM (1 << 2) 10#define NF_NAT_RANGE_PROTO_RANDOM (1 << 2)
11#define NF_NAT_RANGE_PERSISTENT (1 << 3) 11#define NF_NAT_RANGE_PERSISTENT (1 << 3)
12#define NF_NAT_RANGE_PROTO_RANDOM_FULLY (1 << 4) 12#define NF_NAT_RANGE_PROTO_RANDOM_FULLY (1 << 4)
13#define NF_NAT_RANGE_PROTO_OFFSET (1 << 5)
13 14
14#define NF_NAT_RANGE_PROTO_RANDOM_ALL \ 15#define NF_NAT_RANGE_PROTO_RANDOM_ALL \
15 (NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PROTO_RANDOM_FULLY) 16 (NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PROTO_RANDOM_FULLY)
@@ -17,7 +18,7 @@
17#define NF_NAT_RANGE_MASK \ 18#define NF_NAT_RANGE_MASK \
18 (NF_NAT_RANGE_MAP_IPS | NF_NAT_RANGE_PROTO_SPECIFIED | \ 19 (NF_NAT_RANGE_MAP_IPS | NF_NAT_RANGE_PROTO_SPECIFIED | \
19 NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PERSISTENT | \ 20 NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PERSISTENT | \
20 NF_NAT_RANGE_PROTO_RANDOM_FULLY) 21 NF_NAT_RANGE_PROTO_RANDOM_FULLY | NF_NAT_RANGE_PROTO_OFFSET)
21 22
22struct nf_nat_ipv4_range { 23struct nf_nat_ipv4_range {
23 unsigned int flags; 24 unsigned int flags;
@@ -40,4 +41,13 @@ struct nf_nat_range {
40 union nf_conntrack_man_proto max_proto; 41 union nf_conntrack_man_proto max_proto;
41}; 42};
42 43
44struct nf_nat_range2 {
45 unsigned int flags;
46 union nf_inet_addr min_addr;
47 union nf_inet_addr max_addr;
48 union nf_conntrack_man_proto min_proto;
49 union nf_conntrack_man_proto max_proto;
50 union nf_conntrack_man_proto base_proto;
51};
52
43#endif /* _NETFILTER_NF_NAT_H */ 53#endif /* _NETFILTER_NF_NAT_H */
diff --git a/include/uapi/linux/netfilter/nf_osf.h b/include/uapi/linux/netfilter/nf_osf.h
new file mode 100644
index 000000000000..8f2f2f403183
--- /dev/null
+++ b/include/uapi/linux/netfilter/nf_osf.h
@@ -0,0 +1,86 @@
1#ifndef _NF_OSF_H
2#define _NF_OSF_H
3
4#include <linux/types.h>
5
6#define MAXGENRELEN 32
7
8#define NF_OSF_GENRE (1 << 0)
9#define NF_OSF_TTL (1 << 1)
10#define NF_OSF_LOG (1 << 2)
11#define NF_OSF_INVERT (1 << 3)
12
13#define NF_OSF_LOGLEVEL_ALL 0 /* log all matched fingerprints */
14#define NF_OSF_LOGLEVEL_FIRST 1 /* log only the first matced fingerprint */
15#define NF_OSF_LOGLEVEL_ALL_KNOWN 2 /* do not log unknown packets */
16
17#define NF_OSF_TTL_TRUE 0 /* True ip and fingerprint TTL comparison */
18
19/* Do not compare ip and fingerprint TTL at all */
20#define NF_OSF_TTL_NOCHECK 2
21
22/* Wildcard MSS (kind of).
23 * It is used to implement a state machine for the different wildcard values
24 * of the MSS and window sizes.
25 */
26struct nf_osf_wc {
27 __u32 wc;
28 __u32 val;
29};
30
31/* This struct represents IANA options
32 * http://www.iana.org/assignments/tcp-parameters
33 */
34struct nf_osf_opt {
35 __u16 kind, length;
36 struct nf_osf_wc wc;
37};
38
39struct nf_osf_info {
40 char genre[MAXGENRELEN];
41 __u32 len;
42 __u32 flags;
43 __u32 loglevel;
44 __u32 ttl;
45};
46
47struct nf_osf_user_finger {
48 struct nf_osf_wc wss;
49
50 __u8 ttl, df;
51 __u16 ss, mss;
52 __u16 opt_num;
53
54 char genre[MAXGENRELEN];
55 char version[MAXGENRELEN];
56 char subtype[MAXGENRELEN];
57
58 /* MAX_IPOPTLEN is maximum if all options are NOPs or EOLs */
59 struct nf_osf_opt opt[MAX_IPOPTLEN];
60};
61
62struct nf_osf_nlmsg {
63 struct nf_osf_user_finger f;
64 struct iphdr ip;
65 struct tcphdr tcp;
66};
67
68/* Defines for IANA option kinds */
69enum iana_options {
70 OSFOPT_EOL = 0, /* End of options */
71 OSFOPT_NOP, /* NOP */
72 OSFOPT_MSS, /* Maximum segment size */
73 OSFOPT_WSO, /* Window scale option */
74 OSFOPT_SACKP, /* SACK permitted */
75 OSFOPT_SACK, /* SACK */
76 OSFOPT_ECHO,
77 OSFOPT_ECHOREPLY,
78 OSFOPT_TS, /* Timestamp option */
79 OSFOPT_POCP, /* Partial Order Connection Permitted */
80 OSFOPT_POSP, /* Partial Order Service Profile */
81
82 /* Others are not used in the current OSF */
83 OSFOPT_EMPTY = 255,
84};
85
86#endif /* _NF_OSF_H */
diff --git a/include/uapi/linux/netfilter/nf_tables.h b/include/uapi/linux/netfilter/nf_tables.h
index 6a3d653d5b27..ae00a3c49b8a 100644
--- a/include/uapi/linux/netfilter/nf_tables.h
+++ b/include/uapi/linux/netfilter/nf_tables.h
@@ -831,7 +831,9 @@ enum nft_rt_keys {
831 NFT_RT_NEXTHOP4, 831 NFT_RT_NEXTHOP4,
832 NFT_RT_NEXTHOP6, 832 NFT_RT_NEXTHOP6,
833 NFT_RT_TCPMSS, 833 NFT_RT_TCPMSS,
834 __NFT_RT_MAX
834}; 835};
836#define NFT_RT_MAX (__NFT_RT_MAX - 1)
835 837
836/** 838/**
837 * enum nft_hash_types - nf_tables hash expression types 839 * enum nft_hash_types - nf_tables hash expression types
@@ -854,6 +856,8 @@ enum nft_hash_types {
854 * @NFTA_HASH_SEED: seed value (NLA_U32) 856 * @NFTA_HASH_SEED: seed value (NLA_U32)
855 * @NFTA_HASH_OFFSET: add this offset value to hash result (NLA_U32) 857 * @NFTA_HASH_OFFSET: add this offset value to hash result (NLA_U32)
856 * @NFTA_HASH_TYPE: hash operation (NLA_U32: nft_hash_types) 858 * @NFTA_HASH_TYPE: hash operation (NLA_U32: nft_hash_types)
859 * @NFTA_HASH_SET_NAME: name of the map to lookup (NLA_STRING)
860 * @NFTA_HASH_SET_ID: id of the map (NLA_U32)
857 */ 861 */
858enum nft_hash_attributes { 862enum nft_hash_attributes {
859 NFTA_HASH_UNSPEC, 863 NFTA_HASH_UNSPEC,
@@ -864,6 +868,8 @@ enum nft_hash_attributes {
864 NFTA_HASH_SEED, 868 NFTA_HASH_SEED,
865 NFTA_HASH_OFFSET, 869 NFTA_HASH_OFFSET,
866 NFTA_HASH_TYPE, 870 NFTA_HASH_TYPE,
871 NFTA_HASH_SET_NAME,
872 NFTA_HASH_SET_ID,
867 __NFTA_HASH_MAX, 873 __NFTA_HASH_MAX,
868}; 874};
869#define NFTA_HASH_MAX (__NFTA_HASH_MAX - 1) 875#define NFTA_HASH_MAX (__NFTA_HASH_MAX - 1)
@@ -899,6 +905,31 @@ enum nft_rt_attributes {
899#define NFTA_RT_MAX (__NFTA_RT_MAX - 1) 905#define NFTA_RT_MAX (__NFTA_RT_MAX - 1)
900 906
901/** 907/**
908 * enum nft_socket_attributes - nf_tables socket expression netlink attributes
909 *
910 * @NFTA_SOCKET_KEY: socket key to match
911 * @NFTA_SOCKET_DREG: destination register
912 */
913enum nft_socket_attributes {
914 NFTA_SOCKET_UNSPEC,
915 NFTA_SOCKET_KEY,
916 NFTA_SOCKET_DREG,
917 __NFTA_SOCKET_MAX
918};
919#define NFTA_SOCKET_MAX (__NFTA_SOCKET_MAX - 1)
920
921/*
922 * enum nft_socket_keys - nf_tables socket expression keys
923 *
924 * @NFT_SOCKET_TRANSPARENT: Value of the IP(V6)_TRANSPARENT socket option_
925 */
926enum nft_socket_keys {
927 NFT_SOCKET_TRANSPARENT,
928 __NFT_SOCKET_MAX
929};
930#define NFT_SOCKET_MAX (__NFT_SOCKET_MAX - 1)
931
932/**
902 * enum nft_ct_keys - nf_tables ct expression keys 933 * enum nft_ct_keys - nf_tables ct expression keys
903 * 934 *
904 * @NFT_CT_STATE: conntrack state (bitmask of enum ip_conntrack_info) 935 * @NFT_CT_STATE: conntrack state (bitmask of enum ip_conntrack_info)
@@ -949,7 +980,9 @@ enum nft_ct_keys {
949 NFT_CT_DST_IP, 980 NFT_CT_DST_IP,
950 NFT_CT_SRC_IP6, 981 NFT_CT_SRC_IP6,
951 NFT_CT_DST_IP6, 982 NFT_CT_DST_IP6,
983 __NFT_CT_MAX
952}; 984};
985#define NFT_CT_MAX (__NFT_CT_MAX - 1)
953 986
954/** 987/**
955 * enum nft_ct_attributes - nf_tables ct expression netlink attributes 988 * enum nft_ct_attributes - nf_tables ct expression netlink attributes
@@ -1010,6 +1043,24 @@ enum nft_limit_attributes {
1010}; 1043};
1011#define NFTA_LIMIT_MAX (__NFTA_LIMIT_MAX - 1) 1044#define NFTA_LIMIT_MAX (__NFTA_LIMIT_MAX - 1)
1012 1045
1046enum nft_connlimit_flags {
1047 NFT_CONNLIMIT_F_INV = (1 << 0),
1048};
1049
1050/**
1051 * enum nft_connlimit_attributes - nf_tables connlimit expression netlink attributes
1052 *
1053 * @NFTA_CONNLIMIT_COUNT: number of connections (NLA_U32)
1054 * @NFTA_CONNLIMIT_FLAGS: flags (NLA_U32: enum nft_connlimit_flags)
1055 */
1056enum nft_connlimit_attributes {
1057 NFTA_CONNLIMIT_UNSPEC,
1058 NFTA_CONNLIMIT_COUNT,
1059 NFTA_CONNLIMIT_FLAGS,
1060 __NFTA_CONNLIMIT_MAX
1061};
1062#define NFTA_CONNLIMIT_MAX (__NFTA_CONNLIMIT_MAX - 1)
1063
1013/** 1064/**
1014 * enum nft_counter_attributes - nf_tables counter expression netlink attributes 1065 * enum nft_counter_attributes - nf_tables counter expression netlink attributes
1015 * 1066 *
@@ -1048,6 +1099,11 @@ enum nft_log_attributes {
1048#define NFTA_LOG_MAX (__NFTA_LOG_MAX - 1) 1099#define NFTA_LOG_MAX (__NFTA_LOG_MAX - 1)
1049 1100
1050/** 1101/**
1102 * LOGLEVEL_AUDIT - a pseudo log level enabling audit logging
1103 */
1104#define LOGLEVEL_AUDIT 8
1105
1106/**
1051 * enum nft_queue_attributes - nf_tables queue expression netlink attributes 1107 * enum nft_queue_attributes - nf_tables queue expression netlink attributes
1052 * 1108 *
1053 * @NFTA_QUEUE_NUM: netlink queue to send messages to (NLA_U16) 1109 * @NFTA_QUEUE_NUM: netlink queue to send messages to (NLA_U16)
@@ -1222,10 +1278,14 @@ enum nft_dup_attributes {
1222 * enum nft_fwd_attributes - nf_tables fwd expression netlink attributes 1278 * enum nft_fwd_attributes - nf_tables fwd expression netlink attributes
1223 * 1279 *
1224 * @NFTA_FWD_SREG_DEV: source register of output interface (NLA_U32: nft_register) 1280 * @NFTA_FWD_SREG_DEV: source register of output interface (NLA_U32: nft_register)
1281 * @NFTA_FWD_SREG_ADDR: source register of destination address (NLA_U32: nft_register)
1282 * @NFTA_FWD_NFPROTO: layer 3 family of source register address (NLA_U32: enum nfproto)
1225 */ 1283 */
1226enum nft_fwd_attributes { 1284enum nft_fwd_attributes {
1227 NFTA_FWD_UNSPEC, 1285 NFTA_FWD_UNSPEC,
1228 NFTA_FWD_SREG_DEV, 1286 NFTA_FWD_SREG_DEV,
1287 NFTA_FWD_SREG_ADDR,
1288 NFTA_FWD_NFPROTO,
1229 __NFTA_FWD_MAX 1289 __NFTA_FWD_MAX
1230}; 1290};
1231#define NFTA_FWD_MAX (__NFTA_FWD_MAX - 1) 1291#define NFTA_FWD_MAX (__NFTA_FWD_MAX - 1)
@@ -1315,7 +1375,8 @@ enum nft_ct_helper_attributes {
1315#define NFT_OBJECT_QUOTA 2 1375#define NFT_OBJECT_QUOTA 2
1316#define NFT_OBJECT_CT_HELPER 3 1376#define NFT_OBJECT_CT_HELPER 3
1317#define NFT_OBJECT_LIMIT 4 1377#define NFT_OBJECT_LIMIT 4
1318#define __NFT_OBJECT_MAX 5 1378#define NFT_OBJECT_CONNLIMIT 5
1379#define __NFT_OBJECT_MAX 6
1319#define NFT_OBJECT_MAX (__NFT_OBJECT_MAX - 1) 1380#define NFT_OBJECT_MAX (__NFT_OBJECT_MAX - 1)
1320 1381
1321/** 1382/**
@@ -1450,6 +1511,8 @@ enum nft_trace_types {
1450 * @NFTA_NG_MODULUS: maximum counter value (NLA_U32) 1511 * @NFTA_NG_MODULUS: maximum counter value (NLA_U32)
1451 * @NFTA_NG_TYPE: operation type (NLA_U32) 1512 * @NFTA_NG_TYPE: operation type (NLA_U32)
1452 * @NFTA_NG_OFFSET: offset to be added to the counter (NLA_U32) 1513 * @NFTA_NG_OFFSET: offset to be added to the counter (NLA_U32)
1514 * @NFTA_NG_SET_NAME: name of the map to lookup (NLA_STRING)
1515 * @NFTA_NG_SET_ID: id of the map (NLA_U32)
1453 */ 1516 */
1454enum nft_ng_attributes { 1517enum nft_ng_attributes {
1455 NFTA_NG_UNSPEC, 1518 NFTA_NG_UNSPEC,
@@ -1457,6 +1520,8 @@ enum nft_ng_attributes {
1457 NFTA_NG_MODULUS, 1520 NFTA_NG_MODULUS,
1458 NFTA_NG_TYPE, 1521 NFTA_NG_TYPE,
1459 NFTA_NG_OFFSET, 1522 NFTA_NG_OFFSET,
1523 NFTA_NG_SET_NAME,
1524 NFTA_NG_SET_ID,
1460 __NFTA_NG_MAX 1525 __NFTA_NG_MAX
1461}; 1526};
1462#define NFTA_NG_MAX (__NFTA_NG_MAX - 1) 1527#define NFTA_NG_MAX (__NFTA_NG_MAX - 1)
diff --git a/include/uapi/linux/netfilter/nfnetlink_conntrack.h b/include/uapi/linux/netfilter/nfnetlink_conntrack.h
index 77987111cab0..1d41810d17e2 100644
--- a/include/uapi/linux/netfilter/nfnetlink_conntrack.h
+++ b/include/uapi/linux/netfilter/nfnetlink_conntrack.h
@@ -262,6 +262,7 @@ enum ctattr_stats_cpu {
262enum ctattr_stats_global { 262enum ctattr_stats_global {
263 CTA_STATS_GLOBAL_UNSPEC, 263 CTA_STATS_GLOBAL_UNSPEC,
264 CTA_STATS_GLOBAL_ENTRIES, 264 CTA_STATS_GLOBAL_ENTRIES,
265 CTA_STATS_GLOBAL_MAX_ENTRIES,
265 __CTA_STATS_GLOBAL_MAX, 266 __CTA_STATS_GLOBAL_MAX,
266}; 267};
267#define CTA_STATS_GLOBAL_MAX (__CTA_STATS_GLOBAL_MAX - 1) 268#define CTA_STATS_GLOBAL_MAX (__CTA_STATS_GLOBAL_MAX - 1)
diff --git a/include/uapi/linux/netfilter/xt_osf.h b/include/uapi/linux/netfilter/xt_osf.h
index dad197e2ab99..72956eceeb09 100644
--- a/include/uapi/linux/netfilter/xt_osf.h
+++ b/include/uapi/linux/netfilter/xt_osf.h
@@ -23,101 +23,29 @@
23#include <linux/types.h> 23#include <linux/types.h>
24#include <linux/ip.h> 24#include <linux/ip.h>
25#include <linux/tcp.h> 25#include <linux/tcp.h>
26#include <linux/netfilter/nf_osf.h>
26 27
27#define MAXGENRELEN 32 28#define XT_OSF_GENRE NF_OSF_GENRE
29#define XT_OSF_INVERT NF_OSF_INVERT
28 30
29#define XT_OSF_GENRE (1<<0) 31#define XT_OSF_TTL NF_OSF_TTL
30#define XT_OSF_TTL (1<<1) 32#define XT_OSF_LOG NF_OSF_LOG
31#define XT_OSF_LOG (1<<2)
32#define XT_OSF_INVERT (1<<3)
33 33
34#define XT_OSF_LOGLEVEL_ALL 0 /* log all matched fingerprints */ 34#define XT_OSF_LOGLEVEL_ALL NF_OSF_LOGLEVEL_ALL
35#define XT_OSF_LOGLEVEL_FIRST 1 /* log only the first matced fingerprint */ 35#define XT_OSF_LOGLEVEL_FIRST NF_OSF_LOGLEVEL_FIRST
36#define XT_OSF_LOGLEVEL_ALL_KNOWN 2 /* do not log unknown packets */ 36#define XT_OSF_LOGLEVEL_ALL_KNOWN NF_OSF_LOGLEVEL_ALL_KNOWN
37 37
38#define XT_OSF_TTL_TRUE 0 /* True ip and fingerprint TTL comparison */ 38#define XT_OSF_TTL_TRUE NF_OSF_TTL_TRUE
39#define XT_OSF_TTL_LESS 1 /* Check if ip TTL is less than fingerprint one */ 39#define XT_OSF_TTL_NOCHECK NF_OSF_TTL_NOCHECK
40#define XT_OSF_TTL_NOCHECK 2 /* Do not compare ip and fingerprint TTL at all */
41 40
42struct xt_osf_info { 41#define XT_OSF_TTL_LESS 1 /* Check if ip TTL is less than fingerprint one */
43 char genre[MAXGENRELEN];
44 __u32 len;
45 __u32 flags;
46 __u32 loglevel;
47 __u32 ttl;
48};
49
50/*
51 * Wildcard MSS (kind of).
52 * It is used to implement a state machine for the different wildcard values
53 * of the MSS and window sizes.
54 */
55struct xt_osf_wc {
56 __u32 wc;
57 __u32 val;
58};
59
60/*
61 * This struct represents IANA options
62 * http://www.iana.org/assignments/tcp-parameters
63 */
64struct xt_osf_opt {
65 __u16 kind, length;
66 struct xt_osf_wc wc;
67};
68
69struct xt_osf_user_finger {
70 struct xt_osf_wc wss;
71
72 __u8 ttl, df;
73 __u16 ss, mss;
74 __u16 opt_num;
75
76 char genre[MAXGENRELEN];
77 char version[MAXGENRELEN];
78 char subtype[MAXGENRELEN];
79 42
80 /* MAX_IPOPTLEN is maximum if all options are NOPs or EOLs */ 43#define xt_osf_wc nf_osf_wc
81 struct xt_osf_opt opt[MAX_IPOPTLEN]; 44#define xt_osf_opt nf_osf_opt
82}; 45#define xt_osf_info nf_osf_info
83 46#define xt_osf_user_finger nf_osf_user_finger
84struct xt_osf_nlmsg { 47#define xt_osf_finger nf_osf_finger
85 struct xt_osf_user_finger f; 48#define xt_osf_nlmsg nf_osf_nlmsg
86 struct iphdr ip;
87 struct tcphdr tcp;
88};
89
90/* Defines for IANA option kinds */
91
92enum iana_options {
93 OSFOPT_EOL = 0, /* End of options */
94 OSFOPT_NOP, /* NOP */
95 OSFOPT_MSS, /* Maximum segment size */
96 OSFOPT_WSO, /* Window scale option */
97 OSFOPT_SACKP, /* SACK permitted */
98 OSFOPT_SACK, /* SACK */
99 OSFOPT_ECHO,
100 OSFOPT_ECHOREPLY,
101 OSFOPT_TS, /* Timestamp option */
102 OSFOPT_POCP, /* Partial Order Connection Permitted */
103 OSFOPT_POSP, /* Partial Order Service Profile */
104
105 /* Others are not used in the current OSF */
106 OSFOPT_EMPTY = 255,
107};
108
109/*
110 * Initial window size option state machine: multiple of mss, mtu or
111 * plain numeric value. Can also be made as plain numeric value which
112 * is not a multiple of specified value.
113 */
114enum xt_osf_window_size_options {
115 OSF_WSS_PLAIN = 0,
116 OSF_WSS_MSS,
117 OSF_WSS_MTU,
118 OSF_WSS_MODULO,
119 OSF_WSS_MAX,
120};
121 49
122/* 50/*
123 * Add/remove fingerprint from the kernel. 51 * Add/remove fingerprint from the kernel.
diff --git a/include/uapi/linux/netfilter_bridge/ebtables.h b/include/uapi/linux/netfilter_bridge/ebtables.h
index 0c7dc8315013..3b86c14ea49d 100644
--- a/include/uapi/linux/netfilter_bridge/ebtables.h
+++ b/include/uapi/linux/netfilter_bridge/ebtables.h
@@ -191,6 +191,12 @@ struct ebt_entry {
191 unsigned char elems[0] __attribute__ ((aligned (__alignof__(struct ebt_replace)))); 191 unsigned char elems[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
192}; 192};
193 193
194static __inline__ struct ebt_entry_target *
195ebt_get_target(struct ebt_entry *e)
196{
197 return (void *)e + e->target_offset;
198}
199
194/* {g,s}etsockopt numbers */ 200/* {g,s}etsockopt numbers */
195#define EBT_BASE_CTL 128 201#define EBT_BASE_CTL 128
196 202
diff --git a/include/uapi/linux/netfilter_ipv6/ip6t_srh.h b/include/uapi/linux/netfilter_ipv6/ip6t_srh.h
index f3cc0ef514a7..54ed83360dac 100644
--- a/include/uapi/linux/netfilter_ipv6/ip6t_srh.h
+++ b/include/uapi/linux/netfilter_ipv6/ip6t_srh.h
@@ -17,7 +17,10 @@
17#define IP6T_SRH_LAST_GT 0x0100 17#define IP6T_SRH_LAST_GT 0x0100
18#define IP6T_SRH_LAST_LT 0x0200 18#define IP6T_SRH_LAST_LT 0x0200
19#define IP6T_SRH_TAG 0x0400 19#define IP6T_SRH_TAG 0x0400
20#define IP6T_SRH_MASK 0x07FF 20#define IP6T_SRH_PSID 0x0800
21#define IP6T_SRH_NSID 0x1000
22#define IP6T_SRH_LSID 0x2000
23#define IP6T_SRH_MASK 0x3FFF
21 24
22/* Values for "mt_invflags" field in struct ip6t_srh */ 25/* Values for "mt_invflags" field in struct ip6t_srh */
23#define IP6T_SRH_INV_NEXTHDR 0x0001 26#define IP6T_SRH_INV_NEXTHDR 0x0001
@@ -31,7 +34,10 @@
31#define IP6T_SRH_INV_LAST_GT 0x0100 34#define IP6T_SRH_INV_LAST_GT 0x0100
32#define IP6T_SRH_INV_LAST_LT 0x0200 35#define IP6T_SRH_INV_LAST_LT 0x0200
33#define IP6T_SRH_INV_TAG 0x0400 36#define IP6T_SRH_INV_TAG 0x0400
34#define IP6T_SRH_INV_MASK 0x07FF 37#define IP6T_SRH_INV_PSID 0x0800
38#define IP6T_SRH_INV_NSID 0x1000
39#define IP6T_SRH_INV_LSID 0x2000
40#define IP6T_SRH_INV_MASK 0x3FFF
35 41
36/** 42/**
37 * struct ip6t_srh - SRH match options 43 * struct ip6t_srh - SRH match options
@@ -54,4 +60,37 @@ struct ip6t_srh {
54 __u16 mt_invflags; 60 __u16 mt_invflags;
55}; 61};
56 62
63/**
64 * struct ip6t_srh1 - SRH match options (revision 1)
65 * @ next_hdr: Next header field of SRH
66 * @ hdr_len: Extension header length field of SRH
67 * @ segs_left: Segments left field of SRH
68 * @ last_entry: Last entry field of SRH
69 * @ tag: Tag field of SRH
70 * @ psid_addr: Address of previous SID in SRH SID list
71 * @ nsid_addr: Address of NEXT SID in SRH SID list
72 * @ lsid_addr: Address of LAST SID in SRH SID list
73 * @ psid_msk: Mask of previous SID in SRH SID list
74 * @ nsid_msk: Mask of next SID in SRH SID list
75 * @ lsid_msk: MAsk of last SID in SRH SID list
76 * @ mt_flags: match options
77 * @ mt_invflags: Invert the sense of match options
78 */
79
80struct ip6t_srh1 {
81 __u8 next_hdr;
82 __u8 hdr_len;
83 __u8 segs_left;
84 __u8 last_entry;
85 __u16 tag;
86 struct in6_addr psid_addr;
87 struct in6_addr nsid_addr;
88 struct in6_addr lsid_addr;
89 struct in6_addr psid_msk;
90 struct in6_addr nsid_msk;
91 struct in6_addr lsid_msk;
92 __u16 mt_flags;
93 __u16 mt_invflags;
94};
95
57#endif /*_IP6T_SRH_H*/ 96#endif /*_IP6T_SRH_H*/
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 271b93783d28..28b36545de24 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -11,6 +11,7 @@
11 * Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com> 11 * Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com>
12 * Copyright 2008 Colin McCabe <colin@cozybit.com> 12 * Copyright 2008 Colin McCabe <colin@cozybit.com>
13 * Copyright 2015-2017 Intel Deutschland GmbH 13 * Copyright 2015-2017 Intel Deutschland GmbH
14 * Copyright (C) 2018 Intel Corporation
14 * 15 *
15 * Permission to use, copy, modify, and/or distribute this software for any 16 * Permission to use, copy, modify, and/or distribute this software for any
16 * purpose with or without fee is hereby granted, provided that the above 17 * purpose with or without fee is hereby granted, provided that the above
@@ -203,7 +204,8 @@
203 * FILS shared key authentication offload should be able to construct the 204 * FILS shared key authentication offload should be able to construct the
204 * authentication and association frames for FILS shared key authentication and 205 * authentication and association frames for FILS shared key authentication and
205 * eventually do a key derivation as per IEEE 802.11ai. The below additional 206 * eventually do a key derivation as per IEEE 802.11ai. The below additional
206 * parameters should be given to driver in %NL80211_CMD_CONNECT. 207 * parameters should be given to driver in %NL80211_CMD_CONNECT and/or in
208 * %NL80211_CMD_UPDATE_CONNECT_PARAMS.
207 * %NL80211_ATTR_FILS_ERP_USERNAME - used to construct keyname_nai 209 * %NL80211_ATTR_FILS_ERP_USERNAME - used to construct keyname_nai
208 * %NL80211_ATTR_FILS_ERP_REALM - used to construct keyname_nai 210 * %NL80211_ATTR_FILS_ERP_REALM - used to construct keyname_nai
209 * %NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM - used to construct erp message 211 * %NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM - used to construct erp message
@@ -214,7 +216,8 @@
214 * as specified in IETF RFC 6696. 216 * as specified in IETF RFC 6696.
215 * 217 *
216 * When FILS shared key authentication is completed, driver needs to provide the 218 * When FILS shared key authentication is completed, driver needs to provide the
217 * below additional parameters to userspace. 219 * below additional parameters to userspace, which can be either after setting
220 * up a connection or after roaming.
218 * %NL80211_ATTR_FILS_KEK - used for key renewal 221 * %NL80211_ATTR_FILS_KEK - used for key renewal
219 * %NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM - used in further EAP-RP exchanges 222 * %NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM - used in further EAP-RP exchanges
220 * %NL80211_ATTR_PMKID - used to identify the PMKSA used/generated 223 * %NL80211_ATTR_PMKID - used to identify the PMKSA used/generated
@@ -2225,6 +2228,16 @@ enum nl80211_commands {
2225 * @NL80211_ATTR_NSS: Station's New/updated RX_NSS value notified using this 2228 * @NL80211_ATTR_NSS: Station's New/updated RX_NSS value notified using this
2226 * u8 attribute. This is used with %NL80211_CMD_STA_OPMODE_CHANGED. 2229 * u8 attribute. This is used with %NL80211_CMD_STA_OPMODE_CHANGED.
2227 * 2230 *
2231 * @NL80211_ATTR_TXQ_STATS: TXQ statistics (nested attribute, see &enum
2232 * nl80211_txq_stats)
2233 * @NL80211_ATTR_TXQ_LIMIT: Total packet limit for the TXQ queues for this phy.
2234 * The smaller of this and the memory limit is enforced.
2235 * @NL80211_ATTR_TXQ_MEMORY_LIMIT: Total memory memory limit (in bytes) for the
2236 * TXQ queues for this phy. The smaller of this and the packet limit is
2237 * enforced.
2238 * @NL80211_ATTR_TXQ_QUANTUM: TXQ scheduler quantum (bytes). Number of bytes
2239 * a flow is assigned on each round of the DRR scheduler.
2240 *
2228 * @NUM_NL80211_ATTR: total number of nl80211_attrs available 2241 * @NUM_NL80211_ATTR: total number of nl80211_attrs available
2229 * @NL80211_ATTR_MAX: highest attribute number currently defined 2242 * @NL80211_ATTR_MAX: highest attribute number currently defined
2230 * @__NL80211_ATTR_AFTER_LAST: internal use 2243 * @__NL80211_ATTR_AFTER_LAST: internal use
@@ -2659,6 +2672,11 @@ enum nl80211_attrs {
2659 2672
2660 NL80211_ATTR_CONTROL_PORT_OVER_NL80211, 2673 NL80211_ATTR_CONTROL_PORT_OVER_NL80211,
2661 2674
2675 NL80211_ATTR_TXQ_STATS,
2676 NL80211_ATTR_TXQ_LIMIT,
2677 NL80211_ATTR_TXQ_MEMORY_LIMIT,
2678 NL80211_ATTR_TXQ_QUANTUM,
2679
2662 /* add attributes here, update the policy in nl80211.c */ 2680 /* add attributes here, update the policy in nl80211.c */
2663 2681
2664 __NL80211_ATTR_AFTER_LAST, 2682 __NL80211_ATTR_AFTER_LAST,
@@ -2982,6 +3000,8 @@ enum nl80211_sta_bss_param {
2982 * received from the station (u64, usec) 3000 * received from the station (u64, usec)
2983 * @NL80211_STA_INFO_PAD: attribute used for padding for 64-bit alignment 3001 * @NL80211_STA_INFO_PAD: attribute used for padding for 64-bit alignment
2984 * @NL80211_STA_INFO_ACK_SIGNAL: signal strength of the last ACK frame(u8, dBm) 3002 * @NL80211_STA_INFO_ACK_SIGNAL: signal strength of the last ACK frame(u8, dBm)
3003 * @NL80211_STA_INFO_DATA_ACK_SIGNAL_AVG: avg signal strength of (data)
3004 * ACK frame (s8, dBm)
2985 * @__NL80211_STA_INFO_AFTER_LAST: internal 3005 * @__NL80211_STA_INFO_AFTER_LAST: internal
2986 * @NL80211_STA_INFO_MAX: highest possible station info attribute 3006 * @NL80211_STA_INFO_MAX: highest possible station info attribute
2987 */ 3007 */
@@ -3021,6 +3041,7 @@ enum nl80211_sta_info {
3021 NL80211_STA_INFO_RX_DURATION, 3041 NL80211_STA_INFO_RX_DURATION,
3022 NL80211_STA_INFO_PAD, 3042 NL80211_STA_INFO_PAD,
3023 NL80211_STA_INFO_ACK_SIGNAL, 3043 NL80211_STA_INFO_ACK_SIGNAL,
3044 NL80211_STA_INFO_DATA_ACK_SIGNAL_AVG,
3024 3045
3025 /* keep last */ 3046 /* keep last */
3026 __NL80211_STA_INFO_AFTER_LAST, 3047 __NL80211_STA_INFO_AFTER_LAST,
@@ -3038,6 +3059,7 @@ enum nl80211_sta_info {
3038 * @NL80211_TID_STATS_TX_MSDU_FAILED: number of failed transmitted 3059 * @NL80211_TID_STATS_TX_MSDU_FAILED: number of failed transmitted
3039 * MSDUs (u64) 3060 * MSDUs (u64)
3040 * @NL80211_TID_STATS_PAD: attribute used for padding for 64-bit alignment 3061 * @NL80211_TID_STATS_PAD: attribute used for padding for 64-bit alignment
3062 * @NL80211_TID_STATS_TXQ_STATS: TXQ stats (nested attribute)
3041 * @NUM_NL80211_TID_STATS: number of attributes here 3063 * @NUM_NL80211_TID_STATS: number of attributes here
3042 * @NL80211_TID_STATS_MAX: highest numbered attribute here 3064 * @NL80211_TID_STATS_MAX: highest numbered attribute here
3043 */ 3065 */
@@ -3048,6 +3070,7 @@ enum nl80211_tid_stats {
3048 NL80211_TID_STATS_TX_MSDU_RETRIES, 3070 NL80211_TID_STATS_TX_MSDU_RETRIES,
3049 NL80211_TID_STATS_TX_MSDU_FAILED, 3071 NL80211_TID_STATS_TX_MSDU_FAILED,
3050 NL80211_TID_STATS_PAD, 3072 NL80211_TID_STATS_PAD,
3073 NL80211_TID_STATS_TXQ_STATS,
3051 3074
3052 /* keep last */ 3075 /* keep last */
3053 NUM_NL80211_TID_STATS, 3076 NUM_NL80211_TID_STATS,
@@ -3055,6 +3078,44 @@ enum nl80211_tid_stats {
3055}; 3078};
3056 3079
3057/** 3080/**
3081 * enum nl80211_txq_stats - per TXQ statistics attributes
3082 * @__NL80211_TXQ_STATS_INVALID: attribute number 0 is reserved
3083 * @NUM_NL80211_TXQ_STATS: number of attributes here
3084 * @NL80211_TXQ_STATS_BACKLOG_BYTES: number of bytes currently backlogged
3085 * @NL80211_TXQ_STATS_BACKLOG_PACKETS: number of packets currently
3086 * backlogged
3087 * @NL80211_TXQ_STATS_FLOWS: total number of new flows seen
3088 * @NL80211_TXQ_STATS_DROPS: total number of packet drops
3089 * @NL80211_TXQ_STATS_ECN_MARKS: total number of packet ECN marks
3090 * @NL80211_TXQ_STATS_OVERLIMIT: number of drops due to queue space overflow
3091 * @NL80211_TXQ_STATS_OVERMEMORY: number of drops due to memory limit overflow
3092 * (only for per-phy stats)
3093 * @NL80211_TXQ_STATS_COLLISIONS: number of hash collisions
3094 * @NL80211_TXQ_STATS_TX_BYTES: total number of bytes dequeued from TXQ
3095 * @NL80211_TXQ_STATS_TX_PACKETS: total number of packets dequeued from TXQ
3096 * @NL80211_TXQ_STATS_MAX_FLOWS: number of flow buckets for PHY
3097 * @NL80211_TXQ_STATS_MAX: highest numbered attribute here
3098 */
3099enum nl80211_txq_stats {
3100 __NL80211_TXQ_STATS_INVALID,
3101 NL80211_TXQ_STATS_BACKLOG_BYTES,
3102 NL80211_TXQ_STATS_BACKLOG_PACKETS,
3103 NL80211_TXQ_STATS_FLOWS,
3104 NL80211_TXQ_STATS_DROPS,
3105 NL80211_TXQ_STATS_ECN_MARKS,
3106 NL80211_TXQ_STATS_OVERLIMIT,
3107 NL80211_TXQ_STATS_OVERMEMORY,
3108 NL80211_TXQ_STATS_COLLISIONS,
3109 NL80211_TXQ_STATS_TX_BYTES,
3110 NL80211_TXQ_STATS_TX_PACKETS,
3111 NL80211_TXQ_STATS_MAX_FLOWS,
3112
3113 /* keep last */
3114 NUM_NL80211_TXQ_STATS,
3115 NL80211_TXQ_STATS_MAX = NUM_NL80211_TXQ_STATS - 1
3116};
3117
3118/**
3058 * enum nl80211_mpath_flags - nl80211 mesh path flags 3119 * enum nl80211_mpath_flags - nl80211 mesh path flags
3059 * 3120 *
3060 * @NL80211_MPATH_FLAG_ACTIVE: the mesh path is active 3121 * @NL80211_MPATH_FLAG_ACTIVE: the mesh path is active
@@ -3144,6 +3205,29 @@ enum nl80211_band_attr {
3144#define NL80211_BAND_ATTR_HT_CAPA NL80211_BAND_ATTR_HT_CAPA 3205#define NL80211_BAND_ATTR_HT_CAPA NL80211_BAND_ATTR_HT_CAPA
3145 3206
3146/** 3207/**
3208 * enum nl80211_wmm_rule - regulatory wmm rule
3209 *
3210 * @__NL80211_WMMR_INVALID: attribute number 0 is reserved
3211 * @NL80211_WMMR_CW_MIN: Minimum contention window slot.
3212 * @NL80211_WMMR_CW_MAX: Maximum contention window slot.
3213 * @NL80211_WMMR_AIFSN: Arbitration Inter Frame Space.
3214 * @NL80211_WMMR_TXOP: Maximum allowed tx operation time.
3215 * @nl80211_WMMR_MAX: highest possible wmm rule.
3216 * @__NL80211_WMMR_LAST: Internal use.
3217 */
3218enum nl80211_wmm_rule {
3219 __NL80211_WMMR_INVALID,
3220 NL80211_WMMR_CW_MIN,
3221 NL80211_WMMR_CW_MAX,
3222 NL80211_WMMR_AIFSN,
3223 NL80211_WMMR_TXOP,
3224
3225 /* keep last */
3226 __NL80211_WMMR_LAST,
3227 NL80211_WMMR_MAX = __NL80211_WMMR_LAST - 1
3228};
3229
3230/**
3147 * enum nl80211_frequency_attr - frequency attributes 3231 * enum nl80211_frequency_attr - frequency attributes
3148 * @__NL80211_FREQUENCY_ATTR_INVALID: attribute number 0 is reserved 3232 * @__NL80211_FREQUENCY_ATTR_INVALID: attribute number 0 is reserved
3149 * @NL80211_FREQUENCY_ATTR_FREQ: Frequency in MHz 3233 * @NL80211_FREQUENCY_ATTR_FREQ: Frequency in MHz
@@ -3192,6 +3276,9 @@ enum nl80211_band_attr {
3192 * on this channel in current regulatory domain. 3276 * on this channel in current regulatory domain.
3193 * @NL80211_FREQUENCY_ATTR_NO_10MHZ: 10 MHz operation is not allowed 3277 * @NL80211_FREQUENCY_ATTR_NO_10MHZ: 10 MHz operation is not allowed
3194 * on this channel in current regulatory domain. 3278 * on this channel in current regulatory domain.
3279 * @NL80211_FREQUENCY_ATTR_WMM: this channel has wmm limitations.
3280 * This is a nested attribute that contains the wmm limitation per AC.
3281 * (see &enum nl80211_wmm_rule)
3195 * @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number 3282 * @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number
3196 * currently defined 3283 * currently defined
3197 * @__NL80211_FREQUENCY_ATTR_AFTER_LAST: internal use 3284 * @__NL80211_FREQUENCY_ATTR_AFTER_LAST: internal use
@@ -3220,6 +3307,7 @@ enum nl80211_frequency_attr {
3220 NL80211_FREQUENCY_ATTR_IR_CONCURRENT, 3307 NL80211_FREQUENCY_ATTR_IR_CONCURRENT,
3221 NL80211_FREQUENCY_ATTR_NO_20MHZ, 3308 NL80211_FREQUENCY_ATTR_NO_20MHZ,
3222 NL80211_FREQUENCY_ATTR_NO_10MHZ, 3309 NL80211_FREQUENCY_ATTR_NO_10MHZ,
3310 NL80211_FREQUENCY_ATTR_WMM,
3223 3311
3224 /* keep last */ 3312 /* keep last */
3225 __NL80211_FREQUENCY_ATTR_AFTER_LAST, 3313 __NL80211_FREQUENCY_ATTR_AFTER_LAST,
@@ -5040,6 +5128,11 @@ enum nl80211_feature_flags {
5040 * "radar detected" event. 5128 * "radar detected" event.
5041 * @NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211: Driver supports sending and 5129 * @NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211: Driver supports sending and
5042 * receiving control port frames over nl80211 instead of the netdevice. 5130 * receiving control port frames over nl80211 instead of the netdevice.
5131 * @NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT: This Driver support data ack
5132 * rssi if firmware support, this flag is to intimate about ack rssi
5133 * support to nl80211.
5134 * @NL80211_EXT_FEATURE_TXQS: Driver supports FQ-CoDel-enabled intermediate
5135 * TXQs.
5043 * 5136 *
5044 * @NUM_NL80211_EXT_FEATURES: number of extended features. 5137 * @NUM_NL80211_EXT_FEATURES: number of extended features.
5045 * @MAX_NL80211_EXT_FEATURES: highest extended feature index. 5138 * @MAX_NL80211_EXT_FEATURES: highest extended feature index.
@@ -5072,6 +5165,8 @@ enum nl80211_ext_feature_index {
5072 NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN, 5165 NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN,
5073 NL80211_EXT_FEATURE_DFS_OFFLOAD, 5166 NL80211_EXT_FEATURE_DFS_OFFLOAD,
5074 NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211, 5167 NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211,
5168 NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT,
5169 NL80211_EXT_FEATURE_TXQS,
5075 5170
5076 /* add new features before the definition below */ 5171 /* add new features before the definition below */
5077 NUM_NL80211_EXT_FEATURES, 5172 NUM_NL80211_EXT_FEATURES,
diff --git a/include/uapi/linux/omap3isp.h b/include/uapi/linux/omap3isp.h
index 1a920145db04..87b55755f4ff 100644
--- a/include/uapi/linux/omap3isp.h
+++ b/include/uapi/linux/omap3isp.h
@@ -55,6 +55,8 @@
55 _IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct omap3isp_h3a_af_config) 55 _IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct omap3isp_h3a_af_config)
56#define VIDIOC_OMAP3ISP_STAT_REQ \ 56#define VIDIOC_OMAP3ISP_STAT_REQ \
57 _IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct omap3isp_stat_data) 57 _IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct omap3isp_stat_data)
58#define VIDIOC_OMAP3ISP_STAT_REQ_TIME32 \
59 _IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct omap3isp_stat_data_time32)
58#define VIDIOC_OMAP3ISP_STAT_EN \ 60#define VIDIOC_OMAP3ISP_STAT_EN \
59 _IOWR('V', BASE_VIDIOC_PRIVATE + 7, unsigned long) 61 _IOWR('V', BASE_VIDIOC_PRIVATE + 7, unsigned long)
60 62
@@ -165,7 +167,14 @@ struct omap3isp_h3a_aewb_config {
165 * @config_counter: Number of the configuration associated with the data. 167 * @config_counter: Number of the configuration associated with the data.
166 */ 168 */
167struct omap3isp_stat_data { 169struct omap3isp_stat_data {
170#ifdef __KERNEL__
171 struct {
172 __s64 tv_sec;
173 __s64 tv_usec;
174 } ts;
175#else
168 struct timeval ts; 176 struct timeval ts;
177#endif
169 void __user *buf; 178 void __user *buf;
170 __u32 buf_size; 179 __u32 buf_size;
171 __u16 frame_number; 180 __u16 frame_number;
@@ -173,6 +182,19 @@ struct omap3isp_stat_data {
173 __u16 config_counter; 182 __u16 config_counter;
174}; 183};
175 184
185#ifdef __KERNEL__
186struct omap3isp_stat_data_time32 {
187 struct {
188 __s32 tv_sec;
189 __s32 tv_usec;
190 } ts;
191 __u32 buf;
192 __u32 buf_size;
193 __u16 frame_number;
194 __u16 cur_frame;
195 __u16 config_counter;
196};
197#endif
176 198
177/* Histogram related structs */ 199/* Histogram related structs */
178 200
diff --git a/include/uapi/linux/openvswitch.h b/include/uapi/linux/openvswitch.h
index 713e56ce681f..863aabaa5cc9 100644
--- a/include/uapi/linux/openvswitch.h
+++ b/include/uapi/linux/openvswitch.h
@@ -937,4 +937,32 @@ enum ovs_meter_band_type {
937 937
938#define OVS_METER_BAND_TYPE_MAX (__OVS_METER_BAND_TYPE_MAX - 1) 938#define OVS_METER_BAND_TYPE_MAX (__OVS_METER_BAND_TYPE_MAX - 1)
939 939
940/* Conntrack limit */
941#define OVS_CT_LIMIT_FAMILY "ovs_ct_limit"
942#define OVS_CT_LIMIT_MCGROUP "ovs_ct_limit"
943#define OVS_CT_LIMIT_VERSION 0x1
944
945enum ovs_ct_limit_cmd {
946 OVS_CT_LIMIT_CMD_UNSPEC,
947 OVS_CT_LIMIT_CMD_SET, /* Add or modify ct limit. */
948 OVS_CT_LIMIT_CMD_DEL, /* Delete ct limit. */
949 OVS_CT_LIMIT_CMD_GET /* Get ct limit. */
950};
951
952enum ovs_ct_limit_attr {
953 OVS_CT_LIMIT_ATTR_UNSPEC,
954 OVS_CT_LIMIT_ATTR_ZONE_LIMIT, /* Nested struct ovs_zone_limit. */
955 __OVS_CT_LIMIT_ATTR_MAX
956};
957
958#define OVS_CT_LIMIT_ATTR_MAX (__OVS_CT_LIMIT_ATTR_MAX - 1)
959
960#define OVS_ZONE_LIMIT_DEFAULT_ZONE -1
961
962struct ovs_zone_limit {
963 int zone_id;
964 __u32 limit;
965 __u32 count;
966};
967
940#endif /* _LINUX_OPENVSWITCH_H */ 968#endif /* _LINUX_OPENVSWITCH_H */
diff --git a/include/uapi/linux/pci_regs.h b/include/uapi/linux/pci_regs.h
index 103ba797a8f3..4da87e2ef8a8 100644
--- a/include/uapi/linux/pci_regs.h
+++ b/include/uapi/linux/pci_regs.h
@@ -506,6 +506,8 @@
506#define PCI_EXP_DEVCTL_READRQ_256B 0x1000 /* 256 Bytes */ 506#define PCI_EXP_DEVCTL_READRQ_256B 0x1000 /* 256 Bytes */
507#define PCI_EXP_DEVCTL_READRQ_512B 0x2000 /* 512 Bytes */ 507#define PCI_EXP_DEVCTL_READRQ_512B 0x2000 /* 512 Bytes */
508#define PCI_EXP_DEVCTL_READRQ_1024B 0x3000 /* 1024 Bytes */ 508#define PCI_EXP_DEVCTL_READRQ_1024B 0x3000 /* 1024 Bytes */
509#define PCI_EXP_DEVCTL_READRQ_2048B 0x4000 /* 2048 Bytes */
510#define PCI_EXP_DEVCTL_READRQ_4096B 0x5000 /* 4096 Bytes */
509#define PCI_EXP_DEVCTL_BCR_FLR 0x8000 /* Bridge Configuration Retry / FLR */ 511#define PCI_EXP_DEVCTL_BCR_FLR 0x8000 /* Bridge Configuration Retry / FLR */
510#define PCI_EXP_DEVSTA 10 /* Device Status */ 512#define PCI_EXP_DEVSTA 10 /* Device Status */
511#define PCI_EXP_DEVSTA_CED 0x0001 /* Correctable Error Detected */ 513#define PCI_EXP_DEVSTA_CED 0x0001 /* Correctable Error Detected */
@@ -655,6 +657,11 @@
655#define PCI_EXP_LNKCAP2_SLS_16_0GB 0x00000010 /* Supported Speed 16GT/s */ 657#define PCI_EXP_LNKCAP2_SLS_16_0GB 0x00000010 /* Supported Speed 16GT/s */
656#define PCI_EXP_LNKCAP2_CROSSLINK 0x00000100 /* Crosslink supported */ 658#define PCI_EXP_LNKCAP2_CROSSLINK 0x00000100 /* Crosslink supported */
657#define PCI_EXP_LNKCTL2 48 /* Link Control 2 */ 659#define PCI_EXP_LNKCTL2 48 /* Link Control 2 */
660#define PCI_EXP_LNKCTL2_TLS 0x000f
661#define PCI_EXP_LNKCTL2_TLS_2_5GT 0x0001 /* Supported Speed 2.5GT/s */
662#define PCI_EXP_LNKCTL2_TLS_5_0GT 0x0002 /* Supported Speed 5GT/s */
663#define PCI_EXP_LNKCTL2_TLS_8_0GT 0x0003 /* Supported Speed 8GT/s */
664#define PCI_EXP_LNKCTL2_TLS_16_0GT 0x0004 /* Supported Speed 16GT/s */
658#define PCI_EXP_LNKSTA2 50 /* Link Status 2 */ 665#define PCI_EXP_LNKSTA2 50 /* Link Status 2 */
659#define PCI_CAP_EXP_ENDPOINT_SIZEOF_V2 52 /* v2 endpoints with link end here */ 666#define PCI_CAP_EXP_ENDPOINT_SIZEOF_V2 52 /* v2 endpoints with link end here */
660#define PCI_EXP_SLTCAP2 52 /* Slot Capabilities 2 */ 667#define PCI_EXP_SLTCAP2 52 /* Slot Capabilities 2 */
@@ -981,6 +988,7 @@
981#define PCI_EXP_DPC_CAP_DL_ACTIVE 0x1000 /* ERR_COR signal on DL_Active supported */ 988#define PCI_EXP_DPC_CAP_DL_ACTIVE 0x1000 /* ERR_COR signal on DL_Active supported */
982 989
983#define PCI_EXP_DPC_CTL 6 /* DPC control */ 990#define PCI_EXP_DPC_CTL 6 /* DPC control */
991#define PCI_EXP_DPC_CTL_EN_FATAL 0x0001 /* Enable trigger on ERR_FATAL message */
984#define PCI_EXP_DPC_CTL_EN_NONFATAL 0x0002 /* Enable trigger on ERR_NONFATAL message */ 992#define PCI_EXP_DPC_CTL_EN_NONFATAL 0x0002 /* Enable trigger on ERR_NONFATAL message */
985#define PCI_EXP_DPC_CTL_INT_EN 0x0008 /* DPC Interrupt Enable */ 993#define PCI_EXP_DPC_CTL_INT_EN 0x0008 /* DPC Interrupt Enable */
986 994
diff --git a/include/uapi/linux/pkt_cls.h b/include/uapi/linux/pkt_cls.h
index be05e66c167b..84e4c1d0f874 100644
--- a/include/uapi/linux/pkt_cls.h
+++ b/include/uapi/linux/pkt_cls.h
@@ -129,6 +129,7 @@ enum {
129#define TCA_CLS_FLAGS_SKIP_SW (1 << 1) /* don't use filter in SW */ 129#define TCA_CLS_FLAGS_SKIP_SW (1 << 1) /* don't use filter in SW */
130#define TCA_CLS_FLAGS_IN_HW (1 << 2) /* filter is offloaded to HW */ 130#define TCA_CLS_FLAGS_IN_HW (1 << 2) /* filter is offloaded to HW */
131#define TCA_CLS_FLAGS_NOT_IN_HW (1 << 3) /* filter isn't offloaded to HW */ 131#define TCA_CLS_FLAGS_NOT_IN_HW (1 << 3) /* filter isn't offloaded to HW */
132#define TCA_CLS_FLAGS_VERBOSE (1 << 4) /* verbose logging */
132 133
133/* U32 filters */ 134/* U32 filters */
134 135
diff --git a/include/uapi/linux/psp-sev.h b/include/uapi/linux/psp-sev.h
index 9008f31c7eb6..ac8c60bcc83b 100644
--- a/include/uapi/linux/psp-sev.h
+++ b/include/uapi/linux/psp-sev.h
@@ -30,6 +30,7 @@ enum {
30 SEV_PDH_GEN, 30 SEV_PDH_GEN,
31 SEV_PDH_CERT_EXPORT, 31 SEV_PDH_CERT_EXPORT,
32 SEV_PEK_CERT_IMPORT, 32 SEV_PEK_CERT_IMPORT,
33 SEV_GET_ID,
33 34
34 SEV_MAX, 35 SEV_MAX,
35}; 36};
@@ -124,6 +125,17 @@ struct sev_user_data_pdh_cert_export {
124} __packed; 125} __packed;
125 126
126/** 127/**
128 * struct sev_user_data_get_id - GET_ID command parameters
129 *
130 * @socket1: Buffer to pass unique ID of first socket
131 * @socket2: Buffer to pass unique ID of second socket
132 */
133struct sev_user_data_get_id {
134 __u8 socket1[64]; /* Out */
135 __u8 socket2[64]; /* Out */
136} __packed;
137
138/**
127 * struct sev_issue_cmd - SEV ioctl parameters 139 * struct sev_issue_cmd - SEV ioctl parameters
128 * 140 *
129 * @cmd: SEV commands to execute 141 * @cmd: SEV commands to execute
diff --git a/include/uapi/linux/rseq.h b/include/uapi/linux/rseq.h
new file mode 100644
index 000000000000..d620fa43756c
--- /dev/null
+++ b/include/uapi/linux/rseq.h
@@ -0,0 +1,133 @@
1/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
2#ifndef _UAPI_LINUX_RSEQ_H
3#define _UAPI_LINUX_RSEQ_H
4
5/*
6 * linux/rseq.h
7 *
8 * Restartable sequences system call API
9 *
10 * Copyright (c) 2015-2018 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 */
12
13#ifdef __KERNEL__
14# include <linux/types.h>
15#else
16# include <stdint.h>
17#endif
18
19#include <linux/types_32_64.h>
20
21enum rseq_cpu_id_state {
22 RSEQ_CPU_ID_UNINITIALIZED = -1,
23 RSEQ_CPU_ID_REGISTRATION_FAILED = -2,
24};
25
26enum rseq_flags {
27 RSEQ_FLAG_UNREGISTER = (1 << 0),
28};
29
30enum rseq_cs_flags_bit {
31 RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT = 0,
32 RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT = 1,
33 RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT = 2,
34};
35
36enum rseq_cs_flags {
37 RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT =
38 (1U << RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT),
39 RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL =
40 (1U << RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT),
41 RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE =
42 (1U << RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT),
43};
44
45/*
46 * struct rseq_cs is aligned on 4 * 8 bytes to ensure it is always
47 * contained within a single cache-line. It is usually declared as
48 * link-time constant data.
49 */
50struct rseq_cs {
51 /* Version of this structure. */
52 __u32 version;
53 /* enum rseq_cs_flags */
54 __u32 flags;
55 LINUX_FIELD_u32_u64(start_ip);
56 /* Offset from start_ip. */
57 LINUX_FIELD_u32_u64(post_commit_offset);
58 LINUX_FIELD_u32_u64(abort_ip);
59} __attribute__((aligned(4 * sizeof(__u64))));
60
61/*
62 * struct rseq is aligned on 4 * 8 bytes to ensure it is always
63 * contained within a single cache-line.
64 *
65 * A single struct rseq per thread is allowed.
66 */
67struct rseq {
68 /*
69 * Restartable sequences cpu_id_start field. Updated by the
70 * kernel, and read by user-space with single-copy atomicity
71 * semantics. Aligned on 32-bit. Always contains a value in the
72 * range of possible CPUs, although the value may not be the
73 * actual current CPU (e.g. if rseq is not initialized). This
74 * CPU number value should always be compared against the value
75 * of the cpu_id field before performing a rseq commit or
76 * returning a value read from a data structure indexed using
77 * the cpu_id_start value.
78 */
79 __u32 cpu_id_start;
80 /*
81 * Restartable sequences cpu_id field. Updated by the kernel,
82 * and read by user-space with single-copy atomicity semantics.
83 * Aligned on 32-bit. Values RSEQ_CPU_ID_UNINITIALIZED and
84 * RSEQ_CPU_ID_REGISTRATION_FAILED have a special semantic: the
85 * former means "rseq uninitialized", and latter means "rseq
86 * initialization failed". This value is meant to be read within
87 * rseq critical sections and compared with the cpu_id_start
88 * value previously read, before performing the commit instruction,
89 * or read and compared with the cpu_id_start value before returning
90 * a value loaded from a data structure indexed using the
91 * cpu_id_start value.
92 */
93 __u32 cpu_id;
94 /*
95 * Restartable sequences rseq_cs field.
96 *
97 * Contains NULL when no critical section is active for the current
98 * thread, or holds a pointer to the currently active struct rseq_cs.
99 *
100 * Updated by user-space, which sets the address of the currently
101 * active rseq_cs at the beginning of assembly instruction sequence
102 * block, and set to NULL by the kernel when it restarts an assembly
103 * instruction sequence block, as well as when the kernel detects that
104 * it is preempting or delivering a signal outside of the range
105 * targeted by the rseq_cs. Also needs to be set to NULL by user-space
106 * before reclaiming memory that contains the targeted struct rseq_cs.
107 *
108 * Read and set by the kernel with single-copy atomicity semantics.
109 * Set by user-space with single-copy atomicity semantics. Aligned
110 * on 64-bit.
111 */
112 LINUX_FIELD_u32_u64(rseq_cs);
113 /*
114 * - RSEQ_DISABLE flag:
115 *
116 * Fallback fast-track flag for single-stepping.
117 * Set by user-space if lack of progress is detected.
118 * Cleared by user-space after rseq finish.
119 * Read by the kernel.
120 * - RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT
121 * Inhibit instruction sequence block restart and event
122 * counter increment on preemption for this thread.
123 * - RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL
124 * Inhibit instruction sequence block restart and event
125 * counter increment on signal delivery for this thread.
126 * - RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE
127 * Inhibit instruction sequence block restart and event
128 * counter increment on migration for this thread.
129 */
130 __u32 flags;
131} __attribute__((aligned(4 * sizeof(__u64))));
132
133#endif /* _UAPI_LINUX_RSEQ_H */
diff --git a/include/uapi/linux/rtnetlink.h b/include/uapi/linux/rtnetlink.h
index 9b15005955fa..7d8502313c99 100644
--- a/include/uapi/linux/rtnetlink.h
+++ b/include/uapi/linux/rtnetlink.h
@@ -254,6 +254,11 @@ enum {
254#define RTPROT_DHCP 16 /* DHCP client */ 254#define RTPROT_DHCP 16 /* DHCP client */
255#define RTPROT_MROUTED 17 /* Multicast daemon */ 255#define RTPROT_MROUTED 17 /* Multicast daemon */
256#define RTPROT_BABEL 42 /* Babel daemon */ 256#define RTPROT_BABEL 42 /* Babel daemon */
257#define RTPROT_BGP 186 /* BGP Routes */
258#define RTPROT_ISIS 187 /* ISIS Routes */
259#define RTPROT_OSPF 188 /* OSPF Routes */
260#define RTPROT_RIP 189 /* RIP Routes */
261#define RTPROT_EIGRP 192 /* EIGRP Routes */
257 262
258/* rtm_scope 263/* rtm_scope
259 264
@@ -327,6 +332,9 @@ enum rtattr_type_t {
327 RTA_PAD, 332 RTA_PAD,
328 RTA_UID, 333 RTA_UID,
329 RTA_TTL_PROPAGATE, 334 RTA_TTL_PROPAGATE,
335 RTA_IP_PROTO,
336 RTA_SPORT,
337 RTA_DPORT,
330 __RTA_MAX 338 __RTA_MAX
331}; 339};
332 340
diff --git a/include/uapi/linux/seg6_local.h b/include/uapi/linux/seg6_local.h
index ef2d8c3e76c1..edc138bdc56d 100644
--- a/include/uapi/linux/seg6_local.h
+++ b/include/uapi/linux/seg6_local.h
@@ -25,6 +25,7 @@ enum {
25 SEG6_LOCAL_NH6, 25 SEG6_LOCAL_NH6,
26 SEG6_LOCAL_IIF, 26 SEG6_LOCAL_IIF,
27 SEG6_LOCAL_OIF, 27 SEG6_LOCAL_OIF,
28 SEG6_LOCAL_BPF,
28 __SEG6_LOCAL_MAX, 29 __SEG6_LOCAL_MAX,
29}; 30};
30#define SEG6_LOCAL_MAX (__SEG6_LOCAL_MAX - 1) 31#define SEG6_LOCAL_MAX (__SEG6_LOCAL_MAX - 1)
@@ -59,10 +60,21 @@ enum {
59 SEG6_LOCAL_ACTION_END_AS = 13, 60 SEG6_LOCAL_ACTION_END_AS = 13,
60 /* forward to SR-unaware VNF with masquerading */ 61 /* forward to SR-unaware VNF with masquerading */
61 SEG6_LOCAL_ACTION_END_AM = 14, 62 SEG6_LOCAL_ACTION_END_AM = 14,
63 /* custom BPF action */
64 SEG6_LOCAL_ACTION_END_BPF = 15,
62 65
63 __SEG6_LOCAL_ACTION_MAX, 66 __SEG6_LOCAL_ACTION_MAX,
64}; 67};
65 68
66#define SEG6_LOCAL_ACTION_MAX (__SEG6_LOCAL_ACTION_MAX - 1) 69#define SEG6_LOCAL_ACTION_MAX (__SEG6_LOCAL_ACTION_MAX - 1)
67 70
71enum {
72 SEG6_LOCAL_BPF_PROG_UNSPEC,
73 SEG6_LOCAL_BPF_PROG,
74 SEG6_LOCAL_BPF_PROG_NAME,
75 __SEG6_LOCAL_BPF_PROG_MAX,
76};
77
78#define SEG6_LOCAL_BPF_PROG_MAX (__SEG6_LOCAL_BPF_PROG_MAX - 1)
79
68#endif 80#endif
diff --git a/include/uapi/linux/snmp.h b/include/uapi/linux/snmp.h
index 33a70ece462f..750d89120335 100644
--- a/include/uapi/linux/snmp.h
+++ b/include/uapi/linux/snmp.h
@@ -276,6 +276,9 @@ enum
276 LINUX_MIB_TCPKEEPALIVE, /* TCPKeepAlive */ 276 LINUX_MIB_TCPKEEPALIVE, /* TCPKeepAlive */
277 LINUX_MIB_TCPMTUPFAIL, /* TCPMTUPFail */ 277 LINUX_MIB_TCPMTUPFAIL, /* TCPMTUPFail */
278 LINUX_MIB_TCPMTUPSUCCESS, /* TCPMTUPSuccess */ 278 LINUX_MIB_TCPMTUPSUCCESS, /* TCPMTUPSuccess */
279 LINUX_MIB_TCPDELIVERED, /* TCPDelivered */
280 LINUX_MIB_TCPDELIVEREDCE, /* TCPDeliveredCE */
281 LINUX_MIB_TCPACKCOMPRESSED, /* TCPAckCompressed */
279 __LINUX_MIB_MAX 282 __LINUX_MIB_MAX
280}; 283};
281 284
diff --git a/include/uapi/linux/tcp.h b/include/uapi/linux/tcp.h
index 560374c978f9..29eb659aa77a 100644
--- a/include/uapi/linux/tcp.h
+++ b/include/uapi/linux/tcp.h
@@ -122,6 +122,10 @@ enum {
122#define TCP_MD5SIG_EXT 32 /* TCP MD5 Signature with extensions */ 122#define TCP_MD5SIG_EXT 32 /* TCP MD5 Signature with extensions */
123#define TCP_FASTOPEN_KEY 33 /* Set the key for Fast Open (cookie) */ 123#define TCP_FASTOPEN_KEY 33 /* Set the key for Fast Open (cookie) */
124#define TCP_FASTOPEN_NO_COOKIE 34 /* Enable TFO without a TFO cookie */ 124#define TCP_FASTOPEN_NO_COOKIE 34 /* Enable TFO without a TFO cookie */
125#define TCP_ZEROCOPY_RECEIVE 35
126#define TCP_INQ 36 /* Notify bytes available to read as a cmsg on read */
127
128#define TCP_CM_INQ TCP_INQ
125 129
126struct tcp_repair_opt { 130struct tcp_repair_opt {
127 __u32 opt_code; 131 __u32 opt_code;
@@ -224,6 +228,9 @@ struct tcp_info {
224 __u64 tcpi_busy_time; /* Time (usec) busy sending data */ 228 __u64 tcpi_busy_time; /* Time (usec) busy sending data */
225 __u64 tcpi_rwnd_limited; /* Time (usec) limited by receive window */ 229 __u64 tcpi_rwnd_limited; /* Time (usec) limited by receive window */
226 __u64 tcpi_sndbuf_limited; /* Time (usec) limited by send buffer */ 230 __u64 tcpi_sndbuf_limited; /* Time (usec) limited by send buffer */
231
232 __u32 tcpi_delivered;
233 __u32 tcpi_delivered_ce;
227}; 234};
228 235
229/* netlink attributes types for SCM_TIMESTAMPING_OPT_STATS */ 236/* netlink attributes types for SCM_TIMESTAMPING_OPT_STATS */
@@ -244,6 +251,8 @@ enum {
244 TCP_NLA_SNDQ_SIZE, /* Data (bytes) pending in send queue */ 251 TCP_NLA_SNDQ_SIZE, /* Data (bytes) pending in send queue */
245 TCP_NLA_CA_STATE, /* ca_state of socket */ 252 TCP_NLA_CA_STATE, /* ca_state of socket */
246 TCP_NLA_SND_SSTHRESH, /* Slow start size threshold */ 253 TCP_NLA_SND_SSTHRESH, /* Slow start size threshold */
254 TCP_NLA_DELIVERED, /* Data pkts delivered incl. out-of-order */
255 TCP_NLA_DELIVERED_CE, /* Like above but only ones w/ CE marks */
247 256
248}; 257};
249 258
@@ -271,4 +280,11 @@ struct tcp_diag_md5sig {
271 __u8 tcpm_key[TCP_MD5SIG_MAXKEYLEN]; 280 __u8 tcpm_key[TCP_MD5SIG_MAXKEYLEN];
272}; 281};
273 282
283/* setsockopt(fd, IPPROTO_TCP, TCP_ZEROCOPY_RECEIVE, ...) */
284
285struct tcp_zerocopy_receive {
286 __u64 address; /* in: address of mapping */
287 __u32 length; /* in/out: number of bytes to map/mapped */
288 __u32 recv_skip_hint; /* out: amount of bytes to skip */
289};
274#endif /* _UAPI_LINUX_TCP_H */ 290#endif /* _UAPI_LINUX_TCP_H */
diff --git a/include/uapi/linux/time.h b/include/uapi/linux/time.h
index 4c0338ea308a..fcf936656493 100644
--- a/include/uapi/linux/time.h
+++ b/include/uapi/linux/time.h
@@ -42,6 +42,13 @@ struct itimerval {
42 struct timeval it_value; /* current value */ 42 struct timeval it_value; /* current value */
43}; 43};
44 44
45#ifndef __kernel_timespec
46struct __kernel_timespec {
47 __kernel_time64_t tv_sec; /* seconds */
48 long long tv_nsec; /* nanoseconds */
49};
50#endif
51
45/* 52/*
46 * legacy timeval structure, only embedded in structures that 53 * legacy timeval structure, only embedded in structures that
47 * traditionally used 'timeval' to pass time intervals (not absolute 54 * traditionally used 'timeval' to pass time intervals (not absolute
diff --git a/include/uapi/linux/tipc.h b/include/uapi/linux/tipc.h
index bf6d28677cfe..6b2fd4d9655f 100644
--- a/include/uapi/linux/tipc.h
+++ b/include/uapi/linux/tipc.h
@@ -209,16 +209,16 @@ struct tipc_group_req {
209 * The string formatting for each name element is: 209 * The string formatting for each name element is:
210 * media: media 210 * media: media
211 * interface: media:interface name 211 * interface: media:interface name
212 * link: Z.C.N:interface-Z.C.N:interface 212 * link: node:interface-node:interface
213 *
214 */ 213 */
215 214#define TIPC_NODEID_LEN 16
216#define TIPC_MAX_MEDIA_NAME 16 215#define TIPC_MAX_MEDIA_NAME 16
217#define TIPC_MAX_IF_NAME 16 216#define TIPC_MAX_IF_NAME 16
218#define TIPC_MAX_BEARER_NAME 32 217#define TIPC_MAX_BEARER_NAME 32
219#define TIPC_MAX_LINK_NAME 68 218#define TIPC_MAX_LINK_NAME 68
220 219
221#define SIOCGETLINKNAME SIOCPROTOPRIVATE 220#define SIOCGETLINKNAME SIOCPROTOPRIVATE
221#define SIOCGETNODEID (SIOCPROTOPRIVATE + 1)
222 222
223struct tipc_sioc_ln_req { 223struct tipc_sioc_ln_req {
224 __u32 peer; 224 __u32 peer;
@@ -226,6 +226,10 @@ struct tipc_sioc_ln_req {
226 char linkname[TIPC_MAX_LINK_NAME]; 226 char linkname[TIPC_MAX_LINK_NAME];
227}; 227};
228 228
229struct tipc_sioc_nodeid_req {
230 __u32 peer;
231 char node_id[TIPC_NODEID_LEN];
232};
229 233
230/* The macros and functions below are deprecated: 234/* The macros and functions below are deprecated:
231 */ 235 */
diff --git a/include/uapi/linux/tipc_config.h b/include/uapi/linux/tipc_config.h
index 3f29e3c8ed06..4b2c93b1934c 100644
--- a/include/uapi/linux/tipc_config.h
+++ b/include/uapi/linux/tipc_config.h
@@ -185,6 +185,11 @@
185#define TIPC_DEF_LINK_WIN 50 185#define TIPC_DEF_LINK_WIN 50
186#define TIPC_MAX_LINK_WIN 8191 186#define TIPC_MAX_LINK_WIN 8191
187 187
188/*
189 * Default MTU for UDP media
190 */
191
192#define TIPC_DEF_LINK_UDP_MTU 14000
188 193
189struct tipc_node_info { 194struct tipc_node_info {
190 __be32 addr; /* network address of node */ 195 __be32 addr; /* network address of node */
diff --git a/include/uapi/linux/tipc_netlink.h b/include/uapi/linux/tipc_netlink.h
index 0affb682e5e3..85c11982c89b 100644
--- a/include/uapi/linux/tipc_netlink.h
+++ b/include/uapi/linux/tipc_netlink.h
@@ -266,6 +266,7 @@ enum {
266 TIPC_NLA_PROP_PRIO, /* u32 */ 266 TIPC_NLA_PROP_PRIO, /* u32 */
267 TIPC_NLA_PROP_TOL, /* u32 */ 267 TIPC_NLA_PROP_TOL, /* u32 */
268 TIPC_NLA_PROP_WIN, /* u32 */ 268 TIPC_NLA_PROP_WIN, /* u32 */
269 TIPC_NLA_PROP_MTU, /* u32 */
269 270
270 __TIPC_NLA_PROP_MAX, 271 __TIPC_NLA_PROP_MAX,
271 TIPC_NLA_PROP_MAX = __TIPC_NLA_PROP_MAX - 1 272 TIPC_NLA_PROP_MAX = __TIPC_NLA_PROP_MAX - 1
diff --git a/include/uapi/linux/tty_flags.h b/include/uapi/linux/tty_flags.h
index 6ac609a00dea..900a32e63424 100644
--- a/include/uapi/linux/tty_flags.h
+++ b/include/uapi/linux/tty_flags.h
@@ -13,7 +13,7 @@
13 */ 13 */
14#define ASYNCB_HUP_NOTIFY 0 /* Notify getty on hangups and closes 14#define ASYNCB_HUP_NOTIFY 0 /* Notify getty on hangups and closes
15 * on the callout port */ 15 * on the callout port */
16#define ASYNCB_FOURPORT 1 /* Set OU1, OUT2 per AST Fourport settings */ 16#define ASYNCB_FOURPORT 1 /* Set OUT1, OUT2 per AST Fourport settings */
17#define ASYNCB_SAK 2 /* Secure Attention Key (Orange book) */ 17#define ASYNCB_SAK 2 /* Secure Attention Key (Orange book) */
18#define ASYNCB_SPLIT_TERMIOS 3 /* [x] Separate termios for dialin/callout */ 18#define ASYNCB_SPLIT_TERMIOS 3 /* [x] Separate termios for dialin/callout */
19#define ASYNCB_SPD_HI 4 /* Use 57600 instead of 38400 bps */ 19#define ASYNCB_SPD_HI 4 /* Use 57600 instead of 38400 bps */
diff --git a/include/uapi/linux/types_32_64.h b/include/uapi/linux/types_32_64.h
new file mode 100644
index 000000000000..0a87ace34a57
--- /dev/null
+++ b/include/uapi/linux/types_32_64.h
@@ -0,0 +1,50 @@
1/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
2#ifndef _UAPI_LINUX_TYPES_32_64_H
3#define _UAPI_LINUX_TYPES_32_64_H
4
5/*
6 * linux/types_32_64.h
7 *
8 * Integer type declaration for pointers across 32-bit and 64-bit systems.
9 *
10 * Copyright (c) 2015-2018 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11 */
12
13#ifdef __KERNEL__
14# include <linux/types.h>
15#else
16# include <stdint.h>
17#endif
18
19#include <asm/byteorder.h>
20
21#ifdef __BYTE_ORDER
22# if (__BYTE_ORDER == __BIG_ENDIAN)
23# define LINUX_BYTE_ORDER_BIG_ENDIAN
24# else
25# define LINUX_BYTE_ORDER_LITTLE_ENDIAN
26# endif
27#else
28# ifdef __BIG_ENDIAN
29# define LINUX_BYTE_ORDER_BIG_ENDIAN
30# else
31# define LINUX_BYTE_ORDER_LITTLE_ENDIAN
32# endif
33#endif
34
35#ifdef __LP64__
36# define LINUX_FIELD_u32_u64(field) __u64 field
37# define LINUX_FIELD_u32_u64_INIT_ONSTACK(field, v) field = (intptr_t)v
38#else
39# ifdef LINUX_BYTE_ORDER_BIG_ENDIAN
40# define LINUX_FIELD_u32_u64(field) __u32 field ## _padding, field
41# define LINUX_FIELD_u32_u64_INIT_ONSTACK(field, v) \
42 field ## _padding = 0, field = (intptr_t)v
43# else
44# define LINUX_FIELD_u32_u64(field) __u32 field, field ## _padding
45# define LINUX_FIELD_u32_u64_INIT_ONSTACK(field, v) \
46 field = (intptr_t)v, field ## _padding = 0
47# endif
48#endif
49
50#endif /* _UAPI_LINUX_TYPES_32_64_H */
diff --git a/include/uapi/linux/udp.h b/include/uapi/linux/udp.h
index efb7b5991c2f..09d00f8c442b 100644
--- a/include/uapi/linux/udp.h
+++ b/include/uapi/linux/udp.h
@@ -32,6 +32,7 @@ struct udphdr {
32#define UDP_ENCAP 100 /* Set the socket to accept encapsulated packets */ 32#define UDP_ENCAP 100 /* Set the socket to accept encapsulated packets */
33#define UDP_NO_CHECK6_TX 101 /* Disable sending checksum for UDP6X */ 33#define UDP_NO_CHECK6_TX 101 /* Disable sending checksum for UDP6X */
34#define UDP_NO_CHECK6_RX 102 /* Disable accpeting checksum for UDP6 */ 34#define UDP_NO_CHECK6_RX 102 /* Disable accpeting checksum for UDP6 */
35#define UDP_SEGMENT 103 /* Set GSO segmentation size */
35 36
36/* UDP encapsulation types */ 37/* UDP encapsulation types */
37#define UDP_ENCAP_ESPINUDP_NON_IKE 1 /* draft-ietf-ipsec-nat-t-ike-00/01 */ 38#define UDP_ENCAP_ESPINUDP_NON_IKE 1 /* draft-ietf-ipsec-nat-t-ike-00/01 */
diff --git a/include/uapi/linux/usb/audio.h b/include/uapi/linux/usb/audio.h
index 3a78e7145689..13d98e6e0db1 100644
--- a/include/uapi/linux/usb/audio.h
+++ b/include/uapi/linux/usb/audio.h
@@ -285,9 +285,22 @@ static inline __u8 uac_mixer_unit_iChannelNames(struct uac_mixer_unit_descriptor
285static inline __u8 *uac_mixer_unit_bmControls(struct uac_mixer_unit_descriptor *desc, 285static inline __u8 *uac_mixer_unit_bmControls(struct uac_mixer_unit_descriptor *desc,
286 int protocol) 286 int protocol)
287{ 287{
288 return (protocol == UAC_VERSION_1) ? 288 switch (protocol) {
289 &desc->baSourceID[desc->bNrInPins + 4] : 289 case UAC_VERSION_1:
290 &desc->baSourceID[desc->bNrInPins + 6]; 290 return &desc->baSourceID[desc->bNrInPins + 4];
291 case UAC_VERSION_2:
292 return &desc->baSourceID[desc->bNrInPins + 6];
293 case UAC_VERSION_3:
294 return &desc->baSourceID[desc->bNrInPins + 2];
295 default:
296 return NULL;
297 }
298}
299
300static inline __u16 uac3_mixer_unit_wClusterDescrID(struct uac_mixer_unit_descriptor *desc)
301{
302 return (desc->baSourceID[desc->bNrInPins + 1] << 8) |
303 desc->baSourceID[desc->bNrInPins];
291} 304}
292 305
293static inline __u8 uac_mixer_unit_iMixer(struct uac_mixer_unit_descriptor *desc) 306static inline __u8 uac_mixer_unit_iMixer(struct uac_mixer_unit_descriptor *desc)
diff --git a/include/uapi/linux/usb/ch11.h b/include/uapi/linux/usb/ch11.h
index 29c120c88747..fb0cd24c392c 100644
--- a/include/uapi/linux/usb/ch11.h
+++ b/include/uapi/linux/usb/ch11.h
@@ -197,6 +197,11 @@ struct usb_port_status {
197#define USB_EXT_PORT_STAT_RX_LANES 0x00000f00 197#define USB_EXT_PORT_STAT_RX_LANES 0x00000f00
198#define USB_EXT_PORT_STAT_TX_LANES 0x0000f000 198#define USB_EXT_PORT_STAT_TX_LANES 0x0000f000
199 199
200#define USB_EXT_PORT_RX_LANES(p) \
201 (((p) & USB_EXT_PORT_STAT_RX_LANES) >> 8)
202#define USB_EXT_PORT_TX_LANES(p) \
203 (((p) & USB_EXT_PORT_STAT_TX_LANES) >> 12)
204
200/* 205/*
201 * wHubCharacteristics (masks) 206 * wHubCharacteristics (masks)
202 * See USB 2.0 spec Table 11-13, offset 3 207 * See USB 2.0 spec Table 11-13, offset 3
diff --git a/include/uapi/linux/virtio_gpu.h b/include/uapi/linux/virtio_gpu.h
index 4b04ead26cd9..f43c3c6171ff 100644
--- a/include/uapi/linux/virtio_gpu.h
+++ b/include/uapi/linux/virtio_gpu.h
@@ -260,6 +260,7 @@ struct virtio_gpu_cmd_submit {
260}; 260};
261 261
262#define VIRTIO_GPU_CAPSET_VIRGL 1 262#define VIRTIO_GPU_CAPSET_VIRGL 1
263#define VIRTIO_GPU_CAPSET_VIRGL2 2
263 264
264/* VIRTIO_GPU_CMD_GET_CAPSET_INFO */ 265/* VIRTIO_GPU_CMD_GET_CAPSET_INFO */
265struct virtio_gpu_get_capset_info { 266struct virtio_gpu_get_capset_info {
diff --git a/include/uapi/linux/virtio_net.h b/include/uapi/linux/virtio_net.h
index 5de6ed37695b..a3715a3224c1 100644
--- a/include/uapi/linux/virtio_net.h
+++ b/include/uapi/linux/virtio_net.h
@@ -57,6 +57,9 @@
57 * Steering */ 57 * Steering */
58#define VIRTIO_NET_F_CTRL_MAC_ADDR 23 /* Set MAC address */ 58#define VIRTIO_NET_F_CTRL_MAC_ADDR 23 /* Set MAC address */
59 59
60#define VIRTIO_NET_F_STANDBY 62 /* Act as standby for another device
61 * with the same MAC.
62 */
60#define VIRTIO_NET_F_SPEED_DUPLEX 63 /* Device set linkspeed and duplex */ 63#define VIRTIO_NET_F_SPEED_DUPLEX 63 /* Device set linkspeed and duplex */
61 64
62#ifndef VIRTIO_NET_NO_LEGACY 65#ifndef VIRTIO_NET_NO_LEGACY
diff --git a/include/uapi/linux/vmcore.h b/include/uapi/linux/vmcore.h
new file mode 100644
index 000000000000..022619668e0e
--- /dev/null
+++ b/include/uapi/linux/vmcore.h
@@ -0,0 +1,18 @@
1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _UAPI_VMCORE_H
3#define _UAPI_VMCORE_H
4
5#include <linux/types.h>
6
7#define VMCOREDD_NOTE_NAME "LINUX"
8#define VMCOREDD_MAX_NAME_BYTES 44
9
10struct vmcoredd_header {
11 __u32 n_namesz; /* Name size */
12 __u32 n_descsz; /* Content size */
13 __u32 n_type; /* NT_VMCOREDD */
14 __u8 name[8]; /* LINUX\0\0\0 */
15 __u8 dump_name[VMCOREDD_MAX_NAME_BYTES]; /* Device dump's name */
16};
17
18#endif /* _UAPI_VMCORE_H */