From nobody Mon Sep 8 17:07:22 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=1756814491; cv=pass; d=zohomail.com; s=zohoarc; b=mCqpv2AL12l3Ew8rMWPXsgFYD6c3AnMrcJQXyCsmrgCgPVUj55EaewT/BWgxm5kFlfX+TLFkFKBBZYFkAcA31HZrvRb8C+/hDFSGnePm9mjyqoYJmCUmlsFmA31kilaCmkGt1HTh342kTC/ODmbSM43jc7X84Ik1Fg3FP4Wlf8Y= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1756814491; 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=AAkJVayhaiRZ00jX8jqMKYNRfTbtR2hpyLmQE106Y4w=; b=GS2zD/oqRAkxaoyVflCXEPxxtmVI8Vl8VjyLFxeSWPVY80SGoOedz03dwep64CVgiJJfF4ygmKX+tDQzUBqMs8cjl6KdeVrVRnG+1qJsezNBsBlLDoXx8U1f79+EXCHGem7XzBfT6uDMLok85fR5VKV91bh3WxYZ6jScymGDXQ4= 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 1756814490993373.4355384514455; Tue, 2 Sep 2025 05:01:30 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 607DC441C3; Tue, 2 Sep 2025 08:01:30 -0400 (EDT) Received: from [172.19.199.3] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id A21EE44389; Tue, 2 Sep 2025 07:56:21 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 2CC3C3FA2C; Tue, 2 Sep 2025 07:55:45 -0400 (EDT) Received: from FR4P281CU032.outbound.protection.outlook.com (mail-germanywestcentralazon11022133.outbound.protection.outlook.com [40.107.149.133]) (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 EF0874410B for ; Tue, 2 Sep 2025 07:55:43 -0400 (EDT) Received: from BEZP281MB1973.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:46::5) by BEYP281MB5646.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:e4::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9073.27; Tue, 2 Sep 2025 11:55:39 +0000 Received: from BEZP281MB1973.DEUP281.PROD.OUTLOOK.COM ([fe80::7272:f32d:eb8d:e401]) by BEZP281MB1973.DEUP281.PROD.OUTLOOK.COM ([fe80::7272:f32d:eb8d:e401%3]) with mapi id 15.20.9073.026; Tue, 2 Sep 2025 11:55:39 +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=T/ia9WujKf4Nd3P3QLNqT9gZ/b61JJLLtDK2ZoHWjhFBCy6If5wnf5MswkYUE7t2XkvYkYzIZzH3Jx3PH8Ap//bMVak3I4sokphBWOEqkyhwfo7L6zfGsfjV7GVhzXES6Hbj4/mJLRjPUzAjpI/3wMjI1kjBW39D01mMj1W65L3U0Td01hxnoAhGmjDWgfi+fXBxgiILqz8HpDeBkAa8YQbepQT/7l1N0leOHLGO5dGM1kXYFqumgN47nWmXAgKryo8cHObvggwlv9T7hlbwUGAIhv1ppgtOQI6A5t6yyBXQeKYccSf0z8Oz1Dw1oXxyHTyXbEuSxB7nV3i2fTvANw== 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=AAkJVayhaiRZ00jX8jqMKYNRfTbtR2hpyLmQE106Y4w=; b=QCy4nsOZj2w07jwU2/JMSlSNtqzjM98mseZdyEvO/WDVU1zwGn3Kit8E8Y3IcgJ9QOwDLSxClgdNRP7cSg4b/gySLaatbFB6gcWtFrjsRHoM0K10mCYAGqandUQf0p+Gt1NAGVKuw8Jb9osRp7IRedpvDZnnfAf9EbNID44xn2zVRSRaafmKtskyrGiIhZTZvL59+cyDXx+ZLdbu/q5hfw2EQ02p7++j0J2M1xWIFRpc0ce8noSB+Bx0o3AlwhCTQ5dFj57DCgvuF8sEvDDjmxYKDWyt9yaiwhENcE+JlJ9GIK/uL964fV4SqZVFyuAK0z0JpT2PooWdsGFVOCmaqg== 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=AAkJVayhaiRZ00jX8jqMKYNRfTbtR2hpyLmQE106Y4w=; b=Zb006KFxXt3ql0GnKUgkp6JyE/tShbP8jaOpGC3UgjZYVdwd5b6Mlo/+jHm7uRP7ZvVVPFaBeEfGDfGX8I9gGKOyzXrNVlXvRU9PjcApweajwzCidgJRld7XNbvaNoP9gvHMuZuwXgv3iOg+X3mCdsu/CI+yoI8KzS4N0CWxIdZ1SqW7nQv40iNI0XImvyhugfkWjzH+j/YiTxl9K1eW7y0GPuyaBbNDjbl9DMIMZ9JWGjqvszVwFyCqc+ktBkBKNFc671iKvHugSA1o7vmieOJi7WpYcMdLeo+yXhHjgojepUi4XuXQQ/Jwh/PA4rY3efdvvfnuQVkl0ddwO3CE3g== 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 v2 09/13] ch: add disk attach functionality Date: Tue, 2 Sep 2025 13:55:24 +0200 Message-ID: <20250902115528.557133-10-stefan.kober@cyberus-technology.de> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250902115528.557133-1-stefan.kober@cyberus-technology.de> References: <20250902115528.557133-1-stefan.kober@cyberus-technology.de> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR5P281CA0052.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:f0::11) To BEZP281MB1973.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:46::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BEZP281MB1973:EE_|BEYP281MB5646:EE_ X-MS-Office365-Filtering-Correlation-Id: 6a175bc2-8f40-4223-fd7f-08ddea17a2cb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024|10070799003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?k9WYtz1nB/PJlRfNl1ovp7sA4Fb4iy6+dT3qkdwJ07B4XfsH0LPValAbCzAA?= =?us-ascii?Q?0lsIHeaCXovi5HUWI3Owggda3L6Ds6sSlPUhCkczNGscJY7x4VhWOpBzo8nK?= =?us-ascii?Q?4Iak566PPREZNhoAD+RhIzhC6Cfuz5EZMEz5m9BRG2UnMJkasiTo1/quIxo8?= =?us-ascii?Q?zvxC7BdaOPvy8vu8LAa4dw++p3ptTePN4O5900AzSfYpdAFXu6Mobt8Upxl0?= =?us-ascii?Q?uXjDaUYy1rPgwaceEL9V3zIVnaQBPA97i64LbjA56zThP0a9DcMpqLBmrKaK?= =?us-ascii?Q?/n3Z7cARXh+KyaIvMgkyIyvR5lg6MmfBPdYP8kOF9jyuoCECvkmV+nENbWis?= =?us-ascii?Q?lwglZwskFuYZLLbx+qSiUksN9OoEy6m3bNlO8VNsc8z00Ufrr3CiWuskphJb?= =?us-ascii?Q?/7vhleAMl6B2FIlaOR/9tRxtwJEW8zg2DXRLrVL1RND7ASyLOjuVAWkpjUG9?= =?us-ascii?Q?rnAAyuVHEcBF3m0cpk2geU6fecda/R3wWs4uTsqa6y6AFrBRdGo7ItoXjAKv?= =?us-ascii?Q?/DfpBYe90Z1W5EahRfyrFxiNhSE61KUTETFgkmECO23PuSjNQ5tHadvkfTi1?= =?us-ascii?Q?4XMm3lTvrSkxUmpLz9xoanJVg+Vftt3XB23JWlJUMFdwgSK+SzEGEZakVgdM?= =?us-ascii?Q?09Tc4C63zJqPP94i2kTvGMS23UvuWenHLdU0XXxqkfusI0E3e1Er/KTyZ8DE?= =?us-ascii?Q?chpmrBx9UCMUUri8O5UjAklqOBuRvuS9TZW2ozT+wChoqIDcHlesvtfMW5Ue?= =?us-ascii?Q?CpMmR9M1nA8ympXH+TN3WgWB3FOTW9nZtqXuYEPH1bcYiAxZVO5R7wCUDFZp?= =?us-ascii?Q?kHS672hBruPVgu/OFiAl9ysE1VzhNJcJCnwGBh/YTlHxhvIoJAGeN/pViOEX?= =?us-ascii?Q?N1l8Wr1EX/eFbIXXTUa1Z9KqmMuUOt39Cyi/g19AtLeO/7EWEHxQ8QkpabuG?= =?us-ascii?Q?BdCNOY92Sh2x/awHJYkcKvTMUB8TcDFuS/YceRtsC/vYDovMyooYF3lW8wK4?= =?us-ascii?Q?CzLz4VUF9mw9MLkUyqnu8rkGYqqVPjhsbzmMcqbbkjEjRfazt7fE6pfiFwJH?= =?us-ascii?Q?ETEQheJ+DV4VqR+Gl3fFB0Gh/VDaY0Tt4HDxy8FJTs+FfO+ABi6Myzzu8gv0?= =?us-ascii?Q?EgiqvVLM99DKCAcTi93dRgbmlldAdGHmsbYfLq4QKEjeAFW+Kddq43baZruk?= =?us-ascii?Q?cOylmeCYqKnxz4cZ8Zye5n6EbJ8hrbyd9dOUnRGCCbOebn5kcBr6Ky4mbhw1?= =?us-ascii?Q?xm12DRCOdp9Ypl4ZLDiFoIKSCqCx7BYSHOU80DBvFHujyjpoYPluzMWj9BKe?= =?us-ascii?Q?iPGf1dNkUI1sLEQCDbtgHIbXptjzJ/5E6QM85ABG7zZg4/BIqpJXqJT2SoXy?= =?us-ascii?Q?SZGiiDF/pokpQ5H7mMjKgiClDtlJ+aGBm0L4ucycxUyHk7yqzljPCyk1MKoq?= =?us-ascii?Q?5KccjJVU864=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)(376014)(366016)(1800799024)(10070799003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?nLMLkuwbh4j9NbL+edhbjRJ7iA6jPaS8hYieXRpE8rqV3BmZbx2tuXjoIMNu?= =?us-ascii?Q?q3jxlkJ7Nj6f22Pg8wxgUPX9Unkgyp4VizhR0YEwau6Tgc++7s+Xa034ljtx?= =?us-ascii?Q?NNQlCJrBJ3XYMpkZy1BfvXFhiEWeJgv7UFm4d8LKpk9QZirFwyIiwjQzfigr?= =?us-ascii?Q?/OYnlGkVmATCdcW7i+ZUsXLlRF4PQclLchZlyaRFw7FTplKqANP95Azd378j?= =?us-ascii?Q?efpIRddmQXuNOPIDuCQ2JrPyROkWcO7ODwwtekan4XXSsLANMQjhinMUwwTt?= =?us-ascii?Q?/27cdtoiZW5n6EFOULJ6hnPNKor6u1WcfmY6vym6u1xhXboIahCbDhuj0H8i?= =?us-ascii?Q?jjfL4WB1aw+mcPkSAgTfV5uSkEoSUjr0IgPmNF/2Aa0RN5J657ZRl79cpFHy?= =?us-ascii?Q?D/tcsYCC4iTs+IVZHCTGQIe96XvfxIfkd2461L1186go0OFYmZiVAhaV69ZD?= =?us-ascii?Q?0JKskNOFU+Rx1Qf1ix1cn8piYziwC2DHgncyozqgxdB6K1HhjSNDnlMRVUrV?= =?us-ascii?Q?4trvv3kgbR8BeFANN933yFNWDM52+QcDhMwOC9GBymoV4ZFtHEmvCgj0Uovr?= =?us-ascii?Q?Boyzr8GMSaAhvdS9nqM7wn/joaiQcBXTgS1kAjqMoeyrxnyVRZ6Ec5VJv30L?= =?us-ascii?Q?dlGvEPRjXIZnfafThtpQpOwEg4M/u9GcE7ybFuLyXpcmbPjVOR2HG2mWuBbs?= =?us-ascii?Q?x9/St8Fuv597Mh05zKzPlmC5Lj2XT3KVJsVBmS6Z74KApQe/7/sqwgm+cmSd?= =?us-ascii?Q?xCq7kHbQK8B1kN78psBKPZ4MiuDg5Nd44pBHlEzXMeXz9+jubseA5mYLfx8v?= =?us-ascii?Q?jW8tLwIh7OZr7crcZwqB1gDhc+FuqTuGHESp2awvGPnGiTsFbKWOoqjWVxHC?= =?us-ascii?Q?Ux1CyPVdzFSrShgdNOFVRtwWX2VJ6NmFFhsfEUCdj1t/4hqKrIBb/RRKsblB?= =?us-ascii?Q?odGIZzHDxDL/Zz+5qQjjdBFfSwMUtZBtXCukk2uUormd/OJQP2lj7vI+NoQH?= =?us-ascii?Q?ZNl/LzCfMwNdKvjLtuLz+3UjAuhKuTyvTwqGCeWkzJKTjk2mXZAwysD1vWnE?= =?us-ascii?Q?uHqzOKrQUNmq5PPgKl/IfasJcAXmfDDgPXFKRhaZZhXfHdwBKMaQIITvbdon?= =?us-ascii?Q?c1npE2/2hagO5vm0Jy9838BXmRzRh2vZajfKku+E/5hU5FYy+ixua1IR8MII?= =?us-ascii?Q?qua+x8oxbEx9QbZ7wL1KBi+M6trmZP7m5XNDQ0fRA40wTBoOyiBdiEyQY03w?= =?us-ascii?Q?k7TTbFmWz3zbe8OaSLrO2lNfCm5NDZrKFjlrIp6qMg9Tlgc0XCpaaFl2SUuX?= =?us-ascii?Q?HoU+3I0i+8FpsHgoG1OWGB+dZqtVaN6IJ29V9/bWIw7h7ghlMm5IZvNnIPJr?= =?us-ascii?Q?rR3/R4ImfsE62wscTTmkLPWfHEyTisHEVc665XSKwn/QYHiVCbvGDC8WRD/v?= =?us-ascii?Q?rfDgClWzf+7Zbd0M74jwSEQEUJmwAGN3gljcObGyXhbVxxXwPJgUYwpzdfo/?= =?us-ascii?Q?itkIqieU8gjaYp/1/1SIl18+RgIFRtfr7rXhjI5Y24t9c0QgoHGnqRkHxxgf?= =?us-ascii?Q?2Rfgk/XnhB5bRN35uJMg7b0rD25/XTi8GyOHNiw4+vK4d/Q1R0BE+MwLSis0?= =?us-ascii?Q?eYiEnypaxR/0epDJ3wPBED4soQmwEAbHZG7PopbLrYXW?= X-OriginatorOrg: cyberus-technology.de X-MS-Exchange-CrossTenant-Network-Message-Id: 6a175bc2-8f40-4223-fd7f-08ddea17a2cb X-MS-Exchange-CrossTenant-AuthSource: BEZP281MB1973.DEUP281.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Sep 2025 11:55:39.4742 (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: U6zMGN4icbGB+6w95psQO2FzoXbwt7cB7R03rseLCuXnb2Ip2cVB4qt9CnQ/mzvjCbotanARI4dcsQJtTcBBssgY7xVaN7DrwlWthEPxYXjhghJWIS8MA7i52U3CK7Ru X-MS-Exchange-Transport-CrossTenantHeadersStamped: BEYP281MB5646 Message-ID-Hash: 7SEOPJ6W7LE25NIG5OMSHRIVVNIJ4MOH X-Message-ID-Hash: 7SEOPJ6W7LE25NIG5OMSHRIVVNIJ4MOH 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: 1756814491933124100 Content-Type: text/plain; charset="utf-8" On-behalf-of: SAP stefan.kober@sap.com Signed-off-by: Stefan Kober --- po/POTFILES | 1 + src/ch/ch_hotplug.c | 131 ++++++++++++++++++++++++++++++++++++++++++-- src/ch/ch_monitor.c | 17 ++++++ src/ch/ch_monitor.h | 4 ++ 4 files changed, 149 insertions(+), 4 deletions(-) diff --git a/po/POTFILES b/po/POTFILES index dc7293d0cd..50a055fb73 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -24,6 +24,7 @@ src/ch/ch_domain.c src/ch/ch_driver.c src/ch/ch_events.c src/ch/ch_hostdev.c +src/ch/ch_hotplug.c src/ch/ch_interface.c src/ch/ch_monitor.c src/ch/ch_process.c 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