Merge tag 'net-next-5.13' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next
Pull networking updates from Jakub Kicinski:
"Core:
- bpf:
- allow bpf programs calling kernel functions (initially to
reuse TCP congestion control implementations)
- enable task local storage for tracing programs - remove the
need to store per-task state in hash maps, and allow tracing
programs access to task local storage previously added for
BPF_LSM
- add bpf_for_each_map_elem() helper, allowing programs to walk
all map elements in a more robust and easier to verify fashion
- sockmap: support UDP and cross-protocol BPF_SK_SKB_VERDICT
redirection
- lpm: add support for batched ops in LPM trie
- add BTF_KIND_FLOAT support - mostly to allow use of BTF on
s390 which has floats in its headers files
- improve BPF syscall documentation and extend the use of kdoc
parsing scripts we already employ for bpf-helpers
- libbpf, bpftool: support static linking of BPF ELF files
- improve support for encapsulation of L2 packets
- xdp: restructure redirect actions to avoid a runtime lookup,
improving performance by 4-8% in microbenchmarks
- xsk: build skb by page (aka generic zerocopy xmit) - improve
performance of software AF_XDP path by 33% for devices which don't
need headers in the linear skb part (e.g. virtio)
- nexthop: resilient next-hop groups - improve path stability on
next-hops group changes (incl. offload for mlxsw)
- ipv6: segment routing: add support for IPv4 decapsulation
- icmp: add support for RFC 8335 extended PROBE messages
- inet: use bigger hash table for IP ID generation
- tcp: deal better with delayed TX completions - make sure we don't
give up on fast TCP retransmissions only because driver is slow in
reporting that it completed transmitting the original
- tcp: reorder tcp_congestion_ops for better cache locality
- mptcp:
- add sockopt support for common TCP options
- add support for common TCP msg flags
- include multiple address ids in RM_ADDR
- add reset option support for resetting one subflow
- udp: GRO L4 improvements - improve 'forward' / 'frag_list'
co-existence with UDP tunnel GRO, allowing the first to take place
correctly even for encapsulated UDP traffic
- micro-optimize dev_gro_receive() and flow dissection, avoid
retpoline overhead on VLAN and TEB GRO
- use less memory for sysctls, add a new sysctl type, to allow using
u8 instead of "int" and "long" and shrink networking sysctls
- veth: allow GRO without XDP - this allows aggregating UDP packets
before handing them off to routing, bridge, OvS, etc.
- allow specifing ifindex when device is moved to another namespace
- netfilter:
- nft_socket: add support for cgroupsv2
- nftables: add catch-all set element - special element used to
define a default action in case normal lookup missed
- use net_generic infra in many modules to avoid allocating
per-ns memory unnecessarily
- xps: improve the xps handling to avoid potential out-of-bound
accesses and use-after-free when XPS change race with other
re-configuration under traffic
- add a config knob to turn off per-cpu netdev refcnt to catch
underflows in testing
Device APIs:
- add WWAN subsystem to organize the WWAN interfaces better and
hopefully start driving towards more unified and vendor-
independent APIs
- ethtool:
- add interface for reading IEEE MIB stats (incl. mlx5 and bnxt
support)
- allow network drivers to dump arbitrary SFP EEPROM data,
current offset+length API was a poor fit for modern SFP which
define EEPROM in terms of pages (incl. mlx5 support)
- act_police, flow_offload: add support for packet-per-second
policing (incl. offload for nfp)
- psample: add additional metadata attributes like transit delay for
packets sampled from switch HW (and corresponding egress and
policy-based sampling in the mlxsw driver)
- dsa: improve support for sandwiched LAGs with bridge and DSA
- netfilter:
- flowtable: use direct xmit in topologies with IP forwarding,
bridging, vlans etc.
- nftables: counter hardware offload support
- Bluetooth:
- improvements for firmware download w/ Intel devices
- add support for reading AOSP vendor capabilities
- add support for virtio transport driver
- mac80211:
- allow concurrent monitor iface and ethernet rx decap
- set priority and queue mapping for injected frames
- phy: add support for Clause-45 PHY Loopback
- pci/iov: add sysfs MSI-X vector assignment interface to distribute
MSI-X resources to VFs (incl. mlx5 support)
New hardware/drivers:
- dsa: mv88e6xxx: add support for Marvell mv88e6393x - 11-port
Ethernet switch with 8x 1-Gigabit Ethernet and 3x 10-Gigabit
interfaces.
- dsa: support for legacy Broadcom tags used on BCM5325, BCM5365 and
BCM63xx switches
- Microchip KSZ8863 and KSZ8873; 3x 10/100Mbps Ethernet switches
- ath11k: support for QCN9074 a 802.11ax device
- Bluetooth: Broadcom BCM4330 and BMC4334
- phy: Marvell 88X2222 transceiver support
- mdio: add BCM6368 MDIO mux bus controller
- r8152: support RTL8153 and RTL8156 (USB Ethernet) chips
- mana: driver for Microsoft Azure Network Adapter (MANA)
- Actions Semi Owl Ethernet MAC
- can: driver for ETAS ES58X CAN/USB interfaces
Pure driver changes:
- add XDP support to: enetc, igc, stmmac
- add AF_XDP support to: stmmac
- virtio:
- page_to_skb() use build_skb when there's sufficient tailroom
(21% improvement for 1000B UDP frames)
- support XDP even without dedicated Tx queues - share the Tx
queues with the stack when necessary
- mlx5:
- flow rules: add support for mirroring with conntrack, matching
on ICMP, GTP, flex filters and more
- support packet sampling with flow offloads
- persist uplink representor netdev across eswitch mode changes
- allow coexistence of CQE compression and HW time-stamping
- add ethtool extended link error state reporting
- ice, iavf: support flow filters, UDP Segmentation Offload
- dpaa2-switch:
- move the driver out of staging
- add spanning tree (STP) support
- add rx copybreak support
- add tc flower hardware offload on ingress traffic
- ionic:
- implement Rx page reuse
- support HW PTP time-stamping
- octeon: support TC hardware offloads - flower matching on ingress
and egress ratelimitting.
- stmmac:
- add RX frame steering based on VLAN priority in tc flower
- support frame preemption (FPE)
- intel: add cross time-stamping freq difference adjustment
- ocelot:
- support forwarding of MRP frames in HW
- support multiple bridges
- support PTP Sync one-step timestamping
- dsa: mv88e6xxx, dpaa2-switch: offload bridge port flags like
learning, flooding etc.
- ipa: add IPA v4.5, v4.9 and v4.11 support (Qualcomm SDX55, SM8350,
SC7280 SoCs)
- mt7601u: enable TDLS support
- mt76:
- add support for 802.3 rx frames (mt7915/mt7615)
- mt7915 flash pre-calibration support
- mt7921/mt7663 runtime power management fixes"
* tag 'net-next-5.13' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next: (2451 commits)
net: selftest: fix build issue if INET is disabled
net: netrom: nr_in: Remove redundant assignment to ns
net: tun: Remove redundant assignment to ret
net: phy: marvell: add downshift support for M88E1240
net: dsa: ksz: Make reg_mib_cnt a u8 as it never exceeds 255
net/sched: act_ct: Remove redundant ct get and check
icmp: standardize naming of RFC 8335 PROBE constants
bpf, selftests: Update array map tests for per-cpu batched ops
bpf: Add batched ops support for percpu array
bpf: Implement formatted output helpers with bstr_printf
seq_file: Add a seq_bprintf function
sfc: adjust efx->xdp_tx_queue_count with the real number of initialized queues
net:nfc:digital: Fix a double free in digital_tg_recv_dep_req
net: fix a concurrency bug in l2tp_tunnel_register()
net/smc: Remove redundant assignment to rc
mpls: Remove redundant assignment to err
llc2: Remove redundant assignment to rc
net/tls: Remove redundant initialization of record
rds: Remove redundant assignment to nr_sig
dt-bindings: net: mdio-gpio: add compatible for microchip,mdio-smi0
...
This commit is contained in:
+831
-3
@@ -93,7 +93,738 @@ union bpf_iter_link_info {
|
||||
} map;
|
||||
};
|
||||
|
||||
/* BPF syscall commands, see bpf(2) man-page for details. */
|
||||
/* BPF syscall commands, see bpf(2) man-page for more details. */
|
||||
/**
|
||||
* DOC: eBPF Syscall Preamble
|
||||
*
|
||||
* The operation to be performed by the **bpf**\ () system call is determined
|
||||
* by the *cmd* argument. Each operation takes an accompanying argument,
|
||||
* provided via *attr*, which is a pointer to a union of type *bpf_attr* (see
|
||||
* below). The size argument is the size of the union pointed to by *attr*.
|
||||
*/
|
||||
/**
|
||||
* DOC: eBPF Syscall Commands
|
||||
*
|
||||
* BPF_MAP_CREATE
|
||||
* Description
|
||||
* Create a map and return a file descriptor that refers to the
|
||||
* map. The close-on-exec file descriptor flag (see **fcntl**\ (2))
|
||||
* is automatically enabled for the new file descriptor.
|
||||
*
|
||||
* Applying **close**\ (2) to the file descriptor returned by
|
||||
* **BPF_MAP_CREATE** will delete the map (but see NOTES).
|
||||
*
|
||||
* Return
|
||||
* A new file descriptor (a nonnegative integer), or -1 if an
|
||||
* error occurred (in which case, *errno* is set appropriately).
|
||||
*
|
||||
* BPF_MAP_LOOKUP_ELEM
|
||||
* Description
|
||||
* Look up an element with a given *key* in the map referred to
|
||||
* by the file descriptor *map_fd*.
|
||||
*
|
||||
* The *flags* argument may be specified as one of the
|
||||
* following:
|
||||
*
|
||||
* **BPF_F_LOCK**
|
||||
* Look up the value of a spin-locked map without
|
||||
* returning the lock. This must be specified if the
|
||||
* elements contain a spinlock.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* BPF_MAP_UPDATE_ELEM
|
||||
* Description
|
||||
* Create or update an element (key/value pair) in a specified map.
|
||||
*
|
||||
* The *flags* argument should be specified as one of the
|
||||
* following:
|
||||
*
|
||||
* **BPF_ANY**
|
||||
* Create a new element or update an existing element.
|
||||
* **BPF_NOEXIST**
|
||||
* Create a new element only if it did not exist.
|
||||
* **BPF_EXIST**
|
||||
* Update an existing element.
|
||||
* **BPF_F_LOCK**
|
||||
* Update a spin_lock-ed map element.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* May set *errno* to **EINVAL**, **EPERM**, **ENOMEM**,
|
||||
* **E2BIG**, **EEXIST**, or **ENOENT**.
|
||||
*
|
||||
* **E2BIG**
|
||||
* The number of elements in the map reached the
|
||||
* *max_entries* limit specified at map creation time.
|
||||
* **EEXIST**
|
||||
* If *flags* specifies **BPF_NOEXIST** and the element
|
||||
* with *key* already exists in the map.
|
||||
* **ENOENT**
|
||||
* If *flags* specifies **BPF_EXIST** and the element with
|
||||
* *key* does not exist in the map.
|
||||
*
|
||||
* BPF_MAP_DELETE_ELEM
|
||||
* Description
|
||||
* Look up and delete an element by key in a specified map.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* BPF_MAP_GET_NEXT_KEY
|
||||
* Description
|
||||
* Look up an element by key in a specified map and return the key
|
||||
* of the next element. Can be used to iterate over all elements
|
||||
* in the map.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* The following cases can be used to iterate over all elements of
|
||||
* the map:
|
||||
*
|
||||
* * If *key* is not found, the operation returns zero and sets
|
||||
* the *next_key* pointer to the key of the first element.
|
||||
* * If *key* is found, the operation returns zero and sets the
|
||||
* *next_key* pointer to the key of the next element.
|
||||
* * If *key* is the last element, returns -1 and *errno* is set
|
||||
* to **ENOENT**.
|
||||
*
|
||||
* May set *errno* to **ENOMEM**, **EFAULT**, **EPERM**, or
|
||||
* **EINVAL** on error.
|
||||
*
|
||||
* BPF_PROG_LOAD
|
||||
* Description
|
||||
* Verify and load an eBPF program, returning a new file
|
||||
* descriptor associated with the program.
|
||||
*
|
||||
* Applying **close**\ (2) to the file descriptor returned by
|
||||
* **BPF_PROG_LOAD** will unload the eBPF program (but see NOTES).
|
||||
*
|
||||
* The close-on-exec file descriptor flag (see **fcntl**\ (2)) is
|
||||
* automatically enabled for the new file descriptor.
|
||||
*
|
||||
* Return
|
||||
* A new file descriptor (a nonnegative integer), or -1 if an
|
||||
* error occurred (in which case, *errno* is set appropriately).
|
||||
*
|
||||
* BPF_OBJ_PIN
|
||||
* Description
|
||||
* Pin an eBPF program or map referred by the specified *bpf_fd*
|
||||
* to the provided *pathname* on the filesystem.
|
||||
*
|
||||
* The *pathname* argument must not contain a dot (".").
|
||||
*
|
||||
* On success, *pathname* retains a reference to the eBPF object,
|
||||
* preventing deallocation of the object when the original
|
||||
* *bpf_fd* is closed. This allow the eBPF object to live beyond
|
||||
* **close**\ (\ *bpf_fd*\ ), and hence the lifetime of the parent
|
||||
* process.
|
||||
*
|
||||
* Applying **unlink**\ (2) or similar calls to the *pathname*
|
||||
* unpins the object from the filesystem, removing the reference.
|
||||
* If no other file descriptors or filesystem nodes refer to the
|
||||
* same object, it will be deallocated (see NOTES).
|
||||
*
|
||||
* The filesystem type for the parent directory of *pathname* must
|
||||
* be **BPF_FS_MAGIC**.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* BPF_OBJ_GET
|
||||
* Description
|
||||
* Open a file descriptor for the eBPF object pinned to the
|
||||
* specified *pathname*.
|
||||
*
|
||||
* Return
|
||||
* A new file descriptor (a nonnegative integer), or -1 if an
|
||||
* error occurred (in which case, *errno* is set appropriately).
|
||||
*
|
||||
* BPF_PROG_ATTACH
|
||||
* Description
|
||||
* Attach an eBPF program to a *target_fd* at the specified
|
||||
* *attach_type* hook.
|
||||
*
|
||||
* The *attach_type* specifies the eBPF attachment point to
|
||||
* attach the program to, and must be one of *bpf_attach_type*
|
||||
* (see below).
|
||||
*
|
||||
* The *attach_bpf_fd* must be a valid file descriptor for a
|
||||
* loaded eBPF program of a cgroup, flow dissector, LIRC, sockmap
|
||||
* or sock_ops type corresponding to the specified *attach_type*.
|
||||
*
|
||||
* The *target_fd* must be a valid file descriptor for a kernel
|
||||
* object which depends on the attach type of *attach_bpf_fd*:
|
||||
*
|
||||
* **BPF_PROG_TYPE_CGROUP_DEVICE**,
|
||||
* **BPF_PROG_TYPE_CGROUP_SKB**,
|
||||
* **BPF_PROG_TYPE_CGROUP_SOCK**,
|
||||
* **BPF_PROG_TYPE_CGROUP_SOCK_ADDR**,
|
||||
* **BPF_PROG_TYPE_CGROUP_SOCKOPT**,
|
||||
* **BPF_PROG_TYPE_CGROUP_SYSCTL**,
|
||||
* **BPF_PROG_TYPE_SOCK_OPS**
|
||||
*
|
||||
* Control Group v2 hierarchy with the eBPF controller
|
||||
* enabled. Requires the kernel to be compiled with
|
||||
* **CONFIG_CGROUP_BPF**.
|
||||
*
|
||||
* **BPF_PROG_TYPE_FLOW_DISSECTOR**
|
||||
*
|
||||
* Network namespace (eg /proc/self/ns/net).
|
||||
*
|
||||
* **BPF_PROG_TYPE_LIRC_MODE2**
|
||||
*
|
||||
* LIRC device path (eg /dev/lircN). Requires the kernel
|
||||
* to be compiled with **CONFIG_BPF_LIRC_MODE2**.
|
||||
*
|
||||
* **BPF_PROG_TYPE_SK_SKB**,
|
||||
* **BPF_PROG_TYPE_SK_MSG**
|
||||
*
|
||||
* eBPF map of socket type (eg **BPF_MAP_TYPE_SOCKHASH**).
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* BPF_PROG_DETACH
|
||||
* Description
|
||||
* Detach the eBPF program associated with the *target_fd* at the
|
||||
* hook specified by *attach_type*. The program must have been
|
||||
* previously attached using **BPF_PROG_ATTACH**.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* BPF_PROG_TEST_RUN
|
||||
* Description
|
||||
* Run the eBPF program associated with the *prog_fd* a *repeat*
|
||||
* number of times against a provided program context *ctx_in* and
|
||||
* data *data_in*, and return the modified program context
|
||||
* *ctx_out*, *data_out* (for example, packet data), result of the
|
||||
* execution *retval*, and *duration* of the test run.
|
||||
*
|
||||
* The sizes of the buffers provided as input and output
|
||||
* parameters *ctx_in*, *ctx_out*, *data_in*, and *data_out* must
|
||||
* be provided in the corresponding variables *ctx_size_in*,
|
||||
* *ctx_size_out*, *data_size_in*, and/or *data_size_out*. If any
|
||||
* of these parameters are not provided (ie set to NULL), the
|
||||
* corresponding size field must be zero.
|
||||
*
|
||||
* Some program types have particular requirements:
|
||||
*
|
||||
* **BPF_PROG_TYPE_SK_LOOKUP**
|
||||
* *data_in* and *data_out* must be NULL.
|
||||
*
|
||||
* **BPF_PROG_TYPE_XDP**
|
||||
* *ctx_in* and *ctx_out* must be NULL.
|
||||
*
|
||||
* **BPF_PROG_TYPE_RAW_TRACEPOINT**,
|
||||
* **BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE**
|
||||
*
|
||||
* *ctx_out*, *data_in* and *data_out* must be NULL.
|
||||
* *repeat* must be zero.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* **ENOSPC**
|
||||
* Either *data_size_out* or *ctx_size_out* is too small.
|
||||
* **ENOTSUPP**
|
||||
* This command is not supported by the program type of
|
||||
* the program referred to by *prog_fd*.
|
||||
*
|
||||
* BPF_PROG_GET_NEXT_ID
|
||||
* Description
|
||||
* Fetch the next eBPF program currently loaded into the kernel.
|
||||
*
|
||||
* Looks for the eBPF program with an id greater than *start_id*
|
||||
* and updates *next_id* on success. If no other eBPF programs
|
||||
* remain with ids higher than *start_id*, returns -1 and sets
|
||||
* *errno* to **ENOENT**.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, or when no id remains, -1
|
||||
* is returned and *errno* is set appropriately.
|
||||
*
|
||||
* BPF_MAP_GET_NEXT_ID
|
||||
* Description
|
||||
* Fetch the next eBPF map currently loaded into the kernel.
|
||||
*
|
||||
* Looks for the eBPF map with an id greater than *start_id*
|
||||
* and updates *next_id* on success. If no other eBPF maps
|
||||
* remain with ids higher than *start_id*, returns -1 and sets
|
||||
* *errno* to **ENOENT**.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, or when no id remains, -1
|
||||
* is returned and *errno* is set appropriately.
|
||||
*
|
||||
* BPF_PROG_GET_FD_BY_ID
|
||||
* Description
|
||||
* Open a file descriptor for the eBPF program corresponding to
|
||||
* *prog_id*.
|
||||
*
|
||||
* Return
|
||||
* A new file descriptor (a nonnegative integer), or -1 if an
|
||||
* error occurred (in which case, *errno* is set appropriately).
|
||||
*
|
||||
* BPF_MAP_GET_FD_BY_ID
|
||||
* Description
|
||||
* Open a file descriptor for the eBPF map corresponding to
|
||||
* *map_id*.
|
||||
*
|
||||
* Return
|
||||
* A new file descriptor (a nonnegative integer), or -1 if an
|
||||
* error occurred (in which case, *errno* is set appropriately).
|
||||
*
|
||||
* BPF_OBJ_GET_INFO_BY_FD
|
||||
* Description
|
||||
* Obtain information about the eBPF object corresponding to
|
||||
* *bpf_fd*.
|
||||
*
|
||||
* Populates up to *info_len* bytes of *info*, which will be in
|
||||
* one of the following formats depending on the eBPF object type
|
||||
* of *bpf_fd*:
|
||||
*
|
||||
* * **struct bpf_prog_info**
|
||||
* * **struct bpf_map_info**
|
||||
* * **struct bpf_btf_info**
|
||||
* * **struct bpf_link_info**
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* BPF_PROG_QUERY
|
||||
* Description
|
||||
* Obtain information about eBPF programs associated with the
|
||||
* specified *attach_type* hook.
|
||||
*
|
||||
* The *target_fd* must be a valid file descriptor for a kernel
|
||||
* object which depends on the attach type of *attach_bpf_fd*:
|
||||
*
|
||||
* **BPF_PROG_TYPE_CGROUP_DEVICE**,
|
||||
* **BPF_PROG_TYPE_CGROUP_SKB**,
|
||||
* **BPF_PROG_TYPE_CGROUP_SOCK**,
|
||||
* **BPF_PROG_TYPE_CGROUP_SOCK_ADDR**,
|
||||
* **BPF_PROG_TYPE_CGROUP_SOCKOPT**,
|
||||
* **BPF_PROG_TYPE_CGROUP_SYSCTL**,
|
||||
* **BPF_PROG_TYPE_SOCK_OPS**
|
||||
*
|
||||
* Control Group v2 hierarchy with the eBPF controller
|
||||
* enabled. Requires the kernel to be compiled with
|
||||
* **CONFIG_CGROUP_BPF**.
|
||||
*
|
||||
* **BPF_PROG_TYPE_FLOW_DISSECTOR**
|
||||
*
|
||||
* Network namespace (eg /proc/self/ns/net).
|
||||
*
|
||||
* **BPF_PROG_TYPE_LIRC_MODE2**
|
||||
*
|
||||
* LIRC device path (eg /dev/lircN). Requires the kernel
|
||||
* to be compiled with **CONFIG_BPF_LIRC_MODE2**.
|
||||
*
|
||||
* **BPF_PROG_QUERY** always fetches the number of programs
|
||||
* attached and the *attach_flags* which were used to attach those
|
||||
* programs. Additionally, if *prog_ids* is nonzero and the number
|
||||
* of attached programs is less than *prog_cnt*, populates
|
||||
* *prog_ids* with the eBPF program ids of the programs attached
|
||||
* at *target_fd*.
|
||||
*
|
||||
* The following flags may alter the result:
|
||||
*
|
||||
* **BPF_F_QUERY_EFFECTIVE**
|
||||
* Only return information regarding programs which are
|
||||
* currently effective at the specified *target_fd*.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* BPF_RAW_TRACEPOINT_OPEN
|
||||
* Description
|
||||
* Attach an eBPF program to a tracepoint *name* to access kernel
|
||||
* internal arguments of the tracepoint in their raw form.
|
||||
*
|
||||
* The *prog_fd* must be a valid file descriptor associated with
|
||||
* a loaded eBPF program of type **BPF_PROG_TYPE_RAW_TRACEPOINT**.
|
||||
*
|
||||
* No ABI guarantees are made about the content of tracepoint
|
||||
* arguments exposed to the corresponding eBPF program.
|
||||
*
|
||||
* Applying **close**\ (2) to the file descriptor returned by
|
||||
* **BPF_RAW_TRACEPOINT_OPEN** will delete the map (but see NOTES).
|
||||
*
|
||||
* Return
|
||||
* A new file descriptor (a nonnegative integer), or -1 if an
|
||||
* error occurred (in which case, *errno* is set appropriately).
|
||||
*
|
||||
* BPF_BTF_LOAD
|
||||
* Description
|
||||
* Verify and load BPF Type Format (BTF) metadata into the kernel,
|
||||
* returning a new file descriptor associated with the metadata.
|
||||
* BTF is described in more detail at
|
||||
* https://www.kernel.org/doc/html/latest/bpf/btf.html.
|
||||
*
|
||||
* The *btf* parameter must point to valid memory providing
|
||||
* *btf_size* bytes of BTF binary metadata.
|
||||
*
|
||||
* The returned file descriptor can be passed to other **bpf**\ ()
|
||||
* subcommands such as **BPF_PROG_LOAD** or **BPF_MAP_CREATE** to
|
||||
* associate the BTF with those objects.
|
||||
*
|
||||
* Similar to **BPF_PROG_LOAD**, **BPF_BTF_LOAD** has optional
|
||||
* parameters to specify a *btf_log_buf*, *btf_log_size* and
|
||||
* *btf_log_level* which allow the kernel to return freeform log
|
||||
* output regarding the BTF verification process.
|
||||
*
|
||||
* Return
|
||||
* A new file descriptor (a nonnegative integer), or -1 if an
|
||||
* error occurred (in which case, *errno* is set appropriately).
|
||||
*
|
||||
* BPF_BTF_GET_FD_BY_ID
|
||||
* Description
|
||||
* Open a file descriptor for the BPF Type Format (BTF)
|
||||
* corresponding to *btf_id*.
|
||||
*
|
||||
* Return
|
||||
* A new file descriptor (a nonnegative integer), or -1 if an
|
||||
* error occurred (in which case, *errno* is set appropriately).
|
||||
*
|
||||
* BPF_TASK_FD_QUERY
|
||||
* Description
|
||||
* Obtain information about eBPF programs associated with the
|
||||
* target process identified by *pid* and *fd*.
|
||||
*
|
||||
* If the *pid* and *fd* are associated with a tracepoint, kprobe
|
||||
* or uprobe perf event, then the *prog_id* and *fd_type* will
|
||||
* be populated with the eBPF program id and file descriptor type
|
||||
* of type **bpf_task_fd_type**. If associated with a kprobe or
|
||||
* uprobe, the *probe_offset* and *probe_addr* will also be
|
||||
* populated. Optionally, if *buf* is provided, then up to
|
||||
* *buf_len* bytes of *buf* will be populated with the name of
|
||||
* the tracepoint, kprobe or uprobe.
|
||||
*
|
||||
* The resulting *prog_id* may be introspected in deeper detail
|
||||
* using **BPF_PROG_GET_FD_BY_ID** and **BPF_OBJ_GET_INFO_BY_FD**.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* BPF_MAP_LOOKUP_AND_DELETE_ELEM
|
||||
* Description
|
||||
* Look up an element with the given *key* in the map referred to
|
||||
* by the file descriptor *fd*, and if found, delete the element.
|
||||
*
|
||||
* The **BPF_MAP_TYPE_QUEUE** and **BPF_MAP_TYPE_STACK** map types
|
||||
* implement this command as a "pop" operation, deleting the top
|
||||
* element rather than one corresponding to *key*.
|
||||
* The *key* and *key_len* parameters should be zeroed when
|
||||
* issuing this operation for these map types.
|
||||
*
|
||||
* This command is only valid for the following map types:
|
||||
* * **BPF_MAP_TYPE_QUEUE**
|
||||
* * **BPF_MAP_TYPE_STACK**
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* BPF_MAP_FREEZE
|
||||
* Description
|
||||
* Freeze the permissions of the specified map.
|
||||
*
|
||||
* Write permissions may be frozen by passing zero *flags*.
|
||||
* Upon success, no future syscall invocations may alter the
|
||||
* map state of *map_fd*. Write operations from eBPF programs
|
||||
* are still possible for a frozen map.
|
||||
*
|
||||
* Not supported for maps of type **BPF_MAP_TYPE_STRUCT_OPS**.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* BPF_BTF_GET_NEXT_ID
|
||||
* Description
|
||||
* Fetch the next BPF Type Format (BTF) object currently loaded
|
||||
* into the kernel.
|
||||
*
|
||||
* Looks for the BTF object with an id greater than *start_id*
|
||||
* and updates *next_id* on success. If no other BTF objects
|
||||
* remain with ids higher than *start_id*, returns -1 and sets
|
||||
* *errno* to **ENOENT**.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, or when no id remains, -1
|
||||
* is returned and *errno* is set appropriately.
|
||||
*
|
||||
* BPF_MAP_LOOKUP_BATCH
|
||||
* Description
|
||||
* Iterate and fetch multiple elements in a map.
|
||||
*
|
||||
* Two opaque values are used to manage batch operations,
|
||||
* *in_batch* and *out_batch*. Initially, *in_batch* must be set
|
||||
* to NULL to begin the batched operation. After each subsequent
|
||||
* **BPF_MAP_LOOKUP_BATCH**, the caller should pass the resultant
|
||||
* *out_batch* as the *in_batch* for the next operation to
|
||||
* continue iteration from the current point.
|
||||
*
|
||||
* The *keys* and *values* are output parameters which must point
|
||||
* to memory large enough to hold *count* items based on the key
|
||||
* and value size of the map *map_fd*. The *keys* buffer must be
|
||||
* of *key_size* * *count*. The *values* buffer must be of
|
||||
* *value_size* * *count*.
|
||||
*
|
||||
* The *elem_flags* argument may be specified as one of the
|
||||
* following:
|
||||
*
|
||||
* **BPF_F_LOCK**
|
||||
* Look up the value of a spin-locked map without
|
||||
* returning the lock. This must be specified if the
|
||||
* elements contain a spinlock.
|
||||
*
|
||||
* On success, *count* elements from the map are copied into the
|
||||
* user buffer, with the keys copied into *keys* and the values
|
||||
* copied into the corresponding indices in *values*.
|
||||
*
|
||||
* If an error is returned and *errno* is not **EFAULT**, *count*
|
||||
* is set to the number of successfully processed elements.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* May set *errno* to **ENOSPC** to indicate that *keys* or
|
||||
* *values* is too small to dump an entire bucket during
|
||||
* iteration of a hash-based map type.
|
||||
*
|
||||
* BPF_MAP_LOOKUP_AND_DELETE_BATCH
|
||||
* Description
|
||||
* Iterate and delete all elements in a map.
|
||||
*
|
||||
* This operation has the same behavior as
|
||||
* **BPF_MAP_LOOKUP_BATCH** with two exceptions:
|
||||
*
|
||||
* * Every element that is successfully returned is also deleted
|
||||
* from the map. This is at least *count* elements. Note that
|
||||
* *count* is both an input and an output parameter.
|
||||
* * Upon returning with *errno* set to **EFAULT**, up to
|
||||
* *count* elements may be deleted without returning the keys
|
||||
* and values of the deleted elements.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* BPF_MAP_UPDATE_BATCH
|
||||
* Description
|
||||
* Update multiple elements in a map by *key*.
|
||||
*
|
||||
* The *keys* and *values* are input parameters which must point
|
||||
* to memory large enough to hold *count* items based on the key
|
||||
* and value size of the map *map_fd*. The *keys* buffer must be
|
||||
* of *key_size* * *count*. The *values* buffer must be of
|
||||
* *value_size* * *count*.
|
||||
*
|
||||
* Each element specified in *keys* is sequentially updated to the
|
||||
* value in the corresponding index in *values*. The *in_batch*
|
||||
* and *out_batch* parameters are ignored and should be zeroed.
|
||||
*
|
||||
* The *elem_flags* argument should be specified as one of the
|
||||
* following:
|
||||
*
|
||||
* **BPF_ANY**
|
||||
* Create new elements or update a existing elements.
|
||||
* **BPF_NOEXIST**
|
||||
* Create new elements only if they do not exist.
|
||||
* **BPF_EXIST**
|
||||
* Update existing elements.
|
||||
* **BPF_F_LOCK**
|
||||
* Update spin_lock-ed map elements. This must be
|
||||
* specified if the map value contains a spinlock.
|
||||
*
|
||||
* On success, *count* elements from the map are updated.
|
||||
*
|
||||
* If an error is returned and *errno* is not **EFAULT**, *count*
|
||||
* is set to the number of successfully processed elements.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* May set *errno* to **EINVAL**, **EPERM**, **ENOMEM**, or
|
||||
* **E2BIG**. **E2BIG** indicates that the number of elements in
|
||||
* the map reached the *max_entries* limit specified at map
|
||||
* creation time.
|
||||
*
|
||||
* May set *errno* to one of the following error codes under
|
||||
* specific circumstances:
|
||||
*
|
||||
* **EEXIST**
|
||||
* If *flags* specifies **BPF_NOEXIST** and the element
|
||||
* with *key* already exists in the map.
|
||||
* **ENOENT**
|
||||
* If *flags* specifies **BPF_EXIST** and the element with
|
||||
* *key* does not exist in the map.
|
||||
*
|
||||
* BPF_MAP_DELETE_BATCH
|
||||
* Description
|
||||
* Delete multiple elements in a map by *key*.
|
||||
*
|
||||
* The *keys* parameter is an input parameter which must point
|
||||
* to memory large enough to hold *count* items based on the key
|
||||
* size of the map *map_fd*, that is, *key_size* * *count*.
|
||||
*
|
||||
* Each element specified in *keys* is sequentially deleted. The
|
||||
* *in_batch*, *out_batch*, and *values* parameters are ignored
|
||||
* and should be zeroed.
|
||||
*
|
||||
* The *elem_flags* argument may be specified as one of the
|
||||
* following:
|
||||
*
|
||||
* **BPF_F_LOCK**
|
||||
* Look up the value of a spin-locked map without
|
||||
* returning the lock. This must be specified if the
|
||||
* elements contain a spinlock.
|
||||
*
|
||||
* On success, *count* elements from the map are updated.
|
||||
*
|
||||
* If an error is returned and *errno* is not **EFAULT**, *count*
|
||||
* is set to the number of successfully processed elements. If
|
||||
* *errno* is **EFAULT**, up to *count* elements may be been
|
||||
* deleted.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* BPF_LINK_CREATE
|
||||
* Description
|
||||
* Attach an eBPF program to a *target_fd* at the specified
|
||||
* *attach_type* hook and return a file descriptor handle for
|
||||
* managing the link.
|
||||
*
|
||||
* Return
|
||||
* A new file descriptor (a nonnegative integer), or -1 if an
|
||||
* error occurred (in which case, *errno* is set appropriately).
|
||||
*
|
||||
* BPF_LINK_UPDATE
|
||||
* Description
|
||||
* Update the eBPF program in the specified *link_fd* to
|
||||
* *new_prog_fd*.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* BPF_LINK_GET_FD_BY_ID
|
||||
* Description
|
||||
* Open a file descriptor for the eBPF Link corresponding to
|
||||
* *link_id*.
|
||||
*
|
||||
* Return
|
||||
* A new file descriptor (a nonnegative integer), or -1 if an
|
||||
* error occurred (in which case, *errno* is set appropriately).
|
||||
*
|
||||
* BPF_LINK_GET_NEXT_ID
|
||||
* Description
|
||||
* Fetch the next eBPF link currently loaded into the kernel.
|
||||
*
|
||||
* Looks for the eBPF link with an id greater than *start_id*
|
||||
* and updates *next_id* on success. If no other eBPF links
|
||||
* remain with ids higher than *start_id*, returns -1 and sets
|
||||
* *errno* to **ENOENT**.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, or when no id remains, -1
|
||||
* is returned and *errno* is set appropriately.
|
||||
*
|
||||
* BPF_ENABLE_STATS
|
||||
* Description
|
||||
* Enable eBPF runtime statistics gathering.
|
||||
*
|
||||
* Runtime statistics gathering for the eBPF runtime is disabled
|
||||
* by default to minimize the corresponding performance overhead.
|
||||
* This command enables statistics globally.
|
||||
*
|
||||
* Multiple programs may independently enable statistics.
|
||||
* After gathering the desired statistics, eBPF runtime statistics
|
||||
* may be disabled again by calling **close**\ (2) for the file
|
||||
* descriptor returned by this function. Statistics will only be
|
||||
* disabled system-wide when all outstanding file descriptors
|
||||
* returned by prior calls for this subcommand are closed.
|
||||
*
|
||||
* Return
|
||||
* A new file descriptor (a nonnegative integer), or -1 if an
|
||||
* error occurred (in which case, *errno* is set appropriately).
|
||||
*
|
||||
* BPF_ITER_CREATE
|
||||
* Description
|
||||
* Create an iterator on top of the specified *link_fd* (as
|
||||
* previously created using **BPF_LINK_CREATE**) and return a
|
||||
* file descriptor that can be used to trigger the iteration.
|
||||
*
|
||||
* If the resulting file descriptor is pinned to the filesystem
|
||||
* using **BPF_OBJ_PIN**, then subsequent **read**\ (2) syscalls
|
||||
* for that path will trigger the iterator to read kernel state
|
||||
* using the eBPF program attached to *link_fd*.
|
||||
*
|
||||
* Return
|
||||
* A new file descriptor (a nonnegative integer), or -1 if an
|
||||
* error occurred (in which case, *errno* is set appropriately).
|
||||
*
|
||||
* BPF_LINK_DETACH
|
||||
* Description
|
||||
* Forcefully detach the specified *link_fd* from its
|
||||
* corresponding attachment point.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* BPF_PROG_BIND_MAP
|
||||
* Description
|
||||
* Bind a map to the lifetime of an eBPF program.
|
||||
*
|
||||
* The map identified by *map_fd* is bound to the program
|
||||
* identified by *prog_fd* and only released when *prog_fd* is
|
||||
* released. This may be used in cases where metadata should be
|
||||
* associated with a program which otherwise does not contain any
|
||||
* references to the map (for example, embedded in the eBPF
|
||||
* program instructions).
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
*
|
||||
* NOTES
|
||||
* eBPF objects (maps and programs) can be shared between processes.
|
||||
*
|
||||
* * After **fork**\ (2), the child inherits file descriptors
|
||||
* referring to the same eBPF objects.
|
||||
* * File descriptors referring to eBPF objects can be transferred over
|
||||
* **unix**\ (7) domain sockets.
|
||||
* * File descriptors referring to eBPF objects can be duplicated in the
|
||||
* usual way, using **dup**\ (2) and similar calls.
|
||||
* * File descriptors referring to eBPF objects can be pinned to the
|
||||
* filesystem using the **BPF_OBJ_PIN** command of **bpf**\ (2).
|
||||
*
|
||||
* An eBPF object is deallocated only after all file descriptors referring
|
||||
* to the object have been closed and no references remain pinned to the
|
||||
* filesystem or attached (for example, bound to a program or device).
|
||||
*/
|
||||
enum bpf_cmd {
|
||||
BPF_MAP_CREATE,
|
||||
BPF_MAP_LOOKUP_ELEM,
|
||||
@@ -247,6 +978,7 @@ enum bpf_attach_type {
|
||||
BPF_XDP_CPUMAP,
|
||||
BPF_SK_LOOKUP,
|
||||
BPF_XDP,
|
||||
BPF_SK_SKB_VERDICT,
|
||||
__MAX_BPF_ATTACH_TYPE
|
||||
};
|
||||
|
||||
@@ -393,11 +1125,24 @@ enum bpf_link_type {
|
||||
* is struct/union.
|
||||
*/
|
||||
#define BPF_PSEUDO_BTF_ID 3
|
||||
/* insn[0].src_reg: BPF_PSEUDO_FUNC
|
||||
* insn[0].imm: insn offset to the func
|
||||
* insn[1].imm: 0
|
||||
* insn[0].off: 0
|
||||
* insn[1].off: 0
|
||||
* ldimm64 rewrite: address of the function
|
||||
* verifier type: PTR_TO_FUNC.
|
||||
*/
|
||||
#define BPF_PSEUDO_FUNC 4
|
||||
|
||||
/* when bpf_call->src_reg == BPF_PSEUDO_CALL, bpf_call->imm == pc-relative
|
||||
* offset to another bpf function
|
||||
*/
|
||||
#define BPF_PSEUDO_CALL 1
|
||||
/* when bpf_call->src_reg == BPF_PSEUDO_KFUNC_CALL,
|
||||
* bpf_call->imm == btf_id of a BTF_KIND_FUNC in the running kernel
|
||||
*/
|
||||
#define BPF_PSEUDO_KFUNC_CALL 2
|
||||
|
||||
/* flags for BPF_MAP_UPDATE_ELEM command */
|
||||
enum {
|
||||
@@ -720,7 +1465,7 @@ union bpf_attr {
|
||||
* parsed and used to produce a manual page. The workflow is the following,
|
||||
* and requires the rst2man utility:
|
||||
*
|
||||
* $ ./scripts/bpf_helpers_doc.py \
|
||||
* $ ./scripts/bpf_doc.py \
|
||||
* --filename include/uapi/linux/bpf.h > /tmp/bpf-helpers.rst
|
||||
* $ rst2man /tmp/bpf-helpers.rst > /tmp/bpf-helpers.7
|
||||
* $ man /tmp/bpf-helpers.7
|
||||
@@ -1765,6 +2510,10 @@ union bpf_attr {
|
||||
* Use with ENCAP_L3/L4 flags to further specify the tunnel
|
||||
* type; *len* is the length of the inner MAC header.
|
||||
*
|
||||
* * **BPF_F_ADJ_ROOM_ENCAP_L2_ETH**:
|
||||
* Use with BPF_F_ADJ_ROOM_ENCAP_L2 flag to further specify the
|
||||
* L2 type as Ethernet.
|
||||
*
|
||||
* A call to this helper is susceptible to change the underlying
|
||||
* packet buffer. Therefore, at load time, all checks on pointers
|
||||
* previously done by the verifier are invalidated and must be
|
||||
@@ -3333,12 +4082,20 @@ union bpf_attr {
|
||||
* of new data availability is sent.
|
||||
* If **BPF_RB_FORCE_WAKEUP** is specified in *flags*, notification
|
||||
* of new data availability is sent unconditionally.
|
||||
* If **0** is specified in *flags*, an adaptive notification
|
||||
* of new data availability is sent.
|
||||
*
|
||||
* An adaptive notification is a notification sent whenever the user-space
|
||||
* process has caught up and consumed all available payloads. In case the user-space
|
||||
* process is still processing a previous payload, then no notification is needed
|
||||
* as it will process the newly added payload automatically.
|
||||
* Return
|
||||
* 0 on success, or a negative error in case of failure.
|
||||
*
|
||||
* void *bpf_ringbuf_reserve(void *ringbuf, u64 size, u64 flags)
|
||||
* Description
|
||||
* Reserve *size* bytes of payload in a ring buffer *ringbuf*.
|
||||
* *flags* must be 0.
|
||||
* Return
|
||||
* Valid pointer with *size* bytes of memory available; NULL,
|
||||
* otherwise.
|
||||
@@ -3350,6 +4107,10 @@ union bpf_attr {
|
||||
* of new data availability is sent.
|
||||
* If **BPF_RB_FORCE_WAKEUP** is specified in *flags*, notification
|
||||
* of new data availability is sent unconditionally.
|
||||
* If **0** is specified in *flags*, an adaptive notification
|
||||
* of new data availability is sent.
|
||||
*
|
||||
* See 'bpf_ringbuf_output()' for the definition of adaptive notification.
|
||||
* Return
|
||||
* Nothing. Always succeeds.
|
||||
*
|
||||
@@ -3360,6 +4121,10 @@ union bpf_attr {
|
||||
* of new data availability is sent.
|
||||
* If **BPF_RB_FORCE_WAKEUP** is specified in *flags*, notification
|
||||
* of new data availability is sent unconditionally.
|
||||
* If **0** is specified in *flags*, an adaptive notification
|
||||
* of new data availability is sent.
|
||||
*
|
||||
* See 'bpf_ringbuf_output()' for the definition of adaptive notification.
|
||||
* Return
|
||||
* Nothing. Always succeeds.
|
||||
*
|
||||
@@ -3915,6 +4680,61 @@ union bpf_attr {
|
||||
* * **BPF_MTU_CHK_RET_FRAG_NEEDED**
|
||||
* * **BPF_MTU_CHK_RET_SEGS_TOOBIG**
|
||||
*
|
||||
* long bpf_for_each_map_elem(struct bpf_map *map, void *callback_fn, void *callback_ctx, u64 flags)
|
||||
* Description
|
||||
* For each element in **map**, call **callback_fn** function with
|
||||
* **map**, **callback_ctx** and other map-specific parameters.
|
||||
* The **callback_fn** should be a static function and
|
||||
* the **callback_ctx** should be a pointer to the stack.
|
||||
* The **flags** is used to control certain aspects of the helper.
|
||||
* Currently, the **flags** must be 0.
|
||||
*
|
||||
* The following are a list of supported map types and their
|
||||
* respective expected callback signatures:
|
||||
*
|
||||
* BPF_MAP_TYPE_HASH, BPF_MAP_TYPE_PERCPU_HASH,
|
||||
* BPF_MAP_TYPE_LRU_HASH, BPF_MAP_TYPE_LRU_PERCPU_HASH,
|
||||
* BPF_MAP_TYPE_ARRAY, BPF_MAP_TYPE_PERCPU_ARRAY
|
||||
*
|
||||
* long (\*callback_fn)(struct bpf_map \*map, const void \*key, void \*value, void \*ctx);
|
||||
*
|
||||
* For per_cpu maps, the map_value is the value on the cpu where the
|
||||
* bpf_prog is running.
|
||||
*
|
||||
* If **callback_fn** return 0, the helper will continue to the next
|
||||
* element. If return value is 1, the helper will skip the rest of
|
||||
* elements and return. Other return values are not used now.
|
||||
*
|
||||
* Return
|
||||
* The number of traversed map elements for success, **-EINVAL** for
|
||||
* invalid **flags**.
|
||||
*
|
||||
* long bpf_snprintf(char *str, u32 str_size, const char *fmt, u64 *data, u32 data_len)
|
||||
* Description
|
||||
* Outputs a string into the **str** buffer of size **str_size**
|
||||
* based on a format string stored in a read-only map pointed by
|
||||
* **fmt**.
|
||||
*
|
||||
* Each format specifier in **fmt** corresponds to one u64 element
|
||||
* in the **data** array. For strings and pointers where pointees
|
||||
* are accessed, only the pointer values are stored in the *data*
|
||||
* array. The *data_len* is the size of *data* in bytes.
|
||||
*
|
||||
* Formats **%s** and **%p{i,I}{4,6}** require to read kernel
|
||||
* memory. Reading kernel memory may fail due to either invalid
|
||||
* address or valid address but requiring a major memory fault. If
|
||||
* reading kernel memory fails, the string for **%s** will be an
|
||||
* empty string, and the ip address for **%p{i,I}{4,6}** will be 0.
|
||||
* Not returning error to bpf program is consistent with what
|
||||
* **bpf_trace_printk**\ () does for now.
|
||||
*
|
||||
* Return
|
||||
* The strictly positive length of the formatted string, including
|
||||
* the trailing zero character. If the return value is greater than
|
||||
* **str_size**, **str** contains a truncated string, guaranteed to
|
||||
* be zero-terminated except when **str_size** is 0.
|
||||
*
|
||||
* Or **-EBUSY** if the per-CPU memory copy buffer is busy.
|
||||
*/
|
||||
#define __BPF_FUNC_MAPPER(FN) \
|
||||
FN(unspec), \
|
||||
@@ -4081,6 +4901,8 @@ union bpf_attr {
|
||||
FN(ima_inode_hash), \
|
||||
FN(sock_from_file), \
|
||||
FN(check_mtu), \
|
||||
FN(for_each_map_elem), \
|
||||
FN(snprintf), \
|
||||
/* */
|
||||
|
||||
/* integer value in 'imm' field of BPF_CALL instruction selects which helper
|
||||
@@ -4174,6 +4996,7 @@ enum {
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_GRE = (1ULL << 3),
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_UDP = (1ULL << 4),
|
||||
BPF_F_ADJ_ROOM_NO_CSUM_RESET = (1ULL << 5),
|
||||
BPF_F_ADJ_ROOM_ENCAP_L2_ETH = (1ULL << 6),
|
||||
};
|
||||
|
||||
enum {
|
||||
@@ -4621,6 +5444,8 @@ struct bpf_link_info {
|
||||
} raw_tracepoint;
|
||||
struct {
|
||||
__u32 attach_type;
|
||||
__u32 target_obj_id; /* prog_id for PROG_EXT, otherwise btf object id */
|
||||
__u32 target_btf_id; /* BTF type id inside the object */
|
||||
} tracing;
|
||||
struct {
|
||||
__u64 cgroup_id;
|
||||
@@ -5211,7 +6036,10 @@ struct bpf_pidns_info {
|
||||
|
||||
/* User accessible data for SK_LOOKUP programs. Add new fields at the end. */
|
||||
struct bpf_sk_lookup {
|
||||
__bpf_md_ptr(struct bpf_sock *, sk); /* Selected socket */
|
||||
union {
|
||||
__bpf_md_ptr(struct bpf_sock *, sk); /* Selected socket */
|
||||
__u64 cookie; /* Non-zero if socket was selected in PROG_TEST_RUN */
|
||||
};
|
||||
|
||||
__u32 family; /* Protocol family (AF_INET, AF_INET6) */
|
||||
__u32 protocol; /* IP protocol (IPPROTO_TCP, IPPROTO_UDP) */
|
||||
|
||||
@@ -52,7 +52,7 @@ struct btf_type {
|
||||
};
|
||||
};
|
||||
|
||||
#define BTF_INFO_KIND(info) (((info) >> 24) & 0x0f)
|
||||
#define BTF_INFO_KIND(info) (((info) >> 24) & 0x1f)
|
||||
#define BTF_INFO_VLEN(info) ((info) & 0xffff)
|
||||
#define BTF_INFO_KFLAG(info) ((info) >> 31)
|
||||
|
||||
@@ -72,7 +72,8 @@ struct btf_type {
|
||||
#define BTF_KIND_FUNC_PROTO 13 /* Function Proto */
|
||||
#define BTF_KIND_VAR 14 /* Variable */
|
||||
#define BTF_KIND_DATASEC 15 /* Section */
|
||||
#define BTF_KIND_MAX BTF_KIND_DATASEC
|
||||
#define BTF_KIND_FLOAT 16 /* Floating point */
|
||||
#define BTF_KIND_MAX BTF_KIND_FLOAT
|
||||
#define NR_BTF_KINDS (BTF_KIND_MAX + 1)
|
||||
|
||||
/* For some specific BTF_KIND, "struct btf_type" is immediately
|
||||
|
||||
@@ -669,6 +669,11 @@ enum ethtool_link_ext_substate_cable_issue {
|
||||
* @ETH_SS_TS_TX_TYPES: timestamping Tx types
|
||||
* @ETH_SS_TS_RX_FILTERS: timestamping Rx filters
|
||||
* @ETH_SS_UDP_TUNNEL_TYPES: UDP tunnel types
|
||||
* @ETH_SS_STATS_STD: standardized stats
|
||||
* @ETH_SS_STATS_ETH_PHY: names of IEEE 802.3 PHY statistics
|
||||
* @ETH_SS_STATS_ETH_MAC: names of IEEE 802.3 MAC statistics
|
||||
* @ETH_SS_STATS_ETH_CTRL: names of IEEE 802.3 MAC Control statistics
|
||||
* @ETH_SS_STATS_RMON: names of RMON statistics
|
||||
*
|
||||
* @ETH_SS_COUNT: number of defined string sets
|
||||
*/
|
||||
@@ -689,6 +694,11 @@ enum ethtool_stringset {
|
||||
ETH_SS_TS_TX_TYPES,
|
||||
ETH_SS_TS_RX_FILTERS,
|
||||
ETH_SS_UDP_TUNNEL_TYPES,
|
||||
ETH_SS_STATS_STD,
|
||||
ETH_SS_STATS_ETH_PHY,
|
||||
ETH_SS_STATS_ETH_MAC,
|
||||
ETH_SS_STATS_ETH_CTRL,
|
||||
ETH_SS_STATS_RMON,
|
||||
|
||||
/* add new constants above here */
|
||||
ETH_SS_COUNT
|
||||
@@ -1383,15 +1393,33 @@ struct ethtool_per_queue_op {
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ethtool_fecparam - Ethernet forward error correction(fec) parameters
|
||||
* struct ethtool_fecparam - Ethernet Forward Error Correction parameters
|
||||
* @cmd: Command number = %ETHTOOL_GFECPARAM or %ETHTOOL_SFECPARAM
|
||||
* @active_fec: FEC mode which is active on porte
|
||||
* @fec: Bitmask of supported/configured FEC modes
|
||||
* @rsvd: Reserved for future extensions. i.e FEC bypass feature.
|
||||
* @active_fec: FEC mode which is active on the port, single bit set, GET only.
|
||||
* @fec: Bitmask of configured FEC modes.
|
||||
* @reserved: Reserved for future extensions, ignore on GET, write 0 for SET.
|
||||
*
|
||||
* Drivers should reject a non-zero setting of @autoneg when
|
||||
* autoneogotiation is disabled (or not supported) for the link.
|
||||
* Note that @reserved was never validated on input and ethtool user space
|
||||
* left it uninitialized when calling SET. Hence going forward it can only be
|
||||
* used to return a value to userspace with GET.
|
||||
*
|
||||
* FEC modes supported by the device can be read via %ETHTOOL_GLINKSETTINGS.
|
||||
* FEC settings are configured by link autonegotiation whenever it's enabled.
|
||||
* With autoneg on %ETHTOOL_GFECPARAM can be used to read the current mode.
|
||||
*
|
||||
* When autoneg is disabled %ETHTOOL_SFECPARAM controls the FEC settings.
|
||||
* It is recommended that drivers only accept a single bit set in @fec.
|
||||
* When multiple bits are set in @fec drivers may pick mode in an implementation
|
||||
* dependent way. Drivers should reject mixing %ETHTOOL_FEC_AUTO_BIT with other
|
||||
* FEC modes, because it's unclear whether in this case other modes constrain
|
||||
* AUTO or are independent choices.
|
||||
* Drivers must reject SET requests if they support none of the requested modes.
|
||||
*
|
||||
* If device does not support FEC drivers may use %ETHTOOL_FEC_NONE instead
|
||||
* of returning %EOPNOTSUPP from %ETHTOOL_GFECPARAM.
|
||||
*
|
||||
* See enum ethtool_fec_config_bits for definition of valid bits for both
|
||||
* @fec and @active_fec.
|
||||
*/
|
||||
struct ethtool_fecparam {
|
||||
__u32 cmd;
|
||||
@@ -1403,11 +1431,16 @@ struct ethtool_fecparam {
|
||||
|
||||
/**
|
||||
* enum ethtool_fec_config_bits - flags definition of ethtool_fec_configuration
|
||||
* @ETHTOOL_FEC_NONE: FEC mode configuration is not supported
|
||||
* @ETHTOOL_FEC_AUTO: Default/Best FEC mode provided by driver
|
||||
* @ETHTOOL_FEC_OFF: No FEC Mode
|
||||
* @ETHTOOL_FEC_RS: Reed-Solomon Forward Error Detection mode
|
||||
* @ETHTOOL_FEC_BASER: Base-R/Reed-Solomon Forward Error Detection mode
|
||||
* @ETHTOOL_FEC_NONE_BIT: FEC mode configuration is not supported. Should not
|
||||
* be used together with other bits. GET only.
|
||||
* @ETHTOOL_FEC_AUTO_BIT: Select default/best FEC mode automatically, usually
|
||||
* based link mode and SFP parameters read from module's
|
||||
* EEPROM. This bit does _not_ mean autonegotiation.
|
||||
* @ETHTOOL_FEC_OFF_BIT: No FEC Mode
|
||||
* @ETHTOOL_FEC_RS_BIT: Reed-Solomon FEC Mode
|
||||
* @ETHTOOL_FEC_BASER_BIT: Base-R/Reed-Solomon FEC Mode
|
||||
* @ETHTOOL_FEC_LLRS_BIT: Low Latency Reed Solomon FEC Mode (25G/50G Ethernet
|
||||
* Consortium)
|
||||
*/
|
||||
enum ethtool_fec_config_bits {
|
||||
ETHTOOL_FEC_NONE_BIT,
|
||||
|
||||
@@ -42,6 +42,10 @@ enum {
|
||||
ETHTOOL_MSG_CABLE_TEST_ACT,
|
||||
ETHTOOL_MSG_CABLE_TEST_TDR_ACT,
|
||||
ETHTOOL_MSG_TUNNEL_INFO_GET,
|
||||
ETHTOOL_MSG_FEC_GET,
|
||||
ETHTOOL_MSG_FEC_SET,
|
||||
ETHTOOL_MSG_MODULE_EEPROM_GET,
|
||||
ETHTOOL_MSG_STATS_GET,
|
||||
|
||||
/* add new constants above here */
|
||||
__ETHTOOL_MSG_USER_CNT,
|
||||
@@ -80,6 +84,10 @@ enum {
|
||||
ETHTOOL_MSG_CABLE_TEST_NTF,
|
||||
ETHTOOL_MSG_CABLE_TEST_TDR_NTF,
|
||||
ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY,
|
||||
ETHTOOL_MSG_FEC_GET_REPLY,
|
||||
ETHTOOL_MSG_FEC_NTF,
|
||||
ETHTOOL_MSG_MODULE_EEPROM_GET_REPLY,
|
||||
ETHTOOL_MSG_STATS_GET_REPLY,
|
||||
|
||||
/* add new constants above here */
|
||||
__ETHTOOL_MSG_KERNEL_CNT,
|
||||
@@ -629,6 +637,185 @@ enum {
|
||||
ETHTOOL_A_TUNNEL_INFO_MAX = (__ETHTOOL_A_TUNNEL_INFO_CNT - 1)
|
||||
};
|
||||
|
||||
/* FEC */
|
||||
|
||||
enum {
|
||||
ETHTOOL_A_FEC_UNSPEC,
|
||||
ETHTOOL_A_FEC_HEADER, /* nest - _A_HEADER_* */
|
||||
ETHTOOL_A_FEC_MODES, /* bitset */
|
||||
ETHTOOL_A_FEC_AUTO, /* u8 */
|
||||
ETHTOOL_A_FEC_ACTIVE, /* u32 */
|
||||
ETHTOOL_A_FEC_STATS, /* nest - _A_FEC_STAT */
|
||||
|
||||
__ETHTOOL_A_FEC_CNT,
|
||||
ETHTOOL_A_FEC_MAX = (__ETHTOOL_A_FEC_CNT - 1)
|
||||
};
|
||||
|
||||
enum {
|
||||
ETHTOOL_A_FEC_STAT_UNSPEC,
|
||||
ETHTOOL_A_FEC_STAT_PAD,
|
||||
|
||||
ETHTOOL_A_FEC_STAT_CORRECTED, /* array, u64 */
|
||||
ETHTOOL_A_FEC_STAT_UNCORR, /* array, u64 */
|
||||
ETHTOOL_A_FEC_STAT_CORR_BITS, /* array, u64 */
|
||||
|
||||
/* add new constants above here */
|
||||
__ETHTOOL_A_FEC_STAT_CNT,
|
||||
ETHTOOL_A_FEC_STAT_MAX = (__ETHTOOL_A_FEC_STAT_CNT - 1)
|
||||
};
|
||||
|
||||
/* MODULE EEPROM */
|
||||
|
||||
enum {
|
||||
ETHTOOL_A_MODULE_EEPROM_UNSPEC,
|
||||
ETHTOOL_A_MODULE_EEPROM_HEADER, /* nest - _A_HEADER_* */
|
||||
|
||||
ETHTOOL_A_MODULE_EEPROM_OFFSET, /* u32 */
|
||||
ETHTOOL_A_MODULE_EEPROM_LENGTH, /* u32 */
|
||||
ETHTOOL_A_MODULE_EEPROM_PAGE, /* u8 */
|
||||
ETHTOOL_A_MODULE_EEPROM_BANK, /* u8 */
|
||||
ETHTOOL_A_MODULE_EEPROM_I2C_ADDRESS, /* u8 */
|
||||
ETHTOOL_A_MODULE_EEPROM_DATA, /* nested */
|
||||
|
||||
__ETHTOOL_A_MODULE_EEPROM_CNT,
|
||||
ETHTOOL_A_MODULE_EEPROM_MAX = (__ETHTOOL_A_MODULE_EEPROM_CNT - 1)
|
||||
};
|
||||
|
||||
/* STATS */
|
||||
|
||||
enum {
|
||||
ETHTOOL_A_STATS_UNSPEC,
|
||||
ETHTOOL_A_STATS_PAD,
|
||||
ETHTOOL_A_STATS_HEADER, /* nest - _A_HEADER_* */
|
||||
ETHTOOL_A_STATS_GROUPS, /* bitset */
|
||||
|
||||
ETHTOOL_A_STATS_GRP, /* nest - _A_STATS_GRP_* */
|
||||
|
||||
/* add new constants above here */
|
||||
__ETHTOOL_A_STATS_CNT,
|
||||
ETHTOOL_A_STATS_MAX = (__ETHTOOL_A_STATS_CNT - 1)
|
||||
};
|
||||
|
||||
enum {
|
||||
ETHTOOL_STATS_ETH_PHY,
|
||||
ETHTOOL_STATS_ETH_MAC,
|
||||
ETHTOOL_STATS_ETH_CTRL,
|
||||
ETHTOOL_STATS_RMON,
|
||||
|
||||
/* add new constants above here */
|
||||
__ETHTOOL_STATS_CNT
|
||||
};
|
||||
|
||||
enum {
|
||||
ETHTOOL_A_STATS_GRP_UNSPEC,
|
||||
ETHTOOL_A_STATS_GRP_PAD,
|
||||
|
||||
ETHTOOL_A_STATS_GRP_ID, /* u32 */
|
||||
ETHTOOL_A_STATS_GRP_SS_ID, /* u32 */
|
||||
|
||||
ETHTOOL_A_STATS_GRP_STAT, /* nest */
|
||||
|
||||
ETHTOOL_A_STATS_GRP_HIST_RX, /* nest */
|
||||
ETHTOOL_A_STATS_GRP_HIST_TX, /* nest */
|
||||
|
||||
ETHTOOL_A_STATS_GRP_HIST_BKT_LOW, /* u32 */
|
||||
ETHTOOL_A_STATS_GRP_HIST_BKT_HI, /* u32 */
|
||||
ETHTOOL_A_STATS_GRP_HIST_VAL, /* u64 */
|
||||
|
||||
/* add new constants above here */
|
||||
__ETHTOOL_A_STATS_GRP_CNT,
|
||||
ETHTOOL_A_STATS_GRP_MAX = (__ETHTOOL_A_STATS_CNT - 1)
|
||||
};
|
||||
|
||||
enum {
|
||||
/* 30.3.2.1.5 aSymbolErrorDuringCarrier */
|
||||
ETHTOOL_A_STATS_ETH_PHY_5_SYM_ERR,
|
||||
|
||||
/* add new constants above here */
|
||||
__ETHTOOL_A_STATS_ETH_PHY_CNT,
|
||||
ETHTOOL_A_STATS_ETH_PHY_MAX = (__ETHTOOL_A_STATS_ETH_PHY_CNT - 1)
|
||||
};
|
||||
|
||||
enum {
|
||||
/* 30.3.1.1.2 aFramesTransmittedOK */
|
||||
ETHTOOL_A_STATS_ETH_MAC_2_TX_PKT,
|
||||
/* 30.3.1.1.3 aSingleCollisionFrames */
|
||||
ETHTOOL_A_STATS_ETH_MAC_3_SINGLE_COL,
|
||||
/* 30.3.1.1.4 aMultipleCollisionFrames */
|
||||
ETHTOOL_A_STATS_ETH_MAC_4_MULTI_COL,
|
||||
/* 30.3.1.1.5 aFramesReceivedOK */
|
||||
ETHTOOL_A_STATS_ETH_MAC_5_RX_PKT,
|
||||
/* 30.3.1.1.6 aFrameCheckSequenceErrors */
|
||||
ETHTOOL_A_STATS_ETH_MAC_6_FCS_ERR,
|
||||
/* 30.3.1.1.7 aAlignmentErrors */
|
||||
ETHTOOL_A_STATS_ETH_MAC_7_ALIGN_ERR,
|
||||
/* 30.3.1.1.8 aOctetsTransmittedOK */
|
||||
ETHTOOL_A_STATS_ETH_MAC_8_TX_BYTES,
|
||||
/* 30.3.1.1.9 aFramesWithDeferredXmissions */
|
||||
ETHTOOL_A_STATS_ETH_MAC_9_TX_DEFER,
|
||||
/* 30.3.1.1.10 aLateCollisions */
|
||||
ETHTOOL_A_STATS_ETH_MAC_10_LATE_COL,
|
||||
/* 30.3.1.1.11 aFramesAbortedDueToXSColls */
|
||||
ETHTOOL_A_STATS_ETH_MAC_11_XS_COL,
|
||||
/* 30.3.1.1.12 aFramesLostDueToIntMACXmitError */
|
||||
ETHTOOL_A_STATS_ETH_MAC_12_TX_INT_ERR,
|
||||
/* 30.3.1.1.13 aCarrierSenseErrors */
|
||||
ETHTOOL_A_STATS_ETH_MAC_13_CS_ERR,
|
||||
/* 30.3.1.1.14 aOctetsReceivedOK */
|
||||
ETHTOOL_A_STATS_ETH_MAC_14_RX_BYTES,
|
||||
/* 30.3.1.1.15 aFramesLostDueToIntMACRcvError */
|
||||
ETHTOOL_A_STATS_ETH_MAC_15_RX_INT_ERR,
|
||||
|
||||
/* 30.3.1.1.18 aMulticastFramesXmittedOK */
|
||||
ETHTOOL_A_STATS_ETH_MAC_18_TX_MCAST,
|
||||
/* 30.3.1.1.19 aBroadcastFramesXmittedOK */
|
||||
ETHTOOL_A_STATS_ETH_MAC_19_TX_BCAST,
|
||||
/* 30.3.1.1.20 aFramesWithExcessiveDeferral */
|
||||
ETHTOOL_A_STATS_ETH_MAC_20_XS_DEFER,
|
||||
/* 30.3.1.1.21 aMulticastFramesReceivedOK */
|
||||
ETHTOOL_A_STATS_ETH_MAC_21_RX_MCAST,
|
||||
/* 30.3.1.1.22 aBroadcastFramesReceivedOK */
|
||||
ETHTOOL_A_STATS_ETH_MAC_22_RX_BCAST,
|
||||
/* 30.3.1.1.23 aInRangeLengthErrors */
|
||||
ETHTOOL_A_STATS_ETH_MAC_23_IR_LEN_ERR,
|
||||
/* 30.3.1.1.24 aOutOfRangeLengthField */
|
||||
ETHTOOL_A_STATS_ETH_MAC_24_OOR_LEN,
|
||||
/* 30.3.1.1.25 aFrameTooLongErrors */
|
||||
ETHTOOL_A_STATS_ETH_MAC_25_TOO_LONG_ERR,
|
||||
|
||||
/* add new constants above here */
|
||||
__ETHTOOL_A_STATS_ETH_MAC_CNT,
|
||||
ETHTOOL_A_STATS_ETH_MAC_MAX = (__ETHTOOL_A_STATS_ETH_MAC_CNT - 1)
|
||||
};
|
||||
|
||||
enum {
|
||||
/* 30.3.3.3 aMACControlFramesTransmitted */
|
||||
ETHTOOL_A_STATS_ETH_CTRL_3_TX,
|
||||
/* 30.3.3.4 aMACControlFramesReceived */
|
||||
ETHTOOL_A_STATS_ETH_CTRL_4_RX,
|
||||
/* 30.3.3.5 aUnsupportedOpcodesReceived */
|
||||
ETHTOOL_A_STATS_ETH_CTRL_5_RX_UNSUP,
|
||||
|
||||
/* add new constants above here */
|
||||
__ETHTOOL_A_STATS_ETH_CTRL_CNT,
|
||||
ETHTOOL_A_STATS_ETH_CTRL_MAX = (__ETHTOOL_A_STATS_ETH_CTRL_CNT - 1)
|
||||
};
|
||||
|
||||
enum {
|
||||
/* etherStatsUndersizePkts */
|
||||
ETHTOOL_A_STATS_RMON_UNDERSIZE,
|
||||
/* etherStatsOversizePkts */
|
||||
ETHTOOL_A_STATS_RMON_OVERSIZE,
|
||||
/* etherStatsFragments */
|
||||
ETHTOOL_A_STATS_RMON_FRAG,
|
||||
/* etherStatsJabbers */
|
||||
ETHTOOL_A_STATS_RMON_JABBER,
|
||||
|
||||
/* add new constants above here */
|
||||
__ETHTOOL_A_STATS_RMON_CNT,
|
||||
ETHTOOL_A_STATS_RMON_MAX = (__ETHTOOL_A_STATS_RMON_CNT - 1)
|
||||
};
|
||||
|
||||
/* generic netlink info */
|
||||
#define ETHTOOL_GENL_NAME "ethtool"
|
||||
#define ETHTOOL_GENL_VERSION 1
|
||||
|
||||
@@ -20,6 +20,9 @@
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <asm/byteorder.h>
|
||||
#include <linux/in.h>
|
||||
#include <linux/if.h>
|
||||
#include <linux/in6.h>
|
||||
|
||||
#define ICMP_ECHOREPLY 0 /* Echo Reply */
|
||||
#define ICMP_DEST_UNREACH 3 /* Destination Unreachable */
|
||||
@@ -66,6 +69,23 @@
|
||||
#define ICMP_EXC_TTL 0 /* TTL count exceeded */
|
||||
#define ICMP_EXC_FRAGTIME 1 /* Fragment Reass time exceeded */
|
||||
|
||||
/* Codes for EXT_ECHO (PROBE) */
|
||||
#define ICMP_EXT_ECHO 42
|
||||
#define ICMP_EXT_ECHOREPLY 43
|
||||
#define ICMP_EXT_CODE_MAL_QUERY 1 /* Malformed Query */
|
||||
#define ICMP_EXT_CODE_NO_IF 2 /* No such Interface */
|
||||
#define ICMP_EXT_CODE_NO_TABLE_ENT 3 /* No such Table Entry */
|
||||
#define ICMP_EXT_CODE_MULT_IFS 4 /* Multiple Interfaces Satisfy Query */
|
||||
|
||||
/* Constants for EXT_ECHO (PROBE) */
|
||||
#define ICMP_EXT_ECHOREPLY_ACTIVE (1 << 2)/* active bit in reply message */
|
||||
#define ICMP_EXT_ECHOREPLY_IPV4 (1 << 1)/* ipv4 bit in reply message */
|
||||
#define ICMP_EXT_ECHOREPLY_IPV6 1 /* ipv6 bit in reply message */
|
||||
#define ICMP_EXT_ECHO_CTYPE_NAME 1
|
||||
#define ICMP_EXT_ECHO_CTYPE_INDEX 2
|
||||
#define ICMP_EXT_ECHO_CTYPE_ADDR 3
|
||||
#define ICMP_AFI_IP 1 /* Address Family Identifier for ipv4 */
|
||||
#define ICMP_AFI_IP6 2 /* Address Family Identifier for ipv6 */
|
||||
|
||||
struct icmphdr {
|
||||
__u8 type;
|
||||
@@ -118,4 +138,26 @@ struct icmp_extobj_hdr {
|
||||
__u8 class_type;
|
||||
};
|
||||
|
||||
/* RFC 8335: 2.1 Header for c-type 3 payload */
|
||||
struct icmp_ext_echo_ctype3_hdr {
|
||||
__be16 afi;
|
||||
__u8 addrlen;
|
||||
__u8 reserved;
|
||||
};
|
||||
|
||||
/* RFC 8335: 2.1 Interface Identification Object */
|
||||
struct icmp_ext_echo_iio {
|
||||
struct icmp_extobj_hdr extobj_hdr;
|
||||
union {
|
||||
char name[IFNAMSIZ];
|
||||
__be32 ifindex;
|
||||
struct {
|
||||
struct icmp_ext_echo_ctype3_hdr ctype3_hdr;
|
||||
union {
|
||||
struct in_addr ipv4_addr;
|
||||
struct in6_addr ipv6_addr;
|
||||
} ip_addr;
|
||||
} addr;
|
||||
} ident;
|
||||
};
|
||||
#endif /* _UAPI_LINUX_ICMP_H */
|
||||
|
||||
@@ -140,6 +140,9 @@ struct icmp6hdr {
|
||||
#define ICMPV6_UNK_OPTION 2
|
||||
#define ICMPV6_HDR_INCOMP 3
|
||||
|
||||
/* Codes for EXT_ECHO (PROBE) */
|
||||
#define ICMPV6_EXT_ECHO_REQUEST 160
|
||||
#define ICMPV6_EXT_ECHO_REPLY 161
|
||||
/*
|
||||
* constants for (set|get)sockopt
|
||||
*/
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* Version: @(#)if_fddi.h 1.0.3 Oct 6 2018
|
||||
*
|
||||
* Author: Lawrence V. Stefani, <stefani@yahoo.com>
|
||||
* Maintainer: Maciej W. Rozycki, <macro@linux-mips.org>
|
||||
* Maintainer: Maciej W. Rozycki, <macro@orcam.me.uk>
|
||||
*
|
||||
* if_fddi.h is based on previous if_ether.h and if_tr.h work by
|
||||
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
|
||||
|
||||
@@ -614,6 +614,7 @@ enum macvlan_macaddr_mode {
|
||||
};
|
||||
|
||||
#define MACVLAN_FLAG_NOPROMISC 1
|
||||
#define MACVLAN_FLAG_NODST 2 /* skip dst macvlan if matching src macvlan */
|
||||
|
||||
/* VRF section */
|
||||
enum {
|
||||
|
||||
@@ -120,6 +120,8 @@
|
||||
#define MDIO_PMA_SPEED_100 0x0020 /* 100M capable */
|
||||
#define MDIO_PMA_SPEED_10 0x0040 /* 10M capable */
|
||||
#define MDIO_PCS_SPEED_10P2B 0x0002 /* 10PASS-TS/2BASE-TL capable */
|
||||
#define MDIO_PCS_SPEED_2_5G 0x0040 /* 2.5G capable */
|
||||
#define MDIO_PCS_SPEED_5G 0x0080 /* 5G capable */
|
||||
|
||||
/* Device present registers. */
|
||||
#define MDIO_DEVS_PRESENT(devad) (1 << (devad))
|
||||
|
||||
@@ -174,10 +174,21 @@ enum mptcp_event_attr {
|
||||
MPTCP_ATTR_FLAGS, /* u16 */
|
||||
MPTCP_ATTR_TIMEOUT, /* u32 */
|
||||
MPTCP_ATTR_IF_IDX, /* s32 */
|
||||
MPTCP_ATTR_RESET_REASON,/* u32 */
|
||||
MPTCP_ATTR_RESET_FLAGS, /* u32 */
|
||||
|
||||
__MPTCP_ATTR_AFTER_LAST
|
||||
};
|
||||
|
||||
#define MPTCP_ATTR_MAX (__MPTCP_ATTR_AFTER_LAST - 1)
|
||||
|
||||
/* MPTCP Reset reason codes, rfc8684 */
|
||||
#define MPTCP_RST_EUNSPEC 0
|
||||
#define MPTCP_RST_EMPTCP 1
|
||||
#define MPTCP_RST_ERESOURCE 2
|
||||
#define MPTCP_RST_EPROHIBIT 3
|
||||
#define MPTCP_RST_EWQ2BIG 4
|
||||
#define MPTCP_RST_EBADPERF 5
|
||||
#define MPTCP_RST_EMIDDLEBOX 6
|
||||
|
||||
#endif /* _UAPI_MPTCP_H */
|
||||
|
||||
@@ -398,9 +398,11 @@ enum nft_set_attributes {
|
||||
* enum nft_set_elem_flags - nf_tables set element flags
|
||||
*
|
||||
* @NFT_SET_ELEM_INTERVAL_END: element ends the previous interval
|
||||
* @NFT_SET_ELEM_CATCHALL: special catch-all element
|
||||
*/
|
||||
enum nft_set_elem_flags {
|
||||
NFT_SET_ELEM_INTERVAL_END = 0x1,
|
||||
NFT_SET_ELEM_CATCHALL = 0x2,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -1014,11 +1016,13 @@ enum nft_rt_attributes {
|
||||
*
|
||||
* @NFTA_SOCKET_KEY: socket key to match
|
||||
* @NFTA_SOCKET_DREG: destination register
|
||||
* @NFTA_SOCKET_LEVEL: cgroups2 ancestor level (only for cgroupsv2)
|
||||
*/
|
||||
enum nft_socket_attributes {
|
||||
NFTA_SOCKET_UNSPEC,
|
||||
NFTA_SOCKET_KEY,
|
||||
NFTA_SOCKET_DREG,
|
||||
NFTA_SOCKET_LEVEL,
|
||||
__NFTA_SOCKET_MAX
|
||||
};
|
||||
#define NFTA_SOCKET_MAX (__NFTA_SOCKET_MAX - 1)
|
||||
@@ -1029,11 +1033,13 @@ enum nft_socket_attributes {
|
||||
* @NFT_SOCKET_TRANSPARENT: Value of the IP(V6)_TRANSPARENT socket option
|
||||
* @NFT_SOCKET_MARK: Value of the socket mark
|
||||
* @NFT_SOCKET_WILDCARD: Whether the socket is zero-bound (e.g. 0.0.0.0 or ::0)
|
||||
* @NFT_SOCKET_CGROUPV2: Match on cgroups version 2
|
||||
*/
|
||||
enum nft_socket_keys {
|
||||
NFT_SOCKET_TRANSPARENT,
|
||||
NFT_SOCKET_MARK,
|
||||
NFT_SOCKET_WILDCARD,
|
||||
NFT_SOCKET_CGROUPV2,
|
||||
__NFT_SOCKET_MAX
|
||||
};
|
||||
#define NFT_SOCKET_MAX (__NFT_SOCKET_MAX - 1)
|
||||
|
||||
@@ -21,7 +21,10 @@ struct nexthop_grp {
|
||||
};
|
||||
|
||||
enum {
|
||||
NEXTHOP_GRP_TYPE_MPATH, /* default type if not specified */
|
||||
NEXTHOP_GRP_TYPE_MPATH, /* hash-threshold nexthop group
|
||||
* default type if not specified
|
||||
*/
|
||||
NEXTHOP_GRP_TYPE_RES, /* resilient nexthop group */
|
||||
__NEXTHOP_GRP_TYPE_MAX,
|
||||
};
|
||||
|
||||
@@ -52,8 +55,50 @@ enum {
|
||||
NHA_FDB, /* flag; nexthop belongs to a bridge fdb */
|
||||
/* if NHA_FDB is added, OIF, BLACKHOLE, ENCAP cannot be set */
|
||||
|
||||
/* nested; resilient nexthop group attributes */
|
||||
NHA_RES_GROUP,
|
||||
/* nested; nexthop bucket attributes */
|
||||
NHA_RES_BUCKET,
|
||||
|
||||
__NHA_MAX,
|
||||
};
|
||||
|
||||
#define NHA_MAX (__NHA_MAX - 1)
|
||||
|
||||
enum {
|
||||
NHA_RES_GROUP_UNSPEC,
|
||||
/* Pad attribute for 64-bit alignment. */
|
||||
NHA_RES_GROUP_PAD = NHA_RES_GROUP_UNSPEC,
|
||||
|
||||
/* u16; number of nexthop buckets in a resilient nexthop group */
|
||||
NHA_RES_GROUP_BUCKETS,
|
||||
/* clock_t as u32; nexthop bucket idle timer (per-group) */
|
||||
NHA_RES_GROUP_IDLE_TIMER,
|
||||
/* clock_t as u32; nexthop unbalanced timer */
|
||||
NHA_RES_GROUP_UNBALANCED_TIMER,
|
||||
/* clock_t as u64; nexthop unbalanced time */
|
||||
NHA_RES_GROUP_UNBALANCED_TIME,
|
||||
|
||||
__NHA_RES_GROUP_MAX,
|
||||
};
|
||||
|
||||
#define NHA_RES_GROUP_MAX (__NHA_RES_GROUP_MAX - 1)
|
||||
|
||||
enum {
|
||||
NHA_RES_BUCKET_UNSPEC,
|
||||
/* Pad attribute for 64-bit alignment. */
|
||||
NHA_RES_BUCKET_PAD = NHA_RES_BUCKET_UNSPEC,
|
||||
|
||||
/* u16; nexthop bucket index */
|
||||
NHA_RES_BUCKET_INDEX,
|
||||
/* clock_t as u64; nexthop bucket idle time */
|
||||
NHA_RES_BUCKET_IDLE_TIME,
|
||||
/* u32; nexthop id assigned to the nexthop bucket */
|
||||
NHA_RES_BUCKET_NH_ID,
|
||||
|
||||
__NHA_RES_BUCKET_MAX,
|
||||
};
|
||||
|
||||
#define NHA_RES_BUCKET_MAX (__NHA_RES_BUCKET_MAX - 1)
|
||||
|
||||
#endif
|
||||
|
||||
@@ -655,6 +655,9 @@
|
||||
* When a security association was established on an 802.1X network using
|
||||
* fast transition, this event should be followed by an
|
||||
* %NL80211_CMD_PORT_AUTHORIZED event.
|
||||
* Following a %NL80211_CMD_ROAM event userspace can issue
|
||||
* %NL80211_CMD_GET_SCAN in order to obtain the scan information for the
|
||||
* new BSS the card/driver roamed to.
|
||||
* @NL80211_CMD_DISCONNECT: drop a given connection; also used to notify
|
||||
* userspace that a connection was dropped by the AP or due to other
|
||||
* reasons, for this the %NL80211_ATTR_DISCONNECTED_BY_AP and
|
||||
@@ -5937,6 +5940,16 @@ enum nl80211_feature_flags {
|
||||
* @NL80211_EXT_FEATURE_BEACON_RATE_HE: Driver supports beacon rate
|
||||
* configuration (AP/mesh) with HE rates.
|
||||
*
|
||||
* @NL80211_EXT_FEATURE_SECURE_LTF: Device supports secure LTF measurement
|
||||
* exchange protocol.
|
||||
*
|
||||
* @NL80211_EXT_FEATURE_SECURE_RTT: Device supports secure RTT measurement
|
||||
* exchange protocol.
|
||||
*
|
||||
* @NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE: Device supports management
|
||||
* frame protection for all management frames exchanged during the
|
||||
* negotiation and range measurement procedure.
|
||||
*
|
||||
* @NUM_NL80211_EXT_FEATURES: number of extended features.
|
||||
* @MAX_NL80211_EXT_FEATURES: highest extended feature index.
|
||||
*/
|
||||
@@ -5998,6 +6011,9 @@ enum nl80211_ext_feature_index {
|
||||
NL80211_EXT_FEATURE_FILS_DISCOVERY,
|
||||
NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP,
|
||||
NL80211_EXT_FEATURE_BEACON_RATE_HE,
|
||||
NL80211_EXT_FEATURE_SECURE_LTF,
|
||||
NL80211_EXT_FEATURE_SECURE_RTT,
|
||||
NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE,
|
||||
|
||||
/* add new features before the definition below */
|
||||
NUM_NL80211_EXT_FEATURES,
|
||||
@@ -6295,11 +6311,13 @@ struct nl80211_vendor_cmd_info {
|
||||
* @NL80211_TDLS_PEER_HT: TDLS peer is HT capable.
|
||||
* @NL80211_TDLS_PEER_VHT: TDLS peer is VHT capable.
|
||||
* @NL80211_TDLS_PEER_WMM: TDLS peer is WMM capable.
|
||||
* @NL80211_TDLS_PEER_HE: TDLS peer is HE capable.
|
||||
*/
|
||||
enum nl80211_tdls_peer_capability {
|
||||
NL80211_TDLS_PEER_HT = 1<<0,
|
||||
NL80211_TDLS_PEER_VHT = 1<<1,
|
||||
NL80211_TDLS_PEER_WMM = 1<<2,
|
||||
NL80211_TDLS_PEER_HE = 1<<3,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -6891,6 +6909,9 @@ enum nl80211_peer_measurement_ftm_capa {
|
||||
* if neither %NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED nor
|
||||
* %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set, EDCA based
|
||||
* ranging will be used.
|
||||
* @NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK: negotiate for LMR feedback. Only
|
||||
* valid if either %NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED or
|
||||
* %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set.
|
||||
*
|
||||
* @NUM_NL80211_PMSR_FTM_REQ_ATTR: internal
|
||||
* @NL80211_PMSR_FTM_REQ_ATTR_MAX: highest attribute number
|
||||
@@ -6909,6 +6930,7 @@ enum nl80211_peer_measurement_ftm_req {
|
||||
NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC,
|
||||
NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED,
|
||||
NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED,
|
||||
NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK,
|
||||
|
||||
/* keep last */
|
||||
NUM_NL80211_PMSR_FTM_REQ_ATTR,
|
||||
|
||||
@@ -190,6 +190,8 @@ enum {
|
||||
TCA_POLICE_PAD,
|
||||
TCA_POLICE_RATE64,
|
||||
TCA_POLICE_PEAKRATE64,
|
||||
TCA_POLICE_PKTRATE64,
|
||||
TCA_POLICE_PKTBURST64,
|
||||
__TCA_POLICE_MAX
|
||||
#define TCA_POLICE_RESULT TCA_POLICE_RESULT
|
||||
};
|
||||
|
||||
@@ -13,6 +13,13 @@ enum {
|
||||
PSAMPLE_ATTR_GROUP_REFCOUNT,
|
||||
PSAMPLE_ATTR_TUNNEL,
|
||||
|
||||
PSAMPLE_ATTR_PAD,
|
||||
PSAMPLE_ATTR_OUT_TC, /* u16 */
|
||||
PSAMPLE_ATTR_OUT_TC_OCC, /* u64, bytes */
|
||||
PSAMPLE_ATTR_LATENCY, /* u64, nanoseconds */
|
||||
PSAMPLE_ATTR_TIMESTAMP, /* u64, nanoseconds */
|
||||
PSAMPLE_ATTR_PROTO, /* u16 */
|
||||
|
||||
__PSAMPLE_ATTR_MAX
|
||||
};
|
||||
|
||||
|
||||
@@ -178,6 +178,13 @@ enum {
|
||||
RTM_GETVLAN,
|
||||
#define RTM_GETVLAN RTM_GETVLAN
|
||||
|
||||
RTM_NEWNEXTHOPBUCKET = 116,
|
||||
#define RTM_NEWNEXTHOPBUCKET RTM_NEWNEXTHOPBUCKET
|
||||
RTM_DELNEXTHOPBUCKET,
|
||||
#define RTM_DELNEXTHOPBUCKET RTM_DELNEXTHOPBUCKET
|
||||
RTM_GETNEXTHOPBUCKET,
|
||||
#define RTM_GETNEXTHOPBUCKET RTM_GETNEXTHOPBUCKET
|
||||
|
||||
__RTM_MAX,
|
||||
#define RTM_MAX (((__RTM_MAX + 3) & ~3) - 1)
|
||||
};
|
||||
@@ -283,6 +290,7 @@ enum {
|
||||
#define RTPROT_MROUTED 17 /* Multicast daemon */
|
||||
#define RTPROT_KEEPALIVED 18 /* Keepalived daemon */
|
||||
#define RTPROT_BABEL 42 /* Babel daemon */
|
||||
#define RTPROT_OPENR 99 /* Open Routing (Open/R) Routes */
|
||||
#define RTPROT_BGP 186 /* BGP Routes */
|
||||
#define RTPROT_ISIS 187 /* ISIS Routes */
|
||||
#define RTPROT_OSPF 188 /* OSPF Routes */
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause */
|
||||
|
||||
#ifndef _UAPI_LINUX_VIRTIO_BT_H
|
||||
#define _UAPI_LINUX_VIRTIO_BT_H
|
||||
|
||||
#include <linux/virtio_types.h>
|
||||
|
||||
/* Feature bits */
|
||||
#define VIRTIO_BT_F_VND_HCI 0 /* Indicates vendor command support */
|
||||
#define VIRTIO_BT_F_MSFT_EXT 1 /* Indicates MSFT vendor support */
|
||||
#define VIRTIO_BT_F_AOSP_EXT 2 /* Indicates AOSP vendor support */
|
||||
|
||||
enum virtio_bt_config_type {
|
||||
VIRTIO_BT_CONFIG_TYPE_PRIMARY = 0,
|
||||
VIRTIO_BT_CONFIG_TYPE_AMP = 1,
|
||||
};
|
||||
|
||||
enum virtio_bt_config_vendor {
|
||||
VIRTIO_BT_CONFIG_VENDOR_NONE = 0,
|
||||
VIRTIO_BT_CONFIG_VENDOR_ZEPHYR = 1,
|
||||
VIRTIO_BT_CONFIG_VENDOR_INTEL = 2,
|
||||
VIRTIO_BT_CONFIG_VENDOR_REALTEK = 3,
|
||||
};
|
||||
|
||||
struct virtio_bt_config {
|
||||
__u8 type;
|
||||
__u16 vendor;
|
||||
__u16 msft_opcode;
|
||||
} __attribute__((packed));
|
||||
|
||||
#endif /* _UAPI_LINUX_VIRTIO_BT_H */
|
||||
@@ -53,6 +53,7 @@
|
||||
#define VIRTIO_ID_MEM 24 /* virtio mem */
|
||||
#define VIRTIO_ID_FS 26 /* virtio filesystem */
|
||||
#define VIRTIO_ID_PMEM 27 /* virtio pmem */
|
||||
#define VIRTIO_ID_BT 28 /* virtio bluetooth */
|
||||
#define VIRTIO_ID_MAC80211_HWSIM 29 /* virtio mac80211-hwsim */
|
||||
|
||||
#endif /* _LINUX_VIRTIO_IDS_H */
|
||||
|
||||
Reference in New Issue
Block a user