On 01/22/2015 07:16 AM, John Ferlan wrote:

On 12/09/2014 01:48 AM, Luyao Huang wrote:
Add a func just check the base target type which
qemu support. But i still doubt this will be useful
, we already have a check when we try to start the
vm. And this check only check the target type, and
the other things will be done in virDomainChrDefParseXML.

Signed-off-by: Luyao Huang <lhu...@redhat.com>
---
  src/qemu/qemu_hotplug.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++
  1 file changed, 64 insertions(+)

I forgot to add that this didn't build without:

--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -145,6 +145,8 @@ virDomainBlockedReasonTypeFromString;
  virDomainBlockedReasonTypeToString;
  virDomainCapabilitiesPolicyTypeToString;
  virDomainCapsFeatureTypeToString;
+virDomainChrChannelTargetTypeFromString;
+virDomainChrChannelTargetTypeToString;
  virDomainChrConsoleTargetTypeFromString;
  virDomainChrConsoleTargetTypeToString;
  virDomainChrDefForeach;


Since it seems you'll be resending your patches, I'll wait for your
patches before proceeding1...

Thanks a lot for pointing out, I will add these code in next version.
John
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index b9a0cee..fe91ec7 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -1384,10 +1384,74 @@ int qemuDomainAttachRedirdevDevice(virQEMUDriverPtr 
driver,
} +static int
+qemuDomainChrCheckDefSupport(virDomainChrDefPtr chr)
+{
+    int ret = -1;
+
+    switch (chr->deviceType) {
+    case VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL:
+        switch ((virDomainChrSerialTargetType) chr->targetType) {
+        case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_ISA:
+        case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_USB:
+            ret = 0;
+            break;
+
+        default:
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("unsupported serial target type %s for qemu"),
+                           
NULLSTR(virDomainChrSerialTargetTypeToString(chr->targetType)));
+            break;
+        }
+        break;
+
+    case VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL:
+        ret = 0;
+        break;
+
+    case VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL:
+        switch ((virDomainChrChannelTargetType) chr->targetType) {
+        case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_GUESTFWD:
+        case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO:
+            ret = 0;
+            break;
+
+        default:
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("unsupported channel target type %s for qemu"),
+                           
NULLSTR(virDomainChrChannelTargetTypeToString(chr->targetType)));
+            break;
+        }
+        break;
+
+    case VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE:
+        switch ((virDomainChrConsoleTargetType) chr->targetType) {
+        case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL:
+        case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_VIRTIO:
+        case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SCLP:
+        case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SCLPLM:
+            ret = 0;
+            break;
+
+        default:
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("unsupported console target type %s for qemu"),
+                           
NULLSTR(virDomainChrConsoleTargetTypeToString(chr->targetType)));
+            break;
+        }
+        break;
+    }
+
+    return ret;
+}
+
  int
  qemuDomainChrInsert(virDomainDefPtr vmdef,
                      virDomainChrDefPtr chr)
  {
+    if (qemuDomainChrCheckDefSupport(chr) < 0)
+        return -1;
+
      if (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE &&
          chr->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL) {
          virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",


Luyao

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to