From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A8F5AA0C43; Thu, 23 Sep 2021 18:43:57 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 94E4F41260; Thu, 23 Sep 2021 18:43:57 +0200 (CEST) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mails.dpdk.org (Postfix) with ESMTP id 930A641257 for ; Thu, 23 Sep 2021 18:43:55 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10116"; a="223922379" X-IronPort-AV: E=Sophos;i="5.85,316,1624345200"; d="scan'208";a="223922379" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Sep 2021 09:43:50 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,316,1624345200"; d="scan'208";a="455183969" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by orsmga002.jf.intel.com with ESMTP; 23 Sep 2021 09:43:50 -0700 Received: from orsmsx608.amr.corp.intel.com (10.22.229.21) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Thu, 23 Sep 2021 09:43:49 -0700 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX608.amr.corp.intel.com (10.22.229.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Thu, 23 Sep 2021 09:43:49 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12 via Frontend Transport; Thu, 23 Sep 2021 09:43:49 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.177) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.12; Thu, 23 Sep 2021 09:43:47 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XxOJG9clwrl6yzNf5w7hcEb0Fa40sJCevFENj8RW65SXuWilEGeohb1i6LFb7Ai7Xq9AjYbkRc/vnDEj/NHJ3SvjZXQnm9y9B0UOlUDnyFSufrZkg+pA950YnjNdgpaWMBt7eczXOK/G6aTb0W2wtqlZZ6UpSSv2D61IFqP57+S1vjR25SV9kQhe/TgqriJtG+HGcHDG9MoDfrTcqTVYyAn51ELB8RmMt4POhJInvKnu6A/uLDzqM7cIN8IeIAcqNT3iiWrrylSabk4oPJWrp6qOhUOT3jidX5fx1z/VqHjmhNhe6UcgzI6Ab0VxRPlUtXHZ1pVnBRRpuwhc9U+dBg== 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; bh=QWc6Erksl2DBOJBcezMqLV3KqMKm4YrNGDpszAe9E0g=; b=U4qdjY8fY6Jetbtz7EaBgmpQF0wRW8dKVQgYJcRKtosnLsyoStvPYdmdwMlIzB+hBl/rn49BCTGZwGQEYbqB3QijlI700OgR0Av7htFNdvLDHxlrZBdKdQS7gYvrLLV6vRtY8y80vX6M5raefNZ3oFa9QQ+qvd7JF3ZIKXlbybFFsrYFA1cfNJfEUemDlYHeqqrbJtr0a/l9PuLBkOgd1PdkZgomYkj1ppRhHvSVOpA2R4R0sIypy9qd6omr+yiK378A9l7/EZiySmpFq45JAnALZQ3vBZMvzXvG/laiTxj6E0/GBLqm9rMCtJ0Wx/A8zumgrCBMhAPBGm0sX2UDhQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QWc6Erksl2DBOJBcezMqLV3KqMKm4YrNGDpszAe9E0g=; b=wUs4QJ2BBgGHnghUUDLFRDgHJptGLrqJYMTOmj5MWUm/Bue8M44+dWIbd5La0tJoA42pZjAh3GDXE7aKY+ug/iZEva8f++POnDeFqNy8beCxAIAr00EoVqpyZUYS7iAiQpqk+Z8YM9PLNq41QMG6qnvf+MXh9xDMSAMdQwpDLOk= Received: from DM6PR11MB4491.namprd11.prod.outlook.com (2603:10b6:5:204::19) by DM6PR11MB3628.namprd11.prod.outlook.com (2603:10b6:5:144::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4523.16; Thu, 23 Sep 2021 16:43:44 +0000 Received: from DM6PR11MB4491.namprd11.prod.outlook.com ([fe80::740e:126e:c785:c8fd]) by DM6PR11MB4491.namprd11.prod.outlook.com ([fe80::740e:126e:c785:c8fd%4]) with mapi id 15.20.4544.015; Thu, 23 Sep 2021 16:43:43 +0000 From: "Ananyev, Konstantin" To: "Nicolau, Radu" , "Iremonger, Bernard" , "Medvedkin, Vladimir" CC: "dev@dpdk.org" , "mdr@ashroe.eu" , "Richardson, Bruce" , "Zhang, Roy Fan" , "hemant.agrawal@nxp.com" , "gakhil@marvell.com" , "anoobj@marvell.com" , "Doherty, Declan" , "Sinha, Abhijit" , "Buckley, Daniel M" , "marchana@marvell.com" , "ktejasree@marvell.com" , "matan@nvidia.com" Thread-Topic: [PATCH v6 07/10] ipsec: add support for NAT-T Thread-Index: AQHXq6YUV3dQHMZHo0GhnHfsXRsox6ux230Q Date: Thu, 23 Sep 2021 16:43:43 +0000 Message-ID: References: <20210713133542.3550525-1-radu.nicolau@intel.com> <20210917091747.1528262-1-radu.nicolau@intel.com> <20210917091747.1528262-8-radu.nicolau@intel.com> In-Reply-To: <20210917091747.1528262-8-radu.nicolau@intel.com> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.200.16 authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a2acfa25-eb7d-4cd5-e078-08d97eb14e6b x-ms-traffictypediagnostic: DM6PR11MB3628: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: DtYeZWYHk8/lnD7G9rQvu1CLEj5XbcSVZV05ppi+2ziO/JAGJ7fxrL2Vq62lKyGuj2rueQVgiDIsrlcRQmJcVu8pzVJ9Q+91a1Kpm/nY+drxGMLqlxXZ6iaU+pJyp9Z5R9s8gAnGgyz07qliqgEtAxhKd3jJlxAcej9jnRakWOQBPxCUb59lPs9YO8uY1sT+05Dhxd09fSBxTTSvkowcO4rzXTiRNYzMm/KcyVHHlewAYzWghRaybsfBHXMF1oNkQ4NXdQPk1VS0Wsk/024DeLigTG1lMR4FF/WrFSlAwUta+4EUCrdL/qU3d02Qlf76+VgRskQP3+TUGIAbi/NgV9j1woUyyxm3i2Z9CWBN46wxv7uL48uHu7eBRG24zWHWfEKsVi3xOcARnenHAzhzjIEa0Aw40CQSyPaUXASWHSUTMIavdi0BU1dYxxtcqp+6xVQaZceEp44yVUufVyetwYPMGX2A9+iYfY4o/nnfb4Us454rb8aF2Dur+HLBZfYrRErzZnBmo06P0RaXSx+d4amPtB7WdFJK8TCoUbZRqdKPsWm0igULt61geD4+qoTh6mtW2QE8o1dfz+8WWIfdd3EZkuLQe3nxrES6KRZFhjYObWuWsmgzL1A+c8aNVFR0qug7Q+6LZTevNceALiazgZzj39odzNhLhvwzoXFN1YdEnV5yl5cAPIxlPED9Rm+wjjQ21tk2oWlFihYLS+h3Xg== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR11MB4491.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(83380400001)(66446008)(66946007)(66476007)(5660300002)(76116006)(2906002)(316002)(64756008)(6636002)(6506007)(8936002)(86362001)(66556008)(186003)(54906003)(71200400001)(7696005)(38100700002)(122000001)(52536014)(33656002)(8676002)(26005)(55236004)(55016002)(38070700005)(508600001)(4326008)(110136005)(9686003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?VuRbRpRc0s7XoyLgsqzbo43+eaYYQwOGbHch0uSr4APxL1xBY6elmoI3xCon?= =?us-ascii?Q?+aZzgy7HF8a05kaxD6lBhGq8cMmZOG86YQRgHIw4qZX3SuID+wOxQS12a5Ud?= =?us-ascii?Q?wstlYi+w/dMYYVRJs3o9W6RgLLOrBqJpmUZ9+KUl58F04Bz3NLB7/7ebKXE9?= =?us-ascii?Q?v568zgBdqgP7GiOHHjL7ChzmcxzUUKSimzrSaFXohzR4yqClRKe0jTjmvmKm?= =?us-ascii?Q?FDJm+eniLUt50xOZ47qGu5BgpE3E0Fd9hKiJLTNTziHADaFWEwopEhodqc7Y?= =?us-ascii?Q?gqnfful1Xlt3hW4cop/HQgH/xuoK2FwJK/rU8xGG6nh9sL5CEaD7C528EZb3?= =?us-ascii?Q?8ZjpG3kwtTwOzR7uRp4lyDubvt/jTNlaNaW7A2SEgLdMbEiXDaWTuFQ1hqBZ?= =?us-ascii?Q?sfLS+LL5ycMfPaXCHFzt4FH2gJa0VNs5O0eN6+KRMHSD4AGXL0B8RivWe3Nk?= =?us-ascii?Q?Hp0fc5SR5acOE9VhckJJTboQUqDjfa5xEzI5zowW0Y/x5XEfi/BH6cZBOqrv?= =?us-ascii?Q?C1kZn1US7rRnchATvwYQQj17TkqPE+j/4znvRdHrZIYS+2AoTHq2Fzgwyvlg?= =?us-ascii?Q?uaBe1T2GM9IDvOCZDVQPrA971o2mJedThtvIOUzxTMosTVhczVub2exrlBze?= =?us-ascii?Q?7PI1FxO3lP0yAXJhperRwZMAh6Mtav1qev4RnvfJAgd6DXGQgO6pI5It4Cnd?= =?us-ascii?Q?6sndO0ZfLBhTwaei45WizUIdVTm+Y/XQzEzJBqrxwo1fTszS4vRVYs8IUNny?= =?us-ascii?Q?ZBis0ffwzP0kG8jqkqRUhlA0dMP+74+7xc1mg6aLQF0aI8I6OXqffcN/6zl0?= =?us-ascii?Q?86YOffFJDDCfb12tq3Vve9CGFxivbWfTaFSYtt6MwSo+cSIXGdrKFvjXawMm?= =?us-ascii?Q?bTPIKUjYc0OPeBG9+MjGn0k8V7eU07Jy3vbr0CrOAaWXOaGKRVhRxewDXmGx?= =?us-ascii?Q?9BrSPutYb5hbxpZnk2qsWIit03URj/+j3P+aecOlyQup7c30ydCIKiWSMTJj?= =?us-ascii?Q?aC4l8nglQEbDbkGIbgCnHmYrlkDGG8+7eDj8MX92mMJXw8+aCk9HXUh22dKr?= =?us-ascii?Q?qh10jrwWX2FNNQiBc1A4z5ClPX2jElIHWbLnx8ASq8LegrwgBldw1iS1YY8l?= =?us-ascii?Q?3i4mn5eZ78069gXw8MBVE97WTUlWhqt4MNzkbkqxmrw+LmgWpG9jjaUVpxNP?= =?us-ascii?Q?AGTKErnZ974HrSNZ4o6p/nj0vA3tSiq0Bpu64SWQG3aFkRvqMyH9XyCGCzhk?= =?us-ascii?Q?o/KcSV9vITEFkrZLjHPU/2vNe8RAF//YES6+iFAG2X2PMniR6ks95Wsl/fzk?= =?us-ascii?Q?mgKRRS8cneN2kcxq1KM5R84H?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR11MB4491.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a2acfa25-eb7d-4cd5-e078-08d97eb14e6b X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Sep 2021 16:43:43.8830 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: fbZqHA26wbAu81Wu+vg5ko9zBdeMxuObkF/Z4qwQZv5i8hPtXyIgqwHaycfpRJxXOgh6m+irt8bOY6SdVOIGoNA3MuGr64rBnBadcaGhhpQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB3628 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v6 07/10] ipsec: add support for NAT-T X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" >=20 > Add support for the IPsec NAT-Traversal use case for Tunnel mode > packets. >=20 > Signed-off-by: Declan Doherty > Signed-off-by: Radu Nicolau > Signed-off-by: Abhijit Sinha > Signed-off-by: Daniel Martin Buckley > Acked-by: Fan Zhang > --- > lib/ipsec/iph.h | 17 +++++++++++++++++ > lib/ipsec/rte_ipsec_sa.h | 8 +++++++- > lib/ipsec/sa.c | 13 ++++++++++++- > lib/ipsec/sa.h | 4 ++++ > 4 files changed, 40 insertions(+), 2 deletions(-) >=20 > diff --git a/lib/ipsec/iph.h b/lib/ipsec/iph.h > index 2d223199ac..c5c213a2b4 100644 > --- a/lib/ipsec/iph.h > +++ b/lib/ipsec/iph.h > @@ -251,6 +251,7 @@ update_tun_outb_l3hdr(const struct rte_ipsec_sa *sa, = void *outh, > { > struct rte_ipv4_hdr *v4h; > struct rte_ipv6_hdr *v6h; > + struct rte_udp_hdr *udph; > uint8_t is_outh_ipv4; >=20 > if (sa->type & RTE_IPSEC_SATP_MODE_TUNLV4) { > @@ -258,11 +259,27 @@ update_tun_outb_l3hdr(const struct rte_ipsec_sa *sa= , void *outh, > v4h =3D outh; > v4h->packet_id =3D pid; > v4h->total_length =3D rte_cpu_to_be_16(plen - l2len); > + > + if (sa->type & RTE_IPSEC_SATP_NATT_ENABLE) { > + udph =3D (struct rte_udp_hdr *)(v4h + 1); > + udph->dst_port =3D sa->natt.dport; > + udph->src_port =3D sa->natt.sport; > + udph->dgram_len =3D rte_cpu_to_be_16(plen - l2len - > + (sizeof(*v4h) + sizeof(*udph))); > + } > } else { > is_outh_ipv4 =3D 0; > v6h =3D outh; > v6h->payload_len =3D rte_cpu_to_be_16(plen - l2len - > sizeof(*v6h)); > + > + if (sa->type & RTE_IPSEC_SATP_NATT_ENABLE) { > + udph =3D (struct rte_udp_hdr *)(v6h + 1); Why you presume there would be always ipv6 with no options? Shouldn't we use hdr_l3_len provided by user? Another thing - I am not sure we need 'natt' field in rte_ipsec_sa at all. UDP header (sport, dport) is consitant and could be part of header template provided by user at sa initialization time. > + udph->dst_port =3D sa->natt.dport; > + udph->src_port =3D sa->natt.sport; > + udph->dgram_len =3D rte_cpu_to_be_16(plen - l2len - > + (sizeof(*v6h) + sizeof(*udph))); Whose responsibility will be to update cksum field? > + } > } >=20 > if (sa->type & TUN_HDR_MSK) > diff --git a/lib/ipsec/rte_ipsec_sa.h b/lib/ipsec/rte_ipsec_sa.h > index cf51ad8338..40d1e70d45 100644 > --- a/lib/ipsec/rte_ipsec_sa.h > +++ b/lib/ipsec/rte_ipsec_sa.h > @@ -76,6 +76,7 @@ struct rte_ipsec_sa_prm { > * - inbound/outbound > * - mode (TRANSPORT/TUNNEL) > * - for TUNNEL outer IP version (IPv4/IPv6) > + * - NAT-T UDP encapsulated (TUNNEL mode only) > * - are SA SQN operations 'atomic' > * - ESN enabled/disabled > * ... > @@ -86,7 +87,8 @@ enum { > RTE_SATP_LOG2_PROTO, > RTE_SATP_LOG2_DIR, > RTE_SATP_LOG2_MODE, > - RTE_SATP_LOG2_SQN =3D RTE_SATP_LOG2_MODE + 2, > + RTE_SATP_LOG2_NATT =3D RTE_SATP_LOG2_MODE + 2, Why to insert it in the middle? Why not to add to the end, as usually people do for new options? > + RTE_SATP_LOG2_SQN, > RTE_SATP_LOG2_ESN, > RTE_SATP_LOG2_ECN, > RTE_SATP_LOG2_DSCP > @@ -109,6 +111,10 @@ enum { > #define RTE_IPSEC_SATP_MODE_TUNLV4 (1ULL << RTE_SATP_LOG2_MODE) > #define RTE_IPSEC_SATP_MODE_TUNLV6 (2ULL << RTE_SATP_LOG2_MODE) >=20 > +#define RTE_IPSEC_SATP_NATT_MASK (1ULL << RTE_SATP_LOG2_NATT) > +#define RTE_IPSEC_SATP_NATT_DISABLE (0ULL << RTE_SATP_LOG2_NATT) > +#define RTE_IPSEC_SATP_NATT_ENABLE (1ULL << RTE_SATP_LOG2_NATT) > + > #define RTE_IPSEC_SATP_SQN_MASK (1ULL << RTE_SATP_LOG2_SQN) > #define RTE_IPSEC_SATP_SQN_RAW (0ULL << RTE_SATP_LOG2_SQN) > #define RTE_IPSEC_SATP_SQN_ATOM (1ULL << RTE_SATP_LOG2_SQN) > diff --git a/lib/ipsec/sa.c b/lib/ipsec/sa.c > index 2ecbbce0a4..8e369e4618 100644 > --- a/lib/ipsec/sa.c > +++ b/lib/ipsec/sa.c > @@ -217,6 +217,10 @@ fill_sa_type(const struct rte_ipsec_sa_prm *prm, uin= t64_t *type) > } else > return -EINVAL; >=20 > + /* check for UDP encapsulation flag */ > + if (prm->ipsec_xform.options.udp_encap =3D=3D 1) > + tp |=3D RTE_IPSEC_SATP_NATT_ENABLE; > + > /* check for ESN flag */ > if (prm->ipsec_xform.options.esn =3D=3D 0) > tp |=3D RTE_IPSEC_SATP_ESN_DISABLE; > @@ -372,7 +376,8 @@ esp_sa_init(struct rte_ipsec_sa *sa, const struct rte= _ipsec_sa_prm *prm, > const struct crypto_xform *cxf) > { > static const uint64_t msk =3D RTE_IPSEC_SATP_DIR_MASK | > - RTE_IPSEC_SATP_MODE_MASK; > + RTE_IPSEC_SATP_MODE_MASK | > + RTE_IPSEC_SATP_NATT_MASK; >=20 > if (prm->ipsec_xform.options.ecn) > sa->tos_mask |=3D RTE_IPV4_HDR_ECN_MASK; > @@ -475,10 +480,16 @@ esp_sa_init(struct rte_ipsec_sa *sa, const struct r= te_ipsec_sa_prm *prm, > case (RTE_IPSEC_SATP_DIR_IB | RTE_IPSEC_SATP_MODE_TRANS): > esp_inb_init(sa); > break; > + case (RTE_IPSEC_SATP_DIR_OB | RTE_IPSEC_SATP_MODE_TUNLV4 | > + RTE_IPSEC_SATP_NATT_ENABLE): > + case (RTE_IPSEC_SATP_DIR_OB | RTE_IPSEC_SATP_MODE_TUNLV6 | > + RTE_IPSEC_SATP_NATT_ENABLE): > case (RTE_IPSEC_SATP_DIR_OB | RTE_IPSEC_SATP_MODE_TUNLV4): > case (RTE_IPSEC_SATP_DIR_OB | RTE_IPSEC_SATP_MODE_TUNLV6): > esp_outb_tun_init(sa, prm); > break; > + case (RTE_IPSEC_SATP_DIR_OB | RTE_IPSEC_SATP_MODE_TRANS | > + RTE_IPSEC_SATP_NATT_ENABLE): > case (RTE_IPSEC_SATP_DIR_OB | RTE_IPSEC_SATP_MODE_TRANS): > esp_outb_init(sa, 0); > break; > diff --git a/lib/ipsec/sa.h b/lib/ipsec/sa.h > index 5e237f3525..3f38921eb3 100644 > --- a/lib/ipsec/sa.h > +++ b/lib/ipsec/sa.h > @@ -101,6 +101,10 @@ struct rte_ipsec_sa { > uint64_t msk; > uint64_t val; > } tx_offload; > + struct { > + uint16_t sport; > + uint16_t dport; > + } natt; > uint32_t salt; > uint8_t algo_type; > uint8_t proto; /* next proto */ > -- > 2.25.1