[libvirt] [PATCH 0/4] Complete virDomainChrSourceDefPtr adjustments

Similar to _virDomainChrDef, alter _virDomainSmartcardDef and _virDomainRedirdevDef in order to use a virDomainChrSourceDefPtr. This includes modifying the relevant allocations for the source. Next, modify the virDomainRNGDef allocation to use virDomainChrSourceNew rather than a straight VIR_ALLOC. Finally, add the "missing" iterators for RNG and Redirdev. All this should set up what's necessary in order to handle adding the TLS chardev TCP for all chr, smartcard, rng, and redirdev devices. John Ferlan (4): conf: Use virDomainChrSourceDefPtr for _virDomainSmartcardDef 'passthru' conf: Use virDomainChrSourceDefPtr for _virDomainRedirdevDef 'source.chr' conf: Use virDomainChrSourceDefNew for virDomainRNGDef allocation conf: Add iterators for RNG and Redirdev src/conf/domain_audit.c | 2 +- src/conf/domain_conf.c | 122 ++++++++++++++++++++++++++++++---------- src/conf/domain_conf.h | 22 +++++++- src/libvirt_private.syms | 2 + src/qemu/qemu_command.c | 4 +- src/qemu/qemu_hotplug.c | 2 +- src/security/security_selinux.c | 4 +- 7 files changed, 119 insertions(+), 39 deletions(-) -- 2.7.4

Use a pointer and the virDomainChrSourceDefNew() function in order to allocate the structure for _virDomainSmartcardDef. Signed-off-by: John Ferlan <jferlan@redhat.com> --- src/conf/domain_audit.c | 2 +- src/conf/domain_conf.c | 25 ++++++++++++++++--------- src/conf/domain_conf.h | 2 +- src/qemu/qemu_command.c | 2 +- src/security/security_selinux.c | 4 ++-- 5 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c index 314dee7..2decf02 100644 --- a/src/conf/domain_audit.c +++ b/src/conf/domain_audit.c @@ -218,7 +218,7 @@ virDomainAuditSmartcard(virDomainObjPtr vm, case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH: virDomainAuditGenericDev(vm, "smartcard", NULL, - virDomainAuditChardevPath(&def->data.passthru), + virDomainAuditChardevPath(def->data.passthru), reason, success); break; diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 748ffd5..7e2cc0c 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -2146,7 +2146,7 @@ void virDomainSmartcardDefFree(virDomainSmartcardDefPtr def) break; case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH: - virDomainChrSourceDefClear(&def->data.passthru); + virDomainChrSourceDefFree(def->data.passthru); break; default: @@ -10489,7 +10489,8 @@ virDomainChrDefParseXML(virDomainXMLOptionPtr xmlopt, } static virDomainSmartcardDefPtr -virDomainSmartcardDefParseXML(xmlNodePtr node, +virDomainSmartcardDefParseXML(virDomainXMLOptionPtr xmlopt, + xmlNodePtr node, unsigned int flags) { xmlNodePtr cur; @@ -10569,7 +10570,11 @@ virDomainSmartcardDefParseXML(xmlNodePtr node, "device type attribute")); goto error; } - if ((def->data.passthru.type = virDomainChrTypeFromString(type)) < 0) { + + if (!(def->data.passthru = virDomainChrSourceDefNew(xmlopt))) + goto error; + + if ((def->data.passthru->type = virDomainChrTypeFromString(type)) < 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unknown type presented to host for " "character device: %s"), type); @@ -10577,12 +10582,12 @@ virDomainSmartcardDefParseXML(xmlNodePtr node, } cur = node->children; - if (virDomainChrSourceDefParseXML(&def->data.passthru, cur, flags, + if (virDomainChrSourceDefParseXML(def->data.passthru, cur, flags, NULL, NULL, NULL, 0) < 0) goto error; - if (def->data.passthru.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) { - def->data.passthru.data.spicevmc + if (def->data.passthru->type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) { + def->data.passthru->data.spicevmc = VIR_DOMAIN_CHR_SPICEVMC_SMARTCARD; } @@ -13595,7 +13600,8 @@ virDomainDeviceDefParse(const char *xmlStr, goto error; break; case VIR_DOMAIN_DEVICE_SMARTCARD: - if (!(dev->data.smartcard = virDomainSmartcardDefParseXML(node, flags))) + if (!(dev->data.smartcard = virDomainSmartcardDefParseXML(xmlopt, node, + flags))) goto error; break; case VIR_DOMAIN_DEVICE_MEMBALLOON: @@ -17189,7 +17195,8 @@ virDomainDefParseXML(xmlDocPtr xml, goto error; for (i = 0; i < n; i++) { - virDomainSmartcardDefPtr card = virDomainSmartcardDefParseXML(nodes[i], + virDomainSmartcardDefPtr card = virDomainSmartcardDefParseXML(xmlopt, + nodes[i], flags); if (!card) goto error; @@ -21661,7 +21668,7 @@ virDomainSmartcardDefFormat(virBufferPtr buf, break; case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH: - if (virDomainChrSourceDefFormat(buf, NULL, &def->data.passthru, false, + if (virDomainChrSourceDefFormat(buf, NULL, def->data.passthru, false, flags) < 0) return -1; break; diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 8738c80..c6654c2 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1159,7 +1159,7 @@ struct _virDomainSmartcardDef { char *file[VIR_DOMAIN_SMARTCARD_NUM_CERTIFICATES]; char *database; } cert; /* 'host-certificates' */ - virDomainChrSourceDef passthru; /* 'passthrough' */ + virDomainChrSourceDefPtr passthru; /* 'passthrough' */ } data; virDomainDeviceInfo info; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index be3796d..760c685 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -8346,7 +8346,7 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logManager, } if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, cfg, def, - &smartcard->data.passthru, + smartcard->data.passthru, smartcard->info.alias, qemuCaps, true))) { virBufferFreeAndReset(&opt); diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c index a98e0c0..5dad22c 100644 --- a/src/security/security_selinux.c +++ b/src/security/security_selinux.c @@ -1957,7 +1957,7 @@ virSecuritySELinuxRestoreSecuritySmartcardCallback(virDomainDefPtr def, return virSecuritySELinuxRestoreFileLabel(mgr, database); case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH: - return virSecuritySELinuxRestoreChardevLabel(mgr, def, NULL, &dev->data.passthru); + return virSecuritySELinuxRestoreChardevLabel(mgr, def, NULL, dev->data.passthru); default: virReportError(VIR_ERR_INTERNAL_ERROR, @@ -2348,7 +2348,7 @@ virSecuritySELinuxSetSecuritySmartcardCallback(virDomainDefPtr def, case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH: return virSecuritySELinuxSetChardevLabel(mgr, def, NULL, - &dev->data.passthru); + dev->data.passthru); default: virReportError(VIR_ERR_INTERNAL_ERROR, -- 2.7.4

On Fri, Oct 21, 2016 at 07:25:37PM -0400, John Ferlan wrote:
Use a pointer and the virDomainChrSourceDefNew() function in order to allocate the structure for _virDomainSmartcardDef.
Signed-off-by: John Ferlan <jferlan@redhat.com> ---
ACK Pavel

Use a pointer and the virDomainChrSourceDefNew() function in order to allocate the structure for _virDomainRedirdevDef. Signed-off-by: John Ferlan <jferlan@redhat.com> --- src/conf/domain_conf.c | 36 ++++++++++++++++++++---------------- src/conf/domain_conf.h | 2 +- src/qemu/qemu_command.c | 2 +- src/qemu/qemu_hotplug.c | 2 +- 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 7e2cc0c..bf55f01 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -2363,7 +2363,7 @@ void virDomainRedirdevDefFree(virDomainRedirdevDefPtr def) if (!def) return; - virDomainChrSourceDefClear(&def->source.chr); + virDomainChrSourceDefFree(def->source.chr); virDomainDeviceInfoClear(&def->info); VIR_FREE(def); @@ -12972,7 +12972,8 @@ virDomainHostdevDefParseXML(virDomainXMLOptionPtr xmlopt, static virDomainRedirdevDefPtr -virDomainRedirdevDefParseXML(xmlNodePtr node, +virDomainRedirdevDefParseXML(virDomainXMLOptionPtr xmlopt, + xmlNodePtr node, virHashTablePtr bootHash, unsigned int flags) { @@ -12984,6 +12985,9 @@ virDomainRedirdevDefParseXML(xmlNodePtr node, if (VIR_ALLOC(def) < 0) return NULL; + if (!(def->source.chr = virDomainChrSourceDefNew(xmlopt))) + goto error; + bus = virXMLPropString(node, "bus"); if (bus) { if ((def->bus = virDomainRedirdevBusTypeFromString(bus)) < 0) { @@ -12997,7 +13001,7 @@ virDomainRedirdevDefParseXML(xmlNodePtr node, type = virXMLPropString(node, "type"); if (type) { - if ((def->source.chr.type = virDomainChrTypeFromString(type)) < 0) { + if ((def->source.chr->type = virDomainChrTypeFromString(type)) < 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unknown redirdev character device type '%s'"), type); goto error; @@ -13012,13 +13016,13 @@ virDomainRedirdevDefParseXML(xmlNodePtr node, /* boot gets parsed in virDomainDeviceInfoParseXML * source gets parsed in virDomainChrSourceDefParseXML * we don't know any of the elements that might remain */ - remaining = virDomainChrSourceDefParseXML(&def->source.chr, cur, flags, + remaining = virDomainChrSourceDefParseXML(def->source.chr, cur, flags, NULL, NULL, NULL, 0); if (remaining < 0) goto error; - if (def->source.chr.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) - def->source.chr.data.spicevmc = VIR_DOMAIN_CHR_SPICEVMC_USBREDIR; + if (def->source.chr->type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) + def->source.chr->data.spicevmc = VIR_DOMAIN_CHR_SPICEVMC_USBREDIR; if (virDomainDeviceInfoParseXML(node, bootHash, &def->info, flags | VIR_DOMAIN_DEF_PARSE_ALLOW_BOOT) < 0) @@ -13583,7 +13587,8 @@ virDomainDeviceDefParse(const char *xmlStr, goto error; break; case VIR_DOMAIN_DEVICE_REDIRDEV: - if (!(dev->data.redirdev = virDomainRedirdevDefParseXML(node, NULL, flags))) + if (!(dev->data.redirdev = virDomainRedirdevDefParseXML(xmlopt, node, + NULL, flags))) goto error; break; case VIR_DOMAIN_DEVICE_RNG: @@ -14846,8 +14851,8 @@ virDomainRedirdevDefFind(virDomainDefPtr def, if (redirdev->bus != tmp->bus) continue; - if (!virDomainChrSourceDefIsEqual(&redirdev->source.chr, - &tmp->source.chr)) + if (!virDomainChrSourceDefIsEqual(redirdev->source.chr, + tmp->source.chr)) continue; if (redirdev->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE && @@ -17546,9 +17551,8 @@ virDomainDefParseXML(xmlDocPtr xml, if (n && VIR_ALLOC_N(def->redirdevs, n) < 0) goto error; for (i = 0; i < n; i++) { - virDomainRedirdevDefPtr redirdev = virDomainRedirdevDefParseXML(nodes[i], - bootHash, - flags); + virDomainRedirdevDefPtr redirdev = + virDomainRedirdevDefParseXML(xmlopt, nodes[i], bootHash, flags); if (!redirdev) goto error; @@ -18665,12 +18669,12 @@ virDomainRedirdevDefCheckABIStability(virDomainRedirdevDefPtr src, switch ((virDomainRedirdevBus) src->bus) { case VIR_DOMAIN_REDIRDEV_BUS_USB: - if (src->source.chr.type != dst->source.chr.type) { + if (src->source.chr->type != dst->source.chr->type) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Target redirected device source type %s does " "not match source device source type %s"), - virDomainChrTypeToString(dst->source.chr.type), - virDomainChrTypeToString(src->source.chr.type)); + virDomainChrTypeToString(dst->source.chr->type), + virDomainChrTypeToString(src->source.chr->type)); return false; } break; @@ -22743,7 +22747,7 @@ virDomainRedirdevDefFormat(virBufferPtr buf, virBufferAsprintf(buf, "<redirdev bus='%s'", bus); virBufferAdjustIndent(buf, 2); - if (virDomainChrSourceDefFormat(buf, NULL, &def->source.chr, false, flags) < 0) + if (virDomainChrSourceDefFormat(buf, NULL, def->source.chr, false, flags) < 0) return -1; if (virDomainDeviceInfoFormat(buf, &def->info, flags | VIR_DOMAIN_DEF_FORMAT_ALLOW_BOOT) < 0) diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index c6654c2..df216e8 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1518,7 +1518,7 @@ struct _virDomainRedirdevDef { int bus; /* enum virDomainRedirdevBus */ union { - virDomainChrSourceDef chr; + virDomainChrSourceDefPtr chr; } source; virDomainDeviceInfo info; /* Guest address */ diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 760c685..167ab66 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -8833,7 +8833,7 @@ qemuBuildRedirdevCommandLine(virLogManagerPtr logManager, char *devstr; if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, cfg, def, - &redirdev->source.chr, + redirdev->source.chr, redirdev->info.alias, qemuCaps, true))) { return -1; diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index bc83771..073dca2 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1499,7 +1499,7 @@ int qemuDomainAttachRedirdevDevice(virQEMUDriverPtr driver, qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorAttachCharDev(priv->mon, charAlias, - &(redirdev->source.chr)) < 0) { + redirdev->source.chr) < 0) { ignore_value(qemuDomainObjExitMonitor(driver, vm)); goto audit; } -- 2.7.4

On Fri, Oct 21, 2016 at 07:25:38PM -0400, John Ferlan wrote:
Use a pointer and the virDomainChrSourceDefNew() function in order to allocate the structure for _virDomainRedirdevDef.
Signed-off-by: John Ferlan <jferlan@redhat.com> ---
ACK Pavel

Rather than VIR_ALLOC() the data, use virDomainChrSourceDefNew in order to get the private data if necessary. Signed-off-by: John Ferlan <jferlan@redhat.com> --- src/conf/domain_conf.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index bf55f01..de7df5c 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -12099,7 +12099,8 @@ virDomainWatchdogDefParseXML(xmlNodePtr node, static virDomainRNGDefPtr -virDomainRNGDefParseXML(xmlNodePtr node, +virDomainRNGDefParseXML(virDomainXMLOptionPtr xmlopt, + xmlNodePtr node, xmlXPathContextPtr ctxt, unsigned int flags) { @@ -12172,7 +12173,7 @@ virDomainRNGDefParseXML(xmlNodePtr node, goto error; } - if (VIR_ALLOC(def->source.chardev) < 0) + if (!(def->source.chardev = virDomainChrSourceDefNew(xmlopt))) goto error; def->source.chardev->type = virDomainChrTypeFromString(type); @@ -13592,7 +13593,8 @@ virDomainDeviceDefParse(const char *xmlStr, goto error; break; case VIR_DOMAIN_DEVICE_RNG: - if (!(dev->data.rng = virDomainRNGDefParseXML(node, ctxt, flags))) + if (!(dev->data.rng = virDomainRNGDefParseXML(xmlopt, node, + ctxt, flags))) goto error; break; case VIR_DOMAIN_DEVICE_CHR: @@ -17481,9 +17483,8 @@ virDomainDefParseXML(xmlDocPtr xml, if (n && VIR_ALLOC_N(def->rngs, n) < 0) goto error; for (i = 0; i < n; i++) { - virDomainRNGDefPtr rng = virDomainRNGDefParseXML(nodes[i], - ctxt, - flags); + virDomainRNGDefPtr rng = virDomainRNGDefParseXML(xmlopt, nodes[i], + ctxt, flags); if (!rng) goto error; -- 2.7.4

On Fri, Oct 21, 2016 at 07:25:39PM -0400, John Ferlan wrote:
Rather than VIR_ALLOC() the data, use virDomainChrSourceDefNew in order to get the private data if necessary.
Signed-off-by: John Ferlan <jferlan@redhat.com> ---
ACK Pavel

Add the virDomainRNGDefForeach and +virDomainRedirdevDefForeach iterators to traverse all the RNG and Redirdevs just like the Smartcard's and Chr's Signed-off-by: John Ferlan <jferlan@redhat.com> --- src/conf/domain_conf.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 18 ++++++++++++++++++ src/libvirt_private.syms | 2 ++ 3 files changed, 68 insertions(+) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index de7df5c..30f2d6d 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -24559,6 +24559,54 @@ virDomainSmartcardDefForeach(virDomainDefPtr def, int +virDomainRNGDefForeach(virDomainDefPtr def, + bool abortOnError, + virDomainRNGDefIterator iter, + void *opaque) +{ + size_t i; + int rc = 0; + + for (i = 0; i < def->nrngs; i++) { + if ((iter)(def, + def->rngs[i], + opaque) < 0) + rc = -1; + + if (abortOnError && rc != 0) + goto done; + } + + done: + return rc; +} + + +int +virDomainRedirdevDefForeach(virDomainDefPtr def, + bool abortOnError, + virDomainRedirdevDefIterator iter, + void *opaque) +{ + size_t i; + int rc = 0; + + for (i = 0; i < def->nredirdevs; i++) { + if ((iter)(def, + def->redirdevs[i], + opaque) < 0) + rc = -1; + + if (abortOnError && rc != 0) + goto done; + } + + done: + return rc; +} + + +int virDomainUSBDeviceDefForeach(virDomainDefPtr def, virDomainUSBDeviceDefIterator iter, void *opaque, diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index df216e8..df962d7 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2948,6 +2948,24 @@ int virDomainChrDefForeach(virDomainDefPtr def, virDomainChrDefIterator iter, void *opaque); +typedef int (*virDomainRNGDefIterator)(virDomainDefPtr def, + virDomainRNGDefPtr dev, + void *opaque); + +int virDomainRNGDefForeach(virDomainDefPtr def, + bool abortOnError, + virDomainRNGDefIterator iter, + void *opaque); + +typedef int (*virDomainRedirdevDefIterator)(virDomainDefPtr def, + virDomainRedirdevDefPtr dev, + void *opaque); + +int virDomainRedirdevDefForeach(virDomainDefPtr def, + bool abortOnError, + virDomainRedirdevDefIterator iter, + void *opaque); + typedef int (*virDomainDiskDefPathIterator)(virDomainDiskDefPtr disk, const char *path, size_t depth, diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index bf503a5..c777738 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -453,9 +453,11 @@ virDomainPMSuspendedReasonTypeToString; virDomainRedirdevBusTypeFromString; virDomainRedirdevBusTypeToString; virDomainRedirdevDefFind; +virDomainRedirdevDefForeach; virDomainRedirdevDefFree; virDomainRedirdevDefRemove; virDomainRNGBackendTypeToString; +virDomainRNGDefForeach; virDomainRNGDefFree; virDomainRNGFind; virDomainRNGModelTypeToString; -- 2.7.4

On Fri, Oct 21, 2016 at 07:25:40PM -0400, John Ferlan wrote:
Add the virDomainRNGDefForeach and +virDomainRedirdevDefForeach iterators to traverse all the RNG and Redirdevs just like the Smartcard's and Chr's
Those are simple for loops over one array and I don't see any benefit of those helpers. If someone want's to iterate over RNG or Redirect devices they can use a simple for loop without a need to create an extra iterator function. I would rather remove the helper for Smartcards because it's the same case, the only one that make sense is for char devices, because there are four arrays and you usually wants to iterate over all of the char devices. Pavel
Signed-off-by: John Ferlan <jferlan@redhat.com> --- src/conf/domain_conf.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 18 ++++++++++++++++++ src/libvirt_private.syms | 2 ++ 3 files changed, 68 insertions(+)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index de7df5c..30f2d6d 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -24559,6 +24559,54 @@ virDomainSmartcardDefForeach(virDomainDefPtr def,
int +virDomainRNGDefForeach(virDomainDefPtr def, + bool abortOnError, + virDomainRNGDefIterator iter, + void *opaque) +{ + size_t i; + int rc = 0; + + for (i = 0; i < def->nrngs; i++) { + if ((iter)(def, + def->rngs[i], + opaque) < 0) + rc = -1; + + if (abortOnError && rc != 0) + goto done; + } + + done: + return rc; +} + + +int +virDomainRedirdevDefForeach(virDomainDefPtr def, + bool abortOnError, + virDomainRedirdevDefIterator iter, + void *opaque) +{ + size_t i; + int rc = 0; + + for (i = 0; i < def->nredirdevs; i++) { + if ((iter)(def, + def->redirdevs[i], + opaque) < 0) + rc = -1; + + if (abortOnError && rc != 0) + goto done; + } + + done: + return rc; +} + + +int virDomainUSBDeviceDefForeach(virDomainDefPtr def, virDomainUSBDeviceDefIterator iter, void *opaque, diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index df216e8..df962d7 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2948,6 +2948,24 @@ int virDomainChrDefForeach(virDomainDefPtr def, virDomainChrDefIterator iter, void *opaque);
+typedef int (*virDomainRNGDefIterator)(virDomainDefPtr def, + virDomainRNGDefPtr dev, + void *opaque); + +int virDomainRNGDefForeach(virDomainDefPtr def, + bool abortOnError, + virDomainRNGDefIterator iter, + void *opaque); + +typedef int (*virDomainRedirdevDefIterator)(virDomainDefPtr def, + virDomainRedirdevDefPtr dev, + void *opaque); + +int virDomainRedirdevDefForeach(virDomainDefPtr def, + bool abortOnError, + virDomainRedirdevDefIterator iter, + void *opaque); + typedef int (*virDomainDiskDefPathIterator)(virDomainDiskDefPtr disk, const char *path, size_t depth, diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index bf503a5..c777738 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -453,9 +453,11 @@ virDomainPMSuspendedReasonTypeToString; virDomainRedirdevBusTypeFromString; virDomainRedirdevBusTypeToString; virDomainRedirdevDefFind; +virDomainRedirdevDefForeach; virDomainRedirdevDefFree; virDomainRedirdevDefRemove; virDomainRNGBackendTypeToString; +virDomainRNGDefForeach; virDomainRNGDefFree; virDomainRNGFind; virDomainRNGModelTypeToString; -- 2.7.4
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
participants (2)
-
John Ferlan
-
Pavel Hrdina