[PATCH 0/3] qemu: Improve support for usb-net devices

Though usb-net is not explicitly supported, it is already possible to use usb-net devices directly with libvirt (Simply by setting model type as 'usb-net' and manually providing a USB address) This patch series intends to fill in some remaining gaps. 1. Re-add usb-net capability 2. Automatic USB address assignment 3. New testcase Fixes: https://gitlab.com/libvirt/libvirt/-/issues/14 Rayhan Faizel (3): qemu_capabilities: Re-add QEMU_CAPS_DEVICE_USB_NET capability conf: Improve parsing of usb-net devices tests: Add testcase for usb-net docs/formatdomain.rst | 2 +- src/conf/domain_conf.c | 9 ++++- src/qemu/qemu_capabilities.c | 3 +- src/qemu/qemu_capabilities.h | 2 +- src/qemu/qemu_domain_address.c | 5 +++ .../caps_4.2.0_aarch64.xml | 1 + .../qemucapabilitiesdata/caps_4.2.0_ppc64.xml | 1 + .../caps_4.2.0_x86_64.xml | 1 + .../caps_5.0.0_aarch64.xml | 1 + .../qemucapabilitiesdata/caps_5.0.0_ppc64.xml | 1 + .../caps_5.0.0_riscv64.xml | 1 + .../caps_5.0.0_x86_64.xml | 1 + .../caps_5.1.0_x86_64.xml | 1 + .../caps_5.2.0_aarch64.xml | 1 + .../qemucapabilitiesdata/caps_5.2.0_ppc64.xml | 1 + .../caps_5.2.0_riscv64.xml | 1 + .../caps_5.2.0_x86_64.xml | 1 + .../caps_6.0.0_aarch64.xml | 1 + .../caps_6.0.0_x86_64.xml | 1 + .../caps_6.1.0_x86_64.xml | 1 + .../caps_6.2.0_aarch64.xml | 1 + .../qemucapabilitiesdata/caps_6.2.0_ppc64.xml | 1 + .../caps_6.2.0_x86_64.xml | 1 + .../caps_7.0.0_aarch64+hvf.xml | 1 + .../caps_7.0.0_aarch64.xml | 1 + .../qemucapabilitiesdata/caps_7.0.0_ppc64.xml | 1 + .../caps_7.0.0_x86_64.xml | 1 + .../qemucapabilitiesdata/caps_7.1.0_ppc64.xml | 1 + .../caps_7.1.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml | 1 + .../caps_7.2.0_x86_64+hvf.xml | 1 + .../caps_7.2.0_x86_64.xml | 1 + .../caps_8.0.0_riscv64.xml | 1 + .../caps_8.0.0_x86_64.xml | 1 + .../qemucapabilitiesdata/caps_8.1.0_s390x.xml | 1 + .../caps_8.1.0_x86_64.xml | 1 + .../caps_8.2.0_aarch64.xml | 1 + .../caps_8.2.0_armv7l.xml | 1 + .../caps_8.2.0_loongarch64.xml | 1 + .../qemucapabilitiesdata/caps_8.2.0_s390x.xml | 1 + .../caps_8.2.0_x86_64.xml | 1 + .../caps_9.0.0_x86_64.xml | 1 + .../net-usb.x86_64-latest.args | 35 +++++++++++++++++++ .../qemuxmlconfdata/net-usb.x86_64-latest.xml | 35 +++++++++++++++++++ tests/qemuxmlconfdata/net-usb.xml | 20 +++++++++++ tests/qemuxmlconftest.c | 1 + 46 files changed, 145 insertions(+), 4 deletions(-) create mode 100644 tests/qemuxmlconfdata/net-usb.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/net-usb.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/net-usb.xml -- 2.34.1

This capability was previously prefixed with X_ due to not being in use. Signed-off-by: Rayhan Faizel <rayhan.faizel@gmail.com> --- src/qemu/qemu_capabilities.c | 3 ++- src/qemu/qemu_capabilities.h | 2 +- tests/qemucapabilitiesdata/caps_4.2.0_aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0_ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0_aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0_ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0_riscv64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_5.1.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml | 1 + tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml | 1 + tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml | 1 + tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml | 1 + tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml | 1 + tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml | 1 + tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml | 1 + tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml | 1 + tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml | 1 + tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml | 1 + 39 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 21f93c6774..eea80529f6 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -238,7 +238,7 @@ VIR_ENUM_IMPL(virQEMUCaps, "device-video-primary", /* X_QEMU_CAPS_DEVICE_VIDEO_PRIMARY */ "s390-sclp", /* QEMU_CAPS_DEVICE_SCLPCONSOLE */ "usb-serial", /* QEMU_CAPS_DEVICE_USB_SERIAL */ - "usb-net", /* X_QEMU_CAPS_DEVICE_USB_NET */ + "usb-net", /* QEMU_CAPS_DEVICE_USB_NET */ /* 125 */ "add-fd", /* X_QEMU_CAPS_ADD_FD */ @@ -1266,6 +1266,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { { "cirrus-vga", QEMU_CAPS_DEVICE_CIRRUS_VGA }, { "vmware-svga", QEMU_CAPS_DEVICE_VMWARE_SVGA }, { "usb-serial", QEMU_CAPS_DEVICE_USB_SERIAL }, + { "usb-net", QEMU_CAPS_DEVICE_USB_NET }, { "virtio-rng-pci", QEMU_CAPS_DEVICE_VIRTIO_RNG }, { "virtio-rng-ccw", QEMU_CAPS_DEVICE_VIRTIO_RNG }, { "virtio-rng-device", QEMU_CAPS_DEVICE_VIRTIO_RNG }, diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 5082967cba..ed5614c753 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -216,7 +216,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ X_QEMU_CAPS_DEVICE_VIDEO_PRIMARY, /* -device safe for primary video device */ QEMU_CAPS_DEVICE_SCLPCONSOLE, /* -device sclpconsole */ QEMU_CAPS_DEVICE_USB_SERIAL, /* -device usb-serial */ - X_QEMU_CAPS_DEVICE_USB_NET, /* -device usb-net */ + QEMU_CAPS_DEVICE_USB_NET, /* -device usb-net */ /* 125 */ X_QEMU_CAPS_ADD_FD, /* -add-fd */ diff --git a/tests/qemucapabilitiesdata/caps_4.2.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_4.2.0_aarch64.xml index 33d06fface..806467c2a9 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0_aarch64.xml @@ -27,6 +27,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_4.2.0_ppc64.xml index 80f503fc46..1d6c2c0622 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0_ppc64.xml @@ -27,6 +27,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_4.2.0_x86_64.xml index 40e3211c57..bb8512ed8e 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0_x86_64.xml @@ -33,6 +33,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_5.0.0_aarch64.xml index 1044a49742..4e8e73f4a0 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0_aarch64.xml @@ -27,6 +27,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_5.0.0_ppc64.xml index 1806e6316e..94c1bd588d 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0_ppc64.xml @@ -27,6 +27,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0_riscv64.xml b/tests/qemucapabilitiesdata/caps_5.0.0_riscv64.xml index f68d88f39b..35b5679d7a 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0_riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0_riscv64.xml @@ -31,6 +31,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_5.0.0_x86_64.xml index 1741c003cb..df78e4a59b 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0_x86_64.xml @@ -33,6 +33,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_5.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_5.1.0_x86_64.xml index c863baa71c..a473a4c6df 100644 --- a/tests/qemucapabilitiesdata/caps_5.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.1.0_x86_64.xml @@ -33,6 +33,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml index ddd30feaff..e3e3164659 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml @@ -27,6 +27,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml index be3d464df3..ceae0c28f8 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml @@ -27,6 +27,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml b/tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml index 9280e92fd8..327e6946ee 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml @@ -31,6 +31,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml index da6229f8e2..f8999b1ab1 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml @@ -33,6 +33,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml index 7cf7c0707b..9ac1327989 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml @@ -26,6 +26,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml index ffaa7c2a71..d4c30d7345 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml @@ -32,6 +32,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml index 22a1fc3ac7..fd6150b02d 100644 --- a/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml @@ -32,6 +32,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml index 13253f13c0..17b999bf4b 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml @@ -31,6 +31,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml index 719e7120a3..883e30d76e 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml @@ -25,6 +25,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml index 010f142dee..f0a87390c6 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml @@ -32,6 +32,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml b/tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml index b359f22b03..2a37989538 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml @@ -30,6 +30,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml index c6f31b94fd..0e72365bb3 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml @@ -31,6 +31,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml index 2efa4d6259..4c4b8d2e5d 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml @@ -31,6 +31,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml index 843225b19d..f7aada242d 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml @@ -32,6 +32,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml index 3fda8bf6ea..36b2eb6204 100644 --- a/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml @@ -30,6 +30,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml index 0d43787fa9..0ed41515c0 100644 --- a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml @@ -32,6 +32,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml b/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml index 7a73f762de..e272f6d2bb 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml @@ -31,6 +31,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml index 5ba0c24a4d..8a3d441db5 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml @@ -31,6 +31,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml index 887cb02fa0..466e2c2576 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml @@ -32,6 +32,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml b/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml index 9af900aaa3..11c28dd374 100644 --- a/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml @@ -24,6 +24,7 @@ <flag name='VGA'/> <flag name='cirrus-vga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml index 62a42c3ab6..a17b91bcab 100644 --- a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml @@ -32,6 +32,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml b/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml index 744261be10..ce6519999d 100644 --- a/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml @@ -14,6 +14,7 @@ <flag name='vnc'/> <flag name='s390-sclp'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml index 907fc39b99..b9bf81253c 100644 --- a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml @@ -32,6 +32,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml index fe4c65c9b7..ce278d337e 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml @@ -27,6 +27,7 @@ <flag name='VGA'/> <flag name='cirrus-vga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml b/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml index e26dc43963..c9adb06fc3 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml @@ -29,6 +29,7 @@ <flag name='VGA'/> <flag name='cirrus-vga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml b/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml index bfe59f0c29..275b77d5b2 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml @@ -30,6 +30,7 @@ <flag name='VGA'/> <flag name='cirrus-vga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml b/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml index 70e85bef28..7cc528015d 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml @@ -14,6 +14,7 @@ <flag name='vnc'/> <flag name='s390-sclp'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml index 40716fa8d1..274d09ea73 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml @@ -32,6 +32,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> diff --git a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml index 1873663353..037cc118ca 100644 --- a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml @@ -32,6 +32,7 @@ <flag name='cirrus-vga'/> <flag name='vmware-svga'/> <flag name='usb-serial'/> + <flag name='usb-net'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> -- 2.34.1

On Tue, Apr 02, 2024 at 02:01:16 +0530, Rayhan Faizel wrote:
This capability was previously prefixed with X_ due to not being in use.
This was done as all qemu versions do support this device and even when compiled out libvirt has fallback code which tries to use any unknown network device model directly with qemu to preserve backwards compatibility. While I didn't check what you want to do with this, the capability most likely won't be needed for it.

On Tue, Apr 02, 2024 at 09:39:59 +0200, Peter Krempa wrote:
On Tue, Apr 02, 2024 at 02:01:16 +0530, Rayhan Faizel wrote:
This capability was previously prefixed with X_ due to not being in use.
This was done as all qemu versions do support this device and even when compiled out libvirt has fallback code which tries to use any unknown network device model directly with qemu to preserve backwards compatibility.
While I didn't check what you want to do with this, the capability most likely won't be needed for it.
Yup, looked at the rest of the patches and they don't even use it. NACK to this patch.

This patch will allow usb-net devices to be automatically assigned a USB address (and skip any attempt to assign a PCI one). Signed-off-by: Rayhan Faizel <rayhan.faizel@gmail.com> --- docs/formatdomain.rst | 2 +- src/conf/domain_conf.c | 9 ++++++++- src/qemu/qemu_domain_address.c | 5 +++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 2adc2ff968..c58ff6a08c 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -5596,7 +5596,7 @@ supported models with these commands: qemu-kvm -net nic,model=? /dev/null Typical values for QEMU and KVM include: ne2k_isa i82551 i82557b i82559er -ne2k_pci pcnet rtl8139 e1000 virtio. :since:`Since 5.2.0`, +ne2k_pci pcnet rtl8139 e1000 virtio usb-net. :since:`Since 5.2.0`, ``virtio-transitional`` and ``virtio-non-transitional`` values are supported. See `Virtio transitional devices`_ for more details. :since:`Since 9.3.0` igb is also supported. diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 770b5fbbff..c45484c359 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -28677,7 +28677,14 @@ virDomainUSBDeviceDefForeach(virDomainDef *def, } } - /* TODO: add def->nets here when libvirt starts supporting usb-net */ + /* usb-net */ + for (i = 0; i < def->nnets; i++) { + virDomainNetDef *net = def->nets[i]; + if (net->model == VIR_DOMAIN_NET_MODEL_USB_NET) { + if (iter(&net->info, opaque) < 0) + return -1; + } + } /* usb-ccid */ for (i = 0; i < def->ncontrollers; i++) { diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index cc3bc76971..83f9654fd8 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -2087,6 +2087,11 @@ qemuDomainAssignDevicePCISlots(virDomainDef *def, for (i = 0; i < def->nnets; i++) { virDomainNetDef *net = def->nets[i]; + /* Skip usb-net device */ + if (net->model == VIR_DOMAIN_NET_MODEL_USB_NET) { + continue; + } + /* type='hostdev' network devices might be USB, and are also * in hostdevs list anyway, so handle them with other hostdevs * instead of here. -- 2.34.1

On Tue, Apr 02, 2024 at 02:01:17 +0530, Rayhan Faizel wrote: The summary is misleading, as assigning addresses is distinct from parsing.
This patch will allow usb-net devices to be automatically assigned a USB address (and skip any attempt to assign a PCI one).
Signed-off-by: Rayhan Faizel <rayhan.faizel@gmail.com> --- docs/formatdomain.rst | 2 +- src/conf/domain_conf.c | 9 ++++++++- src/qemu/qemu_domain_address.c | 5 +++++ 3 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 2adc2ff968..c58ff6a08c 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -5596,7 +5596,7 @@ supported models with these commands: qemu-kvm -net nic,model=? /dev/null
Typical values for QEMU and KVM include: ne2k_isa i82551 i82557b i82559er -ne2k_pci pcnet rtl8139 e1000 virtio. :since:`Since 5.2.0`, +ne2k_pci pcnet rtl8139 e1000 virtio usb-net. :since:`Since 5.2.0`,
The text here specifies additively when real support was added, this addition would make it seem that it was supported forever.
``virtio-transitional`` and ``virtio-non-transitional`` values are supported. See `Virtio transitional devices`_ for more details. :since:`Since 9.3.0` igb is also supported. diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 770b5fbbff..c45484c359 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -28677,7 +28677,14 @@ virDomainUSBDeviceDefForeach(virDomainDef *def, } }
- /* TODO: add def->nets here when libvirt starts supporting usb-net */ + /* usb-net */ + for (i = 0; i < def->nnets; i++) { + virDomainNetDef *net = def->nets[i]; + if (net->model == VIR_DOMAIN_NET_MODEL_USB_NET) { + if (iter(&net->info, opaque) < 0) + return -1; + } + }
/* usb-ccid */ for (i = 0; i < def->ncontrollers; i++) { diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index cc3bc76971..83f9654fd8 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -2087,6 +2087,11 @@ qemuDomainAssignDevicePCISlots(virDomainDef *def, for (i = 0; i < def->nnets; i++) { virDomainNetDef *net = def->nets[i];
+ /* Skip usb-net device */
The code below is self-explanatory IMO as it does exactly waht the comment says (in other words, drop the comment).
+ if (net->model == VIR_DOMAIN_NET_MODEL_USB_NET) { + continue; + } + /* type='hostdev' network devices might be USB, and are also * in hostdevs list anyway, so handle them with other hostdevs * instead of here.
With the docs and commit message fixed: Reviewed-by: Peter Krempa <pkrempa@redhat.com>

Add small test case to demonstrate use of usb-net with user networking backend. Signed-off-by: Rayhan Faizel <rayhan.faizel@gmail.com> --- .../net-usb.x86_64-latest.args | 35 +++++++++++++++++++ .../qemuxmlconfdata/net-usb.x86_64-latest.xml | 35 +++++++++++++++++++ tests/qemuxmlconfdata/net-usb.xml | 20 +++++++++++ tests/qemuxmlconftest.c | 1 + 4 files changed, 91 insertions(+) create mode 100644 tests/qemuxmlconfdata/net-usb.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/net-usb.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/net-usb.xml diff --git a/tests/qemuxmlconfdata/net-usb.x86_64-latest.args b/tests/qemuxmlconfdata/net-usb.x86_64-latest.args new file mode 100644 index 0000000000..714ab9aafe --- /dev/null +++ b/tests/qemuxmlconfdata/net-usb.x86_64-latest.args @@ -0,0 +1,35 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \ +-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \ +-accel tcg \ +-cpu qemu64 \ +-m size=4194304k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":4294967296}' \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid 2d4d4b20-b19b-4713-af0a-bf1cab8b455b \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device '{"driver":"qemu-xhci","p2":1,"p3":1,"id":"usb","bus":"pci.0","addr":"0x2"}' \ +-netdev '{"type":"user","id":"hostnet0"}' \ +-device '{"driver":"usb-net","netdev":"hostnet0","id":"net0","mac":"00:11:22:33:44:55","bus":"usb.0","port":"1"}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","addr":"0x3"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/net-usb.x86_64-latest.xml b/tests/qemuxmlconfdata/net-usb.x86_64-latest.xml new file mode 100644 index 0000000000..071fc9cfc4 --- /dev/null +++ b/tests/qemuxmlconfdata/net-usb.x86_64-latest.xml @@ -0,0 +1,35 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>2d4d4b20-b19b-4713-af0a-bf1cab8b455b</uuid> + <memory unit='KiB'>4194304</memory> + <currentMemory unit='KiB'>4194304</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>qemu64</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='usb' index='0' model='qemu-xhci' ports='1'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </controller> + <controller type='pci' index='0' model='pci-root'/> + <interface type='user'> + <mac address='00:11:22:33:44:55'/> + <model type='usb-net'/> + </interface> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <audio id='1' type='none'/> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </memballoon> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/net-usb.xml b/tests/qemuxmlconfdata/net-usb.xml new file mode 100644 index 0000000000..8a678e5731 --- /dev/null +++ b/tests/qemuxmlconfdata/net-usb.xml @@ -0,0 +1,20 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>2d4d4b20-b19b-4713-af0a-bf1cab8b455b</uuid> + <memory unit='KiB'>4194304</memory> + <currentMemory unit='KiB'>4194304</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='usb' index='0' model='qemu-xhci' ports='1'/> + <interface type="user"> + <mac address="00:11:22:33:44:55"/> + <model type="usb-net"/> + </interface> + <memballoon model='virtio'/> + </devices> +</domain> diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index 9e2c7da15a..d40b826279 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -2976,6 +2976,7 @@ mymain(void) DO_TEST_CAPS_LATEST("tap-vhost"); DO_TEST_CAPS_LATEST("mtp-usb-device") + DO_TEST_CAPS_LATEST("net-usb") /* check that all input files were actually used here */ if (testConfXMLCheck(existingTestCases) < 0) -- 2.34.1

On Tue, Apr 02, 2024 at 02:01:18 +0530, Rayhan Faizel wrote:
Add small test case to demonstrate use of usb-net with user networking backend.
Signed-off-by: Rayhan Faizel <rayhan.faizel@gmail.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
participants (2)
-
Peter Krempa
-
Rayhan Faizel