On 09/19/2016 11:29 PM, Jim Fehlig wrote: > On 09/16/2016 05:43 PM, Joao Martins wrote: >> So far only guestfwd and virtio were supported. Add an additional >> for Xen as libxl channels create Xen console visible to the guest. >> >> Signed-off-by: Joao Martins <joao.m.martins@xxxxxxxxxx> >> --- >> docs/schemas/domaincommon.rng | 11 +++++++++++ >> src/conf/domain_conf.c | 18 ++++++++++++++---- >> src/conf/domain_conf.h | 1 + >> src/qemu/qemu_command.c | 1 + >> 4 files changed, 27 insertions(+), 4 deletions(-) >> >> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng >> index 8aaa67e..5901452 100644 >> --- a/docs/schemas/domaincommon.rng >> +++ b/docs/schemas/domaincommon.rng >> @@ -3686,6 +3686,16 @@ >> </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"/> >> @@ -3694,6 +3704,7 @@ >> <choice> >> <ref name="guestfwdTarget"/> >> <ref name="virtioTarget"/> >> + <ref name="xenTarget"/> >> </choice> >> <optional> >> <ref name="alias"/> >> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c >> index 0828041..196799d 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; >> @@ -9877,10 +9879,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; > > I guess we'll need an answer to your question about the 'state' attribute to > know if this is needed. Based in the earlier discussion with Michal I guess this can stay as it is? >> @@ -10171,7 +10175,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; >> @@ -14373,6 +14378,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; >> @@ -18310,6 +18316,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, >> @@ -21432,11 +21440,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)); > > Same here. > Looks good otherwise. Cool! Joao -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list