On Thu, Jun 09, 2016 at 17:02:39 +0200, Michal Privoznik wrote:
Basically, there are just two functions introduced here:
virDomainRedirdevDefFind which looks up given redirdev in domain
definition, and virDomainRedirdevDefRemove which removes the
device at given index in the array of devices.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
src/conf/domain_conf.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
src/conf/domain_conf.h | 4 ++++
src/libvirt_private.syms | 2 ++
3 files changed, 50 insertions(+)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 8f5935c..7b2ff98 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -14597,6 +14597,50 @@ virDomainMemoryRemove(virDomainDefPtr def,
}
+ssize_t
+virDomainRedirdevDefFind(virDomainDefPtr def,
+ virDomainRedirdevDefPtr redirdev)
+{
+ size_t i;
+
+ for (i = 0; i < def->nredirdevs; i++) {
+ virDomainRedirdevDefPtr tmp = def->redirdevs[i];
+
+ if (redirdev->bus != tmp->bus)
+ continue;
+
+ if (!virDomainChrSourceDefIsEqual(&redirdev->source.chr,
+ &tmp->source.chr))
+ continue;
+
+ if (redirdev->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
+ !virDomainDeviceInfoAddressIsEqual(&redirdev->info,
&tmp->info))
+ continue;
+
+ if (STRNEQ_NULLABLE(redirdev->info.alias, tmp->info.alias))
+ continue;
I don't think we currently match the alias across our device finding
functions. The reason for that is that you won't be able to unplug the
device with --live --config specified for virsh or the corresponding
flag values as the inactive device doesn't have an alias.
+
+ break;
You can "return i" right away since you already found the device.
+ }
+
+ if (i < def->nredirdevs)
+ return i;
This is then not necessary
+
+ return -1;
+}