]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
domain_conf: move address validation functions to domain_validate.c
authorDaniel Henrique Barboza <danielhb413@gmail.com>
Thu, 10 Dec 2020 18:58:44 +0000 (15:58 -0300)
committerDaniel Henrique Barboza <danielhb413@gmail.com>
Mon, 14 Dec 2020 12:24:10 +0000 (09:24 -0300)
virDomainDefValidateAliases() is one of the static functions that
needs to be handled before moving virDomainDefValidateInternal().
Let's move all related validate functions to domain_validate.c
at the same time.

Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
src/conf/domain_conf.c
src/conf/domain_conf.h
src/conf/domain_validate.c
src/conf/domain_validate.h
src/libvirt_private.syms
src/qemu/qemu_driver.c

index d3ea79b708f6f81493f952ca12098eddb49360c6..0425fbaca323a2bc8e10f5e3b8eecf2b59d55cf0 100644 (file)
@@ -4213,16 +4213,11 @@ virDomainSkipBackcompatConsole(virDomainDefPtr def,
 }
 
 
-enum {
-    DOMAIN_DEVICE_ITERATE_ALL_CONSOLES = 1 << 0,
-    DOMAIN_DEVICE_ITERATE_MISSING_INFO = 1 << 1,
-} virDomainDeviceIterateFlags;
-
 /*
  * Iterates over domain devices calling @cb on each device. The default
  * behaviour can be altered with virDomainDeviceIterateFlags.
  */
-static int
+int
 virDomainDeviceInfoIterateFlags(virDomainDefPtr def,
                                 virDomainDeviceInfoCallback cb,
                                 unsigned int iteratorFlags,
@@ -6427,143 +6422,6 @@ virDomainDeviceDefValidateInternal(const virDomainDeviceDef *dev,
 }
 
 
-struct virDomainDefValidateAliasesData {
-    GHashTable *aliases;
-};
-
-
-static int
-virDomainDeviceDefValidateAliasesIterator(virDomainDefPtr def,
-                                          virDomainDeviceDefPtr dev,
-                                          virDomainDeviceInfoPtr info,
-                                          void *opaque)
-{
-    struct virDomainDefValidateAliasesData *data = opaque;
-    const char *alias = info->alias;
-
-    if (!virDomainDeviceAliasIsUserAlias(alias))
-        return 0;
-
-    /* Some crazy backcompat for consoles. */
-    if (def->nserials && def->nconsoles &&
-        def->consoles[0]->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE &&
-        def->consoles[0]->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL &&
-        dev->type == VIR_DOMAIN_DEVICE_CHR &&
-        virDomainChrEquals(def->serials[0], dev->data.chr))
-        return 0;
-
-    if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV &&
-        dev->data.hostdev->parentnet) {
-        /* This hostdev is a copy of some previous interface.
-         * Aliases are duplicated. */
-        return 0;
-    }
-
-    if (virHashLookup(data->aliases, alias)) {
-        virReportError(VIR_ERR_XML_ERROR,
-                       _("non unique alias detected: %s"),
-                       alias);
-        return -1;
-    }
-
-    if (virHashAddEntry(data->aliases, alias, (void *) 1) < 0) {
-        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       _("Unable to construct table of device aliases"));
-        return -1;
-    }
-
-    return 0;
-}
-
-
-/**
- * virDomainDefValidateAliases:
- *
- * Check for uniqueness of device aliases. If @aliases is not
- * NULL return hash table of all the aliases in it.
- *
- * Returns 0 on success,
- *        -1 otherwise (with error reported).
- */
-static int
-virDomainDefValidateAliases(const virDomainDef *def,
-                            GHashTable **aliases)
-{
-    struct virDomainDefValidateAliasesData data;
-    int ret = -1;
-
-    /* We are not storing copies of aliases. Don't free them. */
-    if (!(data.aliases = virHashNew(NULL)))
-        goto cleanup;
-
-    if (virDomainDeviceInfoIterateFlags((virDomainDefPtr) def,
-                                        virDomainDeviceDefValidateAliasesIterator,
-                                        DOMAIN_DEVICE_ITERATE_ALL_CONSOLES,
-                                        &data) < 0)
-        goto cleanup;
-
-    if (aliases)
-        *aliases = g_steal_pointer(&data.aliases);
-
-    ret = 0;
- cleanup:
-    virHashFree(data.aliases);
-    return ret;
-}
-
-
-static int
-virDomainDeviceValidateAliasImpl(const virDomainDef *def,
-                                 virDomainDeviceDefPtr dev)
-{
-    GHashTable *aliases = NULL;
-    virDomainDeviceInfoPtr info = virDomainDeviceGetInfo(dev);
-    int ret = -1;
-
-    if (!info || !info->alias)
-        return 0;
-
-    if (virDomainDefValidateAliases(def, &aliases) < 0)
-        goto cleanup;
-
-    if (virHashLookup(aliases, info->alias)) {
-        virReportError(VIR_ERR_XML_ERROR,
-                       _("non unique alias detected: %s"),
-                       info->alias);
-        goto cleanup;
-    }
-
-    ret = 0;
- cleanup:
-
-    virHashFree(aliases);
-    return ret;
-}
-
-
-int
-virDomainDeviceValidateAliasForHotplug(virDomainObjPtr vm,
-                                       virDomainDeviceDefPtr dev,
-                                       unsigned int flags)
-{
-    virDomainDefPtr persDef = NULL;
-    virDomainDefPtr liveDef = NULL;
-
-    if (virDomainObjGetDefs(vm, flags, &liveDef, &persDef) < 0)
-        return -1;
-
-    if (persDef &&
-        virDomainDeviceValidateAliasImpl(persDef, dev) < 0)
-        return -1;
-
-    if (liveDef &&
-        virDomainDeviceValidateAliasImpl(liveDef, dev) < 0)
-        return -1;
-
-    return 0;
-}
-
-
 static int
 virDomainDeviceDefValidate(const virDomainDeviceDef *dev,
                            const virDomainDef *def,
index 71e42d66178026a87f4608747f435b1a498483e9..ba03a55c7b8b7340ed9d524091803e049eecca0f 100644 (file)
@@ -2759,6 +2759,11 @@ typedef enum {
     VIR_DOMAIN_TAINT_LAST
 } virDomainTaintFlags;
 
+typedef enum {
+    DOMAIN_DEVICE_ITERATE_ALL_CONSOLES = 1 << 0,
+    DOMAIN_DEVICE_ITERATE_MISSING_INFO = 1 << 1,
+} virDomainDeviceIterateFlags;
+
 /* Guest VM runtime state */
 typedef struct _virDomainStateReason virDomainStateReason;
 struct _virDomainStateReason {
@@ -2987,10 +2992,6 @@ int virDomainDefPostParse(virDomainDefPtr def,
                           void *parseOpaque);
 bool virDomainDefHasUSB(const virDomainDef *def);
 
-int virDomainDeviceValidateAliasForHotplug(virDomainObjPtr vm,
-                                           virDomainDeviceDefPtr dev,
-                                           unsigned int flags);
-
 bool virDomainDeviceAliasIsUserAlias(const char *aliasStr);
 
 int virDomainDefValidate(virDomainDefPtr def,
@@ -3130,6 +3131,11 @@ virDomainChrSourceDefNew(virDomainXMLOptionPtr xmlopt);
 
 virDomainChrDefPtr virDomainChrDefNew(virDomainXMLOptionPtr xmlopt);
 
+int virDomainDeviceInfoIterateFlags(virDomainDefPtr def,
+                                    virDomainDeviceInfoCallback cb,
+                                    unsigned int iteratorFlags,
+                                    void *opaque);
+
 virDomainGraphicsDefPtr
 virDomainGraphicsDefNew(virDomainXMLOptionPtr xmlopt);
 
index 8bbd60c83602701d5718598f64bfe099cf0f2b14..962336033f4e39cc1a92c57ba4fba7fdaaf3a1ef 100644 (file)
@@ -760,3 +760,141 @@ virDomainDefDuplicateDriveAddressesValidate(const virDomainDef *def)
 
     return 0;
 }
+
+
+
+struct virDomainDefValidateAliasesData {
+    GHashTable *aliases;
+};
+
+
+static int
+virDomainDeviceDefValidateAliasesIterator(virDomainDefPtr def,
+                                          virDomainDeviceDefPtr dev,
+                                          virDomainDeviceInfoPtr info,
+                                          void *opaque)
+{
+    struct virDomainDefValidateAliasesData *data = opaque;
+    const char *alias = info->alias;
+
+    if (!virDomainDeviceAliasIsUserAlias(alias))
+        return 0;
+
+    /* Some crazy backcompat for consoles. */
+    if (def->nserials && def->nconsoles &&
+        def->consoles[0]->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE &&
+        def->consoles[0]->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL &&
+        dev->type == VIR_DOMAIN_DEVICE_CHR &&
+        virDomainChrEquals(def->serials[0], dev->data.chr))
+        return 0;
+
+    if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV &&
+        dev->data.hostdev->parentnet) {
+        /* This hostdev is a copy of some previous interface.
+         * Aliases are duplicated. */
+        return 0;
+    }
+
+    if (virHashLookup(data->aliases, alias)) {
+        virReportError(VIR_ERR_XML_ERROR,
+                       _("non unique alias detected: %s"),
+                       alias);
+        return -1;
+    }
+
+    if (virHashAddEntry(data->aliases, alias, (void *) 1) < 0) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("Unable to construct table of device aliases"));
+        return -1;
+    }
+
+    return 0;
+}
+
+
+/**
+ * virDomainDefValidateAliases:
+ *
+ * Check for uniqueness of device aliases. If @aliases is not
+ * NULL return hash table of all the aliases in it.
+ *
+ * Returns 0 on success,
+ *        -1 otherwise (with error reported).
+ */
+int
+virDomainDefValidateAliases(const virDomainDef *def,
+                            GHashTable **aliases)
+{
+    struct virDomainDefValidateAliasesData data;
+    int ret = -1;
+
+    /* We are not storing copies of aliases. Don't free them. */
+    if (!(data.aliases = virHashNew(NULL)))
+        goto cleanup;
+
+    if (virDomainDeviceInfoIterateFlags((virDomainDefPtr) def,
+                                        virDomainDeviceDefValidateAliasesIterator,
+                                        DOMAIN_DEVICE_ITERATE_ALL_CONSOLES,
+                                        &data) < 0)
+        goto cleanup;
+
+    if (aliases)
+        *aliases = g_steal_pointer(&data.aliases);
+
+    ret = 0;
+ cleanup:
+    virHashFree(data.aliases);
+    return ret;
+}
+
+
+static int
+virDomainDeviceValidateAliasImpl(const virDomainDef *def,
+                                 virDomainDeviceDefPtr dev)
+{
+    GHashTable *aliases = NULL;
+    virDomainDeviceInfoPtr info = virDomainDeviceGetInfo(dev);
+    int ret = -1;
+
+    if (!info || !info->alias)
+        return 0;
+
+    if (virDomainDefValidateAliases(def, &aliases) < 0)
+        goto cleanup;
+
+    if (virHashLookup(aliases, info->alias)) {
+        virReportError(VIR_ERR_XML_ERROR,
+                       _("non unique alias detected: %s"),
+                       info->alias);
+        goto cleanup;
+    }
+
+    ret = 0;
+ cleanup:
+
+    virHashFree(aliases);
+    return ret;
+}
+
+
+int
+virDomainDeviceValidateAliasForHotplug(virDomainObjPtr vm,
+                                       virDomainDeviceDefPtr dev,
+                                       unsigned int flags)
+{
+    virDomainDefPtr persDef = NULL;
+    virDomainDefPtr liveDef = NULL;
+
+    if (virDomainObjGetDefs(vm, flags, &liveDef, &persDef) < 0)
+        return -1;
+
+    if (persDef &&
+        virDomainDeviceValidateAliasImpl(persDef, dev) < 0)
+        return -1;
+
+    if (liveDef &&
+        virDomainDeviceValidateAliasImpl(liveDef, dev) < 0)
+        return -1;
+
+    return 0;
+}
index 1f1a5b1bd1ca78435d88d6f14f2270c6c3e0bc2a..521a98ef11dcd52faa19ee754b378a11560b8585 100644 (file)
@@ -47,3 +47,8 @@ int virDomainControllerDefValidate(const virDomainControllerDef *controller);
 int virDomainDefIdMapValidate(const virDomainDef *def);
 int virDomainDefDuplicateDiskInfoValidate(const virDomainDef *def);
 int virDomainDefDuplicateDriveAddressesValidate(const virDomainDef *def);
+int virDomainDefValidateAliases(const virDomainDef *def,
+                                GHashTable **aliases);
+int virDomainDeviceValidateAliasForHotplug(virDomainObjPtr vm,
+                                           virDomainDeviceDefPtr dev,
+                                           unsigned int flags);
index 992488f754ca173aeaed531bb6a6a80db198950b..c3056232db397718e90c7184e9834e6cf935eb0a 100644 (file)
@@ -354,7 +354,6 @@ virDomainDeviceGetInfo;
 virDomainDeviceInfoIterate;
 virDomainDeviceSetData;
 virDomainDeviceTypeToString;
-virDomainDeviceValidateAliasForHotplug;
 virDomainDiskBackingStoreFormat;
 virDomainDiskBackingStoreParse;
 virDomainDiskBusTypeToString;
@@ -744,6 +743,10 @@ virDomainConfNWFilterTeardown;
 virDomainConfVMNWFilterTeardown;
 
 
+# conf/domain_validate.h
+virDomainDeviceValidateAliasForHotplug;
+
+
 # conf/interface_conf.h
 virInterfaceDefFormat;
 virInterfaceDefFree;
index 58c376fbe5e435c32280ecf4bb9e7dbcf9f896c2..5f0fb0a55fee21ec71fdb0f41446fc47ca0e1746 100644 (file)
@@ -70,6 +70,7 @@
 #include "domain_audit.h"
 #include "domain_cgroup.h"
 #include "domain_driver.h"
+#include "domain_validate.h"
 #include "node_device_conf.h"
 #include "virpci.h"
 #include "virusb.h"