From nobody Tue Sep 9 19:04:48 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=nutanix.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1752671942732346.8813983353606; Wed, 16 Jul 2025 06:19:02 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 9EB4113BC; Wed, 16 Jul 2025 09:19:01 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 2C2FE14D0; Wed, 16 Jul 2025 09:18:09 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 31584E5B; Wed, 16 Jul 2025 09:18:04 -0400 (EDT) Received: from mx0b-002c1b01.pphosted.com (mx0b-002c1b01.pphosted.com [148.163.155.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 8B173E3E for ; Wed, 16 Jul 2025 09:18:03 -0400 (EDT) Received: from pps.filterd (m0127843.ppops.net [127.0.0.1]) by mx0b-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56GD29Wg030759 for ; Wed, 16 Jul 2025 06:18:03 -0700 Received: from nam04-bn8-obe.outbound.protection.outlook.com (mail-bn8nam04on2101.outbound.protection.outlook.com [40.107.100.101]) by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 47untj9p6n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 16 Jul 2025 06:18:02 -0700 (PDT) Received: from PH0PR02MB7159.namprd02.prod.outlook.com (2603:10b6:510:16::8) by DM6PR02MB6860.namprd02.prod.outlook.com (2603:10b6:5:21a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8922.32; Wed, 16 Jul 2025 13:18:01 +0000 Received: from PH0PR02MB7159.namprd02.prod.outlook.com ([fe80::6cf9:b35c:b143:bb88]) by PH0PR02MB7159.namprd02.prod.outlook.com ([fe80::6cf9:b35c:b143:bb88%5]) with mapi id 15.20.8922.035; Wed, 16 Jul 2025 13:18:00 +0000 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; h= content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= proofpoint20171006; bh=80mKs+bD+qoIwYikZrpe16pybyjKHVEvag9wYp0BR dM=; b=FbkyB6nYbnsCj3Uj1ktco2w9SsckoesxvrtfCGRE4wf8tDIOsnZXisgqB GApa1cYgypVbiAXrmcslQcSyq5NOJxys0RdyAnJW7+YBhaQ8UA7zJkxB0fei/Dbp tUqn3o9VgNNumL6k1XZp9sETXBr/AnimClJfmokV4XqrW568uWc0umOqfLCeNNSO CE/xOjumwUzdmvDsWn1KJlsVuJC2VE1cFa56ELe8jSUEI4gWsOYmCwT9TuK5uBt2 MKzBKQPiu5t2VooQNccGMvUTUxvP3sivj/kQSSOb3emChxMKjiPB1K4rdyG7phV5 qpEYqK97PIW7J4VWo6ZjCz8NLVt1Q== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kLHzQdEY56z1cS1GDceYMK7Vd+W5wrbGNG7xuH3RPfOjYVLIAWRcCw4/XyTIXb5MeP70pdRIxdh00vZQa89xBvFhVFaGWZRG+NAFPcsEZHsMGrIqIXU3pVG+2pQeh5WVUIYAT0Sm09y0Ay6VnLdQL3iMbUORp+15g4HSHMaXq9+03viUy2/jAZDn9CqqdctXfwm60LivGW7DM+HgncnbREGcvirvn175xSDxKpm8j/CZpWUx+hV+9EosIdp4fl9NsRL+sgmuey3k1lzjPdW1OzcP58TMYT0Uoh73TVGaqORB2SKP+HKuF4z3SSndCfo1zsFciu5rlBWqhKuhcEG8fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=80mKs+bD+qoIwYikZrpe16pybyjKHVEvag9wYp0BRdM=; b=ZS4ZfDwrfFGiqb8HAFw2XbYb6k034sevdiETV1WcdpsChGOHWeHqadCpQ0+3jVkuUfU/2gDAdv9UN5+hwptbvUR4US+EWGg3ToG9hqfsdMbbSI6fXf/tplyHFeiuzAPK2FK+p2c/CB+iSvlzMQ3qsy0xqAuebuMErW7jhj/K4KN1eKyom3dQkGEtNTvD7n03lOubRDI/SymjPJTH6lIOV8/QiW95hLIUOIExbUgb02UCIkxTUpYo/B/KH6Ft5Xv/OdhTKGec+5mqYx8S6hTNoNK2UPHEO3snvJ8El4wcRKYABK6whTzKFdxMfJKVfQWm8alaXdsEZWGws0hRG0lIJA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nutanix.com; dmarc=pass action=none header.from=nutanix.com; dkim=pass header.d=nutanix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=80mKs+bD+qoIwYikZrpe16pybyjKHVEvag9wYp0BRdM=; b=sDYLi9iOty1GMuyU+9ccWZAPIgAr6zuxqs28YVNflzHBTyoe2O1VHeTRB3rSLp4WgeebbqtX3upjOKM90M3W0EhcAZBXhClnUsFbnorXhjB8hH28DCxr3xGZtCrPuosheONhckwrxuvKmGr7yexMLEAdzq/VxmshKyGRu+Q2o2yQbAbXMaNYYtgL1vOioVHHetXbDNInugOtp4ti39p4VAukW44FVnr3OR+Kulu15FA2nWxv/aVP4Ev3S1srKDuinhCnGFGK+5B+tc20syu7Q6OOVOr9N8SN9Yerl2ylK0/qPjrTwbvFt+ZL9bwvXDtqUbX1kNXBJYIrujxmpA0pUw== From: Mark Cave-Ayland To: devel@lists.libvirt.org Subject: [PATCH 1/2] conf: introduce hardware UUID (hwuuid) element Date: Wed, 16 Jul 2025 14:17:46 +0100 Message-ID: <20250716131753.314355-2-mark.caveayland@nutanix.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250716131753.314355-1-mark.caveayland@nutanix.com> References: <20250716131753.314355-1-mark.caveayland@nutanix.com> X-ClientProxiedBy: AM8P189CA0005.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:218::10) To PH0PR02MB7159.namprd02.prod.outlook.com (2603:10b6:510:16::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH0PR02MB7159:EE_|DM6PR02MB6860:EE_ X-MS-Office365-Filtering-Correlation-Id: d059f74a-d149-400d-8cd6-08ddc46b2ffb x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|10070799003|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?165VarvWY4TsUvAoJ7RQRvr5murcNEkA80LYngPtAr6BUGylk4uFv8tWAgFl?= =?us-ascii?Q?WmX367QeSVzJNkIl0tWqVzwj2sVbStNa7/I+dZD3ca59qzybnNXGI3rZPDjG?= =?us-ascii?Q?eLPyLUdD7ZB7RPqv6BtIIajDB90/9xMkL9N9Zrn1jxb6BuPZqq/AOQc78j33?= =?us-ascii?Q?Cog37TIkLk/bvMyFzC/bjDwWFWOsnNBMnKyvEiZLUAsp9Qrw7hQ/H+OoxHu6?= =?us-ascii?Q?3MhL31rAproSeh29lkowcCeOfhR6JqC00J8at1bokTphTqTz2EsUvsEgvvT1?= =?us-ascii?Q?ktinj0sX1CJEsXjmLw019oc+r+YLvdLbXLt4Ct4fYr3hW3cTMYJT9vBSDvEv?= =?us-ascii?Q?4CgJERbhyMx8ovcIAnCPUeJkgcNUlY1DxQweSdYWPN/ucZp6Rq86F+j0t6rt?= =?us-ascii?Q?VOt7UmUL7QIn3so77d4UlbkaNEQ9XuSOAYjUtMlR227Ww+rzHVIAMKu8wP7O?= =?us-ascii?Q?oxAW+HLf50dgeULkazqGx5OIELLAkldCLsxj5h3pf/Y21K4vA4fWVJXqQ7Hu?= =?us-ascii?Q?Gw+bSTo1FDUBauzrjfUUU5uzswrF7oYFmxeYfCHHDRqXDQrMuUwnKm2n7UzZ?= =?us-ascii?Q?QrzsM4HlEp0U7SGUaaHhajAUhKTNy25kByLgMPVNyLUNl4Myy+5iQ9VyFqRH?= =?us-ascii?Q?XYGcACJldmjjwGcg2c0mitaDMBVjGpAuzp/bpDInkJjL4+GxT+91z6L+pocm?= =?us-ascii?Q?971RxHOes0y53wlRpaSN2F5SFvDrvxsrLzSZV5TcoDIHG15qozZsBy1ZOcaC?= =?us-ascii?Q?4ObVZUifZ+TY3eaiehHKM5DHpe1B5N1BsHQKE1c9po5F090uaZHfW52Qa6wq?= =?us-ascii?Q?OdFrpqXqBzBiGze9tcyU0CxssoxVax36iKPL3Gsy5hFz/XOZN6hYqGP2fzxm?= =?us-ascii?Q?/ih89jNy5gWctYo87Bk1obduI6ERDNEbrBFILgm+GUX9tQUwIs9A5iQ9+V/t?= =?us-ascii?Q?I2hV1S+1nfdWveEwCaXGY2jmelpb5iUpRTQP7V1l8TVe7KQEfeNQSzTwvVzM?= =?us-ascii?Q?6UmBGnQmqNYyP00GfRKXAg32OGBZnQ9FZ6E/8rY60GI9l4Di5TEMape+D3ia?= =?us-ascii?Q?8DNxa43PiXOt6C9bA7cF+Y3SSIrcCdw5rUFF3hdy3Z2Z2CSMil85+Qpbm2Fc?= =?us-ascii?Q?Bodeh4PkAbf99ifWcobJ464u/Ax10UAg+QBTfc0alrNujCjD+Fw8qHXa7apf?= =?us-ascii?Q?10E2AXy53MWN28XEdKBlEZorWZKYnfbxOhmd6FN5gzGsA+XYTyMXKEGAvFnd?= =?us-ascii?Q?z8lR7QGUHKMqIiXNKkqhXuIrNaOJ/fgNGDipW2WzHWUfr3PtGtgfWkqQr5V1?= =?us-ascii?Q?734yo6D9O0Nr4TtKUgM0UTKe1tqVf6DCvSP+z06HjsiRxp44gFNjFmcLzZC2?= =?us-ascii?Q?m/a+Yh43tm6J7OKdAzT6SEEpeA7QZJ441hMaGidy+RpQt2lbMi2QUyk3vDv+?= =?us-ascii?Q?L9MSSipiutA=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR02MB7159.namprd02.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(10070799003)(376014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?otgsVLtonWKFJwKuJSICz+hpFOccav9zr3Fb71/mNZHrDd7RzgT/89w18cXM?= =?us-ascii?Q?pPM8VqRKXzTS/I+ZOIF3oo6H7LINqF0Bw/McV2l0qZtMA1B9ObXvNP9IMqqt?= =?us-ascii?Q?VtcMHiAl/8w0y3XsJhGPLUVfXCk1v+SP+oCRqAwgsaeCm+3+kPM4zw2KjNRi?= =?us-ascii?Q?0dPck6NofPSYNHnyUWoJynLq7P2CMZCzIXLcLqq6epk6e//vVvfrVL2Pwott?= =?us-ascii?Q?u4+64vcVC9WppEmlcEwXSnxcCecYQX4H5ix/YGo81M8IJZxsjv8kgTedP3Nt?= =?us-ascii?Q?yFGQsdvLdPqKUDSTHvNHgZOtGFubhKjgkMzyPMmQLsogp+iKWDaPE++IEd/Y?= =?us-ascii?Q?fzbTAhhIG2oQrrybkErUKhycVZ7CAuv+ajiEhn9XonxfXdhDwCSsjYPW/zOM?= =?us-ascii?Q?WnCSPVGwUDz3SZyzRBvJsaChK3l/LVjiYHZ2AqLW0gqC/ehYqcaEmQDVJjU6?= =?us-ascii?Q?5Asv2pk93BubKCaaR+/K/Q7OZW8n4DsUFIDc+4kvnOzsln+G0J7U9D0YM2BE?= =?us-ascii?Q?61yASt7yqD8pgQNfIgkxdkcEmYXEQyyErx56BccR2UktjLweRJPbuFeea6A9?= =?us-ascii?Q?ekCeEaTqXK5FEPa1rMlK10q7wfv4IZ3R7IAS7AdPDk+3OntOzkRtSbW/+IPH?= =?us-ascii?Q?jwhEn+0CTyL4qt+aviHfCp6razFE1Xo5cJ/PBshBA+CwRFhekBc9Fq3133wN?= =?us-ascii?Q?2shmdEJwocEyrxRFbsCKlxOrLVBbgsPXKar5rn0Wu65h4L69v2J+ePCDFPaT?= =?us-ascii?Q?pL64SANvZMVjh9f4ue2sJJjVhd8UMGlRQnj22C02LTYETTHnPfk5vGPmVhAv?= =?us-ascii?Q?PgplvYkinGvxMKyXc/hggQP1/CZKPGylmcpXFFx71kooD8NYnw81vYQTn/2g?= =?us-ascii?Q?iUxziquw6dLlgKWbxAW4h8o2rykRY/mN1TXW5Qbp+YHs3z3L+/UDq1s1sHiO?= =?us-ascii?Q?DKmS8L2VzNMYa6K+efm4ROpAlbj3+QKGCDw3PYyOd1vRUbCEJPnvsIPKi3d3?= =?us-ascii?Q?CDB2oIhE4e3qojupAL36gY/CtbIA+UGt2zIoFHtZe8/SZFnGTbIMOyi2SVbU?= =?us-ascii?Q?Rj9wAGh5b/eNeqV99kqPh4Q//qIDuK7Xko4WyGaphUKBOxPEDUm1VpRZ2JJx?= =?us-ascii?Q?I2bYgGC1cP/PLqX/OhNmVALtGgDEVZ3uSk/OQKEMzAFBVOMOLT1ovHRGn2IK?= =?us-ascii?Q?KH8mYg6KzEE/W1I8DuZy/T/b2cyYWl0XuZCbLo/ctZOA9GVi+tc2kJyx6zeB?= =?us-ascii?Q?GhTtWna9QtKlSXnbJa9hnJ08B/sfeJQ95guX3B6WFWFqrHSm03dTcgEPklrg?= =?us-ascii?Q?IGwU9CpZ/JIIfEyDJwMHa+OhK/CzygAJz6rzgMDO3pS6e4m8r3V1+BAQxW77?= =?us-ascii?Q?+rr/8o0djMH+WDuL5ixaLaZorMlaop9IQkmEYlMvATmatsban//bXIS5dPZQ?= =?us-ascii?Q?R45OlhINxoAprSDHk+gi7TojjXiqR4/fQHFYM0W9it8keBVK8yFmbVs7Nozz?= =?us-ascii?Q?YN/cp9Uk7T8IUl7RVvF+urCX1bpkG9DNQVPa0M8AUN5S9TMmhorxh0HACZIr?= =?us-ascii?Q?Yx4eUQQLZFujPQY5t0Hy30d3SDGJQtUGAbpxruKuhL5W2t/wUpjIY/99CN8c?= =?us-ascii?Q?yBjS8NdECn5BaawxHR5UD4fZysP+7LsLjN2Ep3bEjl0AibtLP+bGeek/DZsQ?= =?us-ascii?Q?8TPfLA=3D=3D?= X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: d059f74a-d149-400d-8cd6-08ddc46b2ffb X-MS-Exchange-CrossTenant-AuthSource: PH0PR02MB7159.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2025 13:18:00.4129 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bb047546-786f-4de1-bd75-24e5b6f79043 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 0TfhRFrKKEcirKu4C+EeW4QmauGdIQQLil/cj0u88CfjAm0QKk8vIiMKa0ZMgacD+PZ3v0LOanMI9ofCWAgiwRFZZc1ZfqgPmWYubvsgt+8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR02MB6860 X-Proofpoint-GUID: CMO3wMlTYoQVER1hZt6CMH-tK3NzaMIJ X-Proofpoint-ORIG-GUID: CMO3wMlTYoQVER1hZt6CMH-tK3NzaMIJ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzE2MDAzMiBTYWx0ZWRfX/V17lyr70Nka T4bh2/oVGDo2p3+FLsXxL9ssYj5/y75Gdv+mItpAvLbv9xrBeFPv4qS1wvY98vR/IHKtdByw4AM i0XzLGdlsTK/N9CuxWbA8LZKfXcQ0LYtUD8DTbxKnjSBEsyVLniFBbJLLZCpitngPEc0hQzQO1h WC9frahlFSIZXpb7/wpte8bUt4+5yNf7Bs4L3WWir7Q75fRkkjrYgeD8hQpT1M+nCqfQpHVvf28 ivi01TIC9w8Qe8RGPttveJc8+YWqJWY9k7TrVv6GTYFtkzgJofuIrJBvhg4svGZ8sdczyvcMLuk Li3iSvfx6vzcQ2XrTnspK68e1nZirO8gPukG7G50v89llwGaKyOGJ/Aeercc3+b94U+H3dd5diW ZrjDiOfT X-Authority-Analysis: v=2.4 cv=PYb/hjhd c=1 sm=1 tr=0 ts=6877a68b cx=c_pps a=DyTQgNuTERoFRorzy94Ecg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=Wb1JkmetP80A:10 a=0kUYKlekyDsA:10 a=64Cc0HZtAAAA:8 a=qaHvN7llBfijyLw2aiEA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-16_02,2025-07-16_01,2025-03-28_01 X-Proofpoint-Spam-Reason: safe Content-Transfer-Encoding: quoted-printable Message-ID-Hash: GNCH4TCYKTM2JMIRRI7JTXSFVBHJXRYT X-Message-ID-Hash: GNCH4TCYKTM2JMIRRI7JTXSFVBHJXRYT X-MailFrom: mark.caveayland@nutanix.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (found 2 invalid signatures) X-ZM-MESSAGEID: 1752671944546116600 Content-Type: text/plain; charset="utf-8" The hardware UUID (hwuuid) element provides a mechanism to supply an extern= al UUID to the guest, as opposed to the libvirt domain UUID. This is to allow for the scenario whereby a domain can be stopped, cloned and then started as a new domain without altering the guest-visible UUID. Add the element, documentation and core code for the hwuuid feature along with an implementation for the QEMU driver. Signed-off-by: Mark Cave-Ayland --- docs/formatdomain.rst | 7 ++++++ src/conf/domain_conf.c | 38 ++++++++++++++++++++++++++++--- src/conf/domain_conf.h | 1 + src/conf/schemas/domaincommon.rng | 5 ++++ src/qemu/qemu_command.c | 6 ++++- 5 files changed, 53 insertions(+), 4 deletions(-) diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 9a2f065590..7b10dfa3da 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -54,6 +54,13 @@ General metadata =20 :since:`Since 0.8.7`, it is also possible to provide the UUID via a `SMBIOS System Information`_ specification. +``hwuuid`` + The optional ``hwuuid`` element can be used to supply an alternative UU= ID for + identifying the virtual machine from the domain ``uuid`` above. The dif= ference + between using the ``hwuuid`` element and simply providing an alternativ= e UUID + via a `SMBIOS System Information`_ specification is that the ``hwuuid``= affects + all devices that expose the UUID to the guest. + :since:`Since 11.6.0 QEMU/KVM only` ``genid`` :since:`Since 4.4.0`, the ``genid`` element can be used to add a Virtual Machine Generation ID which exposes a 128-bit, cryptographically random, diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index bfc62b6270..63603ca527 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -13098,6 +13098,7 @@ static int virSysinfoSystemParseXML(xmlNodePtr node, xmlXPathContextPtr ctxt, virSysinfoSystemDef **sysdef, + unsigned char *hwUUID, unsigned char *domUUID, bool uuid_generated) { @@ -13122,11 +13123,18 @@ virSysinfoSystemParseXML(xmlNodePtr node, } if (uuid_generated) { memcpy(domUUID, uuidbuf, VIR_UUID_BUFLEN); - } else if (memcmp(domUUID, uuidbuf, VIR_UUID_BUFLEN) !=3D 0) { + } else if (!virUUIDIsValid(hwUUID) && + memcmp(domUUID, uuidbuf, VIR_UUID_BUFLEN) !=3D 0) { virReportError(VIR_ERR_XML_DETAIL, "%s", _("UUID mismatch between and ")= ); return -1; } + if (virUUIDIsValid(hwUUID) && + memcmp(hwUUID, uuidbuf, VIR_UUID_BUFLEN) !=3D 0) { + virReportError(VIR_ERR_XML_DETAIL, "%s", + _("UUID mismatch between and ")); + return -1; + } /* Although we've validated the UUID as good, virUUIDParse() is * lax with respect to allowing extraneous "-" and " ", but the * underlying hypervisor may be less forgiving. Use virUUIDFormat() @@ -13263,6 +13271,7 @@ virSysinfoChassisParseXML(xmlNodePtr node, static int virSysinfoParseSMBIOSDef(virSysinfoDef *def, xmlXPathContextPtr ctxt, + unsigned char *hwUUID, unsigned char *domUUID, bool uuid_generated) { @@ -13276,7 +13285,7 @@ virSysinfoParseSMBIOSDef(virSysinfoDef *def, =20 /* Extract system related metadata */ if ((tmpnode =3D virXPathNode("./system[1]", ctxt)) !=3D NULL) { - if (virSysinfoSystemParseXML(tmpnode, ctxt, &def->system, + if (virSysinfoSystemParseXML(tmpnode, ctxt, &def->system, hwUUID, domUUID, uuid_generated) < 0) return -1; } @@ -13363,6 +13372,7 @@ virSysinfoParseFWCfgDef(virSysinfoDef *def, static virSysinfoDef * virSysinfoParseXML(xmlNodePtr node, xmlXPathContextPtr ctxt, + unsigned char *hwUUID, unsigned char *domUUID, bool uuid_generated) { @@ -13377,7 +13387,8 @@ virSysinfoParseXML(xmlNodePtr node, =20 switch (def->type) { case VIR_SYSINFO_SMBIOS: - if (virSysinfoParseSMBIOSDef(def, ctxt, domUUID, uuid_generated) <= 0) + if (virSysinfoParseSMBIOSDef(def, ctxt, hwUUID, domUUID, + uuid_generated) < 0) return NULL; break; =20 @@ -18667,6 +18678,21 @@ virDomainDefParseIDs(virDomainDef *def, VIR_FREE(tmp); } =20 + /* Extract hardware uuid (optional). For some use cases e.g. cloning a + * domain from a snapshot, the hardware uuid must remain constant and + * separate from the domain uuid. */ + tmp =3D virXPathString("string(./hwuuid[1])", ctxt); + if (tmp) { + if (virUUIDParse(tmp, def->hw_uuid) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "%s", _("malformed hwuuid element")); + return -1; + } + VIR_FREE(tmp); + } else { + memset(def->hw_uuid, 0, VIR_UUID_BUFLEN); + } + /* Extract domain genid - a genid can either be provided or generated = */ if ((n =3D virXPathNodeSet("./genid", ctxt, &nodes)) < 0) return -1; @@ -20132,6 +20158,7 @@ virDomainDefParseXML(xmlXPathContextPtr ctxt, =20 for (i =3D 0; i < n; i++) { virSysinfoDef *sysinfo =3D virSysinfoParseXML(nodes[i], ctxt, + def->hw_uuid, def->uuid, uuid_genera= ted); =20 if (!sysinfo) @@ -28903,6 +28930,11 @@ virDomainDefFormatInternalSetRootName(virDomainDef= *def, virUUIDFormat(uuid, uuidstr); virBufferAsprintf(buf, "%s\n", uuidstr); =20 + if (virUUIDIsValid(def->hw_uuid)) { + virUUIDFormat(def->hw_uuid, uuidstr); + virBufferAsprintf(buf, "%s\n", uuidstr); + } + if (def->genidRequested) { char genidstr[VIR_UUID_STRING_BUFLEN]; =20 diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 6997cf7c09..a00ba729fd 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3115,6 +3115,7 @@ struct _virDomainDef { int virtType; /* enum virDomainVirtType */ int id; unsigned char uuid[VIR_UUID_BUFLEN]; + unsigned char hw_uuid[VIR_UUID_BUFLEN]; =20 unsigned char genid[VIR_UUID_BUFLEN]; bool genidRequested; diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincom= mon.rng index 2d6e15f144..e39dacfff7 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -47,6 +47,11 @@ + + + + + diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 7658cc4d39..c7fd2eb183 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -10713,7 +10713,11 @@ qemuBuildCommandLine(virDomainObj *vm, qemuBuildNumaCommandLine(cfg, def, cmd, priv) < 0) return NULL; =20 - virUUIDFormat(def->uuid, uuid); + if (virUUIDIsValid(def->hw_uuid)) { + virUUIDFormat(def->hw_uuid, uuid); + } else { + virUUIDFormat(def->uuid, uuid); + } virCommandAddArgList(cmd, "-uuid", uuid, NULL); =20 if (qemuBuildSmbiosCommandLine(cmd, driver, def) < 0) --=20 2.43.0