[libvirt] [PATCH 1/2] qemu: Refactor config parameter retrieval

Peter Krempa pkrempa at redhat.com
Thu Nov 29 11:39:46 UTC 2012


This patch adds macros to help retrieve configuration values from qemu
driver's configuration. Some configuration options are grouped
together in the process.
---
 src/qemu/qemu_conf.c | 303 +++++++++++++--------------------------------------
 1 file changed, 73 insertions(+), 230 deletions(-)

diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index b7f249d..84859bf 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -153,50 +153,30 @@ int qemuLoadDriverConfig(virQEMUDriverPtr driver,
         return -1;                                                      \
     }

-    p = virConfGetValue(conf, "vnc_auto_unix_socket");
-    CHECK_TYPE("vnc_auto_unix_socket", VIR_CONF_LONG);
-    if (p) driver->vncAutoUnixSocket = p->l;
-
-    p = virConfGetValue(conf, "vnc_tls");
-    CHECK_TYPE("vnc_tls", VIR_CONF_LONG);
-    if (p) driver->vncTLS = p->l;
-
-    p = virConfGetValue(conf, "vnc_tls_x509_verify");
-    CHECK_TYPE("vnc_tls_x509_verify", VIR_CONF_LONG);
-    if (p) driver->vncTLSx509verify = p->l;
-
-    p = virConfGetValue(conf, "vnc_tls_x509_cert_dir");
-    CHECK_TYPE("vnc_tls_x509_cert_dir", VIR_CONF_STRING);
-    if (p && p->str) {
-        VIR_FREE(driver->vncTLSx509certdir);
-        if (!(driver->vncTLSx509certdir = strdup(p->str))) {
-            virReportOOMError();
-            virConfFree(conf);
-            return -1;
-        }
-    }
-
-    p = virConfGetValue(conf, "vnc_listen");
-    CHECK_TYPE("vnc_listen", VIR_CONF_STRING);
-    if (p && p->str) {
-        VIR_FREE(driver->vncListen);
-        if (!(driver->vncListen = strdup(p->str))) {
-            virReportOOMError();
-            virConfFree(conf);
-            return -1;
-        }
-    }
-
-    p = virConfGetValue(conf, "vnc_password");
-    CHECK_TYPE("vnc_password", VIR_CONF_STRING);
-    if (p && p->str) {
-        VIR_FREE(driver->vncPassword);
-        if (!(driver->vncPassword = strdup(p->str))) {
-            virReportOOMError();
-            virConfFree(conf);
-            return -1;
-        }
-    }
+#define GET_VALUE_LONG(NAME, VAR) p = virConfGetValue(conf, NAME);      \
+                                  CHECK_TYPE(NAME, VIR_CONF_LONG);      \
+                                  if (p) VAR = p->l;
+
+#define GET_VALUE_STR(NAME, VAR) p = virConfGetValue(conf, NAME);       \
+                                 CHECK_TYPE(NAME, VIR_CONF_STRING);     \
+                                 if (p && p->str) {                     \
+                                     VIR_FREE(VAR);                     \
+                                     if (!(VAR = strdup(p->str))) {     \
+                                         virReportOOMError();           \
+                                         virConfFree(conf);             \
+                                         return -1;                     \
+                                     }                                  \
+                                 }
+
+    GET_VALUE_LONG("vnc_auto_unix_socket", driver->vncAutoUnixSocket);
+    GET_VALUE_LONG("vnc_tls", driver->vncTLS);
+    GET_VALUE_LONG("vnc_tls_x509_verify", driver->vncTLSx509verify);
+    GET_VALUE_STR("vnc_tls_x509_cert_dir", driver->vncTLSx509certdir);
+    GET_VALUE_STR("vnc_listen", driver->vncListen);
+    GET_VALUE_STR("vnc_password", driver->vncPassword);
+    GET_VALUE_LONG("vnc_sasl", driver->vncSASL);
+    GET_VALUE_STR("vnc_sasl_dir", driver->vncSASLdir);
+    GET_VALUE_LONG("vnc_allow_host_audio", driver->vncAllowHostAudio);

     p = virConfGetValue(conf, "security_driver");
     if (p && p->type == VIR_CONF_LIST) {
@@ -240,104 +220,47 @@ int qemuLoadDriverConfig(virQEMUDriverPtr driver,
         }
     }

-    p = virConfGetValue(conf, "security_default_confined");
-    CHECK_TYPE("security_default_confined", VIR_CONF_LONG);
-    if (p) driver->securityDefaultConfined = p->l;
-
-    p = virConfGetValue(conf, "security_require_confined");
-    CHECK_TYPE("security_require_confined", VIR_CONF_LONG);
-    if (p) driver->securityRequireConfined = p->l;
-
-
-    p = virConfGetValue(conf, "vnc_sasl");
-    CHECK_TYPE("vnc_sasl", VIR_CONF_LONG);
-    if (p) driver->vncSASL = p->l;
-
-    p = virConfGetValue(conf, "vnc_sasl_dir");
-    CHECK_TYPE("vnc_sasl_dir", VIR_CONF_STRING);
-    if (p && p->str) {
-        VIR_FREE(driver->vncSASLdir);
-        if (!(driver->vncSASLdir = strdup(p->str))) {
-            virReportOOMError();
-            virConfFree(conf);
-            return -1;
-        }
-    }
-
-    p = virConfGetValue(conf, "spice_tls");
-    CHECK_TYPE("spice_tls", VIR_CONF_LONG);
-    if (p) driver->spiceTLS = p->l;
+    GET_VALUE_LONG("security_default_confined", driver->securityDefaultConfined);
+    GET_VALUE_LONG("security_require_confined", driver->securityRequireConfined);

-    p = virConfGetValue(conf, "spice_tls_x509_cert_dir");
-    CHECK_TYPE("spice_tls_x509_cert_dir", VIR_CONF_STRING);
-    if (p && p->str) {
-        VIR_FREE(driver->spiceTLSx509certdir);
-        if (!(driver->spiceTLSx509certdir = strdup(p->str))) {
-            virReportOOMError();
-            virConfFree(conf);
-            return -1;
-        }
-    }
+    GET_VALUE_LONG("spice_tls", driver->spiceTLS);
+    GET_VALUE_STR("spice_tls_x509_cert_dir", driver->spiceTLSx509certdir);
+    GET_VALUE_STR("spice_listen", driver->spiceListen);
+    GET_VALUE_STR("spice_password", driver->spicePassword);

-    p = virConfGetValue(conf, "spice_listen");
-    CHECK_TYPE("spice_listen", VIR_CONF_STRING);
-    if (p && p->str) {
-        VIR_FREE(driver->spiceListen);
-        if (!(driver->spiceListen = strdup(p->str))) {
-            virReportOOMError();
-            virConfFree(conf);
-            return -1;
-        }
-    }

-    p = virConfGetValue(conf, "spice_password");
-    CHECK_TYPE("spice_password", VIR_CONF_STRING);
-    if (p && p->str) {
-        VIR_FREE(driver->spicePassword);
-        if (!(driver->spicePassword = strdup(p->str))) {
-            virReportOOMError();
-            virConfFree(conf);
-            return -1;
-        }
-    }
-
-    p = virConfGetValue(conf, "remote_display_port_min");
-    CHECK_TYPE("remote_display_port_min", VIR_CONF_LONG);
-    if (p) {
-        if (p->l < QEMU_REMOTE_PORT_MIN) {
-            /* if the port is too low, we can't get the display name
-             * to tell to vnc (usually subtract 5900, e.g. localhost:1
-             * for port 5901) */
-            virReportError(VIR_ERR_INTERNAL_ERROR,
-                           _("%s: remote_display_port_min: port must be greater than or equal to %d"),
-                            filename, QEMU_REMOTE_PORT_MIN);
-            virConfFree(conf);
-            return -1;
-        }
-        driver->remotePortMin = p->l;
+    GET_VALUE_LONG("remote_display_port_min", driver->remotePortMin);
+    if (driver->remotePortMin < QEMU_REMOTE_PORT_MIN) {
+        /* if the port is too low, we can't get the display name
+         * to tell to vnc (usually subtract 5900, e.g. localhost:1
+         * for port 5901) */
+        virReportError(VIR_ERR_INTERNAL_ERROR,
+                       _("%s: remote_display_port_min: port must be greater "
+                         "than or equal to %d"),
+                        filename, QEMU_REMOTE_PORT_MIN);
+        virConfFree(conf);
+        return -1;
     }

-    p = virConfGetValue(conf, "remote_display_port_max");
-    CHECK_TYPE("remote_display_port_max", VIR_CONF_LONG);
-    if (p) {
-        if (p->l > QEMU_REMOTE_PORT_MAX ||
-            p->l < driver->remotePortMin) {
-            virReportError(VIR_ERR_INTERNAL_ERROR,
-                            _("%s: remote_display_port_max: port must be between the minimal port and %d"),
-                            filename, QEMU_REMOTE_PORT_MAX);
-            virConfFree(conf);
-            return -1;
-        }
-        /* increasing the value by 1 makes all the loops going through
-        the bitmap (i = remotePortMin; i < remotePortMax; i++), work as
-        expected. */
-        driver->remotePortMax = p->l + 1;
+    GET_VALUE_LONG("remote_display_port_max", driver->remotePortMax);
+    if (driver->remotePortMax > QEMU_REMOTE_PORT_MAX ||
+        driver->remotePortMax < driver->remotePortMin) {
+        virReportError(VIR_ERR_INTERNAL_ERROR,
+                        _("%s: remote_display_port_max: port must be between "
+                          "the minimal port and %d"),
+                       filename, QEMU_REMOTE_PORT_MAX);
+        virConfFree(conf);
+        return -1;
     }
+    /* increasing the value by 1 makes all the loops going through
+    the bitmap (i = remotePortMin; i < remotePortMax; i++), work as
+    expected. */
+    driver->remotePortMax += 1;

     if (driver->remotePortMin > driver->remotePortMax) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
-                        _("%s: remote_display_port_min: min port must not be greater than max port"),
-                        filename);
+                        _("%s: remote_display_port_min: min port must not be "
+                          "greater than max port"), filename);
         virConfFree(conf);
         return -1;
     }
@@ -371,11 +294,7 @@ int qemuLoadDriverConfig(virQEMUDriverPtr driver,
     }
     VIR_FREE(group);

-
-    p = virConfGetValue(conf, "dynamic_ownership");
-    CHECK_TYPE("dynamic_ownership", VIR_CONF_LONG);
-    if (p) driver->dynamicOwnership = p->l;
-
+    GET_VALUE_LONG("dynamic_ownership", driver->dynamicOwnership);

     p = virConfGetValue(conf, "cgroup_controllers");
     CHECK_TYPE("cgroup_controllers", VIR_CONF_LIST);
@@ -441,57 +360,13 @@ int qemuLoadDriverConfig(virQEMUDriverPtr driver,
         driver->cgroupDeviceACL[i] = NULL;
     }

-    p = virConfGetValue(conf, "save_image_format");
-    CHECK_TYPE("save_image_format", VIR_CONF_STRING);
-    if (p && p->str) {
-        VIR_FREE(driver->saveImageFormat);
-        if (!(driver->saveImageFormat = strdup(p->str))) {
-            virReportOOMError();
-            virConfFree(conf);
-            return -1;
-        }
-    }
-
-    p = virConfGetValue(conf, "dump_image_format");
-    CHECK_TYPE("dump_image_format", VIR_CONF_STRING);
-    if (p && p->str) {
-        VIR_FREE(driver->dumpImageFormat);
-        if (!(driver->dumpImageFormat = strdup(p->str))) {
-            virReportOOMError();
-            virConfFree(conf);
-            return -1;
-        }
-    }
-
-    p = virConfGetValue(conf, "auto_dump_path");
-    CHECK_TYPE("auto_dump_path", VIR_CONF_STRING);
-    if (p && p->str) {
-        VIR_FREE(driver->autoDumpPath);
-        if (!(driver->autoDumpPath = strdup(p->str))) {
-            virReportOOMError();
-            virConfFree(conf);
-            return -1;
-        }
-    }
-
-    p = virConfGetValue(conf, "auto_dump_bypass_cache");
-    CHECK_TYPE("auto_dump_bypass_cache", VIR_CONF_LONG);
-    if (p) driver->autoDumpBypassCache = true;
+    GET_VALUE_STR("save_image_format", driver->saveImageFormat);
+    GET_VALUE_STR("dump_image_format", driver->dumpImageFormat);
+    GET_VALUE_STR("auto_dump_path", driver->autoDumpPath);
+    GET_VALUE_LONG("auto_dump_bypass_cache", driver->autoDumpBypassCache);
+    GET_VALUE_LONG("auto_start_bypass_cache", driver->autoStartBypassCache);

-    p = virConfGetValue(conf, "auto_start_bypass_cache");
-    CHECK_TYPE("auto_start_bypass_cache", VIR_CONF_LONG);
-    if (p) driver->autoStartBypassCache = true;
-
-    p = virConfGetValue(conf, "hugetlbfs_mount");
-    CHECK_TYPE("hugetlbfs_mount", VIR_CONF_STRING);
-    if (p && p->str) {
-        VIR_FREE(driver->hugetlbfs_mount);
-        if (!(driver->hugetlbfs_mount = strdup(p->str))) {
-            virReportOOMError();
-            virConfFree(conf);
-            return -1;
-        }
-    }
+    GET_VALUE_STR("hugetlbfs_mount", driver->hugetlbfs_mount);

     p = virConfGetValue(conf, "mac_filter");
     CHECK_TYPE("mac_filter", VIR_CONF_LONG);
@@ -515,33 +390,12 @@ int qemuLoadDriverConfig(virQEMUDriverPtr driver,
         }
     }

-    p = virConfGetValue(conf, "relaxed_acs_check");
-    CHECK_TYPE("relaxed_acs_check", VIR_CONF_LONG);
-    if (p) driver->relaxedACS = p->l;
-
-    p = virConfGetValue(conf, "vnc_allow_host_audio");
-    CHECK_TYPE("vnc_allow_host_audio", VIR_CONF_LONG);
-    if (p) driver->vncAllowHostAudio = p->l;
-
-    p = virConfGetValue(conf, "clear_emulator_capabilities");
-    CHECK_TYPE("clear_emulator_capabilities", VIR_CONF_LONG);
-    if (p) driver->clearEmulatorCapabilities = p->l;
-
-    p = virConfGetValue(conf, "allow_disk_format_probing");
-    CHECK_TYPE("allow_disk_format_probing", VIR_CONF_LONG);
-    if (p) driver->allowDiskFormatProbing = p->l;
-
-    p = virConfGetValue(conf, "set_process_name");
-    CHECK_TYPE("set_process_name", VIR_CONF_LONG);
-    if (p) driver->setProcessName = p->l;
-
-    p = virConfGetValue(conf, "max_processes");
-    CHECK_TYPE("max_processes", VIR_CONF_LONG);
-    if (p) driver->maxProcesses = p->l;
-
-    p = virConfGetValue(conf, "max_files");
-    CHECK_TYPE("max_files", VIR_CONF_LONG);
-    if (p) driver->maxFiles = p->l;
+    GET_VALUE_LONG("relaxed_acs_check", driver->relaxedACS);
+    GET_VALUE_LONG("clear_emulator_capabilities", driver->clearEmulatorCapabilities);
+    GET_VALUE_LONG("allow_disk_format_probing", driver->allowDiskFormatProbing);
+    GET_VALUE_LONG("set_process_name", driver->setProcessName);
+    GET_VALUE_LONG("max_processes", driver->maxProcesses);
+    GET_VALUE_LONG("max_files", driver->maxFiles);

     p = virConfGetValue(conf, "lock_manager");
     CHECK_TYPE("lock_manager", VIR_CONF_STRING);
@@ -559,21 +413,10 @@ int qemuLoadDriverConfig(virQEMUDriverPtr driver,
         VIR_FREE(lockConf);
     }

-    p = virConfGetValue(conf, "max_queued");
-    CHECK_TYPE("max_queued", VIR_CONF_LONG);
-    if (p) driver->max_queued = p->l;
-
-    p = virConfGetValue(conf, "keepalive_interval");
-    CHECK_TYPE("keepalive_interval", VIR_CONF_LONG);
-    if (p) driver->keepAliveInterval = p->l;
-
-    p = virConfGetValue(conf, "keepalive_count");
-    CHECK_TYPE("keepalive_count", VIR_CONF_LONG);
-    if (p) driver->keepAliveCount = p->l;
-
-    p = virConfGetValue(conf, "seccomp_sandbox");
-    CHECK_TYPE("seccomp_sandbox", VIR_CONF_LONG);
-    if (p) driver->seccompSandbox = p->l;
+    GET_VALUE_LONG("max_queued", driver->max_queued);
+    GET_VALUE_LONG("keepalive_interval", driver->keepAliveInterval);
+    GET_VALUE_LONG("keepalive_count", driver->keepAliveCount);
+    GET_VALUE_LONG("seccomp_sandbox", driver->seccompSandbox);

     virConfFree(conf);
     return 0;
-- 
1.8.0




More information about the libvir-list mailing list