This series introduces support for passt as a new network backend for QEMU.
passt is a modern, unprivileged, user-mode networking solution that provides guest connectivity by launching an external helper process. This series adds the core backend and integrates it with vhost-user for high-performance, accelerated networking. The series is structured to first improve the general networking code before adding the new feature. The first patch extracts from the stream backend the functions that will be reused in the passt backend. The following patches are a preparatory refactoring to decouple the generic vhost layer from specific backend implementations (tap, vhost-user, etc.). This is achieved by replacing hardcoded type checks with a callback-based system in NetClientInfo, making the vhost infrastructure more modular and extensible. With the refactoring in place, subsequent patches introduce the passt backend itself, reusing the generic stream handling logic. The final patch adds vhost-user support to passt, which plugs cleanly into the newly refactored vhost layer. Some benchmarks: Reference '-net user': -net user,hostfwd=tcp::10001-:10001 iperf3 -c localhost -p 10001 -t 60 -4 [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-60.00 sec 14.2 GBytes 2.03 Gbits/sec 1 sender [ 5] 0.00-60.00 sec 14.2 GBytes 2.03 Gbits/sec receiver New backend '-netdev passt' -netdev passt,vhost-user=off,tcp-ports=10001 iperf3 -c localhost -p 10001 -t 60 -4 [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-60.00 sec 27.1 GBytes 3.88 Gbits/sec 0 sender [ 5] 0.00-60.03 sec 27.1 GBytes 3.88 Gbits/sec receiver -netdev passt,vhost-user=on,tcp-ports=10001 iperf3 -c localhost -p 10001 -t 60 -4 [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-60.00 sec 224 GBytes 32.1 Gbits/sec 4 sender [ 5] 0.00-60.05 sec 224 GBytes 32.0 Gbits/sec receiver v2: - rebase: fix conflict with 837b87c4c5ba ("net/stream: skip automatic zero-init of large array") (why is this needed? A buffer on a stack is normally not initialized...) - add path parameter to provide path of passt if it is not in PATH - add 2 patches: "net: Allow network backends to advertise max TX queue size" "net: Consolidate vhost feature bits into NetClientInfo" Thanks, Laurent Laurent Vivier (10): net: Refactor stream logic for reuse in '-net passt' net: Define net_client_set_link() net: Introduce helper to identify vhost-user clients net: Add get_vhost_net callback to NetClientInfo net: Consolidate vhost feature bits into NetClientInfo net: Add get_acked_features callback to NetClientInfo net: Add save_acked_features callback to NetClientInfo net: Allow network backends to advertise max TX queue size net: Add passt network backend net/passt: Implement vhost-user backend support hmp-commands.hx | 3 + hw/net/vhost_net-stub.c | 1 - hw/net/vhost_net.c | 139 +------ hw/net/virtio-net.c | 18 +- include/net/net.h | 14 + include/net/tap.h | 3 - include/net/vhost-user.h | 19 - include/net/vhost-vdpa.h | 4 - meson.build | 6 + meson_options.txt | 2 + net/clients.h | 4 + net/hub.c | 3 + net/meson.build | 6 +- net/net.c | 55 ++- net/passt.c | 768 +++++++++++++++++++++++++++++++++++++++ net/stream.c | 282 ++++---------- net/stream_data.c | 193 ++++++++++ net/stream_data.h | 31 ++ net/tap-win32.c | 5 - net/tap.c | 39 +- net/vhost-user-stub.c | 1 - net/vhost-user.c | 66 +++- net/vhost-vdpa.c | 10 +- qapi/net.json | 124 +++++++ qemu-options.hx | 18 + 25 files changed, 1399 insertions(+), 415 deletions(-) delete mode 100644 include/net/vhost-user.h create mode 100644 net/passt.c create mode 100644 net/stream_data.c create mode 100644 net/stream_data.h -- 2.49.0