qemu-cr16/net
Daniel Borkmann e53d9ec7cc net/af-xdp: Support pinned map path for AF_XDP sockets
Extend 'inhibit=on' setting with the option to specify a pinned XSK map
path along with a starting index (default 0) to push the created XSK
sockets into. Example usage:

  # ./build/qemu-system-x86_64 [...] \
   -netdev af-xdp,ifname=enp2s0f0np0,id=net0,mode=native,queues=2,start-queue=14,inhibit=on,map-path=/sys/fs/bpf/xsks_map,map-start-index=14 \
   -device virtio-net-pci,netdev=net0 [...]

This is useful for the case where an existing XDP program with XSK map
is present on the AF_XDP supported phys device and the XSK map is not
yet populated. For example, the former could have been pre-loaded onto
the netdevice by a control plane, which later launches QEMU to populate
it with XSK sockets.

Normally, the main idea behind 'inhibit=on' is that the QEMU instance
doesn't need to have a lot of privileges to use the pre-loaded program
and the pre-created sockets, but this mentioned use-case here is different
where QEMU still needs privileges to create the sockets.

The 'map-start-index' parameter is optional and defaults to 0. It allows
flexible placement of the XSK sockets, and is up to the user to specify
when the XDP program with XSK map was already preloaded. In the simplest
case the queue-to-map-slot mapping is just 1:1 based on ctx->rx_queue_index
but the user might as well have a different scheme (or smaller map size,
e.g. ctx->rx_queue_index % max_size) to push the inbound traffic to one
of the XSK sockets.

Note that the bpf_xdp_query_id() is now only tested for 'inhibit=off'
since only in the latter case the libxdp takes care of installing the
XDP program which was installed based on the s->xdp_flags pointing to
either driver or skb mode. For 'inhibit=on' we don't make any assumptions
and neither go down the path of probing all possible options in which
way the user installed the XDP program.

Reviewed-by: Ilya Maximets <i.maximets@ovn.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Cc: Ilya Maximets <i.maximets@ovn.org>
Cc: Jason Wang <jasowang@redhat.com>
Cc: Anton Protopopov <aspsk@isovalent.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
2025-07-15 10:26:55 +08:00
..
can qom: Make InterfaceInfo[] uses const 2025-04-25 17:00:41 +02:00
af-xdp.c net/af-xdp: Support pinned map path for AF_XDP sockets 2025-07-15 10:26:55 +08:00
announce.c qapi net: Elide redundant has_FOO in generated C 2022-12-14 20:04:47 +01:00
checksum.c net: checksum: Convert data to void * 2024-11-25 13:59:50 +08:00
clients.h net: Add passt network backend 2025-07-14 13:27:09 +08:00
colo-compare.c qom: Make InterfaceInfo[] uses const 2025-04-25 17:00:41 +02:00
colo-compare.h Add the function of colo_compare_cleanup 2021-06-11 10:30:13 +08:00
colo-stubs.c colo: move stubs out of stubs/ 2024-04-18 11:17:27 +02:00
colo.c net/colo.c: Fix the pointer issue reported by Coverity. 2022-09-02 10:22:39 +08:00
colo.h net/colo.c: Fix the pointer issue reported by Coverity. 2022-09-02 10:22:39 +08:00
dgram.c win32: replace closesocket() with close() wrapper 2023-03-13 15:39:31 +04:00
dump.c qom: Have class_init() take a const data argument 2025-04-25 17:00:41 +02:00
eth.c net/eth: Clean up local variable shadowing 2023-09-29 10:07:16 +02:00
filter-buffer.c qom: Have class_init() take a const data argument 2025-04-25 17:00:41 +02:00
filter-mirror.c qom: Have class_init() take a const data argument 2025-04-25 17:00:41 +02:00
filter-replay.c qom: Have class_init() take a const data argument 2025-04-25 17:00:41 +02:00
filter-rewriter.c qom: Have class_init() take a const data argument 2025-04-25 17:00:41 +02:00
filter.c qom: Make InterfaceInfo[] uses const 2025-04-25 17:00:41 +02:00
hub.c net: Add passt network backend 2025-07-14 13:27:09 +08:00
hub.h net: Remove deprecated [hub_id name] tuple of 'hostfwd_add' / 'hostfwd_remove' 2020-03-09 18:44:04 +00:00
l2tpv3.c net: Increase L2TPv3 buffer to fit jumboframes 2023-02-17 13:31:33 +08:00
meson.build net: Add passt network backend 2025-07-14 13:27:09 +08:00
net-hmp-cmds.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
net.c net: Add passt network backend 2025-07-14 13:27:09 +08:00
netmap.c tap: Remove qemu_using_vnet_hdr() 2024-06-04 15:14:25 +08:00
passt.c net/passt: Implement vhost-user backend support 2025-07-14 13:27:09 +08:00
queue.c net: Remove deadcode 2024-10-03 17:26:05 +03:00
slirp.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
socket.c net/socket: skip automatic zero-init of large array 2025-06-12 13:40:16 -04:00
stream.c net: Refactor stream logic for reuse in '-net passt' 2025-07-14 13:27:09 +08:00
stream_data.c net: Refactor stream logic for reuse in '-net passt' 2025-07-14 13:27:09 +08:00
stream_data.h net: Refactor stream logic for reuse in '-net passt' 2025-07-14 13:27:09 +08:00
tap-bsd.c tap: Remove tap_probe_vnet_hdr_len() 2024-06-04 15:14:25 +08:00
tap-linux.c tap-linux: Open ipvtap and macvtap 2025-03-10 17:07:16 +08:00
tap-linux.h tap: Add USO support to tap device. 2023-09-18 14:36:13 +08:00
tap-solaris.c tap: Remove tap_probe_vnet_hdr_len() 2024-06-04 15:14:25 +08:00
tap-stub.c tap: Remove tap_probe_vnet_hdr_len() 2024-06-04 15:14:25 +08:00
tap-win32.c net: Add get_vhost_net callback to NetClientInfo 2025-07-14 13:27:09 +08:00
tap.c net: Add is_vhost_user flag to vhost_net struct 2025-07-14 13:27:09 +08:00
tap_int.h tap: Remove tap_probe_vnet_hdr_len() 2024-06-04 15:14:25 +08:00
trace-events vdpa: add trace event for vhost_vdpa_net_load_mq 2024-03-12 17:56:55 -04:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
util.c net: Clean up includes 2016-02-04 17:41:30 +00:00
util.h Replace config-time define HOST_WORDS_BIGENDIAN 2022-04-06 10:50:37 +02:00
vde.c net: introduce qemu_set_info_str() function 2022-10-28 13:28:52 +08:00
vhost-user-stub.c net: Add save_acked_features callback to vhost_net 2025-07-14 13:27:09 +08:00
vhost-user.c net: Add is_vhost_user flag to vhost_net struct 2025-07-14 13:27:09 +08:00
vhost-vdpa-stub.c vhost-net-vdpa: add stubs for when no virtio-net device is present 2022-07-20 16:58:08 +08:00
vhost-vdpa.c net: Add is_vhost_user flag to vhost_net struct 2025-07-14 13:27:09 +08:00
vmnet-bridged.m net/vmnet: Drop ifdef for macOS versions older than 12.0 2024-07-02 06:58:48 +02:00
vmnet-common.m error: Strip trailing '\n' from an error string argument 2025-03-19 07:53:26 +01:00
vmnet-host.c net/vmnet: Drop ifdef for macOS versions older than 12.0 2024-07-02 06:58:48 +02:00
vmnet-shared.c net/vmnet: Drop ifdef for macOS versions older than 12.0 2024-07-02 06:58:48 +02:00
vmnet_int.h vmnet: stop recieving events when VM is stopped 2023-02-17 13:31:33 +08:00