From nobody Mon Sep 8 17:06:08 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=pass; 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=pass (i=1 dmarc=pass fromdomain=cyberus-technology.de); dmarc=pass(p=none dis=none) header.from=cyberus-technology.de ARC-Seal: i=2; a=rsa-sha256; t=1756386815; cv=pass; d=zohomail.com; s=zohoarc; b=CC8kcY2JExy9fNie6rgrWioUADNs9XE4znmYsdV9D8ILdoPJOIb3BXHCVEPaewZiVfbiczMtKUf7ort7PWSWfqpC64xvwgNkeEWv9qJegpZlHbAcOvt37u4lEdwbPrY2zvZCgHXxwQk/oRY0yiWJRM25WC57i67gxjXOtbO/blg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1756386815; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=Ygg/g3Bx5Q+4+z3LEqYPESHn5NlN0JZ90/BzHDvfRfQ=; b=n0qPihKxQloAdd+Kxypx/haqbbzgaSsOkGyeCQNfZh2Zt8Avr6J1eqj5tkHoFC+PwO2CydxKoQlnN34t4DPCiX6WhZchBp9M268uJnbho2D0xv2f4/3eOT5m5U/KeHpDYsNcYQ0lVfpHcJB4qhfvpHaGkuPatPmO4nyRCHZRuIU= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; 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=pass (i=1 dmarc=pass fromdomain=cyberus-technology.de); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1756386815152687.6504319305438; Thu, 28 Aug 2025 06:13:35 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 22474441E4; Thu, 28 Aug 2025 09:13:34 -0400 (EDT) Received: from [172.19.199.3] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 9CBC34425B; Thu, 28 Aug 2025 08:56:12 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id CAB8844094; Thu, 28 Aug 2025 08:55:14 -0400 (EDT) Received: from BEUP281CU002.outbound.protection.outlook.com (mail-germanynorthazon11020113.outbound.protection.outlook.com [52.101.169.113]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 54A984408E for ; Thu, 28 Aug 2025 08:55:09 -0400 (EDT) Received: from BEZP281MB1973.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:46::5) by BEVP281MB3430.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:91::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9073.16; Thu, 28 Aug 2025 12:55:05 +0000 Received: from BEZP281MB1973.DEUP281.PROD.OUTLOOK.COM ([fe80::7272:f32d:eb8d:e401]) by BEZP281MB1973.DEUP281.PROD.OUTLOOK.COM ([fe80::7272:f32d:eb8d:e401%5]) with mapi id 15.20.9052.021; Thu, 28 Aug 2025 12:55:05 +0000 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=ARC_SIGNED,ARC_VALID, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GFo24ItDsoFCh9OX9ctrQrV6iI0JzH1XsoASz4dArojdppv9NTHDnyj75aQhkjfLVazfxqpNnGTiFihNqbjKaZci55WE5YdjL6oH/yBZO75+XNiggA5csMb5X34neWH/PXlpFn+JBSwfkZwNsBoiRSv9UnSa+UcOGdy6GHUv9lS9bbrgfzanRmpuhvaNFSDt/T1Abskd1nvGCu3s1BszofNOXtb6fFiZtBXnnx7p5auML5D9/h9ZXk2+RCdceTuxw7leV4ZEeMsyGL58tVX8sTEF4M/NcsI94kDDy8I1e0ho2S3sEglpR8CYAtoXv5HnBLTuGYsR6Q6iwX6ErKL1Mg== 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=Ygg/g3Bx5Q+4+z3LEqYPESHn5NlN0JZ90/BzHDvfRfQ=; b=E5ZUojRW4iu/gW4WboPMtEIzl+Q4iRD/YuXSlHF3UvmlZRuOXw5F/hDY9iR0iSoZ0Zyoe16g2bKoNbXZm1UD/k1n8rING856UObz2isakz9FgLIjzUnSkOa7KwiD6AiPZp9K9/2LPhJ7VKKaYbVNS3UUYALYKHUtEplBhE1hC009fLc8J6gjuOrkayZe2rG2wqal/1NOKcDkYWBsEQPkdaArlu8//p1TeiHvmn+wAjFmvc6Vb1PPEEoXXBangJpGf1jM8hp0ELrf/+xefryv/G4UqwG2aEgDDLaOhOhEbvsm9pqtEndXNYTcAQW2QegD1LzltdovXBUknpwoS5TMTA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=cyberus-technology.de; dmarc=pass action=none header.from=cyberus-technology.de; dkim=pass header.d=cyberus-technology.de; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cyberus-technology.de; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ygg/g3Bx5Q+4+z3LEqYPESHn5NlN0JZ90/BzHDvfRfQ=; b=xIYblTB/mp8skc56xxz2djO89ZoJzBxMDXdtWS1CQGpt7TK65cc+fLzhxKPfkpzJVB2LUex6gHXSVmEqL64rFYfopHkLbxneAnp06ZJigmYSNr5lSMcyQYcpC7HiE9xZ6ghOffEADlrWdDRgVDUkWZoohMmbDULPYAzDmq6TP0th25/WBbPxnjNwL3cLy9n+5fXkmiCLWeCjdoOURW8bqhWBfyGPMmdjrCOH3CqT+0QIfZ91gQjDi/Z9QMd5U+QtufNyHmfiynGBrceVcAGjQ6MqYHahWlr5oXz7CMap7k7ImddjB1j/fz07lVIck8XD2P9DIt0q6TNQqsRF2E593g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=cyberus-technology.de; From: Stefan Kober To: devel@lists.libvirt.org Subject: [PATCH 09/13] ch: add disk attach functionality Date: Thu, 28 Aug 2025 14:54:49 +0200 Message-ID: <20250828125453.202358-10-stefan.kober@cyberus-technology.de> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250828125453.202358-1-stefan.kober@cyberus-technology.de> References: <20250828125453.202358-1-stefan.kober@cyberus-technology.de> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR4P281CA0249.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:f5::19) To BEZP281MB1973.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:46::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BEZP281MB1973:EE_|BEVP281MB3430:EE_ X-MS-Office365-Filtering-Correlation-Id: d794d51f-ce00-4e6f-2b01-08dde6321b82 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|10070799003|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?RlW2UQRo5BntAFYR2bNBYMm4bvtIXLa4CgB9NCyp3/Z2ynIIuYov5ZHUaUHs?= =?us-ascii?Q?sRr9Bw7b00hKMKEKHdVseM9o65VQz5U6eEXqnftnFzwrghI2RF8CDxQna5GG?= =?us-ascii?Q?Q2ZAXZb1xhHwdGVy7mYvokS1f3MdYiPwk8iVNJnNVRjv5JS27Vu7Fa1130Uv?= =?us-ascii?Q?TcgiC14sr2J5opYfjQNcku8R6yrB3UpXcexJUTJkBOW2f8vGrDTF/kn3h3m9?= =?us-ascii?Q?nYSkFALBcMONuLIugYsh3m8SGnwj7L0Y7tinCDBvzZreneJnec2DDKE0EdeC?= =?us-ascii?Q?GeR5m//qOIPVyhCzUWESkbb4K7Lr2UYeHMrSOJaY4MrnxgFeyO9whJeH29ua?= =?us-ascii?Q?PloyL+75BIfWuKS2ALK+yAvSsnMOyB8ej1I32aSP6QH0rndw6ZDTS5r6rlon?= =?us-ascii?Q?IqRcEzJxkSUkqjOafWEOyGHnGIi9izie+4x/hT3Ow7A4qVhHLdTENq7pRbF9?= =?us-ascii?Q?c+ELIb1PU6qtWa0cKiqoquvpWK4VGg6pmOiy+4Y5FMrgvM/U4StU+p8ZjGsj?= =?us-ascii?Q?3umhb0YgqZdNaEdkvdsQPZ2+Tp8ZSvzQRn//NN+gSZqnfojirVXwZNDi6TMS?= =?us-ascii?Q?j5xBJNcfGjJEua8TeSQ25p2NHw4R8BJLab8PND5D6Wm2o9mlAa2lwm+QHQPW?= =?us-ascii?Q?4ERNqL9/owXJLypsDGEA5R/nddQdYOfmEZB9CDNQf2XTmxqWwQ5oRDarYAgD?= =?us-ascii?Q?rjjl5RCM7713IKLN4fBJao9Mm/XoRFmPJBY4q6hqadC4Yo78Bq3NgGMKa4Sz?= =?us-ascii?Q?LYK//o/q2v8lSg6p+kPKOboYDVS9aiJPJSoT0s7OySzLPl6anMDbYXAb49sF?= =?us-ascii?Q?7flcWja6f2Hclg9AAurxt6YbVOA1f++V8OM7HwP3Mkf4anEcdC4tJMp5D3u9?= =?us-ascii?Q?VQ9cJulxJOILTiWHhLK3BmTfF3d64+JjAboljB5MO3PxmE1vNtoLhnIbKUyU?= =?us-ascii?Q?QuLZpqs3D6oSZYRCZ2vKuksoT376y6cXrjAeI7xX3EU9srXeoMFj0/kV07b+?= =?us-ascii?Q?DV36Q+PxPVPLsydAAZ9vmQIjvPyHLPSIvkW2vRBg+R4lQaNskORAjNtrePKi?= =?us-ascii?Q?3ivNDGmJA6vaaDxyT+3cpxEGxVo6sNrZlo/nBoGrnyPM8gDRQVgQZlC0t5H0?= =?us-ascii?Q?Fzf7ajQe+ie715hW+MBIsZZo1KYzDKL/75kg//Mq89cVhyET83ArS7tZFvPF?= =?us-ascii?Q?zb3mAPZ1M0MmFgXykDkVrfMIf9SKMqJu2d5I9n+LIfyPDe5E9GTaWIr59/cB?= =?us-ascii?Q?XDhCDAemSX+nERZNEI8Wn6ctH98xWAKRXvP9cxExozQ8dinX+SSprpRNUkIA?= =?us-ascii?Q?+SOHhKCgCTZ5aywWar9VoXFo6bddJO+KXkR8V6OVKpXtCvigBttAh9X6eD57?= =?us-ascii?Q?dOkWMZYYwsed/qHNd7FHEtfoNU06+0q8T/7aO32LhHLHYIyRVfAxB3yzBkc7?= =?us-ascii?Q?CXpyzvnYRNc=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BEZP281MB1973.DEUP281.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(10070799003)(1800799024);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?iikIh8GTkvMwqVm2QniV0DJRhmy7x582l70wlWrSrvYvTl6qjSYl1I7zgC7F?= =?us-ascii?Q?nuSae2o0mSYoNiSiTpx9RrRFfq3I5+X7heph8+1VnDBDRPQQfYEQkMXot7Xn?= =?us-ascii?Q?r7km0DjPZx98Tn/kR7/dPwnDf9qdJsDLeqBd1vfKJHWnsQElKh1jkMgeL0FS?= =?us-ascii?Q?oiquep7XHhgu6P85ZNr5okwd02e+psvtDYBCZtNhj1ztQnBYfE1d9JHauBmU?= =?us-ascii?Q?nLq+CY3vTwXUQy2yA7CjYhHfT9tgQptOYevEpO3qRUoJs7FEDb4O14U3GHpO?= =?us-ascii?Q?NwR+puTuPYyAGmkGEdDH1Ikhgi/PgOATSW1+GnYtTzZ28vVZYa8xeGgOS/CW?= =?us-ascii?Q?EEW9ZOcIgSx+mXo0TBAwuXlHELkIsJHu7msgNxRme5u/XOD6gB+BY5ZozLkR?= =?us-ascii?Q?U5mwm8pTJII877svofU5F4FbtPaA5NPHEBhDlwgAFE5ByEHvF+N7OMy/zXz7?= =?us-ascii?Q?dUvDF0ajNdGsjG/Q6TupFxTl5gyxWEPii1Iy0li8spGkBbzF3Mh0OrxMXRYP?= =?us-ascii?Q?vGEV3s2rXwWmQPajDLD7h6Ynt+YXMYdbQLmMNVUnSoeLMPgXj97YASt0wIRo?= =?us-ascii?Q?FQ/BYIpsbUWbs8zGK51Aa23RZiiGhDr3HX1gTZUf7a+w4yV+ren/hVvXFzoK?= =?us-ascii?Q?gikEaTYPOFzwQFPRNhihEmTRc3lwxrm54xW8uWef3enAlw5zoTY4Q2l34Cin?= =?us-ascii?Q?gX2PnYMCOI67ya/zOGeAXm91ODobYokQKMILakkhLcSynCaVbVzoIm0YBT3s?= =?us-ascii?Q?1zT4eth0hbaSctGfwytfKa0Zpd3k5501qsciLgqPxZ9fNzVV4SD07gtvTYfk?= =?us-ascii?Q?P0yaNWtsqtYKstFICG4pDbpIMHvaIIBpr5TU6CW5jkLpFhB+6qnbz2q+Ethd?= =?us-ascii?Q?hfDT9an9P0ObxFzfXBQrGtszTrrw3Xhe8oa4nfuY2D1A5vYCnp0Ttp9jGCH4?= =?us-ascii?Q?mIM0tt1rs3YLNPU6uOjJEUJ0Y282JqkrL6ASbTLvh+rBcQjea11oxORrWoO/?= =?us-ascii?Q?vDT6RrNNTee8qwFwnl2+6OXVw+4m93TB/BlSvJTebJ+jkE7Kv2ouUD2pUoF2?= =?us-ascii?Q?bPbk17sgTQqPhcp817kbbf5b9/e6OsQnRnza1yyzZQ3hx8knWnT2zPKGdP3u?= =?us-ascii?Q?lf37OkfkaR62TSFl2i+RJyldY1Ymo1nXcgRjSXln6z9a36bFCFNcvNeshWJo?= =?us-ascii?Q?4M3FncqwQeOrUptbg1MgIfwvm8zwghSiC5Gqs5q8fUcqPgagDnTh/6WSj+rd?= =?us-ascii?Q?L9Efhr5+SNFvL1U/ZCaKfkgGqBV4kiXcCrixYaUZpi4dqe79Q/jhm3eX/J5d?= =?us-ascii?Q?G2PtS3HdfUHsCJr9/FzLZ9FsUk0Mn2+d3kvuB/6y0vks+kmXQOlI1fAjHEnW?= =?us-ascii?Q?F9o/0QLHzBwmMdC+2e3GlSKQZxDA+/EkUR+Iy/Vl24DCO8gIOHkZbBfEfDkZ?= =?us-ascii?Q?ADA4Zb0Net5sdtrqshQY3P5+u7VdI8qmsQ1B9HYrDH9Z5dDOOYiIiwshjSy0?= =?us-ascii?Q?QgzwpJrkQRpQQn/aD3X7t8APnFbb80gT3Y/0/ZggQ+v6pp9ep8lazI6vKvfM?= =?us-ascii?Q?hZFyj9SPtSsBaukmDEFMStl756CMUS+teoIF36sU2FsG8McNawHCYF/gDHr6?= =?us-ascii?Q?xpyUj/YLRpIezZeXzHDOA9sDBvHxouH9KbPe3lDvETvku5qex51NglkjwTZl?= =?us-ascii?Q?iUN21BXdvj/kE/W7JZyx5KBAh4I=3D?= X-OriginatorOrg: cyberus-technology.de X-MS-Exchange-CrossTenant-Network-Message-Id: d794d51f-ce00-4e6f-2b01-08dde6321b82 X-MS-Exchange-CrossTenant-AuthSource: BEZP281MB1973.DEUP281.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2025 12:55:04.2733 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f4e0f4e0-9d68-4bd6-a95b-0cba36dbac2e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: lQdvOTRuJM7HKCiHSgAX7yvc/vbWufUaWeXwmiZieLYTbcHg0/Ys/ERanfLU/wJzqEbezBjTrVVnLtKeWiD6sI6c34M+8NHoiEJ/LcPEKZfWMuBeCphYnMrkI8VShl3C X-MS-Exchange-Transport-CrossTenantHeadersStamped: BEVP281MB3430 Message-ID-Hash: GSLJQW2Q23X64V5OWBJ2ELJHMTFHV4CS X-Message-ID-Hash: GSLJQW2Q23X64V5OWBJ2ELJHMTFHV4CS X-MailFrom: stefan.kober@cyberus-technology.de X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Stefan Kober X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @cyberus-technology.de) X-ZM-MESSAGEID: 1756386816710116600 Content-Type: text/plain; charset="utf-8" On-behalf-of: SAP stefan.kober@sap.com Signed-off-by: Stefan Kober --- src/ch/ch_driver.c | 2 +- src/ch/ch_hotplug.c | 131 ++++++++++++++++++++++++++++++++++++++++++-- src/ch/ch_monitor.c | 17 ++++++ src/ch/ch_monitor.h | 4 ++ 4 files changed, 149 insertions(+), 5 deletions(-) diff --git a/src/ch/ch_driver.c b/src/ch/ch_driver.c index 39f9d934c0..0484201c88 100644 --- a/src/ch/ch_driver.c +++ b/src/ch/ch_driver.c @@ -2366,7 +2366,7 @@ chDomainAttachDeviceFlags(virDomainPtr dom, if (virDomainObjUpdateModificationImpact(vm, &flags) < 0) goto endjob; =20 - if (chDomainAttachDeviceLiveAndConfig(vm, driver, xml, flags) < 0) { + if (chDomainAttachDeviceLiveAndUpdateConfig(vm, driver, xml, flags) < = 0) { goto endjob; } =20 diff --git a/src/ch/ch_hotplug.c b/src/ch/ch_hotplug.c index c46628e7e9..524355b93c 100644 --- a/src/ch/ch_hotplug.c +++ b/src/ch/ch_hotplug.c @@ -18,18 +18,141 @@ =20 #include =20 +#include "ch_alias.h" +#include "ch_domain.h" #include "ch_hotplug.h" =20 +#include "domain_event.h" +#include "domain_validate.h" +#include "virlog.h" + #define VIR_FROM_THIS VIR_FROM_CH =20 +VIR_LOG_INIT("ch.ch_hotplug"); + +static int +chDomainAddDisk(virCHMonitor *mon, virDomainObj *vm, virDomainDiskDef *dis= k) +{ + if (chAssignDeviceDiskAlias(disk) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Assigning disk alias failed")); + return -1; + } + + if (virCHMonitorAddDisk(mon, disk) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Adding disk to domain failed")); + return -1; + } + + virDomainDiskInsert(vm->def, disk); + + return 0; +} + +static int +chDomainAttachDeviceLive(virDomainObj *vm, + virDomainDeviceDef *dev) +{ + int ret =3D -1; + virCHDomainObjPrivate *priv =3D vm->privateData; + virCHMonitor *mon =3D priv->monitor; + + switch (dev->type) { + case VIR_DOMAIN_DEVICE_DISK: { + if (chDomainAddDisk(mon, vm, dev->data.disk) < 0) { + break; + } + + dev->data.disk =3D NULL; + ret =3D 0; + break; + } + case VIR_DOMAIN_DEVICE_NET: + case VIR_DOMAIN_DEVICE_LEASE: + case VIR_DOMAIN_DEVICE_FS: + case VIR_DOMAIN_DEVICE_INPUT: + case VIR_DOMAIN_DEVICE_HOSTDEV: + case VIR_DOMAIN_DEVICE_WATCHDOG: + case VIR_DOMAIN_DEVICE_CONTROLLER: + case VIR_DOMAIN_DEVICE_REDIRDEV: + case VIR_DOMAIN_DEVICE_CHR: + case VIR_DOMAIN_DEVICE_RNG: + case VIR_DOMAIN_DEVICE_SHMEM: + case VIR_DOMAIN_DEVICE_MEMORY: + case VIR_DOMAIN_DEVICE_VSOCK: + case VIR_DOMAIN_DEVICE_NONE: + case VIR_DOMAIN_DEVICE_SOUND: + case VIR_DOMAIN_DEVICE_VIDEO: + case VIR_DOMAIN_DEVICE_GRAPHICS: + case VIR_DOMAIN_DEVICE_HUB: + case VIR_DOMAIN_DEVICE_SMARTCARD: + case VIR_DOMAIN_DEVICE_MEMBALLOON: + case VIR_DOMAIN_DEVICE_NVRAM: + case VIR_DOMAIN_DEVICE_TPM: + case VIR_DOMAIN_DEVICE_PANIC: + case VIR_DOMAIN_DEVICE_IOMMU: + case VIR_DOMAIN_DEVICE_AUDIO: + case VIR_DOMAIN_DEVICE_CRYPTO: + case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_LAST: + default: + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, + _("live attach of device '%1$s' is not supported"), + virDomainDeviceTypeToString(dev->type)); + break; + } + + return ret; +} + int -chDomainAttachDeviceLiveAndUpdateConfig(virDomainObj *vm G_GNUC_UNUSED, - virCHDriver *driver G_GNUC_UNUSED, - const char *xml G_GNUC_UNUSED, +chDomainAttachDeviceLiveAndUpdateConfig(virDomainObj *vm, + virCHDriver *driver, + const char *xml, unsigned int flags) { + unsigned int parse_flags =3D VIR_DOMAIN_DEF_PARSE_INACTIVE | + VIR_DOMAIN_DEF_PARSE_ABI_UPDATE; + g_autoptr(virDomainDeviceDef) devLive =3D NULL; + g_autoptr(virDomainDef) vmdef =3D NULL; + g_autoptr(virCHDriverConfig) cfg =3D NULL; + g_autoptr(virDomainDeviceDef) devConf =3D NULL; + virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1); =20 - return -1; + cfg =3D virCHDriverGetConfig(driver); + + if (flags & VIR_DOMAIN_AFFECT_CONFIG) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("Persistent domain state changes are not supporte= d")); + return -1; + } + + if (flags & VIR_DOMAIN_AFFECT_LIVE) { + if (!(devLive =3D virDomainDeviceDefParse(xml, vm->def, + driver->xmlopt, NULL, + parse_flags))) { + return -1; + } + + if (virDomainDeviceValidateAliasForHotplug(vm, devLive, + VIR_DOMAIN_AFFECT_LIVE)= < 0) + return -1; + + if (virDomainDefCompatibleDevice(vm->def, devLive, NULL, + VIR_DOMAIN_DEVICE_ACTION_ATTACH, + true) < 0) { + return -1; + } + + if (chDomainAttachDeviceLive(vm, devLive) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Failed to add device")); + return -1; + } + } + + return 0; } diff --git a/src/ch/ch_monitor.c b/src/ch/ch_monitor.c index 5f3e2adbee..8968d84a71 100644 --- a/src/ch/ch_monitor.c +++ b/src/ch/ch_monitor.c @@ -314,6 +314,23 @@ virCHMonitorBuildDisksJson(virJSONValue *content, virD= omainDef *vmdef) return 0; } =20 +int +virCHMonitorAddDisk(virCHMonitor *monitor, + virDomainDiskDef *diskdef) +{ + g_autofree char *payload =3D NULL; + g_autoptr(virJSONValue) disks =3D virJSONValueNewArray(); + g_autoptr(virJSONValue) response =3D NULL; + + if (virCHMonitorBuildDiskJson(disks, diskdef) < 0) { + return -1; + } + + payload =3D virJSONValueToString(virJSONValueArrayGet(disks, 0), false= ); + + return virCHMonitorPut(monitor, URL_VM_ADD_DISK, payload, NULL, NULL); +} + static int virCHMonitorBuildRngJson(virJSONValue *content, virDomainDef *vmdef) { diff --git a/src/ch/ch_monitor.h b/src/ch/ch_monitor.h index ffac9e938e..8338059c7c 100644 --- a/src/ch/ch_monitor.h +++ b/src/ch/ch_monitor.h @@ -40,6 +40,7 @@ #define URL_VM_INFO "vm.info" #define URL_VM_SAVE "vm.snapshot" #define URL_VM_RESTORE "vm.restore" +#define URL_VM_ADD_DISK "vm.add-disk" =20 #define VIRCH_THREAD_NAME_LEN 16 =20 @@ -138,6 +139,9 @@ int virCHMonitorBuildNetJson(virDomainNetDef *netdef, int netindex, char **jsonstr); +int +virCHMonitorAddDisk(virCHMonitor* mon, virDomainDiskDef *diskdef); + int virCHMonitorBuildRestoreJson(virDomainDef *vmdef, const char *from, char **jsonstr); --=20 2.50.1