From nobody Fri May 10 10:56:22 2024 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=1664790821; cv=pass; d=zohomail.com; s=zohoarc; b=YmCOfoa4ZQKwYq7IfNOqaKSxOgJ9v/3vA65YrSDxKFfVnLGpIwP8eyZAqGWM5t47OwIkElaX2NgEGl5got+b3BqYOoks6Ar2D0D9SU4i/6FDE+73Iqr+uLkgvXCCqsZVpMrVeXA5DjdNyaJUT8SWOt9vtvCZmtLw2coOdoXyj1I= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664790821; 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=T/82Gl6voQJFtnW6vuop4f0r45SnstBbJM5MVYGtscM=; b=Yu/jx5NES4KwdRvC1vSL2YO9Rv78gid3YPizbxgg6uVj7mH269xoKuo4gpVkF36sIciXQ+f1BjWyHBg6pwJoxPS0e+eavXEhir3Mg+6BDmAIzYG65pxgKdfQIxAgNyLK/d2GsDuPM42p1I+Tp2vN7mBPXV0gIiIb8vmZME9DIxg= 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 1664790821171608.5939377520417; Mon, 3 Oct 2022 02:53:41 -0700 (PDT) Received: from localhost ([::1]:37910 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofI8o-000820-Ra for importer@patchew.org; Mon, 03 Oct 2022 05:53:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50374) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofHvB-0006Oo-Fm for qemu-devel@nongnu.org; Mon, 03 Oct 2022 05:39:35 -0400 Received: from mail-eopbgr80119.outbound.protection.outlook.com ([40.107.8.119]:34208 helo=EUR04-VI1-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 1ofHv7-0002U6-UL for qemu-devel@nongnu.org; Mon, 03 Oct 2022 05:39:31 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by DB9PR08MB8203.eurprd08.prod.outlook.com (2603:10a6:10:39e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.17; Mon, 3 Oct 2022 09:39:21 +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.028; Mon, 3 Oct 2022 09:39:21 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ux8oBh1f6EBlyGTF8wBZZtbi6Fk9dHAM5pMVu+wiwr/lCcwq64eH3Fprj6P8CMhYk5RrSo4czl7jU8kob0nzkxWqnrISkKRnCjp54+wubMc6CJWScvl4Yu3vdy3DHewlN2t3bAYIAr9yNoM4pnHLlMbLyNpUoGmbkCcj/myeMtjwHf5CoClmk6ycA7Smtk2Q3xXnUMOSM8ZynlDi87xoJweI3X6n5wa+BOataKCqMijvgT/vEfolN1Lm02pMI0d2VTeSZVU+42wONfI66aG/HjT6whGJwb4Siwrao3Wd9fogrTKPul92EIhVDLBrcx7TOb9r7TaU5mjxgDX+g5MHoA== 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=T/82Gl6voQJFtnW6vuop4f0r45SnstBbJM5MVYGtscM=; b=aoLGrA4LvGofQQUvNplA34koRcWadNuNpCIJEewUG2d2InOM/AOKe6JC+OgNlKt91jqkJvs2wK4WW5LdTPQ4whC+AnZK8VbavIDXgFW37CxnTeOWLsiXFQQR6mbNubV43MwhLWNqn055kzspIw38fqDiifLeFX5T3ST6A5J0rC1tnuAQbCFHqq5h3En8UX+2OdTXjnojeoYYDGTTK3wc9/mIupOqq5PoJsmZAFQZx5oiEkksiW6ni41SvpmQHoc+5lU80MbMPLqeSgMxrG+E0gqgcAAMusy4PJHzCy6YdLfpZKx+39NmaK6GPRf4XThwVcvPGBtuMaepv0j5dAk0Zw== 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=T/82Gl6voQJFtnW6vuop4f0r45SnstBbJM5MVYGtscM=; b=EU7fTeUopTQCipHEahLyDTgUm647tyTYwAr7OAPc7psPAB/DwHvUXNu3oDp3vidCrZJOE0gWUhJ5WQrWfiS/jlzHwpl+9qWGh07UiO/GPAQvWgNRSce3A/Wywfn7tS5AePRb1ZVbK2NnmfMvxfmxtzTeF9u9BRyS5ao6dKiSqHZntIyIUYNaMOfr2GivOpDjRoUzEH/ui+E6cgitA5dlwLnYNHWxSINaQwD2caVpBHUGwU/Mv/JMfsU16cyB4AnNw/htmgrok+m+mM6EbpJeSkwefdLkH8pXJBeLFF22nnAzsOIt8qqjFhn1pHln1I/KEx5wmmI4/gKcY6swnvBPAw== 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 v3 1/7] qga: Add initial FreeBSD support Date: Mon, 3 Oct 2022 11:39:05 +0200 Message-Id: <20221003093911.1844031-2-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221003093911.1844031-1-alexander.ivanov@virtuozzo.com> References: <20221003093911.1844031-1-alexander.ivanov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0096.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a1::8) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|DB9PR08MB8203:EE_ X-MS-Office365-Filtering-Correlation-Id: bd3df395-eb79-4c2d-0ba7-08daa523262b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QowE5Djl3zDKrLCbribcnCjz5PODm8Izlg+6tXl+vPGiVGm8ojxG0o5RtzGQPGcCcR71C26wTpbbj85BL1SpI7CjwJvlPGb1u+4KyifHMMlJbc1wq6emPHF7bMyqFQ38z/STx70Mpu/ivat8o6LfpOsi8APXKTj5Ve5iy8svwh9981FXJ+6sJCVqpCgu7osIRdFqh5T1LFeEH/bzMbmbkmIT77TyEOtq3P7A1R10MsgBO63WAfqZcFzWboxSrIrdkWqiGa1wDZ1ZY1sxmN2Z2wb7pHqwR5aU8MXHuaBMfBuxtBB4XFVrm9AFqmAg7MI7lraR9V3CrbapJlh3sEzdSKFeDC1McKPD9BanvxcyNQyLwA3YmVGioeprWWF7G2WQ8WGumV0DJVTJCa5v0np4isuEEmLPOaAwzSSVTEwDxj9zrdkERQpQQyzbVNxzXDI+zRg59r0pMVZfwK3Oq7iQyJn9MJrvBnyeivKkyn6efVKvLPDlCEtAh4LG8JwPJcX+0s6zVJ3b5jbxVqU48hNIsPi5xKFk9zncsxtUeaL4KCQ0UWY3uZ9ZsPwtBTgJOdj11c89asK6guosP41XWRBwEVOv2At1lJREA2KFMJN/dgZ4SyXKoBOY6MOrZ2H2l+fVUx28HnKF2Jg0NWL0xyRDb2NFRx6pJuh56SLlYgUlLJGhWJYGG4RVmJOx9Sp3AdvSvuzr9bJaG0nFTMpieaFNGzdmMCbXTFydxRebPMEZGCsBTx8MGht+gmyD4ckxxkpH7jsyn9RmAj1EMa+WuqHndg== 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)(136003)(346002)(39850400004)(376002)(396003)(451199015)(6666004)(316002)(66476007)(66556008)(26005)(4326008)(8676002)(6512007)(6506007)(52116002)(2616005)(6916009)(478600001)(6486002)(66946007)(36756003)(38350700002)(38100700002)(86362001)(186003)(83380400001)(1076003)(44832011)(41300700001)(8936002)(5660300002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?7B4OJt2Ztl7t6CasEoVyGY7DpHtQANTUeUt+ydUxG6c1+Ee2RVJ+xe6N95OY?= =?us-ascii?Q?Uq2WqxSj5kLSLx4+zU06MzuquEDtNSHWRJ8oZ0eX9G97r0twOpaPkDHUyHWn?= =?us-ascii?Q?88LaIR2qaO1jfbFnZwC/Xoej2KKENLO4LeKmx7MC4CAzgnEacENgRH0atP8R?= =?us-ascii?Q?xqJdAmUa32lu0cEXQe7tlvEZiX1OXa12hInvtQ/FZUpGwc71RGJqLyPIjOEd?= =?us-ascii?Q?nZ7vAeOJvcSToSYjK7d+RvKj/mm9BUVMTKESY4hi15PwIHZT2K2F8TcviPMf?= =?us-ascii?Q?kuXtiXNyGmnRVV8SGXu9XXQMRLZXS/QH1ptulDRS2bd0GcA2+JonY82eO5JT?= =?us-ascii?Q?v0e07RgX/kLyGgczC/w64AsfQmJTuGPDn/YYFdQU+Jb7NYQayNDM8V03ESHB?= =?us-ascii?Q?WMB+E/2FIY7SF/5Z4tOjTWkxpeYLOmQXlPZLHPWMqGnEYPTIgiZpbiHHIDKA?= =?us-ascii?Q?hxp5KBFcCuI2ynbfTgkTmB2LiVcxwR2LvgeXMxQavyrmtCUZQFLs9tRxkTZQ?= =?us-ascii?Q?2x64iXESba0J3gU8bvtdwuzU0ncjA5fkbreA0bWUDWZTTiq4zEMG9iU5ZQ9t?= =?us-ascii?Q?wpOQiYWclfg18RHIaCHaG58EL1QSCcH8d8v/vzWy8G68HEcRPHs3lGDPIZwm?= =?us-ascii?Q?EhMQHAwGfVPh6O/bPpSq+tvO7lSQTimU1W+X/QABPo3SUSr6w7M+I4JKw1Rg?= =?us-ascii?Q?L3fZAdjmSq59cxlgs4q8s340IUNRtaYek8UXJGQpRvg+WCMEmIViRQtnq3fQ?= =?us-ascii?Q?ItzdW/IDq9zhULttBHecd+J+/L1bjusYd1ZW06y2o+zNI6WbUb+3kNd/FiqO?= =?us-ascii?Q?5u5I3y0gfwq/Mg9GwD8aN7iTlCa2fb4Vfy0ujvqtVlrhDcnInbokzzOD9wVX?= =?us-ascii?Q?JxASYdd/gB9dF2IZvx7oX/VkbRTiZXIU4SIFDoOk1IuPlZpZebORd3C20Khb?= =?us-ascii?Q?qJywfJmN4YMEqVy6O7JpM/KQ5FIW9zFnJq8wM6g5FyHXDGSf7Ol7R20+pa92?= =?us-ascii?Q?09XNa5iOZzUa57smxvAx5VgqYlqHIiQsKZx6Xr+ey9n8FtzvZkCgT3YPhlz1?= =?us-ascii?Q?m/WIKJ6IP1VHqks/Unwks1sZPPvAKfyTCN4StlFc4e2ybuOC3wpuN1DbSg+B?= =?us-ascii?Q?INRigF6fPm1u4ACT4xMs98BqeLgHUqUIoS6apRhRMVt0nyJwq98aA9PMzg1c?= =?us-ascii?Q?4eohThA8HBjz+xnWSme7PNglQCEQ8apTL6AqsDSCSC1W3Hjj6HNlUtVQ1hcN?= =?us-ascii?Q?gJ98qhXnsJoGcgP9Dddoa59euGQOG7tZ8taotnM1ckCtTE7TSd7rfOtRAbUh?= =?us-ascii?Q?W7bFu2rkxLA309m00tkSNIiySt0RkNjk+U0/6HxK1A71bmlyEQuQTLcjmAew?= =?us-ascii?Q?uJtWCoDm5j/wbhDWZdhwRmArmeiOGyOiYn2jAuKtBIgWPC8YeqyqO8kvHHBk?= =?us-ascii?Q?/m1JFXmODzNIEUafl9iLdrXKZDE8W90erdMA49RjVLWzaMljxGgkjAixSJ7o?= =?us-ascii?Q?CsVg1fBLoRJ87Ctg6BhGacT59JiR1PKvEbH9JRk0B04SuffRnEQ4GhDd3S7O?= =?us-ascii?Q?AgCeEMQRAoeJp/7+qScPiQspztacIuPDi/tIVJE9cTkdVxxbyri7S2h7OrDu?= =?us-ascii?Q?zQ=3D=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: bd3df395-eb79-4c2d-0ba7-08daa523262b X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Oct 2022 09:39:21.3997 (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: NtDZMVaOvDuggAf1g3DLKQTjYPKz69MK/3iA8yXi4ux8kp6g8lrWKTv573XeCRSYyt3R8AZjaE9vYrY2ModqpUmaQEYA8OXTk5WnnTWEvCg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB8203 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.8.119; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR04-VI1-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: 1664790821702100001 Content-Type: text/plain; charset="utf-8" - Fix device path. - Fix virtio-serial channel initialization. - Make the code buildable in FreeBSD. Signed-off-by: Alexander Ivanov Acked-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Konstantin Kostiuk --- 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 8dc661363f..5c11abc8aa 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 Fri May 10 10:56:22 2024 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=1664790197; cv=pass; d=zohomail.com; s=zohoarc; b=nGQBiqfNGKrA/kiUtGw/1Suifj6njQN8n17qsJwVvu4Q981uG8EzRt8/9T030H7eiuP7WdZ0NrC3+i3BAUn+7+J5KQZyXIb+AG2hEQDJV7g0K4tAVxdGuGzq+X/6+UnSKFO8Wmyjw/06ZsPxW3isFzzZoX6JzPEkVuIFxwAX0ro= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664790197; 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=zgRh0Iz7zGD5i5zCMDbOOLS3g9ELVqMWgvSnjCqL9AE=; b=nQI/oW7vCU1IAAXg0kI7/Zl2Lxs0TJ6+55NERHNn6CpDhr3GYGpF7MnqJHdJydMqyEwi8pqZOXKU/L+TiafczS2Ffd7OxEZUdG2UZyr+LENBEThSBq36pSmxiQZGhFZ9qvPh7DluYnso5pCZZj1EAkZnnu8Wd0RKNW5KlxWMG9U= 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 166479019783172.88035091397114; Mon, 3 Oct 2022 02:43:17 -0700 (PDT) Received: from localhost ([::1]:60712 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofHym-0000P4-5O for importer@patchew.org; Mon, 03 Oct 2022 05:43:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54034) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofHvH-0006QA-KO for qemu-devel@nongnu.org; Mon, 03 Oct 2022 05:39:39 -0400 Received: from mail-eopbgr80119.outbound.protection.outlook.com ([40.107.8.119]:34208 helo=EUR04-VI1-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 1ofHvA-0002U6-J4 for qemu-devel@nongnu.org; Mon, 03 Oct 2022 05:39:38 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by DB9PR08MB8203.eurprd08.prod.outlook.com (2603:10a6:10:39e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.17; Mon, 3 Oct 2022 09:39:22 +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.028; Mon, 3 Oct 2022 09:39:22 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MFQEgyU2BSLVHeZSqS70932KTuXIswGOwro1TObJXB50zmWrVGoAjjNTMPiWorFTFqLNLR0LllRnq+3opSaAWtkn3EKjs1J+D2Ilwel134a25OnWsmO07VVmzKZkrUEQb5v9ZUacdkm/2QragxKp4IKp0Ya3lt/B5wjT23IXm6rc1RoOAXW/3KtJI6UHW3UMG8F9NAOH4Z8zS+kqrn21ynSLLC8UaizNlSLwezuy1APhQ0gTuvi1ShCJZwhTcqyBtQBKBiLtUguOXcdHHQBPU+1ad2HYlOgu88PxYYMIB+jyk4fzkQL29agnJP+yp48U0v9vcpkGOpXoOhg793kdow== 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=zgRh0Iz7zGD5i5zCMDbOOLS3g9ELVqMWgvSnjCqL9AE=; b=NQz2JGCWKMdx72uUmVWEPvzbD+jpdm3C7xsRHaV9zp/3yEtlPnENlPULBxcMPo6GbpKWImNg01U6aT+/yID4Hc8/k4uc0NX66I4/Nd9FRlOZq3qbAe3R4rqqyw1Zh/p5SWz7fXmJ8ihXF9RT1nOiRrmxsT6R/jys6PMbGcE4G9+e/gvJ2X6rQHuxzpgACUH/ulK/US5vk2BswdfmnJht5skLLj15FBSD7h13CQgIOQGQGZd6kQVwpENccSjWyjA/cgy8ACHvvxfw4t7r/tMSSCUE4I+PGBolegrPOzpH3abCw2y+3DYWKGIg8Z1QvlqPZr+ibthYpJfnRwogMg5GfA== 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=zgRh0Iz7zGD5i5zCMDbOOLS3g9ELVqMWgvSnjCqL9AE=; b=Q1YECYO0LHfWXzNr20eQu5cGKR5hnHlaQj9vVE6TEY8CIHiPRLHI1SJ7H7Nge6fu3vqVuABHT/Ez2EbfxGNGyqS2JF1JaezrrgP6dW7/kX6hbdL83wmIIQ0BAZszhXQdaI3C04CqkmVWiVw2Nee2Mdo1oJ95lqIlSB8N+I54Zjf9s4HQQAVpI5MiWjpB8CnGD0P7KtAFA6Lu0gWEOs8Ywg51z/9Bw/hvwcahu/O58PybT+TYcB7iSNGFcma8f6/rezejMhqBZX9KMutWKk35VbZU0dY1Zpt6Wsa9HDfya/XpBmGNNYHloQZZpKqVYcwzytTywdhfJA2GqCynD4teHg== 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 v3 2/7] qga: Move Linux-specific FS freeze/thaw code to a separate file Date: Mon, 3 Oct 2022 11:39:06 +0200 Message-Id: <20221003093911.1844031-3-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221003093911.1844031-1-alexander.ivanov@virtuozzo.com> References: <20221003093911.1844031-1-alexander.ivanov@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0096.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a1::8) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|DB9PR08MB8203:EE_ X-MS-Office365-Filtering-Correlation-Id: 50be285c-415a-4579-aea0-08daa52326bc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 31rmqB4Z06qWYFnbSd1GemzvUwV0F5ZDMrmDMceiusbnx1y/8gHANCWolp08KhWz+lg6sbQ8PrLmN+b7oDwEk5poIW/ehXWRWAIhRAYh6I7ggaJ2Yn4/aa2Kc/3gN7ol52IqhLhpQQGowRNgrKVe1bQ5HLdrt2asl4KTQh1VKeZj3YthBYBi9EVh/ELRcQcYGbQt5WuHyM+4HTrhLLlx3K1lJXq2V32f9z+k68ym5H3XmQiwIEJq27SR59pgeeETNJLkcHtgGGyyy1L4reqmzzFD3FT4GPHhT3hNmUb9+nMTSwr4/GsxKkmiktXzBPdlA4GUUlhvNAGo7l/4FJ2z7boE+8DWFVvrIgH2f+jSy0uJQOLM8j/aD69ozTuuGUrhbqyosTv8OGGTGKPqBuMOwA79DB2IQOo1Egu/4Lvf+Sf+zLeCYTqUwWCe56UobrMBtIjXvYPh9UaTOkuw7mEOBdViFu2IOr3H6irZFeQGRRL4moctp6mT7neo9ebaGjAQMvrZRsyv/hFRNmYXvlayDd1AnsQhduY2o/riHIwCVYlv+IC65NNcV1A7Q35pfQqBXKoEZ9uHNndeKEmNjZeA5EADQ5BgKuixKXdA69WTnf7CN4LWJuCPguaNrFzkWunOYI4UrPsdJzVJ+pia3e7wUdKrugfS+E2YyKxq4uQpWiubtcCIX6ww3jAvZBjMkfvqNFH4s2WXZrBpPHQThWIJcvlR9EchTjAyF9IJAdh/hL4iNB11T9r65hUth5+5Ndk+ak5qT614WBZnCXl/aAPHtg== 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)(136003)(346002)(39850400004)(376002)(396003)(451199015)(6666004)(316002)(66476007)(66556008)(26005)(4326008)(8676002)(6512007)(6506007)(52116002)(2616005)(6916009)(478600001)(6486002)(66946007)(36756003)(38350700002)(38100700002)(86362001)(186003)(83380400001)(1076003)(44832011)(30864003)(41300700001)(8936002)(5660300002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?THFGUStSbTJkNTVKY0pOcHNTeEpLUXJwOTBjWlFNRjYzK0thMkpCVjZRYThF?= =?utf-8?B?L2g3NndSMkV4LzJncUdlWnFDQjJORTJFQmFSOHhvNjdtTXhybHJkWnhtRkwx?= =?utf-8?B?SGxhaktHaFY3TlNMaDVuNS9CdzBVR1RsMWcxNWVseThOWEZKemhTa3lNSThM?= =?utf-8?B?Nm5Ka1pqRzc2WnZ0L2tIR3JQU2ZJUUZZREJiU2o3bFk3c3czVkVSWHVMWGFF?= =?utf-8?B?L2p2blVzTkFSN0E5UW1xRUs5L1RERm8rWVQ4QURPbWtBY1QwRmErQzNHN0lh?= =?utf-8?B?UElPayt1dmxpZ3lJNEJhMDB3OUFIZDIwTEJNeE9lUi8zTlNncUVOdEYzaDdM?= =?utf-8?B?cGQ5RENuRExBUGxURE92SWpmZmN0STY4UTVNR2VDbExUWHluUyt4ZGlyd0gz?= =?utf-8?B?NDZJSVdnRjBNUW4vaS9iSXFkTEZQVDJOaEZFMTd0YjFhQ3c1L1A3VnZtd1NC?= =?utf-8?B?MExmQ3FaR1hNdlFKU0lvdUVCc2NONmtOajM3bEUvUnN2SXpoVzQ4ci9obUFy?= =?utf-8?B?ajAvV0dsM0lDN1lROS9ISGduMHlhY05tTjdBclNObzNZd01iTUVHRVpudFB0?= =?utf-8?B?N2pEbUlNa0JBS3c0VUF2M2t1K2NCbW9ZRWliYWhrMUNydTNlazdXc3dCaThQ?= =?utf-8?B?dENZd0hoRHM5ZkVvSlhrRlFuOUUvbDk0WkRNRWRGcFhRZ1JxUHBMZGR1MzlX?= =?utf-8?B?SnlxZmFHUWx4UUppQkRTQ1lvMENLRk83VTFIQlRFMW8wZEN3Q1gwRzRLOXhC?= =?utf-8?B?V252dkdGWUdEbnRrWEZsYVlkSDVIMEhiZXF0cXpROUtrek9ZbDBKYTdmTWty?= =?utf-8?B?Z1hncE1BaS8vZGJaWnZhajJyRzhpOW1yczY3RmFmY2ZEYWFZRjFTUTFZTCtJ?= =?utf-8?B?YnNLTVNXMlF6L1dsV3k2V2w3TG9LZk4rRXBNRGsvaGVkMWdsQzZ6WHAvdXRn?= =?utf-8?B?cVNkcmM4Vit1dVBHVWpPQUZ2V1RtVktYanVhcm1zb29nN0pnbTBhUTdieDhx?= =?utf-8?B?ekpjd2VkMmx6WVl5WDlUdlZaQmUySDJPVklVRE90V1ZsSHF4VWxRWGE5d1hk?= =?utf-8?B?YnhKVThFa3NWQ2k5Nm5MSU94SVIveVZ4czN2ckRUSXFUOUpnTmlPVG9UbHZR?= =?utf-8?B?TnZpRTZIb29LaU04NlEralExVDZsdjYxZnd6ajlkS1VSZy9nWml1bmV2aGNB?= =?utf-8?B?SG5rUG9KVWgxL241TFQ1ajhjZVF4UlBuS1NPdEJUWExZRW93UCtCNk1wNUVK?= =?utf-8?B?emRDb1BzWmZMYk5JNVNEaGUra01KUjJBVjBIVzMvS2wzMzZCdXp0Qm52TXpH?= =?utf-8?B?OU1hd3JiN0VYTTRvZmtBYXNZbDhGOXE2eW91dGFCQWR6NkZtSjZvS3VpQ29E?= =?utf-8?B?NTNOWnJscUxMNnJWNCs3VTFQSHlNL2lLMnRSV1ExdWRYTGw5a1E0eDZkMkpY?= =?utf-8?B?S1lVVG5hS1RWVFQyY0E1SG8rWGNpc1BDRVVYNTNua3VLblBnU0hxT3EzbE0w?= =?utf-8?B?OTN2cG02VU5kaGdJWCtYRThtRU52YUJqc1lWY0pMajgyUUVKS3NzQ3dUUGZB?= =?utf-8?B?Q3BQWGZWUXNhZWwzU1BqSXFhdWI3cVN6djBmSTBySk4zV2czSUVxK3o3ancr?= =?utf-8?B?SFhZNG5DK3pMV0pFK3FFemRKaTdyajZWSmV0TDFNYklXY0dlZVdzWUg3a093?= =?utf-8?B?aFFvTktydkpWSFdOZU1VODcrZTZheWQ4ZnU1OUFKMFZnYy9NdEZNbWw5UlVB?= =?utf-8?B?S0s2TmxydkRYdCt0d0R4bmRsY3lqTVJzdjI2bDkyS2lLSTZWeHRMNVhwQWRL?= =?utf-8?B?QkROWXA3Y2FUVENyakNCRlVKRnlOaEhUR2VrZ3ZCa2J4bnBISjdVRXk2YjVs?= =?utf-8?B?Q2Q4dVZXTmI3MU93U2N1REQ3TzFIblY2bzhyQUtYZGltTFRYZFh0NzIwS01D?= =?utf-8?B?QlMzOForL1lRZmljQTF3Z1NyN2phdjhoY05iKzJkMmsvQW9vazdsVEZRdHc1?= =?utf-8?B?Nk5mZHBjTjg3cHJKU2Vya3dzbnY0dlRxNldOYUNTdThyWUpmY2xNZVdqMjFM?= =?utf-8?B?ckx3VHRNVkFBTFIrSEZxa2syYzlxbW9ZSURjNzY4RlVDK2d3K3k5S0NvMU9T?= =?utf-8?B?L0x2UndRT0JBWWpuOUZSYnp2VzNHUWxFeENvWlQycUx1czFldmFPcWROOHgz?= =?utf-8?Q?U+Hr9R6T/icXfF0glx7BZzY=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 50be285c-415a-4579-aea0-08daa52326bc X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Oct 2022 09:39:22.0871 (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: XBVhFnj/2ViXZuC34PwiRIYDhsman6MJB/IdXrnkYWiHw7gOSAY0HnKEa8TL9WYLz9Gh6B5nYFpj7pOQCeRKm/qPUp5lsvfOsgAK8JLzMxA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB8203 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.8.119; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR04-VI1-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: 1664790198757100001 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: Marc-Andr=C3=A9 Lureau Signed-off-by: Alexander Ivanov Reviewed-by: Konstantin Kostiuk --- 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 65c1e93846..409f49a000 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 Fri May 10 10:56:22 2024 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=1664790614; cv=pass; d=zohomail.com; s=zohoarc; b=lDOG4Q72qCirhyuusylM6uSRc4WVp1KSzd9CH6uJzXBrldM3QPgKEE/DiD9CzdQszcCqsM164V43AQ2FpWGRPUDAmRRsGgvz1yQU6Mo31nKisrQStxBAl/cRSDroJxt96svQpQ7FbVDFdX0xkeveYHG2j9cuimAUSk6QhlvOMvs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664790614; 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=7pRohLF15lHFmrvkX7AYU88DslNsDkv2W4101oQE7fY=; b=IWaegEbxLwkSHareQ2lI3Euhy0QYJO9Osak+O/0RJirgzriiCmjoE2e4WUrs3s/y/9VF+0Uj/daFmm4wvB8pPHk4s4Ww3it3TUZDzycxWjhui3IgwtuJtEb+28MlYlB+19pkqNfAJqveEWIdHsNsCGfauH/rIKMvNtzq38cg/Aw= 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 1664790614315383.515098820553; Mon, 3 Oct 2022 02:50:14 -0700 (PDT) Received: from localhost ([::1]:50860 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofI5U-0005fl-TV for importer@patchew.org; Mon, 03 Oct 2022 05:50:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54036) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofHvJ-0006RW-Bn for qemu-devel@nongnu.org; Mon, 03 Oct 2022 05:39:42 -0400 Received: from mail-eopbgr80119.outbound.protection.outlook.com ([40.107.8.119]:34208 helo=EUR04-VI1-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 1ofHvG-0002U6-Tv for qemu-devel@nongnu.org; Mon, 03 Oct 2022 05:39:40 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by DB9PR08MB8203.eurprd08.prod.outlook.com (2603:10a6:10:39e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.17; Mon, 3 Oct 2022 09:39:22 +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.028; Mon, 3 Oct 2022 09:39:22 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cu+gAd8NdTdtMWuj/n3KEL5izaClAeO7eVgvp2kLFVK3SJPplQam/Uegvh6Ndk15cJFZJ4VGWF+6vfQ7qUiqqC09RJg+BNrhZDGppdLvVLdfdaIWtIk24X0q2UZK0vxvkCmwnf8zZZCT1MlYHeyJuYYs51ADdn4qwy3fT1yhM2NuKVdm51yIuKfL60xHMNv7Ku9EAzDc5GHssgb/f7WP3eecDgazxlA90EcqptjFYILRa9Xb+WwYOt+mt/cuz5YU5YoF50E7OELBXBaZAUFc1URNywg73D4qyhrj8GrOeU7ZviURDyYwgzTx3BgvVCmaFafuffQKC3xj2GTPuc52eg== 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=7pRohLF15lHFmrvkX7AYU88DslNsDkv2W4101oQE7fY=; b=U7ca8Zzo41s2tnhokCTEYEz+NqDy6nelzDuAj+RZcAcNF3oN9Iylf/aCM00yC3cEV1K7jzeH2QCoN8sph9WeTM5pBJrjJSGqrF1u/RGVlcavcc+CnmuNmr9dwlT7rqGNOZwP9nCkAzkbjxV40uZLiPZTMft8r8mdfzxxHCud3RnLvoMuEX7/bEYkFp2CH1p7RZntWkTMBocJSGgHNhHbtUjVs19bUfbZO6wnP8JmFPmTnv13JwjoMLMzggTUZcV8Nx63hJgOuurYaWunQGd823+4NFnOm1rRBc7nJPl/aAW9Nqb/BJ6nm2pP3Vom6m73K8KjYIidh7MErqoizuoOeg== 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=7pRohLF15lHFmrvkX7AYU88DslNsDkv2W4101oQE7fY=; b=mmHomuNeLLzCsQ+zleMHr3AP8A1OOBOELK1YYA7fW55vS5REWQLaarbPPnHPXMEbe0w+/oqyrok5spwdwNv2xfhAmts0NUicx7CcXgvLjYJIx8ecZIjluVt/8+0y/dZcI55hswbxypiRfgIarxLhFvd0wFOYf2wyguR1u2aNCVl6/nx9BVrIBz+XVjsNUzmZyv9Yw0qIyrzXNFqjBH9Q8A6CXsCSu4BSjBg9s/0BPk/9K4DOZda7U6PsuayGC5lAyfkVdzI37qB6OKLvbLBOs5wgviAkrzslEJ9wrn4xVni8aOuVOyMcGWZ1W2Vugz5GypdplCYgUJWbjFfpNArbSA== 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 v3 3/7] qga: Add UFS freeze/thaw support for FreeBSD Date: Mon, 3 Oct 2022 11:39:07 +0200 Message-Id: <20221003093911.1844031-4-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221003093911.1844031-1-alexander.ivanov@virtuozzo.com> References: <20221003093911.1844031-1-alexander.ivanov@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0096.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a1::8) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|DB9PR08MB8203:EE_ X-MS-Office365-Filtering-Correlation-Id: b1be7880-88f3-4710-f387-08daa5232727 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 86uM7GF6O1vJsM+qTarSR/cHej9lUH1sApYOcfaRy0r6sSgjgEATFpwgf8YISieamZVjzcvWswdUQ/dzjPKHR7Wp1TGmukCguak8z8UI88YfF+vnMMPDKnTo7BAIO7RDwHpKSGalzmywSBCdZiANptSBZniev3bFwrIlAux/Junm9DtAsddMHfKHZmP9X221NZPMb488L11hLqN/L0T6zXoMgVGnckRVm0w/16a15QsWtwPz0+Wv5AzZ3v42fmocJgZvwqDMWm5pOMeQqBuh7A98anXQIMobFMGSm0C6vcEtrISvl4YW/lVvALMmUdASSFera8GeC9RwA+GQ6rGWlOrQRI+2mdt4KD2seIRhzDahuAVwYBxFRHg+vNA0/G/waq8TTgnqdHps92zT3HCF8NViy+8ZbDIdcmNsEjb0H7RJnGJlCSylX0jDvPHKVhcn3M5r6ChyXLU8KcGoq/QS4I481dVMHnkMOUh723MRD5t/3MWUiFyOYLrCXKl+YMvtIfLeR8gGBMLSiQ/vTjcSvdwqBQnCMLstH2tqeVCHBC6MIzJ+brus8elE4YsbEstDDpst8pDPYK8oRWXKNgC88C1Ux/jUcfpOKrjh8kvq67BMJ8LFhqHMQKW+mNWGbNaj0HOAPOSjPxwayDJmrKdUzwUQgFW/jIxWlMf1vYn6IBal3JoLGwfoaXuSmkunAQRqDSvv8No6mspoyGHc+QWWPBUaiJhvVOmyNnhL/gXOPdE1TmfhukW+Y2pNDf12qYkhhTUn70rC78ajvZ3i6eEn1w== 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)(136003)(346002)(39850400004)(376002)(396003)(451199015)(6666004)(316002)(66476007)(66556008)(26005)(4326008)(8676002)(6512007)(6506007)(52116002)(2616005)(6916009)(478600001)(6486002)(66946007)(36756003)(38350700002)(38100700002)(86362001)(186003)(83380400001)(1076003)(44832011)(30864003)(41300700001)(8936002)(5660300002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bWs1WlBJMUhDUFVHSW9OMVlGM21HbFFuWU1BUzVMQVlzbVFjbE9seWlBMCtS?= =?utf-8?B?ajQ1RzltS3V6aTJDR0pNN3VaQktaMjlwWXM5NjVLTFovV0RjR2QzbVN2aFYr?= =?utf-8?B?WDRNaWxCYnhSbkJ0bUlGbU9TY1BXR1N5WVFxNmtGRmNXZTFFYjVaY3lTVFdj?= =?utf-8?B?ZDNBMmpiUlFBbUx2QXE0Z2J1RUY5RGVkL2kwdmtDMVNmdGZIWEUrUkJIS2Ir?= =?utf-8?B?ZlBVSUg4SS9MUDh4MUlyS2ZubXRySndNOVNYOUQ1ME5JWWlJeS93ZzIvTTFa?= =?utf-8?B?bVJCdEJKT1dLM3NQZzk3dlQya3AxbmFKZEUxT0Z0d2R0c1R6N2IvM1pWM0F5?= =?utf-8?B?RU9uTFNMQXJNSHFxdVlKUFB0WDZaSGxxRFg0UzhZVGo2TVVYWWswdVd3T01I?= =?utf-8?B?c0pEamkrVXQwRmxlVzMzTnpzVkNjY0ZQUHBWZWd0bFBEQklhd2tYd3BlSVR5?= =?utf-8?B?QldMS0p5MC9mcUw2TldCKzRNdm1Pb3k4UWt3WXdjc2FDK0xZT094RmlnOUp5?= =?utf-8?B?OStSN0I1b25OVERSM1NTNkpQN1FQREIwaDUrMm42QWM3YThmemFxNTU3dkxR?= =?utf-8?B?VXcyYUZFZmxHSzJ2RnF4alNzbjdGdzQvMzArZCtpd0tPZmJwVGJFNWt1Z2FL?= =?utf-8?B?R05LQmV6SVJCYkdNeFBycmZnYmpsVTBHNFd1K3pTcDgzN2NSc21tS05NY0pX?= =?utf-8?B?YlFzTkdjSTBRRWl1Yk5YT3FTbzg0bEdUdm5hektZZXV0cUovMlhWSWVsNGZJ?= =?utf-8?B?dnRWc0p3MmUzTktNV3g5Z2V0dGFnZm1kTFV5N0hSRlFSSTViMmNoVTNmNkNF?= =?utf-8?B?bFkrRGtZUVNFeFVQVXFUalhERlFxUy91UWVUMHhIMTFHcHJxS2lNZ2tkWFZN?= =?utf-8?B?UzFYWU4xSGpyb0hzbEorY0dGVzcvdFJIZ3BVNWYvOURGMDVXTUdDa0x0ZVov?= =?utf-8?B?TFRvUjJZNXJJYmNpRFlJWjFRcmZEV3RKdjFEMSthMXlGUmM1aHN3alJ5cTlT?= =?utf-8?B?QmpaWEtxbG95TTdzL1Zmbk1EaUVEMFBHU2FWNGNWWFpLN25KSitzdjc0MnZX?= =?utf-8?B?OWFoUWpmcHRiem5KV1JtczAvSEd1aUx6WE1zaC90eGpEVGdnNWZUTXNZY0tK?= =?utf-8?B?SzQ4YzBaT1FLTGFXTVlWd1c0eXVCK0YybFF4VkRHZmN6Umo0WWNJZThZbVVp?= =?utf-8?B?bXQ2N050TmNXNjlweEF3VFUyUEl6TzJZZHVaUG1GRFpsd3dRaGRHUjY5ZTJn?= =?utf-8?B?REVhaHVJaUJzQ3J0TmpVUFdQVFd0aXptNmdRQ2J6RVpkV2c2TVA1SFBFTHdz?= =?utf-8?B?MTh1aWU5RWx2dWc0bW5JYTNYQmwvQ3g4WjBYU1pqWWlvZ2xNN3VBSDRQRVFi?= =?utf-8?B?ZytEeVl3UWoxdEw2TVp4SnlqWjBNaHV4TkVkN1BGSzF0eWkrc3lyQThaV2Q3?= =?utf-8?B?UkphNzVvN1ZnUWV4QVlmb3pXVzJMZ0psZzNLQW8vU0dybzVMME5WTm5LM1Nl?= =?utf-8?B?Mks2V280N0dDWTR2cy9rM0hXejV3M2VhL3dVN3NUYjJDS2ttbkRTVzZoN2NC?= =?utf-8?B?S0t3NTQ3eVppc1Ayb2lJSDhBTmxWSC9QRzM0OW82R0RNQUFDSkp5MFBFbS8z?= =?utf-8?B?NDF3Mi9LVnh6Y1lVY2tvN29CQi9aVFJISGFKcFhjdW05RmExVnluM0I0RlFx?= =?utf-8?B?NWdUK1ppMDVqOTRma0xxMTZEaG5oMWpVRnBzanIxZmVHcHhoK1ppNTg1UXB5?= =?utf-8?B?UmlDZG1ubU0ydzRlL0d2ZDQ0SXczQVR1bXZhTno5VmRWY3RQdFV2S1hNa0Nu?= =?utf-8?B?RHFRdTlDNU8xSVpUSWdtZ3J4UEJpcHFTSHdtc3llRWRzYmxXSlRScTZQMERw?= =?utf-8?B?WnF6b0pNV1FBNDE5bk1KNFNUalljRzBXVW9IMllIdFVYU0Z3aTUvdXF4OUtp?= =?utf-8?B?d0YxdHhFckRqVVVFZ2JOM0NXVWtGWEIyQVZsYlBtZFNEdk1ONkpXNWVxZHl2?= =?utf-8?B?RTBjcS91UWhPNnduRlV1aS9lZm1lM0xQd0MwdTl3S2hwTzFvZUZPc0hFNEZl?= =?utf-8?B?UlZ6MFNOUWFzbDl3RzFtdEJrbmJQOW1ZdTR3SGx0NEl2THdhd3dDc2Y0OVM0?= =?utf-8?B?ZFUwZ284Z200YlRucG42aWpmWW94MGJEWWtBMGtLVEE0bjJrM3ovc1BLZGY0?= =?utf-8?B?bmc9PQ==?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: b1be7880-88f3-4710-f387-08daa5232727 X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Oct 2022 09:39:22.6808 (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: a/InRzCP2MfZpWbzAKjc8dnukDD2lY1RWITzlWxWhoatXm3hVerTIMhWQ8d5nODm0ypor8S967zvQdh+skI9z/3ILQDQ8iiT19zRZr72+yE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB8203 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.8.119; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR04-VI1-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: 1664790615441100001 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: Marc-Andr=C3=A9 Lureau Signed-off-by: Alexander Ivanov Reviewed-by: Konstantin Kostiuk --- 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 409f49a000..456ba4c29f 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 Fri May 10 10:56:22 2024 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=1664791085; cv=pass; d=zohomail.com; s=zohoarc; b=HHFw1up0PsdHa2t9pwktepLSlOuerDHRpX5hUiru5ZpSUnpL9Msn8bHAP3iRcWr7Xx4GPAzjp0L+23+yexC/5/DJWBFKd9qAZOqKpOV2LLJCkrWjc7XaMQXJq8M/IAzxe2NBbCPqXqBBrpEho/TRrqexPNWtGhw2FTQ9NRExID0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664791085; 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=Gwi7mqwrkktrvF2e3NWIDyzILu4okqwx7LzXpwqJwjI=; b=E9QU02wfGDO9/6f7OEDPHekUwnL5SSm/3FHnK+6EbwPHIdB17Shei1mPVJ0JmKsOgQsN2dNKWFHukhXv0tw38UoTvrlXjA9/htzuflluqCBNlHJ2VJ+AWHaVFiBCGgvpaJIBHzxjsmOEgABvIMW7o+msZU9WHeRu0WzOkCMOVT4= 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 1664791085665816.1548054756613; Mon, 3 Oct 2022 02:58:05 -0700 (PDT) Received: from localhost ([::1]:56958 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofID3-00037r-UA for importer@patchew.org; Mon, 03 Oct 2022 05:58:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54038) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofHvL-0006Rs-9t for qemu-devel@nongnu.org; Mon, 03 Oct 2022 05:39:43 -0400 Received: from mail-eopbgr80119.outbound.protection.outlook.com ([40.107.8.119]:34208 helo=EUR04-VI1-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 1ofHvJ-0002U6-O1 for qemu-devel@nongnu.org; Mon, 03 Oct 2022 05:39:43 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by DB9PR08MB8203.eurprd08.prod.outlook.com (2603:10a6:10:39e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.17; Mon, 3 Oct 2022 09:39:23 +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.028; Mon, 3 Oct 2022 09:39:23 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iptPtbUwQPAN96G85M8VdqwMf7HG3OG3p84P4sRL2uYXwo5lgUOiPN1hDVS0HfQG+imDUo1xIdI2Y4MzRXxGv/Vm9QipS2q1MNAGqstTQKHcug0k07e6V5IMRlJon/9vZ88dy3oHmdqkrdBWTPqQ2UQ5qmtDpvT7DB5ErImTNqDQ3bpbJjhFCwaFaEMCY5FkzFl6H7K6Ky5FZNGpdC+/zMfCbdLgnNgIy1tWXVGk2+q2a6JEFRnjRfJsx0fpl7iux5475t5oaDGt75+5qobPEupguQPPM81vAzBCv5H3NrFjAnw+/PlKfRsJpTbjGkMxOwOqe1dyaXOE0pLcVF/V4w== 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=Gwi7mqwrkktrvF2e3NWIDyzILu4okqwx7LzXpwqJwjI=; b=l7Wsv4/5xIx+n3QPu9zPkUgroglc59APGcVobePYavkiQ/jeYww7JXbAMw+vUus9bIzIoAj6VxyEmG4UqGl6q3nZGHAPiU5SiNwjqkoHdQLILGNVouJTwAJFFuv88ShDRHcevYjMyDpKlgFba2ZLUrGPab+ORw/l9UsyR+EusUbjJ2Sdrw9g6I1LnV2TvyCp6Wpn5/rvWSxjaaMfhQhVp7nyrfufuOILOMjqg0H+627Qon2BjFGwBaZQie39VF+NUxb4e1jO4uSswQB2XdnsGU/HWYrJ/pTAurWmOfNKyTgXAlEV7x8SZ74bvcUXBVmYZ2sw/53AS+3eVA3yKozTqA== 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=Gwi7mqwrkktrvF2e3NWIDyzILu4okqwx7LzXpwqJwjI=; b=n4zBocGPmjwCdBdDYy5NIXYwqq+gd6/WbILttJx1L6/MhbDqRNaTdnx3Vkx7aDEZycijRzNLStP3MEj8YPpLl4CLZO7hKAK8gEPMQ+PHgXuUImI9gbSCqJ27KHT8a2Obszqv5jCr0v0Z5XWGEPAclvDMl3DL+zHIye6bTxx3Qn5xAWtM1sGjLlgn/NSBzrZL8dz0UHhNHkILJgpAy9g1ZCai+oqp5QXRImwl0yZTuMHfF0yK4d112XVzKpPzkjBChsKKquksk8q5DXICRnK7hn85tgQijaKCbShWL9C0eFDbWIEJqABMbf7x+He86qjm18ddztz5wCnyDnOAvhJCpA== 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 v3 4/7] qga: Add shutdown/halt/reboot support for FreeBSD Date: Mon, 3 Oct 2022 11:39:08 +0200 Message-Id: <20221003093911.1844031-5-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221003093911.1844031-1-alexander.ivanov@virtuozzo.com> References: <20221003093911.1844031-1-alexander.ivanov@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0096.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a1::8) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|DB9PR08MB8203:EE_ X-MS-Office365-Filtering-Correlation-Id: 7edd238b-0eb3-455f-bf97-08daa5232782 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: sUWuf/1bt9Fon3Ro5rkgi7NOXDIsIw14dZnsxXkeq8/ik8QXNhXUFoT5m5ImDvoDHyuusvy3piPmUnqB7W0ZNPzGdBNfuLciJD39QA8W929vVqTOUA1RzFBCIQ2GjOBy1YkmLK7+U5zVjy4mmDFqjCsqJBTahiSVzx0mvdjy8GKSpYZkCec1edd35cHVA9ZgevZ1W+IUXC4hip8MOqk6evaN8CshyErfIQMtGz6OIzGstq9fEOkPFntljQsayldEixIUoysfwOwMkKLW+h5+f9qPxH1Z30ZtBn3a9mhPTJO7gsyDcd2ctfD8WyOik5+eOcRbjoN58l9CAgi3EOjdW/PhI1sxhcfiaZmaOa1D6XpznvF4BBLKqaIhvVOiTUeVHzbdfbQHG+/pV4G6UHSVTLuKCQjgaMd2ehC9nctB9qPOS3O0mpNSYZBw8SwqeEX6xLQLDDbD24N3hb7HfNCrLza2FeTsH64C2w662pvIuBjLYj8pSi18JkmDafZ+J1Ruqpa64sN6+8NoQ7egsXzAXTRxMNc7xuMT0jbghlvBewnDXk0GVNx1OHn1lyaX2AwNR18P4O7UeBK2OuFSnrX75i+Lc/oOaPcpDcJ7LbqZSv12rftLALYxFNUkMvGjtAU/8p6BZucZq39xA8+FfJ+Sc9HIluXLtIW8GP+1IJJIAvFFr9rZeU+g2DWY7kDgFumv4CZscGgsuSciu1pF+Gfb9eCJ7LM8fTorquE2H8/PrVMsuGKnaGtaw0vwjHgEh4wzgDWtkPFzCIF6kwBEb7vmuQ== 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)(136003)(346002)(39850400004)(376002)(396003)(451199015)(6666004)(316002)(66476007)(66556008)(26005)(4326008)(8676002)(6512007)(6506007)(52116002)(2616005)(6916009)(478600001)(6486002)(66946007)(36756003)(38350700002)(38100700002)(86362001)(186003)(1076003)(44832011)(41300700001)(8936002)(5660300002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?N0dZelpvU3gwOThTWmZCOXMwU0dkbjdGY3hUc200eHFCV3c1dUw1MXBETmJk?= =?utf-8?B?Y3J0bkUrYUFJcnp3c2tUUXc2Vml1T0tUN09kOXpxa2VGL0I4ZkZ3NTlvWW10?= =?utf-8?B?ZE9qMEVTZVhEc2thbmxzVDJ0dElqeDVFbHZkNng1b3RmS3gwK0FxRzJHM1l6?= =?utf-8?B?RmJoVjNzQ1pPVkZiV2V2bGxtVjRCeVdiSWZRZTU4OEpiWVBCM28yUHQ3SDZH?= =?utf-8?B?N1Fia2dYbzNhdDVXSGpRRlQxRW1ONmdCOGoxT0VTLzNmaGxROW9IMjhmbC9X?= =?utf-8?B?ZUR4VXE5WTJRZSt5ZUkwTTFqR203NFB2Ym42RVRlcFRhSllqM3FWWUN6QVJn?= =?utf-8?B?blNlS3pWN2ttSGJLSWV4MHdZbkZqdCtxZDgrZFAzdHFrejhodVhvR2hESU95?= =?utf-8?B?YjdraFFKaWhIaWpKWTZncklYb1VGUy9TbGUySmVoaHFjTmlqWnN0elRVRDBt?= =?utf-8?B?OFdPSUFwOU10Sk5ONFVzd2RrVENDRUh3UDJzd3h6NmgvS01SRDFtMGlHOFlD?= =?utf-8?B?YnA5SUUyODh2eHNyc2dxVWl3MkhyN1l3enYxZ1ROYk1zS0Uyc3NyN3NTUXBI?= =?utf-8?B?SU9GQjNsNGxhTzY3Zzg1TGFuUVA5U0M4K2FLTXUzWmNyTEVleWxkOEpBVDVS?= =?utf-8?B?OGdrN0dFTTJaTElJSm9tMUpHRzNuRC9Uak9GQlZyMVAxQTJadHJ3Um9xZEwv?= =?utf-8?B?WFQ3a1FEeE1zT0h6RkkwaEhKMXFVaHZTaTNUWEQxVUNjdUllZCtPbGtEaDlC?= =?utf-8?B?Tm43eHhSTXFnbWwvZUx3NEs1M20rS21XUTRjMjdrQk0xMlc3Zm1uaFVYQ08y?= =?utf-8?B?OUVpRUU0bC9kdWxUeXVyUDVrR25KZHdLQ2c3YUJuM2ZNSUttM3Y4dDBuMVQv?= =?utf-8?B?TGxTZ3dRMkVBWFJqQ0doVGdEQkJmekJJeFpJY0hLOW5BRXJPc2ZqZ3RpRDEw?= =?utf-8?B?bWozNGUvTFdWQzBNeFNqMVN5RmtJOWIrOVBMUFlNUUsxK2cyZitZMXlXeTNM?= =?utf-8?B?OWFUWHFKWDQybG5UVFQ1UG9HY3c3MmNFbUU1Sy9POTFYbXJDTEdrQjd2Ry9G?= =?utf-8?B?RFYxRXp0dUdLQzI5SlcxY0lTMGVrNWtySXo1Qld6ZmNKZ0MwYmlVUG52N1B6?= =?utf-8?B?OGU5czhPVy9wZko1eXRYbkNLVitiNDB2YW5ETWNrT2RPQ2NSNHYvOGI1SkdJ?= =?utf-8?B?bk1NUUpoWm9VdXpJMzZHaW42UmQzRVRNcm9oZ2tOWSsyQ0V0OHlWazhCUmpu?= =?utf-8?B?ZngxTFJwWDhHT3RBemtYQU5nck40WUFkeFJ2RlByaU55Y1U3MVFxbG9CVCth?= =?utf-8?B?NU1KcVc2U1pLU1N0d0lzZkszRTl4K2VNSldOaHNzUERpai9OYnhiREtab0VW?= =?utf-8?B?czBsM2s5MWE0cnlYYlJDanozMlFYRGtuejhRcGpHQ2xXU1NoTDdoZktqVk5z?= =?utf-8?B?N0FiRmU4UjRTR0VUMlZFa0U0S3FERHdteWN4dEN6REgxdVJBUDU1NEthSFZD?= =?utf-8?B?bDllV04rOXVBQytSb0szdmdhaGVZR3pRYVZlOXM2OEpHNm5BWmY0QjBvSUdF?= =?utf-8?B?S2lkR3pvako3SXBkWkhackpvYStWRVh5TVJrWGh4VTZ5UlErYk5WUVl3aVR2?= =?utf-8?B?NU5mOE8yMnQvUVFtTGQycVB4S0FNQTllZXhnUzRxOGt1NGVuZDZuVUJWTzV2?= =?utf-8?B?ak93bW9Uc3V1REFoU1BLWlRKaUhxV2YzN1RMN3RkK01DQVM4alJQMjc3ajVy?= =?utf-8?B?RHMycEdHZS9FbEhZd2c5MUtQTXNBOWFXZFdRVXEvVzRXbFN4U0VON2d6cVA4?= =?utf-8?B?dk1uVnVldFFENE5tQ205ajRCUG45ZE9YbEhsdVc3dUNVZ05hSE83OC9HMm1M?= =?utf-8?B?ZjNSK3MzVkZDdzNWMkhWVCtZUlNIbVg3QVpqSlJUN20vRHhyd0N6MVp1L2RQ?= =?utf-8?B?YVZxU1RMMEJPMVpIQ2dqWlZBQk5KeUh1QjlIVTVUb3MramlyRmVZNVpzcVpL?= =?utf-8?B?QThwZTd0K3NYdDZHV2dnUFhFak40SisrVDJaMkM1MzVORk9qWUtrcUNwNzNy?= =?utf-8?B?YldjUnRVMnJwSElubXptRHVTQVA1WnkrMXJzTXV0dDNWWjZ4K05NY3V4d3dl?= =?utf-8?B?T3Z6QmtDZmErbWJLNzkvVlFZMCs4a2svMy9DR2FpTldGYWNTNmdXOTAzSzVP?= =?utf-8?B?R2c9PQ==?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7edd238b-0eb3-455f-bf97-08daa5232782 X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Oct 2022 09:39:23.2914 (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: 5XF4tj7J2DEOZEeUuIfhtJfAT84nKrECXY19fmGedWoAh/Z2YuWibZgjRmq82OHpE2/ZWGFGWvNcvRTDqTiimoVFsGnePfxMQ2EtVjVbmQY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB8203 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.8.119; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR04-VI1-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: 1664791087433100001 Add appropriate shutdown command arguments to qmp_guest_shutdown() for FreeBSD. Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Alexander Ivanov Reviewed-by: Konstantin Kostiuk --- 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 Fri May 10 10:56:22 2024 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=1664790193; cv=pass; d=zohomail.com; s=zohoarc; b=FJkjG+APNv29R5udVGixjTJjks4Az+blAMe3t3wME9HY/eXEI957d6NzGs6g6Kxh3WlYR8KRe2W42w5x5h5vtEM1wpUezonKww7IbsVoT9YAgd7UNxiebIVFyADXT+HH7E/Jbgu9lKc5Tzzi1Do544yiLKKuItVvQVDlRrZD08M= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664790193; 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=3AyknErPEb2iK1T9/eiwdanI8x8WzfCDcmkPNgBXRe8=; b=lHfSzsgaiRSsO+c8tsrqfrDzRFydKRHXEz4YKC2SfALn5F874G73Tz9TUjN91ov2aPT9oKwE+FDqbcATEhkG60YgfqBddO2RrHj+JlfiIF4h11DBj+tkAlfNU+8znT6kh84vUsyDFKTXihLy7G/WBWVr3663HGSB/ebhkBVhf74= 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 1664790193413175.50825313581515; Mon, 3 Oct 2022 02:43:13 -0700 (PDT) Received: from localhost ([::1]:41164 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofHyi-0000MB-9m for importer@patchew.org; Mon, 03 Oct 2022 05:43:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54040) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofHvN-0006TS-CU for qemu-devel@nongnu.org; Mon, 03 Oct 2022 05:39:45 -0400 Received: from mail-eopbgr80119.outbound.protection.outlook.com ([40.107.8.119]:34208 helo=EUR04-VI1-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 1ofHvL-0002U6-KY for qemu-devel@nongnu.org; Mon, 03 Oct 2022 05:39:45 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by DB9PR08MB8203.eurprd08.prod.outlook.com (2603:10a6:10:39e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.17; Mon, 3 Oct 2022 09:39:24 +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.028; Mon, 3 Oct 2022 09:39:24 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ja/g3xOduAAiV7MKbCcVRlmqDP91UWbf/YNLjVj7LN0nONsmVycquRknBT7ff7EX7RyveALg1Xx59gXgfNJQnmeKz3L7Cx8kU9nSTn4X9qNZWoylolZ58oSwt17gVZGlDiFT1/J3bZBJy8KhgBHr+cSPh06S8D86rmtjxiaENTqUqBhOfBytuVTlYiG+iUYjDHU6yoTWnouQ1N8DvrNfUAdza//+9SF7RaFng7PdkkZghjtKLL5TV/HZLUTWLMvj83aiaDRH44B03aXIqfVxYCN1xTmcuXHSGx59AQNQAndo7ZtIQKFavcWcuflw9sifz91RvLEX2/5pX/+rpEXz1w== 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=3AyknErPEb2iK1T9/eiwdanI8x8WzfCDcmkPNgBXRe8=; b=B+yiHTCGsMSzkn2fIdQ68u/EM8wjcROlvFujBuKIwcemzJ5ZWwLoz0Q3sBLjUvKapTSAo6xLBdixVl7UNtSn9G6IZb+VGT/1tndn5GXPF8v1sbLkW5ayZ5MxM5Ckx5wJsU8RrSfSB6/SWncrOC2taPoe3vQzi4YGaH9pVRvFuktqkfWxx4/4KyGUWjbP629oMaxEAyxwU5QqxnzyhfClswmtR7LfXOcPGxhixSHhQInEMSEGxqD9A0TX8qWBxk2GeS18dIgD6M2tAkAMmjo8Tfx+cNLfE6sM6a52jBskglRt/K3DW1hS5/mFvt3lKxSWZ8RP3YHLhi3ASXtdNPSv3Q== 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=3AyknErPEb2iK1T9/eiwdanI8x8WzfCDcmkPNgBXRe8=; b=nmhWMmAhmTxV2T/nSi8iY87e/J2QKyfQQhHyhRi/2A9eqnYR4bGXoeD5D6u0wEGWw5bYWIlWOk3NfrZ86KQjldd3h4Oo7TPZPMYNq962ucMFOWhTKkctftZuq131kjdRz4MKYBARR45ma92dgqz4XVGcVxuFU2/Hsi5Bes55j3KK8bhaRzQ34VR5K/cHy5HVNSG2eEdXepfJh4HrIT+UkEml3aoWvinTbv3yBFkYWLn0VhL/LzH8Bhs+EQXWdY8Q4yALposBu76zw/p/hoVfkUtTENv/RUZrbxtzOfa2C3GGR+zmMp8x4gmIETAgCuksbBYqxhYEFYXwF3vPlN8Gfg== 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 v3 5/7] qga: Add support for user password setting in FreeBSD Date: Mon, 3 Oct 2022 11:39:09 +0200 Message-Id: <20221003093911.1844031-6-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221003093911.1844031-1-alexander.ivanov@virtuozzo.com> References: <20221003093911.1844031-1-alexander.ivanov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0096.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a1::8) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|DB9PR08MB8203:EE_ X-MS-Office365-Filtering-Correlation-Id: 5f5ecf0f-08dd-4efe-5715-08daa52327dd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: VFhFPQCFN0wUrfrL5WYNOnPw2CCpMOm+OvvNCCT+wYKD9lCXDvjjADO4Y+Z60LeOjbj3mYK/saC46GBI4WxQTB2G45YP9fSkSXb8qUgomLgR7gXZArwACHqomqh4bQ95VzbSci2GeGjLYg864+kODwbIBEj4oSAVCz5S+w9qVWw/UhsY5y2+/WpjDPPhliaM1+mJz6/rwzRmpCCFj5p6Xi3VEP8e8YLwVZ648/6xK6bss7mDNrtHRRezu7url/qcXeTTlnTtx1knamyf0RMGsIgvzihDZIybL7CW8lukwnaj5lZEwc11V60skAGLvKY8skAgDHbetLVNcolrZvCh4EG4efMGF41LouNXeqXaiXOJ52tqeqJnKjNhjKS7pGvXZHNnWIL6ugJ0PvcHVmdHYPLVnCfCeEI3D3/WTfX/kXKYnOrLXpVr20J7IkGAS4zb6M6PIWJkjE+/tt01duBYZtBMGo0qMkXwuY5KgN+QaSDt7VbBdVDfqiUzhrWf8qYEDeexn2ZhpNlcRuSaHBNhtYh91jroQWoV6bu9hyiiitlMIgdIDemMThVdm0BivObi+E37moymVD91DcUKtFjIjgW8Z/nCt8aMYwhKFxmEyboU3P87nEaNDZn3CVUbQD9wI3l9MmiQXW0EkaCjNHgRpUOHlbEsNFFP6WNrkDrj1I5ke3wu+wwYVBdvAWz0gM4Ef/pYzE2zICdkEWNv84NC0ofwos/DDnMTjjVdYUZgq8eXKjN5cUEVq46gQ+6vJp36 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)(136003)(346002)(39850400004)(376002)(396003)(451199015)(6666004)(316002)(66476007)(66556008)(26005)(4326008)(8676002)(6512007)(6506007)(52116002)(2616005)(6916009)(478600001)(6486002)(66946007)(36756003)(38350700002)(38100700002)(86362001)(186003)(83380400001)(1076003)(44832011)(41300700001)(8936002)(5660300002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?/WefOAu8DQzqIYLWqZJozUIf8AO+oMsnhZxjrbdMxpOB0PiRyZuPJDxHrj4K?= =?us-ascii?Q?y7owJMUWb1vJVjFWReDTWKkzecnq9JsGjm5mtk23lri/jlvHdrmYIWc2QLyE?= =?us-ascii?Q?octnaXrFJJhVsHSCicYsW53ZvuVpG3UzAA2mFhJvRJ+EzIaACZWdQS6Eh9jA?= =?us-ascii?Q?eLlD7H06fDfHrklLD+MwhQ0Y+Q9WG3KQz5ZoiaUAzFU8SKiBiXK6lM75Q5/w?= =?us-ascii?Q?ckxjwf5VfG3jhTpVSEaAwoQ39kfi+h/k8Tt5i7kc9GGQpjHh/6R9iJ4/QuAG?= =?us-ascii?Q?HPH7vA/QZzE1+UfzVg1MW80ZAF3CJ2RFN7e5bGGepuPT2KfRUYZ0bwywLgFu?= =?us-ascii?Q?OQDQtB/evqGvRjI18/k8PVDG8LIKetEi2SjdUXMnjmOWL3/pWKjR0svWuJDA?= =?us-ascii?Q?tsD+4NzTrcscoGuKjjIMD4nsccHeO1fRW3kp0Anpm2lxJWFjJZRafMrrrNHd?= =?us-ascii?Q?4QPJ79df/6QrQTXM4fVB5x7teNrW4ul/5HVXsVI939M3fz1vkxmm72MSLO2N?= =?us-ascii?Q?lNKRRB4xVv11kEiTl98FAL6pLYRhSOMdLUVmoQsbl5P0tumcyaJBq6cISsHM?= =?us-ascii?Q?rbNgM5HhrHgfI/QzyZHaD0KJs2zFtniLhyjOTvV+qnbkEBJElDb/NzCDXtBZ?= =?us-ascii?Q?XG2sKz/OpEqbO80zCIf9LhgRljG51hcivW6VA3UGhSQyF+f0SsaCkZvId7XK?= =?us-ascii?Q?7F1d3UnyjPsJ0gkUzWXivVLwi9j4/Tiwpqchh0DnIB1qPTvO/t3NcIdePcmx?= =?us-ascii?Q?ARwDItFkzXOSfN0e2fTqufjEf+muKQR8SjIlzzbGdmTisXpBgv1rIRtGqgDq?= =?us-ascii?Q?pv7MSDlWZpN5J2pQH3Mf5a8G0BKWEtd7Clsxo9AuI8mOEW4LxRth2Ne73B1d?= =?us-ascii?Q?ywXSqg0hFKaTORxfv+eNgrxHhGCSK7uyBdTrST0/5ju863ZZcQgprch3HTB8?= =?us-ascii?Q?Twe5WXqmACPCkfRSaz3Mc+XN6g78mwDAPEt1tAufIRaxZKongdzNFKTtlBiT?= =?us-ascii?Q?xsUB8GUEi6+8l5H1nT4iBmKcwPiTB2T918lEJSp6KmiXdsByIoV9fl/zi6sd?= =?us-ascii?Q?duw/zEviWiQ2EJ/xi+/5MfckIR8W7M8cUnHBuwTdxYQEw6DKJUQ/A2MrQugi?= =?us-ascii?Q?kIp3prgnCmXjXVHqYTW2FBBZeZRagJq4sHz1zLex1YjnCye4smat6tl5cP/v?= =?us-ascii?Q?EN6gnqQHrt5WRrTJjD/tV5yBaBAQxsoN1lMPTj0TIABpyiYHDJ9grQNv72Xc?= =?us-ascii?Q?82By4aTO56u4DTdpFx3w0E6bcal2ZHI/UPq/OFAmoLEeJHH19quIROk/dpVP?= =?us-ascii?Q?jT0uBHAvPM9n1+nn/nXfJut+wXcEVYj2PijwNqZCsOj1WOL7SqFDVhVFTRfC?= =?us-ascii?Q?B7XlweWXRGgw06SX8m6vjl5iLPOuyEWm7Is/ygCGIeIYR4M66R+lmF3VKMQz?= =?us-ascii?Q?RUlmftlMUKkh5XpCp3PfXsde+G4zdV875ZfNp4EJttCLeY+FXpZPfGhyYxEW?= =?us-ascii?Q?VfTH20ZDbeDONiY+L50Tdy7dujPh10LaEEk4HHzgctPvA+UDsbAlBls8w5g0?= =?us-ascii?Q?r0ZTOA+OfAl73p2J/T5DmClUf6qfsysWDQfh9uMpzltbS1eUJcosxnjiqGxf?= =?us-ascii?Q?2w=3D=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5f5ecf0f-08dd-4efe-5715-08daa52327dd X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Oct 2022 09:39:23.8695 (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: udYl6pZF1ijJMsft3ldIRkrv2G+qJynRdUDUjvvdDY4ZMPF43cPLb6ApO6nHQSSBu56mODAa8qDU1bseLjcWq9ZGTJlAcNnxMtQhu7itodM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB8203 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.8.119; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR04-VI1-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: 1664790194822100001 Content-Type: text/plain; charset="utf-8" Move qmp_guest_set_user_password() from __linux__ condition to (__linux__ || __FreeBSD__) condition. Add command and arguments for password setting in FreeBSD. Signed-off-by: Alexander Ivanov Reviewed-by: Konstantin Kostiuk Reviewed-by: Marc-Andr=C3=A9 Lureau --- 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 Fri May 10 10:56:22 2024 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=1664791430; cv=pass; d=zohomail.com; s=zohoarc; b=Wgf+rveTqxMF0BMKKusjB6/txtbG4yIlsIVgaPduQn8fxKdtXMRbNGmrKRDEpIH/D1rBTrsFLFoCqGH6h0FonJDN7LHo/U65vhZodhKzol5t9SU7X6maiAjXNVTudT2Hen3oq80NIP0OALemAOYq/JDNYJWDXuHEFvBoXJPHYpc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664791430; 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=GMmb0KLPqmWq8e9j4AHAUqbvFRHTz+zJGmVL75zIHYk=; b=cvqAOFTazMiNK8nT+33xSjx73li3+nk9vudc9VqrTEsHDnwOltxFf5PBUdtmyq7Nji+PbLMF3tNaySNWhY2grRd9JYlBZbu2P9QLj6KCBvncN6SGoYbrSVBRFIJunaHacXTWQixRqfzhEvf3+9MsYPyK70UCCziz0cAvmBPRpRc= 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 1664791429993358.4605043616931; Mon, 3 Oct 2022 03:03:49 -0700 (PDT) Received: from localhost ([::1]:54018 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofIId-0007br-36 for importer@patchew.org; Mon, 03 Oct 2022 06:03:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39162) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofHvP-0006XP-OD for qemu-devel@nongnu.org; Mon, 03 Oct 2022 05:39:47 -0400 Received: from mail-eopbgr80119.outbound.protection.outlook.com ([40.107.8.119]:34208 helo=EUR04-VI1-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 1ofHvN-0002U6-O9 for qemu-devel@nongnu.org; Mon, 03 Oct 2022 05:39:47 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by DB9PR08MB8203.eurprd08.prod.outlook.com (2603:10a6:10:39e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.17; Mon, 3 Oct 2022 09:39:24 +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.028; Mon, 3 Oct 2022 09:39:24 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=c3I6H2bOxjJiAko77L6vGk8zZnYh5Bnk9X6/dUQTVh7RFOr8nNgw2XpxDTOGexSfd3I5E9rAkdN2LMrraRwVtJwoU1xm0HR4sjjcE8UGoBuwVoOCQimfl03wvGNXssqAUY6N/dknGtfDIEcxrjNRVp8HauGTwmNwGI2zRaOKdVl160m1OuSsFNIpzEMbZdO2pTGgp4/75tTwD9qSozpNZKPColh2WvzVoBrZZcDdoaOXS2yrWhPd3WfQeFaDe9rhZglVYE6ewIUIMteDnVdnXdAkGbbqHQJ+n7tTw7rqJkPhTltz+utHmup9BOxaQxKmmq0fI4yZ/WmPhfLovGzTlA== 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=GMmb0KLPqmWq8e9j4AHAUqbvFRHTz+zJGmVL75zIHYk=; b=ZA21u4YQcCgG95QEwSl5dOx32RWgpY0whfbEwTuf1VI/l2nF9zNhi+m9jUgp6/r+yHBbYVGobUURsCCGo8pMPsBRNBCG5jzvYyS7LbZsMEoUJznZDV3uRKd5WDH4jNoATImwBhkIgXxOgNnjXp9gBBmJBSOiXHYJgU7eLywzVjpazq7StG/JtM7cmF1wDn1MU7CEQZlgRmxNuvls3NWuCXqLJPoPXxkgSCRurqyI/h3cwzwkP3yBEPq/NuPyJJ/wtyFWjT24nudMaX6dDTFQJkG9bn7W4/HvyFozwiLzaRN8l1BAcTE7PBo7Tuaf1SKju+p3LpKfCq8x6VyEDDTzsw== 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=GMmb0KLPqmWq8e9j4AHAUqbvFRHTz+zJGmVL75zIHYk=; b=EeAsdCifkrqDZ98buLhPcYooC5fVzpbRT5glxLffevqWFy1T/SNZxP7WHqIOIGo1d4PZTy2uX+T54lw6ByIxJ5WMuj9kxcek9Gk2sjP1E3okcJRoMGA5eiunUI+wm+2+CAmaZJPPkCpDIZkuOk3NYDG1MljHvaOGkahvdBeEIsianryC/v6WGIAv9Ua2JuVMEYDp3mwWz6sbjLBKHErWmidju+AtcWPlH7schtOmkwORXgr1MGElCkDFp2vGJUEXgV4axA1owoz1Gplr9v4324RqNcrQr6UIo9FEQtIysC37oY5Tk2q6FbRknpMB/9o/g3TGw6HOA5IlXlVUgU9ezA== 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 v3 6/7] qga: Move HW address getting to a separate function Date: Mon, 3 Oct 2022 11:39:10 +0200 Message-Id: <20221003093911.1844031-7-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221003093911.1844031-1-alexander.ivanov@virtuozzo.com> References: <20221003093911.1844031-1-alexander.ivanov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0096.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a1::8) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|DB9PR08MB8203:EE_ X-MS-Office365-Filtering-Correlation-Id: f26864a1-b788-410e-6655-08daa523283c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Z5uTOTTz5aZe0NFHJvLPQ/ZBFVLt4nJHJYdHFT+2Oo5fHwnWNLcXjX5L9pFkWHTdKUN95J02ruKuP7E3Or3UWwy/SrRSYgBvfLAZDXXVrS8xYsYOEPuQZ8Dzix6ynu/5bdWNPI8ejdUhP2aEfdsQKoRt04f+5dwtVITgcoMedzWXuKdlS/rpwdS316iXhGTge3cK2ayu/lYSsJt9jZEfEIak5VRUZKJg6yTfCxkHX6KV++Kpt1mcuTQqjaKAESgzmOQ052n39kP7UCNjfCk+ChFedtJKsd+oryGwTYK67YYFppoxHK3HW5aooHW5SmbNPRUYLt8DyiyLtAKgNYTsMjRcRO5Y6yMuR41NZBFuTGyhhIqZgv5C/oCtiNFKlHgapthB/y9QpUoxfHDtHwtLj03lJ8P+CIq1O9tNLAiiA5PZ1FB4rtEHMZJAQAuG/cNIVuQY3kP3xCqXhKCun5lFRk6itRszwe700DicKQUCy2GZRRXk5MQ8hSz8+KpbVnj/ENoT4hUwWJpem3V9IPH27A1yrb1I7l04OipgieigxSkT4a85tf24aWhfEVsq5hCC7Nn6bjDevspU72Wv2TCiA/xEopMExF5fAueqB/NKX95YTkFVlDOOc/+bGASDNju23ogoaevR6X7dirUtqILdr7XLhWrhCXp63e/vQmgeyXFiiD8O7jV/ffBpv/DZMz32GwJz/61WNJ1f+K/DrwUHYjetJIMx4FdhR3Dek5I1nfEF0u30l3DzuHFNKV9F1ERhRcmySDO7aj5qs3IHvj4PUg== 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)(136003)(346002)(39850400004)(376002)(396003)(451199015)(6666004)(316002)(66476007)(66556008)(26005)(4326008)(8676002)(6512007)(6506007)(52116002)(2616005)(6916009)(478600001)(6486002)(66946007)(36756003)(38350700002)(38100700002)(86362001)(186003)(83380400001)(1076003)(44832011)(41300700001)(8936002)(5660300002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZnFPbVVISllOQmJsQTJQc2J0Q1EvNUU4NXJQQzBLb2dzam1xOUtQL3hZcndN?= =?utf-8?B?bVA4VFQrS0tYVUFLRTRESjBTWWZwRFQyQjdhazhwWm1vcy9zcUdyZHcyNTlK?= =?utf-8?B?c2VPRko5RWxOZDdtWWpjajhPVmp2OHhNRTVwQVArWk1zOG4wdFIxZi94eUs1?= =?utf-8?B?TjN1RGl5OEtjWEwxVm5WQkV1ZkZkUFVHNVR0QVoxakhpY09KcDVIdXpucmNj?= =?utf-8?B?eHpYdy8wS1VrWFVoQXF4MEZkNTJRd3hGUjc1aUQzOFpya3F4YlJWWGNhV0Q5?= =?utf-8?B?R3Q5UVlVVm0vVXVKajdzcldRZGhyOEgwOGNHcjlEZlJpU1lGZ3JPN2pOWkUy?= =?utf-8?B?bXJkbno5R0RDMW1CMDFXS2tMclBOK0xic2hNWFhCS01PZ0FCMm5DZjUzQjk0?= =?utf-8?B?aHN0NnJZZVhkZVdDU3lIZW10alhGSXJjN2h0dmtLZ3hGVFJCTkxRc0FqWjJH?= =?utf-8?B?aXUwYnlGN0dJajdjWXFhKzkyZzBlUnlZekcyZ1JTVmlmTjdvUThxUHFEMU9G?= =?utf-8?B?WFZCY0tXVFUwUTVJVXhiMDB0SW1jQXhlak5WSEttUEZnUHNGRDZMMkRFQW54?= =?utf-8?B?Vko5UmlicU5MSFRjU0NoWWZ5TCtsK1hTeTN3ZEVZWTBnaUpjMGZTaFlram96?= =?utf-8?B?amt4ajZsdGF4b2pOSDNlOUV3WkF1RlRlTE0xMkxsVCtCaXp3cDJpWjBvM2U0?= =?utf-8?B?NVoxRjdLVDBaUHpEdmovMkoxUDVISERqcWZzWFlpSFBPeHB1WlJCdXI3dFhr?= =?utf-8?B?V0g0N1VpQWJLeHJNTTlXMGtQZGpqRkxZT1paYzNRN1VUTEsrUjRxSEhkaDRP?= =?utf-8?B?RmdDS0ZpWXozVExGc1hDUDI5NmRGY1hHbnc4ZzRaTERsaXA4Z0g1VFZEUDEw?= =?utf-8?B?aVQydzFuSnJnak0zU1o5U3JDRjBLcDJDTTlLWHR5enBxOWpvckJXKzg1MzJz?= =?utf-8?B?NDNTM2tCVlRuTTZySU1qL0RSYVJMTkcvZi9NdjMraitJaVdRckZnMDRlMWd4?= =?utf-8?B?SDM0bmFzTEFsRVdYVkFRSzlsS2ZhZHJ6cTA0K2hCME9mSlZGblFZWE1zem5r?= =?utf-8?B?S0c2MC91aDdrQ0NJeGFRU1doU3ZoQm8zMXJQNDBhaEhFdS9mcTdxQVcreWZ6?= =?utf-8?B?YXNtNzRUN2pPemNNVGZQM09iNVhNZm5pYStrOVNZd0p6c3VGbksvV0pWbE5R?= =?utf-8?B?M3lBN0pmKzBXTG1nZ0xoUkNVYjk3cUQyQnU3N0hQMXQ3aVhJRmhFS1lwQlFk?= =?utf-8?B?a3RIc0E4Mk5hK2hBMlRxd0RPOTgrUXBrNzMya2Z3b2FBWE1HcytEWm1ySXBm?= =?utf-8?B?a0RvV0x3M3pxTkdXZkNMaHlIZmNZVHJJb3VSc1d2WmpHNTNmNXBOT1UrVHdm?= =?utf-8?B?RHRkVE85WkdGNzFEMWVOd2VDMXhmSjJCd2FEbld3K2t6ZDNwZzA5ajZLVWNL?= =?utf-8?B?Q1RhRGU1Qk9tQktJV2xNZmZtcytROHBkYW9OMGhnUk40aHYvT0Z5SU9ROExx?= =?utf-8?B?TEFRd3VpcUhnS3FGV0xkTGlZcXRrUTBFRHJtdEdFRlR2ZkNKbnUxUFh3NVU0?= =?utf-8?B?SzJCVWc5R3UzeFZ3bG1BU3IzcDgwVjhWcER2ekJBb3FpMEx3Ly84UG04SUsv?= =?utf-8?B?MGVsY2duVzM1Q2hKWm9CV3dHWUJjM1dhQ2dpUzE5SHMvYXUraGdIc3B3QWJW?= =?utf-8?B?UGp6VHpTNnZFRGlsMWpPR3ViazYvTWJodVdvdElSQkZFdzRISlR5ZEVtdk9V?= =?utf-8?B?UTBDRUIwaDVhc0VlOHZOTXp1MmE0eDVXY2FDODBYbVZqc3BmK2VIN3BYZmI4?= =?utf-8?B?MVg0Z3ROZ0FNVVBESVhLbFZheXlud2VZNWRXdjRLVHlmUXErMEF0UmI1RzFt?= =?utf-8?B?RVVBVTBiTXFGeFdKNjA2SU1vSVBoTGlhSW5mSGdYQXdhRnc2MzlpT3o2dDB0?= =?utf-8?B?RkhieHRqZm9IRGhaOEtWbHNwaDFFeWZaa0laYk1VclJZNWdsMWJQSVcveW9R?= =?utf-8?B?YkhYMjZ6Z3ArekE3U3VQdTZvRnkwSmgxZWxLeGFVOFdmck1teEtwRnpHTDBK?= =?utf-8?B?REh3L2ZGb0htNzFjKzRlVzNuQ09yVitzMDZUWkMxNmxzNkJKbVIrRmJibGlD?= =?utf-8?B?SEMyWmp4M2J4eUhuK0U3S0tncXB3Ymw3TnVpcnhMTlFQUWJVRjduemtNVm9Q?= =?utf-8?B?NVE9PQ==?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: f26864a1-b788-410e-6655-08daa523283c X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Oct 2022 09:39:24.5081 (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: z0Tt1jQJO2sJIiPxBCEKBDBFrWeKnMacmKzFkX8GY0OMDjZGNwm6FBdo24za/N0tXqaVwEaqJ/9NN8+xzVKZiraBHubY6PYz9L/RPSEBv64= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB8203 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.8.119; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR04-VI1-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: 1664791430478100001 Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Alexander Ivanov Reviewed-by: Konstantin Kostiuk Reviewed-by: Marc-Andr=C3=A9 Lureau --- qga/commands-bsd.c | 16 +++++++ qga/commands-common.h | 6 +++ qga/commands-posix.c | 100 ++++++++++++++++++++++++------------------ 3 files changed, 80 insertions(+), 42 deletions(-) diff --git a/qga/commands-bsd.c b/qga/commands-bsd.c index ca06692179..40f7ec7600 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 -1 in case of an error, otherwise 0. "obtained" arguument is + * true if a MAC address was obtained successful, otherwise false. + */ +int guest_get_hw_addr(struct ifaddrs *ifa, unsigned char *buf, + bool *obtained, Error **errp) +{ + *obtained =3D false; + return 0; +} +#endif /* HAVE_GETIFADDRS */ diff --git a/qga/commands-common.h b/qga/commands-common.h index 2d9878a634..a9cdaf7278 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 +int 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..2a172c6492 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 -1 in case of an error, otherwise 0. "obtained" arguument is + * true if a MAC address was obtained successful, otherwise false. + */ +int 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 -1; + } + + 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 0; +} +#endif /* __FreeBSD__ */ + /* * Build information about guest interfaces */ @@ -2909,9 +2952,9 @@ 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]; + int ret; + bool obtained; void *p; =20 g_debug("Processing %s interface", ifa->ifa_name); @@ -2926,45 +2969,18 @@ 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"); + ret =3D guest_get_hw_addr(ifa, mac_addr, &obtained, errp); + if (ret =3D=3D -1) { 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 Fri May 10 10:56:22 2024 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=1664790609; cv=pass; d=zohomail.com; s=zohoarc; b=er2AjvMQrWG3/qI833bLfJkgzcOxWtPxW3Y7z5J9Nfj2MC9eRJt0Q51lc0lA0pjzDd5Y9z+qZgdVyKsjVElh+nSl1YL59/Y+pvXS+7jM8wf7390aGARHHd+cECiCwQaFpgVAV6LxpfztRW4ao6Wb+3dgUOIXSENUMxjQFrllrfs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664790609; 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=leL6W1bPjBeZBabQgAlReZDQI4PoSLYkYymsdEyK/aI=; b=ELCMY7t5hP/3iOWozJMR3i8qmIFi4sIN0w3GHSC9GvWs1lANZQEZRPUTek4x3D86UnfWjncP0C2KaoWcUgMpcFfXU/nPKoBf/iLZNLZ+K9jjElXjXPp5lD548F/XJodkfEAvqu0Yy0wbIxL1oXGEm4XqVu06qO4jkP4Q2m0WwjE= 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 1664790609861584.036688403498; Mon, 3 Oct 2022 02:50:09 -0700 (PDT) Received: from localhost ([::1]:50858 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofI5Q-0005cZ-AB for importer@patchew.org; Mon, 03 Oct 2022 05:50:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60632) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofI0B-0002h3-5X for qemu-devel@nongnu.org; Mon, 03 Oct 2022 05:44:43 -0400 Received: from mail-vi1eur04on070c.outbound.protection.outlook.com ([2a01:111:f400:fe0e::70c]:38159 helo=EUR04-VI1-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 1ofHzx-00037U-SN for qemu-devel@nongnu.org; Mon, 03 Oct 2022 05:44:42 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by DB9PR08MB8460.eurprd08.prod.outlook.com (2603:10a6:10:3d4::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.23; Mon, 3 Oct 2022 09:39:25 +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.028; Mon, 3 Oct 2022 09:39:25 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=X5cGCNgF+n/jHnGjafpC82JCBKVjjwPSZlQqggpKyjTo0GsvUXL5jGMnGfPn+FYyBxQ31AnKVRh4zTk5QBSa3lqjWIBGlVLBWXlUG/lGCf0IKMqnIvEvM5hFzdBgijqV7X6RtGfwd/AJ+ATMibi/xVx6zBQn+rtCscJwifFLDMWguaORObh+0ASH4dO60JiS9eF49Uu6WJdrALIs3PVnY195MmnkHZL0UL4vH4w9kkisk5szmKoyH6TIisO4jOOUSajBFO3+hYFHZKNuQFKebpXi+eVmF1TEpmBhoiGQolKl8eu2NBO7Qk87SHCzCY1A8ozsaNUcPTjw32JrssgIRw== 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=leL6W1bPjBeZBabQgAlReZDQI4PoSLYkYymsdEyK/aI=; b=dwg297aEZWea/0F/VkCtcS5ZCYj9tE0U1NePZvZdpET+bRnFMG5nf7CUR2N8XSCDo3YXVCTzpgn2ryAuPb6z8f2ieIlDeZKsLCpBiv4Ov4CQETO4DSvYAfk/f43CTbjwWdSWqPAb4lY/AUwY6zX08VWNCjWKCuhjiLd9I/zzpNn382hmcTJK7JTHKgpaD80v2/Da8mWqn+6K9xkinr+PCs4cc9h02MV06unOH/DFmCsvcBUfGZlRBrl2tbdskn9QeysZF30d/84oiUgmqTAsMTvmWClJu7YHTx8xGOueCZ36jA/Awt6wNXLSlwknLvRqsgKOyKOLaC9XGPYq2XQcdQ== 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=leL6W1bPjBeZBabQgAlReZDQI4PoSLYkYymsdEyK/aI=; b=MhjmrNfDmUKP2zPqvBLV7Vf/a+aWaQ6NGNXJk1XEaO+oUbJMAT13xggEkXL7dKzqn80xVr3W4882APJpkmPH2m6GHDm3wib6Dsb5TixTIYVA/ppTlh/lBW49LCoAWeOVm9L687ED0w1Nb/UWAlH33Eo3QK9kQZ5KeyWEjjT0oJShYJR7v2zJk5ZjWY4S4hRGZqyVORNukpUGiXmsKhWZASisNVxyEpCFOu0AfgsEHYMF4ztZ2J7Nr9I43vAh92f0C8C0Y2iorklFPlp0NutRQHGZeJRRKZZQz1XglE+zx5A8Pnn1uEzQXSzjQMC6i35n6aU+mbH2ys9cYrv6VEey1g== 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 v3 7/7] qga: Add HW address getting for FreeBSD Date: Mon, 3 Oct 2022 11:39:11 +0200 Message-Id: <20221003093911.1844031-8-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221003093911.1844031-1-alexander.ivanov@virtuozzo.com> References: <20221003093911.1844031-1-alexander.ivanov@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0096.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a1::8) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|DB9PR08MB8460:EE_ X-MS-Office365-Filtering-Correlation-Id: b6cf0ba5-1d30-46b0-c69e-08daa5232896 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: LNCm65Dsq5WyF5G2m+8ZGkP3XNLv4oXqgDQc0q2SBsAfvvoECl14BdpZ3XXoaXMADRF2zANAyGUERcvCO4ezzsuBnNFNn3yiHQjo8kEDWqRPI1GCemcFsmcl0ek/edgabqo6bdT+zUNM5qexsgUwmarletCqpGtkLeRQOp1xXEupdh+qB+A4C2JFQPi689jlKuo4RhMSa+2jU67pCyUH4i+2k01NcA4seA7H87NQ52d/c7DMNsQCMarJh1LaNiAJP5qVr+qi7V5wf9HadzMOmToE0bi46vI4Aw76K901+A1YxpQuPI2rrSxB+rrVyJdLLspTo9uFzcQis26+Hv0LlSXjX4SSIzEkRPJDF8pCruW2lokhSyU4n8OayH73UPh+P9CaBugm2m282IEfsJGiOhHi6lev2xpUIOk9+Kz5Az6jjuDGAKQ2IPQWGfrL87brsnyUtd8R2gmOq5/pXeNF6QqGM5s6y16qo8/T08ff2CSfP2t2yhhqtyfFBezkC4eo3D3sIdhhYMoNT1EN5ACZlZqVX5jxemfXXT3B7eWVT3wwV9loRh2B/nHEB1rT1WiIRlbj86DOVnjTi2/qYoa9UI0fgrwpY7ITWbliua+dVYeCgGXLBuAZgHAIHV5/lw2NcvnuUyCNLa4NKo09nlQ2IUzNC5cTk54nGCp33++GwutHgskIMZovd/95A3wz79MMJEncab0yp1lq9C//BfBawH0dGb7FYpafilPEoHitf+mdAq8U0cM6Ox2imq0Cn3fc 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)(39850400004)(366004)(376002)(136003)(346002)(396003)(451199015)(26005)(36756003)(66946007)(52116002)(6506007)(66556008)(66476007)(6512007)(41300700001)(8676002)(4326008)(6486002)(6666004)(6916009)(316002)(86362001)(38100700002)(38350700002)(2906002)(478600001)(5660300002)(8936002)(44832011)(1076003)(2616005)(186003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Y25pUFhUVlpLMXk0NnBZZFQxcFg5Rk5JcWVPN01FeFhNeGpTYkw1bUdjUk5v?= =?utf-8?B?UDFUbnh2Tk9nd1BYTk4wejFvbEh0dDlJZEZ0bXdwU0J0V1kwTmhMWmJsZmFa?= =?utf-8?B?b3hyU053NkRMUU5pSHUyUXJwcExJVmtSZ0l5cVBuNUMySjJjL3NOSjFuanBM?= =?utf-8?B?OWdjNkZnL1R0bDkrU2xEVWRYYVBxaWVLT1BnVlNDL1I5bWQwdG94YnlZNFFP?= =?utf-8?B?aENCSXdxYVUvbDh4VFhUUXA0bXNNcVdlK2IwT1lxMW5ycXJwaDFqY1RuZlRP?= =?utf-8?B?VjFpZFFtZ0pIZi90NkVpZlVDb1pzdy9VenVhV0l3TytuWVVYUlBUSm5ya3lu?= =?utf-8?B?VERZdGwxMnJlbWhzakUxWUhLOGorN0o2M3BzV0lwRTlWMU1qdElTNmdNZ1J3?= =?utf-8?B?RVl0RkdZSC8xajdWbHBJQUxHZ0FtSks4eXIzNGtkeWg4TnNIRUorMDFKbnVv?= =?utf-8?B?NnlrcXI4dkR3SDVVMVp3YW1wbXQyVGtLY0tiMTJzZjRzVnY5WE5kYjhLd3hz?= =?utf-8?B?NU9xd0p6eGNUUC9KRWZ5ZHI4bU80Yno3c3RPMlJPVnhOeUtoNWZaRDVlT0dU?= =?utf-8?B?Zy9MN3NrWlBReFE2WGpHU3lJRC84YjhOUTVsS1dqWDM5YjhKUmdXd1I0Y0Nr?= =?utf-8?B?anI0eE45NUxkYU1rdWxIdnhaaWJIcVo0ZE1DYmpoTS9LajVIZnRIWDFOSlZr?= =?utf-8?B?N0tITm5jd051OXUxUWRERUhLNFRWOThQbXZXTVJDa29tV2tGOHo2b2d1cUFp?= =?utf-8?B?VDVXUXdKMEk4MXQ2aDBRUUptcHBpdyt2emQxVC9ZTXErUmJ2eFVOamtuWGg0?= =?utf-8?B?T08zY0FHdGh1WHZyc0pOUmdvRWE2OGRyRFJuUW9WUCtLd3QydDBTWHB6OU80?= =?utf-8?B?MnJwbm9RQnhZMEFOS1lzTWpsSDZsbk1Hbnc3Z1pRcnRTOE85TVl6VmxkeUxX?= =?utf-8?B?RjNHRFdoTHhPQnNxSWdsU3BXUWYweGNpVWVwTG9nTlVyZVMzQlYxTWE0Q3Yz?= =?utf-8?B?WHhSOGJDdVpCbGRMR052WG9scitVeEx2TkFBZnpiTzA1VXVsaU9WMEVuZjd2?= =?utf-8?B?U1pUOGZpaGtMS2hBY2dUVCt5SW1lbVcrYm5IZDN1Sy9wMCtTY1JQa3RKOVZi?= =?utf-8?B?MVR1TEE3aVhVMngxY2NEZmlSQ3FwNWVOMFpFSWFCRUl5Q2pZZEFYK2pqYS9L?= =?utf-8?B?bVF4Y1Y2MlVNSWU3NWRjMGlZc0piZmJEempqMHVNMVZwTWhrcjZhQUl2ckJM?= =?utf-8?B?YkVETVBIUFNuZGhPSmhqUzFVMzhYSU1vWXN3TzgraFdscnQwTHg5eDFPUTBz?= =?utf-8?B?cCt3dU52a3lHajNQNXNJTFlXWmFjaUJlampnUXZDNEV1cHBoVmhIN3ZtNmF2?= =?utf-8?B?QU80d25zV3N5SEFxd3JldEdiRG5PRkR4bTRVNm10QlhnYUFzVng4cFR2SGlu?= =?utf-8?B?NTNkMG40SitNK2w2d1BZRExFMi9VWWZnMHUwdzE0aGh4aERxVDAyNlBUL3Zz?= =?utf-8?B?MEFPU3RqWGNFY25ZWTh2NjFXTlBuVWVMdWZjVldKdGxLRHE4MC9DZmM0OTlH?= =?utf-8?B?ZkRqYUg1RzQ0Q1NaOGJjT3BrU2xuUkxZY2tEazRleVZEV2FPMldkSTUyUVhs?= =?utf-8?B?Q3ZlRnByWW5RbUZrR0pIWlJDVjZUQ3crSUV6YVJIYnNuYW9RLzNPWWhhVjZ5?= =?utf-8?B?K0xueFprRnl4amQvRGtzK1B4YUtKQ0JvWXUyak56cThsSE5QdFQzR3lIMFRL?= =?utf-8?B?QlB5UmVTYWV0K3c3QWJzTHVxblAyb0ZxbjNQdGorOFhVQ21zZnZSQnBNeVFZ?= =?utf-8?B?anB3d3IxY1ZUV3hMV2NLMTFiY05VY1g1Y2lQWHJ3dFprc2pqRUViNXJuU2pm?= =?utf-8?B?UFZ2REVITXF3NUZtcjhTNFpFWncxUGFQRzdsQXdzZkpIaXhQRlBnZnZWcTBJ?= =?utf-8?B?Wm82aHNCencwV2UvdTJiZ1ZQRkFxVEdJZUdoMUp4NFh4bC9WNDdtL0d4OFZz?= =?utf-8?B?bFY5N0YyVDd0RmdyV1kreDFSVnk0eTlLT3ZPcjk3V2kxMkJXbmUzSk9GTE9I?= =?utf-8?B?c2tadGZzdjAza2NpWmRremFsTjRtRHRBQ0ZlZ29LbW1uTmtUMDArREdVaGFD?= =?utf-8?B?UWFkMzJRem16V2Fja2tlRUFGK0NkdGI5VExTeFVzOTgwNzJTTEExb0EwalNO?= =?utf-8?B?UkE9PQ==?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: b6cf0ba5-1d30-46b0-c69e-08daa5232896 X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Oct 2022 09:39:25.1485 (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: XpBOZP/3pmEdDJzngYCbkiXUmROIuVfOcphJ8aPBzElQkrZywT5nOB/2j5YkMyCQ2KJVScN1vHuaEMRWy6wkV8i/DKI5q4gDIJj2SHZta2s= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB8460 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=2a01:111:f400:fe0e::70c; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR04-VI1-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: 1664790611251100001 Replace a dumb function in commands-bsd.c by the code of HW address getting. Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Alexander Ivanov Reviewed-by: Konstantin Kostiuk --- qga/commands-bsd.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/qga/commands-bsd.c b/qga/commands-bsd.c index 40f7ec7600..5f423a4710 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,19 @@ GuestCpuStatsList *qmp_guest_get_cpustats(Error **errp) int 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 0; + } + + sdp =3D (struct sockaddr_dl *)ifa->ifa_addr; + memcpy(buf, sdp->sdl_data + sdp->sdl_nlen, ETHER_ADDR_LEN); + *obtained =3D true; + return 0; } #endif /* HAVE_GETIFADDRS */ --=20 2.34.1