Re: [libvirt] [PATCH 2/2] Add support for legacy QEMU's -vmchannel command line option

2009-11-04 Thread Richard W.M. Jones
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

2009-11-04 Thread Matthew Booth

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

2009-11-04 Thread Dan Kenigsberg
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

2009-11-03 Thread Matthew Booth
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