Re: [libvirt] [PATCH 2/2] Add support for legacy QEMU's -vmchannel command line option
On Tue, Nov 03, 2009 at 04:11:48PM +, Matthew Booth wrote: This patch allows the following to be specified in a qemu domain: The patch looks sensible. What would be the problem with merging this functionality into libvirt? It seems it could be useful for someone supporting a RHEL 5 hypervisor. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones virt-p2v converts physical machines to virtual machines. Boot with a live CD or over the network (PXE) and turn machines into Xen guests. http://et.redhat.com/~rjones/virt-p2v -- Libvir-list mailing list Libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 2/2] Add support for legacy QEMU's -vmchannel command line option
On 04/11/09 11:30, Richard W.M. Jones wrote: On Tue, Nov 03, 2009 at 04:11:48PM +, Matthew Booth wrote: This patch allows the following to be specified in a qemu domain: The patch looks sensible. What would be the problem with merging this functionality into libvirt? It seems it could be useful for someone supporting a RHEL 5 hypervisor. They'd have to be running new libvirt on RHEL 5, which doesn't sound like a likely combination. If the -vmchannel command line option is likely to live on beyond RHEL 5, though, I guess it might make sense to merge this. Matt -- Matthew Booth, RHCA, RHCSS Red Hat Engineering, Virtualisation Team M: +44 (0)7977 267231 GPG ID: D33C3490 GPG FPR: 3733 612D 2D05 5458 8A8A 1600 3441 EA19 D33C 3490 -- Libvir-list mailing list Libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 2/2] Add support for legacy QEMU's -vmchannel command line option
On Tue, Nov 03, 2009 at 04:11:48PM +, Matthew Booth wrote: This patch allows the following to be specified in a qemu domain: channel type='unix' source mode='bind' path='/tmp/vmchannel'/ target type='vmchannel' deviceid='0200'/ /channel This will output the following on the qemu command line: -vmchannel di:0200,unix:/tmp/vmchannel,server,nowait * docs/schemas/domain.rng: Add syntax for vmchannel channel type * src/conf/domain_conf.[ch]: Add domain xml support for vmchannel chrdev target * src/qemu/qemu_conf.c: Add qemu support for vmchannel chrdev target * tests/qemuxml2argvtest.c: Add test for vmchannel channel type * tests/qemuxml2xmltest.c: Add test for vmchannel channel type --- docs/schemas/domain.rng| 13 +++- src/conf/domain_conf.c | 32 ++- src/conf/domain_conf.h |2 + src/qemu/qemu_conf.c | 22 + .../qemuxml2argv-channel-vmchannel.args|1 + .../qemuxml2argv-channel-vmchannel.xml | 26 tests/qemuxml2argvtest.c |1 + tests/qemuxml2xmltest.c|2 + 8 files changed, 96 insertions(+), 3 deletions(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-channel-vmchannel.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-channel-vmchannel.xml diff --git a/docs/schemas/domain.rng b/docs/schemas/domain.rng index b75f17e..39a19ae 100644 --- a/docs/schemas/domain.rng +++ b/docs/schemas/domain.rng @@ -1059,12 +1059,23 @@ attribute name=port/ /element /define + define name=vmchannelTarget +element name=target +attribute name=type +valuevmchannel/value +/attribute +attribute name=deviceid/ +/element + /define define name=channel element name=channel ref name=qemucdevSrcType/ interleave ref name=qemucdevSrcDef/ -ref name=guestfwdTarget/ +choice + ref name=guestfwdTarget/ + ref name=vmchannelTarget/ +/choice /interleave /element /define diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 4689bac..376cb3b 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -134,7 +134,8 @@ VIR_ENUM_IMPL(virDomainChrTarget, VIR_DOMAIN_CHR_TARGET_TYPE_LAST, parallel, serial, console, - guestfwd) + guestfwd, + vmchannel) VIR_ENUM_IMPL(virDomainChr, VIR_DOMAIN_CHR_TYPE_LAST, null, @@ -1349,6 +1350,7 @@ virDomainChrDefParseXML(virConnectPtr conn, const char *targetType = NULL; const char *addrStr = NULL; const char *portStr = NULL; +const char *deviceidStr = NULL; virDomainChrDefPtr def; if (VIR_ALLOC(def) 0) { @@ -1497,6 +1499,26 @@ virDomainChrDefParseXML(virConnectPtr conn, virSocketSetPort(def-target.addr, port); break; +case VIR_DOMAIN_CHR_TARGET_TYPE_VMCHANNEL: +deviceidStr = virXMLPropString(cur, deviceid); + +if(deviceidStr == NULL) { +virDomainReportError(conn, VIR_ERR_INVALID_DOMAIN, + _(vmchannel channel does not + define a device id)); +goto error; +} + +unsigned int deviceid; +if(virStrToLong_ui(deviceidStr, NULL, 16, deviceid) 0) { +virDomainReportError(conn, VIR_ERR_INVALID_DOMAIN, + _(Invalid device id: %s), + deviceidStr); +goto error; +} +def-target.deviceid = deviceid; +break; + default: virDomainReportError(conn, VIR_ERR_INVALID_DOMAIN, _(unexpected target type type %u), @@ -1507,7 +1529,6 @@ virDomainChrDefParseXML(virConnectPtr conn, cur = cur-next; } - switch (def-type) { case VIR_DOMAIN_CHR_TYPE_NULL: /* Nada */ @@ -1634,6 +1655,7 @@ cleanup: VIR_FREE(targetType); VIR_FREE(addrStr); VIR_FREE(portStr); +VIR_FREE(deviceidStr); return def; @@ -4118,6 +4140,7 @@ virDomainChrDefFormat(virConnectPtr conn, switch (def-targetType) { /* channel types are in a common channel element */ case VIR_DOMAIN_CHR_TARGET_TYPE_GUESTFWD: +case VIR_DOMAIN_CHR_TARGET_TYPE_VMCHANNEL: elementName = channel; break; @@ -4230,6 +4253,11 @@
[libvirt] [PATCH 2/2] Add support for legacy QEMU's -vmchannel command line option
This patch allows the following to be specified in a qemu domain: channel type='unix' source mode='bind' path='/tmp/vmchannel'/ target type='vmchannel' deviceid='0200'/ /channel This will output the following on the qemu command line: -vmchannel di:0200,unix:/tmp/vmchannel,server,nowait * docs/schemas/domain.rng: Add syntax for vmchannel channel type * src/conf/domain_conf.[ch]: Add domain xml support for vmchannel chrdev target * src/qemu/qemu_conf.c: Add qemu support for vmchannel chrdev target * tests/qemuxml2argvtest.c: Add test for vmchannel channel type * tests/qemuxml2xmltest.c: Add test for vmchannel channel type --- docs/schemas/domain.rng| 13 +++- src/conf/domain_conf.c | 32 ++- src/conf/domain_conf.h |2 + src/qemu/qemu_conf.c | 22 + .../qemuxml2argv-channel-vmchannel.args|1 + .../qemuxml2argv-channel-vmchannel.xml | 26 tests/qemuxml2argvtest.c |1 + tests/qemuxml2xmltest.c|2 + 8 files changed, 96 insertions(+), 3 deletions(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-channel-vmchannel.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-channel-vmchannel.xml diff --git a/docs/schemas/domain.rng b/docs/schemas/domain.rng index b75f17e..39a19ae 100644 --- a/docs/schemas/domain.rng +++ b/docs/schemas/domain.rng @@ -1059,12 +1059,23 @@ attribute name=port/ /element /define + define name=vmchannelTarget +element name=target +attribute name=type +valuevmchannel/value +/attribute +attribute name=deviceid/ +/element + /define define name=channel element name=channel ref name=qemucdevSrcType/ interleave ref name=qemucdevSrcDef/ -ref name=guestfwdTarget/ +choice + ref name=guestfwdTarget/ + ref name=vmchannelTarget/ +/choice /interleave /element /define diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 4689bac..376cb3b 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -134,7 +134,8 @@ VIR_ENUM_IMPL(virDomainChrTarget, VIR_DOMAIN_CHR_TARGET_TYPE_LAST, parallel, serial, console, - guestfwd) + guestfwd, + vmchannel) VIR_ENUM_IMPL(virDomainChr, VIR_DOMAIN_CHR_TYPE_LAST, null, @@ -1349,6 +1350,7 @@ virDomainChrDefParseXML(virConnectPtr conn, const char *targetType = NULL; const char *addrStr = NULL; const char *portStr = NULL; +const char *deviceidStr = NULL; virDomainChrDefPtr def; if (VIR_ALLOC(def) 0) { @@ -1497,6 +1499,26 @@ virDomainChrDefParseXML(virConnectPtr conn, virSocketSetPort(def-target.addr, port); break; +case VIR_DOMAIN_CHR_TARGET_TYPE_VMCHANNEL: +deviceidStr = virXMLPropString(cur, deviceid); + +if(deviceidStr == NULL) { +virDomainReportError(conn, VIR_ERR_INVALID_DOMAIN, + _(vmchannel channel does not + define a device id)); +goto error; +} + +unsigned int deviceid; +if(virStrToLong_ui(deviceidStr, NULL, 16, deviceid) 0) { +virDomainReportError(conn, VIR_ERR_INVALID_DOMAIN, + _(Invalid device id: %s), + deviceidStr); +goto error; +} +def-target.deviceid = deviceid; +break; + default: virDomainReportError(conn, VIR_ERR_INVALID_DOMAIN, _(unexpected target type type %u), @@ -1507,7 +1529,6 @@ virDomainChrDefParseXML(virConnectPtr conn, cur = cur-next; } - switch (def-type) { case VIR_DOMAIN_CHR_TYPE_NULL: /* Nada */ @@ -1634,6 +1655,7 @@ cleanup: VIR_FREE(targetType); VIR_FREE(addrStr); VIR_FREE(portStr); +VIR_FREE(deviceidStr); return def; @@ -4118,6 +4140,7 @@ virDomainChrDefFormat(virConnectPtr conn, switch (def-targetType) { /* channel types are in a common channel element */ case VIR_DOMAIN_CHR_TARGET_TYPE_GUESTFWD: +case VIR_DOMAIN_CHR_TARGET_TYPE_VMCHANNEL: elementName = channel; break; @@ -4230,6 +4253,11 @@ virDomainChrDefFormat(virConnectPtr conn, addr, port); break; +case VIR_DOMAIN_CHR_TARGET_TYPE_VMCHANNEL: +virBufferVSprintf(buf, target