This series (1) moves vhost-user-bridge (vubr) from tests/ to
contrib/vhost-user-bridge/, (2) introduces a basic functional test of
vubr, and (3) adds UDP receive packet logging to vubr:
Patch 1: Moving vhost-user-bridge
---------------------------------
After the introduction of vhost-user-bridge and libvhost-user, new
vhost-user backend daemons were placed in dedicated subdirectories of
contrib/. An F: line under the vhost section in MAINTAINERS grants these
daemons coverage; in tests/, however, vhost-user-bridge lacks coverage
and appears orphaned there. So, let's give it a home with the rest of
the vhost-user backend family.
As part of the move, vhost-user-bridge also gains a section in the
vhost-user-contrib document. More can be said about vubr there, like its
client mode feature added in aef8486ede8b by Marc-André, but for now a
short description and usage example will help folks interested in using
the daemon to expand vhost-user support in QEMU.
Lastly, Patch 1 makes the necessary changes to the meson build files in
tests/ and root, and the new one in contrib/vhost-user-bridge/.
Patch 2: Introducing a functional test
--------------------------------------
This test was inspired by discussions with Cédric regarding build errors
from recent glibc const changes and was the subject of the first RFC.
The functional test introduced in the second patch starts vubr as a
subprocess, then launches a single QEMU instance that provides a slirp
stack and serves as the frontend of the vhost-user protocol, much like
the testing setup described in vhost-user-bridge's initial commit in
3595e2eb0a23.
For additional details about the test, please see Patch 2's commit
message and/or the test's header; in short: the host serves a file to
the guest via tftp, then the guest serves a file to the host via http.
The guest's kernel image was built with Buildroot in a Containerfile
that is based on a snapshot Debian container image, so that the kernel
image remains bit-for-bit reproducible indefinitely. For the image and
its build files, please see:
https://github.com/yodel/vhost-user-bridge-test
The repo will be placed in archive (read-only) mode if/when the series
lands.
Patch 3: Adding UDP RX logging
------------------------------
An existing transmit hexdump of UDP packets provides valuable data;
adding a receive hexdump to complement TX doubles the fun (read:
visibility). Like TX, the RX hexdump is gated behind a currently
hardcoded-on macro. Another new debug print separates transmit blocks
from receives.
Changes since RFCv2:
--------------------
- Promoted to PATCH
- Collect R-b's (thanks to Marc-André and Thomas)
- Add test to .../x86_64/meson.build thorough suite (Marc-André)
- Add encoding= args to open() (Thomas)
- Add pylint disable=unbalanced-tuple-unpacking on find_free_ports()
- Minor commit message rewording
Changes since RFCv1:
--------------------
- Remove external host dependency (Marc-André)
- Use user netdev tftp feature (Thomas)
- Use check_http_download (Thomas)
- Remove wget
- Inherit from LinuxKernelTest instead of QemuSystemTest
- Use hardcoded UUIDs in files on the guest and host for data transfer
- Use a Popen context manager to terminate and wait on vubr
- Add test to MAINTAINERS under the vhost section (Michael)
- New patch to move from tests/ to contrib/vhost-user-bridge/ and add
docs section
- New patch to add RX debug logging in vhost-user-bridge.c
Links
-----
RFCv2:
https://lore.kernel.org/qemu-devel/[email protected]/
RFCv1:
https://lore.kernel.org/qemu-devel/[email protected]/
Yodel Eldar (3):
tests/vhost-user-bridge: Move to contrib/vhost-user-bridge/
tests/functional/x86_64: Add vhost-user-bridge test
contrib/vhost-user-bridge: Add UDP receive hexdump
MAINTAINERS | 1 +
contrib/vhost-user-bridge/meson.build | 4 +
.../vhost-user-bridge}/vhost-user-bridge.c | 7 +
.../devices/virtio/vhost-user-contrib.rst | 39 +++++
meson.build | 1 +
tests/functional/x86_64/meson.build | 1 +
.../x86_64/test_vhost_user_bridge.py | 147 ++++++++++++++++++
tests/meson.build | 6 -
8 files changed, 200 insertions(+), 6 deletions(-)
create mode 100644 contrib/vhost-user-bridge/meson.build
rename {tests => contrib/vhost-user-bridge}/vhost-user-bridge.c (98%)
create mode 100755 tests/functional/x86_64/test_vhost_user_bridge.py
--
2.52.0