]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: add xen type for channels
authorJoao Martins <joao.m.martins@oracle.com>
Mon, 26 Sep 2016 17:33:15 +0000 (18:33 +0100)
committerJim Fehlig <jfehlig@suse.com>
Tue, 27 Sep 2016 21:15:03 +0000 (15:15 -0600)
So far only guestfwd and virtio were supported. Add an additional
for Xen as libxl channels create a Xen console visible to the guest.

Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
docs/formatdomain.html.in
docs/schemas/domaincommon.rng
src/conf/domain_conf.c
src/conf/domain_conf.h
src/qemu/qemu_command.c

index f48a4d8b813f0365912854232a4e4ad06abf0708..7008005267add1cc71436515d7c329c60020f4d7 100644 (file)
@@ -5980,6 +5980,16 @@ qemu-kvm -net nic,model=? /dev/null
         Possible values for the <code>state</code> attribute are
         <code>connected</code> and <code>disconnected</code>.
       </dd>
+      <dt><code>xen</code></dt>
+      <dd> Paravirtualized Xen channel. Channel is exposed in the guest as a
+        Xen console but identified with a name. Setup and consumption of a Xen
+        channel depends on software and configuration in the guest
+        (for more info, please see <a href="http://xenbits.xen.org/docs/unstable/misc/channel.txt">http://xenbits.xen.org/docs/unstable/misc/channel.txt</a>).
+        Channel source path semantics are the same as the virtio target type.
+        The <code>state</code> attribute is not supported since Xen channels
+        lack the necessary probing mechanism.
+        <span class="since">Since 2.3.0</span>
+      </dd>
       <dt><code>spicevmc</code></dt>
       <dd>Paravirtualized SPICE channel. The domain must also have a
         SPICE server as a <a href="#elementsGraphics">graphics
index 95c7882cb73dbc2f54495a95e2c5d55aa74cdd18..6eeb4e9e7df064087790b97421f9c2dda6720b9e 100644 (file)
       </optional>
     </element>
   </define>
+  <define name="xenTarget">
+    <element name="target">
+      <attribute name="type">
+        <value>xen</value>
+      </attribute>
+      <optional>
+        <attribute name="name"/>
+      </optional>
+    </element>
+  </define>
   <define name="channel">
     <element name="channel">
       <ref name="qemucdevSrcType"/>
         <choice>
           <ref name="guestfwdTarget"/>
           <ref name="virtioTarget"/>
+          <ref name="xenTarget"/>
         </choice>
         <optional>
           <ref name="alias"/>
index a06da46fabe489b7d9817b1852e03eca2517519f..7972a4eac2bd71fba0d645d0d79843d0f012b2c9 100644 (file)
@@ -434,7 +434,8 @@ VIR_ENUM_IMPL(virDomainChrChannelTarget,
               VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_LAST,
               "none",
               "guestfwd",
-              "virtio")
+              "virtio",
+              "xen")
 
 VIR_ENUM_IMPL(virDomainChrConsoleTarget,
               VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_LAST,
@@ -2068,6 +2069,7 @@ void virDomainChrDefFree(virDomainChrDefPtr def)
             VIR_FREE(def->target.addr);
             break;
 
+        case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_XEN:
         case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO:
             VIR_FREE(def->target.name);
             break;
@@ -9923,10 +9925,12 @@ virDomainChrDefParseTargetXML(virDomainChrDefPtr def,
             virSocketAddrSetPort(def->target.addr, port);
             break;
 
+        case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_XEN:
         case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO:
             def->target.name = virXMLPropString(cur, "name");
 
-            if (!(flags & VIR_DOMAIN_DEF_PARSE_INACTIVE) &&
+            if (def->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO &&
+                !(flags & VIR_DOMAIN_DEF_PARSE_INACTIVE) &&
                 (stateStr = virXMLPropString(cur, "state"))) {
                 int tmp;
 
@@ -10217,7 +10221,8 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
         /* path can be auto generated */
         if (!path &&
             (!chr_def ||
-             chr_def->targetType != VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO)) {
+             (chr_def->targetType != VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_XEN &&
+              chr_def->targetType != VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO))) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                            _("Missing source path attribute for char device"));
             goto error;
@@ -14417,6 +14422,7 @@ virDomainChrEquals(virDomainChrDefPtr src,
         if (src->targetType != tgt->targetType)
             return false;
         switch ((virDomainChrChannelTargetType) src->targetType) {
+        case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_XEN:
         case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO:
             return STREQ_NULLABLE(src->target.name, tgt->target.name);
             break;
@@ -18434,6 +18440,8 @@ virDomainChannelDefCheckABIStability(virDomainChrDefPtr src,
     }
 
     switch (src->targetType) {
+
+    case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_XEN:
     case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO:
         if (STRNEQ_NULLABLE(src->target.name, dst->target.name)) {
             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
@@ -21556,11 +21564,13 @@ virDomainChrDefFormat(virBufferPtr buf,
             break;
         }
 
+        case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_XEN:
         case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO:
             if (def->target.name)
                 virBufferEscapeString(buf, " name='%s'", def->target.name);
 
-            if (def->state != VIR_DOMAIN_CHR_DEVICE_STATE_DEFAULT &&
+            if (def->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO &&
+                def->state != VIR_DOMAIN_CHR_DEVICE_STATE_DEFAULT &&
                 !(flags & VIR_DOMAIN_DEF_PARSE_INACTIVE)) {
                 virBufferAsprintf(buf, " state='%s'",
                                   virDomainChrDeviceStateTypeToString(def->state));
index d2065cf3edeac790c9a7d1a0dd51f780367ece3e..561a179e63dacb1260e544395cbe15f4e0f56bda 100644 (file)
@@ -1021,6 +1021,7 @@ typedef enum {
     VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_NONE = 0,
     VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_GUESTFWD,
     VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO,
+    VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_XEN,
 
     VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_LAST
 } virDomainChrChannelTargetType;
index f24a98bc76fd6472a230bfee3f4f9b588f282893..29f0c3b1870880b01fdbd211cac88ada19024730 100644 (file)
@@ -9719,6 +9719,7 @@ qemuBuildChannelChrDeviceStr(char **deviceStr,
             goto cleanup;
         break;
 
+    case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_XEN:
     case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_NONE:
     case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_LAST:
         return ret;