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 BBAB3A0548; Fri, 16 Apr 2021 20:05:21 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8928A161CF2; Fri, 16 Apr 2021 20:05:21 +0200 (CEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2072.outbound.protection.outlook.com [40.107.93.72]) by mails.dpdk.org (Postfix) with ESMTP id A1A1D161CE8 for ; Fri, 16 Apr 2021 20:05:19 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QxOcAYONXiclR3NiMBGM3Fk5gMTS54vsi23CtefHnssAGMUlM9oe2/NzoYS0LZ3zT/mAkPxYAgG0vg/fTHyX1rUQ4UKVpJ6n6I1MdBZO4HQrjMzNASHNTrqDwdTWA38DolekKHuQzta8VccZVLRoazxZ9aNialf/aa8H+uQsx+Bg+qlwHr1BBFgch2JewZtOXWbCh9vNC4DUMi6PmTDQTL788BqDxG7L/UkmqIHFBNO7SDVOJTMjHOG0XeOJqEHTT602/Q7eXDRQEpX8CgtaLtPQQKGJzwkWrOTR7OLZ3P7oFF+qhqx6h1+VxNh0vhLWTW8iYXDFA9f0kJESW770LA== 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-SenderADCheck; bh=ux/Q5kkgrYeXcy/2TDvJ0IgsLLUDezoAl6bnLQD3Uyo=; b=mnMPYD7IuiPxeOsQBl9tWK62kgxIveVO+rAaF8lkP8fdDs0rbFESB+EnctwB/HQFpQqAESEEGdF1RjrMi+jonDTmYULew1lj9pFF806XpOXGLl/V8wsNYqjf/jnYdbt8znInU3mRK78UJ1x/H06KZ36r9x0gSDsjvOSXt1IS7m0YzZYiZuFgEMxgdRG3UDOfBf0CbuS1M6Zt8/9vV9dC+NFiwvPT8YMFMIwpdpo7sdB7V5OKFi4cDeDB8ornLVenHnzqvrKZuMzjNbidyAgAfyDGz9eDxMDRtLhtRVUHH7TJxghpC1xtUuV91naZFLBIhmbMqHHCTmUf2Zs/AEL5Ug== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ux/Q5kkgrYeXcy/2TDvJ0IgsLLUDezoAl6bnLQD3Uyo=; b=A3kejLKM//A3F0r81rzQbNaEBTosbkUR3UxvWW+T2sRu4S7WNQjddczR8G3IC4LjiJYfu+mMbw9jxAHQkBliIdP2n1DmUWyjcNhbDFK4Z9wzmpzbuQ1vT7FwPdFDowhgZotRD3JIUIzzSStiGRi3BsWuOI+WGsdiOL5bysMUSq7lnChSjoyZ/GIS9e2IfLHd2VSWRZdrGLYsRq9Xmotzdsej917ynMLYI2WAV6BgBL/K8H+0Gu62vAlUDo6ewZLqmxilSkn8DZ1BSkYPawPitREB6DcRIMyRrxgyDB6oHq5PdZRIDPDKuYGvipEShqZaocn+T1ywMXbjuzUp2soSZg== Received: from MN2PR12MB2909.namprd12.prod.outlook.com (2603:10b6:208:103::13) by MN2PR12MB3117.namprd12.prod.outlook.com (2603:10b6:208:d1::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.22; Fri, 16 Apr 2021 18:05:17 +0000 Received: from MN2PR12MB2909.namprd12.prod.outlook.com ([fe80::7cbc:e499:e936:7408]) by MN2PR12MB2909.namprd12.prod.outlook.com ([fe80::7cbc:e499:e936:7408%7]) with mapi id 15.20.4042.018; Fri, 16 Apr 2021 18:05:17 +0000 From: Bing Zhao To: Ori Kam , NBU-Contact-Thomas Monjalon , "ferruh.yigit@intel.com" , "andrew.rybchenko@oktetlabs.ru" CC: "dev@dpdk.org" , "ajit.khaparde@broadcom.com" Thread-Topic: [PATCH v2 1/2] ethdev: introduce conntrack flow action and item Thread-Index: AQHXMr3WB7gkVwQ80EmiuqP8MKWjd6q3bnQA Date: Fri, 16 Apr 2021 18:05:16 +0000 Message-ID: References: <1618062393-205611-1-git-send-email-bingz@nvidia.com> <1618504877-95597-1-git-send-email-bingz@nvidia.com> <1618504877-95597-2-git-send-email-bingz@nvidia.com> In-Reply-To: Accept-Language: en-US, zh-CN Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: nvidia.com; dkim=none (message not signed) header.d=none;nvidia.com; dmarc=none action=none header.from=nvidia.com; x-originating-ip: [39.183.9.221] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f6cc80fb-01fa-41cc-8045-08d901023104 x-ms-traffictypediagnostic: MN2PR12MB3117: x-ld-processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:510; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: r4XLPVB745dsj2OJHDqpvWTfnWeZbwk3i9lmfogTVLjdkAyBPb1gOsy+ZiwVvLd16Pa6JSayE/5JppTs2vEBF7HU6XHl7JVMZZDRSpfle4wswY7xmoXetfT27KMr5/BwraB+W2Wj4jyBhNR+woe1catoXMB/HK5D6Vn7otl86liR+My2cU3gV2Q1CSf/wQMhnyT4dMB9fSVQvwEa5eboiE1T791nG0gi3KVIB4OPJ1G/k+c6/+7zpwVKR1MR9tgnJTq9ZgL3MZxZDqg9wok9AZaYdpOTvS1zkqgjJTtnUC4VK47Od/rdUVZeIOmlzQoefQiFByZfePQLUWfULamP6Mha3Dj3+jgVpb80SqD91OImrYEQSpjbh/4q+3cxGN7tBG2pvYpXCRwNV5J4GYr2Uz/7NLRw6q7bKWBEaoFln8nr1jQ7RNVWzwXm4nY3I1XjvMqIhWH+CnT0bP5HaFrDtnwSa/MuVzs4eNxudm0abpCDK0fBb6HPm2HEl8I0RTCNzOknU9MAKw5l2mbYgme5AXIdfueULHGGd5gjsYI8pN7Xj4tQrMbNyyZUrqgyJNLl6h2cWNvuhfaD9fuK8k/xfRcWLehgSbi0/UP3CYLhZvy+/KE47Nfd6p/Z6T0Q4ENl8jYiWM6kCytdbgVtozOamJw6pk10iP7YiY9O96YWRxYx7gWrkkpoT7BTcSm/uPl3 x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR12MB2909.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(396003)(366004)(346002)(136003)(39860400002)(83380400001)(2906002)(8676002)(7696005)(66476007)(4326008)(38100700002)(122000001)(8936002)(9686003)(110136005)(66946007)(316002)(54906003)(64756008)(45080400002)(86362001)(186003)(53546011)(76116006)(71200400001)(33656002)(66446008)(6506007)(966005)(52536014)(30864003)(26005)(478600001)(5660300002)(66556008)(55016002); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: =?us-ascii?Q?2SFfztoSDV+6j1joqZnb1jQaz+tz8BFQUjIjRUlqtNlaT2p26dKccpgnynFO?= =?us-ascii?Q?K0mYNH/K6r/boOg2mCaJ1Jva+qUtevqdbgVwS0tLuyb7Bph6bBS7qogWuEeo?= =?us-ascii?Q?PWM2mGbRLsmF5C+WEaOTvpi+w41HcTVMtSOLjbxSQiQ91t4e8bidIIRSzbgI?= =?us-ascii?Q?s13OiR3dJf5eswyn5YVb5+kmf/Pc/UE5KsNGIuUyq4bPVmKkU7LbBnSM4gi8?= =?us-ascii?Q?QWHxqjaYqohEj3qjB2grhObcP3WW6QXZTJEdbivy4ONJ/Ftua0JVpkgWG3G2?= =?us-ascii?Q?pCXzWJcNWzqynx30mhWSsjzhnTlL9VPs8Dj5n++RP/NOItLEcqkrJanTa1vu?= =?us-ascii?Q?UfVrGy7KDPb1rjnSguQzVljYuLP+HaIEU4bju5XmgpGVaoyajv4256z1a0PF?= =?us-ascii?Q?Ha/nbeuTHj8fqI9RIVXc7IS7JcpHpqzLN/x3eYeYfqqATl8gHI1l7XTNSFE1?= =?us-ascii?Q?exVb0GghuoOBoQJVGBq8xH1qkKgbE8TQb0WzHmUFVfVw7KMU0z2GlMoWUHX/?= =?us-ascii?Q?xMssQ2oCNgjwnM+WBTkmdXPt1OHh5CGda6IUM5dB6kYR7Wzzlp9ll0GWgbiy?= =?us-ascii?Q?jaQw9R7XNUOzuyRIjc+evCuE1dY11r5VElvklPhOusTDINf6tokxflJfpXPb?= =?us-ascii?Q?7Xc8DqfivbnRi/P+B/s6K90AmZ0RFL72engU+oT+scq9gwgZD9YD6sLsM9fU?= =?us-ascii?Q?XxSo2YU1DemUrF0M4C9DmBx1WVHhq/6ZEtnxWGFVn/f+Q0UnnIrPUxSfAjji?= =?us-ascii?Q?7g2gFlZnsSfkHqTs7Zv2VUJdj/eXDJjjPcXhqhKu/vD6wh6e3CJnCgywaWAO?= =?us-ascii?Q?LDGobm2C/V+1QJg16LCfqqbRapPR5+GQ2Xd/A5LHEiH4jvFakh45ZSgaEGtS?= =?us-ascii?Q?ig5bhBi/DWgWFUkSx4p78FFKBAyJSpRB/AwRxZ3CVQU9fQ2sZxVdM0TzqrZp?= =?us-ascii?Q?SR3Tb7/RIIivJyJZKX9LCQ5CTec1duqAr4L9k/VTsVKpK/GAyXi/6BPjKdFf?= =?us-ascii?Q?NXt8SJP2WYVLWEgo7PGiyoLL/GOe2fhRAjDIMtpdeGlwVLQNoDE1yESJiL1J?= =?us-ascii?Q?qwh5oW3tET8/Tl9OqddoZZA6ZXAiQw/fUWFumGBe05p6t+viXaRwLXOZthcY?= =?us-ascii?Q?1U2Ht/UA5uCxe4O4+r7CsGRp/eqAFTcEFQIUpUSQ/NBTP3VQEwJAkZVMtMld?= =?us-ascii?Q?ftxs4RaIkQHsrlv1Cp2HgdM6sC4WzZGzeTD/beZeQas42+eIrHFjrOd6pgsC?= =?us-ascii?Q?Av8TGiyoZf3KQeKO1XV7BqQj1/VSSO958QWV0qBgSRyyrDnuMMswb7R6t+KW?= =?us-ascii?Q?/hc=3D?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB2909.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f6cc80fb-01fa-41cc-8045-08d901023104 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Apr 2021 18:05:17.2777 (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: JAMbr091O4z5RQ3cG6h95j3LjFWrR+iTLg/ilYH0wZEg46Jj0ulH/rgmjFT2wwXUEGHx0ns16c+5TkBHx4ldjQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB3117 Subject: Re: [dpdk-dev] [PATCH v2 1/2] ethdev: introduce conntrack flow action and item 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" Hi Ori, My comments are inline, PSB. > -----Original Message----- > From: Ori Kam > Sent: Friday, April 16, 2021 8:42 PM > To: Bing Zhao ; NBU-Contact-Thomas Monjalon > ; ferruh.yigit@intel.com; > andrew.rybchenko@oktetlabs.ru > Cc: dev@dpdk.org; ajit.khaparde@broadcom.com > Subject: RE: [PATCH v2 1/2] ethdev: introduce conntrack flow action > and item >=20 > Hi Bing, >=20 > One more thought, PSB >=20 > Best, > Ori > > -----Original Message----- > > From: Bing Zhao > > Sent: Thursday, April 15, 2021 7:41 PM > > To: Ori Kam ; NBU-Contact-Thomas Monjalon > > ; ferruh.yigit@intel.com; > > andrew.rybchenko@oktetlabs.ru > > Cc: dev@dpdk.org; ajit.khaparde@broadcom.com > > Subject: [PATCH v2 1/2] ethdev: introduce conntrack flow action > and > > item > > > > This commit introduced the conntrack action and item. > > > > Usually the HW offloading is stateless. For some stateful > offloading > > like a TCP connection, HW module will help provide the ability of > a > > full offloading w/o SW participation after the connection was > > established. > > > > The basic usage is that in the first flow the application should > add > > the conntrack action and in the following flow(s) the application > > should use the conntrack item to match on the result. > > > > A TCP connection has two directions traffic. To set a conntrack > action > > context correctly, information from packets of both directions are > > required. > > > > The conntrack action should be created on one port and supply the > peer > > port as a parameter to the action. After context creating, it > could > > only be used between the ports (dual-port mode) or a single port. > The > > application should modify the action via the API > > "action_handle_update" only when before using it to create a flow > with > > opposite direction. This will help the driver to recognize the > > direction of the flow to be created, especially in single port > mode. > > The traffic from both directions will go through the same port if > the > > application works as an "forwarding engine" but not a end point. > > There is no need to call the update interface if the subsequent > flows > > have nothing to be changed. > > > > Query will be supported via action_ctx_query interface, about the > > current packets information and connection status. Tha fields > query > > capabilities depends on the HW. > > > > For the packets received during the conntrack setup, it is > suggested > > to re-inject the packets in order to take full advantage of the > > conntrack. Only the valid packets should pass the conntrack, > packets > > with invalid TCP information, like out of window, or with invalid > > header, like malformed, should not pass. > > > > Naming and definition: > > > https://nam11.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fel > ix > > > ir.bootlin.com%2Flinux%2Flatest%2Fsource%2Finclude%2Fuapi%2Flinux%2F > ne > > > tfilter%2Fnf_co&data=3D04%7C01%7Cbingz%40nvidia.com%7C29da48bebdc9 > 44 > > > b0127508d900d4f89a%7C43083d15727340c1b7db39efd9ccc17a%7C0%7C0%7C6375 > 41 > > > 736960852707%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2l > uM > > > zIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=3D%2Bbsd48yNzMbhUyp > In > > kol%2B7LskVzx1WHj%2Fkd%2Fu0zks0A%3D&reserved=3D0 > > nntrack_tcp.h > > > https://nam11.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fel > ix > > > ir.bootlin.com%2Flinux%2Flatest%2Fsource%2Fnet%2Fnetfilter%2Fnf_conn > tr > > > ack_proto_&data=3D04%7C01%7Cbingz%40nvidia.com%7C29da48bebdc944b01 > 27 > > > 508d900d4f89a%7C43083d15727340c1b7db39efd9ccc17a%7C0%7C0%7C637541736 > 96 > > > 0852707%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIi > LC > > > JBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=3DCwKk%2FgQWxRY22%2BAaCF > OP > > 1TbGphcqURrBFSf4NupMPPA%3D&reserved=3D0 > > tcp.c > > > > Other reference: > > > https://nam11.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fww > w. > > > usenix.org%2Flegacy%2Fevents%2Fsec01%2Finvitedtalks%2Frooij.pdf& > da > > > ta=3D04%7C01%7Cbingz%40nvidia.com%7C29da48bebdc944b0127508d900d4f89a%7 > C4 > > > 3083d15727340c1b7db39efd9ccc17a%7C0%7C0%7C637541736960852707%7CUnkno > wn > > %7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWw > iLCJ > > > XVCI6Mn0%3D%7C1000&sdata=3DgeKUBifelEBuFzQviu%2FPeV19DOjWzZAbdAlo% > 2B > > cVX%2FXs%3D&reserved=3D0 > > > > Signed-off-by: Bing Zhao > > --- > > lib/librte_ethdev/rte_flow.c | 2 + > > lib/librte_ethdev/rte_flow.h | 195 > > +++++++++++++++++++++++++++++++++++ > > 2 files changed, 197 insertions(+) > > > > diff --git a/lib/librte_ethdev/rte_flow.c > > b/lib/librte_ethdev/rte_flow.c index 27a161559d..0af601d508 100644 > > --- a/lib/librte_ethdev/rte_flow.c > > +++ b/lib/librte_ethdev/rte_flow.c > > @@ -98,6 +98,7 @@ static const struct rte_flow_desc_data > > rte_flow_desc_item[] =3D { > > MK_FLOW_ITEM(PFCP, sizeof(struct rte_flow_item_pfcp)), > > MK_FLOW_ITEM(ECPRI, sizeof(struct rte_flow_item_ecpri)), > > MK_FLOW_ITEM(GENEVE_OPT, sizeof(struct > rte_flow_item_geneve_opt)), > > + MK_FLOW_ITEM(CONNTRACK, sizeof(uint32_t)), > > }; > > > > /** Generate flow_action[] entry. */ > > @@ -186,6 +187,7 @@ static const struct rte_flow_desc_data > > rte_flow_desc_action[] =3D { > > * indirect action handle. > > */ > > MK_FLOW_ACTION(INDIRECT, 0), > > + MK_FLOW_ACTION(CONNTRACK, sizeof(struct > > rte_flow_action_conntrack)), > > }; > > > > int > > diff --git a/lib/librte_ethdev/rte_flow.h > > b/lib/librte_ethdev/rte_flow.h index 91ae25b1da..024d1a2026 100644 > > --- a/lib/librte_ethdev/rte_flow.h > > +++ b/lib/librte_ethdev/rte_flow.h > > @@ -551,6 +551,15 @@ enum rte_flow_item_type { > > * See struct rte_flow_item_geneve_opt > > */ > > RTE_FLOW_ITEM_TYPE_GENEVE_OPT, > > + > > + /** > > + * [META] > > + * > > + * Matches conntrack state. > > + * > > + * See struct rte_flow_item_conntrack. > > + */ > > + RTE_FLOW_ITEM_TYPE_CONNTRACK, > > }; > > > > /** > > @@ -1685,6 +1694,51 @@ rte_flow_item_geneve_opt_mask =3D { }; > #endif > > > > +/** > > + * The packet is with valid state after conntrack checking. > > + */ > > +#define RTE_FLOW_CONNTRACK_FLAG_PKT_STATE_VALID (1 << 0) > > +/** > > + * The state of the connection was changed. > > + */ > > +#define RTE_FLOW_CONNTRACK_FLAG_PKT_STATE_CHANGED (1 << 1) > > +/** > > + * Error is detected on this packet for this connection and > > + * an invalid state is set. > > + */ > > +#define RTE_FLOW_CONNTRACK_FLAG_PKT_STATE_INVAL (1 << 2) > > +/** > > + * The HW connection tracking module is disabled. > > + * It can be due to application command or an invalid state. > > + */ > > +#define RTE_FLOW_CONNTRACK_FLAG_HW_DISABLED (1 << 3) > > +/** > > + * The packet contains some bad field(s) and cannot continue > > + * with the conntrack module checking. > > + */ > > +#define RTE_FLOW_CONNTRACK_FLAG_PKT_BAD (1 << 4) > > + > > +/** > > + * @warning > > + * @b EXPERIMENTAL: this structure may change without prior > notice > > + * > > + * RTE_FLOW_ITEM_TYPE_CONNTRACK > > + * > > + * Matches the state of a packet after it passed the connection > > +tracking > > + * examination. The state is a bit mask of one > > +RTE_FLOW_CONNTRACK_FLAG* > > + * or a reasonable combination of these bits. > > + */ > > +struct rte_flow_item_conntrack { > > + uint32_t flags; > > +}; > > + > > +/** Default mask for RTE_FLOW_ITEM_TYPE_CONNTRACK. */ #ifndef > > +__cplusplus static const struct rte_flow_item_conntrack > > +rte_flow_item_conntrack_mask =3D > > { > > + .flags =3D 0xffffffff, > > +}; > > +#endif > > + > > /** > > * Matching pattern item definition. > > * > > @@ -2277,6 +2331,17 @@ enum rte_flow_action_type { > > * same port or across different ports. > > */ > > RTE_FLOW_ACTION_TYPE_INDIRECT, > > + > > + /** > > + * [META] > > + * > > + * Enable tracking a TCP connection state. > > + * > > + * Send packet to HW connection tracking module for > examination. > > + * > > + * See struct rte_flow_action_conntrack. > > + */ > > + RTE_FLOW_ACTION_TYPE_CONNTRACK, > > }; > > > > /** > > @@ -2875,6 +2940,136 @@ struct rte_flow_action_set_dscp { > > */ > > struct rte_flow_action_handle; > > > > +/** > > + * The state of a TCP connection. > > + */ > > +enum rte_flow_conntrack_state { > > + /**< SYN-ACK packet was seen. */ > > + RTE_FLOW_CONNTRACK_STATE_SYN_RECV, > > + /**< 3-way handshark was done. */ > > + RTE_FLOW_CONNTRACK_STATE_ESTABLISHED, > > + /**< First FIN packet was received to close the connection. */ > > + RTE_FLOW_CONNTRACK_STATE_FIN_WAIT, > > + /**< First FIN was ACKed. */ > > + RTE_FLOW_CONNTRACK_STATE_CLOSE_WAIT, > > + /**< Second FIN was received, waiting for the last ACK. */ > > + RTE_FLOW_CONNTRACK_STATE_LAST_ACK, > > + /**< Second FIN was ACKed, connection was closed. */ > > + RTE_FLOW_CONNTRACK_STATE_TIME_WAIT, > > +}; > > + > > +/** > > + * The last passed TCP packet flags of a connection. > > + */ > > +enum rte_flow_conntrack_tcp_last_index { > > + RTE_FLOW_CONNTRACK_FLAG_NONE =3D 0, /**< No Flag. */ > > + RTE_FLOW_CONNTRACK_FLAG_SYN =3D (1 << 0), /**< With SYN flag. */ > > + RTE_FLOW_CONNTRACK_FLAG_SYNACK =3D (1 << 1), /**< With SYN+ACK > > flag. */ > > + RTE_FLOW_CONNTRACK_FLAG_FIN =3D (1 << 2), /**< With FIN flag. */ > > + RTE_FLOW_CONNTRACK_FLAG_ACK =3D (1 << 3), /**< With ACK flag. */ > > + RTE_FLOW_CONNTRACK_FLAG_RST =3D (1 << 4), /**< With RST flag. > */ }; > > + > > +/** > > + * @warning > > + * @b EXPERIMENTAL: this structure may change without prior > notice > > + * > > + * Configuration parameters for each direction of a TCP > connection. > > + */ > > +struct rte_flow_tcp_dir_param { > > + uint32_t scale:4; /**< TCP window scaling factor, 0xF to > disable. */ > > + uint32_t close_initiated:1; /**< The FIN was sent by this > direction. */ > > + /**< An ACK packet has been received by this side. */ > > + uint32_t last_ack_seen:1; > > + /**< If set, indicates that there is unacked data of the > connection. */ > > + uint32_t data_unacked:1; > > + /**< Maximal value of sequence + payload length over sent > > + * packets (next ACK from the opposite direction). > > + */ > > + uint32_t sent_end; > > + /**< Maximal value of (ACK + window size) over received packet > + > > length > > + * over sent packet (maximal sequence could be sent). > > + */ > > + uint32_t reply_end; >=20 > This comment is for all members that are part of the packet, Do you > think it should be in network order? Almost none of the fields are part of the packet. Indeed, most of them are = calculated from the packets information. So I prefer to keep the host order= easy for using and keep all the fields of the whole structure the same endianness format. What do you think? > I can see the advantage in both ways nice I assume the app needs > this data in host byte-order but since in most other cases we use > network byte-order to set values that are coming from the packet > itself maybe it is better to use network byte-order (will also save > the conversion) Only the seq/ack/window in the common part are part of the packets, others = are not. BTW, should we support liberal mode separately for both direction as some "= half-duplex". One direction could work normally and the opposite direct wil= l work in the liberal mode? >=20 > > + /**< Maximal value of actual window size over sent packets. */ > > + uint32_t max_win; > > + /**< Maximal value of ACK over sent packets. */ > > + uint32_t max_ack; > > +}; > > + > > +/** > > + * @warning > > + * @b EXPERIMENTAL: this structure may change without prior > notice > > + * > > + * RTE_FLOW_ACTION_TYPE_CONNTRACK > > + * > > + * Configuration and initial state for the connection tracking > module. > > + * This structure could be used for both setting and query. > > + */ > > +struct rte_flow_action_conntrack { > > + uint16_t peer_port; /**< The peer port number, can be the same > port. > > */ > > + /**< Direction of this connection when creating a flow, the > value only > > + * affects the subsequent flows creation. > > + */ > > + uint32_t is_original_dir:1; > > + /**< Enable / disable the conntrack HW module. When disabled, > the > > + * result will always be RTE_FLOW_CONNTRACK_FLAG_DISABLED. > > + * In this state the HW will act as passthrough. > > + * It only affects this conntrack object in the HW without any > effect > > + * to the other objects. > > + */ > > + uint32_t enable:1; > > + /**< At least one ack was seen, after the connection was > established. > > */ > > + uint32_t live_connection:1; > > + /**< Enable selective ACK on this connection. */ > > + uint32_t selective_ack:1; > > + /**< A challenge ack has passed. */ > > + uint32_t challenge_ack_passed:1; > > + /**< 1: The last packet is seen that comes from the original > direction. > > + * 0: From the reply direction. > > + */ > > + uint32_t last_direction:1; > > + /**< No TCP check will be done except the state change. */ > > + uint32_t liberal_mode:1; > > + /**< The current state of the connection. */ > > + enum rte_flow_conntrack_state state; > > + /**< Scaling factor for maximal allowed ACK window. */ > > + uint8_t max_ack_window; > > + /**< Maximal allowed number of retransmission times. */ > > + uint8_t retransmission_limit; > > + /**< TCP parameters of the original direction. */ > > + struct rte_flow_tcp_dir_param original_dir; > > + /**< TCP parameters of the reply direction. */ > > + struct rte_flow_tcp_dir_param reply_dir; > > + /**< The window value of the last packet passed this conntrack. > */ > > + uint16_t last_window; > > + enum rte_flow_conntrack_tcp_last_index last_index; > > + /**< The sequence of the last packet passed this conntrack. */ > > + uint32_t last_seq; > > + /**< The acknowledgement of the last packet passed this > conntrack. */ > > + uint32_t last_ack; > > + /**< The total value ACK + payload length of the last packet > passed > > + * this conntrack. > > + */ > > + uint32_t last_end; > > +}; > > + > > +/** > > + * RTE_FLOW_ACTION_TYPE_CONNTRACK > > + * > > + * Wrapper structure for the context update interface. > > + * Ports cannot support updating, and the only valid solution is > to > > + * destroy the old context and create a new one instead. > > + */ > > +struct rte_flow_modify_conntrack { > > + /**< New connection tracking parameters to be updated. */ > > + struct rte_flow_action_conntrack new_ct; > > + uint32_t direction:1; /**< The direction field will be updated. > */ > > + /**< All the other fields except direction will be updated. */ > > + uint32_t state:1; > > + uint32_t reserved:30; /**< Reserved bits for the future usage. > */ }; > > + > > /** > > * Field IDs for MODIFY_FIELD action. > > */ > > -- > > 2.19.0.windows.1 BR. Bing