conf: Add USB redirect devices to domain capabilities

As qemu becomes more modularized, it is important for libvirt to advertise
availability of the modularized functionality through capabilities. This
change adds USB redirect devices to domain capabilities, allowing clients
such as virt-install to avoid using redirdev devices when not supported
by the target qemu.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Jim Fehlig 2022-08-30 15:29:14 -06:00
parent ad5c4be09f
commit 4e13cc4adb
55 changed files with 270 additions and 0 deletions

View File

@ -543,6 +543,28 @@ TPM device capabilities are exposed under the ``tpm`` element. For instance:
``backendVersion``
Options for the ``version`` attribute of the ``<tpm><backend/>`` element.
USB redirect device
^^^^^^^^^^^^^^^^^^^
USB redirdev device capabilities are exposed under the ``redirdev`` element. For instance:
::
<domainCapabilities>
...
<devices>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
...
</devices>
</domainCapabilities>
``bus``
Options for the ``bus`` attribute of the ``<redirdev/>`` element.
Features
~~~~~~~~

View File

@ -562,6 +562,18 @@ virDomainCapsDeviceFilesystemFormat(virBuffer *buf,
}
static void
virDomainCapsDeviceRedirdevFormat(virBuffer *buf,
const virDomainCapsDeviceRedirdev *redirdev)
{
FORMAT_PROLOGUE(redirdev);
ENUM_PROCESS(redirdev, bus, virDomainRedirdevBusTypeToString);
FORMAT_EPILOGUE(redirdev);
}
/**
* virDomainCapsFeatureGICFormat:
* @buf: target buffer
@ -675,6 +687,7 @@ virDomainCapsFormat(const virDomainCaps *caps)
virDomainCapsDeviceRNGFormat(&buf, &caps->rng);
virDomainCapsDeviceFilesystemFormat(&buf, &caps->filesystem);
virDomainCapsDeviceTPMFormat(&buf, &caps->tpm);
virDomainCapsDeviceRedirdevFormat(&buf, &caps->redirdev);
virBufferAdjustIndent(&buf, -2);
virBufferAddLit(&buf, "</devices>\n");

View File

@ -130,6 +130,13 @@ struct _virDomainCapsDeviceTPM {
virDomainCapsEnum backendVersion; /* virDomainTPMVersion */
};
STATIC_ASSERT_ENUM(VIR_DOMAIN_REDIRDEV_BUS_LAST);
typedef struct _virDomainCapsDeviceRedirdev virDomainCapsDeviceRedirdev;
struct _virDomainCapsDeviceRedirdev {
virTristateBool supported;
virDomainCapsEnum bus; /* virDomainRedirdevBus */
};
STATIC_ASSERT_ENUM(VIR_DOMAIN_FS_DRIVER_TYPE_LAST);
typedef struct _virDomainCapsDeviceFilesystem virDomainCapsDeviceFilesystem;
struct _virDomainCapsDeviceFilesystem {
@ -226,6 +233,7 @@ struct _virDomainCaps {
virDomainCapsDeviceRNG rng;
virDomainCapsDeviceFilesystem filesystem;
virDomainCapsDeviceTPM tpm;
virDomainCapsDeviceRedirdev redirdev;
/* add new domain devices here */
virDomainCapsFeatureGIC gic;

View File

@ -198,6 +198,9 @@
<optional>
<ref name="tpm"/>
</optional>
<optional>
<ref name="redirdev"/>
</optional>
</element>
</define>
@ -250,6 +253,13 @@
</element>
</define>
<define name="redirdev">
<element name="redirdev">
<ref name="supported"/>
<ref name="enum"/>
</element>
</define>
<define name="features">
<element name="features">
<optional>

View File

@ -6333,6 +6333,21 @@ virQEMUCapsFillDomainDeviceTPMCaps(virQEMUCaps *qemuCaps,
}
void
virQEMUCapsFillDomainDeviceRedirdevCaps(virQEMUCaps *qemuCaps,
virDomainCapsDeviceRedirdev *redirdev)
{
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_USB_REDIR)) {
redirdev->supported = VIR_TRISTATE_BOOL_YES;
redirdev->bus.report = true;
VIR_DOMAIN_CAPS_ENUM_SET(redirdev->bus, VIR_DOMAIN_REDIRDEV_BUS_USB);
} else {
redirdev->supported = VIR_TRISTATE_BOOL_NO;
}
}
/**
* virQEMUCapsSupportsGICVersion:
* @qemuCaps: QEMU capabilities
@ -6468,6 +6483,7 @@ virQEMUCapsFillDomainCaps(virQEMUCaps *qemuCaps,
virDomainCapsDeviceRNG *rng = &domCaps->rng;
virDomainCapsDeviceFilesystem *filesystem = &domCaps->filesystem;
virDomainCapsDeviceTPM *tpm = &domCaps->tpm;
virDomainCapsDeviceRedirdev *redirdev = &domCaps->redirdev;
virDomainCapsMemoryBacking *memoryBacking = &domCaps->memoryBacking;
virQEMUCapsFillDomainFeaturesFromQEMUCaps(qemuCaps, domCaps);
@ -6500,6 +6516,7 @@ virQEMUCapsFillDomainCaps(virQEMUCaps *qemuCaps,
virQEMUCapsFillDomainDeviceRNGCaps(qemuCaps, rng);
virQEMUCapsFillDomainDeviceFSCaps(qemuCaps, filesystem);
virQEMUCapsFillDomainDeviceTPMCaps(qemuCaps, tpm);
virQEMUCapsFillDomainDeviceRedirdevCaps(qemuCaps, redirdev);
virQEMUCapsFillDomainFeatureGICCaps(qemuCaps, domCaps);
virQEMUCapsFillDomainFeatureSEVCaps(qemuCaps, domCaps);
virQEMUCapsFillDomainFeatureS390PVCaps(qemuCaps, domCaps);

View File

@ -830,6 +830,9 @@ void virQEMUCapsFillDomainDeviceFSCaps(virQEMUCaps *qemuCaps,
void virQEMUCapsFillDomainDeviceTPMCaps(virQEMUCaps *qemuCaps,
virDomainCapsDeviceTPM *tpm);
void virQEMUCapsFillDomainDeviceRedirdevCaps(virQEMUCaps *qemuCaps,
virDomainCapsDeviceRedirdev *redirdev);
bool virQEMUCapsGuestIsNative(virArch host,
virArch guest);

View File

@ -216,6 +216,11 @@
<value>1.2</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -231,6 +231,11 @@
<value>1.2</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -165,6 +165,7 @@
</enum>
</filesystem>
<tpm supported='no'/>
<redirdev supported='no'/>
</devices>
<features>
<gic supported='yes'>

View File

@ -163,6 +163,7 @@
</enum>
</filesystem>
<tpm supported='no'/>
<redirdev supported='no'/>
</devices>
<features>
<gic supported='no'/>

View File

@ -136,6 +136,7 @@
<value>1.2</value>
</enum>
</tpm>
<redirdev supported='no'/>
</devices>
<features>
<gic supported='no'/>

View File

@ -238,6 +238,11 @@
</enum>
</filesystem>
<tpm supported='no'/>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -216,6 +216,11 @@
<value>1.2</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -218,6 +218,11 @@
<value>1.2</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -233,6 +233,11 @@
<value>1.2</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -177,6 +177,7 @@
<value>1.2</value>
</enum>
</tpm>
<redirdev supported='no'/>
</devices>
<features>
<gic supported='yes'>

View File

@ -175,6 +175,7 @@
<value>1.2</value>
</enum>
</tpm>
<redirdev supported='no'/>
</devices>
<features>
<gic supported='no'/>

View File

@ -142,6 +142,7 @@
<value>1.2</value>
</enum>
</tpm>
<redirdev supported='no'/>
</devices>
<features>
<gic supported='no'/>

View File

@ -218,6 +218,11 @@
<value>1.2</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -219,6 +219,11 @@
<value>1.2</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -233,6 +233,11 @@
<value>1.2</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -105,6 +105,11 @@
</enum>
</filesystem>
<tpm supported='no'/>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -219,6 +219,11 @@
<value>1.2</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -219,6 +219,11 @@
<value>1.2</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -233,6 +233,11 @@
<value>1.2</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -177,6 +177,7 @@
<value>1.2</value>
</enum>
</tpm>
<redirdev supported='no'/>
</devices>
<features>
<gic supported='yes'>

View File

@ -175,6 +175,7 @@
<value>1.2</value>
</enum>
</tpm>
<redirdev supported='no'/>
</devices>
<features>
<gic supported='no'/>

View File

@ -142,6 +142,7 @@
<value>1.2</value>
</enum>
</tpm>
<redirdev supported='no'/>
</devices>
<features>
<gic supported='no'/>

View File

@ -240,6 +240,11 @@
</enum>
</filesystem>
<tpm supported='no'/>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -219,6 +219,11 @@
<value>1.2</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -221,6 +221,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -235,6 +235,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -179,6 +179,7 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='no'/>
</devices>
<features>
<gic supported='yes'>

View File

@ -177,6 +177,7 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='no'/>
</devices>
<features>
<gic supported='no'/>

View File

@ -241,6 +241,11 @@
</enum>
</filesystem>
<tpm supported='no'/>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -221,6 +221,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -222,6 +222,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -235,6 +235,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -222,6 +222,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -222,6 +222,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -236,6 +236,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -181,6 +181,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='yes'>

View File

@ -179,6 +179,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -141,6 +141,7 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='no'/>
</devices>
<features>
<gic supported='no'/>

View File

@ -222,6 +222,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -223,6 +223,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -237,6 +237,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -180,6 +180,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='yes'>

View File

@ -178,6 +178,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -142,6 +142,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -223,6 +223,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -222,6 +222,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -235,6 +235,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -135,6 +135,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>

View File

@ -222,6 +222,11 @@
<value>2.0</value>
</enum>
</tpm>
<redirdev supported='yes'>
<enum name='bus'>
<value>usb</value>
</enum>
</redirdev>
</devices>
<features>
<gic supported='no'/>