From nobody Mon Aug 24 09:06:33 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1786708304; cv=none; d=zohomail.com; s=zohoarc; b=e2miAP9hoIr3cc1samdk6cr+UgwBz3hOCa4D8/rkPDR+nWd8Ig1/mi5rPmXEeACvzx95/OJsg//yHjgniG2EiZ2wbkT1jtclqkdb8RnL0+Av/UxTGmyzBAaLAJm5XehjORUMCfy7IDZL4f7FP6Xn42n4PFK3+y9x+84QpwPRiX4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786708304; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=oAHIPc6y+sJ6L7xeCvotXn2EIoqqaDE83r5e/aLvZPA=; b=ACbvVy4RnQz5XaLXVs+B8zEnobJEBz8xRCexcy6j7+hBcsmbJ03NUNQTdkfUrLBlNX0AkbQQFkbL+JD/FPnOLm7apeHK1gIWSY9G+e1lN/SEmr4zyDWk4XoGzr1w7X8bsWVFoXnq9JK7ReC6KCfY9Xsn4ht4nEHpmK1JGauhcss= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 1786708304218988.5403854697756; Fri, 14 Aug 2026 04:51:44 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 78C1741957; Fri, 14 Aug 2026 07:51:42 -0400 (EDT) Received: from [172.19.199.13] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id 9EBDC41AE7 for ; Fri, 14 Aug 2026 07:49:28 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 986AB41847; Fri, 14 Aug 2026 07:49:12 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 62CC03F882 for ; Fri, 14 Aug 2026 07:49:11 -0400 (EDT) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-167-uHHaInuyPLWlgLeou7PFzw-1; Fri, 14 Aug 2026 07:49:09 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id D66AB1800344 for ; Fri, 14 Aug 2026 11:49:08 +0000 (UTC) Received: from moe (unknown [10.43.3.236]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 420011977033 for ; Fri, 14 Aug 2026 11:49:08 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1786708151; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=oAHIPc6y+sJ6L7xeCvotXn2EIoqqaDE83r5e/aLvZPA=; b=U84ttDEOdTrUvO1GHHPqv9MK9aFuCmiNoIMeJ+DptI7P9t0EVWBnZmMXzy8ZT33M3gcUGR Ies6Q/ZLO8iNWxN0c66+ZuaT6woZGNJfXRMFubpYzH0cmuDS0BzI55ojMeagIGvLyIpReB 3MYmRxxhQiH0AkIpvapgprMWTptT9Ms= X-MC-Unique: uHHaInuyPLWlgLeou7PFzw-1 X-Mimecast-MFC-AGG-ID: uHHaInuyPLWlgLeou7PFzw_1786708148 To: devel@lists.libvirt.org Subject: [PATCH v2 1/6] Add guest device info to virDomainGetGuestInfo Date: Fri, 14 Aug 2026 13:47:47 +0200 Message-ID: <4e1b61242a5deada170159598c8bc6a24a2cb6c4.1786707940.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: JnDCfHteY2eMpr7faYQNaF68iKz14BuYxZWovTCBEvI_1786708148 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: ZB2D5D6DTMVBW5LS7WZDDDMJBD6OHGIM X-Message-ID-Hash: ZB2D5D6DTMVBW5LS7WZDDDMJBD6OHGIM X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Michal Privoznik via Devel Reply-To: Michal Privoznik X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1786708306201158500 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Michal Privoznik QEMU guest agent has 'guest-get-devices` command, which returns information on guest devices (driver name, version, release date, and so on). In this commit the public API part is introduced. Signed-off-by: Michal Privoznik Reviewed-by: Peter Krempa --- include/libvirt/libvirt-domain.h | 78 ++++++++++++++++++++++++++++++++ src/libvirt-domain.c | 5 ++ 2 files changed, 83 insertions(+) diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-dom= ain.h index f4dfe9fb1a..874fc4b455 100644 --- a/include/libvirt/libvirt-domain.h +++ b/include/libvirt/libvirt-domain.h @@ -8867,6 +8867,83 @@ int virDomainSetLaunchSecurityState(virDomainPtr dom= ain, */ # define VIR_DOMAIN_GUEST_INFO_LOAD_15M "load.15m" =20 +/** + * VIR_DOMAIN_GUEST_INFO_DEVICE_COUNT: + * + * The number of guest devices that detailed information is fetched for as + * unsigned int. + * + * Since: 12.7.0 + */ +# define VIR_DOMAIN_GUEST_INFO_DEVICE_COUNT "device.count" + +/** + * VIR_DOMAIN_GUEST_INFO_DEVICE_PREFIX: + * + * The parameter name prefix to access each device entry. Concatenate the + * prefix, the entry number formatted as an unsigned integer and one of the + * device suffix parameters to form a complete parameter name. + * + * Since: 12.7.0 + */ +# define VIR_DOMAIN_GUEST_INFO_DEVICE_PREFIX "device." + +/** + * VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_DRIVER_NAME: + * + * Name of the device driver (e.g. ``VirtIO Balloon Driver``) as a string. + * + * Since: 12.7.0 + */ +# define VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_DRIVER_NAME ".driverName" + +/** + * VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_DRIVER_DATE: + * + * Driver release date in seconds since the epoch (e.g. 1736726400000) as = long long. + * + * Since: 12.7.0 + */ +# define VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_DRIVER_DATE ".driverDate" + +/** + * VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_DRIVER_VERSION: + * + * Driver version (e.g. ``100.100.104.27100``) as a string. + * + * Since: 12.7.0 + */ +# define VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_DRIVER_VERSION ".driverVersio= n" + +/** + * VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_ID_TYPE: + * + * Device identification (e.g. ``pci``) as a string. + * + * Since: 12.7.0 + */ +# define VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_ID_TYPE ".idType" + +/** + * VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_PCI_VENDOR: + * + * PCI device (a device with VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_ID_TYPE e= qual + * to ``pci``) vendor id (e.g. 6900) as a unsigned int. + * + * Since: 12.7.0 + */ +# define VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_PCI_VENDOR ".pciVendor" + +/** + * VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_PCI_DEVICE: + * + * PCI device (a device with VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_ID_TYPE e= qual + * to ``pci``) device id (e.g. 4165) as a unsigned int. + * + * Since: 12.7.0 + */ +# define VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_PCI_DEVICE ".pciDevice" + /** * virDomainGuestInfoTypes: * @@ -8881,6 +8958,7 @@ typedef enum { VIR_DOMAIN_GUEST_INFO_DISKS =3D (1 << 5), /* return disks information = (Since: 7.0.0) */ VIR_DOMAIN_GUEST_INFO_INTERFACES =3D (1 << 6), /* return interfaces in= formation (Since: 7.10.0) */ VIR_DOMAIN_GUEST_INFO_LOAD =3D (1 << 7), /* return load averages (Sinc= e: 11.2.0) */ + VIR_DOMAIN_GUEST_INFO_DEVICES =3D (1 << 8), /* return devices informat= ion (Since: 12.7.0) */ } virDomainGuestInfoTypes; =20 int virDomainGetGuestInfo(virDomainPtr domain, diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c index 60d84b24a1..acd9ffc44b 100644 --- a/src/libvirt-domain.c +++ b/src/libvirt-domain.c @@ -13260,6 +13260,11 @@ virDomainSetVcpu(virDomainPtr domain, * The VIR_DOMAIN_GUEST_INFO_LOAD_* constants define the known typed para= meter * keys. * + * VIR_DOMAIN_GUEST_INFO_DEVICES: + * Returns information on guest devices. + * The VIR_DOMAIN_GUEST_INFO_DEVICE_* constants define the known typed + * parameter keys. + * * Using 0 for @types returns all information groups supported by the given * hypervisor. * --=20 2.54.0 From nobody Mon Aug 24 09:06:33 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1786708465; cv=none; d=zohomail.com; s=zohoarc; b=H3oDKvGgs3hnLxd5zngoQHgUhItD7P0K/SeGyH84aeosRqj/SSkg8tigtbtX5Nil155yly4/t2IhT0vwLGC+/Z7Zl9GJZ4anj3JwBS7w/P5EZxr35p+eEbVjGt0jaluJI/Iv7pIvspjvWTFCT7QLfiwRyvq+bnvplyp3yKDU6nk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786708465; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=touFLm07ee6cAIp+mAZiDm8bn+QiYDjQ0uXAS7OmGQw=; b=MXni+Eq2+57h+Kz65RSAPX3gT41u+d5RzSe2bVECu+W9Nd2gs0rVN/XYvrXzekTz8UU3M6E877mnQYdXYZh7dQV9NLf4tM173umiv/T7x3aDqCtZA9JfFRdcYonzJ7pX0jfVFfu22bldlYXFARc+Vxc3NUw7Y2IJb2z3VlenXKc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 1786708465653251.09245519836622; Fri, 14 Aug 2026 04:54:25 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 596803F83A; Fri, 14 Aug 2026 07:54:24 -0400 (EDT) Received: from [172.19.199.13] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id 93EF741BD8 for ; Fri, 14 Aug 2026 07:49:38 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id EC8FD41846; Fri, 14 Aug 2026 07:49:13 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 8C3D8417F9 for ; Fri, 14 Aug 2026 07:49:12 -0400 (EDT) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-664-5rl_QkoRNHqCwAj30yDAtg-1; Fri, 14 Aug 2026 07:49:10 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id D8D5E18005B2 for ; Fri, 14 Aug 2026 11:49:09 +0000 (UTC) Received: from moe (unknown [10.43.3.236]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 446AD1977033 for ; Fri, 14 Aug 2026 11:49:09 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1786708152; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=touFLm07ee6cAIp+mAZiDm8bn+QiYDjQ0uXAS7OmGQw=; b=R4MbTxwBWvYkMEngz6Q8Gf1yBb9T3J5VozsuKufqKUxvkbXP+gR67ATKSsDYGqwfX41wwI 5ai/kO+vvt29/b+Dx9v7JYcANkFYyUYPftiY/a/J8Qxg66o5eIympFZVoiAqp7tD9dAaXs dbAsqTmxmGXUPhCIV38LnU9xgqu+ucY= X-MC-Unique: 5rl_QkoRNHqCwAj30yDAtg-1 X-Mimecast-MFC-AGG-ID: 5rl_QkoRNHqCwAj30yDAtg_1786708150 To: devel@lists.libvirt.org Subject: [PATCH v2 2/6] qemu_agent: Introduce guest-get-info Date: Fri, 14 Aug 2026 13:47:48 +0200 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 4_He5tCeD-MiHnZ0UldmxJWCQE0UCfuI2KxsLm0_5us_1786708150 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 5NDHCW5NUZJQE6ZV6YOAIFFRUNA5O45H X-Message-ID-Hash: 5NDHCW5NUZJQE6ZV6YOAIFFRUNA5O45H X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Michal Privoznik via Devel Reply-To: Michal Privoznik X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1786708467099158500 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Michal Privoznik QEMU agent has 'guest-get-info` command. Even though it's currently implemented only for Windows, it shows some interesting information from inside the guest, like device drivers, their versions, and so on. Looking at the command definition in qga/qapi-schema.json the only non-optional field in returned data is 'driver-name'. The rest is optional. Although looking at the current implementation either all fields are set or device is ignored completely. Nevertheless, our code should follow QMP schema. New qemuAgentGuestDeviceInfo structure is introduced among with qemuAgentGetGuestDeviceInfo() function which parses reply from agent and fills the structure. Optional fields are either set to NULL or -1, if missing. Signed-off-by: Michal Privoznik Reviewed-by: Peter Krempa --- src/hypervisor/qemu_agent.c | 119 ++++++++++++++++++++++++++++++++++++ src/hypervisor/qemu_agent.h | 21 +++++++ src/libvirt_private.syms | 2 + 3 files changed, 142 insertions(+) diff --git a/src/hypervisor/qemu_agent.c b/src/hypervisor/qemu_agent.c index 418386317d..fbfaafc1bb 100644 --- a/src/hypervisor/qemu_agent.c +++ b/src/hypervisor/qemu_agent.c @@ -2843,3 +2843,122 @@ qemuAgentInterfaceFormatParams(virDomainInterfacePt= r *ifaces, } } } + + +void +qemuAgentGuestDeviceInfoFree(qemuAgentGuestDeviceInfo *info) +{ + if (!info) + return; + + g_free(info->driverName); + g_free(info->driverVersion); + g_free(info->pci); + g_free(info); +} + + +int +qemuAgentGetGuestDeviceInfo(qemuAgent *agent, + qemuAgentGuestDeviceInfo ***info, + bool report_unsupported) +{ + g_autoptr(virJSONValue) cmd =3D NULL; + g_autoptr(virJSONValue) reply =3D NULL; + virJSONValue *data =3D NULL; + size_t ndata; + size_t i; + int rc; + + if (!(cmd =3D qemuAgentMakeCommand("guest-get-devices", NULL))) + return -1; + + if ((rc =3D qemuAgentCommandFull(agent, cmd, &reply, agent->timeout, + report_unsupported)) < 0) + return rc; + + if (!(data =3D virJSONValueObjectGetArray(reply, "return"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("qemu agent didn't return an array of devices")); + return -1; + } + + ndata =3D virJSONValueArraySize(data); + + *info =3D g_new0(qemuAgentGuestDeviceInfo *, ndata); + + for (i =3D 0; i < ndata; i++) { + g_autoptr(qemuAgentGuestDeviceInfo) oneInfo =3D NULL; + virJSONValue *entry =3D virJSONValueArrayGet(data, i); + virJSONValue *dDate =3D NULL; + virJSONValue *idObj =3D NULL; + + if (!entry) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("array element missing in guest-get-devices r= eturn value")); + goto error; + } + + oneInfo =3D g_new0(qemuAgentGuestDeviceInfo, 1); + + oneInfo->driverName =3D g_strdup(virJSONValueObjectGetString(entry= , "driver-name")); + if (!oneInfo->driverName) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("'driver-name' missing in reply of guest-get-= devices")); + goto error; + } + + if ((dDate =3D virJSONValueObjectGet(entry, "driver-date"))) { + if (virJSONValueGetNumberLong(dDate, &oneInfo->driverDate) < 0= ) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("malformed 'driver-date' in reply of gues= t-get-devices")); + goto error; + } + } else { + oneInfo->driverDate =3D -1; + } + + oneInfo->driverVersion =3D g_strdup(virJSONValueObjectGetString(en= try, "driver-version")); + + if ((idObj =3D virJSONValueObjectGet(entry, "id"))) { + const char *type =3D NULL; + + if (!(type =3D virJSONValueObjectGetString(idObj, "type"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("missing 'type' in reply of guest-get-dev= ices")); + goto error; + } + + if (STREQ("pci", type)) { + g_autofree qemuAgentGuestDeviceInfoPCI *pci =3D NULL; + + pci =3D g_new0(qemuAgentGuestDeviceInfoPCI, 1); + + if (virJSONValueObjectGetNumberUint(idObj, "vendor-id", &p= ci->vendorID) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("missing or malformed 'vendor-id' in = reply of guest-get-devices")); + goto error; + } + + if (virJSONValueObjectGetNumberUint(idObj, "device-id", &p= ci->deviceID) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("missing or malformed 'device-id' in = reply of guest-get-devices")); + goto error; + } + + oneInfo->pci =3D g_steal_pointer(&pci); + } + } + + (*info)[i] =3D g_steal_pointer(&oneInfo); + } + + return ndata; + + error: + for (i =3D 0; i < ndata; i++) { + qemuAgentGuestDeviceInfoFree((*info)[i]); + } + g_clear_pointer(info, g_free); + return -1; +} diff --git a/src/hypervisor/qemu_agent.h b/src/hypervisor/qemu_agent.h index def6f983d4..35d2057bac 100644 --- a/src/hypervisor/qemu_agent.h +++ b/src/hypervisor/qemu_agent.h @@ -218,3 +218,24 @@ void qemuAgentInterfaceFormatParams(virDomainInterfacePtr *ifaces, int nifaces, virTypedParamList *list); + +typedef struct _qemuAgentGuestDeviceInfoPCI qemuAgentGuestDeviceInfoPCI; +struct _qemuAgentGuestDeviceInfoPCI { + unsigned int vendorID; + unsigned int deviceID; +}; + +typedef struct _qemuAgentGuestDeviceInfo qemuAgentGuestDeviceInfo; +struct _qemuAgentGuestDeviceInfo { + char *driverName; + long long driverDate; + char *driverVersion; + qemuAgentGuestDeviceInfoPCI *pci; +}; + +void qemuAgentGuestDeviceInfoFree(qemuAgentGuestDeviceInfo *info); +G_DEFINE_AUTOPTR_CLEANUP_FUNC(qemuAgentGuestDeviceInfo, qemuAgentGuestDevi= ceInfoFree); + +int qemuAgentGetGuestDeviceInfo(qemuAgent *agent, + qemuAgentGuestDeviceInfo ***info, + bool report_unsupported); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 02bd505749..0bd8c6f781 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1726,6 +1726,7 @@ qemuAgentFSThaw; qemuAgentFSTrim; qemuAgentGetDisks; qemuAgentGetFSInfo; +qemuAgentGetGuestDeviceInfo; qemuAgentGetHostname; qemuAgentGetInterfaces; qemuAgentGetLoadAvg; @@ -1734,6 +1735,7 @@ qemuAgentGetTime; qemuAgentGetTimezone; qemuAgentGetUsers; qemuAgentGetVCPUs; +qemuAgentGuestDeviceInfoFree; qemuAgentInterfaceFormatParams; qemuAgentNotifyClose; qemuAgentNotifyEvent; --=20 2.54.0 From nobody Mon Aug 24 09:06:33 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1786708386; cv=none; d=zohomail.com; s=zohoarc; b=Wj+/A/NjIPUiv2XFgZD+9vXpEUShHkItVMYga3dvvl0AWgyl821oNrkWbWufMulbzYDHXGfyi20GtlEC67rwvBEAAopNrmSILOVXegzD4RTwaKE6ncMq91fs/JtdLtPUyPtnyd+3gkmBW0PKVCJ9ZyZe7/uqesQrK4hhqbCVbsQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786708386; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=C+iyxSvSZEKtI7Rl8ZcWi7NKdwBdnFz6x5m0Ha+Lad0=; b=EulqBUY6zraYByq29Dp7tZgshfHbOzwun+7ZIuRlQ9NSt9CMt8dt1dgxXfFFZcM2S28nBVdYlA3iyjPLYmDfANZV7W8+d4/e+Gwv6HJrwT5OBkESXtZ+ES27i+rG4eu+tmzhkeu9X0/9+QH/EEyNu3cnAP14a3xO3hABlfll3y4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 1786708386905881.4217453102088; Fri, 14 Aug 2026 04:53:06 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id A223F419D9; Fri, 14 Aug 2026 07:53:05 -0400 (EDT) Received: from [172.19.199.13] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id 7E25A41B70 for ; Fri, 14 Aug 2026 07:49:34 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id E43A741812; Fri, 14 Aug 2026 07:49:13 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 312F741846 for ; Fri, 14 Aug 2026 07:49:13 -0400 (EDT) Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-290-9eyIN3AOPtaXfyOasYY3cw-1; Fri, 14 Aug 2026 07:49:11 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id D39A9195609D for ; Fri, 14 Aug 2026 11:49:10 +0000 (UTC) Received: from moe (unknown [10.43.3.236]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 3F4F21977033 for ; Fri, 14 Aug 2026 11:49:10 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=0.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,RCVD_IN_SBL_CSS,SPF_HELO_PASS autolearn=no autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1786708152; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=C+iyxSvSZEKtI7Rl8ZcWi7NKdwBdnFz6x5m0Ha+Lad0=; b=TWh9tOF1DkErnMKG9nGrrFun5f/c7wgT+WHgkSzgK/PU4939PTIWfnqjlC9xM8hVwDuhn2 a/4SBnY9tFmT9mQQYeU53/C0pLAjTAzdRML2mafpFhLoqtMMitkKjeif2ztL5nMj3rLS76 0DDGfGNElxR0hZNvb20jNDkXPF8q5VY= X-MC-Unique: 9eyIN3AOPtaXfyOasYY3cw-1 X-Mimecast-MFC-AGG-ID: 9eyIN3AOPtaXfyOasYY3cw_1786708150 To: devel@lists.libvirt.org Subject: [PATCH v2 3/6] qemuagenttest: Introduce GetGuestDeviceInfo test case Date: Fri, 14 Aug 2026 13:47:49 +0200 Message-ID: <09b67549392c30c622881e73bf20914fe7900c80.1786707940.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: nyrEI92xT7LIgipKP9X1lODE3HZdpWCDCc16AI53-qw_1786708150 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: NTSLVDZ57S3JVR22INU2LTMPOPFLY45E X-Message-ID-Hash: NTSLVDZ57S3JVR22INU2LTMPOPFLY45E X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Michal Privoznik via Devel Reply-To: Michal Privoznik X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1786708388621158500 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Michal Privoznik Introduce a test case for newly introduced qemuAgentGetGuestDeviceInfo(). The expected data started as a genuine reply from a qemu-ga running inside a Windows VM. But then was modified to cover more cases (like an optional key missing). Signed-off-by: Michal Privoznik Reviewed-by: Peter Krempa --- tests/qemuagenttest.c | 123 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) diff --git a/tests/qemuagenttest.c b/tests/qemuagenttest.c index 74cd317e74..7c726a6b85 100644 --- a/tests/qemuagenttest.c +++ b/tests/qemuagenttest.c @@ -1394,6 +1394,128 @@ testQemuAgentGetLoadAvg(const void *data) } =20 =20 +static const char *testQemuAgentGetGuestDeviceInfoResponse =3D +"{" +" \"return\": [" +" {" +" \"driver-date\": 1736726400000000000," +" \"driver-name\": \"Red Hat VirtIO Ethernet Adapter\"," +" \"driver-version\": \"100.100.104.27100\"," +" \"id\": {" +" \"device-id\": 4161," +" \"vendor-id\": 6900," +" \"type\": \"pci\"" +" }" +" }," +" {" +" \"driver-name\": \"VirtIO Serial Driver\"," +" \"driver-version\": \"100.100.104.27100\"," +" \"id\": {" +" \"device-id\": 4163," +" \"vendor-id\": 6900," +" \"type\": \"pci\"" +" }" +" }," +" {" +" \"driver-date\": 1736726400000000000," +" \"driver-name\": \"VirtIO Balloon Driver\"," +" \"id\": {" +" \"device-id\": 4165," +" \"vendor-id\": 6900," +" \"type\": \"pci\"" +" }" +" }," +" {" +" \"driver-date\": 1736726400000000000," +" \"driver-name\": \"Red Hat VirtIO GPU DOD controller\"," +" \"driver-version\": \"100.100.104.27100\"" +" }" +" ]" +"}"; + + +static int +testQemuAgentGetGuestDeviceInfo(const void *data) +{ + virDomainXMLOption *xmlopt =3D (virDomainXMLOption *)data; + g_autoptr(qemuMonitorTest) test =3D qemuMonitorTestNewAgent(xmlopt); + qemuAgentGuestDeviceInfo **devices =3D NULL; + int ret =3D -1; + size_t i; + int ndevices; + + if (!test) + return -1; + + if (qemuMonitorTestAddAgentSyncResponse(test) < 0) + return -1; + + if (qemuMonitorTestAddItem(test, "guest-get-devices", + testQemuAgentGetGuestDeviceInfoResponse) < = 0) + return -1; + + ndevices =3D qemuAgentGetGuestDeviceInfo(qemuMonitorTestGetAgent(test), + &devices, true); + + if (ndevices < 0) + return -1; + + if (ndevices !=3D 4) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "unexpected number of guest devices returned (%d), = expected 4", + ndevices); + goto cleanup; + } + + if (STRNEQ(devices[0]->driverName, "Red Hat VirtIO Ethernet Adapter") = || + STRNEQ(devices[0]->driverVersion, "100.100.104.27100") || + devices[0]->driverDate !=3D 1736726400000000000LL || + devices[0]->pci->vendorID !=3D 6900 || + devices[0]->pci->deviceID !=3D 4161) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + "unexpected device info returned for device #0"); + goto cleanup; + } + + if (STRNEQ(devices[1]->driverName, "VirtIO Serial Driver") || + STRNEQ(devices[1]->driverVersion, "100.100.104.27100") || + devices[1]->driverDate !=3D -1LL || + devices[1]->pci->vendorID !=3D 6900 || + devices[1]->pci->deviceID !=3D 4163) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + "unexpected device info returned for device #1"); + goto cleanup; + } + + if (STRNEQ(devices[2]->driverName, "VirtIO Balloon Driver") || + devices[2]->driverVersion || + devices[2]->driverDate !=3D 1736726400000000000LL || + devices[2]->pci->vendorID !=3D 6900 || + devices[2]->pci->deviceID !=3D 4165) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + "unexpected device info returned for device #2"); + goto cleanup; + } + + if (STRNEQ(devices[3]->driverName, "Red Hat VirtIO GPU DOD controller"= ) || + STRNEQ(devices[3]->driverVersion, "100.100.104.27100") || + devices[3]->driverDate !=3D 1736726400000000000LL || + devices[3]->pci) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + "unexpected device info returned for device #3"); + goto cleanup; + } + + ret =3D 0; + cleanup: + for (i =3D 0; i < ndevices; i++) { + qemuAgentGuestDeviceInfoFree(devices[i]); + } + g_free(devices); + return ret; +} + + static int mymain(void) { @@ -1431,6 +1553,7 @@ mymain(void) DO_TEST(SSHKeys); DO_TEST(GetDisks); DO_TEST(GetLoadAvg); + DO_TEST(GetGuestDeviceInfo); =20 DO_TEST(Timeout); /* Timeout should always be called last */ =20 --=20 2.54.0 From nobody Mon Aug 24 09:06:33 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1786708539; cv=none; d=zohomail.com; s=zohoarc; b=K7GuZX6IwQs2FlUub5wdNhweFBnkk4xoo39ZfLH3qx0oG55FjugJZLpQFfFVERYKoH9YRKONID+NsQfSdfa9nrkBkRH5lgLv1QQMyLEaBIbqAOSZGefPgzDPzIANT871hFXDJbzsU/HEsW/cwnLCcmgIoBmKv1YnXuzU1XdLiSM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786708539; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=ezVuVedXUFx537b/kl9U4Ji558yTqvallQEAO6qz458=; b=MgJ8+rf4dPYzAJSaRtsgjGElO3iasQW5/KanhhRHWYlzPcGxSiBwxfap1luIekbJNgfcKTnZCKTAjdpIDG84/Y64jfPZCAGAzRLaMlxshXFTWglPmWiTILxt6zEA/1NebcOkpS/0QgnDxInZuDqSfhYxAt8o/KjIzSVXp3PNDzM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 17867085394171008.6742151282303; Fri, 14 Aug 2026 04:55:39 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 71025419C3; Fri, 14 Aug 2026 07:55:37 -0400 (EDT) Received: from [172.19.199.13] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id 67B7241C32 for ; Fri, 14 Aug 2026 07:49:45 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 24B1741855; Fri, 14 Aug 2026 07:49:19 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id BA20C41855 for ; Fri, 14 Aug 2026 07:49:14 -0400 (EDT) Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-650-7YheULXiNYCoNggkQh4Yxg-1; Fri, 14 Aug 2026 07:49:12 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E7CE2180034A for ; Fri, 14 Aug 2026 11:49:11 +0000 (UTC) Received: from moe (unknown [10.43.3.236]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 5313B1977033 for ; Fri, 14 Aug 2026 11:49:11 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1786708154; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ezVuVedXUFx537b/kl9U4Ji558yTqvallQEAO6qz458=; b=HYJC00yfAoOX8yexLM0Q2iqeAzxgK/DeREl7H1XBbGtNcPioHVKCsQLENFDp7r7OWsqYD4 34xPz9CoobysQULh0gZGEEqkROocMdyVRPjvoFtdHoWevEXGwZnRuWn1Yay4jmmcIFwNRX Vk0/2z4ZeHhmnn6o5jFol1Y1hN1JsVw= X-MC-Unique: 7YheULXiNYCoNggkQh4Yxg-1 X-Mimecast-MFC-AGG-ID: 7YheULXiNYCoNggkQh4Yxg_1786708152 To: devel@lists.libvirt.org Subject: [PATCH v2 4/6] qemu: Implement device info for virDomainGetGuestInfo() API Date: Fri, 14 Aug 2026 13:47:50 +0200 Message-ID: <23bf41bdfa13a3d53e21e5b0e390401f9b2013e9.1786707940.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: pBdk3WQ0nOh9OWaB9iijbOFx-mixV8T6vm2auClULAE_1786708152 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 6VKKZXIGAGG6X2F27BDUA77AI3VFFX5G X-Message-ID-Hash: 6VKKZXIGAGG6X2F27BDUA77AI3VFFX5G X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Michal Privoznik via Devel Reply-To: Michal Privoznik X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1786708541409158500 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Michal Privoznik Use freshly introduced qemuAgentGetGuestDeviceInfo() to implement support of VIR_DOMAIN_GUEST_INFO_DEVICES type of virDomainGetGuestInfo() API in the QEMU driver. Resolves: https://redhat.atlassian.net/browse/RHEL-235731 Signed-off-by: Michal Privoznik Reviewed-by: Peter Krempa --- src/hypervisor/qemu_agent.c | 36 ++++++++++++++++++++++++++++++++++++ src/hypervisor/qemu_agent.h | 5 +++++ src/libvirt_private.syms | 1 + src/qemu/qemu_driver.c | 21 ++++++++++++++++++++- 4 files changed, 62 insertions(+), 1 deletion(-) diff --git a/src/hypervisor/qemu_agent.c b/src/hypervisor/qemu_agent.c index fbfaafc1bb..ae20ee2b22 100644 --- a/src/hypervisor/qemu_agent.c +++ b/src/hypervisor/qemu_agent.c @@ -2962,3 +2962,39 @@ qemuAgentGetGuestDeviceInfo(qemuAgent *agent, g_clear_pointer(info, g_free); return -1; } + + +void +qemuAgentGuestDeviceInfoFormatParams(qemuAgentGuestDeviceInfo **devices, + size_t ndevices, + virTypedParamList *list) +{ + size_t i; + + virTypedParamListAddUInt(list, ndevices, VIR_DOMAIN_GUEST_INFO_DEVICE_= COUNT); + + for (i =3D 0; i < ndevices; i++) { + virTypedParamListAddString(list, devices[i]->driverName, + VIR_DOMAIN_GUEST_INFO_DEVICE_PREFIX "%z= u" VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_DRIVER_NAME, i); + + if (devices[i]->driverDate !=3D -1) { + /* Guest agent reports this in nanoseconds, our API in seconds= . */ + virTypedParamListAddLLong(list, devices[i]->driverDate / 10000= 00, + VIR_DOMAIN_GUEST_INFO_DEVICE_PREFIX = "%zu" VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_DRIVER_DATE, i); + } + + if (devices[i]->driverVersion) { + virTypedParamListAddString(list, devices[i]->driverVersion, + VIR_DOMAIN_GUEST_INFO_DEVICE_PREFIX= "%zu" VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_DRIVER_VERSION, i); + } + + if (devices[i]->pci) { + virTypedParamListAddString(list, "pci", + VIR_DOMAIN_GUEST_INFO_DEVICE_PREFIX= "%zu" VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_ID_TYPE, i); + virTypedParamListAddUInt(list, devices[i]->pci->vendorID, + VIR_DOMAIN_GUEST_INFO_DEVICE_PREFIX "= %zu" VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_PCI_VENDOR, i); + virTypedParamListAddUInt(list, devices[i]->pci->deviceID, + VIR_DOMAIN_GUEST_INFO_DEVICE_PREFIX "= %zu" VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_PCI_DEVICE, i); + } + } +} diff --git a/src/hypervisor/qemu_agent.h b/src/hypervisor/qemu_agent.h index 35d2057bac..df1a7cce63 100644 --- a/src/hypervisor/qemu_agent.h +++ b/src/hypervisor/qemu_agent.h @@ -239,3 +239,8 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(qemuAgentGuestDeviceInfo,= qemuAgentGuestDeviceInfo int qemuAgentGetGuestDeviceInfo(qemuAgent *agent, qemuAgentGuestDeviceInfo ***info, bool report_unsupported); + +void +qemuAgentGuestDeviceInfoFormatParams(qemuAgentGuestDeviceInfo **devices, + size_t ndevices, + virTypedParamList *list); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 0bd8c6f781..6c6cc7b4ff 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1735,6 +1735,7 @@ qemuAgentGetTime; qemuAgentGetTimezone; qemuAgentGetUsers; qemuAgentGetVCPUs; +qemuAgentGuestDeviceInfoFormatParams; qemuAgentGuestDeviceInfoFree; qemuAgentInterfaceFormatParams; qemuAgentNotifyClose; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 97d17952b7..a928e4a839 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -19991,7 +19991,8 @@ static const unsigned int qemuDomainGetGuestInfoSup= portedTypes =3D VIR_DOMAIN_GUEST_INFO_FILESYSTEM | VIR_DOMAIN_GUEST_INFO_DISKS | VIR_DOMAIN_GUEST_INFO_INTERFACES | - VIR_DOMAIN_GUEST_INFO_LOAD; + VIR_DOMAIN_GUEST_INFO_LOAD | + VIR_DOMAIN_GUEST_INFO_DEVICES; =20 static int qemuDomainGetGuestInfoCheckSupport(unsigned int types, @@ -20039,6 +20040,8 @@ qemuDomainGetGuestInfo(virDomainPtr dom, double load5m =3D 0; double load15m =3D 0; bool format_load =3D false; + qemuAgentGuestDeviceInfo **devices =3D NULL; + size_t ndevices =3D 0; size_t i; g_autoptr(virTypedParamList) list =3D virTypedParamListNew(); =20 @@ -20118,6 +20121,14 @@ qemuDomainGetGuestInfo(virDomainPtr dom, format_load =3D true; } =20 + if (supportedTypes & VIR_DOMAIN_GUEST_INFO_DEVICES) { + rc =3D qemuAgentGetGuestDeviceInfo(agent, &devices, report_unsuppo= rted); + if (rc =3D=3D -1) + goto exitagent; + if (rc >=3D 0) + ndevices =3D rc; + } + qemuDomainObjExitAgent(vm, agent); virDomainObjEndAgentJob(vm); =20 @@ -20150,6 +20161,8 @@ qemuDomainGetGuestInfo(virDomainPtr dom, virTypedParamListAddDouble(list, load15m, VIR_DOMAIN_GUEST_INFO_LO= AD_15M); } =20 + qemuAgentGuestDeviceInfoFormatParams(devices, ndevices, list); + if (virTypedParamListSteal(list, params, nparams) < 0) goto cleanup; =20 @@ -20167,6 +20180,12 @@ qemuDomainGetGuestInfo(virDomainPtr dom, virDomainInterfaceFree(ifaces[i]); } g_free(ifaces); + if (devices && ndevices > 0) { + for (i =3D 0; i < ndevices; i++) { + qemuAgentGuestDeviceInfoFree(devices[i]); + } + g_free(devices); + } =20 virDomainObjEndAPI(&vm); return ret; --=20 2.54.0 From nobody Mon Aug 24 09:06:33 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1786708606; cv=none; d=zohomail.com; s=zohoarc; b=hGweruInS3YUaTw3AEGet8eUiUD8iqSQtA454NmC/eMv2RMo3qd+uP6fEzBx7oGvV8hDR+Q4GewR8ZSSOnPq815MpxH4Gcpya6mhTmyLM/TqbPMNjevh+YqB4b9XyO/0yiOsCaJ5sthls/fSR1kNMcbvSpgepwrS+I6wz0YwFPA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786708606; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=IXuuPEFw3iZNssCG14AM8iwZcUX9k4yisi8oFd++xn8=; b=RE5pO2HW/lU6B8kr3kLTxGXMbc7WyZoT+A3X718j3PpHYhHSELymj8ZkZCCJtNi5u4VtGOGvFTD0mEfS50cRJyRRTa9NSa5LO/PHVbhBn+LrF9RpF8CTLEw9g27LYJCYkCkMHUhL8Rir5kk9Y/BIKKr6BP7BsYDchhKjKOXWh3w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 178670860676769.05189277019451; Fri, 14 Aug 2026 04:56:46 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 6A5A941A2F; Fri, 14 Aug 2026 07:56:45 -0400 (EDT) Received: from [172.19.199.13] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id 83AC041CB9 for ; Fri, 14 Aug 2026 07:49:51 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id BE2C3418E2; Fri, 14 Aug 2026 07:49:23 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 68C52418EB for ; Fri, 14 Aug 2026 07:49:15 -0400 (EDT) Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-676-UGxhzLKLMpap7lynerSkSQ-1; Fri, 14 Aug 2026 07:49:13 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E24DD19560AA for ; Fri, 14 Aug 2026 11:49:12 +0000 (UTC) Received: from moe (unknown [10.43.3.236]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 4E1171977033 for ; Fri, 14 Aug 2026 11:49:12 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=0.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,RCVD_IN_SBL_CSS,SPF_HELO_PASS autolearn=no autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1786708155; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=IXuuPEFw3iZNssCG14AM8iwZcUX9k4yisi8oFd++xn8=; b=h+G2nk0rTRBQu89W3UaK6wX5yNFKQEY5tSm15PEin6P0DcOMJe8kOK6LoHainnqKrcI1CP y3t3AcWV1ksOjb6HyIZTZns2dL5I4JwSYjJ4zTltHD+EL7kgnG1bzhtjfshZROnHI1PIfz y7J2C41ZNbH+KkfGDkH2SaE3vdyMr4I= X-MC-Unique: UGxhzLKLMpap7lynerSkSQ-1 X-Mimecast-MFC-AGG-ID: UGxhzLKLMpap7lynerSkSQ_1786708153 To: devel@lists.libvirt.org Subject: [PATCH v2 5/6] bhyve: Implement device info for virDomainGetGuestInfo() API Date: Fri, 14 Aug 2026 13:47:51 +0200 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: Kohq-46ESFD-z1J8wRGtHWaEiyTYoPGtJTWYT-2QdQ0_1786708153 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: JOAF577YEIE7D4P6GZXAKPYNFJZZBCNH X-Message-ID-Hash: JOAF577YEIE7D4P6GZXAKPYNFJZZBCNH X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Michal Privoznik via Devel Reply-To: Michal Privoznik X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1786708607686158500 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Michal Privoznik Use freshly introduced qemuAgentGetGuestDeviceInfo() to implement support of VIR_DOMAIN_GUEST_INFO_DEVICES type of virDomainGetGuestInfo() API in the QEMU driver. Signed-off-by: Michal Privoznik Reviewed-by: Peter Krempa --- src/bhyve/bhyve_driver.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c index 74c3c9491c..997c89daae 100644 --- a/src/bhyve/bhyve_driver.c +++ b/src/bhyve/bhyve_driver.c @@ -2862,7 +2862,8 @@ static const unsigned int bhyveDomainGetGuestInfoSupp= ortedTypes =3D VIR_DOMAIN_GUEST_INFO_FILESYSTEM | VIR_DOMAIN_GUEST_INFO_DISKS | VIR_DOMAIN_GUEST_INFO_INTERFACES | - VIR_DOMAIN_GUEST_INFO_LOAD; + VIR_DOMAIN_GUEST_INFO_LOAD | + VIR_DOMAIN_GUEST_INFO_DEVICES; =20 static int bhyveDomainGetGuestInfoCheckSupport(unsigned int types, @@ -2910,6 +2911,8 @@ bhyveDomainGetGuestInfo(virDomainPtr domain, double load5m =3D 0; double load15m =3D 0; bool format_load =3D false; + qemuAgentGuestDeviceInfo **devices =3D NULL; + size_t ndevices =3D 0; size_t i; g_autoptr(virTypedParamList) list =3D virTypedParamListNew(); =20 @@ -2984,6 +2987,14 @@ bhyveDomainGetGuestInfo(virDomainPtr domain, format_load =3D true; } =20 + if (supportedTypes & VIR_DOMAIN_GUEST_INFO_DEVICES) { + rc =3D qemuAgentGetGuestDeviceInfo(agent, &devices, report_unsuppo= rted); + if (rc =3D=3D -1) + goto exitagent; + if (rc >=3D 0) + ndevices =3D rc; + } + bhyveDomainObjExitAgent(vm, agent); virDomainObjEndAgentJob(vm); =20 @@ -3016,6 +3027,8 @@ bhyveDomainGetGuestInfo(virDomainPtr domain, virTypedParamListAddDouble(list, load15m, VIR_DOMAIN_GUEST_INFO_LO= AD_15M); } =20 + qemuAgentGuestDeviceInfoFormatParams(devices, ndevices, list); + if (virTypedParamListSteal(list, params, nparams) < 0) goto cleanup; =20 @@ -3033,6 +3046,12 @@ bhyveDomainGetGuestInfo(virDomainPtr domain, virDomainInterfaceFree(ifaces[i]); } g_free(ifaces); + if (devices && ndevices > 0) { + for (i =3D 0; i < ndevices; i++) { + qemuAgentGuestDeviceInfoFree(devices[i]); + } + g_free(devices); + } =20 virDomainObjEndAPI(&vm); return ret; --=20 2.54.0 From nobody Mon Aug 24 09:06:33 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1786708670; cv=none; d=zohomail.com; s=zohoarc; b=WYLz038JdZ1sGnFhAEwQCvAKrD/GEEyCCSsHjnijJn+g4oqTmsorKm/hfJlJ68dZ4uVhM4UP2Zxy+TgB1VKxLb94zWG4kBMZj9ePORZpIXw+caDxo5eNi8aAEOMxp7HfgE+fwdS/zWVRCyUWNV2QbXUBDrTdKpk4ycnbuDJ8PUQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786708670; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=OPAHLES7tLf9t+2u5IERum6yza32MVUjf0ACNuHmJqs=; b=kbQl9mau6Ged6KLD8MxHDIVgbiwWcNhUZ/TxO51ubAJbMFKq5ZlfEt04eg6NvuYFU5z27eZGnUOnXAX1MrI7e2DywWVJKyjZ4ed4BW+hAb4BQIVIB7d19ixNfwm0M1zo+VfEiD8EtWjnAlw0HEzmiTJLAWElrmV3HRNBzcfVcao= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 1786708670702479.7704247388349; Fri, 14 Aug 2026 04:57:50 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 8405041908; Fri, 14 Aug 2026 07:57:49 -0400 (EDT) Received: from [172.19.199.13] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id 6FB6F41CDA for ; Fri, 14 Aug 2026 07:50:45 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id C4E4241973; Fri, 14 Aug 2026 07:50:35 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id ABEC841A80 for ; Fri, 14 Aug 2026 07:49:22 -0400 (EDT) Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-244-4RO0fUosMs-4Lvf55BKSTQ-1; Fri, 14 Aug 2026 07:49:14 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id DD802195605E for ; Fri, 14 Aug 2026 11:49:13 +0000 (UTC) Received: from moe (unknown [10.43.3.236]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 493B31977033 for ; Fri, 14 Aug 2026 11:49:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=0.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,RCVD_IN_SBL_CSS,SPF_HELO_PASS autolearn=no autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1786708162; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=OPAHLES7tLf9t+2u5IERum6yza32MVUjf0ACNuHmJqs=; b=Jqgni9mWnop1mF6kqL2loFX2ObZ6xL2mR8mvZXYbSL7w2zL7d1iwlsXeIL3b711BirbRMu GEgOzZ8WROJipD12MSmFIeVnU562dCoFv++kPeBsKhhjMwGvBviKQ3pPd5BwxrqYnBMj70 1ZrbUBQ/bM70i0jtt/nvCg6aKUnG9e0= X-MC-Unique: 4RO0fUosMs-4Lvf55BKSTQ-1 X-Mimecast-MFC-AGG-ID: 4RO0fUosMs-4Lvf55BKSTQ_1786708154 To: devel@lists.libvirt.org Subject: [PATCH v2 6/6] virsh: Add support for VIR_DOMAIN_GUEST_INFO_DEVICES Date: Fri, 14 Aug 2026 13:47:52 +0200 Message-ID: <8d1dadbac26c6454dcb14a610f33d4e5dcf3b870.1786707940.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: xHjnA0Nh3-iwy2GEpnuS9XsQTbFbOt15S_xoDyUpmyQ_1786708154 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: NODQJNTH7B5VN7GCJNTMGKWOZV5OGEGJ X-Message-ID-Hash: NODQJNTH7B5VN7GCJNTMGKWOZV5OGEGJ X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Michal Privoznik via Devel Reply-To: Michal Privoznik X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1786708672052158500 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Michal Privoznik The virDomainGetGuestInfo() API is exposed as 'guestinfo' command. Introduce new --devices option for it to reflect introduction of VIR_DOMAIN_GUEST_INFO_DEVICES type. Signed-off-by: Michal Privoznik Reviewed-by: Peter Krempa --- docs/manpages/virsh.rst | 17 +++++++++++++---- tools/virsh-domain.c | 6 ++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst index a10d29e0ea..6803bbb57a 100644 --- a/docs/manpages/virsh.rst +++ b/docs/manpages/virsh.rst @@ -3277,7 +3277,7 @@ guestinfo :: =20 guestinfo domain [--user] [--os] [--timezone] [--hostname] [--filesyste= m] - [--disk] [--interface] + [--disk] [--interface] [--devices] =20 Print information about the guest from the point of view of the guest agen= t. Note that this command requires a guest agent to be configured and running= in @@ -3289,9 +3289,9 @@ Success is always reported in this case. =20 You can limit the types of information that are returned by specifying one= or more flags. Available information types flags are *--user*, *--os*, -*--timezone*, *--hostname*, *--filesystem*, *--disk*, *--interface* and *-= -load*. -If an explicitly requested information type is not supported by the guest = agent -at that point, the processes will provide an exit code of 1. +*--timezone*, *--hostname*, *--filesystem*, *--disk*, *--interface*, *--lo= ad* +and *--devices*. If an explicitly requested information type is not suppo= rted +by the guest agent at that point, the processes will provide an exit code = of 1. =20 Note that depending on the hypervisor type and the version of the guest ag= ent running within the domain, not all of the following information may be @@ -3374,6 +3374,15 @@ returned: * ``load.5m`` - average load in guest for last 5 minutes * ``load.15m`` - average load in guest for last 15 minutes =20 +*--devices* returns: +* ``device.count`` - the number of devices that info is returned for +* ``device..driverName`` - name of the driver associated with device +* ``device..driverDate`` - driver release date in seconds since the e= poch +* ``device..driverVersion`` - version of the driver associated with t= he device +* ``device..idType`` - device identification type (e.g. pci) +* ``device..pciVendor`` - vendor ID for PCI device +* ``device..pciDevice`` - device ID for PCI device + =20 guestvcpus ---------- diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 688df75f81..0a36575626 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -13763,6 +13763,10 @@ static const vshCmdOptDef opts_guestinfo[] =3D { .type =3D VSH_OT_BOOL, .help =3D N_("report load averages information"), }, + {.name =3D "devices", + .type =3D VSH_OT_BOOL, + .help =3D N_("report devices information"), + }, {.name =3D NULL} }; =20 @@ -13792,6 +13796,8 @@ cmdGuestInfo(vshControl *ctl, const vshCmd *cmd) types |=3D VIR_DOMAIN_GUEST_INFO_INTERFACES; if (vshCommandOptBool(cmd, "load")) types |=3D VIR_DOMAIN_GUEST_INFO_LOAD; + if (vshCommandOptBool(cmd, "devices")) + types |=3D VIR_DOMAIN_GUEST_INFO_DEVICES; =20 if (!(dom =3D virshCommandOptDomain(ctl, cmd, NULL))) return false; --=20 2.54.0