[libvirt] [PATCHv4 6/6] conf: reject multiple panic devices of same model

Dmitry Andreev dandreev at virtuozzo.com
Fri Nov 13 17:16:40 UTC 2015


Only one panic device per model is allowed.
---
 src/conf/domain_conf.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 2f17675..b4a46ad 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -3747,6 +3747,30 @@ virDomainDefRejectDuplicateControllers(virDomainDefPtr def)
     return ret;
 }
 
+static int
+virDomainDefRejectDuplicatePanics(virDomainDefPtr def)
+{
+    bool exists[VIR_DOMAIN_PANIC_MODEL_LAST];
+    size_t i;
+
+    for (i = 0; i < VIR_DOMAIN_PANIC_MODEL_LAST; i++)
+         exists[i] = false;
+
+    for (i = 0; i < def->npanics; i++) {
+        virDomainPanicModel model = def->panics[i]->model;
+        if (!exists[model]) {
+             exists[model] = true;
+        } else {
+            virReportError(VIR_ERR_XML_ERROR,
+                           _("Multiple panic devices with model '%s'"),
+                           virDomainPanicModelTypeToString(model));
+            return -1;
+        }
+
+    }
+
+    return 0;
+}
 
 /**
  * virDomainDefMetadataSanitize:
@@ -3976,6 +4000,9 @@ virDomainDefPostParseInternal(virDomainDefPtr def,
     if (virDomainDefRejectDuplicateControllers(def) < 0)
         return -1;
 
+    if (virDomainDefRejectDuplicatePanics(def) < 0)
+        return -1;
+
     /* verify settings of guest timers */
     for (i = 0; i < def->clock.ntimers; i++) {
         virDomainTimerDefPtr timer = def->clock.timers[i];
-- 
1.8.3.1




More information about the libvir-list mailing list