From 49497c4111df88d3fc4a4f0c115cc7fa0d60a8ee Mon Sep 17 00:00:00 2001 Message-ID: <49497c4111df88d3fc4a4f0c115cc7fa0d60a8ee.1787144197.git.jdenemar@redhat.com> From: Roman Bogorodskiy Date: Sat, 18 Jul 2026 12:58:33 +0200 Subject: [PATCH] qemu: move qemuAgent*InfoFormatParams to hypervisor/qemu_agent.c Move: * qemuAgentDiskInfoFormatParams * qemuAgentFSInfoFormatParams * virDomainInterfaceFormatParams from the qemu driver to hypervisor/qemu_agent.c so they could be reused by the other drivers implementing virDomainGetGuestInfo() using the qemu agent. Also, rename virDomainInterfaceFormatParams() to qemuAgentInterfaceFormatParams() to follow the common naming schema as it's not really used outside of the qemu agent related code. Signed-off-by: Roman Bogorodskiy Reviewed-by: Peter Krempa (cherry picked from commit c2b1b9f7454e2f23b8e1bdfc9005c9e4dcdbccb5) Resolves: https://redhat.atlassian.net/browse/RHEL-235731 Signed-off-by: Michal Privoznik --- src/hypervisor/qemu_agent.c | 162 ++++++++++++++++++++++++++++++++++++ src/hypervisor/qemu_agent.h | 17 ++++ src/libvirt_private.syms | 3 + src/qemu/qemu_driver.c | 162 +----------------------------------- 4 files changed, 183 insertions(+), 161 deletions(-) diff --git a/src/hypervisor/qemu_agent.c b/src/hypervisor/qemu_agent.c index e549947fbf..418386317d 100644 --- a/src/hypervisor/qemu_agent.c +++ b/src/hypervisor/qemu_agent.c @@ -2681,3 +2681,165 @@ qemuAgentFSInfoFormat(qemuAgentFSInfo **agentinfo, } return ret; } + + +void +qemuAgentDiskInfoFormatParams(qemuAgentDiskInfo **info, + int ndisks, + virDomainDef *vmdef, + virTypedParamList *list) +{ + size_t i; + + virTypedParamListAddUInt(list, ndisks, VIR_DOMAIN_GUEST_INFO_DISK_COUNT); + + for (i = 0; i < ndisks; i++) { + virTypedParamListAddString(list, info[i]->name, + VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_NAME, i); + virTypedParamListAddBoolean(list, info[i]->partition, + VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_PARTITION, i); + + if (info[i]->dependencies) { + size_t ndeps = g_strv_length(info[i]->dependencies); + size_t j; + + if (ndeps > 0) + virTypedParamListAddUInt(list, ndeps, + VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_DEPENDENCY_COUNT, i); + + for (j = 0; j < ndeps; j++) { + virTypedParamListAddString(list, info[i]->dependencies[j], + VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_DEPENDENCY_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_DEPENDENCY_SUFFIX_NAME, i, j); + } + } + + if (info[i]->address) { + qemuAgentDiskAddress *address = info[i]->address; + virDomainDiskDef *diskdef = NULL; + + if (address->serial) + virTypedParamListAddString(list, address->serial, + VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_SERIAL, i); + + /* match the disk to the target in the vm definition */ + diskdef = virDomainDiskByAddress(vmdef, + &address->pci_controller, + address->ccw_addr, + address->bus, + address->target, + address->unit); + + if (diskdef && diskdef->dst) + virTypedParamListAddString(list, diskdef->dst, + VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_ALIAS, i); + + if (address->bus_type) + virTypedParamListAddString(list, address->bus_type, + VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_GUEST_BUS, i); + } + + if (info[i]->alias) + virTypedParamListAddString(list, info[i]->alias, + VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_GUEST_ALIAS, i); + } +} + + +void +qemuAgentFSInfoFormatParams(qemuAgentFSInfo **fsinfo, + int nfs, + virDomainDef *vmdef, + virTypedParamList *list) +{ + size_t i; + + virTypedParamListAddUInt(list, nfs, VIR_DOMAIN_GUEST_INFO_FS_COUNT); + + for (i = 0; i < nfs; i++) { + size_t j; + + virTypedParamListAddString(list, fsinfo[i]->name, + VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_NAME, i); + virTypedParamListAddString(list, fsinfo[i]->mountpoint, + VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_MOUNTPOINT, i); + virTypedParamListAddString(list, fsinfo[i]->fstype, + VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_FSTYPE, i); + + /* disk usage values are not returned by older guest agents, so + * only add the params if the value is set */ + if (fsinfo[i]->total_bytes != -1) + virTypedParamListAddULLong(list, fsinfo[i]->total_bytes, + VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_TOTAL_BYTES, i); + if (fsinfo[i]->used_bytes != -1) + virTypedParamListAddULLong(list, fsinfo[i]->used_bytes, + VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_USED_BYTES, i); + + virTypedParamListAddUInt(list, fsinfo[i]->ndisks, + VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_COUNT, i); + + for (j = 0; j < fsinfo[i]->ndisks; j++) { + virDomainDiskDef *diskdef = NULL; + qemuAgentDiskAddress *d = fsinfo[i]->disks[j]; + + /* match the disk to the target in the vm definition */ + diskdef = virDomainDiskByAddress(vmdef, + &d->pci_controller, + d->ccw_addr, + d->bus, + d->target, + d->unit); + if (diskdef && diskdef->dst) + virTypedParamListAddString(list, diskdef->dst, + VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_SUFFIX_ALIAS, i, j); + + if (d->serial) + virTypedParamListAddString(list, d->serial, + VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_SUFFIX_SERIAL, i, j); + + if (d->devnode) + virTypedParamListAddString(list, d->devnode, + VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_SUFFIX_DEVICE, i, j); + } + } +} + + +void +qemuAgentInterfaceFormatParams(virDomainInterfacePtr *ifaces, + int nifaces, + virTypedParamList *list) +{ + size_t i; + + virTypedParamListAddUInt(list, nifaces, VIR_DOMAIN_GUEST_INFO_IF_COUNT); + + for (i = 0; i < nifaces; i++) { + size_t j; + + virTypedParamListAddString(list, ifaces[i]->name, + VIR_DOMAIN_GUEST_INFO_IF_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_NAME, i); + virTypedParamListAddString(list, ifaces[i]->hwaddr, + VIR_DOMAIN_GUEST_INFO_IF_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_HWADDR, i); + virTypedParamListAddUInt(list, ifaces[i]->naddrs, + VIR_DOMAIN_GUEST_INFO_IF_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_ADDR_COUNT, i); + + for (j = 0; j < ifaces[i]->naddrs; j++) { + switch (ifaces[i]->addrs[j].type) { + case VIR_IP_ADDR_TYPE_IPV4: + virTypedParamListAddString(list, "ipv4", + VIR_DOMAIN_GUEST_INFO_IF_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_ADDR_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_ADDR_SUFFIX_TYPE, i, j); + break; + + case VIR_IP_ADDR_TYPE_IPV6: + virTypedParamListAddString(list, "ipv6", + VIR_DOMAIN_GUEST_INFO_IF_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_ADDR_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_ADDR_SUFFIX_TYPE, i, j); + break; + } + + virTypedParamListAddString(list, ifaces[i]->addrs[j].addr, + VIR_DOMAIN_GUEST_INFO_IF_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_ADDR_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_ADDR_SUFFIX_ADDR, i, j); + virTypedParamListAddUInt(list, ifaces[i]->addrs[j].prefix, + VIR_DOMAIN_GUEST_INFO_IF_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_ADDR_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_ADDR_SUFFIX_PREFIX, i, j); + } + } +} diff --git a/src/hypervisor/qemu_agent.h b/src/hypervisor/qemu_agent.h index 3dbc3baec1..def6f983d4 100644 --- a/src/hypervisor/qemu_agent.h +++ b/src/hypervisor/qemu_agent.h @@ -201,3 +201,20 @@ int qemuAgentFSInfoFormat(qemuAgentFSInfo **agentinfo, int nagentinfo, virDomainDef *vmdef, virDomainFSInfoPtr **info); + +void +qemuAgentDiskInfoFormatParams(qemuAgentDiskInfo **info, + int ndisks, + virDomainDef *vmdef, + virTypedParamList *list); + +void +qemuAgentFSInfoFormatParams(qemuAgentFSInfo **fsinfo, + int nfs, + virDomainDef *vmdef, + virTypedParamList *list); + +void +qemuAgentInterfaceFormatParams(virDomainInterfacePtr *ifaces, + int nifaces, + virTypedParamList *list); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index c76e5cb08a..02bd505749 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1716,9 +1716,11 @@ virDomainInterfaceVportRemove; # hypervisor/qemu_agent.h qemuAgentArbitraryCommand; qemuAgentClose; +qemuAgentDiskInfoFormatParams; qemuAgentDiskInfoFree; qemuAgentFSFreeze; qemuAgentFSInfoFormat; +qemuAgentFSInfoFormatParams; qemuAgentFSInfoFree; qemuAgentFSThaw; qemuAgentFSTrim; @@ -1732,6 +1734,7 @@ qemuAgentGetTime; qemuAgentGetTimezone; qemuAgentGetUsers; qemuAgentGetVCPUs; +qemuAgentInterfaceFormatParams; qemuAgentNotifyClose; qemuAgentNotifyEvent; qemuAgentOpen; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index b90a7b07d4..c7892161e3 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -20014,166 +20014,6 @@ qemuDomainGetGuestInfoCheckSupport(unsigned int types, } -static void -qemuAgentDiskInfoFormatParams(qemuAgentDiskInfo **info, - int ndisks, - virDomainDef *vmdef, - virTypedParamList *list) -{ - size_t i; - - virTypedParamListAddUInt(list, ndisks, VIR_DOMAIN_GUEST_INFO_DISK_COUNT); - - for (i = 0; i < ndisks; i++) { - virTypedParamListAddString(list, info[i]->name, - VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_NAME, i); - virTypedParamListAddBoolean(list, info[i]->partition, - VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_PARTITION, i); - - if (info[i]->dependencies) { - size_t ndeps = g_strv_length(info[i]->dependencies); - size_t j; - - if (ndeps > 0) - virTypedParamListAddUInt(list, ndeps, - VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_DEPENDENCY_COUNT, i); - - for (j = 0; j < ndeps; j++) { - virTypedParamListAddString(list, info[i]->dependencies[j], - VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_DEPENDENCY_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_DEPENDENCY_SUFFIX_NAME, i, j); - } - } - - if (info[i]->address) { - qemuAgentDiskAddress *address = info[i]->address; - virDomainDiskDef *diskdef = NULL; - - if (address->serial) - virTypedParamListAddString(list, address->serial, - VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_SERIAL, i); - - /* match the disk to the target in the vm definition */ - diskdef = virDomainDiskByAddress(vmdef, - &address->pci_controller, - address->ccw_addr, - address->bus, - address->target, - address->unit); - - if (diskdef && diskdef->dst) - virTypedParamListAddString(list, diskdef->dst, - VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_ALIAS, i); - - if (address->bus_type) - virTypedParamListAddString(list, address->bus_type, - VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_GUEST_BUS, i); - } - - if (info[i]->alias) - virTypedParamListAddString(list, info[i]->alias, - VIR_DOMAIN_GUEST_INFO_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_DISK_SUFFIX_GUEST_ALIAS, i); - } -} - - -static void -qemuAgentFSInfoFormatParams(qemuAgentFSInfo **fsinfo, - int nfs, - virDomainDef *vmdef, - virTypedParamList *list) -{ - size_t i; - - virTypedParamListAddUInt(list, nfs, VIR_DOMAIN_GUEST_INFO_FS_COUNT); - - for (i = 0; i < nfs; i++) { - size_t j; - - virTypedParamListAddString(list, fsinfo[i]->name, - VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_NAME, i); - virTypedParamListAddString(list, fsinfo[i]->mountpoint, - VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_MOUNTPOINT, i); - virTypedParamListAddString(list, fsinfo[i]->fstype, - VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_FSTYPE, i); - - /* disk usage values are not returned by older guest agents, so - * only add the params if the value is set */ - if (fsinfo[i]->total_bytes != -1) - virTypedParamListAddULLong(list, fsinfo[i]->total_bytes, - VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_TOTAL_BYTES, i); - if (fsinfo[i]->used_bytes != -1) - virTypedParamListAddULLong(list, fsinfo[i]->used_bytes, - VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_USED_BYTES, i); - - virTypedParamListAddUInt(list, fsinfo[i]->ndisks, - VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_COUNT, i); - - for (j = 0; j < fsinfo[i]->ndisks; j++) { - virDomainDiskDef *diskdef = NULL; - qemuAgentDiskAddress *d = fsinfo[i]->disks[j]; - - /* match the disk to the target in the vm definition */ - diskdef = virDomainDiskByAddress(vmdef, - &d->pci_controller, - d->ccw_addr, - d->bus, - d->target, - d->unit); - if (diskdef && diskdef->dst) - virTypedParamListAddString(list, diskdef->dst, - VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_SUFFIX_ALIAS, i, j); - - if (d->serial) - virTypedParamListAddString(list, d->serial, - VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_SUFFIX_SERIAL, i, j); - - if (d->devnode) - virTypedParamListAddString(list, d->devnode, - VIR_DOMAIN_GUEST_INFO_FS_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_FS_SUFFIX_DISK_SUFFIX_DEVICE, i, j); - } - } -} - -static void -virDomainInterfaceFormatParams(virDomainInterfacePtr *ifaces, - int nifaces, - virTypedParamList *list) -{ - size_t i; - - virTypedParamListAddUInt(list, nifaces, VIR_DOMAIN_GUEST_INFO_IF_COUNT); - - for (i = 0; i < nifaces; i++) { - size_t j; - - virTypedParamListAddString(list, ifaces[i]->name, - VIR_DOMAIN_GUEST_INFO_IF_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_NAME, i); - virTypedParamListAddString(list, ifaces[i]->hwaddr, - VIR_DOMAIN_GUEST_INFO_IF_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_HWADDR, i); - virTypedParamListAddUInt(list, ifaces[i]->naddrs, - VIR_DOMAIN_GUEST_INFO_IF_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_ADDR_COUNT, i); - - for (j = 0; j < ifaces[i]->naddrs; j++) { - switch (ifaces[i]->addrs[j].type) { - case VIR_IP_ADDR_TYPE_IPV4: - virTypedParamListAddString(list, "ipv4", - VIR_DOMAIN_GUEST_INFO_IF_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_ADDR_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_ADDR_SUFFIX_TYPE, i, j); - break; - - case VIR_IP_ADDR_TYPE_IPV6: - virTypedParamListAddString(list, "ipv6", - VIR_DOMAIN_GUEST_INFO_IF_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_ADDR_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_ADDR_SUFFIX_TYPE, i, j); - break; - } - - virTypedParamListAddString(list, ifaces[i]->addrs[j].addr, - VIR_DOMAIN_GUEST_INFO_IF_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_ADDR_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_ADDR_SUFFIX_ADDR, i, j); - virTypedParamListAddUInt(list, ifaces[i]->addrs[j].prefix, - VIR_DOMAIN_GUEST_INFO_IF_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_ADDR_PREFIX "%zu" VIR_DOMAIN_GUEST_INFO_IF_SUFFIX_ADDR_SUFFIX_PREFIX, i, j); - } - } -} - static int qemuDomainGetGuestInfo(virDomainPtr dom, unsigned int types, @@ -20300,7 +20140,7 @@ qemuDomainGetGuestInfo(virDomainPtr dom, } if (nifaces > 0) { - virDomainInterfaceFormatParams(ifaces, nifaces, list); + qemuAgentInterfaceFormatParams(ifaces, nifaces, list); } if (format_load) { -- 2.55.0