[libvirt] [PATCH 1/5] domaincaps: Report graphics type enum

Cole Robinson crobinso at redhat.com
Sun May 8 17:49:04 UTC 2016


Requires adding the plumbing for <device><graphics>
Wire it up for qemu too
---
I stuck the <graphics> element between <disk> and <hostdev> to match
the ordering in <domain> XML

 docs/formatdomaincaps.html.in                      | 30 +++++++++++++++++++++-
 docs/schemas/domaincaps.rng                        |  8 ++++++
 src/conf/domain_capabilities.c                     | 13 ++++++++++
 src/conf/domain_capabilities.h                     |  8 ++++++
 src/qemu/qemu_capabilities.c                       | 22 +++++++++++++++-
 tests/domaincapsschemadata/domaincaps-basic.xml    |  1 +
 tests/domaincapsschemadata/domaincaps-full.xml     |  9 +++++++
 .../domaincaps-qemu_1.6.50-1.xml                   |  7 +++++
 .../domaincaps-qemu_2.6.0-1.xml                    |  7 +++++
 .../domaincaps-qemu_2.6.0-2.xml                    |  6 +++++
 .../domaincaps-qemu_2.6.0-3.xml                    |  6 +++++
 .../domaincaps-qemu_2.6.0-4.xml                    |  6 +++++
 .../domaincaps-qemu_2.6.0-5.xml                    |  6 +++++
 tests/domaincapstest.c                             |  4 +++
 14 files changed, 131 insertions(+), 2 deletions(-)

diff --git a/docs/formatdomaincaps.html.in b/docs/formatdomaincaps.html.in
index edbb948..52e4463 100644
--- a/docs/formatdomaincaps.html.in
+++ b/docs/formatdomaincaps.html.in
@@ -175,7 +175,7 @@
     <code>floppy</code>, or <code>lun</code>.</p>
 
     <h4><a name="elementsDisks">Hard drives, floppy disks, CDROMs</a></h4>
-    <p>Disk capabilities are exposed under <code>disk</code> element. For
+    <p>Disk capabilities are exposed under the <code>disk</code> element. For
     instance:</p>
 
 <pre>
@@ -216,6 +216,34 @@
       element for a <disk/>.</dd>
     </dl>
 
+
+    <h4><a name="elementsGraphics">Graphical framebuffers</a></h4>
+    <p>Graphics device capabilities are exposed under the
+    <code>graphics</code> element. For instance:</p>
+
+<pre>
+<domainCapabilities>
+  ...
+  <devices>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
+    ...
+  </devices>
+</domainCapabilities>
+</pre>
+
+    <dl>
+      <dt><code>type</code></dt>
+      <dd>Options for the <code>type</code> attribute of the <graphics/>
+      element.</dd>
+    </dl>
+
+
     <h4><a name="elementsHostDev">Host device assignment</a></h4>
     <p>Some host devices can be passed through to a guest (e.g. USB, PCI and
     SCSI). Well, only if the following is enabled:</p>
diff --git a/docs/schemas/domaincaps.rng b/docs/schemas/domaincaps.rng
index 0d2777b..3e82b57 100644
--- a/docs/schemas/domaincaps.rng
+++ b/docs/schemas/domaincaps.rng
@@ -72,6 +72,7 @@
     <element name='devices'>
       <interleave>
         <ref name='disk'/>
+        <ref name='graphics'/>
         <ref name='hostdev'/>
       </interleave>
     </element>
@@ -84,6 +85,13 @@
     </element>
   </define>
 
+  <define name='graphics'>
+    <element name='graphics'>
+      <ref name='supported'/>
+      <ref name='enum'/>
+    </element>
+  </define>
+
   <define name='hostdev'>
     <element name='hostdev'>
       <ref name='supported'/>
diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c
index eb880ae..232acd5 100644
--- a/src/conf/domain_capabilities.c
+++ b/src/conf/domain_capabilities.c
@@ -247,6 +247,18 @@ virDomainCapsDeviceDiskFormat(virBufferPtr buf,
 
 
 static void
+virDomainCapsDeviceGraphicsFormat(virBufferPtr buf,
+                                  virDomainCapsDeviceGraphicsPtr const graphics)
+{
+    FORMAT_PROLOGUE(graphics);
+
+    ENUM_PROCESS(graphics, type, virDomainGraphicsTypeToString);
+
+    FORMAT_EPILOGUE(graphics);
+}
+
+
+static void
 virDomainCapsDeviceHostdevFormat(virBufferPtr buf,
                                  virDomainCapsDeviceHostdevPtr const hostdev)
 {
@@ -314,6 +326,7 @@ virDomainCapsFormatInternal(virBufferPtr buf,
     virBufferAdjustIndent(buf, 2);
 
     virDomainCapsDeviceDiskFormat(buf, &caps->disk);
+    virDomainCapsDeviceGraphicsFormat(buf, &caps->graphics);
     virDomainCapsDeviceHostdevFormat(buf, &caps->hostdev);
 
     virBufferAdjustIndent(buf, -2);
diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h
index 95afe5e..545ada7 100644
--- a/src/conf/domain_capabilities.h
+++ b/src/conf/domain_capabilities.h
@@ -69,6 +69,13 @@ struct _virDomainCapsDeviceDisk {
     /* add new fields here */
 };
 
+typedef struct _virDomainCapsDeviceGraphics virDomainCapsDeviceGraphics;
+typedef virDomainCapsDeviceGraphics *virDomainCapsDeviceGraphicsPtr;
+struct _virDomainCapsDeviceGraphics {
+    bool supported;
+    virDomainCapsEnum type;   /* virDomainGraphicsType */
+};
+
 typedef struct _virDomainCapsDeviceHostdev virDomainCapsDeviceHostdev;
 typedef virDomainCapsDeviceHostdev *virDomainCapsDeviceHostdevPtr;
 struct _virDomainCapsDeviceHostdev {
@@ -101,6 +108,7 @@ struct _virDomainCaps {
 
     virDomainCapsOS os;
     virDomainCapsDeviceDisk disk;
+    virDomainCapsDeviceGraphics graphics;
     virDomainCapsDeviceHostdev hostdev;
     /* add new domain devices here */
 
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 30dc33a..c675f9f 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -4171,6 +4171,23 @@ virQEMUCapsFillDomainDeviceDiskCaps(virQEMUCapsPtr qemuCaps,
 
 
 static int
+virQEMUCapsFillDomainDeviceGraphicsCaps(virQEMUCapsPtr qemuCaps,
+                                        virDomainCapsDeviceGraphicsPtr dev)
+{
+    dev->supported = true;
+
+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SDL))
+        VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_SDL);
+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VNC))
+        VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_VNC);
+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE))
+        VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_SPICE);
+
+    return 0;
+}
+
+
+static int
 virQEMUCapsFillDomainDeviceHostdevCaps(virQEMUCapsPtr qemuCaps,
                                        virDomainCapsDeviceHostdevPtr hostdev)
 {
@@ -4281,13 +4298,16 @@ virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
     virDomainCapsOSPtr os = &domCaps->os;
     virDomainCapsDeviceDiskPtr disk = &domCaps->disk;
     virDomainCapsDeviceHostdevPtr hostdev = &domCaps->hostdev;
+    virDomainCapsDeviceGraphicsPtr graphics = &domCaps->graphics;
     int maxvcpus = virQEMUCapsGetMachineMaxCpus(qemuCaps, domCaps->machine);
 
     domCaps->maxvcpus = maxvcpus;
 
     if (virQEMUCapsFillDomainOSCaps(qemuCaps, os,
                                     loader, nloader) < 0 ||
-        virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps, domCaps->machine, disk) < 0 ||
+        virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps,
+                                            domCaps->machine, disk) < 0 ||
+        virQEMUCapsFillDomainDeviceGraphicsCaps(qemuCaps, graphics) < 0 ||
         virQEMUCapsFillDomainDeviceHostdevCaps(qemuCaps, hostdev) < 0 ||
         virQEMUCapsFillDomainFeatureGICCaps(qemuCaps, domCaps) < 0)
         return -1;
diff --git a/tests/domaincapsschemadata/domaincaps-basic.xml b/tests/domaincapsschemadata/domaincaps-basic.xml
index 6587d56..f0f0864 100644
--- a/tests/domaincapsschemadata/domaincaps-basic.xml
+++ b/tests/domaincapsschemadata/domaincaps-basic.xml
@@ -6,6 +6,7 @@
   <os supported='no'/>
   <devices>
     <disk supported='no'/>
+    <graphics supported='no'/>
     <hostdev supported='no'/>
   </devices>
   <features>
diff --git a/tests/domaincapsschemadata/domaincaps-full.xml b/tests/domaincapsschemadata/domaincaps-full.xml
index d4f91fa..b3b8855 100644
--- a/tests/domaincapsschemadata/domaincaps-full.xml
+++ b/tests/domaincapsschemadata/domaincaps-full.xml
@@ -39,6 +39,15 @@
         <value>sd</value>
       </enum>
     </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>rdp</value>
+        <value>desktop</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
     <hostdev supported='yes'>
       <enum name='mode'>
         <value>subsystem</value>
diff --git a/tests/domaincapsschemadata/domaincaps-qemu_1.6.50-1.xml b/tests/domaincapsschemadata/domaincaps-qemu_1.6.50-1.xml
index 1e73ff1..147424d 100644
--- a/tests/domaincapsschemadata/domaincaps-qemu_1.6.50-1.xml
+++ b/tests/domaincapsschemadata/domaincaps-qemu_1.6.50-1.xml
@@ -34,6 +34,13 @@
         <value>usb</value>
       </enum>
     </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
     <hostdev supported='yes'>
       <enum name='mode'>
         <value>subsystem</value>
diff --git a/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-1.xml b/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-1.xml
index 244700a..f8f7465 100644
--- a/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-1.xml
+++ b/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-1.xml
@@ -34,6 +34,13 @@
         <value>usb</value>
       </enum>
     </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
     <hostdev supported='yes'>
       <enum name='mode'>
         <value>subsystem</value>
diff --git a/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-2.xml b/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-2.xml
index 411c6b7..7913703 100644
--- a/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-2.xml
+++ b/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-2.xml
@@ -34,6 +34,12 @@
         <value>usb</value>
       </enum>
     </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+      </enum>
+    </graphics>
     <hostdev supported='yes'>
       <enum name='mode'>
         <value>subsystem</value>
diff --git a/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-3.xml b/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-3.xml
index 21c59a8..6f30819 100644
--- a/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-3.xml
+++ b/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-3.xml
@@ -34,6 +34,12 @@
         <value>usb</value>
       </enum>
     </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+      </enum>
+    </graphics>
     <hostdev supported='yes'>
       <enum name='mode'>
         <value>subsystem</value>
diff --git a/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-4.xml b/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-4.xml
index c972d5e..6845e92 100644
--- a/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-4.xml
+++ b/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-4.xml
@@ -34,6 +34,12 @@
         <value>usb</value>
       </enum>
     </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+      </enum>
+    </graphics>
     <hostdev supported='yes'>
       <enum name='mode'>
         <value>subsystem</value>
diff --git a/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-5.xml b/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-5.xml
index e4b8c3a..68d88d1 100644
--- a/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-5.xml
+++ b/tests/domaincapsschemadata/domaincaps-qemu_2.6.0-5.xml
@@ -32,6 +32,12 @@
         <value>usb</value>
       </enum>
     </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+      </enum>
+    </graphics>
     <hostdev supported='yes'>
       <enum name='mode'>
         <value>subsystem</value>
diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c
index ee78555..6bef682 100644
--- a/tests/domaincapstest.c
+++ b/tests/domaincapstest.c
@@ -61,6 +61,7 @@ fillAllCaps(virDomainCapsPtr domCaps)
     virDomainCapsOSPtr os = &domCaps->os;
     virDomainCapsLoaderPtr loader = &os->loader;
     virDomainCapsDeviceDiskPtr disk = &domCaps->disk;
+    virDomainCapsDeviceGraphicsPtr graphics = &domCaps->graphics;
     virDomainCapsDeviceHostdevPtr hostdev = &domCaps->hostdev;
     domCaps->maxvcpus = 255;
 
@@ -79,6 +80,9 @@ fillAllCaps(virDomainCapsPtr domCaps)
     SET_ALL_BITS(disk->diskDevice);
     SET_ALL_BITS(disk->bus);
 
+    graphics->supported = true;
+    SET_ALL_BITS(graphics->type);
+
     hostdev->supported = true;
     SET_ALL_BITS(hostdev->mode);
     SET_ALL_BITS(hostdev->startupPolicy);
-- 
2.7.4




More information about the libvir-list mailing list