From nobody Mon Feb 9 02:08:37 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1665655919; cv=pass; d=zohomail.com; s=zohoarc; b=BSrAg8aev/50jDPzDjVVNyzsaBnTYpfrRQjF7fP2VyOkKxMM4HDMBzlIeVJcLDFk6j+dEHVYjxg38Bb75wTRzct70rNkZVJLlJUF4p/RC3cLQBLiXFZFTZZTb2C2oVwYbPwPuIAWGFuAa8dmtpH1F2rtlXFqOcH0JJXtGu63Z6Q= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1665655919; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=bV9wrn2ZNFyUxTphZO2ecIz35cNR6OWMtpYLx3aL51c=; b=fE1RHDivjJFgpsqurUdKfBiD7/n+z2x49O2ETqWsU8Tae15dLZGu0DnmcMpvJTz2in9pp/PM2t53OGL5IPJBy3Ewz51DwB8y9X1vVR8bZTuCsQpXnKQkMGh8+KXFxtPa1c++IUOPtiopMVUebY5+tZKeMUh6TfajpDDUarj0hm4= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1665655919501892.9293925206225; Thu, 13 Oct 2022 03:11:59 -0700 (PDT) Received: from localhost ([::1]:60892 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oivC2-0003Fa-2n for importer@patchew.org; Thu, 13 Oct 2022 06:11:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56586) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oiuRL-0001zk-Bz for qemu-devel@nongnu.org; Thu, 13 Oct 2022 05:23:44 -0400 Received: from mail-eopbgr140123.outbound.protection.outlook.com ([40.107.14.123]:28929 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oiuRI-0004g6-Oy for qemu-devel@nongnu.org; Thu, 13 Oct 2022 05:23:42 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by AM8PR08MB6466.eurprd08.prod.outlook.com (2603:10a6:20b:363::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5709.21; Thu, 13 Oct 2022 09:23:35 +0000 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b]) by AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b%8]) with mapi id 15.20.5676.040; Thu, 13 Oct 2022 09:23:35 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YbHKGp5kmXNjdnmi5M4/pSeWEKpgukQjnBp6I8eB5F1fs/CDp7bnIZc58kKJWrKsVUHFUBGMsb+/HZh7XD3xgmbF0hmbUKzcenNIO/a5zXe0uLx8YM2DOEWBNqc8lbAM/AXbY4wLfjaGffX21amJRgWyWHZjQqfYHYtpgn6dc5D3eFumcFpceVvBSn2SicZnYgkwFdvpe1CLgHp99WpDXAw117fFbjLCTh+wSIOuvDorszbgJ5+HzlB7DRoX5jfKf79QgqHbxQs+F9nmYEgk8LZ+9xdGlBKFNVx81uH9UhtBtmjX0rGPN3Q6tkc1iaF7NqCs+XKgV5x6/klUSIHl3w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=bV9wrn2ZNFyUxTphZO2ecIz35cNR6OWMtpYLx3aL51c=; b=oM1FPvy1uhRL0eetadC1jmXnD5y5eEDLJ8i/3nvPXtSR/ttHk9Muwoj8doYQ7zf8EBwyUDLWJ+WiCsDGCxhhlaE7dqErVvx9lRlJV0vOqo6lxp7u6AYRGsGnrs8MJMGj/BBttPomQfflbE42n5Q0Bs6uh5dKkWzHAHg+FLOgsZGYLNJ7SRORLiwBnNKj8fmVJmRZmMct7uWluqw/4dT3teHer++Nhnyvoni1XIwSLFYug6UzNEniwAZQusRW8ZAOd2BV0Yn6zyWiplgw8aKauk4IMsydvcBwxPfoF0wd8iNzu0FMnth2FW0USiFXZjF1U0YtFrakY8XCWS0oZVO5NA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bV9wrn2ZNFyUxTphZO2ecIz35cNR6OWMtpYLx3aL51c=; b=0JvP/Ar/5YFj/QIj6gY8+6YQn2+uPl1d4IPi2sTrXtUl+pY2fOVS9dLRO+2fTelx5KJuJKatwU/YSD9la9dI7arvRFeCorYZOVuMwkTAIzjYqFZdfkZJo/NXMKBimpD+s14H9tgjzAOmbAyklbzGNR+hcwY2qx84NeSxpzRYPRx+00j3QV0TkCX7KNp3WJmb0KMDbdzSTeOE6qFksS0j6NWIUz+v0vRMIXnAlwVvxPVRtBcqQiTx37FBVVcgjlbUpClFeNI9P0zwr1FT9b4p4j8ELlRa5gtIo7ThSbvDiTeZ6/5HiY15vK129QRJs3/G2YYA45zvrxNJG/hoCnpjBQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Alexander Ivanov To: qemu-devel@nongnu.org Cc: den@virtuozzo.com, michael.roth@amd.com, kkostiuk@redhat.com, marcandre.lureau@gmail.com Subject: [PATCH v4 1/7] qga: Add initial FreeBSD support Date: Thu, 13 Oct 2022 11:23:20 +0200 Message-Id: <20221013092326.2194646-2-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221013092326.2194646-1-alexander.ivanov@virtuozzo.com> References: <20221013092326.2194646-1-alexander.ivanov@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR0P281CA0069.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:49::22) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|AM8PR08MB6466:EE_ X-MS-Office365-Filtering-Correlation-Id: 13baa343-8ad9-4aa9-4584-08daacfc9a65 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: A1SK7ClPiew7qosc0yt7sy2BiD4CHVhRdbXWSjaDsbPe0iUyUNLhISja51k97sMLLcV7bPqEuSRr4T9kfakUbI4bUF/GS79vw3orh8R8yxy/266VZYIb4RZHUxvsRRFf73dsFf6MEGgPAndzPSpK4y1HEGqIKZyha4UXEQJN/gszH9FsPqdWr/MUaRajCElqfgCWM9unWvy+eBS0lN9lNE+iNt5XB0Yubv+Rv5HqezbC8bWKdn1mSZJtMLRcZsfCnOxhzw+ChxkBKHZRyhDcoByOPD+oCCzfuW022lqRRGggcVsuzClwB8fKNW2euk6IikXNVrL4tcbh5m/SmeG9NF2pJ3tdLpoW7RMZtzSkT4SDLR2VpqPvsXokY8E8vHw4xCNrzmo5XhvgWtp69pCFyd0BMtBbWtGN+ZHtfsZ5+/sqy/QHDaxCx+Ur0OpyE+ZBbV75S02PyLO7Tr2k9BvTTO8Nbw3q79gtyTuDg7O+gNlCtBKR6bwSZvJc2NxyJJJLE+uWzY+jRh7Gd0At7rnc1gvRh8gzd1fNYW2PbOaWY7CDljZsuLIaL+e2Oi76AldRDO0dccmee/yIPFNeY4fpTqYUYL8de0k1E3MArshvc+8csz9WWd8Ds56hMctB1Wbxd8c9zZzoAOyKEVLzYvnQ0JaChM0EsHxSGB3QOI1Nz6k/o8ntbacw0hQqHjp0NUPL0CQdFT1fVpgryzBfecZZ1bgk70ofAEQxylTnO2eB4pi7bUEQOYkrUZF64Ntb/cqbAOHypf4hi/+AALL0YRsEDg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR08MB7095.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(366004)(376002)(346002)(136003)(39850400004)(396003)(451199015)(36756003)(2906002)(44832011)(4326008)(6512007)(5660300002)(41300700001)(8676002)(66556008)(316002)(86362001)(6916009)(66946007)(66476007)(8936002)(38100700002)(478600001)(6486002)(6666004)(38350700002)(83380400001)(26005)(6506007)(52116002)(2616005)(186003)(1076003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NFcwUWxmZXM2dFJjVEN2M2F2M1RKUGptQW5xSlU3azVnSkl1NnRyVXVnN1RY?= =?utf-8?B?em1TVVZVL082MElBSGF1Q1loUW1uQktBSDg1UFhxYzZoVmcvQ1BJTW1CUFgy?= =?utf-8?B?VGsxanhObDRtNTRuOUlpMk1QdU9qZ3dUYWRUdWlUSWlGbXdwczBkS2hvT3Bj?= =?utf-8?B?RFFiU25mWmRPMnEvaVJRQXdIQ2x1aDA0MXZxNUZFMGFnMFIrbllEajh4NWUw?= =?utf-8?B?dGhkRVpYdHlXd2dzTVBIUS9pOUI1dDE2a0UrcUZKTzNEb0hFSjFVcCtzTzVo?= =?utf-8?B?RlJ1eG04Szl5eCsybldqcHVuQjdhYXo5aW4wbENLRFBsSWFubHlOc1BXWDJG?= =?utf-8?B?Z1FnSkFPK2I1aDJVckhhYUhkTE5tZDVxU2pybFA1bjZ0ZlBNWC85cWV3bE1y?= =?utf-8?B?b0x0WDE1ZFlDblR0WFJzYlJ2Z0RPY2tZdEkvVmM1M3BkOFdLclhVZExHTjg2?= =?utf-8?B?L1lLcXZIQVlRQVZPQjF3bGRoNWdhRXd0K254SnZoV1JUd1RHRmx4QUo0SXVR?= =?utf-8?B?VkZ3WVBwQllVeXVZVFJSajk5cHI3U2NNN2Rreng4dVFKajdMdVFUU1I5eTJa?= =?utf-8?B?RnZoWmhRT2FuNVFWZ1Q5bWY2Y2sxMzBRd0dnY0pOMFVaLy80RWlpbVJYaTVn?= =?utf-8?B?MWMwbUZ6YmNOU2xjMEdZYXBvUkZOaitEbG5KVVRUcjRnRGxUS3l1TFJWVDlS?= =?utf-8?B?S240Mk1oN2N1bHZrNngwNENtTDVEQkoycVVwK3ROeXJnWklCcWpDSDdldTB3?= =?utf-8?B?Z2xaNmNMZzltbVdDQkM2cXdQRmRzWjFBZVlsYk0ycmU2VjJMTnZnMnNkU1Zj?= =?utf-8?B?UjRmZG5LYU1WSFA2MUpWS1E5bGlGdFE4cENHakI5NDYzZWZ1Sysxc0Zxdkxv?= =?utf-8?B?eERIR1JBbktKd05CRE41dlhOdkpQTFdqeDVYZjF4SEdjZ3BBVVVndkNONXVs?= =?utf-8?B?SnBJUVJqVCtmNkhnc3RPQzJCUWh4cGFMZ0FNc2VmRGNzQmkvMWppQlhRbTlD?= =?utf-8?B?UUdBZUlYM25RMzdvejlGWGxyUDdoZ2U5WnpGNXovVDA5YzU4dkNKZkg1ZlZu?= =?utf-8?B?UG5IaGJPdzhtRURlYUZ3TzhyampsSEJjQ1RyU2lkTVBYL3Z2VE5rWHk4V2Rz?= =?utf-8?B?VlNrbkhiTVhXalZYNzdCd01iMElZaXp1RlZKaVdtUUZ2ZDlMelZ2dDdjUCtK?= =?utf-8?B?aHFzYnd2b0E1cS9Jc0l5UUhrU3BEY2JNd1J4SXFFUnpESVlReDFnbEhtcEJo?= =?utf-8?B?SGpibEFYNUJOWHJYK2lGb2RoSzJVRkZVaW5iYkhRTHVRNEdVSEdpVUtycTBO?= =?utf-8?B?Vmx5Qk1nSWJodWQ1WFFhZXd0dEhLR3dLNVcyWHZYVTY5a3VJa2VDaEp2SlJs?= =?utf-8?B?bDZtVTZvUXQydEdyUU1mMHFJV1lPN3JJVjhOUUJkN1lBeTZHa21wSUhXc2tu?= =?utf-8?B?YXBYZ0h5S2N6bmlPcytXbDRRV1JobGxESEQ5N3pXWXpLNVdEZ3l4UzZqMjFV?= =?utf-8?B?RkZENkJ1bFdUZ2E1bGtaOUVqREJtb0tzSysrWmVkQVVMekVweDFBQW9iSnZU?= =?utf-8?B?RmZUN0VYZ3dyYlh2Q25BQ2RJTjBHL2s0UFZDcXIxTklwK2JuUHV4R1lWQVdH?= =?utf-8?B?Yk5TWE9uMDMyOEMrdXhTNDBna3Q5NWxLL2Z6TWlkVkVoYlM2UU9Jd0FWTzhh?= =?utf-8?B?UHp2dnpLRnJESGVZUk9qRjEzWWJlOWY4dWlxSGlJUHE4YWphRk5hbnZ1OWV4?= =?utf-8?B?aHNnVzZtTHVQYzBubHVIcjRhaUhlbGl2MkNwUDRJZzhjM0MwM3BHcjNOR3dm?= =?utf-8?B?ZDlvVlhCZjJqeVR0SkRmbnhhdVZVU1B3NmIxdFEwZHRzUkRIRFMzK0RxNmh3?= =?utf-8?B?WG5Ub3c1cGdzNktnb1gvQngrRXh0TGV0d1JpSm1xS0FmV3hvaXdxdnBCUE9x?= =?utf-8?B?WXk1eGZSelpxMUdmRHZZQVRNVXFlUVJvZ3pjdlQvd1F3VXFmUGxEZGlwS3Nw?= =?utf-8?B?Q0tkODE5VkhVOXNaTERCalAvYjdkMjhMZ05TM0tTZmFtRkkyV3c5UW1xbkFk?= =?utf-8?B?dnhzK0JkTDBKVjhrZmFud0Jzbkg0clZ3WC9pbjYyR1o2RVM0WmlOWHFabkFz?= =?utf-8?B?dVhIb1dEa29ic1FlVU9BVVlpNzZhYmxJK2dKeHRXUjlrdC9mWE82eG1Qdm1w?= =?utf-8?Q?Ky4YHxDVr8xPV0eKXJMBIBc=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 13baa343-8ad9-4aa9-4584-08daacfc9a65 X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Oct 2022 09:23:35.1861 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: FRA1xlHAlD9/B0NRcPUfdQ+W7DmRaUgjBki/x2q+u/8n74do2HkDfratMte7gPcIhiLpIr8eI4H0ZZ20HLVppaJySxOHG7eGnSURpmpZkjs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6466 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.14.123; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR01-VE1-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) X-ZM-MESSAGEID: 1665655921333100001 - Fix device path. - Fix virtio-serial channel initialization. - Make the code buildable in FreeBSD. Reviewed-by: Konstantin Kostiuk Acked-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Alexander Ivanov --- meson.build | 2 +- qga/channel-posix.c | 19 +++++++++++++++++++ qga/commands-posix.c | 8 ++++++++ qga/main.c | 6 +++++- 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/meson.build b/meson.build index b686dfef75..71fe72ea06 100644 --- a/meson.build +++ b/meson.build @@ -75,7 +75,7 @@ have_tools =3D get_option('tools') \ .allowed() have_ga =3D get_option('guest_agent') \ .disable_auto_if(not have_system and not have_tools) \ - .require(targetos in ['sunos', 'linux', 'windows'], + .require(targetos in ['sunos', 'linux', 'windows', 'freebsd'], error_message: 'unsupported OS for QEMU guest agent') \ .allowed() have_block =3D have_system or have_tools diff --git a/qga/channel-posix.c b/qga/channel-posix.c index 6796a02cff..568350ded4 100644 --- a/qga/channel-posix.c +++ b/qga/channel-posix.c @@ -149,6 +149,25 @@ static gboolean ga_channel_open(GAChannel *c, const gc= har *path, return false; } #endif +#ifdef __FreeBSD__ + /* + * In the default state channel sends echo of every command to a + * client. The client programm doesn't expect this and raises an + * error. Suppress echo by resetting ECHO terminal flag. + */ + struct termios tio; + if (tcgetattr(fd, &tio) < 0) { + error_setg_errno(errp, errno, "error getting channel termios a= ttrs"); + close(fd); + return false; + } + tio.c_lflag &=3D ~ECHO; + if (tcsetattr(fd, TCSAFLUSH, &tio) < 0) { + error_setg_errno(errp, errno, "error setting channel termios a= ttrs"); + close(fd); + return false; + } +#endif /* __FreeBSD__ */ ret =3D ga_channel_client_add(c, fd); if (ret) { error_setg(errp, "error adding channel to main loop"); diff --git a/qga/commands-posix.c b/qga/commands-posix.c index eea819cff0..16d67e9f6d 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -51,6 +51,14 @@ #endif #endif =20 +#ifdef __FreeBSD__ +/* + * The code under HAVE_GETIFADDRS condition can't be compiled in FreeBSD. + * Fix it in one of the following patches. + */ +#undef HAVE_GETIFADDRS +#endif + #ifdef HAVE_GETIFADDRS #include #include diff --git a/qga/main.c b/qga/main.c index 5a9d8252e0..0d27c97d38 100644 --- a/qga/main.c +++ b/qga/main.c @@ -45,9 +45,13 @@ #endif =20 #ifndef _WIN32 +#ifdef __FreeBSD__ +#define QGA_VIRTIO_PATH_DEFAULT "/dev/vtcon/org.qemu.guest_agent.0" +#else /* __FreeBSD__ */ #define QGA_VIRTIO_PATH_DEFAULT "/dev/virtio-ports/org.qemu.guest_agent.0" -#define QGA_STATE_RELATIVE_DIR "run" +#endif /* __FreeBSD__ */ #define QGA_SERIAL_PATH_DEFAULT "/dev/ttyS0" +#define QGA_STATE_RELATIVE_DIR "run" #else #define QGA_VIRTIO_PATH_DEFAULT "\\\\.\\Global\\org.qemu.guest_agent.0" #define QGA_STATE_RELATIVE_DIR "qemu-ga" --=20 2.34.1 From nobody Mon Feb 9 02:08:37 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1665655432; cv=pass; d=zohomail.com; s=zohoarc; b=Iiy26YJLcdv5oBrkoyYiS9DUuKOBO77/UsIaTO8SKpG+XQRWgs60xRHZUKvr4CVz0PKvT1hOIoBtFuA5GHwCvMv3nW/i09GiEyQAqw7RKvnQ/ZSZGsKLdDs1wht7JNV0XnVdQ4csYdbR7umwlOIeRBbKn9+2eXJYspq5Jglkdvo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1665655432; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=u15BCkbSjlZVJHbXgI4URmaqBqsXo8JWEDlk0o/JTJc=; b=EIVOU8CFdDlOayWzO5bjfwmQaBeW8oHx+01DWkfzQZF9pLoD75QomIFrqC2zO2d1ZxnXux9aqKpAtoRs0RJtuxR48eV340zJMPIXYLPa1Vq9poSRT7ENyJLjC0F+CgIm7qt2BRfEGxq9+SVRoQ3AuB75FBC/+qVvz+FKYF929Sw= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1665655432860352.9578964661099; Thu, 13 Oct 2022 03:03:52 -0700 (PDT) Received: from localhost ([::1]:52956 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oiv4B-0004VA-8S for importer@patchew.org; Thu, 13 Oct 2022 06:03:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34348) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oiuRO-000270-1I for qemu-devel@nongnu.org; Thu, 13 Oct 2022 05:23:46 -0400 Received: from mail-eopbgr140123.outbound.protection.outlook.com ([40.107.14.123]:28929 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oiuRL-0004g6-5i for qemu-devel@nongnu.org; Thu, 13 Oct 2022 05:23:45 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by AM8PR08MB6466.eurprd08.prod.outlook.com (2603:10a6:20b:363::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5709.21; Thu, 13 Oct 2022 09:23:36 +0000 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b]) by AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b%8]) with mapi id 15.20.5676.040; Thu, 13 Oct 2022 09:23:36 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Vyv132ViO3qbhG//xK6vKxKPgFNxdaryWXZdUQEINBUP9vITlJQEhVeruOxBAZuw63s9ze2YBdKeMOMRByBZO4Ie20W7dz/oytiWdmRqe0QLCRracRdzsvAFz10geM7zCCZUj4iO8ORvxge4uh+UIFdZZLlDvUwzfxz1jCrvLg6O5yGKAIfqtppGAZc/R4dPh8+QuIYLp3pQqHtiTMh7nKcnCKHq6Ge3LVEnZK64rPa/IG5hzkpK2wGcmJG+iVBqORouy4AUskUQepJ6P3o9EuzNNTr//0oe8eGWpFli4YTeH8+uJ6ncsMmqU/c1E5cl8/d3hJs6uFfJObp9a8Hucg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=u15BCkbSjlZVJHbXgI4URmaqBqsXo8JWEDlk0o/JTJc=; b=GGa7vNC2XHQdcu9QZ/ZnOELmjgTyV8QcKTdMfcxfFtBQVe6NM0knmqgVwHUijr87KRSCvpyxQZFHYe8goGuy+bIAOFNyDNA/lEx0I4I2I9OFAQPyt5lfrMtCdrbDpU5HQkcrezMnt4xfCCcXrKfesUXVjyls7TxiO/9MRYgrorTDZYq7TcM9VzsXQL8+77Ny9GpqWiZXTQ5OcIsNZUTRgvNVQkPRHX9VTyC/fu0bPn1kTiY/HOU5+tS6XH1qfpKEeHsI8cjjbgPkM1Ezei6CdgM5bhsV0uO9oSqbefDEmjzZiJiqwpLwuv7r3RhTtSI49JpZRv1QQrDdoJMI67jxFA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=u15BCkbSjlZVJHbXgI4URmaqBqsXo8JWEDlk0o/JTJc=; b=CTqKb1N13QSLEVUHQGk3BmQpA/NLX2gBbSvPWq9JH8bfoir9qbacANgdVyiL+fJHuqKRhDHU/FiYY3h8DTBofcgRwDq9N6lloSpfPlOBWvUcYO2s61qBNJARv9upEnrMJfCsDC2N3jr8nuXoIpJ6xfOcvN+wAK3WkDQDmquOaUs2xHinvVdmfqE8s49MfmUB4Wx0syBzMkTZkndv/8UP+1Ftg9QVrzKESHZtyNw4b+jmsATrrbaVmf1Ip8Cyb8VA3kcmsACsQ7ICBK5ERawqZjEZbcOYYHQL5i+IhXhB/0PwszngwT2pOpJouW61tQm+x1DEMYn1uZNkYXxSV0mUsA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Alexander Ivanov To: qemu-devel@nongnu.org Cc: den@virtuozzo.com, michael.roth@amd.com, kkostiuk@redhat.com, marcandre.lureau@gmail.com Subject: [PATCH v4 2/7] qga: Move Linux-specific FS freeze/thaw code to a separate file Date: Thu, 13 Oct 2022 11:23:21 +0200 Message-Id: <20221013092326.2194646-3-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221013092326.2194646-1-alexander.ivanov@virtuozzo.com> References: <20221013092326.2194646-1-alexander.ivanov@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR0P281CA0069.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:49::22) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|AM8PR08MB6466:EE_ X-MS-Office365-Filtering-Correlation-Id: f8d7b00b-39eb-47bf-0281-08daacfc9b4a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Gs3U4cr4oBS9jIfXtyMl/Yq1g0hAP9C4r3bHr7mGxltqNWYO8HMWWPMXzEghz8EHkn0KjV/IDCJdgcxi+XgVMml4lUVCk1ImaugQcUPF/2tt9HNI5sgKUFKkbpgR1uwex/6d3puVLZfNObIbcu+JI+SxQqdejQMdz5yDli/yBxyP5brzEHt2Qg7R/41T2Nt1jN3ZCX5mKcSK5kkfpIgZke4VQaQnDRbfLO1buuC754jzUn1GhHzEiT18CTilYgI4TrAFZ8eCjqflNRDiDCiKyjkyRqKU+fdQqQSIShlFKWQ+wUOZbGOlm831hP4JDR7esZOJmvuifLjovtSLeG9gmq8dxAtD1JAneOsXSmzZW6UC+5FoS1LJQO3DZpNh+sQaIV0Mrzx7mow03xupYAKOKLsOR/r/TKfSV7+BwWoPKsi1UhpRVsZge/QoLBq6A3MYUy2LAtrDBmz1qYSpSCwHc+UufSnJehAjf6GlAHKZkTY0/hKN9Nudg7GwcpOM5TqjmfDFaOr8/8gMjS3wUK4SWqTBx96tgnnaa1Z6cU0TTsEI0T2krXRlp0fxa/IfCSJ3v/WngE49qRMIpbELnZGnkqYj7UJ2bF/cgTz2nnOQL9ZnjfeW2oT3J+zp6GftQ1z4j3IXZ/mnefBnUDe8wAtGpmekJcbM6IqapG//My48y1ulOgEQW9cYGVwxUMtE+xe3izD1jl59IcWQP58FcfKDYl2gzpIdfoVL2DUXn8kuzRDvOEuhnD6eoM3b+98c3Qs/8/rRx2POoi4Obc1kkWk4tQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR08MB7095.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(366004)(376002)(346002)(136003)(39850400004)(396003)(451199015)(36756003)(2906002)(44832011)(4326008)(30864003)(6512007)(5660300002)(41300700001)(8676002)(66556008)(316002)(86362001)(6916009)(66946007)(66476007)(8936002)(38100700002)(478600001)(6486002)(6666004)(38350700002)(83380400001)(26005)(6506007)(52116002)(2616005)(186003)(1076003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a2p6TGVDcm1aY0ExN3hEazJWWVlleVdoYmV6R0RMSWtlcmFZMkFqbHdUYi9F?= =?utf-8?B?dDdpTXFPMWFZZmp0QkxjVWhqSkpURFB6NCsvZTNXdlpFZDlnVmFJcmI3b3dM?= =?utf-8?B?SjZZNlIxeEduazJwOTY1Ymo3Z0FYOGY1VGZHSDdoUlhKb1NIcTFWRFVpR05B?= =?utf-8?B?SWVBeG1NSzRVRkhoNk5ZcnlXcDQ5YktIYTVOaWVBMlJPR290Vkk0djdPTjR0?= =?utf-8?B?S3VhcExxZkxVUDJraU80bGgrWm1jWittSUlJK1hkUm55M0xEcmNJZGk2azM3?= =?utf-8?B?OCtaZ055OGljb0d2UjFEcDU4dnJOSlBzOGpmRll3MGkvb2oxT0gyTFhMUkdR?= =?utf-8?B?QVR4d01OUkZXdVQ0K0x4S1k0YXNJVk1IZzFESDVxNDdaT3NFTUVpRGxJRkZi?= =?utf-8?B?WU9iRjZHeFdZKzA0NDMxVUhSUzVUamF6a2JnY01UNzVHNmxFdE5nUmdnVmIx?= =?utf-8?B?WnZJUzFXc1ppNEdZdGRmcUhOcUFJK3R4ZDFKRkp3ckJ5eDBOdWNYOXJxcmpt?= =?utf-8?B?UEFHZkM1RFJla21nZU01aEgxdksyTkpmMWh6Nk56STdBMUhZM21WdnhDN3R5?= =?utf-8?B?Z2lzekJRVWxwSDJGRXZVb1ZaQnRmdnViQS9rc3Z6Vk5yRlFlY3JYUnBxN2ZL?= =?utf-8?B?N1VLUFIzdU5GdWRwV2Z3dlk2QnZoZFVPcEF6SjRSWk5OaEw3ZkNTNyt6Z0dr?= =?utf-8?B?RXpGaVVhZVI5WUFUcXRnQTMzc0dMKzVwNW1GeHhVbVBsdUNIZXBEcWpDMzMw?= =?utf-8?B?TjhrTGxGTlNwTERqZzhWY0NEZE5ab1FsOU1jeUdXQWJlUU9xTWxoY3h0UUQz?= =?utf-8?B?dk1BQWNkOTZwMU9MU2NxdVVFamdwTnZWZG1EQ2IybGRMZzVhS20rclNxbmgz?= =?utf-8?B?cFZxQS9UT0xkRmg2SXVFNjhuRml4UU13bUtxWTM1ME1hT1Q3dDhJWGI5OUMx?= =?utf-8?B?eGxjT0FrTHhtWUFGajk5RlVTb1lmbEpveURvMVQ5U25xaG5CbGJhU1grdlJi?= =?utf-8?B?a1ZyNVF4NDVubUY5dmpjQkFFNkQvWXJXa2hIaDJ4dkk3QkY0Z2tkdnh2YklP?= =?utf-8?B?NUtXL2JhcXA0Y1greE9hMGxTT0k0N1RlWDUvRVBoN0pmMjRXc1FEQnFmZi85?= =?utf-8?B?QkpuaTRydnpvQWZQWUNwaS9xYjh3c3BwWmtVSndkTlgxS2FFYUpCeXI4a2lq?= =?utf-8?B?bDZBZkg3c2VJN0ZuQStQbDR6L1B4b1lBYmZzQVdIMzNMTnBOQVRRUmRWY0pL?= =?utf-8?B?REpWc0EyaG4yWnhNOUFvdFBhRC9ta1M4SXB2WWFycEd0cXZIQnJRVTd5b05a?= =?utf-8?B?ZHVjREZiZDVWNjJ5Q3BrdDRFU2o2VGlTSXBYR25SUEFjK2x5T1lxM2VXSzJQ?= =?utf-8?B?N2VsRlU2Tk1ibTFTblRaTW9STGlOeThOM2hrZVVUZ1F4cmZrS1MveWZVUzdl?= =?utf-8?B?VVYxNHpCSGlSN2NJNXhzZTduOHpCS3VOZExhc1kzZDhLMXRaOVQrMFNHc3FK?= =?utf-8?B?aUtuR1ZPS3JRWTdRZHEyWUQyQkJ6TmpPdlc3dStEMm1URWpHVjRrelNtSXdY?= =?utf-8?B?U1E0NlVnM2VXcUY2QWRsanJsaHRtQThnN2tvRUNNQ0Nyc0J0U0c3YWQzM0Yz?= =?utf-8?B?TlcyTVJBbWNOSUc2K0h0UmJuc3dRUTc1T2xSZHlWeGw1eTlCblJsNWx2SFpG?= =?utf-8?B?V21RTEVONjQrNWI3WDc3QjlQMloyaUFIOHNYOE5YQ09NdDZGQkwyc0lLdFJJ?= =?utf-8?B?aTE3YkxjMFZMbWdJdFY3eWpPQmlFZE92VWZkVm1SSmZzMlE4ckUrQy9uaVVn?= =?utf-8?B?WHJaaVh5OVE0ekJkejdNekdzNVNaUWc4YmkvVFIxY215Y1I0NnIrM09rcmZw?= =?utf-8?B?azRSTU1xWTh6ZUdiSVNtSFNZc0d1TWl2ajJIOW5jTGN6OHFCK1hwSzVNaTMr?= =?utf-8?B?ZEM5WC9RYU1rTmNmSzhNZStDSnFzdEY4K1JZUWpIRllRcVhaUkJsTitGS2Jz?= =?utf-8?B?VmpCZDAxY0Yzb21jWG9SL2RuVzJmZ3VmOWFGUlpOSzlRcFNNbmVmLzJiOVpt?= =?utf-8?B?Z3pjR1Qxbm0xVnFoZHFVT05NQWlBZFp6OG9PKy9CSkNkcHdIdWZQNmdaRFBP?= =?utf-8?B?Qy9mRzk1SFpieURVUkJSWEM5aFVCMUI3RmRRaktjVS9VZEd0Y2psZmNRMXFq?= =?utf-8?Q?42eE2kqcXPo35X3L+S7nvrg=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: f8d7b00b-39eb-47bf-0281-08daacfc9b4a X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Oct 2022 09:23:36.5900 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: YklAPgVw67EL7J6Q7M2luHNHVuri1mxUG4XORivCr9d+4yUZ9x9t89NzpS61Iszv53wI3RREe9KmkHIVuM4hiC9ZJvSwu1TXfue2tcMd5lE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6466 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.14.123; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR01-VE1-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) X-ZM-MESSAGEID: 1665655434857100001 In the next patches we are going to add FreeBSD support for QEMU Guest Agent. In the result, code in commands-posix.c will be too cumbersome. Move Linux-specific FS freeze/thaw code to a separate file commands-linux.c keeping common POSIX code in commands-posix.c. Reviewed-by: Konstantin Kostiuk Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Alexander Ivanov --- qga/commands-common.h | 35 +++++ qga/commands-linux.c | 286 +++++++++++++++++++++++++++++++++++++++++ qga/commands-posix.c | 289 +++--------------------------------------- qga/meson.build | 3 + 4 files changed, 340 insertions(+), 273 deletions(-) create mode 100644 qga/commands-linux.c diff --git a/qga/commands-common.h b/qga/commands-common.h index d0e4a9696f..181fc330aa 100644 --- a/qga/commands-common.h +++ b/qga/commands-common.h @@ -10,6 +10,40 @@ #define QGA_COMMANDS_COMMON_H =20 #include "qga-qapi-types.h" +#include "guest-agent-core.h" +#include "qemu/queue.h" + +#if defined(__linux__) +#include +#ifdef FIFREEZE +#define CONFIG_FSFREEZE +#endif +#ifdef FITRIM +#define CONFIG_FSTRIM +#endif +#endif /* __linux__ */ + +#if defined(CONFIG_FSFREEZE) || defined(CONFIG_FSTRIM) +typedef struct FsMount { + char *dirname; + char *devtype; + unsigned int devmajor, devminor; + QTAILQ_ENTRY(FsMount) next; +} FsMount; + +typedef QTAILQ_HEAD(FsMountList, FsMount) FsMountList; + +bool build_fs_mount_list(FsMountList *mounts, Error **errp); +void free_fs_mount_list(FsMountList *mounts); +#endif /* CONFIG_FSFREEZE || CONFIG_FSTRIM */ + +#if defined(CONFIG_FSFREEZE) +int64_t qmp_guest_fsfreeze_do_freeze_list(bool has_mountpoints, + strList *mountpoints, + FsMountList mounts, + Error **errp); +int qmp_guest_fsfreeze_do_thaw(Error **errp); +#endif /* CONFIG_FSFREEZE */ =20 typedef struct GuestFileHandle GuestFileHandle; =20 @@ -29,4 +63,5 @@ GuestFileRead *guest_file_read_unsafe(GuestFileHandle *gf= h, */ char *qga_get_host_name(Error **errp); =20 +void ga_wait_child(pid_t pid, int *status, Error **errp); #endif diff --git a/qga/commands-linux.c b/qga/commands-linux.c new file mode 100644 index 0000000000..214e408fcd --- /dev/null +++ b/qga/commands-linux.c @@ -0,0 +1,286 @@ +/* + * QEMU Guest Agent Linux-specific command implementations + * + * Copyright IBM Corp. 2011 + * + * Authors: + * Michael Roth + * Michal Privoznik + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "commands-common.h" +#include "cutils.h" +#include +#include + +#if defined(CONFIG_FSFREEZE) || defined(CONFIG_FSTRIM) +static int dev_major_minor(const char *devpath, + unsigned int *devmajor, unsigned int *devminor) +{ + struct stat st; + + *devmajor =3D 0; + *devminor =3D 0; + + if (stat(devpath, &st) < 0) { + slog("failed to stat device file '%s': %s", devpath, strerror(errn= o)); + return -1; + } + if (S_ISDIR(st.st_mode)) { + /* It is bind mount */ + return -2; + } + if (S_ISBLK(st.st_mode)) { + *devmajor =3D major(st.st_rdev); + *devminor =3D minor(st.st_rdev); + return 0; + } + return -1; +} + +static bool build_fs_mount_list_from_mtab(FsMountList *mounts, Error **err= p) +{ + struct mntent *ment; + FsMount *mount; + char const *mtab =3D "/proc/self/mounts"; + FILE *fp; + unsigned int devmajor, devminor; + + fp =3D setmntent(mtab, "r"); + if (!fp) { + error_setg(errp, "failed to open mtab file: '%s'", mtab); + return false; + } + + while ((ment =3D getmntent(fp))) { + /* + * An entry which device name doesn't start with a '/' is + * either a dummy file system or a network file system. + * Add special handling for smbfs and cifs as is done by + * coreutils as well. + */ + if ((ment->mnt_fsname[0] !=3D '/') || + (strcmp(ment->mnt_type, "smbfs") =3D=3D 0) || + (strcmp(ment->mnt_type, "cifs") =3D=3D 0)) { + continue; + } + if (dev_major_minor(ment->mnt_fsname, &devmajor, &devminor) =3D=3D= -2) { + /* Skip bind mounts */ + continue; + } + + mount =3D g_new0(FsMount, 1); + mount->dirname =3D g_strdup(ment->mnt_dir); + mount->devtype =3D g_strdup(ment->mnt_type); + mount->devmajor =3D devmajor; + mount->devminor =3D devminor; + + QTAILQ_INSERT_TAIL(mounts, mount, next); + } + + endmntent(fp); + return true; +} + +static void decode_mntname(char *name, int len) +{ + int i, j =3D 0; + for (i =3D 0; i <=3D len; i++) { + if (name[i] !=3D '\\') { + name[j++] =3D name[i]; + } else if (name[i + 1] =3D=3D '\\') { + name[j++] =3D '\\'; + i++; + } else if (name[i + 1] >=3D '0' && name[i + 1] <=3D '3' && + name[i + 2] >=3D '0' && name[i + 2] <=3D '7' && + name[i + 3] >=3D '0' && name[i + 3] <=3D '7') { + name[j++] =3D (name[i + 1] - '0') * 64 + + (name[i + 2] - '0') * 8 + + (name[i + 3] - '0'); + i +=3D 3; + } else { + name[j++] =3D name[i]; + } + } +} + +/* + * Walk the mount table and build a list of local file systems + */ +bool build_fs_mount_list(FsMountList *mounts, Error **errp) +{ + FsMount *mount; + char const *mountinfo =3D "/proc/self/mountinfo"; + FILE *fp; + char *line =3D NULL, *dash; + size_t n; + char check; + unsigned int devmajor, devminor; + int ret, dir_s, dir_e, type_s, type_e, dev_s, dev_e; + + fp =3D fopen(mountinfo, "r"); + if (!fp) { + return build_fs_mount_list_from_mtab(mounts, errp); + } + + while (getline(&line, &n, fp) !=3D -1) { + ret =3D sscanf(line, "%*u %*u %u:%u %*s %n%*s%n%c", + &devmajor, &devminor, &dir_s, &dir_e, &check); + if (ret < 3) { + continue; + } + dash =3D strstr(line + dir_e, " - "); + if (!dash) { + continue; + } + ret =3D sscanf(dash, " - %n%*s%n %n%*s%n%c", + &type_s, &type_e, &dev_s, &dev_e, &check); + if (ret < 1) { + continue; + } + line[dir_e] =3D 0; + dash[type_e] =3D 0; + dash[dev_e] =3D 0; + decode_mntname(line + dir_s, dir_e - dir_s); + decode_mntname(dash + dev_s, dev_e - dev_s); + if (devmajor =3D=3D 0) { + /* btrfs reports major number =3D 0 */ + if (strcmp("btrfs", dash + type_s) !=3D 0 || + dev_major_minor(dash + dev_s, &devmajor, &devminor) < 0) { + continue; + } + } + + mount =3D g_new0(FsMount, 1); + mount->dirname =3D g_strdup(line + dir_s); + mount->devtype =3D g_strdup(dash + type_s); + mount->devmajor =3D devmajor; + mount->devminor =3D devminor; + + QTAILQ_INSERT_TAIL(mounts, mount, next); + } + free(line); + + fclose(fp); + return true; +} +#endif /* CONFIG_FSFREEZE || CONFIG_FSTRIM */ + +#ifdef CONFIG_FSFREEZE +/* + * Walk list of mounted file systems in the guest, and freeze the ones whi= ch + * are real local file systems. + */ +int64_t qmp_guest_fsfreeze_do_freeze_list(bool has_mountpoints, + strList *mountpoints, + FsMountList mounts, + Error **errp) +{ + struct FsMount *mount; + strList *list; + int fd, ret, i =3D 0; + + QTAILQ_FOREACH_REVERSE(mount, &mounts, next) { + /* To issue fsfreeze in the reverse order of mounts, check if the + * mount is listed in the list here */ + if (has_mountpoints) { + for (list =3D mountpoints; list; list =3D list->next) { + if (strcmp(list->value, mount->dirname) =3D=3D 0) { + break; + } + } + if (!list) { + continue; + } + } + + fd =3D qga_open_cloexec(mount->dirname, O_RDONLY, 0); + if (fd =3D=3D -1) { + error_setg_errno(errp, errno, "failed to open %s", mount->dirn= ame); + return -1; + } + + /* we try to cull filesystems we know won't work in advance, but o= ther + * filesystems may not implement fsfreeze for less obvious reasons. + * these will report EOPNOTSUPP. we simply ignore these when tally= ing + * the number of frozen filesystems. + * if a filesystem is mounted more than once (aka bind mount) a + * consecutive attempt to freeze an already frozen filesystem will + * return EBUSY. + * + * any other error means a failure to freeze a filesystem we + * expect to be freezable, so return an error in those cases + * and return system to thawed state. + */ + ret =3D ioctl(fd, FIFREEZE); + if (ret =3D=3D -1) { + if (errno !=3D EOPNOTSUPP && errno !=3D EBUSY) { + error_setg_errno(errp, errno, "failed to freeze %s", + mount->dirname); + close(fd); + return -1; + } + } else { + i++; + } + close(fd); + } + return i; +} + +int qmp_guest_fsfreeze_do_thaw(Error **errp) +{ + int ret; + FsMountList mounts; + FsMount *mount; + int fd, i =3D 0, logged; + Error *local_err =3D NULL; + + QTAILQ_INIT(&mounts); + if (!build_fs_mount_list(&mounts, &local_err)) { + error_propagate(errp, local_err); + return -1; + } + + QTAILQ_FOREACH(mount, &mounts, next) { + logged =3D false; + fd =3D qga_open_cloexec(mount->dirname, O_RDONLY, 0); + if (fd =3D=3D -1) { + continue; + } + /* we have no way of knowing whether a filesystem was actually unf= rozen + * as a result of a successful call to FITHAW, only that if an err= or + * was returned the filesystem was *not* unfrozen by that particul= ar + * call. + * + * since multiple preceding FIFREEZEs require multiple calls to FI= THAW + * to unfreeze, continuing issuing FITHAW until an error is return= ed, + * in which case either the filesystem is in an unfreezable state,= or, + * more likely, it was thawed previously (and remains so afterward= ). + * + * also, since the most recent successful call is the one that did + * the actual unfreeze, we can use this to provide an accurate cou= nt + * of the number of filesystems unfrozen by guest-fsfreeze-thaw, w= hich + * may * be useful for determining whether a filesystem was unfroz= en + * during the freeze/thaw phase by a process other than qemu-ga. + */ + do { + ret =3D ioctl(fd, FITHAW); + if (ret =3D=3D 0 && !logged) { + i++; + logged =3D true; + } + } while (ret =3D=3D 0); + close(fd); + } + + free_fs_mount_list(&mounts); + + return i; +} +#endif /* CONFIG_FSFREEZE */ diff --git a/qga/commands-posix.c b/qga/commands-posix.c index 16d67e9f6d..9574b83c92 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -16,11 +16,9 @@ #include #include #include -#include "guest-agent-core.h" #include "qga-qapi-commands.h" #include "qapi/error.h" #include "qapi/qmp/qerror.h" -#include "qemu/queue.h" #include "qemu/host-utils.h" #include "qemu/sockets.h" #include "qemu/base64.h" @@ -70,7 +68,7 @@ #endif #endif =20 -static void ga_wait_child(pid_t pid, int *status, Error **errp) +void ga_wait_child(pid_t pid, int *status, Error **errp) { pid_t rpid; =20 @@ -629,16 +627,7 @@ void qmp_guest_file_flush(int64_t handle, Error **errp) #if defined(__linux__) =20 #if defined(CONFIG_FSFREEZE) || defined(CONFIG_FSTRIM) -typedef struct FsMount { - char *dirname; - char *devtype; - unsigned int devmajor, devminor; - QTAILQ_ENTRY(FsMount) next; -} FsMount; - -typedef QTAILQ_HEAD(FsMountList, FsMount) FsMountList; - -static void free_fs_mount_list(FsMountList *mounts) +void free_fs_mount_list(FsMountList *mounts) { FsMount *mount, *temp; =20 @@ -653,157 +642,6 @@ static void free_fs_mount_list(FsMountList *mounts) g_free(mount); } } - -static int dev_major_minor(const char *devpath, - unsigned int *devmajor, unsigned int *devminor) -{ - struct stat st; - - *devmajor =3D 0; - *devminor =3D 0; - - if (stat(devpath, &st) < 0) { - slog("failed to stat device file '%s': %s", devpath, strerror(errn= o)); - return -1; - } - if (S_ISDIR(st.st_mode)) { - /* It is bind mount */ - return -2; - } - if (S_ISBLK(st.st_mode)) { - *devmajor =3D major(st.st_rdev); - *devminor =3D minor(st.st_rdev); - return 0; - } - return -1; -} - -/* - * Walk the mount table and build a list of local file systems - */ -static bool build_fs_mount_list_from_mtab(FsMountList *mounts, Error **err= p) -{ - struct mntent *ment; - FsMount *mount; - char const *mtab =3D "/proc/self/mounts"; - FILE *fp; - unsigned int devmajor, devminor; - - fp =3D setmntent(mtab, "r"); - if (!fp) { - error_setg(errp, "failed to open mtab file: '%s'", mtab); - return false; - } - - while ((ment =3D getmntent(fp))) { - /* - * An entry which device name doesn't start with a '/' is - * either a dummy file system or a network file system. - * Add special handling for smbfs and cifs as is done by - * coreutils as well. - */ - if ((ment->mnt_fsname[0] !=3D '/') || - (strcmp(ment->mnt_type, "smbfs") =3D=3D 0) || - (strcmp(ment->mnt_type, "cifs") =3D=3D 0)) { - continue; - } - if (dev_major_minor(ment->mnt_fsname, &devmajor, &devminor) =3D=3D= -2) { - /* Skip bind mounts */ - continue; - } - - mount =3D g_new0(FsMount, 1); - mount->dirname =3D g_strdup(ment->mnt_dir); - mount->devtype =3D g_strdup(ment->mnt_type); - mount->devmajor =3D devmajor; - mount->devminor =3D devminor; - - QTAILQ_INSERT_TAIL(mounts, mount, next); - } - - endmntent(fp); - return true; -} - -static void decode_mntname(char *name, int len) -{ - int i, j =3D 0; - for (i =3D 0; i <=3D len; i++) { - if (name[i] !=3D '\\') { - name[j++] =3D name[i]; - } else if (name[i + 1] =3D=3D '\\') { - name[j++] =3D '\\'; - i++; - } else if (name[i + 1] >=3D '0' && name[i + 1] <=3D '3' && - name[i + 2] >=3D '0' && name[i + 2] <=3D '7' && - name[i + 3] >=3D '0' && name[i + 3] <=3D '7') { - name[j++] =3D (name[i + 1] - '0') * 64 + - (name[i + 2] - '0') * 8 + - (name[i + 3] - '0'); - i +=3D 3; - } else { - name[j++] =3D name[i]; - } - } -} - -static bool build_fs_mount_list(FsMountList *mounts, Error **errp) -{ - FsMount *mount; - char const *mountinfo =3D "/proc/self/mountinfo"; - FILE *fp; - char *line =3D NULL, *dash; - size_t n; - char check; - unsigned int devmajor, devminor; - int ret, dir_s, dir_e, type_s, type_e, dev_s, dev_e; - - fp =3D fopen(mountinfo, "r"); - if (!fp) { - return build_fs_mount_list_from_mtab(mounts, errp); - } - - while (getline(&line, &n, fp) !=3D -1) { - ret =3D sscanf(line, "%*u %*u %u:%u %*s %n%*s%n%c", - &devmajor, &devminor, &dir_s, &dir_e, &check); - if (ret < 3) { - continue; - } - dash =3D strstr(line + dir_e, " - "); - if (!dash) { - continue; - } - ret =3D sscanf(dash, " - %n%*s%n %n%*s%n%c", - &type_s, &type_e, &dev_s, &dev_e, &check); - if (ret < 1) { - continue; - } - line[dir_e] =3D 0; - dash[type_e] =3D 0; - dash[dev_e] =3D 0; - decode_mntname(line + dir_s, dir_e - dir_s); - decode_mntname(dash + dev_s, dev_e - dev_s); - if (devmajor =3D=3D 0) { - /* btrfs reports major number =3D 0 */ - if (strcmp("btrfs", dash + type_s) !=3D 0 || - dev_major_minor(dash + dev_s, &devmajor, &devminor) < 0) { - continue; - } - } - - mount =3D g_new0(FsMount, 1); - mount->dirname =3D g_strdup(line + dir_s); - mount->devtype =3D g_strdup(dash + type_s); - mount->devmajor =3D devmajor; - mount->devminor =3D devminor; - - QTAILQ_INSERT_TAIL(mounts, mount, next); - } - free(line); - - fclose(fp); - return true; -} #endif =20 #if defined(CONFIG_FSFREEZE) @@ -1708,20 +1546,13 @@ int64_t qmp_guest_fsfreeze_freeze(Error **errp) return qmp_guest_fsfreeze_freeze_list(false, NULL, errp); } =20 -/* - * Walk list of mounted file systems in the guest, and freeze the ones whi= ch - * are real local file systems. - */ int64_t qmp_guest_fsfreeze_freeze_list(bool has_mountpoints, strList *mountpoints, Error **errp) { - int ret =3D 0, i =3D 0; - strList *list; + int ret; FsMountList mounts; - struct FsMount *mount; Error *local_err =3D NULL; - int fd; =20 slog("guest-fsfreeze called"); =20 @@ -1740,122 +1571,34 @@ int64_t qmp_guest_fsfreeze_freeze_list(bool has_mo= untpoints, /* cannot risk guest agent blocking itself on a write in this state */ ga_set_frozen(ga_state); =20 - QTAILQ_FOREACH_REVERSE(mount, &mounts, next) { - /* To issue fsfreeze in the reverse order of mounts, check if the - * mount is listed in the list here */ - if (has_mountpoints) { - for (list =3D mountpoints; list; list =3D list->next) { - if (strcmp(list->value, mount->dirname) =3D=3D 0) { - break; - } - } - if (!list) { - continue; - } - } - - fd =3D qga_open_cloexec(mount->dirname, O_RDONLY, 0); - if (fd =3D=3D -1) { - error_setg_errno(errp, errno, "failed to open %s", mount->dirn= ame); - goto error; - } - - /* we try to cull filesystems we know won't work in advance, but o= ther - * filesystems may not implement fsfreeze for less obvious reasons. - * these will report EOPNOTSUPP. we simply ignore these when tally= ing - * the number of frozen filesystems. - * if a filesystem is mounted more than once (aka bind mount) a - * consecutive attempt to freeze an already frozen filesystem will - * return EBUSY. - * - * any other error means a failure to freeze a filesystem we - * expect to be freezable, so return an error in those cases - * and return system to thawed state. - */ - ret =3D ioctl(fd, FIFREEZE); - if (ret =3D=3D -1) { - if (errno !=3D EOPNOTSUPP && errno !=3D EBUSY) { - error_setg_errno(errp, errno, "failed to freeze %s", - mount->dirname); - close(fd); - goto error; - } - } else { - i++; - } - close(fd); - } + ret =3D qmp_guest_fsfreeze_do_freeze_list(has_mountpoints, mountpoints, + mounts, errp); =20 free_fs_mount_list(&mounts); /* We may not issue any FIFREEZE here. * Just unset ga_state here and ready for the next call. */ - if (i =3D=3D 0) { + if (ret =3D=3D 0) { ga_unset_frozen(ga_state); + } else if (ret < 0) { + qmp_guest_fsfreeze_thaw(NULL); } - return i; - -error: - free_fs_mount_list(&mounts); - qmp_guest_fsfreeze_thaw(NULL); - return 0; + return ret; } =20 -/* - * Walk list of frozen file systems in the guest, and thaw them. - */ int64_t qmp_guest_fsfreeze_thaw(Error **errp) { int ret; - FsMountList mounts; - FsMount *mount; - int fd, i =3D 0, logged; - Error *local_err =3D NULL; =20 - QTAILQ_INIT(&mounts); - if (!build_fs_mount_list(&mounts, &local_err)) { - error_propagate(errp, local_err); - return 0; + ret =3D qmp_guest_fsfreeze_do_thaw(errp); + if (ret >=3D 0) { + ga_unset_frozen(ga_state); + execute_fsfreeze_hook(FSFREEZE_HOOK_THAW, errp); + } else { + ret =3D 0; } =20 - QTAILQ_FOREACH(mount, &mounts, next) { - logged =3D false; - fd =3D qga_open_cloexec(mount->dirname, O_RDONLY, 0); - if (fd =3D=3D -1) { - continue; - } - /* we have no way of knowing whether a filesystem was actually unf= rozen - * as a result of a successful call to FITHAW, only that if an err= or - * was returned the filesystem was *not* unfrozen by that particul= ar - * call. - * - * since multiple preceding FIFREEZEs require multiple calls to FI= THAW - * to unfreeze, continuing issuing FITHAW until an error is return= ed, - * in which case either the filesystem is in an unfreezable state,= or, - * more likely, it was thawed previously (and remains so afterward= ). - * - * also, since the most recent successful call is the one that did - * the actual unfreeze, we can use this to provide an accurate cou= nt - * of the number of filesystems unfrozen by guest-fsfreeze-thaw, w= hich - * may * be useful for determining whether a filesystem was unfroz= en - * during the freeze/thaw phase by a process other than qemu-ga. - */ - do { - ret =3D ioctl(fd, FITHAW); - if (ret =3D=3D 0 && !logged) { - i++; - logged =3D true; - } - } while (ret =3D=3D 0); - close(fd); - } - - ga_unset_frozen(ga_state); - free_fs_mount_list(&mounts); - - execute_fsfreeze_hook(FSFREEZE_HOOK_THAW, errp); - - return i; + return ret; } =20 static void guest_fsfreeze_cleanup(void) diff --git a/qga/meson.build b/qga/meson.build index a0ffd6d268..932b4e7ca8 100644 --- a/qga/meson.build +++ b/qga/meson.build @@ -72,6 +72,9 @@ qga_ss.add(when: 'CONFIG_POSIX', if_true: files( 'commands-posix.c', 'commands-posix-ssh.c', )) +qga_ss.add(when: 'CONFIG_LINUX', if_true: files( + 'commands-linux.c', +)) qga_ss.add(when: 'CONFIG_WIN32', if_true: files( 'channel-win32.c', 'commands-win32.c', --=20 2.34.1 From nobody Mon Feb 9 02:08:37 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1665654146; cv=pass; d=zohomail.com; s=zohoarc; b=b0BpuwE5BxMMj7dCKo0uiwmZYHvd0FkOxO3kegeprkQCPyupdAhowBIR0b2VLLg9YVQ9bCRm5o95QlZNiMH5SyhYp53d9dXoFq3oxlBmi/prLx+coNHyAX1VQgDjiEu7DZHg/BfIxHp8+fQElTAwd/deEAewQSxLRTJUjh1EaV8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1665654146; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=DK7nD0sgWCX9/ZdHU/h1wq1s4gT+ZWz1xBxB/M+VB8Y=; b=KPHovhQNo3SJ/RI6u4IOmPC5RMO/dIFrhpcJFjKazXem8MiEjequFdO0bYrlwhF6+vmbA6IvSZldXLY+v3v1uSOD2KQ/2gbgVK/4Xyu0nNNZoAe/FkPfBB+LNu/nQ+4mWHb7GA1QO5WpnXu5jkolwlJx7Z2QBOABuwHWr5wzOvY= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1665654146204439.1004816436737; Thu, 13 Oct 2022 02:42:26 -0700 (PDT) Received: from localhost ([::1]:45908 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oiujQ-0006Ga-ME for importer@patchew.org; Thu, 13 Oct 2022 05:42:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33450) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oiuRc-0002M3-VX for qemu-devel@nongnu.org; Thu, 13 Oct 2022 05:24:02 -0400 Received: from mail-am6eur05on2109.outbound.protection.outlook.com ([40.107.22.109]:28065 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oiuRM-0004gX-OC for qemu-devel@nongnu.org; Thu, 13 Oct 2022 05:24:00 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by AM8PR08MB6466.eurprd08.prod.outlook.com (2603:10a6:20b:363::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5709.21; Thu, 13 Oct 2022 09:23:37 +0000 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b]) by AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b%8]) with mapi id 15.20.5676.040; Thu, 13 Oct 2022 09:23:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WVUelJG57jRrSrwavXm8qaoQsSfVNgZivebU/56rx5vBQ5l7jp9HZHl9Sq7QLuq9qLNkw5a1nuUpuw0bexDv6s3zz9sRPD6E0OuO7YbdtEQygXZcUBIKonHKWR/vLlE+Afcij94onTDtwcDSE9RBykAyQ308lDYX3K3OFjgwWb2+MLsDo3q31eBaafEtdfbAclNYNDnJT3MdiXVUAcYEIGHxaBvpTvnfOQjHW3qGAGN74PoQyV5PErYHw6AHGf/m3OyJd2CxfIb7BUMhSE7C+BkGN67cfrEpips/nUNwbuplt36lQImeVpKZIlH3V7VpJyNXwJHqguHI+HNFmcLClQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=DK7nD0sgWCX9/ZdHU/h1wq1s4gT+ZWz1xBxB/M+VB8Y=; b=bhu8m+j/qGwZ1jTyRyUWLbgrkCfnhG5JUxKbJitN6EUt3JOA4bKtsopLs8XqaU57DSZ5tNZ7ATslGYQrRNEBLOnoeNYKl6yBLZ/m2QkujjxY6eRmuWjRfNF6Yj94C7E5sM72IgncjUSZu58FPbA1vuHOqJWUhO3Oi8a499piKt0MDYIQsf4XKDHGzzeXgRdOBG6SekbIqyDYEI/m9VwpjE4wJaLQPnK82JXMZtP3BIs3eA5MhcQ/BBfUf0kWrqG9lrGH7CiZIuXBlWYPRd13tEgk/pI+TlzOcM4V40eKW8GjCUT7jHriEGDO+LzW2s1tlRYfgvVcCohYsZTW/WZM+A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DK7nD0sgWCX9/ZdHU/h1wq1s4gT+ZWz1xBxB/M+VB8Y=; b=oXD7MCT4A2m+dfunaAQd+69/hrn4esDHXwpra2VediBQhjybq9lOGJidTPcDBWyDGVZJs5qlTuBnGE0qSWpf6k3PhlSVdJdiaIPm090/Z5gBPtLIljqGLvOxKwm6xlv6kBTw3joz/AOMKtOMPZzGZEo5C6G789+NWBRjtOZxgrGTnuTCJ3WK1RwHu9x6keapuI0mRxNhwT3ZwXS2Rrw5qxQSS+NW43nAksPgAfo5KJ/U/GYudTvt06hYSJHeY98B8g3XKB4uRR0e825tGsHT3poUw576bYRujMturlybspELQSdKTNjUkMclxNjeVDi55rle6j9nbAXGutWYiBsFgA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Alexander Ivanov To: qemu-devel@nongnu.org Cc: den@virtuozzo.com, michael.roth@amd.com, kkostiuk@redhat.com, marcandre.lureau@gmail.com Subject: [PATCH v4 3/7] qga: Add UFS freeze/thaw support for FreeBSD Date: Thu, 13 Oct 2022 11:23:22 +0200 Message-Id: <20221013092326.2194646-4-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221013092326.2194646-1-alexander.ivanov@virtuozzo.com> References: <20221013092326.2194646-1-alexander.ivanov@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR0P281CA0069.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:49::22) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|AM8PR08MB6466:EE_ X-MS-Office365-Filtering-Correlation-Id: 803d3e2f-ba73-4342-c740-08daacfc9bc3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9MvsZcDZBc0277G9qUL8clY9uDDNDDOmtVZDzClMO/1OrtM2Mae53JMhr/id8lUD1l3Lubchho182QMGvHNa8as8BHCF8MemJ6hnVNXx2ZuR3DQ5Brciw5xgqVlsJyj10tUmtGrl3xsV5rNVMQ2PJHAQUXnTuVZ7qMwRcgp+qNBJ9Q5W8yCU4qhGZcjdIvmJpm3/IiRLbpOqIfB0f0pdcTdQe5MxWc7Q85ULwX5/jB6NAYPKBfmkIvQ4OvMiwbmv70NoJ1VySOGCz4oF14aZYwuJcn+E+mewTjF2hxfKZQWgp+kZogTBNRc7HI0ArUrRnF2zquv4q60LaMwFGyi38ITvWkWoSUpIK8OWv88pSOb/5bJKivAFi/kBRHFx9CN4tk6rQVR3UoN1A4vpdVX6PBfz7jnxRUtBD2bTxFVTGzKY0RQYW7xLa5rTCSTeo97vEXrurRrszu7iywJN2QoFTmzK2aL2cEUZdKGOgrCSRbWqZolK71xpEfxRzf98womzAr5cUpEb1Ar54L3sNQxPtoXmsCiPReGuLTC5fHDVJ3qCzsqBvZ08UR/YbkJWYUc+8u+fPT6FBmnwNMtD1Pk6eiXpK8ALHCx3zz8SQtzdGxiaI/OD+pNPizEsKvys5+sq5+6hbUHI03DdyBTZ/Cb18u6LP871Zy/3WDho+3/iC+zTCDI6BYK6QMKGcYqmUgO2SI2IzBreLfW8t+M09jHxK5kiJUZYo2nN5lJWpbulT9LovZUddSw5lhgdkuIPoo589wIfZu1XlLsRPHk8FbtYsQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR08MB7095.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(366004)(376002)(346002)(136003)(39850400004)(396003)(451199015)(36756003)(2906002)(44832011)(4326008)(30864003)(6512007)(5660300002)(41300700001)(8676002)(66556008)(316002)(86362001)(6916009)(66946007)(66476007)(8936002)(38100700002)(478600001)(6486002)(6666004)(38350700002)(83380400001)(26005)(6506007)(52116002)(2616005)(186003)(1076003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WExDR3MxL0RwR2F1L3V1ekVrTEluYkNHQWFEdEttSXc1SjZSL2VMa3AzWm1I?= =?utf-8?B?VnJRdmtCMzRhQzF5YmZLUWw4U0psd1JkdDRXb1lTN0JmTzJlYlhDWnFQeUcr?= =?utf-8?B?OG43dldRQi9PMVdudisvRjN2WTlmOFF2bk9xS3BoeFdYbXM2WkxHVk5lUzZl?= =?utf-8?B?Y0hBSlJBOGRHYVc1WEdQUFFnUVFqVWNzbDNpL1FUUFBWTXdEaXQ5eUEvS0c0?= =?utf-8?B?Z0lXOGVMVzRjbDVnbDBUcWI0VkxkY2Y4VkNRNWpabkYraThlS3MzTmV6dTJ5?= =?utf-8?B?TkEyTmZrQlI5Z0kxM0VwTjhLM01NQnJmYnBvT1RzYSthdm5NYWNZbmppNEYz?= =?utf-8?B?bnEyWjZyYytBVVNmMkk0ZGRJd0Z4b3gvdy9Ja1lYUzluYlkrUW5FQ1htVFNB?= =?utf-8?B?VXFrcmNhQ05GMWVrZlZSc0JlaUExT1ZlRVJJeENjR0RIeGhvbjIzcG04LzA0?= =?utf-8?B?dWRCSEkvUSs5ODVHR2swODluczlVbUI5QjFFTFVCVXc4N0JjRE9kRUFzZzJ1?= =?utf-8?B?UWk2QzlMZXR2Y2dXalFxeXphQnc0RkJmWDRrZnZtdHVUcWdMaC9mbmRPWUFw?= =?utf-8?B?U0JoSTlYalN3ck9YdzNxTEp1eE9MOUVYN1ZLaEZaOVVmaTVZOU5IMGN4dFZi?= =?utf-8?B?U0ZqODhzYmFpTVdBMkhPNVhuWTRZdEdlSHN1cmZjbUdaSlQ2TElpZkVVT0hW?= =?utf-8?B?UExzQmFoZE5wRGkvMENCTXY0b3h0YU5qeDlwWXpJOENKY1MxTlNMdkxNMzdO?= =?utf-8?B?MkZQaDNXR1RnV0RHTHR1c0d1S3RnVUl2eE45aE40N3BMcnFjYTM5V3hTSm00?= =?utf-8?B?bTBHWURseXFaY0ZXaUt1aVhremY0VFA1ZG9mVkFKWGgwNzJjeUM5MHdVZ2ZG?= =?utf-8?B?anRoeVdMbHVWWDZ3K3M3Y1RiZ1BlWXFxS2pSTGFvY2dzTGZSTldlOXpzZG94?= =?utf-8?B?S2F0K0lLenUwOU9Jay9mYkY0bng2RWtNK0RzdlNyWGp2U0t4dnVBdVBZNmkz?= =?utf-8?B?RXcvT0pZUEIrdDVQZGRzNXpRd29FSUk0aTRmckhRVnZ3dlV6a01sU2wwRks0?= =?utf-8?B?a2ZDeE1oYmo1YkEzKzhVZTR3UmZyR2RXVDI4NFlPelEvK2VrSkgvOHJaclBZ?= =?utf-8?B?SkxCT0lJN005ZW9wNHhQLzY1ZzMvWWNCSGhmTW9zUStzdWMyYVJlTXRUNzBO?= =?utf-8?B?a2NveHl1RW1RblpTQm9SZms5L0tXZXJDVkZUaHI3a0w3cHJzajNIOVRRdTdR?= =?utf-8?B?Zk9tcjlycGEvYTRyU240MkJoSlc3NTlLMG9BRCtYNGQvODJsQURPQjdQelJH?= =?utf-8?B?YVQ0ME9ock5vOEg2VWl3NlhZaFVzUzBjNVE0dHZJWHlHb1lJVFExTDUrOTRi?= =?utf-8?B?ODlGaVZ6dm4zVUlQQmZCbkZKSUp4VGF0YzBMWXQxeUR6ZTlkZjhPK0JWcTc0?= =?utf-8?B?STA0OCtSbVR4L0R6WGNid3pFSkNYSmZMeFVLMm5HVExudWQxR1RJSDl3VStM?= =?utf-8?B?RUVLRG9qcXVLOXA4UzNvZ1RzSE5zR0xIdURjKzNjTWU2RG5nZVZSUGdkWG5u?= =?utf-8?B?aDFzSjBEUmxyZ2RmTFdaZFRtR2dEWTZWQzRrendYZ3BsZm5wa2NrZC9iY0xx?= =?utf-8?B?eXlabUNGVng4T2lGM2NpMExKemNObTQ1cnVia1FIbXJjeHkxV1phT1loUGFz?= =?utf-8?B?bmMxTjlzWThld1BrMjJaZlh1MHVRQytXOTBZeWQ3dGVKc21XZlYyV3Z4bUxq?= =?utf-8?B?ZFJlRVdXRmxXaXBtaGR0dTBwSUNHZlRUN0VzWC8wdEl2YlZiT2laOWxBalJS?= =?utf-8?B?bnNhbUNDM0dFdS93SUlUb3QvN3FZQ3dvWUhiUnQybUZHNzVhZjJ1Yk5id3Ex?= =?utf-8?B?ajF3YjM5QU05T0FtcFh1Y1RiWHlvZHMwNzFvVFBDT1g2Z1EyeW1nak1UR0dK?= =?utf-8?B?UFVXWW5RTTBDS1FCZkh5cEJVNHo4blorYXVwR2VUWGd1QmFnV2ZqbnRIOWs0?= =?utf-8?B?QVJsQ2ZXY0xwb25Bby9hclBnZXR4OHlLVmVXNS80eTlXNGs1NFdGY1NFMVp5?= =?utf-8?B?SGliN0cwQS81c0hxb0kwQTAyOGZpUUxFN0ZGbzFQM3AzQVYxMGFWVm9BRjBG?= =?utf-8?B?Zm91S2ZhV0tYbEJDRmdiVlN3U3h5ZDBQU0htSE9kNEFVUEwwMVk3TkhpcHpt?= =?utf-8?Q?qsHvGqwaMmSNFSnxXUVOlrA=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 803d3e2f-ba73-4342-c740-08daacfc9bc3 X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Oct 2022 09:23:37.2957 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 0A5RhK+MIxa8BhP477zfLBguRZhdaqyZzuiL6FjDe7UORSwh4ihSETFGuFJKN3GpXP16WhgwM/OIHwVmWoSTV6nLU8f5FnQQFvbidWEQ0SU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6466 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.22.109; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) X-ZM-MESSAGEID: 1665654148498100001 UFS supports FS freezing through ioctl UFSSUSPEND on /dev/ufssuspend. Frozen FS can be thawed by closing /dev/ufssuspend file descriptior. Use getmntinfo to get a list of mounted FS. Reviewed-by: Konstantin Kostiuk Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Alexander Ivanov --- qga/commands-bsd.c | 169 +++++++++++++++++++++++ qga/commands-common.h | 11 ++ qga/commands-posix.c | 308 ++++++++++++++++++++---------------------- qga/main.c | 7 +- qga/meson.build | 3 + 5 files changed, 334 insertions(+), 164 deletions(-) create mode 100644 qga/commands-bsd.c diff --git a/qga/commands-bsd.c b/qga/commands-bsd.c new file mode 100644 index 0000000000..ca06692179 --- /dev/null +++ b/qga/commands-bsd.c @@ -0,0 +1,169 @@ +/* + * QEMU Guest Agent BSD-specific command implementations + * + * Copyright (c) Virtuozzo International GmbH. + * + * Authors: + * Alexander Ivanov + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "qga-qapi-commands.h" +#include "qapi/qmp/qerror.h" +#include "qapi/error.h" +#include "qemu/queue.h" +#include "commands-common.h" +#include +#include +#include +#include +#include + +#if defined(CONFIG_FSFREEZE) || defined(CONFIG_FSTRIM) +bool build_fs_mount_list(FsMountList *mounts, Error **errp) +{ + FsMount *mount; + struct statfs *mntbuf, *mntp; + struct stat statbuf; + int i, count, ret; + + count =3D getmntinfo(&mntbuf, MNT_NOWAIT); + if (count =3D=3D 0) { + error_setg_errno(errp, errno, "getmntinfo failed"); + return false; + } + + for (i =3D 0; i < count; i++) { + mntp =3D &mntbuf[i]; + ret =3D stat(mntp->f_mntonname, &statbuf); + if (ret !=3D 0) { + error_setg_errno(errp, errno, "stat failed on %s", + mntp->f_mntonname); + return false; + } + + mount =3D g_new0(FsMount, 1); + + mount->dirname =3D g_strdup(mntp->f_mntonname); + mount->devtype =3D g_strdup(mntp->f_fstypename); + mount->devmajor =3D major(mount->dev); + mount->devminor =3D minor(mount->dev); + mount->fsid =3D mntp->f_fsid; + mount->dev =3D statbuf.st_dev; + + QTAILQ_INSERT_TAIL(mounts, mount, next); + } + return true; +} +#endif /* CONFIG_FSFREEZE || CONFIG_FSTRIM */ + +#if defined(CONFIG_FSFREEZE) +static int ufssuspend_fd =3D -1; +static int ufssuspend_cnt; + +int64_t qmp_guest_fsfreeze_do_freeze_list(bool has_mountpoints, + strList *mountpoints, + FsMountList mounts, + Error **errp) +{ + int ret; + strList *list; + struct FsMount *mount; + + if (ufssuspend_fd !=3D -1) { + error_setg(errp, "filesystems have already frozen"); + return -1; + } + + ufssuspend_cnt =3D 0; + ufssuspend_fd =3D qemu_open(_PATH_UFSSUSPEND, O_RDWR, errp); + if (ufssuspend_fd =3D=3D -1) { + return -1; + } + + QTAILQ_FOREACH_REVERSE(mount, &mounts, next) { + /* + * To issue fsfreeze in the reverse order of mounts, check if the + * mount is listed in the list here + */ + if (has_mountpoints) { + for (list =3D mountpoints; list; list =3D list->next) { + if (g_str_equal(list->value, mount->dirname)) { + break; + } + } + if (!list) { + continue; + } + } + + /* Only UFS supports suspend */ + if (!g_str_equal(mount->devtype, "ufs")) { + continue; + } + + ret =3D ioctl(ufssuspend_fd, UFSSUSPEND, &mount->fsid); + if (ret =3D=3D -1) { + /* + * ioctl returns EBUSY for all the FS except the first one + * that was suspended + */ + if (errno =3D=3D EBUSY) { + continue; + } + error_setg_errno(errp, errno, "failed to freeze %s", + mount->dirname); + goto error; + } + ufssuspend_cnt++; + } + return ufssuspend_cnt; +error: + close(ufssuspend_fd); + ufssuspend_fd =3D -1; + return -1; + +} + +/* + * We don't need to call UFSRESUME ioctl because all the frozen FS + * are thawed on /dev/ufssuspend closing. + */ +int qmp_guest_fsfreeze_do_thaw(Error **errp) +{ + int ret =3D ufssuspend_cnt; + ufssuspend_cnt =3D 0; + if (ufssuspend_fd !=3D -1) { + close(ufssuspend_fd); + ufssuspend_fd =3D -1; + } + return ret; +} + +GuestFilesystemInfoList *qmp_guest_get_fsinfo(Error **errp) +{ + error_setg(errp, QERR_UNSUPPORTED); + return NULL; +} + +GuestDiskInfoList *qmp_guest_get_disks(Error **errp) +{ + error_setg(errp, QERR_UNSUPPORTED); + return NULL; +} + +GuestDiskStatsInfoList *qmp_guest_get_diskstats(Error **errp) +{ + error_setg(errp, QERR_UNSUPPORTED); + return NULL; +} + +GuestCpuStatsList *qmp_guest_get_cpustats(Error **errp) +{ + error_setg(errp, QERR_UNSUPPORTED); + return NULL; +} +#endif /* CONFIG_FSFREEZE */ diff --git a/qga/commands-common.h b/qga/commands-common.h index 181fc330aa..2d9878a634 100644 --- a/qga/commands-common.h +++ b/qga/commands-common.h @@ -23,11 +23,22 @@ #endif #endif /* __linux__ */ =20 +#ifdef __FreeBSD__ +#include +#ifdef UFSSUSPEND +#define CONFIG_FSFREEZE +#endif +#endif /* __FreeBSD__ */ + #if defined(CONFIG_FSFREEZE) || defined(CONFIG_FSTRIM) typedef struct FsMount { char *dirname; char *devtype; unsigned int devmajor, devminor; +#if defined(__FreeBSD__) + dev_t dev; + fsid_t fsid; +#endif QTAILQ_ENTRY(FsMount) next; } FsMount; =20 diff --git a/qga/commands-posix.c b/qga/commands-posix.c index 9574b83c92..49f9996a9c 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -33,20 +33,12 @@ =20 #if defined(__linux__) #include -#include #include #include =20 #ifdef CONFIG_LIBUDEV #include #endif - -#ifdef FIFREEZE -#define CONFIG_FSFREEZE -#endif -#ifdef FITRIM -#define CONFIG_FSTRIM -#endif #endif =20 #ifdef __FreeBSD__ @@ -623,9 +615,6 @@ void qmp_guest_file_flush(int64_t handle, Error **errp) } } =20 -/* linux-specific implementations. avoid this if at all possible. */ -#if defined(__linux__) - #if defined(CONFIG_FSFREEZE) || defined(CONFIG_FSTRIM) void free_fs_mount_list(FsMountList *mounts) { @@ -644,6 +633,156 @@ void free_fs_mount_list(FsMountList *mounts) } #endif =20 +#if defined(CONFIG_FSFREEZE) +typedef enum { + FSFREEZE_HOOK_THAW =3D 0, + FSFREEZE_HOOK_FREEZE, +} FsfreezeHookArg; + +static const char *fsfreeze_hook_arg_string[] =3D { + "thaw", + "freeze", +}; + +static void execute_fsfreeze_hook(FsfreezeHookArg arg, Error **errp) +{ + int status; + pid_t pid; + const char *hook; + const char *arg_str =3D fsfreeze_hook_arg_string[arg]; + Error *local_err =3D NULL; + + hook =3D ga_fsfreeze_hook(ga_state); + if (!hook) { + return; + } + if (access(hook, X_OK) !=3D 0) { + error_setg_errno(errp, errno, "can't access fsfreeze hook '%s'", h= ook); + return; + } + + slog("executing fsfreeze hook with arg '%s'", arg_str); + pid =3D fork(); + if (pid =3D=3D 0) { + setsid(); + reopen_fd_to_null(0); + reopen_fd_to_null(1); + reopen_fd_to_null(2); + + execl(hook, hook, arg_str, NULL); + _exit(EXIT_FAILURE); + } else if (pid < 0) { + error_setg_errno(errp, errno, "failed to create child process"); + return; + } + + ga_wait_child(pid, &status, &local_err); + if (local_err) { + error_propagate(errp, local_err); + return; + } + + if (!WIFEXITED(status)) { + error_setg(errp, "fsfreeze hook has terminated abnormally"); + return; + } + + status =3D WEXITSTATUS(status); + if (status) { + error_setg(errp, "fsfreeze hook has failed with status %d", status= ); + return; + } +} + +/* + * Return status of freeze/thaw + */ +GuestFsfreezeStatus qmp_guest_fsfreeze_status(Error **errp) +{ + if (ga_is_frozen(ga_state)) { + return GUEST_FSFREEZE_STATUS_FROZEN; + } + + return GUEST_FSFREEZE_STATUS_THAWED; +} + +int64_t qmp_guest_fsfreeze_freeze(Error **errp) +{ + return qmp_guest_fsfreeze_freeze_list(false, NULL, errp); +} + +int64_t qmp_guest_fsfreeze_freeze_list(bool has_mountpoints, + strList *mountpoints, + Error **errp) +{ + int ret; + FsMountList mounts; + Error *local_err =3D NULL; + + slog("guest-fsfreeze called"); + + execute_fsfreeze_hook(FSFREEZE_HOOK_FREEZE, &local_err); + if (local_err) { + error_propagate(errp, local_err); + return -1; + } + + QTAILQ_INIT(&mounts); + if (!build_fs_mount_list(&mounts, &local_err)) { + error_propagate(errp, local_err); + return -1; + } + + /* cannot risk guest agent blocking itself on a write in this state */ + ga_set_frozen(ga_state); + + ret =3D qmp_guest_fsfreeze_do_freeze_list(has_mountpoints, mountpoints, + mounts, errp); + + free_fs_mount_list(&mounts); + /* We may not issue any FIFREEZE here. + * Just unset ga_state here and ready for the next call. + */ + if (ret =3D=3D 0) { + ga_unset_frozen(ga_state); + } else if (ret < 0) { + qmp_guest_fsfreeze_thaw(NULL); + } + return ret; +} + +int64_t qmp_guest_fsfreeze_thaw(Error **errp) +{ + int ret; + + ret =3D qmp_guest_fsfreeze_do_thaw(errp); + if (ret >=3D 0) { + ga_unset_frozen(ga_state); + execute_fsfreeze_hook(FSFREEZE_HOOK_THAW, errp); + } else { + ret =3D 0; + } + + return ret; +} + +static void guest_fsfreeze_cleanup(void) +{ + Error *err =3D NULL; + + if (ga_is_frozen(ga_state) =3D=3D GUEST_FSFREEZE_STATUS_FROZEN) { + qmp_guest_fsfreeze_thaw(&err); + if (err) { + slog("failed to clean up frozen filesystems: %s", + error_get_pretty(err)); + error_free(err); + } + } +} +#endif + +/* linux-specific implementations. avoid this if at all possible. */ +#if defined(__linux__) #if defined(CONFIG_FSFREEZE) =20 static char *get_pci_driver(char const *syspath, int pathlen, Error **errp) @@ -1467,153 +1606,6 @@ GuestFilesystemInfoList *qmp_guest_get_fsinfo(Error= **errp) free_fs_mount_list(&mounts); return ret; } - - -typedef enum { - FSFREEZE_HOOK_THAW =3D 0, - FSFREEZE_HOOK_FREEZE, -} FsfreezeHookArg; - -static const char *fsfreeze_hook_arg_string[] =3D { - "thaw", - "freeze", -}; - -static void execute_fsfreeze_hook(FsfreezeHookArg arg, Error **errp) -{ - int status; - pid_t pid; - const char *hook; - const char *arg_str =3D fsfreeze_hook_arg_string[arg]; - Error *local_err =3D NULL; - - hook =3D ga_fsfreeze_hook(ga_state); - if (!hook) { - return; - } - if (access(hook, X_OK) !=3D 0) { - error_setg_errno(errp, errno, "can't access fsfreeze hook '%s'", h= ook); - return; - } - - slog("executing fsfreeze hook with arg '%s'", arg_str); - pid =3D fork(); - if (pid =3D=3D 0) { - setsid(); - reopen_fd_to_null(0); - reopen_fd_to_null(1); - reopen_fd_to_null(2); - - execl(hook, hook, arg_str, NULL); - _exit(EXIT_FAILURE); - } else if (pid < 0) { - error_setg_errno(errp, errno, "failed to create child process"); - return; - } - - ga_wait_child(pid, &status, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; - } - - if (!WIFEXITED(status)) { - error_setg(errp, "fsfreeze hook has terminated abnormally"); - return; - } - - status =3D WEXITSTATUS(status); - if (status) { - error_setg(errp, "fsfreeze hook has failed with status %d", status= ); - return; - } -} - -/* - * Return status of freeze/thaw - */ -GuestFsfreezeStatus qmp_guest_fsfreeze_status(Error **errp) -{ - if (ga_is_frozen(ga_state)) { - return GUEST_FSFREEZE_STATUS_FROZEN; - } - - return GUEST_FSFREEZE_STATUS_THAWED; -} - -int64_t qmp_guest_fsfreeze_freeze(Error **errp) -{ - return qmp_guest_fsfreeze_freeze_list(false, NULL, errp); -} - -int64_t qmp_guest_fsfreeze_freeze_list(bool has_mountpoints, - strList *mountpoints, - Error **errp) -{ - int ret; - FsMountList mounts; - Error *local_err =3D NULL; - - slog("guest-fsfreeze called"); - - execute_fsfreeze_hook(FSFREEZE_HOOK_FREEZE, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return -1; - } - - QTAILQ_INIT(&mounts); - if (!build_fs_mount_list(&mounts, &local_err)) { - error_propagate(errp, local_err); - return -1; - } - - /* cannot risk guest agent blocking itself on a write in this state */ - ga_set_frozen(ga_state); - - ret =3D qmp_guest_fsfreeze_do_freeze_list(has_mountpoints, mountpoints, - mounts, errp); - - free_fs_mount_list(&mounts); - /* We may not issue any FIFREEZE here. - * Just unset ga_state here and ready for the next call. - */ - if (ret =3D=3D 0) { - ga_unset_frozen(ga_state); - } else if (ret < 0) { - qmp_guest_fsfreeze_thaw(NULL); - } - return ret; -} - -int64_t qmp_guest_fsfreeze_thaw(Error **errp) -{ - int ret; - - ret =3D qmp_guest_fsfreeze_do_thaw(errp); - if (ret >=3D 0) { - ga_unset_frozen(ga_state); - execute_fsfreeze_hook(FSFREEZE_HOOK_THAW, errp); - } else { - ret =3D 0; - } - - return ret; -} - -static void guest_fsfreeze_cleanup(void) -{ - Error *err =3D NULL; - - if (ga_is_frozen(ga_state) =3D=3D GUEST_FSFREEZE_STATUS_FROZEN) { - qmp_guest_fsfreeze_thaw(&err); - if (err) { - slog("failed to clean up frozen filesystems: %s", - error_get_pretty(err)); - error_free(err); - } - } -} #endif /* CONFIG_FSFREEZE */ =20 #if defined(CONFIG_FSTRIM) diff --git a/qga/main.c b/qga/main.c index 0d27c97d38..b3580508fa 100644 --- a/qga/main.c +++ b/qga/main.c @@ -37,12 +37,7 @@ #include "qga/service-win32.h" #include "qga/vss-win32.h" #endif -#ifdef __linux__ -#include -#ifdef FIFREEZE -#define CONFIG_FSFREEZE -#endif -#endif +#include "commands-common.h" =20 #ifndef _WIN32 #ifdef __FreeBSD__ diff --git a/qga/meson.build b/qga/meson.build index 932b4e7ca8..3cfb9166e5 100644 --- a/qga/meson.build +++ b/qga/meson.build @@ -75,6 +75,9 @@ qga_ss.add(when: 'CONFIG_POSIX', if_true: files( qga_ss.add(when: 'CONFIG_LINUX', if_true: files( 'commands-linux.c', )) +qga_ss.add(when: 'CONFIG_BSD', if_true: files( + 'commands-bsd.c', +)) qga_ss.add(when: 'CONFIG_WIN32', if_true: files( 'channel-win32.c', 'commands-win32.c', --=20 2.34.1 From nobody Mon Feb 9 02:08:37 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1665656162; cv=pass; d=zohomail.com; s=zohoarc; b=gTA7N8Z8KDSuy18exwLXyjHX5QWF+b7TPSb16ltiA5gNKo4BRNMMgfDH8glLKe89u7Ipe0vGXMBM+3lyJuZLlm7qTk89jUdXtRPsZ17YlK7RUehtHiWIjUAZj0t/BgQumLQ4fVmFpFtVNzXaS6Wh101kMF4dvM1Mu0BhPNqro7o= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1665656162; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=rkK0u43PU85jFfHhbme9ZUTebOFAr5bhhPIK+wC4mG8=; b=PGHxibWBHm2as2rtMWQLMVFBgEgcfl3eNHo5KFky3JZMnHYEuxfJBx5Q8ppk9dMbyIQYLW37aXODq38uLGHdQOuO+YtKJ6q6x+53CeQRu1YojftQ7aoAkMGSfQV0P/Cypci3JJ7BRGUok4isv64AJX3UkrP0H4QVr4vpBUHyf0U= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1665656162983246.6114430954949; Thu, 13 Oct 2022 03:16:02 -0700 (PDT) Received: from localhost ([::1]:52466 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oivFx-0007GM-W0 for importer@patchew.org; Thu, 13 Oct 2022 06:16:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34350) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oiuRR-0002GB-NX for qemu-devel@nongnu.org; Thu, 13 Oct 2022 05:23:49 -0400 Received: from mail-eopbgr140123.outbound.protection.outlook.com ([40.107.14.123]:28929 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oiuRP-0004g6-Ly for qemu-devel@nongnu.org; Thu, 13 Oct 2022 05:23:48 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by AM8PR08MB6466.eurprd08.prod.outlook.com (2603:10a6:20b:363::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5709.21; Thu, 13 Oct 2022 09:23:38 +0000 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b]) by AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b%8]) with mapi id 15.20.5676.040; Thu, 13 Oct 2022 09:23:38 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=W3BnmwIx9HFbpUEQRZe3GId4OEf1n3usGhIX4vu6lKc8sbxIqEEIao9FcylpNOSyG4XzVkzzlPTFH5XdGjITdScAklpzsgigt50XSYmYkkmJBV2BMZGlYufsJBzCEIuL/LJjtjLvMSBKDUmX/JqKZpdDziQCpcys0eau8Js7v/CIpV7VdeOFq5dRo6NTIUxgX9As5Msx4eMlet5oS1BRPe35ov83pTT5Dw85eqSffX+Q1g/BfgC8LDYelGgEuUwP9wOQkQAjV2dbNIdzf02fLj3SfFDsxcln1GYYGNJGnUYK/u83tEBmhsHUt+CrLEShvsN4gNE2Jl/ZdP8xJANosA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=rkK0u43PU85jFfHhbme9ZUTebOFAr5bhhPIK+wC4mG8=; b=KwU8Zots78kDaIRjlFrn06RQeAUksxmm5FCwkHjsFGqBmAY+DP6M5wv1fox9GUCOmJ8Y6vk8z1Brez5PJucM7QHxZS2xIiK6sWot641y0xqyT/2ZtY+PA2pKD2/o6NmksBaYdx8KtbNiKlCvzJUIrjjGhW0JDClPstH1FvolHwTK7MCp/B7ZcDx3fx6Ac4yMhShx7GdxCDaw28YuLOzX27KLS2xTaw5GPzjdB1YKp3nqsC97Ddl68g9LVGgOAwZ97h7ELrMYi/gLMSRXOILY2wfGnWCVjlRUrutvjJsFjlr4nymjoTgXbvGatgGEogUuJme8zxXXrKt18v+cD16Niw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rkK0u43PU85jFfHhbme9ZUTebOFAr5bhhPIK+wC4mG8=; b=r9VS2HvYio6DOOvP5Xq1QKGA2qnzRPiWujSUrnsKeOWTPKN8dif5CwPJ0AsROCf3MI+s6VAEmNZc/uAvo7oa4lhO1WOGvmFpklYjYV9N43XQw4kIMv1tS969TzVfOzix0E8kbwZmL9jxlozyduC5tD3y36kpZK8GDCejBLbToiS/S40JKBiuUn4fLLe0pXEVG95eeQwAyxNwi2IkjeeI1pCLjazWdIlCmmfqJXXan355/1Zz10JGYSYGC7kuZkk3UrR81LpqkdzzYF/xa0t0nvZRjjgzrHSYI5GWQm0YoEhyfzxuUN/H6jCzBDtV+5CgW7+d/JZ4PlI3ZH8U9EsvMQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Alexander Ivanov To: qemu-devel@nongnu.org Cc: den@virtuozzo.com, michael.roth@amd.com, kkostiuk@redhat.com, marcandre.lureau@gmail.com Subject: [PATCH v4 4/7] qga: Add shutdown/halt/reboot support for FreeBSD Date: Thu, 13 Oct 2022 11:23:23 +0200 Message-Id: <20221013092326.2194646-5-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221013092326.2194646-1-alexander.ivanov@virtuozzo.com> References: <20221013092326.2194646-1-alexander.ivanov@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR0P281CA0069.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:49::22) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|AM8PR08MB6466:EE_ X-MS-Office365-Filtering-Correlation-Id: f4d2ef11-21fd-4582-671a-08daacfc9c36 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: e3TfhCsooQhUULGDwKmks1iZvbOkyC8UZi1jyidmMOLTB/CIH75YoGhiS7vG0VsmR+HouShJ6c8ZIV9fpQCXr0pPloHPQm3dqQ465OPhTWPuPcC6tQCVAy8zQ4orPJog9vaV01VUNLNFFJYt4V1L5szEB0eTNmtH4VOK9V5zVv061xZj8BdpqLBCWNx4TPzLWCeqTLhuxUMih5M94LrxCO9B8IAn3mfp0KMIAcUpOk21QqOVmDJE62wVEAalGZt/DQuhI1WEbQKgAN8ZSvi9GoHlBw6Gan/mXXk5XPVTfyhfphG6d3eShtpCV1tK63mZQZx4IyYWCfeT3dFoNsJCBE8HSxOvkJ3EBqrIIPNG801/IU6Mpaz7M3HdF32e8pllOxcsFhbj66EhojEAFDubuN8p1pkYc6Z1LrIUFVuDSyDCTkbrDznFXAROslZdhGRbcSg14V8RJQ58ot9xEPEM1oxM88D40qOpIlpluqH/H2CVYjMsV6awBgT2wA0nhxkkLjqNhOvvET36s9oKfWgfXHUsvXLwU3Ilkr4OK7qWNNcz8xeK57H6hm1uPxkWBg5nusvEHanunlO6ytsxQvYAvCYqyWyLceYrJCja+NRumyKHo9qNT3arRbaQzRIoY0texrVL7ehtudjqWqJT+TxsAs//lVng4wcRy+ustPmBZcE1SOZt/aBmE8amqI4Pxz4EWCAHHN5+mlj6DybQZfzq+JBbZ3iveo4Dy5sjnxmuqHVNDRCAwicQl0jSlOo4P26USvzRnEZ5p+JlQ1pdA4PqiQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR08MB7095.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(366004)(376002)(346002)(136003)(39850400004)(396003)(451199015)(36756003)(2906002)(44832011)(4326008)(6512007)(5660300002)(41300700001)(8676002)(66556008)(316002)(86362001)(6916009)(66946007)(66476007)(8936002)(38100700002)(478600001)(6486002)(6666004)(38350700002)(26005)(6506007)(52116002)(2616005)(186003)(1076003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ckVlTnF3bkFXTEhOWVlxTlRocEIzVytZN0QzL3kxTUgvUCtWL2xBZ1pLYWRN?= =?utf-8?B?ZXF3Vk40VDViRlRmMEpla01ickVxVEFsa2w5bDVidytzL1FibWZpM0dHUE0w?= =?utf-8?B?cVNqTmVleTdiY3Rvb0ZlYnlqY3pFcUZ2SzF6ZFdSTFNUVmpRNERTS2tQM0lJ?= =?utf-8?B?bUVreWhTZU1wRUVvaURYbUZ0eStJeG83QzlzdU5xLzMwUFZlaUNxS2k1NXl6?= =?utf-8?B?ZnFIN3NmbkgzVU5rSEZObUs1VlE0azh2d0lIQW5tV1lxckZvdEIxU0tJdDF3?= =?utf-8?B?UWxHbWErMHdFL3ZQcjBtU0F4b1R0b0RzZVNHb2NGOE9od3hDQWt1Yi9PN0hh?= =?utf-8?B?eGUvMzREWFBpWDNjL1BSNG1tTnBRMk1JenhYNGd3OC9Yd3Z1eGgvVk1JWFhC?= =?utf-8?B?NElHWGl5TnpoTGNkbW9IZE5CR05XUWF0TWtEbVZFamFkWWRLZjMyS3h1azVC?= =?utf-8?B?cVNmbEdRTXFmTkdnLzRoMmhtb1pOS2ppNDlsOW9rNlBuSG9NbkpvejlRSUlI?= =?utf-8?B?dEdkNGplb0JnSkZidTF2RU53aDNWV29iRGNJVHg2eVl4emNBV25La21kTUts?= =?utf-8?B?N1hJUmhvd1hnbnVVNXJNU1A3SGJDZXYwZ2NhSlNPTXNVTE83OEZCL2M5Ukk1?= =?utf-8?B?cUtaV2Ewak1DbUlVRTFXdlpkMWpEVGF6alJLYUYwK0hGVVVhVlFuMjg3QzhE?= =?utf-8?B?UlIxdXJxWkJiOTVqT0NCSGpmMlZobFRhVDJLYk1BYWJhVG5jRjBNbFNkK3lk?= =?utf-8?B?bTR6WjZ3akM4Z3NmK3p1aDNpcUFZR04zOEJOUzlhREJKOTl2eGxqRUNWd3pl?= =?utf-8?B?QWs1MTZpUEtGdnJtTUdYelE4NWExakNmT1hiTmhVQm50dEtZWGpOMzlRaTJ4?= =?utf-8?B?VE1EUkdFRlpQL1cxdzN3UHRZazA1bGFvNnJZQzJMV3o5cHJESENPamtsYlpi?= =?utf-8?B?VEx0dWFLb2d2WXg1WWJodlFZQmlkN3c3bUhIQjRrUzFNTmJTMXFYUzZPNVpJ?= =?utf-8?B?d0k1blFZNUFKcnQzcy9wVEt2S2VuK0lEZ3lIS0QrVExWdGRBaWZWZ2RXc0pH?= =?utf-8?B?UFpqamdMMlhOV0NHZmcxc2NSY0UvK3p3SGtiMURFdTQzYnBQK2pzSld6QXlT?= =?utf-8?B?Uy9VeHRLOE9OVTV1a1VRays4VndLTFZFcnRCc2plNFR3S0YyVFZoY1N5S0c1?= =?utf-8?B?WEpqbXh1Z3lBeStrSEp3WU1zd1BuK0l0RXhjTnhJR0xBYU1EUmxnV2RDQ2N3?= =?utf-8?B?N0tEZm9qd2lIbU5kSVd4N1NpOFhxdnlXMEZuTC92Q3hnYlAxMlhNSHdIOHlI?= =?utf-8?B?TUszZkQrc0tzSUpKUjhya0szM3YzcjRHK3pvMFk5c2xqMUlRU0x0aHpBL2s0?= =?utf-8?B?c3JmQnhFejdDSXRrNmM1VHVOVU9Xa1BzODZiWjRCSVVPV0F1NFdIbTRmMVgr?= =?utf-8?B?bnl2OHVvTXpyQUJrMERjd3VNM2NHSnFUQ0ZhRDFVTU9OM1llcjUrcyt1VW9o?= =?utf-8?B?M2tLbTE4aHpmdFFQZXlmM1NNOWRyV3BVall0SU51UWZJQ0FTVENycXBHOVlS?= =?utf-8?B?ZVRvZGt5ZlpEd2RIaEtKOHgra2M1TnNab3A5Y3ZTTmNyWktaQlp5WW83R2Vi?= =?utf-8?B?elUrZXc5VnNFZ3FicDlTaGZleGhPN1V1Y0NYSDNxMk9ncThtbVhwWEpuUnRZ?= =?utf-8?B?dnFxK1U4MXFwVzVGUWV4R2NjUGtVeTZmYlZrNDY5S0YzZklZa1loMkJvVHRt?= =?utf-8?B?YTdWSWpLb1JUc2tMdE1kUTJHTHZJZHZQQ1RvVlZyYUZ6aDRONFZkbkkwVnB2?= =?utf-8?B?V21IQnFBeWhPeC9ENkUwU3dFL1JSYlFoK1J2NEdMSVlQRFQvUVZFNFMzeC8x?= =?utf-8?B?QnBaMit5OHo0bS9rNG93UXNhU1JNRXdVRFA1SEVUVkZRenpRTjZkWS9ORGJo?= =?utf-8?B?QjVUZ0NjRXpydStVVlQ1dDdldStPWXZCOGQ5OWlHS1FWTDVxbnd4TmxmNnZn?= =?utf-8?B?SEs4YS9qSGdWVFJRcUJ4azlLVGJCenpYeUM2QzBWREFOenA1aXVHWlRHUkFm?= =?utf-8?B?RkJHVUd6QzJGS29EU0tDcEdkVjVjeUNxRWs4c1BsWmEyc01kd05PRGNlb0hJ?= =?utf-8?B?QmVWMzhmSHhEeDZVaVo1S0xMZVRNaUxVWTYrZ2k2NTlIdzdsTktORFN5QjRu?= =?utf-8?B?a1E9PQ==?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: f4d2ef11-21fd-4582-671a-08daacfc9c36 X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Oct 2022 09:23:38.1393 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: KkrFMOwW9lAQ4BZfi3eO2Td8Pq1HrFX3+GUMjo1fbkZTXBS1yITdXR3668fMs/gU+rbvhNY/6pFpQ3GbWF15qU9Q29HMfVtoZTRjb069qXA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6466 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.14.123; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR01-VE1-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) X-ZM-MESSAGEID: 1665656165142100001 Add appropriate shutdown command arguments to qmp_guest_shutdown() for FreeBSD. Reviewed-by: Konstantin Kostiuk Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Alexander Ivanov --- qga/commands-posix.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/qga/commands-posix.c b/qga/commands-posix.c index 49f9996a9c..88e0d0fe24 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -90,6 +90,10 @@ void qmp_guest_shutdown(bool has_mode, const char *mode,= Error **errp) const char *powerdown_flag =3D "-i5"; const char *halt_flag =3D "-i0"; const char *reboot_flag =3D "-i6"; +#elif defined(CONFIG_BSD) + const char *powerdown_flag =3D "-p"; + const char *halt_flag =3D "-h"; + const char *reboot_flag =3D "-r"; #else const char *powerdown_flag =3D "-P"; const char *halt_flag =3D "-H"; @@ -120,6 +124,9 @@ void qmp_guest_shutdown(bool has_mode, const char *mode= , Error **errp) #ifdef CONFIG_SOLARIS execl("/sbin/shutdown", "shutdown", shutdown_flag, "-g0", "-y", "hypervisor initiated shutdown", (char *)NULL); +#elif defined(CONFIG_BSD) + execl("/sbin/shutdown", "shutdown", shutdown_flag, "+0", + "hypervisor initiated shutdown", (char *)NULL); #else execl("/sbin/shutdown", "shutdown", "-h", shutdown_flag, "+0", "hypervisor initiated shutdown", (char *)NULL); --=20 2.34.1 From nobody Mon Feb 9 02:08:37 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1665656460; cv=pass; d=zohomail.com; s=zohoarc; b=BN3IVPDIB56iqf/QjaXkmt6Vr/vGGAAOzzEkQfQwGDt9Cpd6X/RICzb2pAly9jDCR/ISYI/yO7UA7/npMiQoIFy6pnXjgn+6Pe02PlpbxxvVMNxBn2hbcXJHinIDv0dhQby88svg7e3mfNQ17nhHhgduJtWoEWwm5XaV4bSOLBQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1665656460; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=iT73yPip7Y9KrhTJdJ9NiMxOTh3MLqVE4NRIId7eC2U=; b=Q2JR0cHYcITYc4+gGB4L3+AM+y2ZlBwWTb2nVLqvbaqfdqU695ERZYp0GLhC+p7Z8yLXdcjE8IylBgT9FB5JpANykKGjvQZJ7gpMwkzydoAjiOoOBLNlpMiLdNTgBXZpyOY2INbYXMfGMwILWTt93niyoPJuwZv1BoPnBB3D0X0= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1665656460136592.0168313417208; Thu, 13 Oct 2022 03:21:00 -0700 (PDT) Received: from localhost ([::1]:36852 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oivKk-0001xN-RA for importer@patchew.org; Thu, 13 Oct 2022 06:20:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34352) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oiuRU-0002JP-AU for qemu-devel@nongnu.org; Thu, 13 Oct 2022 05:23:52 -0400 Received: from mail-eopbgr140123.outbound.protection.outlook.com ([40.107.14.123]:28929 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oiuRR-0004g6-Ls for qemu-devel@nongnu.org; Thu, 13 Oct 2022 05:23:52 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by AM8PR08MB6466.eurprd08.prod.outlook.com (2603:10a6:20b:363::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5709.21; Thu, 13 Oct 2022 09:23:39 +0000 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b]) by AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b%8]) with mapi id 15.20.5676.040; Thu, 13 Oct 2022 09:23:39 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Vhq04hOu6D+c6O9EgvoX1ej9HudCtb4N/r4Yg84op78mjkbJ/I0kZKyS7/TmTTCE7R8mp6S0Htl3nVv0SjLisQGWtdDgjSB2tUq7gx8XBtL4I1iu576z7ZZvKG0KRPwUmFp5m5h1m8dgN3Zzl/cJkiaqmoFI6IeuwEzdMFjC9O+H+q2vH/Nv6pJlawASYIulX19q5jrwV2NkjdneyPQaGNvAvb6cXh3CzqHYTJY3wY7K7/iZXeMyeVteJ8XX/PIz1sb8tg051vwggCDCGbt21FyqeUPgp4Fmt8HsFH1lj0S4xmXYQi6FuuOVJ1x2n65Bh9tOMO8tEt31HlwEtDuhEg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=iT73yPip7Y9KrhTJdJ9NiMxOTh3MLqVE4NRIId7eC2U=; b=enHoBXEIPQHoDzy4bVnPsrnjiu+BFd5jQ1dkT+TJyxIHgXR3zBEwI1qsZDTHpJt4/KocHeFEQqsCU/cOgRWGAyZp9BhqHqCFPYGj0pkxTeHQtdkOT/AgfEG6staokZ8stpXJ/kvWzirmbL+gEUTAifVfbkqMUf5AbF/omDdFj57BoxRjm1+ZNTgfq7+v+64NSA4dacUxYuYgtOm+NbeJ5uh6V1ZD+MWcq22BeNQkILO6JVrG0iRJVfF7Jb5SNAokYJ+i9afXnZfbx5G49I3wBdRyB6cTBXNIF8NMLCuEmwuW9I45jL6Wvo3AJu9OtDFqcFjJa3foLJUAilNK9/RSgQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iT73yPip7Y9KrhTJdJ9NiMxOTh3MLqVE4NRIId7eC2U=; b=ezCB8nJ/LYIT52E/QBt8tHX+n0OvbZsKX/pZVCZYex30nU5Ac496vGw4kAJ9gnuk1sfcMnR0T33IUMhdEEEYOIGjOy76+C4BNKjvdOnAUz+yFTm2SQBKFW9nYfLoxAxgAhuFezhlMFbANMvz8dxPATfbe7mhxK+7NR9biz+YUwXmfi9TzFz97MGdTY4qUrgMfGHOlv5jSAMtjya6E3ymlHeo4xoNc2UIYvLDx+CmIo/eec1mTn19WeYYZf3PR8ipx6wRD/HM8DRGGnHSZqEhiMqP/EbAx9gPn403zL4/AH0NIiY3Yfz5+1JqfTJX6QwEZnC9uS1Jsr/StVmAeFZiow== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Alexander Ivanov To: qemu-devel@nongnu.org Cc: den@virtuozzo.com, michael.roth@amd.com, kkostiuk@redhat.com, marcandre.lureau@gmail.com Subject: [PATCH v4 5/7] qga: Add support for user password setting in FreeBSD Date: Thu, 13 Oct 2022 11:23:24 +0200 Message-Id: <20221013092326.2194646-6-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221013092326.2194646-1-alexander.ivanov@virtuozzo.com> References: <20221013092326.2194646-1-alexander.ivanov@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR0P281CA0069.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:49::22) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|AM8PR08MB6466:EE_ X-MS-Office365-Filtering-Correlation-Id: 12e30ef2-abff-45d3-f99c-08daacfc9caf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: we0cty67ycuD4aWo5jy2KqzPy4HD/Gvi/gmEsPC+GCTOWbTMXRdbELGD9tw8ZTt9MYRLuzaT1EuGAR3zIkbxlGJiI3XsTK8bSUO00OLbtOvgsLjB68DQmKypt3/METrFY4v+zSLPqUiUn3m45P3GYvM4nDhTYizWUaMb7QdzKd53tq7QjbMz0fg7vJ25fGWJNbFBM6gI+tcQvlaPvE3PsM2a+9POtqazTszQJSIywslqXnWFJRKjXMP7VvGZ+nh+4tNCtrLCMXXZnPZ5xVJKCJjC4zch5tvghxXySPt5tSquJS0KtxjBU3Tb1YMsj5ZO9LZ9cm6zddReCVC8MTqwvvmCYJKnwPopYr19CNbWqVbOC+lvYHHk104g1RPcDe9pjBgndip7YUU1Bd5Mi5A5eB/5IaENyQSXTsHcReaXNwraU5Rbvn2R90gJRDW3tcQOmVMLebc8K0aZuxFDiGkjUp7ts40mzq6stObPsO9+L3W97H6+/KJYtcxNhzlRhY/r+YOaQULDxwlOKaY4YFjg4oS2/dpM488INr8jzN8gToBi3xY1wl+zlHYM6HY2qPFUeTvR6r5oXPHlYZJTe9cwM0wcz6RVbYi9Arx1KVWaAqrdqVk7ypwJ9eZPCs573tLGMQoSpn5q7u3A2MJIzhB68sGec0fsvG2b83laq2MG+33Gl/8NWdzWuGHHV/8U8/Pv8EMBlyGBOoGRwPH8dYTzmmhPUhwCND+pMCf3yoHvEnRtft04S5SAwmj65K7z/1jk X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR08MB7095.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(366004)(376002)(346002)(136003)(39850400004)(396003)(451199015)(36756003)(2906002)(44832011)(4326008)(6512007)(5660300002)(41300700001)(8676002)(66556008)(316002)(86362001)(6916009)(66946007)(66476007)(8936002)(38100700002)(478600001)(6486002)(6666004)(38350700002)(83380400001)(26005)(6506007)(52116002)(2616005)(186003)(1076003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?L1lKT21uK0dOWFNxS2UyWnhYRkc1M0t5akRJLzZGNmxNT0R2VlVpSWhUWUpO?= =?utf-8?B?TXdQOTROQlNFeGNCL0h4K04zb2lwUlhueU8waXFGcis3NFROdTMzbzNBcFJV?= =?utf-8?B?eFJxeGd0T0o4dkg1SVRHWGZ4SThrWVd6bTFIZUN6bHRDWnIveW1EV2hwR1hN?= =?utf-8?B?am4zb0c5VzV6cWlDUU53Z3oyZDdXbUQ4eDRuOGlrb2xsMFEwdGp2VEVIQkJQ?= =?utf-8?B?b0QzbG04T2JqNkVXMzgyQjJIajJKekM0bGVaWGxiNFR2SDJVZ1ZJWFY4ZWo1?= =?utf-8?B?bGdTWWI0OGEvS1hpcHI4S2o2SElNaXA4eXpDTFZRS0dsbE8yQ21zOEFHZXMr?= =?utf-8?B?eXFScytBamR2UUc5ck9pakRrNFY4RjNDeGNFNkEwVTlabi9MZ2JQMmtOcFRR?= =?utf-8?B?LzBMcW0ydTUvRklDWEFVZXZ2RWpaOXA1V2cvYW9sWkVzNVFaQlNoaHI4VlJp?= =?utf-8?B?YmNlYzJnWHhRc2tVZUQwY3RQWGl5RTBTZHR4WDFLeWJQblppcElGSml1MVZT?= =?utf-8?B?ZGxCTWZpQ0JaVUdFcTBNZ1FCZ0loTDhqNHU0WHlZaG5sVHQ3Z0RLdkR5cE9r?= =?utf-8?B?WHc3SjlqZlBXL2lpQzd1UlFJR1ZnWldUY2piZ2pNTXc5WlBINTJJdnRVVThV?= =?utf-8?B?TEpKVXQ3L0hHazMza3d1NXlEalVENW9Ta3N0djk0WWsxdkFZSktUVGppZ2R4?= =?utf-8?B?Zy82SHdRR0dsQUFTaCtGN3FENU14VUV0U05LSFFWc1BETlVta25Ccmo4dWZJ?= =?utf-8?B?aXM1VUh5dENJc1hXY1pVaFQ0WmFwUkNmUWFyU0RwdTZSbWdQWWFZSU0vdU1F?= =?utf-8?B?dWZlaG45a24ydS92amJEVVIxNXlXcW5paGZteEVWakZXTzRIKzJYWTBJZ3Vp?= =?utf-8?B?d05WSjlBVTIzeXRoNjJFUzJPMnVYVG5HaDBEOVFGdThrOWgxbEpyN1kyWnBq?= =?utf-8?B?S2xudlJJNlVaTzEzSEZjTkV0L2REU000MkxLYklGZy9oNCtUVlYrb2hWd3Vh?= =?utf-8?B?ZWNsYVIvKzRVNDdrTit0TGx6cWw1WE0xKzlMTUNDdGwwSVllM0NnbTJDOE9O?= =?utf-8?B?aEVlSkNZcUFoZXdlM3IrNTc0TmpVci95VC9LL2hjT25iK0VVanVoWldDZ1lE?= =?utf-8?B?QnBaWGNGN3RrdUUyK1Y5N0ZwWUEyNEFZRUUxSzREbW9UOWZESzBkL05HQ0Fq?= =?utf-8?B?ak5GYWNZVUMzUFpJOUN3Szl2ZFVmdkxtOCtySUw5U09CQlp1d3piNWNSZnZO?= =?utf-8?B?Wjdsc2I2eFl0Q2kvNVA3aG1hZEV6Q29janZwZnE4emJYaVFHbU5JTUl0TjV0?= =?utf-8?B?UkJLeFZhMjhIT2JPdkdEZlVDYklHazZhVlkzaVcxQ2ROSU9WVWxwV09LKzRJ?= =?utf-8?B?WlpibGxKOGZIZFR0bE1GRWJUUjkxbzdxR1pCTWQ3cW1TM2dUamFqaWVZRE5T?= =?utf-8?B?Q1dDOXhHN0RFSVNldHB4UjVzTGplVlF5REw0OFZKVHhTbkdOZkxsZkxPMmdz?= =?utf-8?B?OUUrQUNmaHhLc0dMZG91cC93MXNON0hiZGdrUTZwL0NPbFBxczk1Uk9ySkN5?= =?utf-8?B?cy9wbXQ0bmprQkZHMGdBUzJXcXB2MVcyb0RxbGhlL0lPVFlSREJqZVNKRGFV?= =?utf-8?B?ZmJhK3J1NlZpTytSNkQrQXc5Z0RYRlB1ZHovdUlLYks3V3R4M3dyQ1ZWQjlu?= =?utf-8?B?MGZBbUdZdXpXM0VYR3g1aGhoWlJLaDRkQkh3dFJadEZBdi9lWmdvTmxId0Uv?= =?utf-8?B?dU4wd293cG43MDhLcDdjY2pQc0lxeGplb2lhSzVqb1VvVTc1TjliN2EzN3pI?= =?utf-8?B?US9ZZTVJTUhUVHhOa1MvcTRCekVOV1l0anJZQi8ybkZhVVhkd2t3RUF3UTdY?= =?utf-8?B?UnpzL1M5d0dBU2hGZ2FUU2U3N1ZQUWVnbEZMWnRNQUt1MlRDbXN3cjNpTitE?= =?utf-8?B?UG9Obk8vam00ak5oR2RVV2tuZFlHNFRHaGFWS1ZjNE13UXpranBiYkJyNFFw?= =?utf-8?B?aTNZN0dueTNLWWZrVWJ3SmhKT0JVdGxlcXd6bkgrLzRuTlB3Q25YWHNxVXNS?= =?utf-8?B?cTJiUCsxV3hYMlpvdnFTQ2Q3UjEvNDJjbHR2SVFGRkI0SS9Ib2Y1MUpqYS9y?= =?utf-8?B?WG1HdDBuZXdMRjhMVTd1ZHk0L3c1SkIvU2RPQTZ2N3QxakJLdW5WYUh0d2hy?= =?utf-8?B?QkE9PQ==?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 12e30ef2-abff-45d3-f99c-08daacfc9caf X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Oct 2022 09:23:38.9675 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: gx3+qW/IhZv1NTGFlZC3EajunSxJ5IB0skIl4Fnnbn4ZKuzrS4qeedMqs4oE1h6OnjseWSbeyNTLi63eMU0OkcnsYBtLYIPVZgvaqYYK8oc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6466 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.14.123; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR01-VE1-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) X-ZM-MESSAGEID: 1665656461411100001 Move qmp_guest_set_user_password() from __linux__ condition to (__linux__ || __FreeBSD__) condition. Add command and arguments for password setting in FreeBSD. Reviewed-by: Konstantin Kostiuk Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Alexander Ivanov --- qga/commands-posix.c | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/qga/commands-posix.c b/qga/commands-posix.c index 88e0d0fe24..f5b9e5c530 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -2122,7 +2122,9 @@ int64_t qmp_guest_set_vcpus(GuestLogicalProcessorList= *vcpus, Error **errp) =20 return processed; } +#endif /* __linux__ */ =20 +#if defined(__linux__) || defined(__FreeBSD__) void qmp_guest_set_user_password(const char *username, const char *password, bool crypted, @@ -2156,10 +2158,15 @@ void qmp_guest_set_user_password(const char *userna= me, goto out; } =20 +#ifdef __FreeBSD__ + chpasswddata =3D g_strdup(rawpasswddata); + passwd_path =3D g_find_program_in_path("pw"); +#else chpasswddata =3D g_strdup_printf("%s:%s\n", username, rawpasswddata); - chpasswdlen =3D strlen(chpasswddata); - passwd_path =3D g_find_program_in_path("chpasswd"); +#endif + + chpasswdlen =3D strlen(chpasswddata); =20 if (!passwd_path) { error_setg(errp, "cannot find 'passwd' program in PATH"); @@ -2180,11 +2187,17 @@ void qmp_guest_set_user_password(const char *userna= me, reopen_fd_to_null(1); reopen_fd_to_null(2); =20 +#ifdef __FreeBSD__ + const char *h_arg; + h_arg =3D (crypted) ? "-H" : "-h"; + execl(passwd_path, "pw", "usermod", "-n", username, h_arg, "0", NU= LL); +#else if (crypted) { execl(passwd_path, "chpasswd", "-e", NULL); } else { execl(passwd_path, "chpasswd", NULL); } +#endif _exit(EXIT_FAILURE); } else if (pid < 0) { error_setg_errno(errp, errno, "failed to create child process"); @@ -2227,7 +2240,17 @@ out: close(datafd[1]); } } +#else /* __linux__ || __FreeBSD__ */ +void qmp_guest_set_user_password(const char *username, + const char *password, + bool crypted, + Error **errp) +{ + error_setg(errp, QERR_UNSUPPORTED); +} +#endif /* __linux__ || __FreeBSD__ */ =20 +#ifdef __linux__ static void ga_read_sysfs_file(int dirfd, const char *pathname, char *buf, int size, Error **errp) { @@ -2764,14 +2787,6 @@ int64_t qmp_guest_set_vcpus(GuestLogicalProcessorLis= t *vcpus, Error **errp) return -1; } =20 -void qmp_guest_set_user_password(const char *username, - const char *password, - bool crypted, - Error **errp) -{ - error_setg(errp, QERR_UNSUPPORTED); -} - GuestMemoryBlockList *qmp_guest_get_memory_blocks(Error **errp) { error_setg(errp, QERR_UNSUPPORTED); --=20 2.34.1 From nobody Mon Feb 9 02:08:37 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1665654185; cv=pass; d=zohomail.com; s=zohoarc; b=kNhaEnxgWZGQm77HaxwiILhwiewa1BnXBHSiUHL350i0OQpE6f30IHSyhs0hXbagU7Fk4RMMZCCV//u9nUkh00NROolQ2G8mpp2OF5hm/WaoGGSnqhfuofs58AN3nrIhB0hAZgrbgJCY8abVyMSTlV0v4REcB7pgUJzUVRjsuFI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1665654185; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=vH3fbWs6m5SwLq6wrkYI4EghiwTsdYD/b7xbrn6+BCc=; b=Tlwl2+AwXxfDZRdPZZJ3Z68OefaObmk+KA5UVdMfUGY5pBohLvNEnIfZuFGysQz2nZYg/XO8e1l6O5pKyBeGegPMHipEDqqnnTh58HzlCJ54O/3wIGb8yEXqGaJfneX3yaKKO9D2D44fI2Y84/NMfCC6xIBqVEVg+zfS66st4rc= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1665654185071183.75515268708898; Thu, 13 Oct 2022 02:43:05 -0700 (PDT) Received: from localhost ([::1]:34222 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oiuk3-0006px-Tm for importer@patchew.org; Thu, 13 Oct 2022 05:43:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34354) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oiuRW-0002KE-K3 for qemu-devel@nongnu.org; Thu, 13 Oct 2022 05:23:55 -0400 Received: from mail-eopbgr140123.outbound.protection.outlook.com ([40.107.14.123]:28929 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oiuRU-0004g6-LY for qemu-devel@nongnu.org; Thu, 13 Oct 2022 05:23:54 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by AM8PR08MB6466.eurprd08.prod.outlook.com (2603:10a6:20b:363::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5709.21; Thu, 13 Oct 2022 09:23:39 +0000 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b]) by AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b%8]) with mapi id 15.20.5676.040; Thu, 13 Oct 2022 09:23:39 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RybOU+TMjgRfyC0Fy4xt+sWgIZWj9ZFq5qH99Jm+CiMvmHTL/dXQ+DSDUH3JXagWjzj0DMNbC/KionrL03wmyHyqQrMy6YCdz8GgRSVx3ikZVy6CEmtvbuSFaeDck9YupodnQAMEelthylnbnp0gTDWpAfJT2+krh0e5PPHaHWESfnLDU2+/V6M7uR10sT4DNsgE8kZwNeYYX7/Tt5CxJO5XW6aYH2jQdDS8OqVAq/AlOy8WmdypCN9EKWfXbZf31k0ruoTXrEX85ZXBZV5XWSeMxE3RdJ9gRLqtJhOhq3C/ymx1c3EHm0spQmTsIZBZ6LfjwvkGDAZh0byB+K8noA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=vH3fbWs6m5SwLq6wrkYI4EghiwTsdYD/b7xbrn6+BCc=; b=JP/ouK312SkW92j1BHPxgGIhEpPUhV1qWn2twpfM9iNfjOBnxvhdUGONQSvHfnqFBJxgrXAEsa4IQl0xL5cY6i0+NTvb5FSZDMrjcrBXmegDyn/HxI/igbFSgZ/i64LH1s+VhfKx/AdQa6GnhfujhtP5rm4lBVCyuMON5EQ6/Wt2lHK+DGry6MffEcgISWaz1UEOnp6iwxavqDNn9ySkgI68dQpY6eDk8Yw+NtXpVJDT7aGYJAzka46UtjLygYTVmGJsQ1kmv5wfZY+fS04ClL4nB3xLXFUIQ6VRincKTOQlkDIp/GSeEu/K+7rsN21xKHBNM0JwN48m5nqIUq2ZKQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vH3fbWs6m5SwLq6wrkYI4EghiwTsdYD/b7xbrn6+BCc=; b=b19HqBMcbbf0d8gLqAIbawW75d0AUGZScDBtcMvexY6ssVgpd5Z2Q5WKBo/ms7WawomF9M7SFJpfCQ8mCKQctBRL1n88X+zv+RJJKBPbjK4RiOdOIAJckNX8CDtLt1ngLN54+ab09KnLmEfwPGeuIQU/U5Et5k9bawGzvyuEUauPARSqFSN+o4H8+I3Mpv8oba9Q74Gu8NN/BLuFHzycXEFfmDLrtC4ndI+TmfNZqKoZqg/hv3Dp0XMS9ftvAvLe4PYwOWdRJ5RdbHs7kFoX5X7VjafvqhhCNKYqHuNWFITgBksGqUQticigurt6Qw4jMh2gTckkad4MVUZV97G8lg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Alexander Ivanov To: qemu-devel@nongnu.org Cc: den@virtuozzo.com, michael.roth@amd.com, kkostiuk@redhat.com, marcandre.lureau@gmail.com Subject: [PATCH v4 6/7] qga: Move HW address getting to a separate function Date: Thu, 13 Oct 2022 11:23:25 +0200 Message-Id: <20221013092326.2194646-7-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221013092326.2194646-1-alexander.ivanov@virtuozzo.com> References: <20221013092326.2194646-1-alexander.ivanov@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR0P281CA0069.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:49::22) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|AM8PR08MB6466:EE_ X-MS-Office365-Filtering-Correlation-Id: b907b779-6266-43d4-6344-08daacfc9d27 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: eevKZ0K0itz/tRTCV6ecTqdwekw/hTntfPPMBj0Pe7mTb3jJy7C/O6KxZfgKsHVuFke+f0TyMXkv0LgaOUOSJSSi/O0zfx0phbPDU8mXCwklooXb3IVUAuSTHFX26GZ2ByjCI0H8dCD4jEUj5vM8cffPBqMgVeWMlqRXXiN9yFUElKLxf8Lzqnka/nd+Bwgjc1MNuigxRW+elwi7Sps1RBM5Pj3SmNf7gGYtPv3bXYmdsK0Qj+em32t0M9qx+/CgY5Zr+B4o6gD1i6CQbk9dO9FnshOCnjaI02Ec6XLsbGMiBzINxfEUqxP549jcry9rtREq2RMEClDuW0htnZPp/kVRLb1gQRbVWjcrB/dBrIZsdw+/IBHjsRy+8lY6GmnPrVZvNyi52PhqlYKqAnPER+XFI8u+G7sQGf8Xyk9EdKZeUajSxV7gcg6dlmJ7o4jLoOYT2Y6TCzW4JBBmq0sF1YmObohruhJksRIL+pf2PyUQP0B///cNfIHgmr68DSiEfAK5ZlGpyh/CNRrVO15iVjPj6uI+s2oM1SSoykwwAa75I5IQhnD+p5hdiPNnwtyP33bnnC1PCIhcR0W53VemQSXXlACvnxchPIJbpg44d95nolOTTdTLwmqvZfItXv4XnQZyCJ/5nBWqPhUz/cPMeKwURipOVxpEr7vQKQXG9mRlr+7rt+anBsCc4PAh96XXwOaEapFI6tCI2mCHBr9KY0vcLa7rkCVykFPFDfzLdijC36YlyoN5UyethCk/uOyg5KGQcVq4OuFiMToO8KdTyw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR08MB7095.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(366004)(376002)(346002)(136003)(39850400004)(396003)(451199015)(36756003)(2906002)(44832011)(4326008)(6512007)(5660300002)(41300700001)(8676002)(66556008)(316002)(86362001)(6916009)(66946007)(66476007)(8936002)(38100700002)(478600001)(6486002)(6666004)(38350700002)(83380400001)(26005)(6506007)(52116002)(2616005)(186003)(1076003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Y2g1ZGhkZXJ3ZElmREs1ak80RTNoY3FacmRoRS9wTi8wWVZEaUVEeUlERXNE?= =?utf-8?B?eTJseng5U0Y3VUdOQkxzUGFMOFQ3T0kwVFVjTTViT0pIeVo3bnhnZmVEbjNF?= =?utf-8?B?MnlINkhjVkE5SEM4U0FoZ3N3L0tzUVpmWWNFVHZVbDB5Y1V3Y0NiT2VMdE1o?= =?utf-8?B?a0xNOEtvSmFuS2JGQ3k0L2dzdFI3RGM3OGdkTkRaSGFraTBnaGRTbUR6L2tq?= =?utf-8?B?dnVFU0c1ODZ0Zit2SmFCVXozSGlZTVNKKzY2SkZwOHY2Ynd5T1hTU2ttQ1J3?= =?utf-8?B?Z1BuZERFNFBqaW00NDdTeFhBNHNyb3dmcGw2K0pkdTZBTFh1Q1V0UDVoV29S?= =?utf-8?B?cE9ZYTlBQW41a2tpNFN0MXJ5RE12TWMxbG5xazdOK2ZNUzc3TkQ5dUhoQWF6?= =?utf-8?B?RHAvbW92OFFyQUtJRjZ4NXFFempNNFk5RURObWRCRmE5Rmc2WE1BSzdMb1dJ?= =?utf-8?B?RHFwYytiL3IwWVZIRkRLMCtEUHN0bFZxWEZ4MkxheVdtUUZsVk9XL3QxSnVj?= =?utf-8?B?Z0tiRXVwNnRxUjZIZmpDcDBtd3R3b0FIMm91OTAxWldNN05FNTFrS3gxOFQv?= =?utf-8?B?WEdkSkk0YVVxNnJYWG04dkwrNEVsLzBqM2JxTmVob3p3WXNjby8xenVQNTlQ?= =?utf-8?B?a3BSN0lnVWFRZDhIelF1RlN1Z3FCakdPTUNxOGlZYjFtSEVrZ2xiWjZyRW9Q?= =?utf-8?B?MWFhY2N0VW5YNlk1ajRxTGU0Q0c3Y2Zzd3JXTXc1b3g3cUJpSWk4c0ZJeEtC?= =?utf-8?B?MWxsZHROY3JEMlVoTjZHU2pJcHFGQWtaamE0SVpsRHBxbGNBTE5LRTlsSXI2?= =?utf-8?B?TjZoNE5PUjhpZktrWjZ5QlRTVElIU1NVUDNTYytBR1FkYm5scVlhbTl5K3hp?= =?utf-8?B?b0ZGbDdtUUx4dnVuOGtRTFpKdjkzaXBzbHFiZFVCNGp0QkNaOUdadzNEVW8w?= =?utf-8?B?cXhEcGFxNHFTZllja1hYN2I1WWc1Nmw5S0x1YlNoVTJDSlc1bnpHV255R1ph?= =?utf-8?B?c0t0eGE3bDRnN1JRUWlNTDAvazNnUjIycFdrTnhMajBDZjdVTGowT1RCKzRR?= =?utf-8?B?eE1nWjBrSmppUC9jSVU3NTE5S3AvMWJ6QlpKWTY1UTBHSDE5MTR5WnhqZ3Ra?= =?utf-8?B?OE4rTnFLVjh3a1hSZjZubmh4V0xlMGI4dWF3Ky8ybkdoWFlhQW00SDFlR3pB?= =?utf-8?B?ckhWMmE3dThQNEp4ZG5CU0FBcVFyK0NsWTNDaytIR3lFM0JIelhVeWZTY2Ur?= =?utf-8?B?S0FSQzJuOUtSNCtoNGtWdHNiVVBBcDBPejRwekVwdFcvSVAvdzdxYzVCUzV0?= =?utf-8?B?NTBsNGtJZG9pcHJzbDQ0R2dLaEsrQWM5WHNBdVJBVnkwS1FEODcwczJMSGpJ?= =?utf-8?B?a2dFN3NvblJjYUZLeUpuZERWcmlDWE1rUzFKWmdJVHpaTG45RE1ielgyN2hu?= =?utf-8?B?anJDU1lnWE8wbFRsajRiSmNkcHp1TUgyYnhIMTJCYTJPeWNMUDFsOVMyeUFY?= =?utf-8?B?R2lpRkVrVjNjcjZrMnIybUdEcjRsY3R2aHgwbUI2ampEMHNWVEVxT0g1SW5J?= =?utf-8?B?QkYxL25UcXcrQmpDOFFBUm1mRUU5VkZaN1BtWnUyR0UvdlpZSkhBL000RUdz?= =?utf-8?B?S2VaVGNmZUx5akh3eXdZTFl1VmlYUmk0djN6Nks0WkZLSGRYQkVBMjZrekJM?= =?utf-8?B?VWhXWVRxaFpaTjNPdnJyeFE3R1AwdUVESTU3V1NQeGcxNEtJVG9lbVVHNFor?= =?utf-8?B?cCtiNHBzUXpkR2JlaFY0dXlabTVsZ0xoTUxUcWVsWWRHMkxGQXFuRlFhN0hE?= =?utf-8?B?TjNKcVQ1dnhHVXltSFVWUFZRZTVXbzVJUE05OUV3SGJ0SVl0TnpldzhvbTc4?= =?utf-8?B?Rld1UGg5cjdQTm1RbWpkMDlBSmNib2tmdDZEZFNEYnNyVmROYmFJeFpXeWlz?= =?utf-8?B?Z2E1QzlzSzVWNlh3Zk1hcGJNN05vYWlwTFV1cmhDOXEyYmdNTzlXVWxhbGVZ?= =?utf-8?B?OTBwb1RNb3p1cERSNGt1VUlkLzZia3lMOWhFU1VHa0l1WUs1S21uMFgydHZT?= =?utf-8?B?T0tJdkV3NS9xUkplNFQwdVVQeEdnODhEOThmbmQySEZhN25uVVM3VEJTU3Y4?= =?utf-8?B?QUVBcEJiYU4wdmMrR1A1ZUxUalRnWk9pa1dMd3VScHQyRlJQWDQwcHovbzlV?= =?utf-8?Q?sOKF1JMto7i2871lnnvRCcc=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: b907b779-6266-43d4-6344-08daacfc9d27 X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Oct 2022 09:23:39.5624 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: LwRR3iXNL/tGgDN2ogMxm34Ke4iCg+yrqPzLyDgSCDOBuHIDZsYr/kTLu1yUKbxMQ+Q2cvq9elktoFzceBGZIf8FAk4S1a1wQPSEyf22ueQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6466 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.14.123; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR01-VE1-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) X-ZM-MESSAGEID: 1665654186249100001 In the next patch FreeBSD support for guest-network-get-interfaces will be added. Previously move Linux-specific code of HW address getting to a separate functions and add a dumb function to commands-bsd.c. Reviewed-by: Konstantin Kostiuk Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Alexander Ivanov --- qga/commands-bsd.c | 16 +++++++ qga/commands-common.h | 6 +++ qga/commands-posix.c | 98 ++++++++++++++++++++++++------------------- 3 files changed, 78 insertions(+), 42 deletions(-) diff --git a/qga/commands-bsd.c b/qga/commands-bsd.c index ca06692179..ebf0fb8b0f 100644 --- a/qga/commands-bsd.c +++ b/qga/commands-bsd.c @@ -167,3 +167,19 @@ GuestCpuStatsList *qmp_guest_get_cpustats(Error **errp) return NULL; } #endif /* CONFIG_FSFREEZE */ + +#ifdef HAVE_GETIFADDRS +/* + * Fill "buf" with MAC address by ifaddrs. Pointer buf must point to a + * buffer with ETHER_ADDR_LEN length at least. + * + * Returns false in case of an error, otherwise true. "obtained" arguument + * is true if a MAC address was obtained successful, otherwise false. + */ +bool guest_get_hw_addr(struct ifaddrs *ifa, unsigned char *buf, + bool *obtained, Error **errp) +{ + *obtained =3D false; + return true; +} +#endif /* HAVE_GETIFADDRS */ diff --git a/qga/commands-common.h b/qga/commands-common.h index 2d9878a634..05d1f7ccdd 100644 --- a/qga/commands-common.h +++ b/qga/commands-common.h @@ -56,6 +56,12 @@ int64_t qmp_guest_fsfreeze_do_freeze_list(bool has_mount= points, int qmp_guest_fsfreeze_do_thaw(Error **errp); #endif /* CONFIG_FSFREEZE */ =20 +#ifdef HAVE_GETIFADDRS +#include +bool guest_get_hw_addr(struct ifaddrs *ifa, unsigned char *buf, + bool *obtained, Error **errp); +#endif + typedef struct GuestFileHandle GuestFileHandle; =20 GuestFileHandle *guest_file_handle_find(int64_t id, Error **errp); diff --git a/qga/commands-posix.c b/qga/commands-posix.c index f5b9e5c530..787ffb1562 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -41,20 +41,12 @@ #endif #endif =20 -#ifdef __FreeBSD__ -/* - * The code under HAVE_GETIFADDRS condition can't be compiled in FreeBSD. - * Fix it in one of the following patches. - */ -#undef HAVE_GETIFADDRS -#endif - #ifdef HAVE_GETIFADDRS #include #include #include +#include #include -#include #ifdef CONFIG_SOLARIS #include #endif @@ -2889,6 +2881,57 @@ static int guest_get_network_stats(const char *name, return -1; } =20 +#ifndef __FreeBSD__ +/* + * Fill "buf" with MAC address by ifaddrs. Pointer buf must point to a + * buffer with ETHER_ADDR_LEN length at least. + * + * Returns false in case of an error, otherwise true. "obtained" argument + * is true if a MAC address was obtained successful, otherwise false. + */ +bool guest_get_hw_addr(struct ifaddrs *ifa, unsigned char *buf, + bool *obtained, Error **errp) +{ + struct ifreq ifr; + int sock; + + *obtained =3D false; + + /* we haven't obtained HW address yet */ + sock =3D socket(PF_INET, SOCK_STREAM, 0); + if (sock =3D=3D -1) { + error_setg_errno(errp, errno, "failed to create socket"); + return false; + } + + memset(&ifr, 0, sizeof(ifr)); + pstrcpy(ifr.ifr_name, IF_NAMESIZE, ifa->ifa_name); + if (ioctl(sock, SIOCGIFHWADDR, &ifr) =3D=3D -1) { + /* + * We can't get the hw addr of this interface, but that's not a + * fatal error. + */ + if (errno =3D=3D EADDRNOTAVAIL) { + /* The interface doesn't have a hw addr (e.g. loopback). */ + g_debug("failed to get MAC address of %s: %s", + ifa->ifa_name, strerror(errno)); + } else{ + g_warning("failed to get MAC address of %s: %s", + ifa->ifa_name, strerror(errno)); + } + } else { +#ifdef CONFIG_SOLARIS + memcpy(buf, &ifr.ifr_addr.sa_data, ETHER_ADDR_LEN); +#else + memcpy(buf, &ifr.ifr_hwaddr.sa_data, ETHER_ADDR_LEN); +#endif + *obtained =3D true; + } + close(sock); + return true; +} +#endif /* __FreeBSD__ */ + /* * Build information about guest interfaces */ @@ -2909,9 +2952,8 @@ GuestNetworkInterfaceList *qmp_guest_network_get_inte= rfaces(Error **errp) GuestNetworkInterfaceStat *interface_stat =3D NULL; char addr4[INET_ADDRSTRLEN]; char addr6[INET6_ADDRSTRLEN]; - int sock; - struct ifreq ifr; - unsigned char *mac_addr; + unsigned char mac_addr[ETHER_ADDR_LEN]; + bool obtained; void *p; =20 g_debug("Processing %s interface", ifa->ifa_name); @@ -2926,45 +2968,17 @@ GuestNetworkInterfaceList *qmp_guest_network_get_in= terfaces(Error **errp) } =20 if (!info->has_hardware_address) { - /* we haven't obtained HW address yet */ - sock =3D socket(PF_INET, SOCK_STREAM, 0); - if (sock =3D=3D -1) { - error_setg_errno(errp, errno, "failed to create socket"); + if (!guest_get_hw_addr(ifa, mac_addr, &obtained, errp)) { goto error; } - - memset(&ifr, 0, sizeof(ifr)); - pstrcpy(ifr.ifr_name, IF_NAMESIZE, info->name); - if (ioctl(sock, SIOCGIFHWADDR, &ifr) =3D=3D -1) { - /* - * We can't get the hw addr of this interface, but that's = not a - * fatal error. Don't set info->hardware_address, but keep - * going. - */ - if (errno =3D=3D EADDRNOTAVAIL) { - /* The interface doesn't have a hw addr (e.g. loopback= ). */ - g_debug("failed to get MAC address of %s: %s", - ifa->ifa_name, strerror(errno)); - } else{ - g_warning("failed to get MAC address of %s: %s", - ifa->ifa_name, strerror(errno)); - } - - } else { -#ifdef CONFIG_SOLARIS - mac_addr =3D (unsigned char *) &ifr.ifr_addr.sa_data; -#else - mac_addr =3D (unsigned char *) &ifr.ifr_hwaddr.sa_data; -#endif + if (obtained) { info->hardware_address =3D g_strdup_printf("%02x:%02x:%02x:%02x:%02x:%02x", (int) mac_addr[0], (int) mac_addr[1], (int) mac_addr[2], (int) mac_addr[3], (int) mac_addr[4], (int) mac_addr[5]); - info->has_hardware_address =3D true; } - close(sock); } =20 if (ifa->ifa_addr && --=20 2.34.1 From nobody Mon Feb 9 02:08:37 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1665653513; cv=pass; d=zohomail.com; s=zohoarc; b=ZxmtCALYq1pitHqWWRHw3lMhv/yT1MIxllJaeUIru2/GVcoomOGCcay4HJ6xArWvsYX+QjiwZpDA1bHW9BLDx79tNTK0A7drdyq0DKtBhX75GWSuHY/cvXCvyiLp6IcfjvMHJ9S08QQbsq8dQxSUpJ43yokJCUTfofeJTrWULbs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1665653513; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=gxxmbxAcZk965Xpx44CaaKqYjArE71BENpKHlF/1fPc=; b=BVfFrEkubTAktfyH/AFNYXXeAIPLwJZtAz7XMeNF/K8RQwy/KCQp7jcO2Qm2EIESt419nq7uWv8Osq68/7ZtwywQWjIUf1Tek7vsjWOB2WMrnAv0NFwxv6Fytr6e7aTLC2E/oYzqlcV2GM4lBITxPvqV55ExIvcWu0ihfTFkJm0= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1665653513043812.3093055613488; Thu, 13 Oct 2022 02:31:53 -0700 (PDT) Received: from localhost ([::1]:43118 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oiuZD-0007kn-HM for importer@patchew.org; Thu, 13 Oct 2022 05:31:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33448) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oiuRa-0002Ll-DD for qemu-devel@nongnu.org; Thu, 13 Oct 2022 05:23:59 -0400 Received: from mail-eopbgr140123.outbound.protection.outlook.com ([40.107.14.123]:28929 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oiuRX-0004g6-Tt for qemu-devel@nongnu.org; Thu, 13 Oct 2022 05:23:57 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by AM8PR08MB6466.eurprd08.prod.outlook.com (2603:10a6:20b:363::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5709.21; Thu, 13 Oct 2022 09:23:40 +0000 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b]) by AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b%8]) with mapi id 15.20.5676.040; Thu, 13 Oct 2022 09:23:40 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JcciapBzLuNKsRW0JRlO6csm3SrZ9img6WyiseARORedqnsdDXxameDx2R/CyCoO/Q/s3Cm37a6qamS4Sp1iABdy6p4OenMp0KTOawxV9inQ1NEMg/0v1bBtkptgliT4zas9ga1c3WGxGCZbReg6JAFJAOKH9Ijz5qxPfMFS3bHVM1rlqwgNmrcP6cSr3A9tlNK/mFCXmJIOlWZckZnpOegr7U5idiMXNcr51pimYWcc2RyOsF4iu0BehexAe/5ZEpdLgp72iTYhDXt+KxbBKRWXIireTlqf+N5YScsgrnXHUX8mFocS49LLYRuxgz8eaxxppRZv8PZSy0D47oUpHg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=gxxmbxAcZk965Xpx44CaaKqYjArE71BENpKHlF/1fPc=; b=Hbg6909E7NWtSNzcVF4PByKzN4ueHl55KxdFniyid1WF3upHJhJugNVwVSByhLVq8sWaSNQOf+Vs/klpFSm5tsXcxc8Uerouui2mH81Zhg5ylmBVBF04mso1JYJC9kUzaQHHezcbUxFER4aV+cO9GHs1AFDjxoRYKjvhtk3x4cOlcSoEL1kAoA1oSo47svP0VQftDlWVDwSx8BG+sNcu8fQHP+SWv6m7Avnw+RRJm95XJooy1sVx3YtbWkJDpOFsJXRF7ctBhuV37s4xALqlp3HZb38kIbN0f9HyDEHGqvBXFpeE/3SguwisyQZA7H+ax25soOMr3x39pyiFJxhcrg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gxxmbxAcZk965Xpx44CaaKqYjArE71BENpKHlF/1fPc=; b=EbueDlinO6p8g7IuOxDMc2REII/o1t7ikKgH7xZFKVrwkVyQVf7nr3SnignppVAPDc3GlrQF20kFjTqqD1De6X4I3HEnOcs/KUBW+bg06n49yIxVLal64+60z8EZJqwDfSKMZHywPGutEz42q6ODqgoXy8wd45ywuB1uvcCpMyJ7zXmkqksZVfjqNl3D5ktOGoan8IqXAnqmqnRQUTiNKMqHkVzJ9/fvCkzcVjLUBqOalUGdPmt+qB0YtK7aoOwT9lurnlmuYo6N61vwYN0d0i2PJSKqwgZr6hQed/LAAFZmue0A67YiKvKMuW4RNCXn8nbpF2qOrXl4eClcR0Mx5Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Alexander Ivanov To: qemu-devel@nongnu.org Cc: den@virtuozzo.com, michael.roth@amd.com, kkostiuk@redhat.com, marcandre.lureau@gmail.com Subject: [PATCH v4 7/7] qga: Add HW address getting for FreeBSD Date: Thu, 13 Oct 2022 11:23:26 +0200 Message-Id: <20221013092326.2194646-8-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221013092326.2194646-1-alexander.ivanov@virtuozzo.com> References: <20221013092326.2194646-1-alexander.ivanov@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR0P281CA0069.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:49::22) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|AM8PR08MB6466:EE_ X-MS-Office365-Filtering-Correlation-Id: 09540233-3558-411c-1f58-08daacfc9d89 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: wbZLJNcSnhXIbLr9RHFKETFSr2YLqiHaj0Mlvy4NIGGUoWMJuHSmvArh33RIkvM/7K0CcvHVmRa1RWfFwDD0+wwxVur6siXUSH9M+P/WKq6bM6zpP+XcLqhBIfailztRDLWmtoleX1MKoRbV0G6ibC2AVPOQjRx/P5KeO4WwamcqqkdNa3vWG+j3ZZY5cIL2saMkAcxKridym7teprL6ZSvTa+9qoDRYPW/USMgdl+9xhvvHjR8T8mFw/kzhF7xjEo6Gn0MpRv29nBRvFDE+86mxyytvsu2A0wRlVBLBkn2suY+CM1g+LMgmqMhB2tiSg/GhmGeqXlcVEJNyAzNm2u+WNzCtnvbto7EkOSGMYqVmcuZOiLBD+2zHNIdA9f6jyr05rWf4HaCNqAwsCMe0Qac0yXVCQYqbKPxcg3Fw/XsQ5jeimjxeiYmCLRrbaBeVMQG0WK2UJi5fq8Li/TEpSPHX+CvItNYQ79xwKfWHY2ZjphWC0QxLcTvX3edT+aXbV0FAZ92Sp06+iXvHqYo1GHtPuetLw1o1BNg1wcVd5Tu4ao/l7gV8kDh5LfI9AtBsqZwJZ8mzCEU8bPh/huqm09Qhus1hXxMBwtIVW1DIo+lshef2IXTbx0jF9disH+bReeWYjGpqFBBA0/sS7LLC9QUf4Q3DvTKX5da3OUXUD+TZ0rcv8d/zLQJpGcFUHSW3YZCLFhxa9RfbVO70u+dN4zjOkko6de7C38TI4bjIk35qaDusFChS3rmod2p9x1PShBXuDANhU+SpHp5eRWGhjA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR08MB7095.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(366004)(376002)(346002)(136003)(39850400004)(396003)(451199015)(36756003)(2906002)(44832011)(4326008)(6512007)(5660300002)(41300700001)(8676002)(66556008)(316002)(86362001)(6916009)(66946007)(66476007)(8936002)(38100700002)(478600001)(6486002)(6666004)(38350700002)(26005)(6506007)(52116002)(2616005)(186003)(1076003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UXJzTUJibG05U3lORlBJeWNCZkhDMTYrTFBOeTFVTjAvKzlwSnBaWW1nVDc3?= =?utf-8?B?bVVPV1FZa2hVd2RTK0Q0V1VtRzY5Q01jaWxwenBqb25jYXNnVVR4eHoxQmJ4?= =?utf-8?B?Z293QXpCKytJV200VERHR25tSklMdFFEWjc3ZGtBYkQ3eWN6NG5pMWhneGtp?= =?utf-8?B?dHR3MzU1SnlKTkl0UzI4eUk2WUdwVjZUME95QW9RKzdSeHBvVVBTTjdmalJK?= =?utf-8?B?Smprand0dEVzbHFPTXYrVkprWXRlQzJaeEJ4amZYc0FhMXByK1VFTm9qK0h1?= =?utf-8?B?bk9RMUY3dEN6K0pWVUEzcGYvU1lCVlpwMEdRN01jeFRDdTFDaFUxSnA3MDkr?= =?utf-8?B?WitWWWV6Uk4xdDBoRWwwSFRtOXgvbTNlMVYrT1NRalREandYek05Z05yMUk1?= =?utf-8?B?MDcwbkVkUmUzMmxaN3lvdGZyb3BDL3k3cXVJTlp4MW5FS3FQL2kzK3pkMFRX?= =?utf-8?B?bDRYZGpRbHhWZm1uQWtIeUJ4LzA1V1FYQlh5YXBabnM3aFJYcnIvSzZ4Zzds?= =?utf-8?B?eVhFV0gwYzlTNFFxcUNYcDg0T3ZVa1NnUy9LR2F1ejF1MDRPL2h0bUxLbkdi?= =?utf-8?B?aFBZQkhyUHEzSlFKV3lsWDRzdlNNREdkRGszb3JwaEc4RXU2Q2ZCK0RkV0Rl?= =?utf-8?B?cnMwWllCMm0rRStNd1Mxak9nOVlhM0Y3ZlRwank1ZWc1SG9mZVg0RHRhSnA4?= =?utf-8?B?bDFLWENJL01JR0RDWkVRR0U0RGpLdmhQUHFrdWNKU1o4QXZkS0dlODdQclpU?= =?utf-8?B?dU1JcDJBSHRCZVZmTmEzaStVTkI3NmRhWGhOSzhZT3I2cXBmVmdPQXh3Y0dP?= =?utf-8?B?R3FwcmpMclp4QU93ZTN2Q1J5ZXFmT0U4NkZycnRDc2pqN2ZUMU1rL1NMbW1q?= =?utf-8?B?d1dORm1LaUUySkNEODhpSkpiNVlTLzJCSWJNV21UckFIc2N6NG9kbzQ1b2Vu?= =?utf-8?B?ZEZhVExMV2orbTFGQ05ScHRDVDI2RHZJcFJhZExRWENjMzdKb01XWUhIaFBj?= =?utf-8?B?a2xvVG1FcnJhUkJQTUVsTXJFRUJ3UDdVYnFvL0E1OHV3SzhLTFNhQ3dzUlFN?= =?utf-8?B?Y0ZZYTJHUDJId2I0c2tjY1pSVjdlbVZJVHJvTW0wRFYvczVOOGV3N0V3NC9H?= =?utf-8?B?SjJrcVdzeXlldndkNDBGMHYxYlV0SDhWWGZpYk1ScXBjbzRyZ1BXaWtOZGFD?= =?utf-8?B?QlFXTFRMYnBTRGE2R2loeCtlSE1YeEpCUFFocEdCZU9vTnBhZnllNTJCL2tP?= =?utf-8?B?K2dDaHdKMFZoay9tbW9RaUloZGZtci9YbmNGaVBTQkFzTDIzWmIzLytxTCtG?= =?utf-8?B?c2ErdTVmdURROHlTaVVhMHRIR3VqMEZER2Vhd1hzVkU5WGkwdWhUQjd4bXRn?= =?utf-8?B?Skl5cXA1eVhibHhUSVdIY0ZxU1BWeHlyWU9ZVXhoZzZVbkprSDdWeUxPdnJ5?= =?utf-8?B?eE9tSkpKQVVoN20ydkxnTzczL2tQL0tzUG0xVVVQYzI1NFA1akU3eXVaZ0VK?= =?utf-8?B?R0swUGV2ei9SNmtHMXV5YmMxSkFsL1UveEhKdTZhdkQyb2Q3SDhKR1hCZEI1?= =?utf-8?B?OUR4RWdjTWFHQlZmNE12eXJCQkZWMUliTC9ML2RJVGU0QXRmN3hpU01NbHNj?= =?utf-8?B?SWI5SG5QRlYxZ1JUc0pjNEluRkNpb3owdmprT3R1ci9oMzlkcG96NnpNVUM5?= =?utf-8?B?SlZrOG1xaC9QSGh4YmVueUI5YUVOUGlwbXIyQkFlU1UrL1grMGcyaFBYQ2ZT?= =?utf-8?B?NjBJd3M4K2Q2TWFJZFdMSTRqaUM4NnV4YWFBVXEvYXZ0SWxYWTRkWUFhNGVa?= =?utf-8?B?eCtkS2hXNXpXdjJBcGREMzZhZDJrVmNhaGNTTkd6bXU4OWhqU0UwdFZzL0NM?= =?utf-8?B?UGhEZTdNRzlqekJzTndIWDQrQ2lRYVUyME43QmtXZ0tXckUyUUNDaVJLY0g0?= =?utf-8?B?V3NWVmdGaHVrOW81S0xXSHVvY1U0NUwzTXBiaFJZVFFUbytVWS9xakttWXdV?= =?utf-8?B?NTNHVm0xdFJBVFNlNDI4YytDbmZSVnVQcEtES00yWW1pRGdVbk00cXY5djdv?= =?utf-8?B?eTYrS2xLek5mWXBmRkxMNXpsZzR0dVpRZ2RFVHhKRkJlMSs1U2ZHMFR4UTNM?= =?utf-8?B?UGNybHlzc2NHUDhpVzRsQUo4SjNMdFNWR0huRVNwU2N0eTA4STRLVWtlWEw5?= =?utf-8?B?YkE9PQ==?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 09540233-3558-411c-1f58-08daacfc9d89 X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Oct 2022 09:23:40.2498 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: zWTjW3Akn9pXYo+onZHVA50YvGLNePnA4LX4nRkPODSk+CETakxqmpDBMZxwfRvL8QY746Mt19Ge7UGL6Qkey42ED0ly4VIk3OHGLsPYoA8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6466 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.14.123; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR01-VE1-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) X-ZM-MESSAGEID: 1665653514552100001 Replace a dumb function in commands-bsd.c by the code of HW address getting. Reviewed-by: Konstantin Kostiuk Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Alexander Ivanov --- qga/commands-bsd.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/qga/commands-bsd.c b/qga/commands-bsd.c index ebf0fb8b0f..15cade2d4c 100644 --- a/qga/commands-bsd.c +++ b/qga/commands-bsd.c @@ -20,6 +20,8 @@ #include #include #include +#include +#include #include =20 #if defined(CONFIG_FSFREEZE) || defined(CONFIG_FSTRIM) @@ -179,7 +181,20 @@ GuestCpuStatsList *qmp_guest_get_cpustats(Error **errp) bool guest_get_hw_addr(struct ifaddrs *ifa, unsigned char *buf, bool *obtained, Error **errp) { + struct sockaddr_dl *sdp; + *obtained =3D false; + + if (ifa->ifa_addr->sa_family !=3D AF_LINK) { + /* We can get HW address only for AF_LINK family. */ + g_debug("failed to get MAC address of %s", ifa->ifa_name); + return true; + } + + sdp =3D (struct sockaddr_dl *)ifa->ifa_addr; + memcpy(buf, sdp->sdl_data + sdp->sdl_nlen, ETHER_ADDR_LEN); + *obtained =3D true; + return true; } #endif /* HAVE_GETIFADDRS */ --=20 2.34.1