From 6f89efa076463459e7be58c2223a549ea5744913 Mon Sep 17 00:00:00 2001 From: Dehan Meng Date: Mon, 1 Apr 2024 21:19:03 +0800 Subject: [PATCH] Add support for Windows 2025 for QGA Resolves: RHEL-26205 - [QGA] Add Windows Server 2025 to guest-osinfo command Signed-off-by: Dehan Meng --- 0001-Change-Version.patch | 2 +- mingw-qemu-ga-win.spec | 8 +- ...nups_before_adding_windows_server_2025.mbx | 253 ++++++++++++++++++ 3 files changed, 261 insertions(+), 2 deletions(-) create mode 100644 v4_20240304_kkostiuk_qga_commands_win32_style_cleanups_before_adding_windows_server_2025.mbx diff --git a/0001-Change-Version.patch b/0001-Change-Version.patch index 6c5adf1..87ce01e 100644 --- a/0001-Change-Version.patch +++ b/0001-Change-Version.patch @@ -14,6 +14,6 @@ index 91ff57278e..586de296f5 100644 +++ b/VERSION @@ -1 +1 @@ -8.2.0 -+107.0.1 ++107.0.2 -- 2.17.2 diff --git a/mingw-qemu-ga-win.spec b/mingw-qemu-ga-win.spec index 451e6b6..22d1c76 100644 --- a/mingw-qemu-ga-win.spec +++ b/mingw-qemu-ga-win.spec @@ -6,7 +6,7 @@ %define ga_distro "RHEL" Name: mingw-qemu-ga-win -Version: 107.0.1 +Version: 107.0.2 Release: 1%{?dist} Summary: Qemus Guest agent for Windows @@ -19,6 +19,7 @@ Requires(postun): systemd-units Source0: http://wiki.qemu.org/download/qemu-%{qemu_version}.tar.bz2 Patch0001: 0001-Change-Version.patch +Patch0002: v4_20240304_kkostiuk_qga_commands_win32_style_cleanups_before_adding_windows_server_2025.mbx BuildArch: noarch @@ -66,6 +67,7 @@ This package does not need to be installed on the host OS. %prep %setup -q -n qemu-%{qemu_version} %patch0001 -p1 +%patch0002 -p1 %build @@ -122,6 +124,10 @@ cp build/qga/qemu-ga-x86_64.msi $RPM_BUILD_ROOT%{mingw64_bindir} %{mingw64_bindir}/qemu-ga* %changelog +* Mon Apr 1 2024 Dehan Meng 107.0.2 +- Set version to 107.0.2 +- RHEL-26205 - [QGA] Add Windows Server 2025 to guest-osinfo command + * Mon Jan 15 2024 Konstantin Kostiuk 107.0.1 - Set version to 107.0.1 - RHEL-21655 - Fix mingw-qemu-ga-win licenses diff --git a/v4_20240304_kkostiuk_qga_commands_win32_style_cleanups_before_adding_windows_server_2025.mbx b/v4_20240304_kkostiuk_qga_commands_win32_style_cleanups_before_adding_windows_server_2025.mbx new file mode 100644 index 0000000..7faf5df --- /dev/null +++ b/v4_20240304_kkostiuk_qga_commands_win32_style_cleanups_before_adding_windows_server_2025.mbx @@ -0,0 +1,253 @@ +From git@z Thu Jan 1 00:00:00 1970 +Subject: [PATCH v4 1/3] qga/commands-win32: Declare const qualifier before + type +From: Philippe Mathieu-Daudé +Date: Mon, 04 Mar 2024 15:45:30 +0200 +Message-Id: <20240304134532.28506-2-kkostiuk@redhat.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +Most of the code base use the 'const' qualifier *before* +the type being qualified. Use the same style to unify. + +Signed-off-by: Philippe Mathieu-Daudé +Message-ID: <20240222152835.72095-2-philmd@linaro.org> +Reviewed-by: Konstantin Kostiuk +Signed-off-by: Konstantin Kostiuk +Reviewed-by: Yan Vugenfirer +--- + qga/commands-win32.c | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +diff --git a/qga/commands-win32.c b/qga/commands-win32.c +index a1015757d8..79b5a580c9 100644 +--- a/qga/commands-win32.c ++++ b/qga/commands-win32.c +@@ -2120,11 +2120,11 @@ GuestUserList *qmp_guest_get_users(Error **errp) + typedef struct _ga_matrix_lookup_t { + int major; + int minor; +- char const *version; +- char const *version_id; ++ const char *version; ++ const char *version_id; + } ga_matrix_lookup_t; + +-static ga_matrix_lookup_t const WIN_VERSION_MATRIX[2][7] = { ++static const ga_matrix_lookup_t WIN_VERSION_MATRIX[2][7] = { + { + /* Desktop editions */ + { 5, 0, "Microsoft Windows 2000", "2000"}, +@@ -2148,18 +2148,18 @@ static ga_matrix_lookup_t const WIN_VERSION_MATRIX[2][7] = { + + typedef struct _ga_win_10_0_t { + int first_build; +- char const *version; +- char const *version_id; ++ const char *version; ++ const char *version_id; + } ga_win_10_0_t; + +-static ga_win_10_0_t const WIN_10_0_SERVER_VERSION_MATRIX[4] = { ++static const ga_win_10_0_t WIN_10_0_SERVER_VERSION_MATRIX[4] = { + {14393, "Microsoft Windows Server 2016", "2016"}, + {17763, "Microsoft Windows Server 2019", "2019"}, + {20344, "Microsoft Windows Server 2022", "2022"}, + {0, 0} + }; + +-static ga_win_10_0_t const WIN_10_0_CLIENT_VERSION_MATRIX[3] = { ++static const ga_win_10_0_t WIN_10_0_CLIENT_VERSION_MATRIX[3] = { + {10240, "Microsoft Windows 10", "10"}, + {22000, "Microsoft Windows 11", "11"}, + {0, 0} +@@ -2185,16 +2185,16 @@ static void ga_get_win_version(RTL_OSVERSIONINFOEXW *info, Error **errp) + return; + } + +-static char *ga_get_win_name(OSVERSIONINFOEXW const *os_version, bool id) ++static char *ga_get_win_name(const OSVERSIONINFOEXW *os_version, bool id) + { + DWORD major = os_version->dwMajorVersion; + DWORD minor = os_version->dwMinorVersion; + DWORD build = os_version->dwBuildNumber; + int tbl_idx = (os_version->wProductType != VER_NT_WORKSTATION); +- ga_matrix_lookup_t const *table = WIN_VERSION_MATRIX[tbl_idx]; +- ga_win_10_0_t const *win_10_0_table = tbl_idx ? ++ const ga_matrix_lookup_t *table = WIN_VERSION_MATRIX[tbl_idx]; ++ const ga_win_10_0_t *win_10_0_table = tbl_idx ? + WIN_10_0_SERVER_VERSION_MATRIX : WIN_10_0_CLIENT_VERSION_MATRIX; +- ga_win_10_0_t const *win_10_0_version = NULL; ++ const ga_win_10_0_t *win_10_0_version = NULL; + while (table->version != NULL) { + if (major == 10 && minor == 0) { + while (win_10_0_table->version != NULL) { +-- +2.44.0 + +From git@z Thu Jan 1 00:00:00 1970 +Subject: [PATCH v4 2/3] qga/commands-win32: Do not set + matrix_lookup_t/win_10_0_t arrays size +From: Philippe Mathieu-Daudé +Date: Mon, 04 Mar 2024 15:45:31 +0200 +Message-Id: <20240304134532.28506-3-kkostiuk@redhat.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +ga_get_win_name() iterates over all elements in the arrays by +checking the 'version' field is non-NULL. Since the arrays are +guarded by a NULL terminating element, we don't need to specify +their size: + + static char *ga_get_win_name(...) + { + ... + const ga_matrix_lookup_t *table = WIN_VERSION_MATRIX[tbl_idx]; + const ga_win_10_0_t *win_10_0_table = ... + ... + while (table->version != NULL) { + ^^^^^^^^^^^^^^^ + while (win_10_0_table->version != NULL) { + ^^^^^^^^^^^^^^^ + +This will simplify maintenance when adding new entries to these +arrays. + +Split WIN_VERSION_MATRIX into WIN_CLIENT_VERSION_MATRIX and +WIN_SERVER_VERSION_MATRIX because multidimensional array must +have bounds for all dimensions except the first. + +Signed-off-by: Philippe Mathieu-Daudé +Message-ID: <20240222152835.72095-3-philmd@linaro.org> +Reviewed-by: Konstantin Kostiuk +Signed-off-by: Konstantin Kostiuk +Reviewed-by: Yan Vugenfirer +--- + qga/commands-win32.c | 52 +++++++++++++++++++++----------------------- + 1 file changed, 25 insertions(+), 27 deletions(-) + +diff --git a/qga/commands-win32.c b/qga/commands-win32.c +index 79b5a580c9..a830f1494e 100644 +--- a/qga/commands-win32.c ++++ b/qga/commands-win32.c +@@ -2124,45 +2124,42 @@ typedef struct _ga_matrix_lookup_t { + const char *version_id; + } ga_matrix_lookup_t; + +-static const ga_matrix_lookup_t WIN_VERSION_MATRIX[2][7] = { +- { +- /* Desktop editions */ +- { 5, 0, "Microsoft Windows 2000", "2000"}, +- { 5, 1, "Microsoft Windows XP", "xp"}, +- { 6, 0, "Microsoft Windows Vista", "vista"}, +- { 6, 1, "Microsoft Windows 7" "7"}, +- { 6, 2, "Microsoft Windows 8", "8"}, +- { 6, 3, "Microsoft Windows 8.1", "8.1"}, +- { 0, 0, 0} +- },{ +- /* Server editions */ +- { 5, 2, "Microsoft Windows Server 2003", "2003"}, +- { 6, 0, "Microsoft Windows Server 2008", "2008"}, +- { 6, 1, "Microsoft Windows Server 2008 R2", "2008r2"}, +- { 6, 2, "Microsoft Windows Server 2012", "2012"}, +- { 6, 3, "Microsoft Windows Server 2012 R2", "2012r2"}, +- { 0, 0, 0}, +- { 0, 0, 0} +- } ++static const ga_matrix_lookup_t WIN_CLIENT_VERSION_MATRIX[] = { ++ { 5, 0, "Microsoft Windows 2000", "2000"}, ++ { 5, 1, "Microsoft Windows XP", "xp"}, ++ { 6, 0, "Microsoft Windows Vista", "vista"}, ++ { 6, 1, "Microsoft Windows 7" "7"}, ++ { 6, 2, "Microsoft Windows 8", "8"}, ++ { 6, 3, "Microsoft Windows 8.1", "8.1"}, ++ { } ++}; ++ ++static const ga_matrix_lookup_t WIN_SERVER_VERSION_MATRIX[] = { ++ { 5, 2, "Microsoft Windows Server 2003", "2003"}, ++ { 6, 0, "Microsoft Windows Server 2008", "2008"}, ++ { 6, 1, "Microsoft Windows Server 2008 R2", "2008r2"}, ++ { 6, 2, "Microsoft Windows Server 2012", "2012"}, ++ { 6, 3, "Microsoft Windows Server 2012 R2", "2012r2"}, ++ { }, + }; + + typedef struct _ga_win_10_0_t { + int first_build; +- const char *version; +- const char *version_id; ++ char const *version; ++ char const *version_id; + } ga_win_10_0_t; + +-static const ga_win_10_0_t WIN_10_0_SERVER_VERSION_MATRIX[4] = { ++static const ga_win_10_0_t WIN_10_0_SERVER_VERSION_MATRIX[] = { + {14393, "Microsoft Windows Server 2016", "2016"}, + {17763, "Microsoft Windows Server 2019", "2019"}, + {20344, "Microsoft Windows Server 2022", "2022"}, +- {0, 0} ++ { } + }; + +-static const ga_win_10_0_t WIN_10_0_CLIENT_VERSION_MATRIX[3] = { ++static const ga_win_10_0_t WIN_10_0_CLIENT_VERSION_MATRIX[] = { + {10240, "Microsoft Windows 10", "10"}, + {22000, "Microsoft Windows 11", "11"}, +- {0, 0} ++ { } + }; + + static void ga_get_win_version(RTL_OSVERSIONINFOEXW *info, Error **errp) +@@ -2191,7 +2188,8 @@ static char *ga_get_win_name(const OSVERSIONINFOEXW *os_version, bool id) + DWORD minor = os_version->dwMinorVersion; + DWORD build = os_version->dwBuildNumber; + int tbl_idx = (os_version->wProductType != VER_NT_WORKSTATION); +- const ga_matrix_lookup_t *table = WIN_VERSION_MATRIX[tbl_idx]; ++ const ga_matrix_lookup_t *table = tbl_idx ? ++ WIN_SERVER_VERSION_MATRIX : WIN_CLIENT_VERSION_MATRIX; + const ga_win_10_0_t *win_10_0_table = tbl_idx ? + WIN_10_0_SERVER_VERSION_MATRIX : WIN_10_0_CLIENT_VERSION_MATRIX; + const ga_win_10_0_t *win_10_0_version = NULL; +-- +2.44.0 + +From git@z Thu Jan 1 00:00:00 1970 +Subject: [PATCH v4 3/3] qga-win: Add support of Windows Server 2025 in + get-osinfo command +From: Dehan Meng +Date: Mon, 04 Mar 2024 15:45:32 +0200 +Message-Id: <20240304134532.28506-4-kkostiuk@redhat.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +Add support of Windows Server 2025 in get-osinfo command + +Signed-off-by: Dehan Meng +Message-ID: <20240222152835.72095-4-philmd@linaro.org> +Signed-off-by: Philippe Mathieu-Daudé +Reviewed-by: Konstantin Kostiuk +Signed-off-by: Konstantin Kostiuk +Reviewed-by: Yan Vugenfirer +--- + qga/commands-win32.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/qga/commands-win32.c b/qga/commands-win32.c +index a830f1494e..d1cf1a87db 100644 +--- a/qga/commands-win32.c ++++ b/qga/commands-win32.c +@@ -2153,6 +2153,7 @@ static const ga_win_10_0_t WIN_10_0_SERVER_VERSION_MATRIX[] = { + {14393, "Microsoft Windows Server 2016", "2016"}, + {17763, "Microsoft Windows Server 2019", "2019"}, + {20344, "Microsoft Windows Server 2022", "2022"}, ++ {26040, "MIcrosoft Windows Server 2025", "2025"}, + { } + }; + +-- +2.44.0 +