From nobody Mon Sep 8 23:20:12 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 1752828354282984.841609332253; Fri, 18 Jul 2025 01:45:54 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 5D5371584; Fri, 18 Jul 2025 04:45:53 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 433E515E3; Fri, 18 Jul 2025 04:45:12 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 08D3015AA; Fri, 18 Jul 2025 04:45:08 -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 58AC815B2 for ; Fri, 18 Jul 2025 04:44:58 -0400 (EDT) Received: from pps.filterd (m0127844.ppops.net [127.0.0.1]) by mx0b-002c1b01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56HJqFMq015889 for ; Fri, 18 Jul 2025 01:44:57 -0700 Received: from nam10-bn7-obe.outbound.protection.outlook.com (mail-bn7nam10on2133.outbound.protection.outlook.com [40.107.92.133]) by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 47wm1sh0k5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 18 Jul 2025 01:44:57 -0700 (PDT) Received: from PH0PR02MB7159.namprd02.prod.outlook.com (2603:10b6:510:16::8) by DS0PR02MB9077.namprd02.prod.outlook.com (2603:10b6:8:135::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8922.36; Fri, 18 Jul 2025 08:44:55 +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.037; Fri, 18 Jul 2025 08:44:55 +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=edsVfM98aoKZWm5AvzRicBLpWfhfRvrjcryp9YMEj AM=; b=kjsJooqFYfl5S2/pSwRGgBAcK/qA+0zofFkzHe+oJiZd71tUZb3u2W91f /spGs5GKBEBqCSoWeETe/BK912XYEaLMh/cP8Xjch3sj5K9oq/I4c0ZbB8lPMeZ/ kn6staP0ZeOFsYiygStKVYLvmWjsFCZR8Kami4I6NNG7eA44INW8ELvharxy8b64 z79FOFRM3CsxQmEY8Fuft9MNG9Nv6udBNFpOPSB3wsQZtIuL+UqwMj7vNribB163 eGUJUNf9I7kS0Aj+uiDqLsUBUKBLHZr6RRMCBOx0kaLOqSKvEw4jJmZB7vV//zY1 8SiBxzZEhfCZzLDR++Kp6qv3S3LbQ== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=m60pNytvRpUgSd8lON7ZeIMWVFpi1/aacPtfUmm8lzh1fl/5qkSEAjbU1bAocJJHz7XVxlJ1IjdqU0HH4xJwCNdr4L/VNk6HP7sWowpBugUR34Z/g2ctvTlcJZLO0MtNoqTpSxgPFYaQMcBBQorQt3d2Z95TSQfhhyteRTD1jbxRT3nLua53ybwho9Z7qb7cW8Fk2lGdX6KvMwnF3ckK4mGQbuGRjdkeAVS+VGuu28zsPI6BVlWJnyQjBZNlYisqwIDhasDRWCQ2vv1GpRc49IZMM1Qm+CQUzfmC1aLiEQ7lDtRyvuIVt1PqDDyiUmsezXVzUWqleL+bwX+BdpVHsw== 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=edsVfM98aoKZWm5AvzRicBLpWfhfRvrjcryp9YMEjAM=; b=K5jnPJSpUq3dn05fif2YdCgqIp2RtQR7RdP4u5MNdmy4wL/YvnmDNl8CLIejYwUGqokCuoIQqY+9e5atnqH1mkmciU0AAc+kDgFn7tZdhTL+etIN22RCLClIz1iMVMeDsP/FdtysqyG1t/jKi1DfGYEoSjnetqbR6BO7eMWRnwntxPgio1jGwdkc/qr5sMjR9T/NcnzNIU+2JFAwoV8/8oUfmAqYYIfD5L++uKHKX7j3gsJeni0rIbfV71qzPYJJyN0yMSnKGy4Imm+JFDZOvkljroEutbh9fFW/EPiLPl+qpumRjlOIBlWV/RThVvOWoDuaFAP14bEIm8bhH5MN8A== 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=edsVfM98aoKZWm5AvzRicBLpWfhfRvrjcryp9YMEjAM=; b=hYL0ei0QcxlKJztsDPOKNSOevJbQKh6ZmXALevfG+QBm+Ok22tcGEEjrOdJ4vANHqxYRU7oBSlTZiyXaCNRBEoIyLLXo5JJyGt7AZ0fQ7SHlD3XFs+btchnKYBAm5a5P9kKueyECyiXtfJa7qLKH/cgaPekyyZNaUQlYB0F9+QLo2AqfKBrHE/ktM8FBFbsGALUbfwByKPAW8YyydsgFamMAijv+HlxLqoIpoWR5NAew0e7rIuJWiK19I1joU/wRkaKUreRTKdukKJUk5Ef3Y6WGo2AYZPvgScXfWQJZ9kZNaJQRja7a7ladKGslOC7G1wdkIprU/h0tE8mIK+fZXQ== From: Mark Cave-Ayland To: devel@lists.libvirt.org Subject: [PATCH v2 1/2] conf: introduce hardware UUID (hwuuid) element Date: Fri, 18 Jul 2025 09:44:38 +0100 Message-ID: <20250718084448.616898-2-mark.caveayland@nutanix.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250718084448.616898-1-mark.caveayland@nutanix.com> References: <20250718084448.616898-1-mark.caveayland@nutanix.com> X-ClientProxiedBy: LO2P265CA0081.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:8::21) To PH0PR02MB7159.namprd02.prod.outlook.com (2603:10b6:510:16::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH0PR02MB7159:EE_|DS0PR02MB9077:EE_ X-MS-Office365-Filtering-Correlation-Id: 6af81245-a3aa-4d77-b1ae-08ddc5d75e9c x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?fN4AwaXTG/Hnz6q75KmbaulC2h2j5Arq9xoFimhDpezhCnyHdpfoDSN5oHgM?= =?us-ascii?Q?FBB7q7Xd+HyJNGjN0Il6kKPy9bO4Ut+t1dB6C8uxRhRYBEhjWhAbgUFBx7Gr?= =?us-ascii?Q?fDTSW56TVCnAThAc2fENLFsTgoJO06WBrhNYHnV1U4Pq9msL7+3kS+Fdm0G0?= =?us-ascii?Q?g70c4j1K1PmEDjKOQ8pnUupYgZueGnjWGO5IljYe+6DdAtLufDqLnBPWOGM8?= =?us-ascii?Q?VQ0wiHvDVdka5YewGBhzdFT2YZcf6p8G173fM3k2Aa+gwcuqGptLqQDM3uXW?= =?us-ascii?Q?4xjjeTm0vaE/BZCOCVpZxtQEO8yOwvYfVL0Gq/r5K7ZIsQCdFCo1049k6wZi?= =?us-ascii?Q?OET383ZSv6bGVRCQh4c/6cUuumx9fU8jF5N7Tb8Pb7bq6C7hy5c4Mz3nvUMm?= =?us-ascii?Q?CPHKGRvTcUGiiecllM/RdXc8djcJGws+fyXmkDdLnDJYR3hZ3ialfWpW8djA?= =?us-ascii?Q?kJDqcBlxZDvggSIsowQpPWtIMgUap1AJdXxEKH9KBtDBQVvYjlR9x2oRddty?= =?us-ascii?Q?HR0W4FWKrQtZJmS1agrkbX2vQ3IkA0D5McFgTDyyZzBqpZVI2a3LMjBR2kQC?= =?us-ascii?Q?nJeG0D+IiFNJBQuKerudA3G3RwzKb3asdOLpCvW+60CWDrMK/2Cj9H0941qC?= =?us-ascii?Q?FBlzf6N5N7LW0rS9ivJmdPyBs0DrqVvPmTSQ1LTO9AFF/STedJ0C2UBURNaM?= =?us-ascii?Q?Z4LWLTBC9Rwl+VgI+AhLocYs7ZL2r0nmb1k0D05H0EUVjGBkbEmVOQZsRXIg?= =?us-ascii?Q?QGn7XewwOm+KHr4ioctRWhUSnzSA02r5CjlYly1v2Jv6yoU+v8Ms7zSI7yp0?= =?us-ascii?Q?o9jA08M5X6iZPzGaEwdKbxYSRoRVZ3A89Cbz53HFLVglb2vmZgszti7Am3T6?= =?us-ascii?Q?rkCD1clcEGNtAHRi6hWgMuTSdEtUVzvNLD3yja1BhsN1rR+YkclFAKgyBAlX?= =?us-ascii?Q?ev4GQLSi+7nwrMgYZuhhhh3bcXN/wlrekRWyQ0Bii+tOREqndhdtirGaGtt3?= =?us-ascii?Q?KZ7/T7X43ZLkP9rEShzQYIFlgfxVBaaiQCSwN52j+LtEqYBqBcFK1/Xzu3wB?= =?us-ascii?Q?R6u0G5Kn8RzRW7iwaf4COeEkYo6egCnCp+NzXO2VWPtJINdE/ihaWExYk5O6?= =?us-ascii?Q?TsQmi9b6cEa0FGYtKYXquPdw/2egsyhCUQ/U2boGYVSeuS+XPqs1pCLxbTCM?= =?us-ascii?Q?UlFyaK+LzQlE8KiMmx6Khm4ZNv8sep0w3qft9wi3qh+TbCpTGeuYnUi6FmyH?= =?us-ascii?Q?iV8y8TuN/uwSj4UxgRXd9/YQq5GiYvVV+hawGumYmkCwWqIaJsnUQtKD6tqm?= =?us-ascii?Q?26M8KL/Ee/oWmeGWdRvbVZbAHmB+BMgOhqNU4SNGzkT1E4MOd8EWGD0DOM//?= =?us-ascii?Q?Gut1d+yH89RJ59OvgXxckgFsxjc4uTd+Bvs6dPiZcm5ulGs+0M7cwUESsX9P?= =?us-ascii?Q?978l/u8qilg=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)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?e/u2h7Hsz5TrnjM1RrPNnLlDhcsGAI+/GHdz2/uIz5M15UjvAF19zb7krmWv?= =?us-ascii?Q?eKFxRLbhesu+nQ52aB9bgJuSyCmXdTmN1dF1KLLnPDfBPer2Nt/YZI0jBgzR?= =?us-ascii?Q?REykF7h6UCzrxJe8OOkX2PeaX3irV/rfl4KqjJL1+TR2W7yBdRxZdoylH0xA?= =?us-ascii?Q?x1f9fjVN08P9U4rE+3gXkCjLGweAb63iwC6WrQkTgjmealFFj6mS+Xi23NbW?= =?us-ascii?Q?fZDi4YikHVUz7PBZJdR0DwK2LLC12Ie4LM1xFmz2IJdQ/Hinju6Wvt9BlxaW?= =?us-ascii?Q?FEtYkZAwxN8bvxjn5ktuNIATUNcFGRUhywezO3bY5MhM2DV0nZjgQ1jKzZHN?= =?us-ascii?Q?YrxwAjgt5+4NViqFw297E0ggHxLR/x4W020fO2QXcRnOuAdnRlNpg7nXJNnS?= =?us-ascii?Q?rLQo7Gd+EcXzqdJPekCEtTOs5Y2r7dbKfg53tCoTZ1zlv+icItGrR9Wvx9Pc?= =?us-ascii?Q?tgC1N3gezGGJHMXi/WST33CAe1JrTNST0DWwDsyJ1WqdE/WGoyh7ZJjEqy2j?= =?us-ascii?Q?i2I0jM7nt9BYkX/HiAXLsLNuzjenZMMOmgIZFVFOfpkBlW7v6toBGbuFRdww?= =?us-ascii?Q?dV528367MpaHOJZvr9yrSDpVgrwqH8X82SF5+54xnZUfXRKsQ13Go124+6XH?= =?us-ascii?Q?OSGs+Z6g5NipsCxkpcqDqcah85VQ8Ra+InG+FbGbs9n/QSrfnyMxb+4SDrhc?= =?us-ascii?Q?bmjjOJ9rfZl1Nb8Zy97o/LemrznmxDwCrkw1WUnSR0vP+CdV4MEQVum79Gn/?= =?us-ascii?Q?1NZlpCJqIQu1PwtEm1oyLvIK8lDNsu6MzKuGNWZPzV9ZA5aRqwTHoGdawNGL?= =?us-ascii?Q?eQLa9L8WWvamiQPGSonzFY3fq76bfXuMDSEAgyVeY+6m2IH1rRi6HKPRVQsG?= =?us-ascii?Q?GFuHo40D3Q9XCYf46dlH+SZB/vCW4Vs0qdZToclHkbhTbHI9tPNKre8EHRQt?= =?us-ascii?Q?zmbmfaTvR983NAOWcU+i/Z9gWbYDvPXiTTRcNy5gdrXV3f33ZUcaM+7iQOg4?= =?us-ascii?Q?7p2qV7lMTf6qIsPP8wcD9Jq1cyjj2z9JzPqm4PysbSjlutavjIApKGseJuPe?= =?us-ascii?Q?IDW5dYfkNGNJnvIR49ZmJEj2QmIZD8W5JxrRddvIBWKK6q3FERaszj+K+Z+1?= =?us-ascii?Q?6/pxmz99sgU7dRd7Uu3/wmW/N4s7l2WLaVsbBEPr4Z7e3oha59Vm5SD89ATQ?= =?us-ascii?Q?bm4gUPnkuAaFeWJKvIiol7sQx+QG5e+94P9s+btBCnt4kyM6tT3Z/wGGm+B+?= =?us-ascii?Q?d7uVfgSCh57ZLGUTehEqcypKcCwPKA8WoX4qeglxelQ3PK+NZJv9vcbQZcQv?= =?us-ascii?Q?oexelC1ixt+KVm0bOBRFvA9L/t407WES2W4Yw0fPHRMVSVdSFry9oTcllXbV?= =?us-ascii?Q?lDO9lC8iaJW57PybWQnw5BVq3NPDN1+fOzfpOaW7n/v578OQIhBZczBQTAMA?= =?us-ascii?Q?dU+4Vj9ZNufpL9y7a7bRfA1MyeyT7kmiMj4pPC5W4bDZJCD9e5sWNllzUN1k?= =?us-ascii?Q?Za/P+qy1rIJfYsj40bfWWcf1TeXVgCyqgQuutu6AHblwRRbJ+E0aT0G/KGh/?= =?us-ascii?Q?d904PUqhQGblvu496A3RkN4okkonmfhX7FKCZpmNe6WLX/9XDU4sBVrtKWh2?= =?us-ascii?Q?lvwwtoMdnYmb3O6IVe4efGBS3L5hviNzxiJBk0GRZWKeu4d0lhl1w7iB0drM?= =?us-ascii?Q?uBssTw=3D=3D?= X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6af81245-a3aa-4d77-b1ae-08ddc5d75e9c X-MS-Exchange-CrossTenant-AuthSource: PH0PR02MB7159.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jul 2025 08:44:55.4481 (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: cUzAbaIh+oFCUK1EOveCTE5i6MoUckgrqcKT617u5z50gr8XnoTPIN8w7DV5Q2ksnqWyxOdpcSXfdvehmuK/KBqxgmIcT40NykI1VV+NsZI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR02MB9077 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzE2MDAzMiBTYWx0ZWRfX0LdAUZvSdjHE 0Gg0ZqU4p8nnfnzHEny1Cv5Rytjq5CUAq0NFz2+p/eLhGW2FN1UFmIivJZqfgiYO6/1u84ST6YR ul1ovrihc9uzOQl3owaCyLbDI0s+BdUnL/gU+gDW6cSNFXOvzcQ3iZ9GMM6/k9eMgQZuYTkWTod X4JLEcCYrr8G3OJhyBmU9Wkgu85uha0F3rtHq4H9mwsoZiW/jM10Hg89eV1F3Z00GEHAyAYS+x4 1B39P341o3HzmOwnnzgo1hYfa/fYKtqVcoXyjFOfJtDD1hzcA0g9Azb/nM4g1EY/D0lCro+InB4 vM9Fvk7S8IiLndOe1rT//mJOAL+vuGum1qnKHnWLVAmj4idO1gi/nnG8prAxz20xGY2Qg+zdJ2y CpgntxhU X-Proofpoint-ORIG-GUID: 6NvF6dSE76R93u_Gt47xgpZPBR_7O0U6 X-Authority-Analysis: v=2.4 cv=fZity1QF c=1 sm=1 tr=0 ts=687a0989 cx=c_pps a=IA3z5DP03+00aNcgMV2pVQ==: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-GUID: 6NvF6dSE76R93u_Gt47xgpZPBR_7O0U6 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-18_02,2025-07-17_02,2025-03-28_01 X-Proofpoint-Spam-Reason: safe Content-Transfer-Encoding: quoted-printable Message-ID-Hash: EYNXD2QESJI6VMZY3AXM45BMBT4N4GJM X-Message-ID-Hash: EYNXD2QESJI6VMZY3AXM45BMBT4N4GJM 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: 1752828355520116600 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 | 43 +++++++++++++++++++++++++++---- src/conf/domain_conf.h | 1 + src/conf/schemas/domaincommon.rng | 5 ++++ src/qemu/qemu_command.c | 6 ++++- 5 files changed, 56 insertions(+), 6 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 ba0d4a7b12..420525558a 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -13102,6 +13102,7 @@ static int virSysinfoSystemParseXML(xmlNodePtr node, xmlXPathContextPtr ctxt, virSysinfoSystemDef **sysdef, + unsigned char *hwUUID, unsigned char *domUUID, bool uuid_generated) { @@ -13126,10 +13127,18 @@ virSysinfoSystemParseXML(xmlNodePtr node, } if (uuid_generated) { memcpy(domUUID, uuidbuf, VIR_UUID_BUFLEN); - } else if (memcmp(domUUID, uuidbuf, VIR_UUID_BUFLEN) !=3D 0) { - virReportError(VIR_ERR_XML_DETAIL, "%s", + } else if (virUUIDIsValid(hwUUID)) { + if (memcmp(hwUUID, uuidbuf, VIR_UUID_BUFLEN) !=3D 0) { + virReportError(VIR_ERR_XML_DETAIL, "%s", + _("UUID mismatch between and ")); + return -1; + } + } else { + if (memcmp(domUUID, uuidbuf, VIR_UUID_BUFLEN) !=3D 0) { + virReportError(VIR_ERR_XML_DETAIL, "%s", _("UUID mismatch between and ")= ); - return -1; + return -1; + } } /* Although we've validated the UUID as good, virUUIDParse() is * lax with respect to allowing extraneous "-" and " ", but the @@ -13267,6 +13276,7 @@ virSysinfoChassisParseXML(xmlNodePtr node, static int virSysinfoParseSMBIOSDef(virSysinfoDef *def, xmlXPathContextPtr ctxt, + unsigned char *hwUUID, unsigned char *domUUID, bool uuid_generated) { @@ -13280,7 +13290,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; } @@ -13367,6 +13377,7 @@ virSysinfoParseFWCfgDef(virSysinfoDef *def, static virSysinfoDef * virSysinfoParseXML(xmlNodePtr node, xmlXPathContextPtr ctxt, + unsigned char *hwUUID, unsigned char *domUUID, bool uuid_generated) { @@ -13381,7 +13392,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 @@ -18671,6 +18683,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; @@ -20136,6 +20163,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) @@ -28907,6 +28935,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 6008ec66d3..c3492a5f66 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3116,6 +3116,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 fc6ce4dd91..d6ed21c136 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -10718,7 +10718,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