From nobody Sun May 12 22:34:17 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=1665992797; cv=pass; d=zohomail.com; s=zohoarc; b=RI8ZbSBxUHk1tnEZYgTWRTK0fYPPYtE939FFmYDFOM1oxrJGlvikZueLiLLYzMAMwktSSoTk7oJde7KmbGLTFZ0IhOplziXyDljofUr6BD3y4zueCObKu8XMugGmBsxprff6E9cxmOlpLMGzB5HYYi1YItlg9NB5gB5nRrV1P3I= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1665992797; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=bV9wrn2ZNFyUxTphZO2ecIz35cNR6OWMtpYLx3aL51c=; b=hq2z7RtzBBswu9G4gBgITOFezu0uCDa4UmsN4ArYC8V+Rt/cnr+W3OO55Oiu1zpbOF8S54HDw7D35cnhkmO6rkw5mPvQSt/1iPVNj3kzNUjKg4fcYxxfWUq1aBTj+M4s26O4svJ7dFHOx9TtDl7dNB4x9hM7jWmf/FW4nTh40Ws= 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 166599279739041.19017008079743; Mon, 17 Oct 2022 00:46:37 -0700 (PDT) Received: from localhost ([::1]:44114 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1okKpY-0000dN-7s for importer@patchew.org; Mon, 17 Oct 2022 03:46:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55480) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1okKYk-0004kU-9R for qemu-devel@nongnu.org; Mon, 17 Oct 2022 03:29:23 -0400 Received: from mail-db8eur05on2129.outbound.protection.outlook.com ([40.107.20.129]:65301 helo=EUR05-DB8-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 1okKYh-0001Je-UE for qemu-devel@nongnu.org; Mon, 17 Oct 2022 03:29:13 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by AS2PR08MB8286.eurprd08.prod.outlook.com (2603:10a6:20b:555::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.30; Mon, 17 Oct 2022 07:28:37 +0000 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b]) by AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b%8]) with mapi id 15.20.5676.040; Mon, 17 Oct 2022 07:28:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cn9GReXWtYfSv0UbqRp3BBuIDkZ+Qim7QVo5zS7cDlI1raLybciQ07ORZxeVTQ//rgkQCN5+SrGvkMgXIpuaMBTIzM45GpYNRsDVNADCUyvi5jJ4KIp/CLofn/Zwi2YdB3f5uAORW2hwJ3APmOmdqrdFnEO3yo0XsPzpCegJco4AzR+VTq1YRTcW4CMvZeIqMkfEsMlJDaFHb3geSqDJfM6xeZ+wwgSn1EWesh/+3/lbeJaU1I6tigwMMp3OVSXDkSMzUBzG6lXGGGU7+R/ChcuVPhu0L4lDlZvVtA8ImQDrR2g98ISNerE3guNK+o4SWkl1/SqIYO5gW9kx4Wihow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=bV9wrn2ZNFyUxTphZO2ecIz35cNR6OWMtpYLx3aL51c=; b=C3ZCZJhH32SA8taJe662Ni/pMf92rh0F1IfWR3W+PZdOnfYngKJKnKVV0L6UIDN2eDckUv/Kay1Z5O6t+HmJ6pk2rfcm7EJo+dUsjwfgjsVPoPMs38M2CXpw8jLdM/DKQLdzToUXNzt2W77FPr2tT1M1y5kMJZtLe5mUD5HMfdQBWyI6RpWdf8mWV2Vagz3Byjl2oGPOGh0lz8uSdS/ouUYViDMDAv3wA1Yxqydyerq1BBDjIB+h9E3mUFkv8WEINeL2eWp9h/0jRLkQdma0qcep2XUyoG0rvmDezQdu3yK6CNrrU6HgDFFQqv3HZCcLlZRd/Bh2uCTMEDVH3UnO2g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bV9wrn2ZNFyUxTphZO2ecIz35cNR6OWMtpYLx3aL51c=; b=ocfEPaZ4banjtejk19WbObJjp57thUqBh6+DmZsfSUEHOjUZ+m8JvwBL4yy/0Ay/vFXiF4NK68mG2CTqIMjuqEmtqvt2RO+AW7XjJ/1IsdyIOiy2LYzVmSapSdMyA7aNB5uyjxseeMR1gHDyHyWeKO39gQjCSw6o+kgrAdjVHcw7gI3Q1DKmuTERIsBiNzEM/nmaZt51LuKm6PUvLSPqux+mN+f5VkRqndiA2dozCi+O6Gp8D/o082ZuQoI1OPhIFS9QpIDmTHK6tdMKarOQriuK9eWdN3ndu1pjP39CQmnlhP2UZrcX4W3x9y7m5cd3HgJLKaXJS7uiQ+q55Z2YNg== 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 v5 1/7] qga: Add initial FreeBSD support Date: Mon, 17 Oct 2022 09:28:19 +0200 Message-Id: <20221017072825.72867-2-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221017072825.72867-1-alexander.ivanov@virtuozzo.com> References: <20221017072825.72867-1-alexander.ivanov@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0033.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1c::12) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|AS2PR08MB8286:EE_ X-MS-Office365-Filtering-Correlation-Id: 3ab66c2d-dbb5-43c3-f61e-08dab01134cb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: iDfxdOI6U085ABahK262AR9SO6qcjU1j9jWdJkWeLVXWY5qGSP6fyIQuN4RdoTPMtLORw+89q1X56T7HqIxb16w96JZQpBIbDq2P6dAV4y0txwEJzgl01WiLI45OIcDMdifN2uZ1F3sKq1ayw6z/WRFJ9JLE0v/cI3y8pGaM9rN3rCYReHXjHVwFwX+EoMbuwTYAIS8X8FqZOIBucSXl3zlfFuECPy6x/N9uMRTMbbPBGVqJmU+n0lQ6nzqKhFK3TLXBWsAGSp3C+xg8m9wOo1PScwuQMogxzEAB4jwBY4oUYSloq7YaHRtWEc/ZiVqRE6kHouDz6DaicLJkr7ETvATjyCV4uGRLx6C0I7mUjg4FpG/yRxg3Ar0NsfvPndh+4J+o2QSy0eOooU+QDv0NcTA6KIhguNUWVhKxFgRxNGkD+zsIvDiLOVequ3+5nEdOxigvPtEHGon1qmm5o0s//X1f8SzWhyWsTvtRGq6hjD43rboOVk/vOsNxOipfOtbF0mzHeasMkE937JQME2TTigbjw1Foi2ifJEokDMhAcMNEVSdzS0s4kO5GsjlYTOe14OEHHaP1LwoseWb23eqyjLPUZa2NatvmWuyv8JL4kGohYVqsnQaqBC8IbQZ9gWu603bgwg54TatnMuEsEWKkluSd0l1smfI9JeocYpN3jzUuHbLTkH5M+cr1NKRG5PfdUL+JO8Yc8eKjrFqpNwLoR2CweQ2cWEiBeMsfR74bLp9ZzWT2GE1wWLvDpy6nCzfqssHFD0rZkCa9jppa1wUmUg== 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)(136003)(376002)(346002)(39850400004)(396003)(366004)(451199015)(6916009)(66946007)(8676002)(66476007)(6666004)(66556008)(36756003)(6506007)(41300700001)(4326008)(5660300002)(316002)(26005)(6512007)(86362001)(8936002)(83380400001)(2906002)(2616005)(38100700002)(52116002)(186003)(1076003)(38350700002)(478600001)(6486002)(44832011); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Um1oM1hiY29hbkhCaU0xRWpiQkljNEVia3dGNDVQanUrYWQvZlRmR1NXN3F1?= =?utf-8?B?YUVKUTkwNzdFbUVrQ0pvUmt6MFYzMzkzejh4bDlITHNGbXNmQnIwSGtyOHM1?= =?utf-8?B?N1kydjV3QnBMY3JieUtOYmUyalo3aUxqYkI0VDBrVTlYcS8vTDQ4RTJDUVdo?= =?utf-8?B?WXdOSkgvbmV6VXJFMlRQTC9BY0dIeW53dDB6Y0dzZXRMTkdSTW9jeWlPb2Z3?= =?utf-8?B?OHlIQmlCOHdVbE5RK3NCNDY0UGV2TnVrZ0pyRk5EcW03QkIrQ092MkR6S1hm?= =?utf-8?B?alFIVEhtVkNTaVpkWUNYc2ZpZ3ZpcGJOWkRBUUt5Rzg2UkpjWUVISjVuS1pk?= =?utf-8?B?c2FoSnN6WTZGS1RTUm5OQWt6dlVZZjMzMC9qMGNXRWRWM0ZXc2xTNTRUUDZk?= =?utf-8?B?eTJzMS8rVmJNK2I1a2JXQ1JNVzRnWTFZczkrU05MRWtBWFJlakd4SVNBWkhh?= =?utf-8?B?ZFVKNlhnMzZSb2d1NUZ4WjZzTXdvVHh2Q2d0WitoSGdTNFI2c3pKaDMzQUJU?= =?utf-8?B?QzZpd29NWittdjdJa1ZPU2JORnRPdG1RaDk1WFRCL1lQZ1ZDVy9BdHlzR0dN?= =?utf-8?B?dk1mVUN4MG43UEowa3hDUlhOYzB6Z1VLWGsxcy9YdWFETloyVWFhcE1HeHps?= =?utf-8?B?MkhUcDZWUks0YlNUcmtaZm5JZ216dy9xTGQyUXFjdW4rUGVZR1Q2M0pHcTEx?= =?utf-8?B?dThSampybmtGR1AxMG80eTUzYm54WGZkeFJkNnpsSFJsdVNSaDRudjJLZ0g4?= =?utf-8?B?YlZDVE9KcnhSazhrbHFkYmlQZ0VwYU9UbWM0eTIrNUFjcmNTZ3pVYis5V2xv?= =?utf-8?B?R0Q3aHpnZWkvK2lDWkFhK210R2hRTUtEWm9KdUlsUk5POXV2VmtMVHJsVjlX?= =?utf-8?B?dDRka0ZWci9aVUloWkNhT0ZuYitCNCswZjJoU2VQYlZDWUxBMnVnSGtjM0t0?= =?utf-8?B?YnlCSHFHQ29USVZxUW9iRGJUa2xsNDRTS2RQbFB3WkFudDNnVGljR2FqeTZj?= =?utf-8?B?dVlEZVVuRFFBSGtpdjI3VU1NRFZhOXBaQlRDcE1za01OT2tha2lCbW9aUWYy?= =?utf-8?B?WlN3b0V3aU5tQmtURS9lSHJHazJPWlFKU1A4bFRkaWFzbFV3Y2xGdHJPN1ZU?= =?utf-8?B?RUdueUk2emJiVG5GT2RlYXZlbmQ1eUpSV3lNWkhuVXRFZDlFUjZXbXk3L3A4?= =?utf-8?B?aWpFc2JzUDlkMnlnZDFqVnkyUDZ1ck4zbXFHUjdiY2NhcGRTSWYxQ2tXNDVu?= =?utf-8?B?bk5FWC9EaU8rSStZZ2tJS0J6UXl1WDkrZjZPOFFpTzRoVTV4YzArMWZwTmMx?= =?utf-8?B?REp4eTlxQ2l1Sm1KVWtTZXV5c1cwdDh0TTdOSEFNdmF3Q3lHcTNmRDdqcFhE?= =?utf-8?B?T1Jta3JlMHcrTUl6VnNyaUloT09rbHZnY2RTZnlTeUEzWnpyZTF2OWFOcVd1?= =?utf-8?B?MEZXRVBLN2dxbk1NR1FLaWwzUFBqbys2MEErOUtESnBFR2JPOVF4aENUcEEr?= =?utf-8?B?R3JkY1JOTk8rNi9zTXg0TmRaVG5zU2dSRTcwc2ZrSnNOMm1qYm8yeUhCOEtE?= =?utf-8?B?b2hDWnFuMGI1eUgrZFBTYnZiRzZJRjVaaG55QkFnZTRxQ0NwZmlpV2YybWdY?= =?utf-8?B?UzlaaERmM0NtY1FvbEd4clo2b05POWNFbGtXSDloa3gxM2hyRkFqeU11b29k?= =?utf-8?B?UTRiWVpLYk1iRmM5RDJmb05nZkhmVzg3T1hpa0tuNmxMdFJvZXJER0Y1eGVr?= =?utf-8?B?RytJUENKL0tmanBUS1VUd2tnUGtwK0RKakprSm44Sm1xbko0WlRpczBSWGF3?= =?utf-8?B?NG9OOVR4d2J2QzdzdXlYcmo5TkNibEFqN0dQQ05EelhrNUF1eStwR3l5WHRS?= =?utf-8?B?czBZU0ZUREFCMUxlSkxpdWFOY1NYWXhQZ0dTTWJWTGV2S281U0R5SThZcGFl?= =?utf-8?B?a2ozOUU1VUFCYWl5NFR5WHlDcTVJSmpvZ3V0d0JXaURhWVkxbHAxN0V2TURJ?= =?utf-8?B?ZDRPYUQ5WlhvN0pySStGZGtXVGN3UTVzdXR2UEJuWkk1a3ZpenZqRGROcGJv?= =?utf-8?B?RTlUamRSOFRvck1QbU4zUHdSU1Zpd2V0Sjd3Vk1pajZKVnhJcjN5S0pSRTNH?= =?utf-8?B?Zk5IcWhPSkoyYzBFUHVMdkVvdFhQL290TVZwQkhnZmczRlpVMFpCTTNIek1v?= =?utf-8?B?WEE9PQ==?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3ab66c2d-dbb5-43c3-f61e-08dab01134cb X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2022 07:28:37.4310 (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: hsp9yOxFGdz8DU6hCBlbLreHDahoYZaQKxM2S+aGkqJvjPAV/D7OUI6uRMqFwtKTtfj86Ic8rMbA5liyeeSWbiG2zBzaPYuLu6PHGXemuRc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB8286 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.20.129; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR05-DB8-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: 1665992798443100001 - Fix device path. - Fix virtio-serial channel initialization. - Make the code buildable in FreeBSD. Reviewed-by: Konstantin Kostiuk Acked-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Alexander Ivanov --- meson.build | 2 +- qga/channel-posix.c | 19 +++++++++++++++++++ qga/commands-posix.c | 8 ++++++++ qga/main.c | 6 +++++- 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/meson.build b/meson.build index b686dfef75..71fe72ea06 100644 --- a/meson.build +++ b/meson.build @@ -75,7 +75,7 @@ have_tools =3D get_option('tools') \ .allowed() have_ga =3D get_option('guest_agent') \ .disable_auto_if(not have_system and not have_tools) \ - .require(targetos in ['sunos', 'linux', 'windows'], + .require(targetos in ['sunos', 'linux', 'windows', 'freebsd'], error_message: 'unsupported OS for QEMU guest agent') \ .allowed() have_block =3D have_system or have_tools diff --git a/qga/channel-posix.c b/qga/channel-posix.c index 6796a02cff..568350ded4 100644 --- a/qga/channel-posix.c +++ b/qga/channel-posix.c @@ -149,6 +149,25 @@ static gboolean ga_channel_open(GAChannel *c, const gc= har *path, return false; } #endif +#ifdef __FreeBSD__ + /* + * In the default state channel sends echo of every command to a + * client. The client programm doesn't expect this and raises an + * error. Suppress echo by resetting ECHO terminal flag. + */ + struct termios tio; + if (tcgetattr(fd, &tio) < 0) { + error_setg_errno(errp, errno, "error getting channel termios a= ttrs"); + close(fd); + return false; + } + tio.c_lflag &=3D ~ECHO; + if (tcsetattr(fd, TCSAFLUSH, &tio) < 0) { + error_setg_errno(errp, errno, "error setting channel termios a= ttrs"); + close(fd); + return false; + } +#endif /* __FreeBSD__ */ ret =3D ga_channel_client_add(c, fd); if (ret) { error_setg(errp, "error adding channel to main loop"); diff --git a/qga/commands-posix.c b/qga/commands-posix.c index eea819cff0..16d67e9f6d 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -51,6 +51,14 @@ #endif #endif =20 +#ifdef __FreeBSD__ +/* + * The code under HAVE_GETIFADDRS condition can't be compiled in FreeBSD. + * Fix it in one of the following patches. + */ +#undef HAVE_GETIFADDRS +#endif + #ifdef HAVE_GETIFADDRS #include #include diff --git a/qga/main.c b/qga/main.c index 5a9d8252e0..0d27c97d38 100644 --- a/qga/main.c +++ b/qga/main.c @@ -45,9 +45,13 @@ #endif =20 #ifndef _WIN32 +#ifdef __FreeBSD__ +#define QGA_VIRTIO_PATH_DEFAULT "/dev/vtcon/org.qemu.guest_agent.0" +#else /* __FreeBSD__ */ #define QGA_VIRTIO_PATH_DEFAULT "/dev/virtio-ports/org.qemu.guest_agent.0" -#define QGA_STATE_RELATIVE_DIR "run" +#endif /* __FreeBSD__ */ #define QGA_SERIAL_PATH_DEFAULT "/dev/ttyS0" +#define QGA_STATE_RELATIVE_DIR "run" #else #define QGA_VIRTIO_PATH_DEFAULT "\\\\.\\Global\\org.qemu.guest_agent.0" #define QGA_STATE_RELATIVE_DIR "qemu-ga" --=20 2.34.1 From nobody Sun May 12 22:34:17 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=1665992818; cv=pass; d=zohomail.com; s=zohoarc; b=BEqJzPoiEwPZzPPJcQ383MV1ZeyG25QK6oHt+7RZNRDhDVtZlZ9fQxa8wv+uG0hzn/BfYM0YTDhU1dTDHJ0n/VKXTgla/ETL3qUqmaocRIWQ1xtKyz75sA5ajEq7czx0xZ0+OET5QK8Pvrb1H3Os9XFbKlPbKpKmNPmUIDkzDjk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1665992818; 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=90yaN/ZPijff8/jFBt2y179WRMXRaLZAWtUrg5jzAEg=; b=LaNhutmXxJgsFUOcV6CZEoPgtqU68VYNY1+9yhNEgk6lT2j+ArqX1lzOT8vop2q18ZQ66AzEbfTT8VdQbhBAE6xZUp5bhsM3rpScRANpB9xC6HbwkNoRCSnBZHT8VqdSiR+i2GZx+aS628V4SUs93OUWht+Jz96GeXIivINJVNs= 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 1665992818581725.6543275843825; Mon, 17 Oct 2022 00:46:58 -0700 (PDT) Received: from localhost ([::1]:48150 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1okKps-0000j5-9x for importer@patchew.org; Mon, 17 Oct 2022 03:46:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55868) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1okKYn-0004km-64 for qemu-devel@nongnu.org; Mon, 17 Oct 2022 03:29:23 -0400 Received: from mail-db8eur05on2129.outbound.protection.outlook.com ([40.107.20.129]:65301 helo=EUR05-DB8-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 1okKYk-0001Je-F5 for qemu-devel@nongnu.org; Mon, 17 Oct 2022 03:29:16 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by AS2PR08MB8286.eurprd08.prod.outlook.com (2603:10a6:20b:555::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.30; Mon, 17 Oct 2022 07:28:38 +0000 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b]) by AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b%8]) with mapi id 15.20.5676.040; Mon, 17 Oct 2022 07:28:38 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UnSc399AaTP6gCXQXwCh25yGCoyE6plmgKOeaaCyCXV0XdmNSMsoGb55PY8TddHmhMDvfQvUu8VAMU7MzVmNkPi7dDV3/JXlP+yErOBNiM+qJi7bzZmmqJlI2Bt1D1jxrGd3/A0ns3AJZ6RD6P/0DZsXVQwKlDtpkZVpH3wFBhuu9LLhm9FuLgSckRzzV9g2/uXEigri7IhDwn+Sf/aY9+YBbaxUrJVUQ4QgV0r/SW4SJA9bCneUvGCXzLcR+nEP4mlgY/n8sb9e+B+glgBkMvCtKim76AAaBUN2++K7nmZ6U37GAaaNeX3E11m28zw0Me+XjVFr8ddwZ/5FHCHjjw== 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=90yaN/ZPijff8/jFBt2y179WRMXRaLZAWtUrg5jzAEg=; b=nOQ0zku9RKC0T3YLIFbrF8Zp7Sz815z0yW9yEdomEr60iKgsnUWRfTzaDRPbBIaqfuF1L6anAzJ+BpuXQDbeGqUY6jnLZzdkU2Sy13RIQALhzxqTeTO52teKgiIPKLUWKs9gn8flnBggooDCyHvBKX7ouMbk1u5EiQwzgL3OBbalRdNCSkuA1Gd8YvFEnLqn68ScpLc9DLhU937e6mvH2DBDB7M0jorLyR1R++sKRYV612QH9t+BPmUETTq9fVbOuj8hi4nPi5AqABlu+vfiCotfO/CN9LW/xjTU9bsGFWzsLC8sZL7lX+qZr7Ft1XxAfru3p3IA/ySD24+uGPg/IQ== 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=90yaN/ZPijff8/jFBt2y179WRMXRaLZAWtUrg5jzAEg=; b=sMDKwIzdAvgXlcmKHnCQPzF8c/R/PmZCiNjChIsKZh/OnIPvB0jSNTL4r4kFEaq+m+VIAQz5TYeGkS3Dr+hXQoZdxzYtUotzbsq5ushCeJbYYyz9aevlKm0hloLI/rv6nGb0kCNTHbPjiq2agDV9abtzUBKSnbavLqrZLvvk49CnoPrSD01pMUGyrO6FLrHipaye9MMVPLHof2Ei74ZU3piH+9FeVyXCcdrHfVdhl8FQDRAdS7oDQ+HTbX7OGFvfCvnwSDGt09C6dqeyyrZ4q3/ghcfvCgmHUisa4TlYucYnOoAj28d2XIML3fCwk9sVAIGWrmEJASz1zil5vc+nNw== 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 v5 2/7] qga: Move Linux-specific FS freeze/thaw code to a separate file Date: Mon, 17 Oct 2022 09:28:20 +0200 Message-Id: <20221017072825.72867-3-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221017072825.72867-1-alexander.ivanov@virtuozzo.com> References: <20221017072825.72867-1-alexander.ivanov@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0033.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1c::12) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|AS2PR08MB8286:EE_ X-MS-Office365-Filtering-Correlation-Id: 8ab22149-e855-43c9-8b4c-08dab0113526 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: EZnxSaxHjIKTUp9ky9pW52pJsYKA2rU5KnSGTtbODUJRzcBCL+De3eHFqb/Lm2SVNJ95/TK15kmwcegZoUGosICrFOba8VtKn98RcGtUwm4I7bXBhwMBNeClvmro8JNBXhWENePFY+bOL3PhTkmavAVjvHWCcFREZqVBgU8jfSeI9FEvSBawADVnY7kq9pI0zY2I+rn7dGUzSnRNKb2tGt+zOkuZ9cmmqSfV0D4TYxbGo9WceWXinYiwQ/Olzo+2w0ADgcsxiTfqJKBHTN0MKHNs8vyWl60EVJ3xdiXkJ6pCTq2D5fJ7vQNIiVewoU913Nt93UBi42+KY1HNm81ihm1Noq9FRcMWNkfcdSFt0icP9FkuMSlgTvxj6nD9PDRhuNCeF55q+VSNc9mu7Vna7Iugqwq8GtW0AgxIn80tJT6WYs0NGYD94uV9CCIQrounITPBqnxS4smz2oV9zOa0zdOLF1xEegsf0vUsTlJ0z2oged3xzRfJ6EEn4lFZdDZiCROYyY5A7nP0K7MOlxl+J0bxGOzIVqU6mV0gmKnPe9fwfBRtM8jV+3gqbcfSxrVFYzwu4hr4l4KRxDZ1mEmgI4JBSsIoV1kMuECP9iMz4BU4wLksx9+9CvYWPQp8cmGWliUumOoTiglsIuG6Tb6CHQ1avJoZ56/B7JFWCYff6niLrc4fKvCwU1dki6P0WVCatWIgK/6FB/glUJTtir2e/eI6XInUPdszHPiRDFimHJXx6DFzaqxaDwxl5lbDvLW+gV1F+z/BhKZZC2VEhdcDjw== 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)(136003)(376002)(346002)(39850400004)(396003)(366004)(451199015)(30864003)(6916009)(66946007)(8676002)(66476007)(6666004)(66556008)(36756003)(6506007)(41300700001)(4326008)(5660300002)(316002)(26005)(6512007)(86362001)(8936002)(83380400001)(2906002)(2616005)(38100700002)(52116002)(186003)(1076003)(38350700002)(478600001)(6486002)(44832011); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RDFZVnM5b0kxQXhxV3d5QXVnQ2RiQ0pDOXhmaFhyV2w4S1JhaUVtNHZQSjhu?= =?utf-8?B?M0FPL2ltR1JPUWJGVlBQcFIzK1NqQ0wrVkRka3pWMWx0MVBzclJQZ1NtZStq?= =?utf-8?B?MTRDM0hsVHpRU1dPUkVJLzhTbzUrRVJtSGdyalhGN3pMMXFxeEZXUWZqS1ZT?= =?utf-8?B?a0FvMDdMbGpQTmVDRVJHTXZJOXk4RXh6TWhLaWJoeXJlRDFaeHpwcEMwTE8x?= =?utf-8?B?ZEg3SVpDRWZxcE5pT1JQREJFRkRmK1R5RDdaOTIrdEd6UVVFY1hJRlozTmxa?= =?utf-8?B?Ykg3OVFKN2h3aVUvWmV1YlZrZVBjNDdjb2dyaDlvWUhYR2dzdUtXSlJlZzc4?= =?utf-8?B?dFBMdWxqZ2dLWHRDUUVyL3N4Y1VITTlDRFVrQ2I2Vm5tUTZNNTNoTG4zK2lV?= =?utf-8?B?OVlpYUZkYVRzNERQcklobDYvVHFrakIwU01ldktKQXJaQis4Z0lJcXYrTmgz?= =?utf-8?B?ejMzMVUzYkFVR2VRbURPMitydkI1VVdkR1U1SnpCMVRRM1RxMko1L1RUU1pv?= =?utf-8?B?Wk5DM29qbi9Rdm91ZTk0bFN6Y2J3aXhDZzIrQ3dXZERYSDJoZUtkdmV3blZ6?= =?utf-8?B?WThXdDRCRFM3RTZtNTh1MnV3bTAwZVhqY3FwWDdhWmxKcVdKZDVJVDZMbG1S?= =?utf-8?B?aWxReTEwazNiUHRMU1M2MnB3elZBQlc3MTcvaGJYQ0MzWmxmeitzMllFZ2Rq?= =?utf-8?B?Z1pyekF0c0JwRUhzOE5jL3BHNlM3YW0rZFA3TTVoS1Y2ZmdCZ1ZyNEtzTFZR?= =?utf-8?B?cjlxR09RS0xXTnVZSHNJMkNUNWh2TmlZSUNIUkJKMklkK1dnci9XY1A5STJB?= =?utf-8?B?N1ZTeXlJVjJhK21RT0xTZ0M5eGNVMnlVN2JsSjYxUW5SeCtSb1pnV0pCaHlT?= =?utf-8?B?SFhINDNnVmpBQjlwWWFDOGJDQTJnbkRnRHUrL1czM1hqZGFEaGovVy9sSW5F?= =?utf-8?B?NzQvMjJqWDhRZTlNc3dCNVhtalloRHUwWktFbGZXdUVUVlFwUTJCWENzU3lm?= =?utf-8?B?dlo0R3FYdjZsTmk1Ym5udEsvZ2g1U0VORDhPMjY3NE1RSWZIekNKUExTaGhp?= =?utf-8?B?U2drWkRHMUV4YWdXajF1TnZCTVRsNDZpZmlFc1A4U1pSU3A3MG5wcjNCMXV2?= =?utf-8?B?bmU2UnF2Y2E4dnN6Wm04Qk5DK2dPNSs1YmdIeVFlT1g3S3V2NEt4Z1ErK2hj?= =?utf-8?B?VzE1YUVNUWZPZDlBWTFDeVZkWXVnTkJmNWpHSlJPRGNzRWNGQ1BJZC9WblBs?= =?utf-8?B?cmF2R2lvR2I2RHk5NS9lQkY1dWp6Uy9XQkhNM3JWdnZoMFNibFNqTld4NE5D?= =?utf-8?B?cWR0RUZpK1lFelV6TjNkWVp5a0E0blpEN1JFWk1OT1hWS0lGK0tBMXpEaHZU?= =?utf-8?B?MEloN0wrM3RBRDFzVWZJSVJxTnc4L2FPaktwTmNlOEdaZVBpY1B6QXVPNHo4?= =?utf-8?B?ci9NL29DdVV4KzVRcjFnb2piZ3h5WXR3cFNDTW9vQ0pLY2QzUTQ2SnlKcGxt?= =?utf-8?B?Vy9GbU05U3RRQ00xR3JpMUE4bVY3UGo1ZVU5QkJiMjV6TEs2TTlzaWVXeWFQ?= =?utf-8?B?ZUxDQndvWDkwZ2NZbnhRQnppbS96dTFKVUVXMURtL09WTkNHR29PMHhlV2hO?= =?utf-8?B?T0ozTWRCTThmYlp0YUlWL2FENHFxRkxWMlAzbmc2MUhNSmZCTmdEVDhzQzRN?= =?utf-8?B?MXhQZTNRSGJnNVQrUDMrUFlBUm0yWDZQSDdZb0k5UWJwaDNFYWxPb3FpU3ZC?= =?utf-8?B?YStwTFpUMmF2V2ozR3NWQkRsSFVCTlR4TnMwQ2lZNStabnNaM1Y5S0NNcXJF?= =?utf-8?B?eHFEMHR4eWFjUmtNUW1UMEZZN0tjQnFqQVNsYVJlNHRubHJkc2hRMXJEUUNN?= =?utf-8?B?Y21KWXhTUVIzdUo2ZUtlN2NzMmNhV0ZWTElCUVBlcHFvWXRvdlZYK0FJTnpn?= =?utf-8?B?SHlEOGRPcUlHOE9lYU1rREhMRVA5dWdCcVdhUmZiSEJkWlhFTGt6T1htSENU?= =?utf-8?B?Zmp0UDk5Qi9tVEVCN3ZpRGlYV1BvYWJaRkxKa29xNEU4V3h4Lzc4RHVvTUFU?= =?utf-8?B?US83M0oxeUhRWnZqc3B1NzBWckFuT3hXcnpFVGhNZ3JReW5Xb1AvT244RmJ4?= =?utf-8?B?Z0RibEphSGdsYUJEa2NpT2lUN2pUSEpXSnBjMzhjYk4rM080bEkyWDlZSXYr?= =?utf-8?B?Q0E9PQ==?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8ab22149-e855-43c9-8b4c-08dab0113526 X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2022 07:28:38.0716 (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: 6LWIRYraY8sJ0sOhEfL8v1RzY1u+dFUSczK0YonltkSUJMAYNKyhNxVtRD998X0eaIKj6nuYUogV/zPl3jo3OMPj6LKnWNrmEeAXgFJBkIY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB8286 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.20.129; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR05-DB8-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: 1665992820625100001 In the next patches we are going to add FreeBSD support for QEMU Guest Agent. In the result, code in commands-posix.c will be too cumbersome. Move Linux-specific FS freeze/thaw code to a separate file commands-linux.c keeping common POSIX code in commands-posix.c. Reviewed-by: Konstantin Kostiuk Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Alexander Ivanov --- qga/commands-common.h | 34 +++++ qga/commands-linux.c | 286 +++++++++++++++++++++++++++++++++++++++++ qga/commands-posix.c | 287 +++--------------------------------------- qga/meson.build | 3 + 4 files changed, 338 insertions(+), 272 deletions(-) create mode 100644 qga/commands-linux.c diff --git a/qga/commands-common.h b/qga/commands-common.h index d0e4a9696f..cb51b1c6e9 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 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..d24f2fafd8 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" @@ -629,16 +627,7 @@ void qmp_guest_file_flush(int64_t handle, Error **errp) #if defined(__linux__) =20 #if defined(CONFIG_FSFREEZE) || defined(CONFIG_FSTRIM) -typedef struct FsMount { - char *dirname; - char *devtype; - unsigned int devmajor, devminor; - QTAILQ_ENTRY(FsMount) next; -} FsMount; - -typedef QTAILQ_HEAD(FsMountList, FsMount) FsMountList; - -static void free_fs_mount_list(FsMountList *mounts) +void free_fs_mount_list(FsMountList *mounts) { FsMount *mount, *temp; =20 @@ -653,157 +642,6 @@ static void free_fs_mount_list(FsMountList *mounts) g_free(mount); } } - -static int dev_major_minor(const char *devpath, - unsigned int *devmajor, unsigned int *devminor) -{ - struct stat st; - - *devmajor =3D 0; - *devminor =3D 0; - - if (stat(devpath, &st) < 0) { - slog("failed to stat device file '%s': %s", devpath, strerror(errn= o)); - return -1; - } - if (S_ISDIR(st.st_mode)) { - /* It is bind mount */ - return -2; - } - if (S_ISBLK(st.st_mode)) { - *devmajor =3D major(st.st_rdev); - *devminor =3D minor(st.st_rdev); - return 0; - } - return -1; -} - -/* - * Walk the mount table and build a list of local file systems - */ -static bool build_fs_mount_list_from_mtab(FsMountList *mounts, Error **err= p) -{ - struct mntent *ment; - FsMount *mount; - char const *mtab =3D "/proc/self/mounts"; - FILE *fp; - unsigned int devmajor, devminor; - - fp =3D setmntent(mtab, "r"); - if (!fp) { - error_setg(errp, "failed to open mtab file: '%s'", mtab); - return false; - } - - while ((ment =3D getmntent(fp))) { - /* - * An entry which device name doesn't start with a '/' is - * either a dummy file system or a network file system. - * Add special handling for smbfs and cifs as is done by - * coreutils as well. - */ - if ((ment->mnt_fsname[0] !=3D '/') || - (strcmp(ment->mnt_type, "smbfs") =3D=3D 0) || - (strcmp(ment->mnt_type, "cifs") =3D=3D 0)) { - continue; - } - if (dev_major_minor(ment->mnt_fsname, &devmajor, &devminor) =3D=3D= -2) { - /* Skip bind mounts */ - continue; - } - - mount =3D g_new0(FsMount, 1); - mount->dirname =3D g_strdup(ment->mnt_dir); - mount->devtype =3D g_strdup(ment->mnt_type); - mount->devmajor =3D devmajor; - mount->devminor =3D devminor; - - QTAILQ_INSERT_TAIL(mounts, mount, next); - } - - endmntent(fp); - return true; -} - -static void decode_mntname(char *name, int len) -{ - int i, j =3D 0; - for (i =3D 0; i <=3D len; i++) { - if (name[i] !=3D '\\') { - name[j++] =3D name[i]; - } else if (name[i + 1] =3D=3D '\\') { - name[j++] =3D '\\'; - i++; - } else if (name[i + 1] >=3D '0' && name[i + 1] <=3D '3' && - name[i + 2] >=3D '0' && name[i + 2] <=3D '7' && - name[i + 3] >=3D '0' && name[i + 3] <=3D '7') { - name[j++] =3D (name[i + 1] - '0') * 64 + - (name[i + 2] - '0') * 8 + - (name[i + 3] - '0'); - i +=3D 3; - } else { - name[j++] =3D name[i]; - } - } -} - -static bool build_fs_mount_list(FsMountList *mounts, Error **errp) -{ - FsMount *mount; - char const *mountinfo =3D "/proc/self/mountinfo"; - FILE *fp; - char *line =3D NULL, *dash; - size_t n; - char check; - unsigned int devmajor, devminor; - int ret, dir_s, dir_e, type_s, type_e, dev_s, dev_e; - - fp =3D fopen(mountinfo, "r"); - if (!fp) { - return build_fs_mount_list_from_mtab(mounts, errp); - } - - while (getline(&line, &n, fp) !=3D -1) { - ret =3D sscanf(line, "%*u %*u %u:%u %*s %n%*s%n%c", - &devmajor, &devminor, &dir_s, &dir_e, &check); - if (ret < 3) { - continue; - } - dash =3D strstr(line + dir_e, " - "); - if (!dash) { - continue; - } - ret =3D sscanf(dash, " - %n%*s%n %n%*s%n%c", - &type_s, &type_e, &dev_s, &dev_e, &check); - if (ret < 1) { - continue; - } - line[dir_e] =3D 0; - dash[type_e] =3D 0; - dash[dev_e] =3D 0; - decode_mntname(line + dir_s, dir_e - dir_s); - decode_mntname(dash + dev_s, dev_e - dev_s); - if (devmajor =3D=3D 0) { - /* btrfs reports major number =3D 0 */ - if (strcmp("btrfs", dash + type_s) !=3D 0 || - dev_major_minor(dash + dev_s, &devmajor, &devminor) < 0) { - continue; - } - } - - mount =3D g_new0(FsMount, 1); - mount->dirname =3D g_strdup(line + dir_s); - mount->devtype =3D g_strdup(dash + type_s); - mount->devmajor =3D devmajor; - mount->devminor =3D devminor; - - QTAILQ_INSERT_TAIL(mounts, mount, next); - } - free(line); - - fclose(fp); - return true; -} #endif =20 #if defined(CONFIG_FSFREEZE) @@ -1708,20 +1546,13 @@ int64_t qmp_guest_fsfreeze_freeze(Error **errp) return qmp_guest_fsfreeze_freeze_list(false, NULL, errp); } =20 -/* - * Walk list of mounted file systems in the guest, and freeze the ones whi= ch - * are real local file systems. - */ int64_t qmp_guest_fsfreeze_freeze_list(bool has_mountpoints, strList *mountpoints, Error **errp) { - int ret =3D 0, i =3D 0; - strList *list; + int ret; FsMountList mounts; - struct FsMount *mount; Error *local_err =3D NULL; - int fd; =20 slog("guest-fsfreeze called"); =20 @@ -1740,122 +1571,34 @@ int64_t qmp_guest_fsfreeze_freeze_list(bool has_mo= untpoints, /* cannot risk guest agent blocking itself on a write in this state */ ga_set_frozen(ga_state); =20 - QTAILQ_FOREACH_REVERSE(mount, &mounts, next) { - /* To issue fsfreeze in the reverse order of mounts, check if the - * mount is listed in the list here */ - if (has_mountpoints) { - for (list =3D mountpoints; list; list =3D list->next) { - if (strcmp(list->value, mount->dirname) =3D=3D 0) { - break; - } - } - if (!list) { - continue; - } - } - - fd =3D qga_open_cloexec(mount->dirname, O_RDONLY, 0); - if (fd =3D=3D -1) { - error_setg_errno(errp, errno, "failed to open %s", mount->dirn= ame); - goto error; - } - - /* we try to cull filesystems we know won't work in advance, but o= ther - * filesystems may not implement fsfreeze for less obvious reasons. - * these will report EOPNOTSUPP. we simply ignore these when tally= ing - * the number of frozen filesystems. - * if a filesystem is mounted more than once (aka bind mount) a - * consecutive attempt to freeze an already frozen filesystem will - * return EBUSY. - * - * any other error means a failure to freeze a filesystem we - * expect to be freezable, so return an error in those cases - * and return system to thawed state. - */ - ret =3D ioctl(fd, FIFREEZE); - if (ret =3D=3D -1) { - if (errno !=3D EOPNOTSUPP && errno !=3D EBUSY) { - error_setg_errno(errp, errno, "failed to freeze %s", - mount->dirname); - close(fd); - goto error; - } - } else { - i++; - } - close(fd); - } + ret =3D qmp_guest_fsfreeze_do_freeze_list(has_mountpoints, mountpoints, + mounts, errp); =20 free_fs_mount_list(&mounts); /* We may not issue any FIFREEZE here. * Just unset ga_state here and ready for the next call. */ - if (i =3D=3D 0) { + if (ret =3D=3D 0) { ga_unset_frozen(ga_state); + } else if (ret < 0) { + qmp_guest_fsfreeze_thaw(NULL); } - return i; - -error: - free_fs_mount_list(&mounts); - qmp_guest_fsfreeze_thaw(NULL); - return 0; + return ret; } =20 -/* - * Walk list of frozen file systems in the guest, and thaw them. - */ int64_t qmp_guest_fsfreeze_thaw(Error **errp) { int ret; - FsMountList mounts; - FsMount *mount; - int fd, i =3D 0, logged; - Error *local_err =3D NULL; =20 - QTAILQ_INIT(&mounts); - if (!build_fs_mount_list(&mounts, &local_err)) { - error_propagate(errp, local_err); - return 0; + ret =3D qmp_guest_fsfreeze_do_thaw(errp); + if (ret >=3D 0) { + ga_unset_frozen(ga_state); + execute_fsfreeze_hook(FSFREEZE_HOOK_THAW, errp); + } else { + ret =3D 0; } =20 - QTAILQ_FOREACH(mount, &mounts, next) { - logged =3D false; - fd =3D qga_open_cloexec(mount->dirname, O_RDONLY, 0); - if (fd =3D=3D -1) { - continue; - } - /* we have no way of knowing whether a filesystem was actually unf= rozen - * as a result of a successful call to FITHAW, only that if an err= or - * was returned the filesystem was *not* unfrozen by that particul= ar - * call. - * - * since multiple preceding FIFREEZEs require multiple calls to FI= THAW - * to unfreeze, continuing issuing FITHAW until an error is return= ed, - * in which case either the filesystem is in an unfreezable state,= or, - * more likely, it was thawed previously (and remains so afterward= ). - * - * also, since the most recent successful call is the one that did - * the actual unfreeze, we can use this to provide an accurate cou= nt - * of the number of filesystems unfrozen by guest-fsfreeze-thaw, w= hich - * may * be useful for determining whether a filesystem was unfroz= en - * during the freeze/thaw phase by a process other than qemu-ga. - */ - do { - ret =3D ioctl(fd, FITHAW); - if (ret =3D=3D 0 && !logged) { - i++; - logged =3D true; - } - } while (ret =3D=3D 0); - close(fd); - } - - ga_unset_frozen(ga_state); - free_fs_mount_list(&mounts); - - execute_fsfreeze_hook(FSFREEZE_HOOK_THAW, errp); - - return i; + return ret; } =20 static void guest_fsfreeze_cleanup(void) diff --git a/qga/meson.build b/qga/meson.build index a0ffd6d268..932b4e7ca8 100644 --- a/qga/meson.build +++ b/qga/meson.build @@ -72,6 +72,9 @@ qga_ss.add(when: 'CONFIG_POSIX', if_true: files( 'commands-posix.c', 'commands-posix-ssh.c', )) +qga_ss.add(when: 'CONFIG_LINUX', if_true: files( + 'commands-linux.c', +)) qga_ss.add(when: 'CONFIG_WIN32', if_true: files( 'channel-win32.c', 'commands-win32.c', --=20 2.34.1 From nobody Sun May 12 22:34:17 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=1665992890; cv=pass; d=zohomail.com; s=zohoarc; b=HmsUUJG6iWDtmeJA/RmdfIjSHolCudBA61nCmpIH7wfV9/h+JKOFvs3w2hhY2IYbfkgcXpVrMpYTefzKL+bHDXv0d5scvMTvw13N3Ut0BdmRcynvfTZ0udE0QJDTBpCmDAhY1WiUqt2IoPdevQWET2ZHZGBnhxQoL1csNz+NVTY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1665992890; 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=ntgPPnTOKgxTnF+LfBEBgtehlf04PvP6KLfYZLNlrmc=; b=Vk4g/qMf9AkcrDN2kSAa6dPsnZtOlJz8ODKp8eJ+tOkguuiCnk9Gec2LYfrPx7pQScdeZWKZ09KOGpFhPbclLiD8ceA2jp7RanMA+lf9kZUwq+Ub4irJjlsTwBJinBw9V91Heou6Kpqw5TQMi/sxoVXkvvEDjr+xc/gQhUOUeeo= 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 1665992890274687.1243823469036; Mon, 17 Oct 2022 00:48:10 -0700 (PDT) Received: from localhost ([::1]:56566 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1okKr2-0003Bz-6m for importer@patchew.org; Mon, 17 Oct 2022 03:48:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59440) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1okKd9-00086W-V2 for qemu-devel@nongnu.org; Mon, 17 Oct 2022 03:33:53 -0400 Received: from mail-vi1eur04on071a.outbound.protection.outlook.com ([2a01:111:f400:fe0e::71a]:42753 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 1okKd5-00029p-VR for qemu-devel@nongnu.org; Mon, 17 Oct 2022 03:33:47 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by AS8PR08MB6710.eurprd08.prod.outlook.com (2603:10a6:20b:397::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.29; Mon, 17 Oct 2022 07:28:38 +0000 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b]) by AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b%8]) with mapi id 15.20.5676.040; Mon, 17 Oct 2022 07:28:38 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=T0bJcEu7fenr1PFmvRixefOZdt713xyXMWbq1rGJ9g7B64WaCIRSqHfS+oUI11enyNs19SAtdtJ2wkepmeHAbUUq2vCbdl+Nzt8PwE+GFImG2U1K/JmU+AmB3sOitpeGFRakX2lN9rHwpK2VvlwO12sqysfz5VP5oj3lAUpnnnw9WtN1nobtF1weTudB1T08LjhCBM4A2tr0jVUYot8+Rh0Qu15S3VvGEXL6W7SsJfjRIIjpzkk8CwaQgnjWF/hQgx+OyH20jJ3KmlYJqiLLh71PtRZjgRReRZFOBfZkOGct53zQOrUHDX1KthtzYJULoMpKIHURBWmXHdOkbMbC8A== 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=ntgPPnTOKgxTnF+LfBEBgtehlf04PvP6KLfYZLNlrmc=; b=Lx+aoK8jvypmnQEiJUshjt++yUNCcmB04upzBfJQUFmPzX7tfL+XMN4JdYgo2HgtQ59aTFjMd2zEpzPJqHiblotl1AohKnvA93XYQcdpC4TnTe/pqpAHgfgZVKrclhQEo2JuUtIBG4EW1a91tOF2OkJPDSwAg7CH/RoLqTcQGrlASs3NJ9tEbHEBWT/8frGi5I5zVqkalT2F91ULGb3RdZLZ2Dxe7T24mKRmsxpLhhzfuukhO7Jmogg0Fk2qO2jcEyq1ANdBLr2QM0ZZ/m4jmZnEqRRdsiX9+WK4aQ01B2EWSL1IA8KcAuNeGCmDMbOvDF0KR6iAQCQfh/oKuP42RQ== 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=ntgPPnTOKgxTnF+LfBEBgtehlf04PvP6KLfYZLNlrmc=; b=rqu4JVrcl/Oxz1xLAa4MECrxLaoCKq3vLK+WwvuIb7nb7wwgLA5y2K9bm8Vi71+kydCZNuKyWF6sy2iOFHKce+kJ39Rt4sF01/KxOHpeijFQU1nW8ENZqmMEAxBQCb3KLSKmEhwaQIlrhpP9oQBlkUuUalV73peF2W0BWgJB+exkbF6ZXMAQJ2OX+Su/pHwEM8+FM+a3Pk1FAmLd4ayqqOOcthxPzU+rW21vHS3SjgvyfKjft6eHpYTdoWyi/Tl39Y5xWOD2/CWtr927ZmKJ0edMsrjjYy7PHTTPvx1VFtMqtpPwpKDJw6rqWOgtrGHCuwQeAUPHIgMAmUEQIff/Tg== 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 v5 3/7] qga: Add UFS freeze/thaw support for FreeBSD Date: Mon, 17 Oct 2022 09:28:21 +0200 Message-Id: <20221017072825.72867-4-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221017072825.72867-1-alexander.ivanov@virtuozzo.com> References: <20221017072825.72867-1-alexander.ivanov@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0033.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1c::12) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|AS8PR08MB6710:EE_ X-MS-Office365-Filtering-Correlation-Id: 39236878-a793-4c63-4737-08dab0113588 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: bolLiR5ECIH4wVyhxVAK3e4M7QG6jWdUXel+LA1MTfYt4/riZJ1P3pMdc19UppWKTLqc0J40jvc2dRat4bPveQZTQvLNFu9d/TlwbI7f8N/5GNHHkVkMOlQEVpyKzk/OJXjQB5e6L1TF6XZ9yifqPwX6ke1AxnRSFMC8kev3ZJsARLYKEsfFtUwjED7+E1g1x8/sqlgCu7kHdT7t8HOyJBdQ8Uu3uCqcvh6VU/xDPk3hdjIqI6KbtvBNJM5JJADqPJvk+qgDamKz4yMvNJObpvbdoFHWo2SWJE/2BQ5m4Z8rQok0ScD6fNYfGONRKHlrMgNoriA35gO287dSVkE56/gEcljS4rf2MJF5f1gtG3a7diznmBS010nBwf4XwbD7mN4TKUsS8ZPoqtBc4SrhrMUjh9yNG6cUJvFeFAjI0ka2yGzutjjhgfTyj2hauPasV4LofjpZxWr2lToR+Ibfq74ZYxTvzZEJ9hURZnw4wAXm1ArX8TxiIDf9+lCvyi60X1R4E0Pu4suQyvfmL/MhaMKZhAuUy6ccTHK5SBUD2mBCSAhO97v3LNvdpiUe1sTuX9HFf8lHaHMyDenJ4ZF/ps2VOc0h480NKEBJHjJ4xHGnPnSaTKr/Rodn5zNZejj/CUayVpPrCCk6Xzi6LeLJ+kIZOz3HAGSyxHWmjFPc8KDU3+BR1hsCPDCvUXbsxDSEVyOKobKbVre0EuA+5TUMbjHQQPiBZ/aK2AK79lFlpcfqClZitS/HAzrSvtCFJK+9GntrcjChhryJo3HQej1QWw== 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)(346002)(376002)(396003)(39850400004)(136003)(366004)(451199015)(316002)(2906002)(1076003)(186003)(83380400001)(86362001)(36756003)(38350700002)(38100700002)(6486002)(478600001)(6916009)(41300700001)(52116002)(44832011)(6506007)(8936002)(2616005)(5660300002)(26005)(30864003)(66476007)(6512007)(66946007)(4326008)(66556008)(8676002)(6666004); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a3E2clFBQ2NMMnliZU5iWGxlTFZOWDdObHR0d2ZMcDFWZjdJcGdkUGRWeTZU?= =?utf-8?B?Nnk4NEloVld6SGc3Z3VFb1NLSWpFcnIxVzZodExlTUtvenFYN3FpWUFwSGFI?= =?utf-8?B?YlFyZmpnYi8rbUxiZFI4TEhsb0Y2TUpBbUZJU2ZLVmV2amszYzBQeEE5RG4x?= =?utf-8?B?ZHBvY0prNDJKU1NOVUdoOGpYZ1pXSmhJVUFjdkJJUnpFL0ZMc0lXeXh5bURM?= =?utf-8?B?Y2lmNG5IV0VmUVNpekJLcWFyYjVSc095OUdURmJNa0k4VGVSWXY2Qi96emZi?= =?utf-8?B?SG5ROTRrdjJTYzNjNzZwWVFHZWZielR4UTJ2NkFqQ0tuU1RmNkhWYUljemkz?= =?utf-8?B?WlRicWlLajN6SXBQdDR3aWhMcXR2bzVSaGxTTXdBaUR2cDRQNVkxMDB2UEpF?= =?utf-8?B?Rk13cWtpY1IwMmxtemFvS3RtVXpBYVA1WnV2b0Z3UHBHT0pJbHk2S3FXSUVs?= =?utf-8?B?YUpmdlpmT2o1TlhPZ09rMTBqK3dXMEk1QVRNWXZodFpLQVlESVB5ZDZ3N2JO?= =?utf-8?B?YkhNNUx0RnRnVnhvUm1Ea3dXNW84ajN3UFB3U0hSSG9jMnJhd3A1UmZpSjFo?= =?utf-8?B?bjhzZlowc3lQVlVOMmV3OWhJT3VKbjhOcDRUMzhWVWNHNkFJTjlnSHR1R0Nq?= =?utf-8?B?TnhhMmY3SkE0QUMvUUp4NjZyZkh0TGlkYXdLdHJVV0FyV0tDZFIybzJjWllF?= =?utf-8?B?Y1VhTTIzc1hpTFZtbjJUVXQ2Q0JMaXBsOFpRVlIzMDlPb3pBN2ZtZWcxdFlM?= =?utf-8?B?bFZXNW9qN1VtV0VpSkgzVWNHTFpncDVNeVF2VWhvdzMwQmU0RWplNjhEYjBn?= =?utf-8?B?MUUvL2Q3TEFWV0NwUjcvQndHeU5oMlVkamNGOVFmaTBRQ3Rad1cyZVhnU2VO?= =?utf-8?B?MXNFaUhkUE5Yd1B1eittTTZIMTNRNDdKb0FLK2pGU1F2V0dqdmVXWFhyZmxq?= =?utf-8?B?QTFvZTJMaXR6MklzdFk2bVM0ZlhOV042Z0hnZ1BCMElGMXd4Zm5wUVFpcGJY?= =?utf-8?B?SnNENE9rVjByYmFHYWdRVWlDUzhIN3lFRVl3TFB6RkZJK0ZJT1d6RnN0YnJt?= =?utf-8?B?ekZmSGhhWFRQc1lpWlFNS1pES0JxM1BBOSs2KzA2emRJVFY5UEtrNGNyMFh0?= =?utf-8?B?L01jVzR3WVNUdmJBMHNydEMrdU9EcDY3eFJ5YXhtenRLa0twMUkwUEQ0di93?= =?utf-8?B?dVJqcysvR25aR2EzNEZIZFFXQ0daUlU4bmxzckx2ank3TTFsU0l4V1U1NTQ3?= =?utf-8?B?K3AyQ2NGZmgxVC9QY0hyQkg4VnpJb1loQm53N2c5amtMRXNHSk44YzdmTTFP?= =?utf-8?B?ME14eFJMVi81SWVIemQ4WEdLSURPZ0g2RVVFRmlwcDRCSHc4OGp5WGE0OGlM?= =?utf-8?B?ZWtCWUIvMkY3dlBKWnZnTFZrWVhINzd5VDdqbFNvcnB6V2ZqcjVUTGYvNjl6?= =?utf-8?B?UVlsUkdoakdIVWxIcHFUeFdVbDdPRVgvNmFhYXZtL2xmY01aT3hIYVNwb1d2?= =?utf-8?B?OVpkWER0Yko3b00zN29EU3FnbnpNZUxrUHBEWWs2MTFYb3lqakorVHZ1UG9l?= =?utf-8?B?NUVYM1ZEaEZvRXI1SDgzRUtxZ0dTK2hCM0FKN2RUcDEvSXRWVE4zVmRSeUJl?= =?utf-8?B?Zk0yRGJSaGpWbWVkYSs3SVB5NUhzYlpHK1VOTFF4MlZ0WlVkbEFYSzdneXhy?= =?utf-8?B?cVVkZHNRTUFad1BrdVlIRU1CREE1WDYralI5WjREL0F6MDhIVEdhSVlwN2Q2?= =?utf-8?B?NnJUcFloNmxrTnJjMGNvclVoRkVVZURVZDZySllaMHZQdGN0Z29nOEFHT3Vz?= =?utf-8?B?eWhHZ0Yyb254ekdGdmg5cE9FQm8rOUVuVldHOVJvaFk5Q1RZUHl5VmdZR2pP?= =?utf-8?B?VFNwR1lVYXVMSFdFS0J0Zkp1NXJXQnhWbXFEejBiZUViVUJyRkVIcURodjMv?= =?utf-8?B?MG5Ea09namFDQWdYL1R2ZGUzekJDbVRKR1JzTmZQM3ZZZU5HOVYrTzhuTjdr?= =?utf-8?B?bXZuaW1WSDZUWjlyc1M0SmQyOW4vNnA5bmVIcUR4VFlQQ1NRV3N3N29qcCt6?= =?utf-8?B?VW9FUkVVTTh4Sit3SlFQckJyM1kyZ3dmdjNCMkxabUc5OHh4RlBGSGFuQVc0?= =?utf-8?B?UTJIMVR3QXhGZ1VDRWNveVk1UjVmQ3hXU3pkNFg5ZWQyU0NyKysvZ3pJb2lV?= =?utf-8?B?TGc9PQ==?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 39236878-a793-4c63-4737-08dab0113588 X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2022 07:28:38.7121 (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: q7CHP29i89bXR3yFn/aU94WiYXOyDQVxpiUXpBm0xeS/AHD7z94XsUbhswMfZZjx+0bNeB3wVITpBv/a+OFH6kBRr6YEhKuHus+QSbLOApI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6710 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::71a; 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, 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: 1665992890892100003 UFS supports FS freezing through ioctl UFSSUSPEND on /dev/ufssuspend. Frozen FS can be thawed by closing /dev/ufssuspend file descriptior. Use getmntinfo to get a list of mounted FS. Reviewed-by: Konstantin Kostiuk Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Alexander Ivanov --- qga/commands-bsd.c | 169 +++++++++++++++++++++++ qga/commands-common.h | 11 ++ qga/commands-posix.c | 308 ++++++++++++++++++++---------------------- qga/main.c | 7 +- qga/meson.build | 3 + 5 files changed, 334 insertions(+), 164 deletions(-) create mode 100644 qga/commands-bsd.c diff --git a/qga/commands-bsd.c b/qga/commands-bsd.c new file mode 100644 index 0000000000..ca06692179 --- /dev/null +++ b/qga/commands-bsd.c @@ -0,0 +1,169 @@ +/* + * QEMU Guest Agent BSD-specific command implementations + * + * Copyright (c) Virtuozzo International GmbH. + * + * Authors: + * Alexander Ivanov + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "qga-qapi-commands.h" +#include "qapi/qmp/qerror.h" +#include "qapi/error.h" +#include "qemu/queue.h" +#include "commands-common.h" +#include +#include +#include +#include +#include + +#if defined(CONFIG_FSFREEZE) || defined(CONFIG_FSTRIM) +bool build_fs_mount_list(FsMountList *mounts, Error **errp) +{ + FsMount *mount; + struct statfs *mntbuf, *mntp; + struct stat statbuf; + int i, count, ret; + + count =3D getmntinfo(&mntbuf, MNT_NOWAIT); + if (count =3D=3D 0) { + error_setg_errno(errp, errno, "getmntinfo failed"); + return false; + } + + for (i =3D 0; i < count; i++) { + mntp =3D &mntbuf[i]; + ret =3D stat(mntp->f_mntonname, &statbuf); + if (ret !=3D 0) { + error_setg_errno(errp, errno, "stat failed on %s", + mntp->f_mntonname); + return false; + } + + mount =3D g_new0(FsMount, 1); + + mount->dirname =3D g_strdup(mntp->f_mntonname); + mount->devtype =3D g_strdup(mntp->f_fstypename); + mount->devmajor =3D major(mount->dev); + mount->devminor =3D minor(mount->dev); + mount->fsid =3D mntp->f_fsid; + mount->dev =3D statbuf.st_dev; + + QTAILQ_INSERT_TAIL(mounts, mount, next); + } + return true; +} +#endif /* CONFIG_FSFREEZE || CONFIG_FSTRIM */ + +#if defined(CONFIG_FSFREEZE) +static int ufssuspend_fd =3D -1; +static int ufssuspend_cnt; + +int64_t qmp_guest_fsfreeze_do_freeze_list(bool has_mountpoints, + strList *mountpoints, + FsMountList mounts, + Error **errp) +{ + int ret; + strList *list; + struct FsMount *mount; + + if (ufssuspend_fd !=3D -1) { + error_setg(errp, "filesystems have already frozen"); + return -1; + } + + ufssuspend_cnt =3D 0; + ufssuspend_fd =3D qemu_open(_PATH_UFSSUSPEND, O_RDWR, errp); + if (ufssuspend_fd =3D=3D -1) { + return -1; + } + + QTAILQ_FOREACH_REVERSE(mount, &mounts, next) { + /* + * To issue fsfreeze in the reverse order of mounts, check if the + * mount is listed in the list here + */ + if (has_mountpoints) { + for (list =3D mountpoints; list; list =3D list->next) { + if (g_str_equal(list->value, mount->dirname)) { + break; + } + } + if (!list) { + continue; + } + } + + /* Only UFS supports suspend */ + if (!g_str_equal(mount->devtype, "ufs")) { + continue; + } + + ret =3D ioctl(ufssuspend_fd, UFSSUSPEND, &mount->fsid); + if (ret =3D=3D -1) { + /* + * ioctl returns EBUSY for all the FS except the first one + * that was suspended + */ + if (errno =3D=3D EBUSY) { + continue; + } + error_setg_errno(errp, errno, "failed to freeze %s", + mount->dirname); + goto error; + } + ufssuspend_cnt++; + } + return ufssuspend_cnt; +error: + close(ufssuspend_fd); + ufssuspend_fd =3D -1; + return -1; + +} + +/* + * We don't need to call UFSRESUME ioctl because all the frozen FS + * are thawed on /dev/ufssuspend closing. + */ +int qmp_guest_fsfreeze_do_thaw(Error **errp) +{ + int ret =3D ufssuspend_cnt; + ufssuspend_cnt =3D 0; + if (ufssuspend_fd !=3D -1) { + close(ufssuspend_fd); + ufssuspend_fd =3D -1; + } + return ret; +} + +GuestFilesystemInfoList *qmp_guest_get_fsinfo(Error **errp) +{ + error_setg(errp, QERR_UNSUPPORTED); + return NULL; +} + +GuestDiskInfoList *qmp_guest_get_disks(Error **errp) +{ + error_setg(errp, QERR_UNSUPPORTED); + return NULL; +} + +GuestDiskStatsInfoList *qmp_guest_get_diskstats(Error **errp) +{ + error_setg(errp, QERR_UNSUPPORTED); + return NULL; +} + +GuestCpuStatsList *qmp_guest_get_cpustats(Error **errp) +{ + error_setg(errp, QERR_UNSUPPORTED); + return NULL; +} +#endif /* CONFIG_FSFREEZE */ diff --git a/qga/commands-common.h b/qga/commands-common.h index cb51b1c6e9..d0583c6ddb 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 d24f2fafd8..6875ea8888 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -33,20 +33,12 @@ =20 #if defined(__linux__) #include -#include #include #include =20 #ifdef CONFIG_LIBUDEV #include #endif - -#ifdef FIFREEZE -#define CONFIG_FSFREEZE -#endif -#ifdef FITRIM -#define CONFIG_FSTRIM -#endif #endif =20 #ifdef __FreeBSD__ @@ -623,9 +615,6 @@ void qmp_guest_file_flush(int64_t handle, Error **errp) } } =20 -/* linux-specific implementations. avoid this if at all possible. */ -#if defined(__linux__) - #if defined(CONFIG_FSFREEZE) || defined(CONFIG_FSTRIM) void free_fs_mount_list(FsMountList *mounts) { @@ -644,6 +633,156 @@ void free_fs_mount_list(FsMountList *mounts) } #endif =20 +#if defined(CONFIG_FSFREEZE) +typedef enum { + FSFREEZE_HOOK_THAW =3D 0, + FSFREEZE_HOOK_FREEZE, +} FsfreezeHookArg; + +static const char *fsfreeze_hook_arg_string[] =3D { + "thaw", + "freeze", +}; + +static void execute_fsfreeze_hook(FsfreezeHookArg arg, Error **errp) +{ + int status; + pid_t pid; + const char *hook; + const char *arg_str =3D fsfreeze_hook_arg_string[arg]; + Error *local_err =3D NULL; + + hook =3D ga_fsfreeze_hook(ga_state); + if (!hook) { + return; + } + if (access(hook, X_OK) !=3D 0) { + error_setg_errno(errp, errno, "can't access fsfreeze hook '%s'", h= ook); + return; + } + + slog("executing fsfreeze hook with arg '%s'", arg_str); + pid =3D fork(); + if (pid =3D=3D 0) { + setsid(); + reopen_fd_to_null(0); + reopen_fd_to_null(1); + reopen_fd_to_null(2); + + execl(hook, hook, arg_str, NULL); + _exit(EXIT_FAILURE); + } else if (pid < 0) { + error_setg_errno(errp, errno, "failed to create child process"); + return; + } + + ga_wait_child(pid, &status, &local_err); + if (local_err) { + error_propagate(errp, local_err); + return; + } + + if (!WIFEXITED(status)) { + error_setg(errp, "fsfreeze hook has terminated abnormally"); + return; + } + + status =3D WEXITSTATUS(status); + if (status) { + error_setg(errp, "fsfreeze hook has failed with status %d", status= ); + return; + } +} + +/* + * Return status of freeze/thaw + */ +GuestFsfreezeStatus qmp_guest_fsfreeze_status(Error **errp) +{ + if (ga_is_frozen(ga_state)) { + return GUEST_FSFREEZE_STATUS_FROZEN; + } + + return GUEST_FSFREEZE_STATUS_THAWED; +} + +int64_t qmp_guest_fsfreeze_freeze(Error **errp) +{ + return qmp_guest_fsfreeze_freeze_list(false, NULL, errp); +} + +int64_t qmp_guest_fsfreeze_freeze_list(bool has_mountpoints, + strList *mountpoints, + Error **errp) +{ + int ret; + FsMountList mounts; + Error *local_err =3D NULL; + + slog("guest-fsfreeze called"); + + execute_fsfreeze_hook(FSFREEZE_HOOK_FREEZE, &local_err); + if (local_err) { + error_propagate(errp, local_err); + return -1; + } + + QTAILQ_INIT(&mounts); + if (!build_fs_mount_list(&mounts, &local_err)) { + error_propagate(errp, local_err); + return -1; + } + + /* cannot risk guest agent blocking itself on a write in this state */ + ga_set_frozen(ga_state); + + ret =3D qmp_guest_fsfreeze_do_freeze_list(has_mountpoints, mountpoints, + mounts, errp); + + free_fs_mount_list(&mounts); + /* We may not issue any FIFREEZE here. + * Just unset ga_state here and ready for the next call. + */ + if (ret =3D=3D 0) { + ga_unset_frozen(ga_state); + } else if (ret < 0) { + qmp_guest_fsfreeze_thaw(NULL); + } + return ret; +} + +int64_t qmp_guest_fsfreeze_thaw(Error **errp) +{ + int ret; + + ret =3D qmp_guest_fsfreeze_do_thaw(errp); + if (ret >=3D 0) { + ga_unset_frozen(ga_state); + execute_fsfreeze_hook(FSFREEZE_HOOK_THAW, errp); + } else { + ret =3D 0; + } + + return ret; +} + +static void guest_fsfreeze_cleanup(void) +{ + Error *err =3D NULL; + + if (ga_is_frozen(ga_state) =3D=3D GUEST_FSFREEZE_STATUS_FROZEN) { + qmp_guest_fsfreeze_thaw(&err); + if (err) { + slog("failed to clean up frozen filesystems: %s", + error_get_pretty(err)); + error_free(err); + } + } +} +#endif + +/* linux-specific implementations. avoid this if at all possible. */ +#if defined(__linux__) #if defined(CONFIG_FSFREEZE) =20 static char *get_pci_driver(char const *syspath, int pathlen, Error **errp) @@ -1467,153 +1606,6 @@ GuestFilesystemInfoList *qmp_guest_get_fsinfo(Error= **errp) free_fs_mount_list(&mounts); return ret; } - - -typedef enum { - FSFREEZE_HOOK_THAW =3D 0, - FSFREEZE_HOOK_FREEZE, -} FsfreezeHookArg; - -static const char *fsfreeze_hook_arg_string[] =3D { - "thaw", - "freeze", -}; - -static void execute_fsfreeze_hook(FsfreezeHookArg arg, Error **errp) -{ - int status; - pid_t pid; - const char *hook; - const char *arg_str =3D fsfreeze_hook_arg_string[arg]; - Error *local_err =3D NULL; - - hook =3D ga_fsfreeze_hook(ga_state); - if (!hook) { - return; - } - if (access(hook, X_OK) !=3D 0) { - error_setg_errno(errp, errno, "can't access fsfreeze hook '%s'", h= ook); - return; - } - - slog("executing fsfreeze hook with arg '%s'", arg_str); - pid =3D fork(); - if (pid =3D=3D 0) { - setsid(); - reopen_fd_to_null(0); - reopen_fd_to_null(1); - reopen_fd_to_null(2); - - execl(hook, hook, arg_str, NULL); - _exit(EXIT_FAILURE); - } else if (pid < 0) { - error_setg_errno(errp, errno, "failed to create child process"); - return; - } - - ga_wait_child(pid, &status, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; - } - - if (!WIFEXITED(status)) { - error_setg(errp, "fsfreeze hook has terminated abnormally"); - return; - } - - status =3D WEXITSTATUS(status); - if (status) { - error_setg(errp, "fsfreeze hook has failed with status %d", status= ); - return; - } -} - -/* - * Return status of freeze/thaw - */ -GuestFsfreezeStatus qmp_guest_fsfreeze_status(Error **errp) -{ - if (ga_is_frozen(ga_state)) { - return GUEST_FSFREEZE_STATUS_FROZEN; - } - - return GUEST_FSFREEZE_STATUS_THAWED; -} - -int64_t qmp_guest_fsfreeze_freeze(Error **errp) -{ - return qmp_guest_fsfreeze_freeze_list(false, NULL, errp); -} - -int64_t qmp_guest_fsfreeze_freeze_list(bool has_mountpoints, - strList *mountpoints, - Error **errp) -{ - int ret; - FsMountList mounts; - Error *local_err =3D NULL; - - slog("guest-fsfreeze called"); - - execute_fsfreeze_hook(FSFREEZE_HOOK_FREEZE, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return -1; - } - - QTAILQ_INIT(&mounts); - if (!build_fs_mount_list(&mounts, &local_err)) { - error_propagate(errp, local_err); - return -1; - } - - /* cannot risk guest agent blocking itself on a write in this state */ - ga_set_frozen(ga_state); - - ret =3D qmp_guest_fsfreeze_do_freeze_list(has_mountpoints, mountpoints, - mounts, errp); - - free_fs_mount_list(&mounts); - /* We may not issue any FIFREEZE here. - * Just unset ga_state here and ready for the next call. - */ - if (ret =3D=3D 0) { - ga_unset_frozen(ga_state); - } else if (ret < 0) { - qmp_guest_fsfreeze_thaw(NULL); - } - return ret; -} - -int64_t qmp_guest_fsfreeze_thaw(Error **errp) -{ - int ret; - - ret =3D qmp_guest_fsfreeze_do_thaw(errp); - if (ret >=3D 0) { - ga_unset_frozen(ga_state); - execute_fsfreeze_hook(FSFREEZE_HOOK_THAW, errp); - } else { - ret =3D 0; - } - - return ret; -} - -static void guest_fsfreeze_cleanup(void) -{ - Error *err =3D NULL; - - if (ga_is_frozen(ga_state) =3D=3D GUEST_FSFREEZE_STATUS_FROZEN) { - qmp_guest_fsfreeze_thaw(&err); - if (err) { - slog("failed to clean up frozen filesystems: %s", - error_get_pretty(err)); - error_free(err); - } - } -} #endif /* CONFIG_FSFREEZE */ =20 #if defined(CONFIG_FSTRIM) diff --git a/qga/main.c b/qga/main.c index 0d27c97d38..b3580508fa 100644 --- a/qga/main.c +++ b/qga/main.c @@ -37,12 +37,7 @@ #include "qga/service-win32.h" #include "qga/vss-win32.h" #endif -#ifdef __linux__ -#include -#ifdef FIFREEZE -#define CONFIG_FSFREEZE -#endif -#endif +#include "commands-common.h" =20 #ifndef _WIN32 #ifdef __FreeBSD__ diff --git a/qga/meson.build b/qga/meson.build index 932b4e7ca8..3cfb9166e5 100644 --- a/qga/meson.build +++ b/qga/meson.build @@ -75,6 +75,9 @@ qga_ss.add(when: 'CONFIG_POSIX', if_true: files( qga_ss.add(when: 'CONFIG_LINUX', if_true: files( 'commands-linux.c', )) +qga_ss.add(when: 'CONFIG_BSD', if_true: files( + 'commands-bsd.c', +)) qga_ss.add(when: 'CONFIG_WIN32', if_true: files( 'channel-win32.c', 'commands-win32.c', --=20 2.34.1 From nobody Sun May 12 22:34:17 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=1665993169; cv=pass; d=zohomail.com; s=zohoarc; b=cFbHQXCBXqdnQA3T/Y2ZO5CrQP5kAlqf4dz0kPCstTmRiNOyvXMXbllzMXWFac/Ro3pHUVWJy8AYKPmN0VayLI9ahZn5xcbasn/UZqA9xl7yq8Ljeyflbx59yk6mNs0hfSkgP/ElmRYEi5k3RR9uVkCAssCsdIt1MOa6CebQuZY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1665993169; 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=ku6Djti0TjfMuEVA+aLc+awmoKymOD59H9ccnlZTYRM=; b=JawR63bd1xSCyKoKQ27NWI3gXvALv8fHh20aO8iXNIzxysKGqjHVGXAqdHOKJARw2ci0Rc9k/FPyhom5/+IrrTBE1gPyMKmGAsMd4aVABsHtmU4+cugSUpzbxoQ7TSaXTHaRv+7udKtoDrJzJea+EtRrksv/67bS51Kf6/amzkk= 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 1665993169769471.5313255382864; Mon, 17 Oct 2022 00:52:49 -0700 (PDT) Received: from localhost ([::1]:56350 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1okKvY-0002bm-Ln for importer@patchew.org; Mon, 17 Oct 2022 03:52:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59436) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1okKd9-00086R-Rw for qemu-devel@nongnu.org; Mon, 17 Oct 2022 03:33:53 -0400 Received: from mail-am6eur05on20730.outbound.protection.outlook.com ([2a01:111:f400:7e1b::730]:31873 helo=EUR05-AM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1okKd5-00029q-UV for qemu-devel@nongnu.org; Mon, 17 Oct 2022 03:33:46 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by PA4PR08MB7458.eurprd08.prod.outlook.com (2603:10a6:102:2a5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.29; Mon, 17 Oct 2022 07:28:39 +0000 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b]) by AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b%8]) with mapi id 15.20.5676.040; Mon, 17 Oct 2022 07:28:39 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=e+lYg+RzLLWnE+rA4BPKtG70qaHedPtwXJlM/czz5XHxfJZ3t2osazhgAU1a3X8KXKj79N6LyBD0FpyTTcPt3PcAZTb4Y8gVcdbeSv+0jrDUN9WgnG7xMdboZkKlGiNxeXWvEOeRFxZIFo+y8rh/9g0Hp+svhT4yNvXiDOyYhdNyFJbmHJXXnu3/aoA/bKK8W2GmcC3CNrdYf8VAczeD5PGpZxO16JnR0BhjGvI+vE44JDEG+O3MBeCoD6fZ+RbtdWApexr/L+dqDyHAxyKHFbT7ATx0vBkmOW1VbVLJnoufG8coEFQxPwS/GGeGzHtlHC8chtduPk0Wzr7E+PQFuQ== 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=ku6Djti0TjfMuEVA+aLc+awmoKymOD59H9ccnlZTYRM=; b=Dc52DeNTD/fhNjz6YAhXpX2vOfFVXEvO2vznkLiekU/8iR7aUrSrFl/KyJ5SnJG6UGUJPUyUMbyvdMDlSO1+qUQRa3MPtKo8vCEdzHDVDpX/lhJwddybQFK2LblwmW+jwjqDhCK+67xiS/Uz/7sv+/RTOcN6IhABd3V+PJXQ+IvnBCTohNaOdMzgr4+EUdV952bZIAVCJhuKMBkQwC9Zl5BXtWNF4SpZT2InXVairyoiYOrrj6aTi8fVtPOLc3NfU8RF55Elwm3L0RjH3AzvAZd0sa3fzhFy9RfQwcxp7FUu+C/xQNGalx9kk4qFFkC5fjJsguSfdzcy5T56o6bq+g== 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=ku6Djti0TjfMuEVA+aLc+awmoKymOD59H9ccnlZTYRM=; b=c9WPAy2R8y/oo2Ab+AB2ijjVqTlBmpNak3jOoccUU9eSMJRKQNjohvkVaHcRRI3NbZb96nJmXfIkRRXE7d1DDw0fijodPQguapiYQCQJfZWDTNRXVQI2jmo80oRM5kll0X628FxSOKYAxa6b4+MuNWVKceYHiQTJnGRCBvKjKhmACpWq97h3nzx3l4fS+TGmF0m6nwL93Yxvzfsv3XL60uHkLsVUukHpu0WljSIhcsbS4pfsptZXZaiNuPfr2XV86+VL0IrVD1IFEOhTgYWXzDDwIcGdUCZy2no6nKz3yYK8un2yYg5LQK+sdhZ/ovoNcPrDJa/w+LoZ++BZDMTFTA== 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 v5 4/7] qga: Add shutdown/halt/reboot support for FreeBSD Date: Mon, 17 Oct 2022 09:28:22 +0200 Message-Id: <20221017072825.72867-5-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221017072825.72867-1-alexander.ivanov@virtuozzo.com> References: <20221017072825.72867-1-alexander.ivanov@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0033.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1c::12) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|PA4PR08MB7458:EE_ X-MS-Office365-Filtering-Correlation-Id: d9998b73-0480-4495-d486-08dab01135e7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /ny8pDCgdFjOBlXqh9cgTB7810WPMP5n6pq65uQ0uCAgKuc31RflXYtYHRkyoao6bfOyyEfMHaBoBZh3voeJSkfErJK5xSxI8kX/t0pXyJwKmLyVDAntt1vNmZoxtyJ0bRUwzy1vM08c0uFqcdz2lgh6IJ1fSUAralfOLNeDu5SRAtH4CS/8N/y/wbOTTK+U6RiK+MQCuZa8JlSDf9KkfW/WZKGvjDSDDDdJGwqiXtk3KPCn++HRIYy/qr8iaa18TV6V0TuKANJjsRD5I9eXC9g/hVNwS1jgfvXmD1hrxlSjdwSgfsdWNn4buYpGXqDducE1YsRPE1a74w9QVmqV91Emy2n3com6yj8v99vqJrKDVSccm71eY1P9MenM730mM/Juw4UH3QHTryGZZTDZi8IP3W0rJFRJEv+s+vsrR+BfSkM8cQfPHU/mW2AMvILHPxHQCQgm/5X/0OMP6qNqWpgCEjvPLgFuBRcmYwa8KraxuMw4NipM/LnNj6zYkWFQT5rPdFaC70zIAMCV4VSBM2HAQj7+zPPKRBfGh4Lw6beOAWMoiAQluSJT+KBdvLOcV/Uvjo62YMHL9tuNU7McDShjTNRrWxkyzLOxBiYCPAY3M3tqjhzAwAEjDwU/nHpwjkCQv7UKYBR2wQ40QAMd0O7xc5H/dHaRrE5stJfz13wAz0ETVcAOOHuZ3BG0LhiJbyb/C0SEinkPO6zIvyrp2tdyRIve2UZNLHEvXX+NISHBKYk/Q8vBPCY0MIKFIfFvOkeLygz4HzC/aQRHTSuX5g== 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)(396003)(39850400004)(346002)(136003)(366004)(376002)(451199015)(36756003)(86362001)(38100700002)(38350700002)(1076003)(186003)(2906002)(5660300002)(44832011)(6506007)(6666004)(26005)(6512007)(2616005)(478600001)(52116002)(6486002)(316002)(6916009)(66946007)(66556008)(8676002)(4326008)(66476007)(41300700001)(8936002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UStHSUVwdU1ObWI2Ym5zTDJaT1h1ekxjQVNMZTVuQUg1VURCTkN0aHFIM1hC?= =?utf-8?B?Z3k4Q3FwenJJanQzK29mWWxZZXlBeUwwbHRXQ0RTYnFkUml2dHZwZWYyaDdz?= =?utf-8?B?OTdPbzZ2b3N6Q1dUbVI4NnZPK21sbXF5U2pFWjI1RTUyWXdOTlN2TnkweTBv?= =?utf-8?B?NkU2WjltWnRrZTIwbk9MNmhVcU5ESi9GcnhmTitKQStYaWcyQkZ6MG4xZ2RB?= =?utf-8?B?YnIxeWhTcmovZUFBTWZxVFN5ZERJV0lOOGZ3TmpTZVUyT1RmMnJkQklXUS80?= =?utf-8?B?eUpOeC9HYWQ1cUxTOWdIcWhaL1FoOThWYXdkeVA0Z3VYUEFVYWNqN2hXZW10?= =?utf-8?B?Rkdnc1c0bHZTMlNYQWNOaXVXclk5WnNodHFINVJGZkJHNEhnNVNlTlJOMkor?= =?utf-8?B?ZkNTTTNGNS85T0NONGk2OGdjWTl5MUVpdkVQN2RodFhhN0NuZ2RidjVUOVZX?= =?utf-8?B?UUhDUU1mOWVrd2x3bXBmY25tcGtQK3pCWG1CeWJKS3JRbTc5WWgvM2YrYUZp?= =?utf-8?B?MGRGMGM2R21tN3dLYWVUNkk5ZjlIRXk4cnJnbVZ4Z21VV09GZDk0OXhaN3Az?= =?utf-8?B?ZTAwR3V2QWtXWWg0a3RyeWUxL25xRTh1RGtmbzBjUDRTMTRXSG5jdjg4b0wx?= =?utf-8?B?ZkZRMkJPWjk4UDFWZy9BSC9iNmF4WUNRS0ZWMHN6eWMrYXJxL0xGZXVwRVZm?= =?utf-8?B?djl1MTQ3UlJFUnpyWFZqWFNaVGovNkNZUnQ3NFFaaHE5UllDUnRXYVRtMWE3?= =?utf-8?B?L0JQTUJrcWY4WkcwUlBJNzYzNmoya2E2czVOWlErcmFMNHUrTURxdjVxTjhy?= =?utf-8?B?elhCaVN3V09kTHNDUEM0Y1VXcmFJWStZRE1xT1lwKzMrNndrZkVibHJrTnZz?= =?utf-8?B?aWFudDJyWWJLdFo2N0s4a1dMNEhRQnh2NnZiQzU3bldaZDd2TDAvL2g1cC9P?= =?utf-8?B?TCtHWVh6OFBVbWpXYTVQb1lBeDVoU3hJYUx6NlNMOU03QTMzMG4zcGxMNE9E?= =?utf-8?B?R1kxNytGcVgvWUtxWWFqV25xaEtGdWYyd2NzNjBvcjBucm9TMlJwclVBNlA0?= =?utf-8?B?dDBMOWIwUFZmTVFFRFg2MXIzM0dtQXJqdWxxcUNzTFRhNmZLNFBHd0xqdS9J?= =?utf-8?B?a01mODBtRy92WktUR3ZtTEJvaFFJcmFoNmYyQkJtNkE5eHNoZFczUzBHaTNS?= =?utf-8?B?R0J2b01mbDh5YkRZQkNxNG5zcUhiOXMxTHp2N0dRb25ZWmlBNHloOHhuM3Na?= =?utf-8?B?VTEzaWJLMEg4bHYvckpKblg5amxreTNXQkFwNkliR3RMWTJDd1VkNzE1eWtw?= =?utf-8?B?RElXWHpxTUVCaW5BUm1DL0J6NTJ1WTN6cmFWNi8wSisrbXNmNXEzeldCNGNo?= =?utf-8?B?aW5NNlEyb3hvYUxuT0FwRDBIYWtob3pLTFhySGtVMHpQU3Y4TEVSM1hYNlBX?= =?utf-8?B?UlpqUUhxcDhEdU1rRCtES0piU0M3ZDBSRWtxZ3hCRU10UHZDdVcxSTl1c0tL?= =?utf-8?B?WjdCTGJDS1NOSk00RHArYU9OL0hvemlDTlR1ME1FQkw1ZUl4QXN1cXJSaVp5?= =?utf-8?B?dWhaTHlmVFFldDI5bTVWbUhmUEU5QlRXdWVsMGdSY09LeWgvcHp4VkE0eWVL?= =?utf-8?B?WElaeGMrZUpRRld3UkpFNi9iMDc3dm82LzFNUDE4Z2RyeFBtVTR5V0NER3Aw?= =?utf-8?B?YXA5ZWdMd2hBZ24yMzFnSGplM25YYlBtMGlMdGhETWt3SnZFVUptT3p4bENJ?= =?utf-8?B?ODc5RXV6a0JOSmRWbzF4R2JETkxSbmxVNW0wV215R2RPa2xHeGRlNmhXRjhG?= =?utf-8?B?RXR6R2lsL1VUUldwSThMdzhDVmJTYmNlQ1NwOGp1YWVmRG1EQk4rNUp4bEdL?= =?utf-8?B?QWVxVzF6OWJEcFRXNDVXNkRROEpGWk9NYnAvYU5nbmVKMGFsd1BnTTc4K2pQ?= =?utf-8?B?V2dvaXUrWENWVm5VcTdCNkFwTGQ0WCtNS245dXVoOFgxNjRFUU96T0dtZHkv?= =?utf-8?B?cDRxN2E5bGcwNElMNFp5NmwzZ2k2RUU3TTVndHRFM29BTUJOLzJIb2NEbHdG?= =?utf-8?B?aTl2aWdIcVlUbzhWQlhIUk9KUllNNEZrVDBTTUZRUVVGT2R6d2pmNjBnTUgz?= =?utf-8?B?a2RIWUI2VXhYK2dBaVB6ZW15NXFqWmJHSVkrUkNkY0FwNlpsVWp1cnlKY05C?= =?utf-8?B?eHc9PQ==?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: d9998b73-0480-4495-d486-08dab01135e7 X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2022 07:28:39.3226 (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: lEFdauscYJAfGREOHyqqV2BptKqcbf7uuXH893blhw2gjANXEJPk5HXSlRClfQTJGlcnucXeKUceHh3DKICfHKp3mn9pE001av4mSeUgw98= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB7458 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:7e1b::730; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR05-AM6-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, 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: 1665993170268100001 Add appropriate shutdown command arguments to qmp_guest_shutdown() for FreeBSD. Reviewed-by: Konstantin Kostiuk Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Alexander Ivanov --- qga/commands-posix.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/qga/commands-posix.c b/qga/commands-posix.c index 6875ea8888..b0b467ebdb 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 Sun May 12 22:34:17 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=1665992684; cv=pass; d=zohomail.com; s=zohoarc; b=KW5FZ49Nm3Ckbs5L96NWKmeEBPf4aKOTLcqvlFGLTAtI1yuhr7wSKe5ww2OSRO5TGvYbeOP3XFb8574h5Zqz0ewwSaDbRtTGQt8LauEGiEpgI9V6OrAl3JdMCAkpA/B7BXPwsJvS+lzULQ3Tg49VBhKN7SHRGESzptqpEn4JPR4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1665992684; 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=2Q3/Bc7F321/DYdYUKBzwEL+ZcqV9hd6HNm5kUp3zdI=; b=JT0scxp6/EcI7LOMORmE/84d2XPI1THwQgoGcRQ4bdcP6pLpgvojxOH3kv8+MzgIjpkictUa6LbgBRNzyPbWd9v9D7xubzsF/5UWn9JJ+CfhNIpARk1xRhVjScLoWuR0/6IZMQSdqhVZyAqtveiYkL38U9gPDUUJv086k0FWbOE= 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 166599268485545.14125486167552; Mon, 17 Oct 2022 00:44:44 -0700 (PDT) Received: from localhost ([::1]:53074 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1okKnh-0008Sx-3W for importer@patchew.org; Mon, 17 Oct 2022 03:44:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40870) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1okKYU-0004PH-Ng for qemu-devel@nongnu.org; Mon, 17 Oct 2022 03:28:58 -0400 Received: from mail-eopbgr00109.outbound.protection.outlook.com ([40.107.0.109]:35648 helo=EUR02-AM5-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 1okKYF-0001HN-G3 for qemu-devel@nongnu.org; Mon, 17 Oct 2022 03:28:56 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by GV2PR08MB8653.eurprd08.prod.outlook.com (2603:10a6:150:b9::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.26; Mon, 17 Oct 2022 07:28:40 +0000 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b]) by AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b%8]) with mapi id 15.20.5676.040; Mon, 17 Oct 2022 07:28:39 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fKA+Lh9N1OFLSPHGyxRjo7EJnSTwhrgijvr4ErqukTzih4vDRbvsdN1RLW6lQ9CUfGvI8nH2MC1qvjO3hRaVhtH9OhQocKiXvxRFFC3zTUhjaS0qWN6FhTX+GfbO0VqxYUNO63Grc3kf59iiXGOW0b1JDbhGG5krK69yjjtpyYVZDZ+k5w5s2xboXQcRA/Tf3sPBC3UN3CIInvrCE/wwYMT5NzIzeGW78yuJqSBQ0U+yl3CcAjckxtQOj62HXp89+RCVVlODU9iutSKR53WqIXc0RgnqDEHytfQLqVIyo3c6KIH+2/zl537rJSUFjYrGDlfElOAJAzV2rrID0aWcLg== 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=2Q3/Bc7F321/DYdYUKBzwEL+ZcqV9hd6HNm5kUp3zdI=; b=YDHMkDh+sr60b5+z/4rr04wMKnjVA/4V2CxUcl1PGLCQ78jG81sL/7ToNsxug97bBAleM4GSyf1sKtIRsnudGE2Ny2yD2epMX1g4Bob/1ffxdb1W17fsYngoNdjDiCA2ObCD9cCgDoIOPl9HGNaPY6TmAdY5Iv4tQ5Z6/OZArLEctnrIlHX4M5R0fDMcrXCpWovLripONuz+hXQMLHv5eF9YYA7Wlat6MvnMsC674vWK2ILpb66Rdocrmm93BmljaSePxwG757MlFwM91u4eG5O7ik0Uk3FuH739mC48oZAScvS7FXERI+M6vCl5nbG0bFQpBOUlmQ2eKbDVxb70+A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2Q3/Bc7F321/DYdYUKBzwEL+ZcqV9hd6HNm5kUp3zdI=; b=uRs+IX8Z7KcKjmZVT062E4v3ZO2QbX25EVmWStIiLak6XiIzLrLsLXEB9EgrFPbTDsH3K6Mh5hZSQ1tkjITIHZGhklMtxcmIfJbX4/QMsfD7G937tGnFg6Dv4H3PaNeXVrrHYDIveRFmJaGqjoMcdwUUoQQfGYpbXsC7Hk25CWfywt42t6Z8smF2vS6R7YLl0OCxHCM2Bxt+Iz8gZvV/oan5mvcDoD5k61aN8c+WMoLx1mZHVr+j6ERXamHC+5oAJqxK8/NhIcUehxuvkFXXcW9EPJLddmQ7lqPqWSw0OjIYGPpDpDnZkRjtmErDjQpYfgE1slksw/YeGYK79ZAD8w== 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 v5 5/7] qga: Add support for user password setting in FreeBSD Date: Mon, 17 Oct 2022 09:28:23 +0200 Message-Id: <20221017072825.72867-6-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221017072825.72867-1-alexander.ivanov@virtuozzo.com> References: <20221017072825.72867-1-alexander.ivanov@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0033.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1c::12) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|GV2PR08MB8653:EE_ X-MS-Office365-Filtering-Correlation-Id: e086770f-661f-46b5-2e23-08dab0113647 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: L1AVdaJ8WrlHM/wh5iEVPouJCQQ/OuUTNEE7jDHcLtWdDQOMolzcV64r7b9k+INiWmMijWXJo1qm2Sg8SsijXfvQpo6TPicKrhtdQSRY6JAY7xZolgIeGLv6CyAd0YnctrD3BQafL03Bu6qF01Z25v5dmHJDhhbznT1lW+44x2pYDDPCxX2OzIv/sY+3c4ELvSFOUR8QKF0R57wbj+CccIGRZ/5U7Q/4q6ePjXcm11sPSrzCYsa5eGBpw//F/eQufa4nc6qAaS4KdF3107uiVttc0k8ux07ibQvJuY7fiwd4OXZr0Q6gqaTYfVYQ6EIV9kL8FnQ9liGsknVLF8EoE7TlXI8IksZgFbH8sHCarF/1H2eAje9iOi9D42durj8jO83FfQMTAW4i0XTbsezu81h5TQw9htA1vWYdW8QvjGUdGnpIl9Lb44RmOoXfr+DjI9Ypla9xGXuGDKulw6P4lS7MDMokCfJhKLnQgzdVFwVsN8LVpvT0yGwLWvwa0qGVlWticsem3icW0NtOfPZkBUsC/rrbxLYy0w0pE3Y6byCudYxBHrmINY6MSkjJZpV4Z+7ere/sDqfKry182IKm/Z3shm4xApXzZTTacvrd2RMm2hoQlr68J+MT+ZbHckcDW41UllFCeuRQzlfpVosUaqTQp+E9xeBof0qY4hF7+mwT9Q54f4gLy5DMplOLs4DG9PDKrwFQE1AXXrSG6E59XbjY2RhwWIkCVAp7mOPIenkMwI4qisDcpCUgdzq9GwtJ 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)(136003)(376002)(39850400004)(396003)(346002)(366004)(451199015)(36756003)(86362001)(5660300002)(44832011)(2906002)(38100700002)(38350700002)(1076003)(186003)(2616005)(83380400001)(52116002)(6506007)(316002)(26005)(478600001)(6512007)(6916009)(6486002)(66946007)(66556008)(66476007)(41300700001)(4326008)(8936002)(6666004)(8676002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RHU5LzZQdDVNWjhHRlZUNVY2V3J1Z0N0b1dqbUVLRngwbzYvaDRjaEVOV2FZ?= =?utf-8?B?YU9naTdhVi9BYU02V2ZjVFljbzNuZFdtbDJYOFJtaDV1UzcwK04rTDJSK1Ru?= =?utf-8?B?UXdkVnVCWjlUbDlmY1U3dkRIRUZXekJMRE5ZWnFmRVc1TzA1WmVoV0FwK216?= =?utf-8?B?WVN4bko3Qkd0M3VocW54aHNoemxPUHF5RDJIbStZMXRhWkd6KzYweDQxTDcz?= =?utf-8?B?SlU5cHZlTmt1NXhReFZrU0V0dER1YUZjZWZzT1VWWnczOHFjU3RRM3EyNkRH?= =?utf-8?B?OFpia3Q5YnVRLytCRW9iN2RXbGsxVVVVeS9ZdzMwM3NaQ25PYUtZbHRnaUNB?= =?utf-8?B?VjRzS2N3a3dMSi9nNUFLQno5bVkrSnJvNUZJS2xFS25CSFpYSmJaSnpJMUlt?= =?utf-8?B?aTkyTWtoZDZJL1NvVWF6TGJYTlFTT2JydklnSnloRFpmSnF4bHFQcGVHR0JQ?= =?utf-8?B?RjVVTUE4WG5MbFpRZTlqOUVkTzU4VUZla25UWW8xTjVPOXNKeGxsZFVuY29q?= =?utf-8?B?U3ZFYUlvRC9ublYxT2dObTRtdzZTemQvajhEbWlKdGpGNU80RzFycHpCNjMy?= =?utf-8?B?b2tCQ1VHWFh2VnRHUEowRi83ZS9adWFoSC9LaVc0MDMwYjd5S2dZK2cwcVRK?= =?utf-8?B?ak1nRUZuNzZjVU5nWXJvSmhmWjRGRENIUXhUOStRSVNheGQ0S0ZiU1BmaWdz?= =?utf-8?B?WjVGSHFQNC9qZ2xpQW4zWFl2T2hJeXVGU1A1R3IvQkxrTmQ5MkdvbmoyNVBX?= =?utf-8?B?N3dJMWY5L0hYd0REaXlDdUdJV1hOK0NXUHkweGhMaVFlQW9xRHRXNFZmbmF5?= =?utf-8?B?WVNpNW9DTkZiRjl3UlN1TktGQkQ1M1lRMWNSNHZjZmtzK0dTNVVlRWdzK0U1?= =?utf-8?B?bk5TbithZkhjTjJXTklqVkZTc1ErU3NFZ1dqU0RqZ3RRRVpNWlg3aWVyaWFp?= =?utf-8?B?aUJPSnY4RlR0WDhzZXJiMWYyd0JtS3NDdEl5UC9ZMjRBeXJPaHlkd1Nsemoy?= =?utf-8?B?dVB1bnZUT2VQTHBza3ZsZk5KTTBhaGVENlRNQVJ6MlBrS1hDd3hFQW9rV014?= =?utf-8?B?dTNVV1JCRjBoam45WWdTMVB4Z2hxcnJJTEF0eTVVV3VUdWp0RFlpTEdtcEV5?= =?utf-8?B?OTljdEVxMmRaZEg1U0FISTYvdjlMYlpIcVpSZWZNR1B1WnJmaVNOZFd0cUxs?= =?utf-8?B?eFVxR0ZMQ1dPdGpwbHFYYUhka2g0aFF5dVQ3N1Zac3dEYkdldFlZczN4ZzEw?= =?utf-8?B?OFVzVjY3UFN6cGNTb0dGS3VQQmh4aG0va2JrOW1WazdnQjVjM0dnT09ob3BB?= =?utf-8?B?alQwRUdRN3Z4NS9ycXR1SnhSaC9zMlFkcExON2h6TXJaeGNHd0lLbE5zc0Rk?= =?utf-8?B?UmZFdTZQWksrTHhrUWlUWHJWSGZmWFIrNUd4Q2JHcWFlYTA5bnBCQnRYWUx5?= =?utf-8?B?YjB1QWZJK1gvL1A2bGRPVmtZbHZwVEIwelc0Qi9zaUVwN1oyK05wOC9ITHZR?= =?utf-8?B?WS9XbU5ISk9BNGpqTklLY2FvSXUvMDV2aUJoNkRFV3ArUmI4eDdRaURqN2gy?= =?utf-8?B?dy8yYTYrdCt3NU1Gc1oycFEwY3dUOXBrbWdkU3B4VUNGT1JTY3VadkpKenpE?= =?utf-8?B?eVMwcGR5bUhVbVdXNGhubnZYeFdXcmtORGorRVd1NDgwbFBVczBpUDJPS09C?= =?utf-8?B?WXEvb1R1a0srdEQ3dWR5RlBERkdIaTgzZ29RbWt1YTFNUllzRmhPQitDcEJD?= =?utf-8?B?NXJwZkpDd29SOEVlTlNWQXV3cDhrQ2VQaGFvcis4N2FKU0NuYkhsS0RuMWNt?= =?utf-8?B?S0J2c1VMZjQ4QlV4ei8zR1RLMnN0OHM2M285L0xDd1pZUE1rd1grWUZPVGNY?= =?utf-8?B?S25QdkdBc0lkY3JEUVFGTWdnOE0zdkdDcldncFhQT0R5a2dmcTJPTkliUGh5?= =?utf-8?B?RDVMbTJSR2VNYVFoOHp6eG1nT1VCUnFEcVc3eGJFTS9YSGdzRVNmanhvMjhl?= =?utf-8?B?OTNDa0YvRUNDRXIzTHZOL2lwam83YTRPd0h0N0g5TG1NcHptV2FnWjRwT01j?= =?utf-8?B?N0lsU2w3YU1UVkoxWitRL1phdXhudURjMmRxdExyS3F1WVVhbnhNOXB2a0Za?= =?utf-8?B?SkxyajhjSkNEMXlBTGpuUGJHMzNsTXA3S2pudWkraHdZZmgzajc2eXV4VkEz?= =?utf-8?B?TkE9PQ==?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: e086770f-661f-46b5-2e23-08dab0113647 X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2022 07:28:39.9163 (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: qZmUc3JH5HDsbigM+IJzMCNAgN6L4y2UuaYpviDNTv2waUptDffhSQ9epKSF5KuLMLb0zX2YepjZeqmPq6ln1aZKS9xObGO7XGTscMp3eQU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR08MB8653 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.0.109; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR02-AM5-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: 1665992686581100001 Move qmp_guest_set_user_password() from __linux__ condition to (__linux__ || __FreeBSD__) condition. Add command and arguments for password setting in FreeBSD. Reviewed-by: Konstantin Kostiuk Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Alexander Ivanov --- qga/commands-posix.c | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/qga/commands-posix.c b/qga/commands-posix.c index b0b467ebdb..e0ee0bea00 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 Sun May 12 22:34:17 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=1665992798; cv=pass; d=zohomail.com; s=zohoarc; b=V4RgJMFZ5l5lumjbtYHF2F+RjkosZLPdMMkDe4TInigbQmoaxBXiwZzCzg3J5KfjCHwTpp6u+3Hu8EKfXcJ6uL3eOHqffh5D6afdH2EwqEDFh+gEVclrZGxscs/uOLji9q2w+7pg6SKr10hU6BGYaZ99D7lSLBP/vYNq0BXBtBQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1665992798; 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=97GU8ZgrfrryHI07Vu27eApS8SJlI5utNtISknybh44=; b=i1JmH/anhxDTaibsC/BrDLCcxaOkIlGRooAcyUyaItxbpM2gQsd0+2OSNCgyq52OlIWoWcwVm2fO0KPUBIFIgV0rjrQZuocMIt9WVcn743SVOBuCcZTH0FECeaKN7dCDrjcMRkQ7icmi/OsjmxWahRzVLshLF5dLkISmpzPRAn8= 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 16659927981351020.6580071359389; Mon, 17 Oct 2022 00:46:38 -0700 (PDT) Received: from localhost ([::1]:44094 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1okKpY-0000O9-V6 for importer@patchew.org; Mon, 17 Oct 2022 03:46:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40872) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1okKYX-0004X1-Q2 for qemu-devel@nongnu.org; Mon, 17 Oct 2022 03:29:01 -0400 Received: from mail-eopbgr00109.outbound.protection.outlook.com ([40.107.0.109]:35648 helo=EUR02-AM5-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 1okKYT-0001HN-GO for qemu-devel@nongnu.org; Mon, 17 Oct 2022 03:29:00 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by GV2PR08MB8653.eurprd08.prod.outlook.com (2603:10a6:150:b9::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.26; Mon, 17 Oct 2022 07:28:40 +0000 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b]) by AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b%8]) with mapi id 15.20.5676.040; Mon, 17 Oct 2022 07:28:40 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=h8ChEJ/V/S9gCZf1D9s21HdTCAUepU76QDZy3Xnkcz08nHRA8ASmgGWSfDCo7nF8EmURoUWojad65MTrW4Tqxdu2Su+lR9H/3mf9drEcdkGa4gBRjIchG5x22wAku/ALmBqEqlZpnH9m2Z5fOKYNtcB0RA9YrRzo81WcSB1KS0wjGpBJvDCjfsTycPEMsGc4x6Zvdfff6pmpi4E6mtNeXRwG2547QU8yvmv2OIguK78fG6Yeiv4UwKprsQy/3fDxkUqhF6mJ4QSlDIa73JQ1vsWaG/ho6LnfsPvw1RfWCvpZPMoxcC9QEfS4DOl8JfRTcWrhBAfdLNrliJFtHzuoZA== 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=97GU8ZgrfrryHI07Vu27eApS8SJlI5utNtISknybh44=; b=DKfVDASIohZHeEI2Y1ikrzLkb3wZN0JBVTs3xY4qrJMDGCRjIFEU8ZVEu3EO1pGD0K/nTxk0hoyJw8OPo0zFL5Fwix0yZtryC+jFEOWakmEfhFM9xn0chVPctZO8TPqPhFog49AembTvUrPL5VTJo4seMgKS6WlYsNc3Wzd/pcnS2CnO/iQm56pcDbaLZ5Gy5b1mPP2U6k4XdDmrqOOK1s6UWvwksO2uOI3+AIw7c1XOs2xroujNrXcuIrZF9GJ1exKt30GZD9vZCr5g1HANIw222HmbO3ErzPV6KL0r1V6vVh5u03bPp77jo+WL//wk6OkqC7nuBUPpVu3TtofDTg== 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=97GU8ZgrfrryHI07Vu27eApS8SJlI5utNtISknybh44=; b=dh7LcoPy3NypZW2S++7naoDRqrxahc4Zn+dt34eJTzRL2+L2BDYFteoVE799T18WRIM287gZ4tn/IM6p+nWFTR4FfWwhh0hvf9mS1Vp6rSfEdYQhNbJl5GjR62GxZUcZDGciRyIceNZqISmwf/r0guKStgG1vH02fIvoEd9t84FRAxixJTXCBZojw7moujLc3X+N3rbE6JGFMu18XaYnEjsZS7rJwQca4ShU9b43x7jodZDZmLd8puxtBIvc6nz5xG9zo+iRDTqx6rMXYUbxFbfLm6Db6hgpXpz6cU1UCru5sSrEoVCO5u3d3R6YfhnBIyyY6Na81nzcyiV2qjFRlg== 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 v5 6/7] qga: Move HW address getting to a separate function Date: Mon, 17 Oct 2022 09:28:24 +0200 Message-Id: <20221017072825.72867-7-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221017072825.72867-1-alexander.ivanov@virtuozzo.com> References: <20221017072825.72867-1-alexander.ivanov@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0033.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1c::12) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|GV2PR08MB8653:EE_ X-MS-Office365-Filtering-Correlation-Id: 8bdaf1c4-b980-4e93-610e-08dab011369f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: J1KPBFfOgxiOvlwEzRJbqS6/+0mp0DhLod1WXU1Zt7+aDykS+aaFnuFzwyLXcHcv6j9TraWpcWCnx5SRBvhQXaUkHsmxmoS34Qz4yO/IBotbabZhNXrooHbHrxHY2FcCnX3qr+VHWw3uMNvbNtLDynCBHFkHiYO+RlA2fHjCdXV7+l9jmEoiaaGTBMfYfXGGJymOdyp29MtzFuxqXPcqCg6s0vji5ora4FYDTVU5nI9VNELT6HA6zubzvJr8FARnE7D44lxbjAmg5NEdy4W9S7TwA00MOP90HK5k5BJ2vU/K9NdtxmUZotHOuP3Y2RBt2lRymFNt6QLxn8kiHRoY/dZ18pu+DhOhKBapEs1c3pDTkxmNvCT4Vp88xPKMKfa1AnzQ6n7vbRWKk2TzUcAVDqLmsAcR/292H9rrsWBFvRiYjwNJx0Wl+Kwwwvb1nuoyE25jNRbdAX1xiY3XKOeEkqxZawUZQ7rkCgcm8/RHFLLarFJWEcnTogr33Qbuj/FPyaRefyS4Dbp3LA7nKm0i3aQWPjMfMd3pM/co28bHFLDAm+VAfXwVL1khZi1wubjYuJctmJWJoCPYaVFo5ILxAdV5QSLjRA6ktqncbbu4IXpQay0Cw9uWiytTJoChzS11YCn7thLmEM5ptxswtwaBFrpge5cmA1n4d6xtkVZ7smdBfUtPADKFJX8sdaz7+hoDLzINkXboTmJsYX70bURnGYdOYNu/JqnTmsOGRHpb77fvcRP+Hsdl6NVlKXldeoY3cAyR3poqZlSExysWI3gOJA== 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)(136003)(376002)(39850400004)(396003)(346002)(366004)(451199015)(36756003)(86362001)(5660300002)(44832011)(2906002)(38100700002)(38350700002)(1076003)(186003)(2616005)(83380400001)(52116002)(6506007)(316002)(26005)(478600001)(6512007)(6916009)(6486002)(66946007)(66556008)(66476007)(41300700001)(4326008)(8936002)(6666004)(8676002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Zk9YSHZtb2tTTmQ0bzZ2dXczWnJZMFpLanBtaU9FWE1KcHlQVmh3TFpzeWt0?= =?utf-8?B?ZHZCVVpqaTVrUWYxZXFYcDFuUzMzcnJ5VGlDeEJZZ0FHWXdFOEJhbndhUjBa?= =?utf-8?B?aUtwbzhDRWliV3RCWU50bmRpSUcyTU9MajVyOGxwanBxVzZSYmJYcGVrZ0t4?= =?utf-8?B?alBWdzNZd2pzSklRM3pvVmVvZjVXenhsWDYzL1pZTm5mQ3dBK0ZiaW5SZXAr?= =?utf-8?B?VE90ZnVCaGFhVVczRG9ueDNMaVpYdDRDakFZL0hOTnBNeHFGZkN3QVR4dTRV?= =?utf-8?B?b0l3V0htVTAxTlZ0eXdsQ0hxWGo0Q24yT0RTTDQzWjVFNkUrSjhqYm1lZzYv?= =?utf-8?B?RjQ1REFObFRhUlpGU0lBWkFsbFhQOEozQWR1SmFHZUpBVnZyS2RnNXdiOFpt?= =?utf-8?B?WjluK25WU1o0TjNqdy9zN3E1U2t5MGs2eGtUYmUzVUpWTGZxMnQ1VENBQkxG?= =?utf-8?B?UXpEWnNXSGZqanNVTmh6bHVuRTBvbVlqNVpJc0kvREMyZ3ZTRE0vL0NLcWd5?= =?utf-8?B?S3hudk9Xdjc2a0YrTkRhb3RvbkJuMHFRYks4a2JrSExuT2VPSzVGWFJGanFq?= =?utf-8?B?eDBCZkYvY2loK0dEMi9FM0ZjZGRyV2lOK040UHVXTzBlTkV0MkV3VTgzQXcv?= =?utf-8?B?b2JqT1U2MzVZVHNMdmJmVFFaQ1J0SzNkOE8zUWpvQVRoVmV3cXE1OXVjVkFn?= =?utf-8?B?RzFPV0FkNnZ5OWdDSzNkSGFQMEhnUTBJSEE3L2FnL1ZndkFoVmluV1FsNGpY?= =?utf-8?B?a252dGduQzZ6aGFnTmM4ODJ5SDJDYUJFK2ozbk80ZzFDWEhVRXI3MzJvc1ox?= =?utf-8?B?R0xxTmgzcGo3bVBUWVNYTjZWWkpvcmluUWdta0YrU1ZFVUNIR3VDRXRlelo4?= =?utf-8?B?ajA5TXVPeU5QWlVjSGdHYzNGYkhYVmtyV2FSQTJOWDR5TjBLS2c3S3JsSEE4?= =?utf-8?B?YmQ5RFhhUHg3Y0NiaVB3NXlFd3ZSaFJhKzJwOVpxVHFSd09SMmNmMkJlWG4x?= =?utf-8?B?TkhKZGU0SGF2TlAvL3FxNnZwMkVaTXAvS24rdHJiaTZZencvQ1RBMFM1Y2Ji?= =?utf-8?B?Qml3aElOam84RmZTVDVIQkEzTFhuanBmR3dya0g4U21jaDk4UjdlRzMxU0dz?= =?utf-8?B?MWhuVGxWUkxvZHlyWXBaZ2hUbDdmZDhDdlozU05PNzVyRm5yZ0NVQlFucTBp?= =?utf-8?B?cTVqRkFrYnFPMFh5RmdvTkh5d3R2cGtMNnYyeU80bVRBclBmRVlIR3h5SnVz?= =?utf-8?B?cVFsc29KWU5mN0F6QUZKOVNDeTdJazBxSUlSYWl2WEcycFAyVHhHZ0FGZVJN?= =?utf-8?B?S0VUREdMdGwwM3ZabHk0MTJlVTRaUFFjOGNmaCtGNUZKTDU2WW1HZXcySGJZ?= =?utf-8?B?SFN0WUFnaGNyZVJpQVZXM0RCR2ltRDdObThNdjhFNFRZT0VVUGh1MHA3bUJY?= =?utf-8?B?aTlHZzVmUUd2T0lwSksxOHdyOTV0cEpGZGVHclhLbldWNDlzTGxwNnFhUzFD?= =?utf-8?B?OFQ2N3hCejV2ZnJMS3pXUnRqNjJ3UjdPU1hsV0N3MVdWZjFzUFNTelVGQURQ?= =?utf-8?B?MGpGZWd4WDhhcGhCVjMzem1KRGFrVHRhc2cyN1NhNWhONnJ4dGtXMFd1UkZz?= =?utf-8?B?SUlqcGEweE9rUWp0R0NIM0tzSE1weDNOdGFjeUUzVU9jdXlZQU9YL0FoUjU4?= =?utf-8?B?YVFRcTFXcnBUemxoNWQ5Z1NJaWlRWU9BeXZHVjlRMm1XbHpUWlBrUmVVM21I?= =?utf-8?B?TGZiS3RDdnU3czBlY2kyWFo4Tm5aVXlIcHI5c2E0cWwxL2JmTnVGTHJaVGNm?= =?utf-8?B?OEhqeVM2MmUxeExiOG1Kd3hpMHcxQk5Wei9CcXdGWEZWcVdqbHhjY3ZIYmZv?= =?utf-8?B?dVZoOGtudDdZbHBaaGJRa0lFcXpGV1J2b3Y2T3RlZHpwa25WcGZKa010ajBz?= =?utf-8?B?UHN6OTJLdW9NNG92QldLWTYrcVcrZ1JRQUpoQkxLV3hTN0d5NGs4NFdIUkdx?= =?utf-8?B?bndiQlYxYTh4T0plWSt5Zkt4VjVKczhLTWhSajQ5ZVBlRy9aTkx4aU1WWGo5?= =?utf-8?B?dUk3dTNsME1CbEVCTWZja3pMQzg3ZnI2OTBaWGR4NEJDTkY4QzliRnVSRmNm?= =?utf-8?B?OStVcUVnNEpRb3hWV1VBeWs4bUROdjlONXllMnM1dXRTazBBZGhlVTgxNXRh?= =?utf-8?B?REE9PQ==?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8bdaf1c4-b980-4e93-610e-08dab011369f X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2022 07:28:40.4787 (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: vCojPqbswj8PvAf9b9JQR4J/EfepunLP8LOd/xcOWs6gwJPwIXD7HqN6MikEzgUcxuqODvg3IvCOs02JW5QIHioMole1G3t4alGgu2qanG0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR08MB8653 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.0.109; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR02-AM5-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: 1665992798456100002 In the next patch FreeBSD support for guest-network-get-interfaces will be added. Previously move Linux-specific code of HW address getting to a separate functions and add a dumb function to commands-bsd.c. Reviewed-by: Konstantin Kostiuk Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Alexander Ivanov --- qga/commands-bsd.c | 16 +++++++ qga/commands-common.h | 6 +++ qga/commands-posix.c | 98 ++++++++++++++++++++++++------------------- 3 files changed, 78 insertions(+), 42 deletions(-) diff --git a/qga/commands-bsd.c b/qga/commands-bsd.c index ca06692179..ebf0fb8b0f 100644 --- a/qga/commands-bsd.c +++ b/qga/commands-bsd.c @@ -167,3 +167,19 @@ GuestCpuStatsList *qmp_guest_get_cpustats(Error **errp) return NULL; } #endif /* CONFIG_FSFREEZE */ + +#ifdef HAVE_GETIFADDRS +/* + * Fill "buf" with MAC address by ifaddrs. Pointer buf must point to a + * buffer with ETHER_ADDR_LEN length at least. + * + * Returns false in case of an error, otherwise true. "obtained" arguument + * is true if a MAC address was obtained successful, otherwise false. + */ +bool guest_get_hw_addr(struct ifaddrs *ifa, unsigned char *buf, + bool *obtained, Error **errp) +{ + *obtained =3D false; + return true; +} +#endif /* HAVE_GETIFADDRS */ diff --git a/qga/commands-common.h b/qga/commands-common.h index d0583c6ddb..8c1c56aac9 100644 --- a/qga/commands-common.h +++ b/qga/commands-common.h @@ -56,6 +56,12 @@ int64_t qmp_guest_fsfreeze_do_freeze_list(bool has_mount= points, int qmp_guest_fsfreeze_do_thaw(Error **errp); #endif /* CONFIG_FSFREEZE */ =20 +#ifdef HAVE_GETIFADDRS +#include +bool guest_get_hw_addr(struct ifaddrs *ifa, unsigned char *buf, + bool *obtained, Error **errp); +#endif + typedef struct GuestFileHandle GuestFileHandle; =20 GuestFileHandle *guest_file_handle_find(int64_t id, Error **errp); diff --git a/qga/commands-posix.c b/qga/commands-posix.c index e0ee0bea00..32493d6383 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -41,20 +41,12 @@ #endif #endif =20 -#ifdef __FreeBSD__ -/* - * The code under HAVE_GETIFADDRS condition can't be compiled in FreeBSD. - * Fix it in one of the following patches. - */ -#undef HAVE_GETIFADDRS -#endif - #ifdef HAVE_GETIFADDRS #include #include #include +#include #include -#include #ifdef CONFIG_SOLARIS #include #endif @@ -2889,6 +2881,57 @@ static int guest_get_network_stats(const char *name, return -1; } =20 +#ifndef __FreeBSD__ +/* + * Fill "buf" with MAC address by ifaddrs. Pointer buf must point to a + * buffer with ETHER_ADDR_LEN length at least. + * + * Returns false in case of an error, otherwise true. "obtained" argument + * is true if a MAC address was obtained successful, otherwise false. + */ +bool guest_get_hw_addr(struct ifaddrs *ifa, unsigned char *buf, + bool *obtained, Error **errp) +{ + struct ifreq ifr; + int sock; + + *obtained =3D false; + + /* we haven't obtained HW address yet */ + sock =3D socket(PF_INET, SOCK_STREAM, 0); + if (sock =3D=3D -1) { + error_setg_errno(errp, errno, "failed to create socket"); + return false; + } + + memset(&ifr, 0, sizeof(ifr)); + pstrcpy(ifr.ifr_name, IF_NAMESIZE, ifa->ifa_name); + if (ioctl(sock, SIOCGIFHWADDR, &ifr) =3D=3D -1) { + /* + * We can't get the hw addr of this interface, but that's not a + * fatal error. + */ + if (errno =3D=3D EADDRNOTAVAIL) { + /* The interface doesn't have a hw addr (e.g. loopback). */ + g_debug("failed to get MAC address of %s: %s", + ifa->ifa_name, strerror(errno)); + } else{ + g_warning("failed to get MAC address of %s: %s", + ifa->ifa_name, strerror(errno)); + } + } else { +#ifdef CONFIG_SOLARIS + memcpy(buf, &ifr.ifr_addr.sa_data, ETHER_ADDR_LEN); +#else + memcpy(buf, &ifr.ifr_hwaddr.sa_data, ETHER_ADDR_LEN); +#endif + *obtained =3D true; + } + close(sock); + return true; +} +#endif /* __FreeBSD__ */ + /* * Build information about guest interfaces */ @@ -2909,9 +2952,8 @@ GuestNetworkInterfaceList *qmp_guest_network_get_inte= rfaces(Error **errp) GuestNetworkInterfaceStat *interface_stat =3D NULL; char addr4[INET_ADDRSTRLEN]; char addr6[INET6_ADDRSTRLEN]; - int sock; - struct ifreq ifr; - unsigned char *mac_addr; + unsigned char mac_addr[ETHER_ADDR_LEN]; + bool obtained; void *p; =20 g_debug("Processing %s interface", ifa->ifa_name); @@ -2926,45 +2968,17 @@ GuestNetworkInterfaceList *qmp_guest_network_get_in= terfaces(Error **errp) } =20 if (!info->has_hardware_address) { - /* we haven't obtained HW address yet */ - sock =3D socket(PF_INET, SOCK_STREAM, 0); - if (sock =3D=3D -1) { - error_setg_errno(errp, errno, "failed to create socket"); + if (!guest_get_hw_addr(ifa, mac_addr, &obtained, errp)) { goto error; } - - memset(&ifr, 0, sizeof(ifr)); - pstrcpy(ifr.ifr_name, IF_NAMESIZE, info->name); - if (ioctl(sock, SIOCGIFHWADDR, &ifr) =3D=3D -1) { - /* - * We can't get the hw addr of this interface, but that's = not a - * fatal error. Don't set info->hardware_address, but keep - * going. - */ - if (errno =3D=3D EADDRNOTAVAIL) { - /* The interface doesn't have a hw addr (e.g. loopback= ). */ - g_debug("failed to get MAC address of %s: %s", - ifa->ifa_name, strerror(errno)); - } else{ - g_warning("failed to get MAC address of %s: %s", - ifa->ifa_name, strerror(errno)); - } - - } else { -#ifdef CONFIG_SOLARIS - mac_addr =3D (unsigned char *) &ifr.ifr_addr.sa_data; -#else - mac_addr =3D (unsigned char *) &ifr.ifr_hwaddr.sa_data; -#endif + if (obtained) { info->hardware_address =3D g_strdup_printf("%02x:%02x:%02x:%02x:%02x:%02x", (int) mac_addr[0], (int) mac_addr[1], (int) mac_addr[2], (int) mac_addr[3], (int) mac_addr[4], (int) mac_addr[5]); - info->has_hardware_address =3D true; } - close(sock); } =20 if (ifa->ifa_addr && --=20 2.34.1 From nobody Sun May 12 22:34:17 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=1665992882; cv=pass; d=zohomail.com; s=zohoarc; b=U8kMbtN5L2lr4b2qz8PmejwHPGUd0aoaMYJIbAPNuDFhdFyvGZy8MzYE5SUDkgEgRT4Ph/0/B7VvntbmoxcQg/+b0UksDBy//XIgE+NToXBnMcR6OS5kKwszQHoO98zuT/x5P4t1Vj3sSZvCOYv18wHCRxdie/DEsJ2iYAg2+E4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1665992882; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=gxxmbxAcZk965Xpx44CaaKqYjArE71BENpKHlF/1fPc=; b=i74mvIz6FPGXt5QAqmbpl2FrJAvQjMv3jHwD2QObiRnTs250o4FLT9XjtjfKq1cIG79x0Af2q7bumxVpRTQB9fwfXiCO1+Jpj6YnEnfXa2V19gegrXCVPvua0QzMd7XIlhK4CPq1zBclCIYMJykSBd7IwmynU2Pou1YUu33Cd4E= 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 1665992882180349.6230170454294; Mon, 17 Oct 2022 00:48:02 -0700 (PDT) Received: from localhost ([::1]:42498 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1okKqt-0002lC-01 for importer@patchew.org; Mon, 17 Oct 2022 03:48:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40876) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1okKYZ-0004cF-3s for qemu-devel@nongnu.org; Mon, 17 Oct 2022 03:29:03 -0400 Received: from mail-eopbgr00109.outbound.protection.outlook.com ([40.107.0.109]:35648 helo=EUR02-AM5-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 1okKYX-0001HN-Eg for qemu-devel@nongnu.org; Mon, 17 Oct 2022 03:29:02 -0400 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by GV2PR08MB8653.eurprd08.prod.outlook.com (2603:10a6:150:b9::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.26; Mon, 17 Oct 2022 07:28:41 +0000 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b]) by AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::5174:25c7:6df8:741b%8]) with mapi id 15.20.5676.040; Mon, 17 Oct 2022 07:28:41 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NUopEGLYtu4G1EHg2EXTR8hoHihG3cmga5/kyC9Tk73SHH7VkVc+8a9I3P0miKw0NE+jhtAvfAho63WmibojUm/iEGEpaYD+jkDqlmkv633ZQZt5sczqIciLFMRdhxnVwZmGVxB+vsmtyKNbgC5uobLWfsc+dk6gW5iWfxbCL6DejWNcVQzqINfI6/vc8IR3LKcNgk6zuv3I6/vu9LZNIqbNGcGVyWtL0kXaPpfO6kTun+jaMfW+PwwosG81b62qomzeQggA1yJ+xcIPs/efVRLg9jaqDPX1XHIrWlkYuJmjXaiVGVXAraC3wuNXI60w9W7y2+lfNxwyTeDthhnLdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=gxxmbxAcZk965Xpx44CaaKqYjArE71BENpKHlF/1fPc=; b=V3Mx2EqfRc9oeboLAmpMnogS7QgWa/LcbDHfOxhZ284zivR23m5G60iqm9fG5Spt4acIJK8Nwij8N6tSylXpz9FGJ4IZ1ExsGiHU58Rxc6eONVW+6W9AmX/lt8aieZzxqG8acBmgo9g5l57uOVuq9U+/6reW1LsPcFa80vjpUOKn2jV0uypx1IZQJgQ/bvNAr2qUbJIC6Seo2SxHgAOfnn9leUJVzrjGnvnBlqyZexLVQQsXfACSfMnwaI7dACqRf4qcg7tJ8SeZP98eh8rR0loGF5PUwaONiV//gVCOzNzSDWUIU3yivB/17Xt8Pa7/ukOpLD7/lH5G2FYMokXfFQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gxxmbxAcZk965Xpx44CaaKqYjArE71BENpKHlF/1fPc=; b=TyMm27s3TjLZ/lqnQU6xxmLO3uqKBSfN8yo3/dxJxn+Ftnso+xsdrPQ2bV0ZzjlTZKZrd/KGDkWCYa/Bi6f9Ct/vsskw8OFfj9IIVrVhVcMaLLjLpoKcYk+y8wgxnwZbBVZQgJl6+ukA1NgTRCGw24su+3BrZsswbEcH3JsnNx2SLjfFiZSWo9ORpZha1kMN3G2Xev3/QkzfAbFt+M6BzezDslGlxp66skQRfz93p/DFIKY4ShBLmjzpM3zyzAM8vpkIVQj+LlBbHlV/F38hvPExwFuRHlhMQP8NZRg1IT+OuQJcRGfyi4ydNFd8DTe3bBZlBFirR9QNwAZzJ+Bgkw== 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 v5 7/7] qga: Add HW address getting for FreeBSD Date: Mon, 17 Oct 2022 09:28:25 +0200 Message-Id: <20221017072825.72867-8-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221017072825.72867-1-alexander.ivanov@virtuozzo.com> References: <20221017072825.72867-1-alexander.ivanov@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0033.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1c::12) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|GV2PR08MB8653:EE_ X-MS-Office365-Filtering-Correlation-Id: 409558ea-1e7c-4368-cf84-08dab01136f2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: wA8kvoViXqK7n5cAKlQ0GgM4Ke/xl7psWb5aSBfCCVZYSMEojNdsQiPRVGuUNn60s4v9eK+YV8a5fu1SlVAP9CtZOhke03V5hpXoylWK6TbGc+67RIctHj7vzwYx8ucScp0RbttFJnmJPJo+891e83apXlPyGOMIhia2x/LvMDah713WKPl3Mg4VvVoXz27lnlWiQ5rQr75dy4hKbMh2CMTRpLa0Q01jrKXihpZ0zEfvgOaGjJa1SODFCr/lED6SGs8JK0c3mrfY6D7CYCjUtTS6Gk2y1LfBZiX6e0PtQhPAaYZq1kbIKmFunXcP3NiEgvmcX3MccE+bT9SI65foUDUBtsvLf/yKmyk7qaH+9plJLRP42cGLyBTGYIHjCjvg31dwgjFAcEUaaogkxgTZzx4KAJah2LKjwgn0a/nFkEDJaFqjNv/PugfoDypfDjpDD50OYTnO/TW3wWO30CFFZ+lIhJ46r+zX1T9rrQTAA1Wg/3xBwqBoyuK9cOG+qhA1okJ4STuHO5tudbJXJczxQHkM6fyx3xO+bC5M3K6k85fpM2FMe2SH5NiXBXSCxWFtafz4OfkAZW65qpM7m3WDZmeM+GSwPMdPhP+VhOdMEn9u6Iven6ELq9xU3rFSabBXNRtxNvdhRdU+yX+hGz2M9PjAIAHj0SItjfN4ZxY9e2QQMlK6XxYN9TB+lUAIqy3cYpmgJT0oSNKbQ5U+gIOaVY1PHX0CoeByuepEg/ix0yROnD1Bp22TwEUo8i7K+BF4n2Ii9/QwdoyXyAstfKRo1w== 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)(136003)(376002)(39850400004)(396003)(346002)(366004)(451199015)(36756003)(86362001)(5660300002)(44832011)(2906002)(38100700002)(38350700002)(1076003)(186003)(2616005)(52116002)(6506007)(316002)(26005)(478600001)(6512007)(6916009)(6486002)(66946007)(66556008)(66476007)(41300700001)(4326008)(8936002)(6666004)(8676002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?U0pWRXpseDhjb3FMSXJQTXJyMStXY2IvT3lqZzdFRm5HVityWTNEb1c1YUx2?= =?utf-8?B?bE9ubTdvdVp3cnpML1MvU1k1c1hNdk1uRlFFd3pCbVpRZHpsWlJ1NEpXVnNn?= =?utf-8?B?MjZtM0haSG1UVldKeDB1MFE0QWY1d3ZqM213Q0JxVU1vSzREeThQTnVxS3BS?= =?utf-8?B?WnRURVdGSnlsTXB1UUpHVEoybnFTclZ1blIwc2MrV2VyT1dIa2RqRWt5MVlX?= =?utf-8?B?a1p6Q2V5VTFSdXo0azQxV05VU1UrSWpvME10eGNVanpVRjE1T2xIcXdTNmV3?= =?utf-8?B?Y2FIN3QyQVppODM4SkxUTlZObmF1OGFxb2MzclFJTy9SSWN2K1I1Rmkxbk5M?= =?utf-8?B?azgyU3g0b3ZqcVNEQXlkays4dUlrajBCMisyWVJaRitPT1pDUTdrbzJtTWEx?= =?utf-8?B?c2RpNGhiZGhlVi9IYlBUNzYyNHNrMnpCZVBpRzdsWUxvVjNXTzhSODNvNmV2?= =?utf-8?B?aVQvaUR1QkJlOGJ3eHVuK295OUIwK3VPQVcxcTFDZWY4WWRBdDV1bHhQbWE4?= =?utf-8?B?ODdQTCt3b0NSR1MzaGtKa1ExNHVvY0JVRGs0M0NSalZzSEhwa3NlT2RudnlZ?= =?utf-8?B?bmQzQzQ2cFJWSmV2bHpGWURmcXh2MzE3UFV1VGVYTlVVTTR3ZGhpMFpNaEJE?= =?utf-8?B?QkxVUm9GbmlLYjNKNnNtR2tpV3lLUDJnM0U2dWl6VThqRG43RVc2ZnZIQUg1?= =?utf-8?B?TkNHam9maUhtQXhvSk4rdEhxSnd6WXVnVlkwQ2twZE03WDU0ZmRlT2ZwbWdE?= =?utf-8?B?T0UxZzNVUUZhK3E0ekVJSXJRcjFZVXNqMjVyT1AyU3pOdkthU1kzNXpMM3hl?= =?utf-8?B?VnFCNUdDcnVkY09ha2pnYlA0NytQeFZENTJTWGtzM0thTDRnd1BPWjJMNVo0?= =?utf-8?B?akJBWHgyWG96OVVzNmFxZHFOd0J2SEtRbWVUdytmN1QxTXd1MGtPOUtRU2ZJ?= =?utf-8?B?TGNyZEtYOExLeW9oNnJ5RGpYSy9HWWExWGxhNGsvV3FKYXVJWUlaTEFoRjZn?= =?utf-8?B?VkRSSG5WbVNmTWRSb3F6aFZJekp6WllUWTFINmxPdjZZaERWZW0zU0ZCa0pj?= =?utf-8?B?MTBqOVJ2d0hiSHh5N0dLUnEvUE82QnJUbHhZcGNmL2xzUWpYbjRqRlAvOEty?= =?utf-8?B?Si9DWmRqN2craC9ia3AraWtIUlBpUHBpNFNtV3pPVVRGM2N0NUx2SFlmbm5z?= =?utf-8?B?WUhXUDcvcWg5T0ZOUUs5eVBmSFlFcko0bnBOS25RRHROaCtLZ0I0ekk2OE5V?= =?utf-8?B?cUYvclhHZEFKbzJhckNtRmpoZEc4Y3M0bktteHdpdG0zc29DL2pUd0Q2WTZX?= =?utf-8?B?YTZsdW9Mb2lDYnlqYnZpQ0ZnNndZMkh6VnRiYytJUk9BOC82T0htZm5MbjRl?= =?utf-8?B?NlRYSjdFN1MvQ2ZMZ0huakw1SE5qc1ZXRVBDM3paYnF2aHdoeElyb3ZiRk5Z?= =?utf-8?B?bHZCQ2hDN2ZpWFdtT1R0TGsxUDcwc2xyZ3hMN2hVUXB3ZWQ3SXlBdFhMUFRr?= =?utf-8?B?S3VzVmdLZ2oyR29wV2hYNzMzd2NTVFhBc0w5WUUrNmEvcUxKb1pRNDB0M0pF?= =?utf-8?B?akxLUk01YXdWYi9mRE5tWlFnaUY3VEJBYytPemtqUFVxYzVhMmV6MVJUU043?= =?utf-8?B?R2ZITk1mTHNkd3V3SVdsVzdMZFovbHVWWlg4eWhLTDRyYW0wWm03eHJkQ1lh?= =?utf-8?B?RkNwNk9rRW5UWWNRTmFrM2RCcUxvN3MzL2J0bHdYQ3lGYy9xMGFuR253T29m?= =?utf-8?B?UHA2U2N2bllNY0lJYmtvVDllSlpUc1dUUGw0bUw5S1Rib3JWdm5qc25qNzQx?= =?utf-8?B?QzBHV1pNbkhUN0FudXBuekxUN2ZCVEwzMk1SM29ERGwrMjJlUVY1dnc2VEhu?= =?utf-8?B?NVI5UmhlaDI4U2kxSDZMZ1VtQlFMZlVtOUJwSU43SlM1TTBDYUNlZzNaVU5l?= =?utf-8?B?S3I3WXQ3TTYxcGNmbE4xTVNzZS9Yakd4SEhRRmVzb0s1UXlZYkJPZCtlVVJI?= =?utf-8?B?ZFF4SzR0bUQ0YXhsUTZoSzllVVJTbVJqWk5SbnlaVjhoWGJuWTI0OGlldS92?= =?utf-8?B?dkJaTjl3d1pvelh0dXhZeEZDMjFYVGJ0SDVEak1kdnE4cVNTcUd6NDgyTTN0?= =?utf-8?B?azczU0l2Nm55M3ZWQXljTkZVYS9BODlPL0t3OUxVd1ZpVmg1bzQvbHV6YkNi?= =?utf-8?B?UUE9PQ==?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 409558ea-1e7c-4368-cf84-08dab01136f2 X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2022 07:28:41.3079 (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: 9RvBeajlmyWEb4hmSPA0R2DBAs+l+0EifiWSOA4iG3F243EHztnDttpE1clVqmnLBuHzoVRYEJu7DtmrxUyenBv1Z1MCBM4XRx/m+GvftDk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR08MB8653 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.0.109; envelope-from=alexander.ivanov@virtuozzo.com; helo=EUR02-AM5-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: 1665992882900100001 Replace a dumb function in commands-bsd.c by the code of HW address getting. Reviewed-by: Konstantin Kostiuk Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Alexander Ivanov --- qga/commands-bsd.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/qga/commands-bsd.c b/qga/commands-bsd.c index ebf0fb8b0f..15cade2d4c 100644 --- a/qga/commands-bsd.c +++ b/qga/commands-bsd.c @@ -20,6 +20,8 @@ #include #include #include +#include +#include #include =20 #if defined(CONFIG_FSFREEZE) || defined(CONFIG_FSTRIM) @@ -179,7 +181,20 @@ GuestCpuStatsList *qmp_guest_get_cpustats(Error **errp) bool guest_get_hw_addr(struct ifaddrs *ifa, unsigned char *buf, bool *obtained, Error **errp) { + struct sockaddr_dl *sdp; + *obtained =3D false; + + if (ifa->ifa_addr->sa_family !=3D AF_LINK) { + /* We can get HW address only for AF_LINK family. */ + g_debug("failed to get MAC address of %s", ifa->ifa_name); + return true; + } + + sdp =3D (struct sockaddr_dl *)ifa->ifa_addr; + memcpy(buf, sdp->sdl_data + sdp->sdl_nlen, ETHER_ADDR_LEN); + *obtained =3D true; + return true; } #endif /* HAVE_GETIFADDRS */ --=20 2.34.1