From cab7d25371962dce9e8db2bc8dc58f48ab909b04 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@redhat.com>
Date: Sun, 16 Mar 2025 12:18:31 +0400
Subject: [PATCH] qemu: add RDP ports range allocator
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

RDP server uses port 3389 by default.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
---
 src/qemu/qemu_conf.c   | 6 ++++++
 src/qemu/qemu_conf.h   | 6 ++++++
 src/qemu/qemu_driver.c | 8 ++++++++
 3 files changed, 20 insertions(+)

diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index 95113b8eb6..65016feb6a 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -65,6 +65,9 @@ VIR_LOG_INIT("qemu.qemu_conf");
 #define QEMU_REMOTE_PORT_MIN 5900
 #define QEMU_REMOTE_PORT_MAX 65535
 
+#define QEMU_RDP_PORT_MIN 3389
+#define QEMU_RDP_PORT_MAX 65535
+
 #define QEMU_WEBSOCKET_PORT_MIN 5700
 #define QEMU_WEBSOCKET_PORT_MAX 65535
 
@@ -248,6 +251,9 @@ virQEMUDriverConfig *virQEMUDriverConfigNew(bool privileged,
     cfg->remotePortMin = QEMU_REMOTE_PORT_MIN;
     cfg->remotePortMax = QEMU_REMOTE_PORT_MAX;
 
+    cfg->rdpPortMin = QEMU_RDP_PORT_MIN;
+    cfg->rdpPortMax = QEMU_RDP_PORT_MAX;
+
     cfg->webSocketPortMin = QEMU_WEBSOCKET_PORT_MIN;
     cfg->webSocketPortMax = QEMU_WEBSOCKET_PORT_MAX;
 
diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
index b40b373358..bbbbd6bf67 100644
--- a/src/qemu/qemu_conf.h
+++ b/src/qemu/qemu_conf.h
@@ -169,6 +169,9 @@ struct _virQEMUDriverConfig {
     unsigned int remotePortMin;
     unsigned int remotePortMax;
 
+    unsigned int rdpPortMin;
+    unsigned int rdpPortMax;
+
     unsigned int webSocketPortMin;
     unsigned int webSocketPortMax;
 
@@ -312,6 +315,9 @@ struct _virQEMUDriver {
     /* Immutable pointer, immutable object */
     virPortAllocatorRange *webSocketPorts;
 
+    /* Immutable pointer, immutable object */
+    virPortAllocatorRange *rdpPorts;
+
     /* Immutable pointer, immutable object */
     virPortAllocatorRange *migrationPorts;
 
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 6f0ce5a2f3..d72805f0c7 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -701,6 +701,13 @@ qemuStateInitialize(bool privileged,
                                   cfg->webSocketPortMax)) == NULL)
         goto error;
 
+    if ((qemu_driver->rdpPorts =
+         virPortAllocatorRangeNew(_("rdp"),
+                                  cfg->rdpPortMin,
+                                  cfg->rdpPortMax)) == NULL)
+        goto error;
+
+
     if ((qemu_driver->migrationPorts =
          virPortAllocatorRangeNew(_("migration"),
                                   cfg->migrationPortMin,
@@ -1050,6 +1057,7 @@ qemuStateCleanup(void)
     virSysinfoDefFree(qemu_driver->hostsysinfo);
     virPortAllocatorRangeFree(qemu_driver->migrationPorts);
     virPortAllocatorRangeFree(qemu_driver->webSocketPorts);
+    virPortAllocatorRangeFree(qemu_driver->rdpPorts);
     virPortAllocatorRangeFree(qemu_driver->remotePorts);
     virObjectUnref(qemu_driver->hostdevMgr);
     virObjectUnref(qemu_driver->securityManager);