[libvirt] [PATCH 03/17] qemu_process: handle port allocation for VNC the same way as for Spice

Pavel Hrdina phrdina at redhat.com
Thu May 5 16:20:22 UTC 2016


Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
---
 src/qemu/qemu_driver.c  |  6 +++---
 src/qemu/qemu_process.c | 29 ++++++++++++++++++++++++-----
 src/qemu/qemu_process.h |  3 +++
 3 files changed, 30 insertions(+), 8 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 3d0c7c8..396e64c 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -7063,9 +7063,9 @@ static char *qemuConnectDomainXMLToNative(virConnectPtr conn,
     /* do fake auto-alloc of graphics ports, if such config is used */
     for (i = 0; i < vm->def->ngraphics; ++i) {
         virDomainGraphicsDefPtr graphics = vm->def->graphics[i];
-        if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
-            !graphics->data.vnc.socket && graphics->data.vnc.autoport) {
-            graphics->data.vnc.port = 5900;
+        if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
+            if (qemuProcessVNCAllocatePorts(driver, graphics, false) < 0)
+                goto cleanup;
         } else if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
             if (qemuProcessSPICEAllocatePorts(driver, cfg, graphics, false) < 0)
                 goto cleanup;
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 17fd566..e2f22de 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -3856,15 +3856,23 @@ qemuProcessReconnectAll(virConnectPtr conn, virQEMUDriverPtr driver)
     virDomainObjListForEach(driver->domains, qemuProcessReconnectHelper, &data);
 }
 
-static int
+int
 qemuProcessVNCAllocatePorts(virQEMUDriverPtr driver,
-                            virDomainGraphicsDefPtr graphics)
+                            virDomainGraphicsDefPtr graphics,
+                            bool allocate)
 {
     unsigned short port;
 
     if (graphics->data.vnc.socket)
         return 0;
 
+    if (!allocate) {
+        if (graphics->data.vnc.autoport)
+            graphics->data.vnc.port = 5900;
+
+        return 0;
+    }
+
     if (graphics->data.vnc.autoport) {
         if (virPortAllocatorAcquire(driver->remotePorts, &port) < 0)
             return -1;
@@ -4379,12 +4387,23 @@ qemuProcessSetupGraphics(virQEMUDriverPtr driver,
 
     for (i = 0; i < vm->def->ngraphics; ++i) {
         virDomainGraphicsDefPtr graphics = vm->def->graphics[i];
-        if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
-            if (qemuProcessVNCAllocatePorts(driver, graphics) < 0)
+
+        switch (graphics->type) {
+        case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
+            if (qemuProcessVNCAllocatePorts(driver, graphics, true) < 0)
                 goto cleanup;
-        } else if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
+            break;
+
+        case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
             if (qemuProcessSPICEAllocatePorts(driver, cfg, graphics, true) < 0)
                 goto cleanup;
+            break;
+
+        case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
+        case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+        case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
+        case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
+            break;
         }
     }
 
diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h
index b7262a7..9e2e036 100644
--- a/src/qemu/qemu_process.h
+++ b/src/qemu/qemu_process.h
@@ -175,6 +175,9 @@ bool qemuProcessAutoDestroyActive(virQEMUDriverPtr driver,
 int qemuProcessSetSchedParams(int id, pid_t pid, size_t nsp,
                               virDomainThreadSchedParamPtr sp);
 
+int qemuProcessVNCAllocatePorts(virQEMUDriverPtr driver,
+                                virDomainGraphicsDefPtr graphics,
+                                bool allocate);
 int qemuProcessSPICEAllocatePorts(virQEMUDriverPtr driver,
                                   virQEMUDriverConfigPtr cfg,
                                   virDomainGraphicsDefPtr graphics,
-- 
2.8.2




More information about the libvir-list mailing list