From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id D7FB9D811B0 for ; Mon, 8 Jan 2024 14:02:57 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=/tX4kMQ2Ii4D83NyKOYw7uYDzqo4gDJkM05jCRhpIyI=; c=relaxed/simple; d=groups.io; h=ARC-Seal:ARC-Message-Signature:ARC-Authentication-Results:From:To:CC:Subject:Thread-Topic:Thread-Index:Date:Message-ID:References:In-Reply-To:Accept-Language:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type:Content-Transfer-Encoding; s=20140610; t=1704722576; v=1; b=sv1vHPDmjwMNYUBeD+gGzYupsp5QZNYqL1WOSQ8/TqOc+piHwGYrNhyXzcIIpjZw30lsdaQ7 P876XI+d/iBtNy7PFslqSeRnt/rVTD1csf/jXawZraqSF/5SINVPf+hjz23YyjLd87kgMnx6Ukm Z6iOe3cdwHfI7QSlzVSjAW08= X-Received: by 127.0.0.2 with SMTP id X9sGYY7687511xep0AN3JWnb; Mon, 08 Jan 2024 06:02:56 -0800 X-Received: from NAM10-DM6-obe.outbound.protection.outlook.com (NAM10-DM6-obe.outbound.protection.outlook.com [40.107.93.42]) by mx.groups.io with SMTP id smtpd.web11.7195.1704722575684572813 for ; Mon, 08 Jan 2024 06:02:55 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XbKM25w1OxODil3eEk8YnQ0nN3daQQiMk8+CZEzoZfPjVdFrk6+1JuRLjqQ3tQE3vo87KR2orNX/dctsS4U5wcz6LaVsHejz/O3BNxIr/q3dMVHmlE0nNQtKj+T3c9iZV2fv4cjmmKX/xCdpWLG2+dTnpJ416/D4MnvqiM5BxiIy4f9gPplXSA6NsznlYW3i368BrzxPqUBkHlKeexdYX8OYmRZLxUnwFS7drAzszYYXer5/S4AAw9Nv85REmcvo6k5pHjNvzu55whapfx2CjLqoMeUJTADOvlqaLbNnrpFQNW7v+Sy+slSmnxTNzZCOuT4EstGf4OavZewjcTKSlg== 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=p1cfDE55b8N4wzdezt/CIeLDnjOt8LASnVHqRiwZHMY=; b=oC9BgLqTZhVmOdkV10xwiiBpgqKZBEvC/D0eQKq61l44jn+e3OM48WioEisLHaBoYScMPUi5OCcVT7af1NPEszM58FiSYv99mr9ydiv7LVdl0Xe97h86dTDjwN367aI9llBa7kKStfr+tk5oKzhvaTrakmvr90mn7RYPnlxMGHijV4kDwc7SXofk57IhfFhvPLcXJkBXgAt1ezozTIbaLc0lf6rLOyuGKnq2lMM8iNATVY4ndpZ1cctPxXd0VDqtbccYkk2aPQV7cqqUHkdd70EzQGt4tL9WsPNOEM7CSAZaS5tWQL6AdCAS6hX0dWJGkSIbPBcefMztx4wnuJ+vCw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none X-Received: from MW4PR12MB7031.namprd12.prod.outlook.com (2603:10b6:303:1ef::6) by MW3PR12MB4523.namprd12.prod.outlook.com (2603:10b6:303:5b::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7159.23; Mon, 8 Jan 2024 14:02:52 +0000 X-Received: from MW4PR12MB7031.namprd12.prod.outlook.com ([fe80::a78e:602e:415c:4cb4]) by MW4PR12MB7031.namprd12.prod.outlook.com ([fe80::a78e:602e:415c:4cb4%3]) with mapi id 15.20.7159.020; Mon, 8 Jan 2024 14:02:52 +0000 From: "Nickle Wang via groups.io" To: "abner.chang@amd.com" , "devel@edk2.groups.io" CC: Igor Kulchytskyy Subject: Re: [edk2-devel] [PATCH V2 4/6] RedfishPkg/RedfishRestExDxe: Implement EDKII_HTTP_CALLBACK_PROTOCOL Thread-Topic: [PATCH V2 4/6] RedfishPkg/RedfishRestExDxe: Implement EDKII_HTTP_CALLBACK_PROTOCOL Thread-Index: AQHaQW1NC4Pc6vJ2nUOue9BXKQ1nS7DP89xA Date: Mon, 8 Jan 2024 14:02:52 +0000 Message-ID: References: <20240107132701.302-1-abner.chang@amd.com> <20240107132701.302-5-abner.chang@amd.com> In-Reply-To: <20240107132701.302-5-abner.chang@amd.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW4PR12MB7031:EE_|MW3PR12MB4523:EE_ x-ms-office365-filtering-correlation-id: acc35748-9548-4af9-8179-08dc1052817e x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam-message-info: sMddDmo63OKhVGF30I2B0WZ8Tpm5byrxtWmXivs+WxCyCBlWdTtHU6IPKAioMBeqn4Vt6/KuXUDZ4+mcHi5yfeYlbUNBJsW/UJs6trh/gJQMDpbH5IHpPxrxwaez68DO4lH92TkoFEUcH5usc9o16x/EuvwLO4hkGaD4Birc4saz/hlBIKZlO1UZaS929sbE8gsPTpjIHBdn1flml1jluutGRjGEC0/uz+zBFkGSaFVt941xP7VgnnC2G75R8F0RbFrocY2m5f58Or0wsr3Y60OsuvAUrso8pz2Qtnih2WztlEym1RpgVDVpDBQJceUDBv1LeWSBKd3PkmZTrBDOI3Z0hh8WweSRQq5QFaePDDv+dgNnyHRMB3SXBQXraS9etmWmI8NigKNA7K/Cgvvog3/yYvYKpzMSoUeXccGSOp+21q+vDdQNxQGrgturwBgvMz8gVPZenaIUUF3yGv53XO8Mfnci0G6JncnnXNlIP/exQrdBBnOyW3bz64ELaOU/MBd+vQq7djv/4k9yXmAeJfJbsskM8qQ04yrTSDdxwlvdehJqN2evvZFbgap8KqFNLdgbXXrcvnSrZM6TnOVAxW3PY4NLJO95TKuQhrcmuEhTXSIVZcC/ucqw/cIA2xmlg5uZ0ri0XQ/ybWZ4kLslUQSt2d0UmpNzVTCl00ybIFM= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?apf7EcT+HjdkD/d0vsh1YAEF3ZNGNMAUolda1DFCeaeQUpWZoZMo8rWfMQpN?= =?us-ascii?Q?CY68L7Tzi3Rz4BUxnnPc04CtUECZ9oU37QWirW03xV2wKN1tzGIBw73WJIoH?= =?us-ascii?Q?02dbeLhLR37ylOxuCx0lDgQBrK2ShEC5ijDHM9jRLRl9wEf26u9+iryaw8r4?= =?us-ascii?Q?hmKJWWLc4SGNXO7HdWhsAw62Fmq6k1A+MDTXaiIuIggxLWPYWGPUTwlHmorB?= =?us-ascii?Q?/1cdn/fYe4I/L3tHlOMM3yYQosv0q3XbFWATmT+Y+ZKw1WzByPLVluDfQxKm?= =?us-ascii?Q?Y5G8u+vt+Q5TF0hiuh13/+tyj+ZymeJd3q7ramWtVH14kdqCuEVxBcqeHYAb?= =?us-ascii?Q?LoAzXz+6T1dkWY90Ux2zx0MOv8oLElEBdQUQJCzSTvG+l5rX2PUZGtbJcLYC?= =?us-ascii?Q?UKnIYJ/jMOU2M+Bku33UX4NprT3wpTCXjJ9jbh1LPtIqlc0TE2eKeFtNL8pr?= =?us-ascii?Q?c8fDqKF0fJ2gvJtcMz7DrFLwCazc94aEAun6o6UTO/akn3vGd6ksAbjPyo9g?= =?us-ascii?Q?9ay6RaYyitDwkobh+dB6oJhM++icIxiC/iL6g2RVEkdsvUbnf56/8UKg3HvJ?= =?us-ascii?Q?aup3lTWU/3QnABy5TdiiTNu79qhGYbDIe24+4WEZVnDWKcE0aVyze1Pk256x?= =?us-ascii?Q?aqm97nlTKjw4aNyhV8VsiIdQ3PBd6nmMuuyGXS+63Tae3fPSb7NE88vbt458?= =?us-ascii?Q?j9GFyFo7Oki7m4b+urpapC4OS3829kclI8x55BKzdfU+zAQ7knZd+ffJMiTF?= =?us-ascii?Q?D1FHIrBKCyWGkcAgJNwbuPBWjwLa8T8kxPURbIEfqQLDw/dTXRdDD1bPPlEb?= =?us-ascii?Q?xP1wKfCDioxQz9oQdaXodW8xzZJEVE3sN+S43iMbD/oTRmCaWDhc/aEGem0p?= =?us-ascii?Q?ZnX8hpqtqJWUCVBgOn2NkjAcjUShuah296g/HX3qhceqnPnG2aHIqy5o+zn0?= =?us-ascii?Q?mwuXf/P5mt4zy3HO6bJlSbZil8SL77oG0Hcr7SuVAyyA/CazNfF/cBrzMsSs?= =?us-ascii?Q?IhUFWKWq99/D9ANEaI8b1YSFeWc2O6o3ZB2a+/O1GZOcaU/nOpsENnf4fqFw?= =?us-ascii?Q?to1ggrN5MyjhkYy10xEhApc0Wkai97V5L/UBkJ9reQ5Am6F6Y4OqyOThO45I?= =?us-ascii?Q?DB1yEpJnB2svO420/BQyq+kwyknoq4uePirAJA+KVnrIDxOZxpHQYdPX0lGS?= =?us-ascii?Q?/0HzTorYh5WLJWh0AeEZtnd2Vjk4gup2bnFZFDxrO0bzzDmWBzU6RGWQiry7?= =?us-ascii?Q?n9zZrrpkWFOKcUtIIy3Ttx9KrXn5EcDpiYcvPo1s9ujRRSMEy9ZiFb7gJoz5?= =?us-ascii?Q?4AsHKQ6diCEwPsvwE0vCPYOlolCufwErtCP9QJNKnhpsJC3uyw0znlW7x5RC?= =?us-ascii?Q?qOBourTt8ggopUxLR+3cz7smixPJ5aPN7aG2gEbbjhkKpZjk2lMmgGSOvhSV?= =?us-ascii?Q?FCM48xmrpB/wljEIdHtgq0HCYWNVGM1SlKZFw7aadxEDo2hulMK5/ehTGuow?= =?us-ascii?Q?CgIapU46opfYeCZMnJ8jMYyXOzCSboZmdn4TLO8uNgc4qgbHt4EdZiUIH7aH?= =?us-ascii?Q?orw+Y2vuastErsTrsbFz5DBFk64TxedzquqLt8D0FwIlAKRlBx4rFUcorD7e?= =?us-ascii?Q?qq2SbvdYA94lJeXnTGZkShxyGarkJSeOqP45T9ihthXS?= MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW4PR12MB7031.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: acc35748-9548-4af9-8179-08dc1052817e X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Jan 2024 14:02:52.5570 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: y9cmy4mFDbA5o6llasId4vGiUI4Z3y0RC4LQodzKKE6tDqQ1fmTOUQzgq9D7Ek0rFfeuyaBrxJ1cyfwy1hvchA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW3PR12MB4523 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,nicklew@nvidia.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: 9PnzI0QmLqFtCRjcI2HUqrlox7686176AA= Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=sv1vHPDm; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io; dmarc=none; arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:reject}") Reviewed-by: Nickle Wang Regards, Nickle > -----Original Message----- > From: abner.chang@amd.com > Sent: Sunday, January 7, 2024 9:27 PM > To: devel@edk2.groups.io > Cc: Nickle Wang ; Igor Kulchytskyy > Subject: [PATCH V2 4/6] RedfishPkg/RedfishRestExDxe: Implement > EDKII_HTTP_CALLBACK_PROTOCOL >=20 > External email: Use caution opening links or attachments >=20 >=20 > From: Abner Chang >=20 > Implement EDKII_HTTP_CALLBACK_PROTOCOL that listens to > HttpEventTlsConfigured event for reconfiguring TLS configuration > data. >=20 > Signed-off-by: Abner Chang > Cc: Nickle Wang > Cc: Igor Kulchytskyy > --- > .../RedfishRestExDxe/RedfishRestExDxe.inf | 3 + > .../RedfishRestExDxe/RedfishRestExDriver.h | 32 ++++++--- > .../RedfishRestExDxe/RedfishRestExDriver.c | 70 +++++++++++++++++++ > 3 files changed, 95 insertions(+), 10 deletions(-) >=20 > diff --git a/RedfishPkg/RedfishRestExDxe/RedfishRestExDxe.inf > b/RedfishPkg/RedfishRestExDxe/RedfishRestExDxe.inf > index 64e6343bfbf..6da416ddb92 100644 > --- a/RedfishPkg/RedfishRestExDxe/RedfishRestExDxe.inf > +++ b/RedfishPkg/RedfishRestExDxe/RedfishRestExDxe.inf > @@ -5,6 +5,7 @@ > # (C) Copyright 2020 Hewlett Packard Enterprise Development LP
> # Copyright (c) 2023, American Megatrends International LLC. > # Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reser= ved. > +# Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<= BR> > # > # SPDX-License-Identifier: BSD-2-Clause-Patent > # > @@ -57,6 +58,8 @@ > gEfiHttpServiceBindingProtocolGuid ## TO_START > gEfiHttpProtocolGuid ## TO_START > gEfiDevicePathProtocolGuid ## TO_START > + gEdkiiHttpCallbackProtocolGuid ## CONSUMES > + gEfiTlsProtocolGuid ## CONSUMES >=20 > [Pcd] > gEfiRedfishPkgTokenSpaceGuid.PcdRedfishRestExServiceAccessModeInBand #= # > CONSUMES > diff --git a/RedfishPkg/RedfishRestExDxe/RedfishRestExDriver.h > b/RedfishPkg/RedfishRestExDxe/RedfishRestExDriver.h > index 6b94e5814c4..929691cea35 100644 > --- a/RedfishPkg/RedfishRestExDxe/RedfishRestExDriver.h > +++ b/RedfishPkg/RedfishRestExDxe/RedfishRestExDriver.h > @@ -4,6 +4,7 @@ > Copyright (c) 2019, Intel Corporation. All rights reserved.
> (C) Copyright 2020 Hewlett Packard Enterprise Development LP
> Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
> + Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved. >=20 > SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > @@ -32,6 +33,8 @@ > #include > #include > #include > +#include > +#include >=20 > /// > /// Protocol instances > @@ -67,6 +70,9 @@ typedef struct _RESTEX_INSTANCE RESTEX_INSTANCE; > #define RESTEX_INSTANCE_FROM_THIS(a) \ > CR (a, RESTEX_INSTANCE, RestEx, RESTEX_INSTANCE_SIGNATURE) >=20 > +#define RESTEX_INSTANCE_FROM_HTTP_CALLBACK(a) \ > + CR (a, RESTEX_INSTANCE, HttpCallbakFunction, > RESTEX_INSTANCE_SIGNATURE) > + > #define RESTEX_STATE_UNCONFIGED 0 > #define RESTEX_STATE_CONFIGED 1 >=20 > @@ -94,25 +100,31 @@ struct _RESTEX_SERVICE { > #define RESTEX_INSTANCE_FLAGS_TCP_ERROR_RETRY 0x00000002 >=20 > struct _RESTEX_INSTANCE { > - UINT32 Signature; > - LIST_ENTRY Link; > + UINT32 Signature; > + LIST_ENTRY Link; >=20 > - EFI_REST_EX_PROTOCOL RestEx; > + EFI_REST_EX_PROTOCOL RestEx; >=20 > - INTN State; > - BOOLEAN InDestroy; > + INTN State; > + BOOLEAN InDestroy; >=20 > - RESTEX_SERVICE *Service; > - EFI_HANDLE ChildHandle; > + RESTEX_SERVICE *Service; > + EFI_HANDLE ChildHandle; >=20 > - EFI_REST_EX_CONFIG_DATA ConfigData; > + EFI_REST_EX_CONFIG_DATA ConfigData; >=20 > // > // HTTP_IO to access the HTTP service > // > - HTTP_IO HttpIo; > + HTTP_IO HttpIo; > + > + // > + // EDKII_HTTP_CALLBACK_PROTOCOL that listens to > + // HttpEventInitSession event. > + // > + EDKII_HTTP_CALLBACK_PROTOCOL HttpCallbakFunction; >=20 > - UINT32 Flags; > + UINT32 Flags; > }; >=20 > typedef struct { > diff --git a/RedfishPkg/RedfishRestExDxe/RedfishRestExDriver.c > b/RedfishPkg/RedfishRestExDxe/RedfishRestExDriver.c > index 7036aed4268..39221989c49 100644 > --- a/RedfishPkg/RedfishRestExDxe/RedfishRestExDriver.c > +++ b/RedfishPkg/RedfishRestExDxe/RedfishRestExDriver.c > @@ -4,6 +4,7 @@ > Copyright (c) 2019, Intel Corporation. All rights reserved.
> (C) Copyright 2020 Hewlett Packard Enterprise Development LP
> Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserv= ed. > + Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved. >=20 > SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > @@ -585,6 +586,53 @@ RedfishRestExDriverBindingStop ( > return Status; > } >=20 > +/** > + Callback function that is invoked when HTTP event occurs. > + > + @param[in] This Pointer to the EDKII_HTTP_CALLBACK_PRO= TOCOL > instance. > + @param[in] Event The event that occurs in the current s= tate. > + @param[in] EventStatus The Status of Event, EFI_SUCCESS or ot= her errors. > +**/ > +VOID > +EFIAPI > +RestExHttpCallback ( > + IN EDKII_HTTP_CALLBACK_PROTOCOL *This, > + IN EDKII_HTTP_CALLBACK_EVENT Event, > + IN EFI_STATUS EventStatus > + ) > +{ > + EFI_STATUS Status; > + EFI_TLS_PROTOCOL *TlsProtocol; > + RESTEX_INSTANCE *Instance; > + EFI_TLS_VERIFY TlsVerifyMethod; > + > + if ((Event =3D=3D HttpEventTlsConfigured) && (EventStatus =3D=3D EFI_S= UCCESS)) { > + // Reconfigure TLS configuration data. > + Instance =3D RESTEX_INSTANCE_FROM_HTTP_CALLBACK (This); > + Status =3D gBS->HandleProtocol ( > + Instance->HttpIo.Handle, > + &gEfiTlsProtocolGuid, > + (VOID **)&TlsProtocol > + ); > + if (EFI_ERROR (Status)) { > + return; > + } > + > + TlsVerifyMethod =3D EFI_TLS_VERIFY_NONE; > + Status =3D TlsProtocol->SetSessionData ( > + TlsProtocol, > + EfiTlsVerifyMethod, > + &TlsVerifyMethod, > + sizeof (EFI_TLS_VERIFY) > + ); > + if (!EFI_ERROR (Status)) { > + DEBUG ((DEBUG_MANAGEABILITY, "%a: REST EX reconfigures TLS verify > method.\n", __func__)); > + } > + } > + > + return; > +} > + > /** > Creates a child handle and installs a protocol. >=20 > @@ -699,6 +747,19 @@ RedfishRestExServiceBindingCreateChild ( > goto ON_ERROR; > } >=20 > + // Initial HTTP callback funciton on this REST EX instance > + Instance->HttpCallbakFunction.Callback =3D RestExHttpCallback; > + Status =3D gBS->InstallProtocolInterfa= ce ( > + &Instance->HttpIo.Hand= le, > + &gEdkiiHttpCallbackPro= tocolGuid, > + EFI_NATIVE_INTERFACE, > + &Instance->HttpCallbak= Function > + ); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a: Fail to install HttpCallbakFunction.\n", > __func__)); > + goto ON_ERROR; > + } > + > // > // Add it to the parent's child list. > // > @@ -812,6 +873,15 @@ RedfishRestExServiceBindingDestroyChild ( > RestEx > ); >=20 > + // > + // Uninstall the HTTP callback protocol. > + // > + Status =3D gBS->UninstallProtocolInterface ( > + Instance->HttpIo.Handle, > + &gEdkiiHttpCallbackProtocolGuid, > + &Instance->HttpCallbakFunction > + ); > + > OldTpl =3D gBS->RaiseTPL (TPL_CALLBACK); >=20 > if (EFI_ERROR (Status)) { > -- > 2.37.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#113395): https://edk2.groups.io/g/devel/message/113395 Mute This Topic: https://groups.io/mt/103577246/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-