[libvirt] [PATCH v2 10/15] qemu: capabilities: Add support for QMP schema introspection
Pavel Hrdina
phrdina at redhat.com
Wed Nov 9 15:29:56 UTC 2016
On Wed, Nov 02, 2016 at 05:13:42PM +0100, Peter Krempa wrote:
> Allow detecting capabilities according to the qemu QMP schema. This is
> necessary as sometimes the availability of certain options depends on
> the presence of a field in the schema.
>
> This patch adds support for loading the QMP schema when detecting qemu
> capabilities and adds a very simple query language to allow traversing
> the schema and selecting a certain element from it.
>
> The infrastructure in this patch uses a query path to set a specific
> capability flag according to the availability of the given element in
> the schema.
> ---
>
> Notes:
> v2:
> - fixed typos
> - added docs for one of the helper functions and changed param order
> - added hint for query string format docs
>
> src/qemu/qemu_capabilities.c | 191 ++++++++++++++++++++++
> src/qemu/qemu_capabilities.h | 1 +
> tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml | 1 +
> tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml | 1 +
> tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml | 1 +
> tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml | 1 +
> 6 files changed, 196 insertions(+)
>
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index 7a8202a..56c9deb 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -347,6 +347,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
> "machine-iommu",
> "virtio-vga",
> "drive-iotune-max-length",
> + "query-qmp-schema",
> );
>
>
> @@ -1488,6 +1489,7 @@ struct virQEMUCapsStringFlags virQEMUCapsCommands[] = {
> { "rtc-reset-reinjection", QEMU_CAPS_RTC_RESET_REINJECTION },
> { "migrate-incoming", QEMU_CAPS_INCOMING_DEFER },
> { "query-hotpluggable-cpus", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS },
> + { "query-qmp-schema", QEMU_CAPS_QUERY_QMP_SCHEMA }
> };
>
> struct virQEMUCapsStringFlags virQEMUCapsMigration[] = {
> @@ -1692,6 +1694,11 @@ static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsUSBNECXHCI[] = {
> { "p3", QEMU_CAPS_NEC_USB_XHCI_PORTS },
> };
>
> +/* see documentation for virQEMUCapsQMPSchemaGetByPath for the query format */
> +static struct virQEMUCapsStringFlags virQEMUCapsQMPSchemaQueries[] = {
> + { "bogus/path/to/satisfy/compiler", 0 },
> +};
> +
> struct virQEMUCapsObjectTypeProps {
> const char *type;
> struct virQEMUCapsStringFlags *props;
> @@ -3696,6 +3703,187 @@ virQEMUCapsInitArchQMPBasic(virQEMUCapsPtr qemuCaps,
> return ret;
> }
>
> +
> +/**
> + * virQEMUCapsQMPSchemaObjectGetType:
> + * @field: name of the object containing the requested type
> + * @name: name of the requested type
> + * @namefield: name of the object property holding @name
> + *
> + * Helper that selects the type of a QMP schema object or it's variant. Returns
s/schema object or it's variant/schema object member or it's variant member/
> + * the type string on success or NULL on error.
s/the type/the type/
ACK
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20161109/c681f78d/attachment-0001.sig>
More information about the libvir-list
mailing list