From nobody Sat Feb 7 06:39:17 2026 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=nutanix.com); dmarc=pass(p=none dis=none) header.from=nutanix.com ARC-Seal: i=2; a=rsa-sha256; t=1770026481; cv=pass; d=zohomail.com; s=zohoarc; b=fSFIRJdqafwAtZDSZgM7nJOzFn6BjlRc30gv3Ila8WaX/YmQjMo53K7NV43c1xoljyxOdeW0TV1K2D/o3UWY+ExgP9xZqPDMzJE5M0Jz5c4GhSl1rn1hKuodR3EuemziITuy1HTSpfS5lwwPiH0xXsE/whWM6yDeNN9Y07DY17o= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770026481; 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=i0czm+Zh53TUah+FEc8NJxqtMSpXaFHCszUVTENbKxI=; b=OhbyFnj/ZwmETRacb0EZ4SlkVpL6+TPXzSNea7naTRQqfHsN5u8x6+Bd/RqVR7q08H5W4U8Ss9M8lG6CDKqsFuKXIoXrlpc9S4f0LiGeei57F0KY3CBBncSUqnf1An1QkSyr/SOd4St/OLH7z+77C9Fg+xh6TMVl3jaZXuHT2sA= 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=nutanix.com); 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 1770026481807815.1129200918043; Mon, 2 Feb 2026 02:01:21 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 45425419E8; Mon, 2 Feb 2026 05:01:21 -0500 (EST) Received: from [172.19.199.6] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id AAFA541BB4; Mon, 2 Feb 2026 04:59:42 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 9C8FD417E1; Mon, 2 Feb 2026 04:59:34 -0500 (EST) Received: from mx0a-002c1b01.pphosted.com (mx0a-002c1b01.pphosted.com [148.163.151.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 10FCC3FD25 for ; Mon, 2 Feb 2026 04:59:32 -0500 (EST) Received: from pps.filterd (m0127838.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6129exfM320150; Mon, 2 Feb 2026 01:59:32 -0800 Received: from bl0pr03cu003.outbound.protection.outlook.com (mail-eastusazon11022133.outbound.protection.outlook.com [52.101.53.133]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 4c1j5x35ca-2 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Mon, 02 Feb 2026 01:59:31 -0800 (PST) Received: from MW6PR02MB9817.namprd02.prod.outlook.com (2603:10b6:303:23b::15) by SA6PR02MB10454.namprd02.prod.outlook.com (2603:10b6:806:40b::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 09:59:30 +0000 Received: from MW6PR02MB9817.namprd02.prod.outlook.com ([fe80::86e5:3449:a3f7:ee4c]) by MW6PR02MB9817.namprd02.prod.outlook.com ([fe80::86e5:3449:a3f7:ee4c%5]) with mapi id 15.20.9564.007; Mon, 2 Feb 2026 09:59:30 +0000 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-5.3 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= proofpoint20171006; bh=i0czm+Zh53TUah+FEc8NJxqtMSpXaFHCszUVTENbK xI=; b=Se5Fhc1/utZ0EquYrzXzwyaQ14j4gFeGgj1wuXNq92cb+6kutw3586/mk vJytsnrSeR1cHK5bb59hr+/ZtovkbEWzqCBuBEuKNFE7F1NMIV9fHABE/dV7idmy MTc5fW6ss5oTXnTR7azrzJVkA4CL0WPynNl2PMUdGkDYuz3Sp+exk73eTpoSxmze BfEl6rWCY4Fo0qoyWPxCcI+g55iCw5digFpHSTZPl7BonSxNZQ4ApTSxliycN7kU /4+XrsgP1b/R40o+jxFVnm3EothVLOMR/9VbOR8DHybPT7DnMnOWmG86ZGbRudKP nHfk0qqM8V4m1yreLW1PH682lGnxQ== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=brv90J3/K72fI+vzSXxGjQzotjEi7vMg1DjFsdeyGlSKRUnctVoSu4faHU1lCKLdDrQKhGoJp9J65PBKm+yKt3spCBBLBI93QxnKyOVBvZxwL9m3kT18vpN2MmgtbYiHna0o4NHCzPG2Y9qXQt9mmF3SbR5P1mSH3zMin3eoDfnMjOFL3yOH7iQ8i/bZeehWDr+AkmYURuznQF71U3A5OQp4Eqd7l4+EJc2r2XvRqZaidOw7c8rA8cMNC3I6mEnm2NlW+4XPAkzFrwGvZVF7ZWmDu4AYDKN40CFHSLQgB3iV1jqjbVl+7WZnHmFcLSEv4O8e8d1aBAmg8SCpBruiXw== 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=i0czm+Zh53TUah+FEc8NJxqtMSpXaFHCszUVTENbKxI=; b=GJA6Ett9CqYXZVMl1/M+7Nc1ZIQmK8i4jqwEKkkt6sY3Qpr9/tX6brhIrX5qJZNz4Bpm25/mOm7pQHQMSWNS/XN1M+gfvwEOAJX1cHKk+n24RH2qH036jTubXuLinfpn1w0jAWvPji/67fZDYH92rXkqXvMDOxixqkyxNORcNmOE8ON/hgCTlfTP6VJzkdi7VeEPmoLPjsM4u0V2rRtlAPM0sO9HboDHK6bipPuM44438295Q4/QkAQcRMz6AOCcrrl9NyslHVCweeJ4ZGSNfoGO1iaw2wlFD2eZz2NlVm40nCsoY2cJgvyD8sAhVAViPPq49CjtaNdPoj2EqDabRA== 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=i0czm+Zh53TUah+FEc8NJxqtMSpXaFHCszUVTENbKxI=; b=I1ZYgJIyT4nT4dMsjc7clgWiOVcKprSBpinGgzAYwbUFWxj1PRtSs2Evsfi5FvUNcqkfOWKjkV5lZmot8ZNb4jqHnCg6g7BOKy/HmWeuC93JN6RBGKg2xgAU16tHarc6j3KSPot0bVDXng1m39wj4tgoQGNmmBkINeocvKnBcqesW1CcKhk+thWBTCAIsdoC/clhqr7hQeZTvXG84+452Gh2ja+z5HPtJ75ymA4pIWDpEbArWCHVE1kqzCHGgQNjV1R85mEetd7zod1YqmkDl6KosnJow5zaY5fB4vD1XrVf5aRKw5hPX/cIQjWq5r2C6zf+ZIy/AUuJiEiZXkf5bA== From: Tejus GK To: devel@lists.libvirt.org Subject: [PATCH v2 1/2] qemu: support incoming "fd" uri Date: Mon, 2 Feb 2026 09:59:09 +0000 Message-ID: <20260202095911.2807669-2-tejus.gk@nutanix.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260202095911.2807669-1-tejus.gk@nutanix.com> References: <20260202095911.2807669-1-tejus.gk@nutanix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH2PEPF00003847.namprd17.prod.outlook.com (2603:10b6:518:1::64) To MW6PR02MB9817.namprd02.prod.outlook.com (2603:10b6:303:23b::15) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MW6PR02MB9817:EE_|SA6PR02MB10454:EE_ X-MS-Office365-Filtering-Correlation-Id: 8d5e5443-e995-45c8-7293-08de6241c1df x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?pq4mposrudD0NUeAxGrobpINb3d8Tq/NXRwbPWXr779C+DN2IWeWMYWzMAc9?= =?us-ascii?Q?Bo+7eEECuYppxK3uYpEa/mK/9G2E3xY2lwEevgCQmRHP4MUO/mx4t06scB1N?= =?us-ascii?Q?64fWOLj4ZqxXOcsZruY9sXpnmyYCPsgXDbaYVG2FSEF1QIL3Sw8LXYazL9eN?= =?us-ascii?Q?+cEnr5GkEn6IMP6PIj6Z+D4OPyigYqFQ0s3WaaQgrPa9Xa8GJQ4YtIbL0Nj4?= =?us-ascii?Q?BqNib5J+YNUiIvpxWpiprTTJnV9Z7piRgqvtAzOWKjIiSXLlWvoGWPqhnxyW?= =?us-ascii?Q?/o3ttjwR3GP4OzguVD+HB/9RdoNcM21Vcxjb8+fllPqWQA2UaKoHVqPwWz6J?= =?us-ascii?Q?LhqmK8FkFmxyFsdJwcs59z0AdaIp4/gcZlSlR+GuvjUhzswXrrvF+lAn0+X9?= =?us-ascii?Q?V99mxCSNQ0pJk8zEjWhb0+ACFafAIBCrF2/l4UpPuiA/ucLPKTT98vZ8mozf?= =?us-ascii?Q?3nE/sRlnfUkYNDKDbHNHeF7n04x2zRZrPZUwLTGwE33xymJfpD0WKKXE7f6m?= =?us-ascii?Q?2rpcGyZy2/yBml43zqWNSIyfclP348sKOq1H3QPTBZOZ/S4DYVQDEbrgf0KS?= =?us-ascii?Q?ID3VYF280GeVk3Wjt1qMOx9sC0Iu/niFDc5pFlEXSDl6TxcQTw05zd+1+QHJ?= =?us-ascii?Q?ja3TIZ8oBhDiuLnFQdoMZC8sToxzLEA0uRwvfxtP5PDYJPxqfq5STWuguTkx?= =?us-ascii?Q?YOZKvF735AlP5rfTn7FpnsIbYVPfh0Tbtd08WIVGLgfubu2htottnWnelUbW?= =?us-ascii?Q?KNVVlOB5SfDVF8aKST4DAmyn9scQrGb4+3cGV6CXA1JT2Ay3ZqXJjYqiVfCr?= =?us-ascii?Q?wIw6jBVJOfwHttMj6vcEsC2sB0K35BNUVke5G2+zC3H9C7DCSEDZpbneW03z?= =?us-ascii?Q?wrU1MIBZskhUmZyvhaWeJfWQI7nf+3mZ2uefbKLX498h0mnICMreUGVQ/RI0?= =?us-ascii?Q?SNYP+iA+x7u85tc2HUWzwPNNhdTrEtvmw7Op8xUy2nPG0IwBTUp8ppbwSijX?= =?us-ascii?Q?MtbVhg5hpifUCnqEQy1eUzGWdugrsz4mWoSYbVBCAcx9vJH4CiLfaPWbgYd4?= =?us-ascii?Q?VoNpZMwS9AdMthNo1nEQzDa5WK8c/rScIidpFEH6t4s4etOfQMATvYqrnDDC?= =?us-ascii?Q?3jwbOeAOINzgOrQRrzEh9ci0YY+6VFRqZcoI43ElU5tnoAssgncjkDaoxw69?= =?us-ascii?Q?2FiN5a9brJP/TWHK9kMqM5NGC/00lVV8Jt5qpQgB8k5ME5Q6TdgKd9sv/JsH?= =?us-ascii?Q?CnAj5WO5SIS0IICzculIFlGutWQLWh71O5Hhu7I1aWV+tfOc9Wk+hOtUmcr6?= =?us-ascii?Q?i8cdO2AJcUN1VJJn8oRTMr7TKqQoWygy1p+4LReOTgdRL9fBQrZrL5CKDdSM?= =?us-ascii?Q?hVBS3NmklHE0cNv0jK55iHlVzmFDrf2QXWR8VFJSwrj2EMBpl5fZppOK/tk2?= =?us-ascii?Q?66RXnPZZcBzZQ/2/fgWlpln6WS0Rohh67cMGIiXJv+NsNEP8Gjgkg5vq9yeV?= =?us-ascii?Q?RGBrwLBofR1VY9Z8MBMwLINlmSLpFm0SYwko8suWDHgXVBi0KMSbhGX5BBjh?= =?us-ascii?Q?aW+MLnkLHfLzexpTnuzEsKl/pwk8icyMaADNBUts1OLnfEGI1KsPQLVGH2zs?= =?us-ascii?Q?nfifGAC7tNsCqTnyFzn3JHA=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW6PR02MB9817.namprd02.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(52116014)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?x4Qr3tKNTYkyGtgvK9lsqc8c5uBHdgB2SuPSkQcb4+EemfpwFy0E6ekfyEjA?= =?us-ascii?Q?8NOtVZC95ltshb4LDb6oqOHo6hhAcHRpc8/4mW9tp+w3bN8HDi7WHtSiXQC9?= =?us-ascii?Q?qHbOFARQKfSeYzUT7qarrrnHCscN1K+CnE6nU/e/C2pQBk3+DKrZXX9T1OZR?= =?us-ascii?Q?5et9iisHfZagIEWOelCzEFxx59wG4LtJNO6/P5tNX/H9vXK7LSuY0v3Dvi9Z?= =?us-ascii?Q?K6kKYJMbE3nZCGZQCQHUJBn3XdCitnw8N2KCgRDIFvAdypZPfaNuXqHEwDur?= =?us-ascii?Q?P2ZuGm6w3MwHLtX10m9lDXSsOKwpwiRGa4fiDSySuuSLeDKGM0FCHIMUcxrC?= =?us-ascii?Q?95hEvp4YwTw6970xc874YLvH1WpiJHPFeTFOsFhU+pt0dJilmmric/5fsULU?= =?us-ascii?Q?8VSQhR4mCuqFHP0K8ECrUmg9g1AXtrkaVuYS6PrPKXEU8TIJHU6U6ey4guX9?= =?us-ascii?Q?vxD8yVvk0HC4lfkx9ib9Igl4Hh80qDYoP5gZCud9ZrEqPcO1184KCz4KIra1?= =?us-ascii?Q?Gh0AMHRSmq3YMre0d8A2jCpaOk+WYHUxKBEzdY/huGZepPtLJMhQgr0cXOc4?= =?us-ascii?Q?J6s/zXmBdq0FsS1RU8Q0G/YuCjYalzGt4+H6WNtB+BRTlxi6OABSXpf36Rpf?= =?us-ascii?Q?pMOdyjHGSpFBopX5sLYx+L4nOH0f3nZjwdZi26tIpO/3qZwSfO3tunOGMcTX?= =?us-ascii?Q?LOLZZvYD2dEeEJohvI7BnjdlGHE6F3ja1vucylx4B1VYhVdSFX5+3x3enr1S?= =?us-ascii?Q?vYt0kIe0va9nL7IkmkzUlgODCpiEz8cw1WLSLrY1tBKJFF6+9idXGPs7wldL?= =?us-ascii?Q?FNytUh6MS+c0FtJrGbyxjnlVzMzye/V1lIzgiQfR5LBOlJ9yL2V5wc6ekBgc?= =?us-ascii?Q?WR91OFwzNrbW5uA20xOmNu7CaJZYQrRA6pdFPxHL7VPuJJewwkz5TfBD+xHa?= =?us-ascii?Q?B59KQaaY//72gtZw16DBMyr5LbLOFaOwAZJ9MfYVxzccseZ4hwOC4DzwycBx?= =?us-ascii?Q?L8VaT7ew2qYzG0vga3epv+0ftBGuDSmbpBfM+YW2SDOD/H+Bp5Xw36iOoaZL?= =?us-ascii?Q?V9uMVPF+ezVWdq6VWIQQRP1MsKu+j7EGQ6bIKc11Zdk7zVGeqvb5PyRaOqKO?= =?us-ascii?Q?nuZ3uWZy012sK4oNObV3HlbEui+g2kxSwjJkrWC7avxGKKZzDtuBj09roIac?= =?us-ascii?Q?aTr2bATkVtEGO1F9FH9c5bmp0UxEDfbdLEeHh961+p76aTyoDWA7uKurkicm?= =?us-ascii?Q?jbfDZFsIbZJe9NBt5xaVqwjJUZ/xVsjDoqzZdEEws2/gfZgaZHhIXWVZyVdx?= =?us-ascii?Q?SqG6Re1E/S0Lu4heqRSAkwyXVqyQ/Jvj3vYAwRZtR33u21RA00qJKqCGGLfW?= =?us-ascii?Q?Y9S2JmKUZ2dGmtHUHtyNsJWUD3Cb+NUC3/MLC2I+Wxmk8iiyoKXw7Vm61a0w?= =?us-ascii?Q?3WmXfWQpNAPhV/ZmgK5VncX4Q7Nmd4a8TtwUStUamdaj7PiJNNi6iO4Fm8YG?= =?us-ascii?Q?tiOERm9alN6EfraIkOq9hm3fsSBDVEOET8DCXTSYxlyV0r1qTOI1kJqTXjTS?= =?us-ascii?Q?6EONgSijNjCXnYZL8Dv81dEh7rU1r3O8o2miw6zJU+eo71Hwo7JYuc6OZwWe?= =?us-ascii?Q?ZsrgfMy4+VY4xjw30QNAwobLTZBr1fkU2YE1DSbKCdMflzR+Pk4eR+37Rkis?= =?us-ascii?Q?6zPRpja1gOnKKMOiP/llOWSY2PRQF0KbUUBGJ+JQQp3jr8ULBpZbbS6k3314?= =?us-ascii?Q?uJ+P7c5Rrg=3D=3D?= X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8d5e5443-e995-45c8-7293-08de6241c1df X-MS-Exchange-CrossTenant-AuthSource: MW6PR02MB9817.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 09:59:29.9899 (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: 61ApCFlywYZCnsno/21Muo+6PUmcv/BzvqPORrxExmKh9jVI1bzWEjMvQ3EY3lC9l+QZEy7BCEg44aohbFc9NQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA6PR02MB10454 X-Proofpoint-ORIG-GUID: xdgg19fB8WqADZr8YUX_uEWHpwtMgfIu X-Authority-Analysis: v=2.4 cv=HfQZjyE8 c=1 sm=1 tr=0 ts=69807584 cx=c_pps a=nXg1BFrUXdgPQNEnN+3bHQ==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=HzLeVaNsDn8A:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=64Cc0HZtAAAA:8 a=ShFfmJU4du4LAJUbl-IA:9 X-Proofpoint-GUID: xdgg19fB8WqADZr8YUX_uEWHpwtMgfIu X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjAyMDA4NSBTYWx0ZWRfXwWgoO9k7inEg TuBzoeVcbd5SSt3yxRRdHVL8lhLr/Peuhw805wb2/n6bQ6vCTGSWPlRquJsG46pmJyy22KRmHbC k09FGs65jRx48rXLv9x5Kp9Q3j8B+0rw64b/vsM+S+lTBbBzTrgypZOB7+JxvG0Z/7Q++L86tx8 YlD6ppPaubZIBRWLgD+5WxFcZ8WtvN+EAUz/sl9ybfsqaBYC9+cLnoYcWrcIMd8cbYZjdI0XBjM Dr8EHEuCBRx2Z93AQRPWDe7rwEAjSe05K9u5IgUny9OJ+llbZnzw0hgygg+qP/2wtmBFqT6WrHC eHWh9GaNeqTKWiUQ4g1wobYR6bBOYiqpKLtnV2/btxFpz6bntOp2A8ApSNV+DQv9wPV1dQSvI3T xNby0Cja/tVXelt59Eim7O2QJqIVADz9NcylGO++ye9NzBL5lQzle/GM6HmFQIoltMNd+t+QO13 UkMNdPPC9aij8IDO4Ng== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-02_03,2026-01-30_04,2025-10-01_01 X-Proofpoint-Spam-Reason: safe Message-ID-Hash: AGABIYJSBWJDM2M2DUPAQMSH5Q3YO6UI X-Message-ID-Hash: AGABIYJSBWJDM2M2DUPAQMSH5Q3YO6UI X-MailFrom: tejus.gk@nutanix.com 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: pkrempa@redhat.com, Tejus GK 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 @nutanix.com) X-ZM-MESSAGEID: 1770026485770154100 Content-Type: text/plain; charset="utf-8" If "fd" is the chosen protocol for the live migration, the destination VM should start up with -incoming as "fd", this patch adds support for the same. Signed-off-by: Tejus GK --- src/qemu/qemu_migration.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 6dd022163b..e6c6be38c0 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2427,7 +2427,8 @@ qemuMigrationDstGetURI(const char *migrateFrom, { char *uri =3D NULL; =20 - if (STREQ(migrateFrom, "stdio")) + if (STREQ(migrateFrom, "stdio") || + STREQ(migrateFrom, "fd")) uri =3D g_strdup_printf("fd:%d", migrateFd); else uri =3D g_strdup(migrateFrom); @@ -3136,6 +3137,8 @@ qemuMigrationDstPrepare(virQEMUDriver *driver, =20 if (tunnel) { migrateFrom =3D g_strdup("stdio"); + } else if (g_strcmp0(protocol, "fd") =3D=3D 0) { + migrateFrom =3D g_strdup("fd"); } else if (g_strcmp0(protocol, "unix") =3D=3D 0) { migrateFrom =3D g_strdup_printf("%s:%s", protocol, listenAddress); } else { --=20 2.43.7 From nobody Sat Feb 7 06:39:17 2026 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=nutanix.com); dmarc=pass(p=none dis=none) header.from=nutanix.com ARC-Seal: i=2; a=rsa-sha256; t=1770026596; cv=pass; d=zohomail.com; s=zohoarc; b=C03YXVXM3vg7e4/uEKlTIfwuoCm7KJE27beWiUaj4EepEmlBZTd1IRmcbvJnR0AT7b+Awhj4LpqOAmp+zvPM2pclGN4ogLsfJvxGgWeqf85D/2AV4c3/yAWo6ozpheZggAXFb2P9zJ2DXedtnXFbLuaWNrSFVLow7qR1dskno0s= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770026596; 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=KSzH44DHmrKFL8Ejkhq5cKnUnYEVASzDxcwGNCH8eeo=; b=iQ4+0xKxdp38/VpjBILPb9yWkiinVt2Z6KI/iKC8PkHhSbRf63PpLbFJQggCXW35DTWdT0w9/CFP0HveA3eJdTbRd7nRFHmDp4UwkmkfzQwW4PHv6i5+/FU4njNQtb+TZ83/nfPHmr9cupTAzpfyWA4sqVk4qD1vJFbEz1OKs58= 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=nutanix.com); 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 1770026596403712.0748691428767; Mon, 2 Feb 2026 02:03:16 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 1B28341B6A; Mon, 2 Feb 2026 05:03:15 -0500 (EST) Received: from [172.19.199.6] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id B9EF741C9F; Mon, 2 Feb 2026 04:59:43 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id E8B48417E1; Mon, 2 Feb 2026 04:59:34 -0500 (EST) Received: from mx0a-002c1b01.pphosted.com (mx0a-002c1b01.pphosted.com [148.163.151.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id C797D41802 for ; Mon, 2 Feb 2026 04:59:33 -0500 (EST) Received: from pps.filterd (m0127838.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6129exfN320150; Mon, 2 Feb 2026 01:59:33 -0800 Received: from bl0pr03cu003.outbound.protection.outlook.com (mail-eastusazon11022133.outbound.protection.outlook.com [52.101.53.133]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 4c1j5x35ca-3 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Mon, 02 Feb 2026 01:59:32 -0800 (PST) Received: from MW6PR02MB9817.namprd02.prod.outlook.com (2603:10b6:303:23b::15) by SA6PR02MB10454.namprd02.prod.outlook.com (2603:10b6:806:40b::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 09:59:30 +0000 Received: from MW6PR02MB9817.namprd02.prod.outlook.com ([fe80::86e5:3449:a3f7:ee4c]) by MW6PR02MB9817.namprd02.prod.outlook.com ([fe80::86e5:3449:a3f7:ee4c%5]) with mapi id 15.20.9564.007; Mon, 2 Feb 2026 09:59:30 +0000 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-5.3 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= proofpoint20171006; bh=KSzH44DHmrKFL8Ejkhq5cKnUnYEVASzDxcwGNCH8e eo=; b=Ug1OBhWnW7D05yGCDBDXRlnOmS0QtQIRrJj/hT6Wgf5cO9nJcegTgYkUy KDa6wpipPpvUNnU5UjLCw/5OzlNmW59f68PV5tRW8qaqyLuGGbaIW6MqnuLp2YsJ Xjf1Y3JF4I/xo1aFMtLoJu+32w1+vj2OiEBChJTW499prqIcTvaDKZdClxIp1uOy oBncHltOQNwQ1zn+Nigt78yTM2i+CBOgRpu0j9+QBMxw8TNxOxR8OBLzTAnb9u2C Tmz+YiP3cUBafP11DUPg/G9X0k2EbhGTd934X56BzSaiWDdR9Nj9HloeRxLu+Dze 2LM6UyxM7clG3DMBh63uG0IwXCNMg== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SDfne35En0nwa+ZtFu+c5rcrZTBRGepj9GGRxPT6bcvGG+FjLHCGYJ+plAyh+EVW9GmUKLy7F9nZCN4HnDZ21rUeo2P6C5hhnt4YZCSFnK26urCdwHtVyBgyDDGIOF6U+HJTK0UWq2DmSRPRuEAacS9d3/lIO+s1HKKMQV9PCNpxy9jpcywLjD/5nGz8p5iUBVBx9GiRwzL8E8SorETkLlcVOwBzRfzIddJugEfIVcZgN9j+PfAuMsiJggyCBeUJMzSg2qQbnj/JRZGs7GOvXdNJnDmZuTiXhPZDsBUNgJ8NDfX82GnWrqIs9eCW1jn9y+HJmNAfLCkXryeCgWOHcA== 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=KSzH44DHmrKFL8Ejkhq5cKnUnYEVASzDxcwGNCH8eeo=; b=sSmHU3lnBhh/q71HaR9N+20DPAk6p2FsZv6vMpfAKvMuE1Nv4XkZhP6CdQRDRJkKa6aF+HbRiPgRkmerQyeKl2NdhV0PBbEtxLmasYqCeZLinGAaYTGjmjKFxFLAuUyLsG4vxcBsHWNWXTyKWAecpS5C8Yv1eEfGSeHWVDtL6PlbvM4C7z68HKjD+FNUxcwT2sDYYK7Y/im7KcaiWrUCvH5dHWKDUtrLCew7vCWeSYUPYwjmC1zql28NWX7Dab6GAd1u6G59jl4SGg+e9DrAycuGA9xhDR/H3psFITPf5MTwxoVmvnBalBeKGUsm9SeQqg4lvHN8joXh2+/sxZixhg== 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=KSzH44DHmrKFL8Ejkhq5cKnUnYEVASzDxcwGNCH8eeo=; b=rkzuYVdpJwN3TTzGULw7G/JgeSuxEL7n5cu7deBrwONoDA6grhSqB7yGeaMVQbTSUEb/LVBUxgucY6hTGEl3cFTsAVsvMiXwg+BQfbgOWyd5R+aXEZr1oVMUudHL/PuwF/b7GVv56e/ys1ZOxNkjweGeVUDd9Pd+sE4A/02udUVJTTkL3MzISYiVy00fUI+iu3L3GvASb+tM82GnvFEj+I04wq6sFrAYIQ2+W4Ll+X0GpweH9BVKW093XcLoYgOJPDpaSq6YS60Wd5EY4qI0JoNqP75OmPZ3j3rn+0hRafu1kEDkkKKAmEB85JeNvx8mCrrSzNiGIMeUlv1/hVfqaw== From: Tejus GK To: devel@lists.libvirt.org Subject: [PATCH v2 2/2] qemu: add support for fd based live migrations Date: Mon, 2 Feb 2026 09:59:10 +0000 Message-ID: <20260202095911.2807669-3-tejus.gk@nutanix.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260202095911.2807669-1-tejus.gk@nutanix.com> References: <20260202095911.2807669-1-tejus.gk@nutanix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH2PEPF00003847.namprd17.prod.outlook.com (2603:10b6:518:1::64) To MW6PR02MB9817.namprd02.prod.outlook.com (2603:10b6:303:23b::15) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MW6PR02MB9817:EE_|SA6PR02MB10454:EE_ X-MS-Office365-Filtering-Correlation-Id: e63beb70-c52d-439a-baf0-08de6241c23a x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?fpg1qM6972I9giFbLgaN6dDxYx9SoLWmOhWfRKxH/3dCU0TokCGOwlb09yhv?= =?us-ascii?Q?F6oK0aqIanjNk+rGDX/57yxwldwOqFYCSSQuqvPjeQXOR6eqrrSVH/hn2LP5?= =?us-ascii?Q?uVrfPg7Mg1mEBubxxpVD3FQAiTIfaJ8Xztgo984wyc2P+2Q755uUPnbCrSpM?= =?us-ascii?Q?lGd+75/7tfy81w+RL/XbfZ8QCKu+GlVSNjCQxO+xzKG9A6O1tDqzQGx+fM70?= =?us-ascii?Q?G49nDep6pcclfrNGHCp1WDW8zFwLepDXyw2vyZTfXweDRHo9gBvaak0U9E2Q?= =?us-ascii?Q?CTasaz3yx3LOBQoQ9BaNcUf6m47jDXtI+OWkUDk4ONNsR48WVW2EEaRXEkER?= =?us-ascii?Q?aNxslLv2WHEG/9SoAed4VVd9agg3niIMIOaiavq6im7UBPOA/tAS1IDbYvc9?= =?us-ascii?Q?ckLACpOF6xeOyhYqf8CXndC8Syxo+9KQSwmr7aygNOAz9iGRDkA3DmhBUgxO?= =?us-ascii?Q?QoJ1nCuYZpLAhIBAyLc9d4rVJCV6+7Mc30JHGH0iTJLMXQgDMC7CGfP5Eb0x?= =?us-ascii?Q?eyWoZtTZr09aPxM3RkLGOOhI8jnElUF5gXaLD+h56SgQw35yBBxz8ZF53Er7?= =?us-ascii?Q?nEqhIyqboLtTMH1BircrbVcpFCzIXL3m2mua2UwqGBje1kTgTOnqLFgXee4L?= =?us-ascii?Q?LuoJ5stTbm3w3eg6vDkAqo+p1es0D8AJbUwyZn6kQSE4kgsylPu9f37SXy9p?= =?us-ascii?Q?f6av+nn9U/++6uJHtxFDtyHeasggWZme6/4tnpt5Lr65c6w/sGpA6AGw1Vzi?= =?us-ascii?Q?XG1cs5wFLzPpqAmvN71h6XMte6//ojlO05dKIYq8k8kwaNPvtXFbKL0C9ogZ?= =?us-ascii?Q?FPzcDqFCyxDjywTw8vFF1OqVInyLFUFixuDiMuKPw2VFKktdfyJoa2FyygOf?= =?us-ascii?Q?j/h/KactueM+ijKnag72OUdelF53uPjeHX+wQ2BpZkYOhXan1QglsSk4FN1/?= =?us-ascii?Q?P30QyrG/iRa+NFIwBpLtIE44dttJXTF+WU+3xqV2PKhRKMEBlU2BRxRzwicp?= =?us-ascii?Q?AjEzpQnZwA6y/0JdyfH4juUjpnwOOEXnJhsVIl1RGVjczuQNs6V3yFKf0Ifd?= =?us-ascii?Q?9NW2e+mlM4PUhkmofH2ISFn1n2ieAkaLFdEDr+7SSx9scWVEMHb16qH0l3oF?= =?us-ascii?Q?6HPKOKY7hWu+ysaFJRbdt4jlGzEBYofiutcEMxw3x1e/R+AMB6CJmEvTWURi?= =?us-ascii?Q?lsfiz4mT+QIszBRDxG2DPrD5X7d9WxF7k/GHVSm3lLqlv32Lo6RwACQJ+U1N?= =?us-ascii?Q?hr0mt7MCF0CLLozU3qVR9Qx2ZsRN8pXpSMFbq7ghIyzT/qJeqY7MLooBV3dy?= =?us-ascii?Q?z+y3kKIB3temPsZM1wUPDPJV4koWN166ccCZUjFkDDTNuZ/z3GYDm4JNq4YZ?= =?us-ascii?Q?WrCoD9bswCOzKXZh+Haqaj6iWa1Qhdr4MxqDIhXmOKAbMHnBeSYJ9/2JTQRa?= =?us-ascii?Q?o9vmElOFsPBTMuURJVfDtSSQ7cvER4IZ810t8E3+Rvq/97kCC8SxKgJoSCkT?= =?us-ascii?Q?e/t9kjhSAYNxxkn+1b8K2O7h163uKhwcw8o343DeZCSqLAbciEKxW3MlLVcY?= =?us-ascii?Q?Fiz9bvSDRZrGdkSv3FeTruqHDYmjDfCMMrDaiVueKOo8Sc9L0CTRoDzEAK9p?= =?us-ascii?Q?YKJYsYZlYPPzgqP0PcX983U=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW6PR02MB9817.namprd02.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(52116014)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?wYg8upbkZE6vbKpzzkeICjn182hJufNrzd5jbZPHye38SuyVTiO12xp/aM2U?= =?us-ascii?Q?AQBmdka062dcp3uh2uo++5/88pSDX2Mhlhi7s/r17C/RWzIcA3RGUeul6Nwn?= =?us-ascii?Q?1eRu7huqhze/OzVVEGzbdrLYrOqvpORYgWUMKwITGro5S28oSdpSxs2A+GEV?= =?us-ascii?Q?DlUVN9iT9n6HxTuD0lB7duHR3P3dXOKF+8xHyLwn0dq1SG7JoYAuqFnHZN89?= =?us-ascii?Q?YSFV3LYkrNaWV+K+hY6zePXU8vcKQlsY9YytSd238WOJGthxqGN9JYYINi/e?= =?us-ascii?Q?5mLHcZXE1Bjjdz3RRgaCwc/9t+FWTfyUJb+RnnbqZgx7c6Tk/e2hN/UPv8gP?= =?us-ascii?Q?NeBIbOqP3Od5au3F0Dv6amGwMD1YENkkjrQ3RQNoGsQLfiQ/my6VKUSWdfm3?= =?us-ascii?Q?95bZuGfpn9OGo1JyR4bZx5vN2DKXbUe9bEz71KpAgHEaV38hZ24Sj6fX8vTg?= =?us-ascii?Q?C/20s/Xb4tfvWR29bIDRWmHyHojQsihKvHoFJP4kJw0Qqi52Pqd1wQUEt428?= =?us-ascii?Q?Z6DK0V5+j1fAmS9ETd+Esoixa28oP9+ACPIquLHhh8xBgosRFH3t+Oy5dbcl?= =?us-ascii?Q?U7hVUXuvdr8vxjBWpkH61kMHjcCZ7fbv4JWBBhNqMoT7thQ5OjbHsaRNERHe?= =?us-ascii?Q?mIUY/lW68DprAd1lZfeEiZXUf9o2hno1Di9pqr+aXEd/ImC3Lg4Ql8hmd07x?= =?us-ascii?Q?MgIEG1HYv3eEwCysGoqUG9J4DDGvZGfGd8PLua4FxaCNMSW31oh94P29Hsa5?= =?us-ascii?Q?fJ+pwRaWD+hXScN9SOYjfnzQNw+k2b/OYI1cJUG4JcoaMpJqCxMRmlKUXZZp?= =?us-ascii?Q?EI7d3RWS2fQ/PSgnrKEkz4nxHbSzyA7wZDCdDAKOcdTR790bFZ/X6yqXJW/R?= =?us-ascii?Q?JXwST9Ybfm+VXXUYy3X2vY/+d7tVbwpj6qKovZAhN2ZaS7AfZTm4hYiGSQfv?= =?us-ascii?Q?eN5LZQMdAI3cUnALpbS69d/bZJ3vsfIJK7IAD4F1U4nu7ezzz29NAjf/Dym/?= =?us-ascii?Q?qk09egtQbro3UHrgZcmlLeFLBtWS/VhrsfWpUg2bMKd3+qBKR0U2gE5js6Yk?= =?us-ascii?Q?Dz5U3evljp6qlpLZNbgRlzbGw+xEtCb2kmvdwQWth4mYXWyAv2kDAMj+nZVr?= =?us-ascii?Q?ZCCPrynGR6pvD7woy1/ppF3n3oszRXATKrZHBK0nkf67lyQRqgSL1U7/ZejR?= =?us-ascii?Q?BqNUA76rwD2/pMsrFmASEnDg0E3vmqZvc1fWSHPbhvBEJV0YdjRFbUMaGXc/?= =?us-ascii?Q?gHvknjAbJ9cHyGaKNU3DsUgnJWmvHvrASX0XqkEPHUWkhyUMmRYq4kNcYlu/?= =?us-ascii?Q?qpwDC3ektJmwX5EbAGlZp/sQWOKvqsZhjGdKTODB7c+lJnotxHbaAIeN8+uk?= =?us-ascii?Q?ity8UVUx0oz0Y6inlNcAU3QxWVZn6c1pc0Zv5A5Zlw6LkJ5fUCqhThm7pcaP?= =?us-ascii?Q?IvYcx2juXIkY7ChGss5+ALSUVKroQwBJhCRHAQ5ICr6p9IMYPCc63fXySmhw?= =?us-ascii?Q?+f1M3u1b3+J1KpSHYolpIHc/XpFz8PFywXoOQTGrCkewHNLHU8sVIS26vRpt?= =?us-ascii?Q?1vK4bgodpftNtLV/l4EmdBsC8B/v5igsFmYnJHZMmBr86gNOmZKffHzYUIHf?= =?us-ascii?Q?8HM5TsmhC/nd7Bru8xQdFy6R0sCHPBm0oZF2pa071TTVBLHk2MlfeJS6EQVR?= =?us-ascii?Q?uCbX37i7NBprZ6CEnkRNBSjhLYNSNjl/RXHkGA3/TMxkQWdC4eIy9bE8h6VW?= =?us-ascii?Q?uO3p7zM/LQ=3D=3D?= X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: e63beb70-c52d-439a-baf0-08de6241c23a X-MS-Exchange-CrossTenant-AuthSource: MW6PR02MB9817.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 09:59:30.5572 (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: i9RHsT5LZhruMr9p5KEMHRtbWhyeoSdTChhJHcHVMJZHZGNZCwGvsw5+rN5M3bBhkWKIr4tCBWSeOIJbrbGQyA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA6PR02MB10454 X-Proofpoint-ORIG-GUID: OAKCyRRsOMZbGlLp8ALHGaGPovB0kDgA X-Authority-Analysis: v=2.4 cv=HfQZjyE8 c=1 sm=1 tr=0 ts=69807584 cx=c_pps a=nXg1BFrUXdgPQNEnN+3bHQ==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=HzLeVaNsDn8A:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=64Cc0HZtAAAA:8 a=Et22znlloV0BkfJK1bEA:9 X-Proofpoint-GUID: OAKCyRRsOMZbGlLp8ALHGaGPovB0kDgA X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjAyMDA4NSBTYWx0ZWRfXzfW2VfLG1qnr R9SVZuiRFQAvm0AqI88pNKNmUkecK+gN1RZ8JkFHHwo3lufMvR34zWAu4S9YPseG/Ib3usru2Vg NEwOHMfPygzZ7glK4FeyP33wrBB77qA2d69O8nfgm2Ai+EAKLLzFHRaZBRj9AptHugGyDF4PL93 t77BnGd0xW8/A0o6iqGL4E17ajAXh3h2eLVzygsmhZnBa4abroiPtyP8l6KklIbMDEjZIyTbVZg T8WtvgXDpvuRgt4P86jvecc+ivHmaEY1swWPaIfUqRMDC8h1CVLTlOLmTxucPJCUVxLdiG/K/8W duDNSKbaQH36yit/x7p6KhUSMFxpymK1q/IrCWTrp5B2ipruoZaeDSaS9vcLeny4GhG9BpnE9On 4B7wKRj+aSbjROrwG6HZlnUeRskxAKSxipO2rOr/iZ0egUwxJtl6wh8JSi1gh2pFA0CtcOBHbPT FSi/b9Z7I/x8vkmCr/Q== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-02_03,2026-01-30_04,2025-10-01_01 X-Proofpoint-Spam-Reason: safe Message-ID-Hash: AZOLECUQEK5JBNQLXFHYM7JFSMOF7LBE X-Message-ID-Hash: AZOLECUQEK5JBNQLXFHYM7JFSMOF7LBE X-MailFrom: tejus.gk@nutanix.com 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: pkrempa@redhat.com, Tejus GK 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 @nutanix.com) X-ZM-MESSAGEID: 1770026601479154100 Content-Type: text/plain; charset="utf-8" QEMU already supports migration using a file descriptor passed directly to QEMU. Currently, libvirt uses this mechanism via the tunnelled migration path, where libvirt creates a set of file descriptors using pipes, passes them to QEMU, and performs the migration. This patch introduces support for FD-based live migration in libvirt, where the file descriptors are opened by the client and provided to libvirt. Clients are expected to first define a dummy domain on the destination host with the same UUID as the source domain, and then associate the file descriptors with libvirt on both the source and destination using the virDomainFDAssociate API. Since the client may assign an arbitrary name to the file descriptor used for migration, this patch introduces a new virDomainMigrate parameter, VIR_MIGRATE_PARAM_FD_SET, which instructs libvirt which FD name to look up and pass through to QEMU for the migration. Signed-off-by: Tejus GK --- include/libvirt/libvirt-domain.h | 14 +++ src/qemu/qemu_driver.c | 24 +++-- src/qemu/qemu_migration.c | 169 ++++++++++++++++++++++++++----- src/qemu/qemu_migration.h | 3 + 4 files changed, 174 insertions(+), 36 deletions(-) diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-dom= ain.h index b0acd0083b..6d2a2a0c35 100644 --- a/include/libvirt/libvirt-domain.h +++ b/include/libvirt/libvirt-domain.h @@ -1438,6 +1438,20 @@ typedef enum { */ # define VIR_MIGRATE_PARAM_TLS_DESTINATION "tls.destination" =20 +/** + * VIR_MIGRATE_PARAM_FD_SET: + * + * virDomainMigrate* params field: the name of the file descriptor set + * previously associated with the domain via virDomainFDAssociate() to be = used + * for FD-based migration. As VIR_TYPED_PARAM_STRING. + * + * When using "fd://" as the migration URI, this parameter specifies which + * FD set should be used for the migration data stream. + * + * Since: 12.0.0 + */ +# define VIR_MIGRATE_PARAM_FD_SET "fd.set" + /* Domain migration. */ virDomainPtr virDomainMigrate (virDomainPtr domain, virConnectPtr dconn, unsigned long flags, const char *dname, diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index cdd333c882..076b3e8a74 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -10851,7 +10851,7 @@ qemuDomainMigratePrepare2(virConnectPtr dconn, NULL, 0, NULL, NULL, /* No cookie= s */ uri_in, uri_out, &def, origname, NULL, NULL, 0, NU= LL, - migParams, flags); + NULL, migParams, flags); } =20 =20 @@ -10901,7 +10901,7 @@ qemuDomainMigratePerform(virDomainPtr dom, */ ret =3D qemuMigrationSrcPerform(driver, dom->conn, vm, NULL, NULL, dconnuri, uri, NULL, NULL, NULL, N= ULL, 0, - NULL, + NULL, NULL, migParams, cookie, cookielen, NULL, NULL, /* No output cookies in v2 */ flags, dname, bandwidth, false); @@ -11070,7 +11070,7 @@ qemuDomainMigratePrepare3(virConnectPtr dconn, cookieout, cookieoutlen, uri_in, uri_out, &def, origname, NULL, NULL, 0, - NULL, migParams, flags); + NULL, NULL, migParams, flags); } =20 static int @@ -11091,6 +11091,7 @@ qemuDomainMigratePrepare3Params(virConnectPtr dconn, const char *dname =3D NULL; const char *uri_in =3D NULL; const char *listenAddress =3D NULL; + const char *fdset =3D NULL; int nbdPort =3D 0; g_autofree const char **migrate_disks =3D NULL; g_autofree char *origname =3D NULL; @@ -11118,7 +11119,10 @@ qemuDomainMigratePrepare3Params(virConnectPtr dcon= n, &nbdURI) < 0 || virTypedParamsGetInt(params, nparams, VIR_MIGRATE_PARAM_DISKS_PORT, - &nbdPort) < 0) + &nbdPort) < 0 || + virTypedParamsGetString(params, nparams, + VIR_MIGRATE_PARAM_FD_SET, + &fdset) < 0) return -1; =20 virTypedParamsGetStringList(params, nparams, VIR_MIGRATE_PARAM_MIGRATE= _DISKS, @@ -11173,7 +11177,7 @@ qemuDomainMigratePrepare3Params(virConnectPtr dconn, uri_in, uri_out, &def, origname, listenAddress, migrate_disks, nbdPort, - nbdURI, migParams, flags); + nbdURI, fdset, migParams, flags); } =20 =20 @@ -11301,7 +11305,7 @@ qemuDomainMigratePerform3(virDomainPtr dom, =20 ret =3D qemuMigrationSrcPerform(driver, dom->conn, vm, xmlin, NULL, dconnuri, uri, NULL, NULL, NULL, NULL, 0, - NULL, migParams, + NULL, NULL, migParams, cookiein, cookieinlen, cookieout, cookieoutlen, flags, dname, bandwidth, true); @@ -11336,6 +11340,7 @@ qemuDomainMigratePerform3Params(virDomainPtr dom, int nbdPort =3D 0; g_autoptr(qemuMigrationParams) migParams =3D NULL; const char *nbdURI =3D NULL; + const char *fdset =3D NULL; int ret =3D -1; =20 virCheckFlags(QEMU_MIGRATION_FLAGS, -1); @@ -11368,7 +11373,10 @@ qemuDomainMigratePerform3Params(virDomainPtr dom, &nbdURI) < 0 || virTypedParamsGetString(params, nparams, VIR_MIGRATE_PARAM_PERSIST_XML, - &persist_xml) < 0) + &persist_xml) < 0 || + virTypedParamsGetString(params, nparams, + VIR_MIGRATE_PARAM_FD_SET, + &fdset) < 0) goto cleanup; =20 =20 @@ -11414,7 +11422,7 @@ qemuDomainMigratePerform3Params(virDomainPtr dom, ret =3D qemuMigrationSrcPerform(driver, dom->conn, vm, dom_xml, persis= t_xml, dconnuri, uri, graphicsuri, listenAddres= s, migrate_disks, migrate_disks_detect_zero= es, nbdPort, - nbdURI, migParams, + nbdURI, fdset, migParams, cookiein, cookieinlen, cookieout, cookie= outlen, flags, dname, bandwidth, true); cleanup: diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index e6c6be38c0..2c63242acd 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -3289,6 +3289,7 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver, const char **migrate_disks, int nbdPort, const char *nbdURI, + const char *fdset, qemuMigrationParams *migParams, unsigned int flags) { @@ -3303,6 +3304,7 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver, unsigned int startFlags; bool relabel =3D false; bool tunnel =3D !!st; + int migrationFD =3D -1; int ret =3D -1; int rv; =20 @@ -3321,6 +3323,31 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver, virPipe(dataFD) < 0) goto error; =20 + if (fdset) { + virStorageSourceFDTuple *fdtuple =3D NULL; + + if (!(fdtuple =3D virHashLookup(priv->fds, fdset))) { + virReportError(VIR_ERR_OPERATION_INVALID, + _("no file descriptor associated with name '%1$= s' for migration of domain '%2$s'"), + fdset, vm->def->name); + goto error; + } + + if (fdtuple->nfds !=3D 1) { + virReportError(VIR_ERR_OPERATION_INVALID, + _("expected a single file descriptor for migrat= ion of domain '%1$s'"), + vm->def->name); + goto error; + } + + if ((migrationFD =3D dup(fdtuple->fds[0])) < 0) { + virReportSystemError(errno, + _("failed to duplicate migration FD for d= omain '%1$s'"), + vm->def->name); + goto error; + } + } + startFlags =3D VIR_QEMU_PROCESS_START_AUTODESTROY; =20 if (qemuProcessInit(driver, vm, mig->cpu, VIR_ASYNC_JOB_MIGRATION_IN, @@ -3330,7 +3357,7 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver, =20 if (!(incoming =3D qemuMigrationDstPrepare(driver, vm, tunnel, protoco= l, listenAddress, port, - &dataFD[0]))) + migrationFD ? &migrationFD : = &dataFD[0]))) goto error; =20 qemuMigrationDstPrepareDiskSeclabels(vm, migrate_disks, flags); @@ -3439,6 +3466,7 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver, =20 cleanup: qemuProcessIncomingDefFree(incoming); + VIR_FORCE_CLOSE(migrationFD); VIR_FORCE_CLOSE(dataFD[0]); VIR_FORCE_CLOSE(dataFD[1]); virObjectEventStateQueue(driver->domainEventState, event); @@ -3481,6 +3509,7 @@ qemuMigrationDstPrepareFresh(virQEMUDriver *driver, const char **migrate_disks, int nbdPort, const char *nbdURI, + const char *fdset, qemuMigrationParams *migParams, unsigned int flags) { @@ -3494,9 +3523,9 @@ qemuMigrationDstPrepareFresh(virQEMUDriver *driver, bool taint_hook =3D false; =20 VIR_DEBUG("name=3D%s, origname=3D%s, protocol=3D%s, port=3D%hu, " - "listenAddress=3D%s, nbdPort=3D%d, nbdURI=3D%s, flags=3D0x%x= ", + "listenAddress=3D%s, nbdPort=3D%d, nbdURI=3D%s, fdset=3D%s, = flags=3D0x%x", (*def)->name, NULLSTR(origname), protocol, port, - listenAddress, nbdPort, NULLSTR(nbdURI), flags); + listenAddress, nbdPort, NULLSTR(nbdURI), NULLSTR(fdset), fla= gs); =20 if (!(flags & VIR_MIGRATE_OFFLINE)) { cookieFlags =3D QEMU_MIGRATION_COOKIE_GRAPHICS | @@ -3588,7 +3617,7 @@ qemuMigrationDstPrepareFresh(virQEMUDriver *driver, if (qemuMigrationDstPrepareActive(driver, vm, dconn, mig, st, protocol, port, listenAddress, migrate_disks, - nbdPort, nbdURI, + nbdPort, nbdURI, fdset, migParams, flags) < 0) { goto stopjob; } @@ -3754,6 +3783,7 @@ qemuMigrationDstPrepareAny(virQEMUDriver *driver, const char **migrate_disks, int nbdPort, const char *nbdURI, + const char *fdset, qemuMigrationParams *migParams, unsigned int flags) { @@ -3814,7 +3844,7 @@ qemuMigrationDstPrepareAny(virQEMUDriver *driver, def, origname, st, protocol, port, autoPort, listenAddress, migrate_disks, - nbdPort, nbdURI, + nbdPort, nbdURI, fdset, migParams, flags); } =20 @@ -3851,7 +3881,7 @@ qemuMigrationDstPrepareTunnel(virQEMUDriver *driver, return qemuMigrationDstPrepareAny(driver, dconn, cookiein, cookieinlen, cookieout, cookieoutlen, def, origna= me, st, NULL, 0, false, NULL, NULL, 0, - NULL, migParams, flags); + NULL, NULL, migParams, flags); } =20 =20 @@ -3892,6 +3922,7 @@ qemuMigrationDstPrepareDirect(virQEMUDriver *driver, const char **migrate_disks, int nbdPort, const char *nbdURI, + const char *fdset, qemuMigrationParams *migParams, unsigned int flags) { @@ -3907,11 +3938,12 @@ qemuMigrationDstPrepareDirect(virQEMUDriver *driver, "cookieout=3D%p, cookieoutlen=3D%p, uri_in=3D%s, uri_out=3D%= p, " "def=3D%p, origname=3D%s, listenAddress=3D%s, " "migrate_disks=3D%p, nbdPort=3D%d, " - "nbdURI=3D%s, flags=3D0x%x", + "nbdURI=3D%s, fdset=3D%s, flags=3D0x%x", driver, dconn, NULLSTR(cookiein), cookieinlen, cookieout, cookieoutlen, NULLSTR(uri_in), uri_out, *def, origname, NULLSTR(listenAddress), migrate_disks, nbdPort, NULLSTR(nbdURI), + NULLSTR(fdset), flags); =20 *uri_out =3D NULL; @@ -3976,7 +4008,8 @@ qemuMigrationDstPrepareDirect(virQEMUDriver *driver, =20 if (STRNEQ(uri->scheme, "tcp") && STRNEQ(uri->scheme, "rdma") && - STRNEQ(uri->scheme, "unix")) { + STRNEQ(uri->scheme, "unix") && + STRNEQ(uri->scheme, "fd")) { virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, _("unsupported scheme %1$s in migration URI %2$= s"), uri->scheme, uri_in); @@ -3986,6 +4019,9 @@ qemuMigrationDstPrepareDirect(virQEMUDriver *driver, if (STREQ(uri->scheme, "unix")) { autoPort =3D false; listenAddress =3D uri->path; + } else if (STREQ(uri->scheme, "fd")) { + autoPort =3D false; + listenAddress =3D NULL; } else { if (uri->server =3D=3D NULL) { virReportError(VIR_ERR_INVALID_ARG, @@ -4020,7 +4056,7 @@ qemuMigrationDstPrepareDirect(virQEMUDriver *driver, NULL, uri ? uri->scheme : "tcp", port, autoPort, listenAddress, migrate_disks, nbdPort, - nbdURI, migParams, flags); + nbdURI, fdset, migParams, flags); cleanup: if (ret !=3D 0) { VIR_FREE(*uri_out); @@ -5364,19 +5400,22 @@ qemuMigrationSrcPerformNative(virQEMUDriver *driver, const char *graphicsuri, const char **migrate_disks, const char **migrate_disks_detect_zeroes, + const char *fdset, qemuMigrationParams *migParams, const char *nbdURI) { + qemuDomainObjPrivate *priv =3D vm->privateData; g_autoptr(virURI) uribits =3D NULL; int ret =3D -1; qemuMigrationSpec spec; =20 VIR_DEBUG("driver=3D%p, vm=3D%p, uri=3D%s, cookiein=3D%s, cookieinlen= =3D%d, " "cookieout=3D%p, cookieoutlen=3D%p, flags=3D0x%x, bandwidth= =3D%lu, " - "graphicsuri=3D%s, migrate_disks=3D%p, migrate_disks_detect_= zeroes=3D%p", + "graphicsuri=3D%s, migrate_disks=3D%p, migrate_disks_detect_= zeroes=3D%p, fdset=3D%s", driver, vm, uri, NULLSTR(cookiein), cookieinlen, cookieout, cookieoutlen, flags, bandwidth, - NULLSTR(graphicsuri), migrate_disks, migrate_disks_detect_ze= roes); + NULLSTR(graphicsuri), migrate_disks, migrate_disks_detect_ze= roes, + NULLSTR(fdset)); =20 if (!(uribits =3D qemuMigrationAnyParseURI(uri, NULL))) return -1; @@ -5396,7 +5435,41 @@ qemuMigrationSrcPerformNative(virQEMUDriver *driver, } } =20 - if (STREQ(uribits->scheme, "unix")) { + if (STREQ(uribits->scheme, "fd")) { + virStorageSourceFDTuple *fdtuple =3D NULL; + int migrationFD =3D -1; + + if (!(fdtuple =3D virHashLookup(priv->fds, fdset))) { + virReportError(VIR_ERR_OPERATION_INVALID, + _("no file descriptor associated with name '%1$= s' for migration of domain '%2$s'"), + fdset, vm->def->name); + return -1; + } + + if (fdtuple->nfds !=3D 1) { + virReportError(VIR_ERR_OPERATION_INVALID, + _("expected a single file descriptor for migrat= ion of domain '%1$s'"), + vm->def->name); + return -1; + } + + if ((migrationFD =3D dup(fdtuple->fds[0])) < 0) { + virReportSystemError(errno, + _("failed to duplicate migration FD for d= omain '%1$s'"), + vm->def->name); + return -1; + } + + if (qemuSecuritySetImageFDLabel(driver->securityManager, vm->def, = migrationFD) < 0) { + VIR_FORCE_CLOSE(migrationFD); + return -1; + } + + spec.destType =3D MIGRATION_DEST_FD; + spec.dest.fd.qemu =3D migrationFD; + spec.dest.fd.local =3D -1; + + } else if (STREQ(uribits->scheme, "unix")) { if ((flags & VIR_MIGRATE_TLS) && !(flags & VIR_MIGRATE_POSTCOPY_RESUME) && !qemuMigrationParamsTLSHostnameIsSet(migParams)) { @@ -5541,7 +5614,7 @@ qemuMigrationSrcPerformResume(virQEMUDriver *driver, ret =3D qemuMigrationSrcPerformNative(driver, vm, NULL, uri, cookiein, cookieinlen, cookieout, cookieoutlen, flags, - 0, NULL, NULL, NULL, NULL, migPara= ms, NULL); + 0, NULL, NULL, NULL, NULL, NULL, m= igParams, NULL); =20 virCloseCallbacksDomainAdd(vm, conn, qemuMigrationAnyConnectionClosed); =20 @@ -5649,7 +5722,7 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriver *driv= er, cookie, cookielen, NULL, NULL, /* No out cookie w= ith v2 migration */ flags, bandwidth, dconn, NULL,= NULL, - NULL, migParams, NULL); + NULL, NULL, migParams, NULL); =20 /* Perform failed. Make sure Finish doesn't overwrite the error */ if (ret < 0) @@ -5715,6 +5788,7 @@ qemuMigrationSrcPerformPeer2Peer3(virQEMUDriver *driv= er, const char **migrate_disks_detect_zeroes, int nbdPort, const char *nbdURI, + const char *fdset, qemuMigrationParams *migParams, unsigned long long bandwidth, bool useParams, @@ -5740,11 +5814,11 @@ qemuMigrationSrcPerformPeer2Peer3(virQEMUDriver *dr= iver, VIR_DEBUG("driver=3D%p, sconn=3D%p, dconn=3D%p, dconnuri=3D%s, vm=3D%p= , xmlin=3D%s, " "dname=3D%s, uri=3D%s, graphicsuri=3D%s, listenAddress=3D%s,= " "migrate_disks=3D%p, migrate_disks_detect_zeroes=3D%p, nbdPo= rt=3D%d, nbdURI=3D%s, " - "bandwidth=3D%llu, useParams=3D%d, flags=3D0x%x", + "fdset=3D%s, bandwidth=3D%llu, useParams=3D%d, flags=3D0x%x", driver, sconn, dconn, NULLSTR(dconnuri), vm, NULLSTR(xmlin), NULLSTR(dname), NULLSTR(uri), NULLSTR(graphicsuri), NULLSTR(listenAddress), migrate_disks, migrate_disks_detect_= zeroes, nbdPort, - NULLSTR(nbdURI), bandwidth, useParams, flags); + NULLSTR(nbdURI), NULLSTR(fdset), bandwidth, useParams, flags= ); =20 /* Unlike the virDomainMigrateVersion3 counterpart, we don't need * to worry about auto-setting the VIR_MIGRATE_CHANGE_PROTECTION @@ -5827,6 +5901,11 @@ qemuMigrationSrcPerformPeer2Peer3(virQEMUDriver *dri= ver, if (qemuMigrationParamsDump(migParams, ¶ms, &nparams, &maxparams, &flags) < 0) goto cleanup; + if (fdset && + virTypedParamsAddString(¶ms, &nparams, &maxparams, + VIR_MIGRATE_PARAM_FD_SET, + fdset) < 0) + goto cleanup; } =20 if (!(flags & VIR_MIGRATE_POSTCOPY_RESUME) && @@ -5927,7 +6006,7 @@ qemuMigrationSrcPerformPeer2Peer3(virQEMUDriver *driv= er, &cookieout, &cookieoutlen, flags, bandwidth, dconn, g= raphicsuri, migrate_disks, migrate_dis= ks_detect_zeroes, - migParams, nbdURI); + fdset, migParams, nbdURI); } =20 if (ret =3D=3D 0) @@ -6103,6 +6182,7 @@ qemuMigrationSrcPerformPeer2Peer(virQEMUDriver *drive= r, const char **migrate_disks_detect_zeroes, int nbdPort, const char *nbdURI, + const char *fdset, qemuMigrationParams *migParams, unsigned int flags, const char *dname, @@ -6121,11 +6201,11 @@ qemuMigrationSrcPerformPeer2Peer(virQEMUDriver *dri= ver, =20 VIR_DEBUG("driver=3D%p, sconn=3D%p, vm=3D%p, xmlin=3D%s, dconnuri=3D%s= , uri=3D%s, " "graphicsuri=3D%s, listenAddress=3D%s, " - "migrate_disks=3D%p, nbdPort=3D%d, nbdURI=3D%s, flags=3D0x%x= , " + "migrate_disks=3D%p, nbdPort=3D%d, nbdURI=3D%s, fdset=3D%s, = flags=3D0x%x, " "dname=3D%s, bandwidth=3D%lu", driver, sconn, vm, NULLSTR(xmlin), NULLSTR(dconnuri), NULLSTR(uri), NULLSTR(graphicsuri), NULLSTR(listenAddress), - migrate_disks, nbdPort, NULLSTR(nbdURI), + migrate_disks, nbdPort, NULLSTR(nbdURI), NULLSTR(fdset), flags, NULLSTR(dname), bandwidth); =20 if (flags & VIR_MIGRATE_TUNNELLED && uri) { @@ -6146,6 +6226,36 @@ qemuMigrationSrcPerformPeer2Peer(virQEMUDriver *driv= er, goto cleanup; } =20 + if (flags & VIR_MIGRATE_PARALLEL && fdset) { + virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", + _("FD-based migration does not support parallel mig= ration")); + goto cleanup; + } + + if (flags & VIR_MIGRATE_POSTCOPY && fdset) { + virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", + _("FD-based migration does not support post-copy")); + goto cleanup; + } + + if (flags & VIR_MIGRATE_POSTCOPY_RESUME && fdset) { + virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", + _("FD-based migration does not support post-copy re= sume")); + goto cleanup; + } + + if (flags & VIR_MIGRATE_ZEROCOPY && fdset) { + virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", + _("FD-based migration does not support zero-copy")); + goto cleanup; + } + + if (flags & VIR_MIGRATE_TLS && fdset) { + virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", + _("FD-based migration does not support TLS")); + goto cleanup; + } + /* the order of operations is important here; we make sure the * destination side is completely setup before we touch the source */ @@ -6226,7 +6336,7 @@ qemuMigrationSrcPerformPeer2Peer(virQEMUDriver *drive= r, ret =3D qemuMigrationSrcPerformPeer2Peer3(driver, sconn, dconn, dc= onnuri, vm, xmlin, persist_xml, dname, uri, g= raphicsuri, listenAddress, migrate_dis= ks, migrate_disks_detect_zeroes, - nbdPort, nbdURI, migParams= , bandwidth, + nbdPort, nbdURI, fdset, mi= gParams, bandwidth, !!useParams, flags); } else { ret =3D qemuMigrationSrcPerformPeer2Peer2(driver, sconn, dconn, vm, @@ -6265,6 +6375,7 @@ qemuMigrationSrcPerformJob(virQEMUDriver *driver, const char **migrate_disks_detect_zeroes, int nbdPort, const char *nbdURI, + const char *fdset, qemuMigrationParams *migParams, const char *cookiein, int cookieinlen, @@ -6313,7 +6424,7 @@ qemuMigrationSrcPerformJob(virQEMUDriver *driver, ret =3D qemuMigrationSrcPerformPeer2Peer(driver, conn, vm, xmlin, = persist_xml, dconnuri, uri, graphicsuri,= listenAddress, migrate_disks, migrate_disk= s_detect_zeroes, nbdPort, - nbdURI, + nbdURI, fdset, migParams, flags, dname, ba= ndwidth, &v3proto); } else { @@ -6323,7 +6434,7 @@ qemuMigrationSrcPerformJob(virQEMUDriver *driver, ret =3D qemuMigrationSrcPerformNative(driver, vm, persist_xml, uri= , cookiein, cookieinlen, cookieout, cookieoutlen, flags, bandwidth, NULL, NULL, = NULL, NULL, - migParams, nbdURI); + fdset, migParams, nbdURI); } if (ret < 0) goto endjob; @@ -6390,6 +6501,7 @@ qemuMigrationSrcPerformPhase(virQEMUDriver *driver, const char *graphicsuri, const char **migrate_disks, const char **migrate_disks_detect_zeroes, + const char *fdset, qemuMigrationParams *migParams, const char *cookiein, int cookieinlen, @@ -6426,7 +6538,7 @@ qemuMigrationSrcPerformPhase(virQEMUDriver *driver, cookieout, cookieoutlen, flags, bandwidth, NULL, graphicsuri, migrate_disks, migrate_disks_detect_= zeroes, - migParams, nbdURI) < 0) + fdset, migParams, nbdURI) < 0) goto cleanup; =20 virCloseCallbacksDomainAdd(vm, conn, qemuMigrationAnyConnectionClosed); @@ -6471,6 +6583,7 @@ qemuMigrationSrcPerform(virQEMUDriver *driver, const char **migrate_disks_detect_zeroes, int nbdPort, const char *nbdURI, + const char *fdset, qemuMigrationParams *migParams, const char *cookiein, int cookieinlen, @@ -6486,12 +6599,12 @@ qemuMigrationSrcPerform(virQEMUDriver *driver, VIR_DEBUG("driver=3D%p, conn=3D%p, vm=3D%p, xmlin=3D%s, dconnuri=3D%s,= " "uri=3D%s, graphicsuri=3D%s, listenAddress=3D%s, " "migrate_disks=3D%p, nbdPort=3D%d, " - "nbdURI=3D%s, " + "nbdURI=3D%s, fdset=3D%s, " "cookiein=3D%s, cookieinlen=3D%d, cookieout=3D%p, cookieoutl= en=3D%p, " "flags=3D0x%x, dname=3D%s, bandwidth=3D%lu, v3proto=3D%d", driver, conn, vm, NULLSTR(xmlin), NULLSTR(dconnuri), NULLSTR(uri), NULLSTR(graphicsuri), NULLSTR(listenAddress), - migrate_disks, nbdPort, NULLSTR(nbdURI), + migrate_disks, nbdPort, NULLSTR(nbdURI), NULLSTR(fdset), NULLSTR(cookiein), cookieinlen, cookieout, cookieoutlen, flags, NULLSTR(dname), bandwidth, v3proto); =20 @@ -6513,7 +6626,7 @@ qemuMigrationSrcPerform(virQEMUDriver *driver, return qemuMigrationSrcPerformJob(driver, conn, vm, xmlin, persist= _xml, dconnuri, uri, graphicsuri, listenAddress, migrate_disks, migrate_disks_det= ect_zeroes, nbdPort, - nbdURI, migParams, + nbdURI, fdset, migParams, cookiein, cookieinlen, cookieout, cookieoutlen, flags, dname, bandwidth, v3proto= ); @@ -6529,7 +6642,7 @@ qemuMigrationSrcPerform(virQEMUDriver *driver, return qemuMigrationSrcPerformPhase(driver, conn, vm, persist_xml,= uri, graphicsuri, migrate_disks, migrate_disks_d= etect_zeroes, - migParams, + fdset, migParams, cookiein, cookieinlen, cookieout, cookieoutlen, flags, bandwidth, nbdURI); @@ -6538,7 +6651,7 @@ qemuMigrationSrcPerform(virQEMUDriver *driver, return qemuMigrationSrcPerformJob(driver, conn, vm, xmlin, persist_xml= , NULL, uri, graphicsuri, listenAddress, migrate_disks, migrate_disks_detect_= zeroes, nbdPort, - nbdURI, migParams, + nbdURI, fdset, migParams, cookiein, cookieinlen, cookieout, cookieoutlen, flags, dname, bandwidth, v3proto); diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index db03144207..2bfc06aaef 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -93,6 +93,7 @@ VIR_MIGRATE_PARAM_TLS_DESTINATION, VIR_TYPED_PARAM_STRING, \ VIR_MIGRATE_PARAM_DISKS_URI, VIR_TYPED_PARAM_STRING, \ VIR_MIGRATE_PARAM_BANDWIDTH_AVAIL_SWITCHOVER, VIR_TYPED_PARAM_ULLONG, \ + VIR_MIGRATE_PARAM_FD_SET, VIR_TYPED_PARAM_STRING, \ NULL =20 =20 @@ -166,6 +167,7 @@ qemuMigrationDstPrepareDirect(virQEMUDriver *driver, const char **migrate_disks, int nbdPort, const char *nbdURI, + const char *fdset, qemuMigrationParams *migParams, unsigned int flags); =20 @@ -183,6 +185,7 @@ qemuMigrationSrcPerform(virQEMUDriver *driver, const char **migrate_disks_detect_zeroes, int nbdPort, const char *nbdURI, + const char *fdset, qemuMigrationParams *migParams, const char *cookiein, int cookieinlen, --=20 2.43.7