From: Joao Martins Date: Mon, 26 Sep 2016 17:33:15 +0000 (+0100) Subject: conf: add xen type for channels X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=031abbc531941a79b7cd4709fbff835899b2d975;p=libvirt.git conf: add xen type for channels 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 Signed-off-by: Jim Fehlig --- diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index f48a4d8b81..7008005267 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -5980,6 +5980,16 @@ qemu-kvm -net nic,model=? /dev/null Possible values for the state attribute are connected and disconnected. +
xen
+
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 http://xenbits.xen.org/docs/unstable/misc/channel.txt). + Channel source path semantics are the same as the virtio target type. + The state attribute is not supported since Xen channels + lack the necessary probing mechanism. + Since 2.3.0 +
spicevmc
Paravirtualized SPICE channel. The domain must also have a SPICE server as a graphics diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 95c7882cb7..6eeb4e9e7d 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -3690,6 +3690,16 @@ + + + + xen + + + + + + @@ -3698,6 +3708,7 @@ + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index a06da46fab..7972a4eac2 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -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)); diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index d2065cf3ed..561a179e63 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -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; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index f24a98bc76..29f0c3b187 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -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;