]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: move monitor device out of domain_conf common code
authorEric Blake <eblake@redhat.com>
Fri, 7 Jan 2011 23:36:25 +0000 (16:36 -0700)
committerEric Blake <eblake@redhat.com>
Fri, 14 Jan 2011 16:54:26 +0000 (09:54 -0700)
* src/conf/domain_conf.h (virDomainChrDeviceType): Drop monitor.
* src/conf/domain_conf.c (virDomainChrDevice)
(virDomainChrDefParseTargetXML, virDomainChrDefFormat): Drop
monitor support.
* src/qemu/qemu_command.h (qemuBuildCommandLine): Alter signature.
* src/qemu/qemu_monitor.h (qemuMonitorOpen): Likewise.
* src/qemu/qemu_domain.h (_qemuDomainObjPrivate): Change type of
monConfig.
* src/qemu/qemu_domain.c (qemuDomainObjPrivateFree)
(qemuDomainObjPrivateXMLFormat, qemuDomainObjPrivateXMLParse):
Adjust to type change.
* src/qemu/qemu_command.c (qemuBuildCommandLine): Likewise.
* src/qemu/qemu_driver.c (qemuPrepareMonitorChr)
(qemudStartVMDaemon, qemuDomainXMLToNative, qemuConnectMonitor)
(qemudShutdownVMDaemon): Likewise.
* src/qemu/qemu_hotplug.c (qemuDomainAttachNetDevice): Likewise.
* src/qemu/qemu_monitor.c (qemuMonitorOpen): Likewise.
* tests/qemuxml2argvtest.c (testCompareXMLToArgvFiles): Likewise.

src/conf/domain_conf.c
src/conf/domain_conf.h
src/qemu/qemu_command.c
src/qemu/qemu_command.h
src/qemu/qemu_domain.c
src/qemu/qemu_domain.h
src/qemu/qemu_driver.c
src/qemu/qemu_hotplug.c
src/qemu/qemu_monitor.c
src/qemu/qemu_monitor.h
tests/qemuxml2argvtest.c

index 0ab2e024ed7e2c663e9988b98b8937ca75025753..674eddbe911c6e72deeee45b5961fa4cf6a1448d 100644 (file)
@@ -198,7 +198,6 @@ VIR_ENUM_IMPL(virDomainChrConsoleTarget,
               "virtio")
 
 VIR_ENUM_IMPL(virDomainChrDevice, VIR_DOMAIN_CHR_DEVICE_TYPE_LAST,
-              "monitor",
               "parallel",
               "serial",
               "console",
@@ -2746,10 +2745,6 @@ virDomainChrDefParseTargetXML(virCapsPtr caps,
         }
         break;
 
-    case VIR_DOMAIN_CHR_DEVICE_TYPE_MONITOR:
-        /* Nothing to parse */
-        break;
-
     default:
         portStr = virXMLPropString(cur, "port");
         if (portStr == NULL) {
@@ -6514,10 +6509,6 @@ virDomainChrDefFormat(virBufferPtr buf,
         break;
     }
 
-    case VIR_DOMAIN_CHR_DEVICE_TYPE_MONITOR:
-        /* Nothing to format */
-        break;
-
     case VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE:
         virBufferVSprintf(buf,
                           "      <target type='%s' port='%d'/>\n",
index ebc725c4beac5da59e65dde658503120fddf084e..24b82b3691324679df137574b4d5294e3cdd1e76 100644 (file)
@@ -344,8 +344,7 @@ struct _virDomainNetDef {
 };
 
 enum virDomainChrDeviceType {
-    VIR_DOMAIN_CHR_DEVICE_TYPE_MONITOR = 0,
-    VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL,
+    VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL = 0,
     VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL,
     VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE,
     VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL,
index 6bc2f8eb7561c00548d395b341a70ebf9bb03913..205c303ca2bb018c928bd032615f43555c5d4d71 100644 (file)
@@ -2452,7 +2452,7 @@ virCommandPtr
 qemuBuildCommandLine(virConnectPtr conn,
                      struct qemud_driver *driver,
                      virDomainDefPtr def,
-                     virDomainChrDefPtr monitor_chr,
+                     virDomainChrSourceDefPtr monitor_chr,
                      bool monitor_json,
                      unsigned long long qemuCmdFlags,
                      const char *migrateFrom,
@@ -2734,8 +2734,7 @@ qemuBuildCommandLine(virConnectPtr conn,
         if (qemuCmdFlags & QEMUD_CMD_FLAG_CHARDEV) {
 
             virCommandAddArg(cmd, "-chardev");
-            if (!(chrdev = qemuBuildChrChardevStr(&monitor_chr->source,
-                                                  monitor_chr->info.alias)))
+            if (!(chrdev = qemuBuildChrChardevStr(monitor_chr, "monitor")))
                 goto error;
             virCommandAddArg(cmd, chrdev);
             VIR_FREE(chrdev);
@@ -2749,7 +2748,7 @@ qemuBuildCommandLine(virConnectPtr conn,
                 prefix = "control,";
 
             virCommandAddArg(cmd, "-monitor");
-            if (!(chrdev = qemuBuildChrArgStr(&monitor_chr->source, prefix)))
+            if (!(chrdev = qemuBuildChrArgStr(monitor_chr, prefix)))
                 goto error;
             virCommandAddArg(cmd, chrdev);
             VIR_FREE(chrdev);
index b84fa3a8b1d4a8a280e42d56f61faaccf24ab32b..b3adc22f27b8fb5b3fc31b464dd94de943c01bd0 100644 (file)
@@ -40,7 +40,7 @@
 virCommandPtr qemuBuildCommandLine(virConnectPtr conn,
                                    struct qemud_driver *driver,
                                    virDomainDefPtr def,
-                                   virDomainChrDefPtr monitor_chr,
+                                   virDomainChrSourceDefPtr monitor_chr,
                                    bool monitor_json,
                                    unsigned long long qemuCmdFlags,
                                    const char *migrateFrom,
index 48820bb40339238d5b1c4288a5b426d7c3975786..fa7c8bd16d1d9a97bf9316b219b77ed631e353c7 100644 (file)
@@ -56,7 +56,7 @@ static void qemuDomainObjPrivateFree(void *data)
     qemuDomainObjPrivatePtr priv = data;
 
     qemuDomainPCIAddressSetFree(priv->pciaddrs);
-    virDomainChrDefFree(priv->monConfig);
+    virDomainChrSourceDefFree(priv->monConfig);
     VIR_FREE(priv->vcpupids);
 
     /* This should never be non-NULL if we get here, but just in case... */
@@ -75,13 +75,13 @@ static int qemuDomainObjPrivateXMLFormat(virBufferPtr buf, void *data)
 
     /* priv->monitor_chr is set only for qemu */
     if (priv->monConfig) {
-        switch (priv->monConfig->source.type) {
+        switch (priv->monConfig->type) {
         case VIR_DOMAIN_CHR_TYPE_UNIX:
-            monitorpath = priv->monConfig->source.data.nix.path;
+            monitorpath = priv->monConfig->data.nix.path;
             break;
         default:
         case VIR_DOMAIN_CHR_TYPE_PTY:
-            monitorpath = priv->monConfig->source.data.file.path;
+            monitorpath = priv->monConfig->data.file.path;
             break;
         }
 
@@ -89,7 +89,7 @@ static int qemuDomainObjPrivateXMLFormat(virBufferPtr buf, void *data)
         if (priv->monJSON)
             virBufferAddLit(buf, " json='1'");
         virBufferVSprintf(buf, " type='%s'/>\n",
-                          virDomainChrTypeToString(priv->monConfig->source.type));
+                          virDomainChrTypeToString(priv->monConfig->type));
     }
 
 
@@ -118,11 +118,6 @@ static int qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, void *data)
         goto error;
     }
 
-    if (!(priv->monConfig->info.alias = strdup("monitor"))) {
-        virReportOOMError();
-        goto error;
-    }
-
     if (!(monitorpath =
           virXPathString("string(./monitor[1]/@path)", ctxt))) {
         qemuReportError(VIR_ERR_INTERNAL_ERROR,
@@ -132,9 +127,9 @@ static int qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, void *data)
 
     tmp = virXPathString("string(./monitor[1]/@type)", ctxt);
     if (tmp)
-        priv->monConfig->source.type = virDomainChrTypeFromString(tmp);
+        priv->monConfig->type = virDomainChrTypeFromString(tmp);
     else
-        priv->monConfig->source.type = VIR_DOMAIN_CHR_TYPE_PTY;
+        priv->monConfig->type = VIR_DOMAIN_CHR_TYPE_PTY;
     VIR_FREE(tmp);
 
     if (virXPathBoolean("count(./monitor[@json = '1']) > 0", ctxt)) {
@@ -143,18 +138,18 @@ static int qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, void *data)
         priv->monJSON = 0;
     }
 
-    switch (priv->monConfig->source.type) {
+    switch (priv->monConfig->type) {
     case VIR_DOMAIN_CHR_TYPE_PTY:
-        priv->monConfig->source.data.file.path = monitorpath;
+        priv->monConfig->data.file.path = monitorpath;
         break;
     case VIR_DOMAIN_CHR_TYPE_UNIX:
-        priv->monConfig->source.data.nix.path = monitorpath;
+        priv->monConfig->data.nix.path = monitorpath;
         break;
     default:
         VIR_FREE(monitorpath);
         qemuReportError(VIR_ERR_INTERNAL_ERROR,
                         _("unsupported monitor type '%s'"),
-                        virDomainChrTypeToString(priv->monConfig->source.type));
+                        virDomainChrTypeToString(priv->monConfig->type));
         goto error;
     }
 
@@ -185,7 +180,7 @@ static int qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, void *data)
     return 0;
 
 error:
-    virDomainChrDefFree(priv->monConfig);
+    virDomainChrSourceDefFree(priv->monConfig);
     priv->monConfig = NULL;
     VIR_FREE(nodes);
     return -1;
index 870a900c9d52198beb32ce8c2ad24e9f623addd3..f14fb7994cdb3a90ccb1e69424f91c0f7685ccd4 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * qemu_domain.h: QEMU domain private state
  *
- * Copyright (C) 2006-2007, 2009-2010 Red Hat, Inc.
+ * Copyright (C) 2006-2011 Red Hat, Inc.
  * Copyright (C) 2006 Daniel P. Berrange
  *
  * This library is free software; you can redistribute it and/or
@@ -65,7 +65,7 @@ struct _qemuDomainObjPrivate {
     unsigned long long jobStart;
 
     qemuMonitorPtr mon;
-    virDomainChrDefPtr monConfig;
+    virDomainChrSourceDefPtr monConfig;
     int monJSON;
     int monitor_warned;
     bool gotShutdown;
index 59f2c1459c6533bff290e7d178a80ac2342731ac..29b1d74296a29d60a05a7bb873db6d649cd89a0a 100644 (file)
@@ -2570,20 +2570,13 @@ static int qemudSecurityHook(void *data) {
 
 static int
 qemuPrepareMonitorChr(struct qemud_driver *driver,
-                      virDomainChrDefPtr monConfig,
+                      virDomainChrSourceDefPtr monConfig,
                       const char *vm)
 {
-    monConfig->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_MONITOR;
+    monConfig->type = VIR_DOMAIN_CHR_TYPE_UNIX;
+    monConfig->data.nix.listen = true;
 
-    monConfig->source.type = VIR_DOMAIN_CHR_TYPE_UNIX;
-    monConfig->source.data.nix.listen = true;
-
-    if (!(monConfig->info.alias = strdup("monitor"))) {
-        virReportOOMError();
-        return -1;
-    }
-
-    if (virAsprintf(&monConfig->source.data.nix.path, "%s/%s.monitor",
+    if (virAsprintf(&monConfig->data.nix.path, "%s/%s.monitor",
                     driver->libDir, vm) < 0) {
         virReportOOMError();
         return -1;
@@ -3018,9 +3011,9 @@ static void qemudShutdownVMDaemon(struct qemud_driver *driver,
         qemuMonitorClose(priv->mon);
 
     if (priv->monConfig) {
-        if (priv->monConfig->source.type == VIR_DOMAIN_CHR_TYPE_UNIX)
-            unlink(priv->monConfig->source.data.nix.path);
-        virDomainChrDefFree(priv->monConfig);
+        if (priv->monConfig->type == VIR_DOMAIN_CHR_TYPE_UNIX)
+            unlink(priv->monConfig->data.nix.path);
+        virDomainChrSourceDefFree(priv->monConfig);
         priv->monConfig = NULL;
     }
 
@@ -6030,7 +6023,7 @@ static char *qemuDomainXMLToNative(virConnectPtr conn,
                                    unsigned int flags ATTRIBUTE_UNUSED) {
     struct qemud_driver *driver = conn->privateData;
     virDomainDefPtr def = NULL;
-    virDomainChrDef monConfig;
+    virDomainChrSourceDef monConfig;
     unsigned long long qemuCmdFlags;
     virCommandPtr cmd = NULL;
     char *ret = NULL;
index b40150d8d6c7607a219d835bc57df0c40c89dbf9..9d6697ee678eff67758139dee2352dbe74f5d68d 100644 (file)
@@ -567,7 +567,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn,
 
     if (net->type == VIR_DOMAIN_NET_TYPE_BRIDGE ||
         net->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
-        if (priv->monConfig->source.type != VIR_DOMAIN_CHR_TYPE_UNIX) {
+        if (priv->monConfig->type != VIR_DOMAIN_CHR_TYPE_UNIX) {
             qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                             _("network device type '%s' cannot be attached: "
                               "qemu is not using a unix socket monitor"),
@@ -578,7 +578,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn,
         if ((tapfd = qemuNetworkIfaceConnect(conn, driver, net, qemuCmdFlags)) < 0)
             return -1;
     } else if (net->type == VIR_DOMAIN_NET_TYPE_DIRECT) {
-        if (priv->monConfig->source.type != VIR_DOMAIN_CHR_TYPE_UNIX) {
+        if (priv->monConfig->type != VIR_DOMAIN_CHR_TYPE_UNIX) {
             qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                             _("network device type '%s' cannot be attached: "
                             "qemu is not using a unix socket monitor"),
index cc8b374aa626ca640742f6534ab966fa4f29b8ba..055e7cee70f83cad4b3350a0b922a35c47d07aa7 100644 (file)
@@ -588,7 +588,7 @@ qemuMonitorIO(int watch, int fd, int events, void *opaque) {
 
 qemuMonitorPtr
 qemuMonitorOpen(virDomainObjPtr vm,
-                virDomainChrDefPtr config,
+                virDomainChrSourceDefPtr config,
                 int json,
                 qemuMonitorCallbacksPtr cb)
 {
@@ -625,20 +625,20 @@ qemuMonitorOpen(virDomainObjPtr vm,
     mon->cb = cb;
     qemuMonitorLock(mon);
 
-    switch (config->source.type) {
+    switch (config->type) {
     case VIR_DOMAIN_CHR_TYPE_UNIX:
         mon->hasSendFD = 1;
-        mon->fd = qemuMonitorOpenUnix(config->source.data.nix.path);
+        mon->fd = qemuMonitorOpenUnix(config->data.nix.path);
         break;
 
     case VIR_DOMAIN_CHR_TYPE_PTY:
-        mon->fd = qemuMonitorOpenPty(config->source.data.file.path);
+        mon->fd = qemuMonitorOpenPty(config->data.file.path);
         break;
 
     default:
         qemuReportError(VIR_ERR_INTERNAL_ERROR,
                         _("unable to handle monitor type: %s"),
-                        virDomainChrTypeToString(config->source.type));
+                        virDomainChrTypeToString(config->type));
         goto cleanup;
     }
 
index 3ac5024c68a6b252430d23a08270601fb20065a1..718ea135bf751c4dba832f9c1c66c39e8b6511b8 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * qemu_monitor.h: interaction with QEMU monitor console
  *
- * Copyright (C) 2006-2010 Red Hat, Inc.
+ * Copyright (C) 2006-2011 Red Hat, Inc.
  * Copyright (C) 2006 Daniel P. Berrange
  *
  * This library is free software; you can redistribute it and/or
@@ -119,7 +119,7 @@ char *qemuMonitorEscapeArg(const char *in);
 char *qemuMonitorEscapeShell(const char *in);
 
 qemuMonitorPtr qemuMonitorOpen(virDomainObjPtr vm,
-                               virDomainChrDefPtr config,
+                               virDomainChrSourceDefPtr config,
                                int json,
                                qemuMonitorCallbacksPtr cb);
 
index 7e3ce2e09c4aa431a891a1d312e0d7248ff8cbbe..d7951df970cc57a87ba9655b4ce8878d3907e3d7 100644 (file)
@@ -39,7 +39,7 @@ static int testCompareXMLToArgvFiles(const char *xml,
     int ret = -1;
     unsigned long long flags;
     virDomainDefPtr vmdef = NULL;
-    virDomainChrDef monitor_chr;
+    virDomainChrSourceDef monitor_chr;
     virConnectPtr conn;
     char *log = NULL;
     char *emulator = NULL;
@@ -84,10 +84,9 @@ static int testCompareXMLToArgvFiles(const char *xml,
         vmdef->id = -1;
 
     memset(&monitor_chr, 0, sizeof(monitor_chr));
-    monitor_chr.source.type = VIR_DOMAIN_CHR_TYPE_UNIX;
-    monitor_chr.source.data.nix.path = (char *)"/tmp/test-monitor";
-    monitor_chr.source.data.nix.listen = true;
-    monitor_chr.info.alias = (char *)"monitor";
+    monitor_chr.type = VIR_DOMAIN_CHR_TYPE_UNIX;
+    monitor_chr.data.nix.path = (char *)"/tmp/test-monitor";
+    monitor_chr.data.nix.listen = true;
 
     flags = QEMUD_CMD_FLAG_VNC_COLON |
         QEMUD_CMD_FLAG_NO_REBOOT |