From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id B55E2A00BE; Wed, 8 Jul 2020 08:01:22 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5A3A81DEF1; Wed, 8 Jul 2020 08:01:22 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id 322FA1DEE8 for ; Wed, 8 Jul 2020 08:01:20 +0200 (CEST) IronPort-SDR: LJQK584I4owsACn1K7rBMAM7K4cxv+KEAmYGTIrFq/rd8GzEWhF++hAlpQ0pD2zgUhugX+MH7/ zU54coGnvTvg== X-IronPort-AV: E=McAfee;i="6000,8403,9675"; a="135207277" X-IronPort-AV: E=Sophos;i="5.75,326,1589266800"; d="scan'208";a="135207277" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Jul 2020 23:01:19 -0700 IronPort-SDR: NzPriG/HIE7LIo1ej/MGQ/pRZeysMTQUdBioRDyrEWv0IYuVMiNrpNmNwc2KSjRI31Ot7vJz2N 7jmYcT6EbuSA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,326,1589266800"; d="scan'208";a="457385811" Received: from orsmsx109.amr.corp.intel.com ([10.22.240.7]) by orsmga005.jf.intel.com with ESMTP; 07 Jul 2020 23:01:18 -0700 Received: from ORSEDG001.ED.cps.intel.com (10.7.248.4) by ORSMSX109.amr.corp.intel.com (10.22.240.7) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 7 Jul 2020 23:01:18 -0700 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.174) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 7 Jul 2020 23:01:18 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JBkj7ihTpzKj18VHkOmpwtZLmZrnvRB1i4Lw5sbbr+0eyNWNQ5b2gEvqP+n3Ot7YmD7frfYyb/YEy1FpAj/raH2v+wcM+3xWrC8D6qpwYlYFL30FSGotyavPSa73A2/NLHNdYyKfkuV2CVovu2eX/MHFj41eBIyuevYRAlR/q0OkPjd7GUxdcuopjBGMO1MAzTaOiIbFqDRPzM2hzU1i4W2w/M7aD5aRKQnGuBkvueSlxNsHZssuMdfEe4IDLrTSkTVuNo8gjSPmkZpIIOhTEkot72an3GpqsUmgIacoW5iWHcT4IKdmfgxBS1SIxTfcPmvZMCaB239BvRaYMe4ArA== 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=9nzM1xlRjs8umTl4IG5pLO/GAr/FQpi6AigU3AmH0Lo=; b=QhUatVMQK1gNqOaDU8F4n6G0G7MXb+sCSP1ErT4Qdt5rK0PzHIM4UFlAPWrAuLcDqulGshWZMwCS91mKUPjcrs3WULIsBWI/caD3XBnYbeD/Ia2rH1y/9E26m9JyOuP0l4EoEu4ck5sMg3YpVFtdNV2JvfYaDKePtnklVJ0C84+obtTWaZZYuirKHrWHCJDzAkhVR3fxpLjku4xKF6tky6RyMfciQAupzKukewSw5egBtpucMq+ymdYNucqdnZFwGXCesXhzLJ7lpKKhnam8QsnZH2qfurk2ITpzIJymJVT0IADK0fjNrFvnSMjY52QMsNIq6FNgImHf80GAbVlMFQ== 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=9nzM1xlRjs8umTl4IG5pLO/GAr/FQpi6AigU3AmH0Lo=; b=Lo6H1YY+VOzHeoCt+0F4Cu7tO/0s5Hn01QFgGSJSNQxm6osSwTJOppqwRaAwsRYpkC2p5vBX3+Ht5erAsjRzDJKwR1mcRmtQnLqSbAw8IC6nBNW43x1ntIFIvX+RD2goEG3yuftm+JMZDY6ocrbGH7kfklTVurTAMNMoKUt18XQ= Received: from MN2PR11MB3807.namprd11.prod.outlook.com (2603:10b6:208:f0::24) by MN2PR11MB3981.namprd11.prod.outlook.com (2603:10b6:208:13d::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3153.27; Wed, 8 Jul 2020 06:01:17 +0000 Received: from MN2PR11MB3807.namprd11.prod.outlook.com ([fe80::401c:b4b:31c4:98b8]) by MN2PR11MB3807.namprd11.prod.outlook.com ([fe80::401c:b4b:31c4:98b8%3]) with mapi id 15.20.3153.029; Wed, 8 Jul 2020 06:01:16 +0000 From: "Xing, Beilei" To: "Sun, GuinanX" , "dev@dpdk.org" CC: "Guo, Jia" Thread-Topic: [PATCH v4] net/i40e: support cloud filter with L4 port Thread-Index: AQHWVNZ+uZ9MgMr+1kS/WO9koBt69Kj9LBwg Date: Wed, 8 Jul 2020 06:01:16 +0000 Message-ID: References: <20200611052416.14592-1-guinanx.sun@intel.com> <20200708031153.6535-1-guinanx.sun@intel.com> In-Reply-To: <20200708031153.6535-1-guinanx.sun@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.102.204.45] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 58ac35d1-475f-43ee-dfba-08d823045409 x-ms-traffictypediagnostic: MN2PR11MB3981: 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:118; x-forefront-prvs: 04583CED1A x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: SER52ElxP2XW5YcvThTb5zoQHJlR+f/cXdsC2Ps4g/bbE5ahE7r6Vw7MJIlrTfTdtpBYZbEuhMHvcWXnQL1R/DENSbY4KvafN6aZqSAZ1aLJGKKImjfV51jPEv9GhdghrKBEU2KiwWQYKLZmLDAHUDtOEQuXqvpgT84eb6cVyrK/UiF3DLMWXtYy9qv6ec28qQfmyg6J37tO4YGxuJ+Q0nen2FVPn00hnt+NUu9gAObDCp3hfYBgS0pBCXNxAKOFBxVmF7egdIbZHOwfrt0BpJWq6snGLFaWC4vIbZnycyXdxiC13DLcyYQ030AzvTbJ+O6fPGNQ75CVCBEDd4C9NNeV0V8gWUxN+duzC8P8vv3xTT1GqBk6oMhRhtcnKpvE x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR11MB3807.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(396003)(346002)(376002)(366004)(39860400002)(136003)(33656002)(5660300002)(76116006)(478600001)(52536014)(83380400001)(30864003)(86362001)(110136005)(4326008)(107886003)(316002)(186003)(8936002)(7696005)(71200400001)(8676002)(55016002)(26005)(66946007)(2906002)(19627235002)(9686003)(6506007)(53546011)(66476007)(66556008)(64756008)(66446008)(21314003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: N4xU7f/Z+YMC/0gMcUk8YtEU+ojNvKDfPP+zyGQ2/xkYtyV+ucadurlRo3+ES0XG0sCjC99gGk6ACxBmO4RZZK/mJQ36bA44IXb9Ec3RmmPn3aGrK87Sy+gpR0PqrtpMeKy11RxIS1v2o4MNYnrID4tOR4RrwMXOTQ80hsK5pM+FMY3ryYJpnx1Vr2w0N/zcAfO2zvjcYAcyUHHh+jiTtjvynpsC6m3mO9NnsJKMo4VmO/1zcfTMg84NmEAhOCf6LN1BCFS7UWO7fkitfbogybi2MyNlrd5eXEyUJGhOJG6Ec0l6qhs0oZuQzTQrLckz9d7AxJYXMgOeTlkr7ALVakwVkaBwxSSjxJ3XS2NJpKx5VPvPmfMo7RvU0o0jpHL03hzQQprqMkEMy//bA6i05Z3WNRiW+/uBhAJwEIYckxQ60yumiZXBWMf7GWCP6iOOGHO0pYXu2gKDZeVoR0P9U3uro9anF/0kDAVAJ2M0EzzuTx2VP2OMALpu1CqiVEJh 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: MN2PR11MB3807.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 58ac35d1-475f-43ee-dfba-08d823045409 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Jul 2020 06:01:16.7740 (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: iDB6EnhVg42VfvZfFZW7cxRWUbyiFexbquDVNGN9FvEvAjrqguewkn8lQ+ITzmXHOYDb2eOcqw1ovuMUY0ENgg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB3981 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v4] net/i40e: support cloud filter with L4 port X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" > -----Original Message----- > From: Sun, GuinanX > Sent: Wednesday, July 8, 2020 11:12 AM > To: dev@dpdk.org > Cc: Xing, Beilei ; Guo, Jia ; S= un, > GuinanX > Subject: [PATCH v4] net/i40e: support cloud filter with L4 port >=20 > This patch enables cloud filter for IPv4_UDP/IPv4_TCP/IPv4_SCTP with SRC > port only or DST port only. Does it support IPv6_XXX? > This supports different filter types for the same packet type. > E.g. one IPv4_UDP rules with SRC port only and another IPv4_UDP rule with > DST port only. >=20 > Signed-off-by: Guinan Sun > --- > v4: > * Modify release_20_08.rst and i40e.rst. > * Rename L4 port filter. > * Modify commit log. > * Fixed the variable assignment. > v3: > * Add limitation to i40e.rst. > * Rename variables. > * Fixed the variable assignment. > v2: > * Fixed code style and variable naming. > --- > doc/guides/nics/i40e.rst | 7 + > doc/guides/rel_notes/release_20_08.rst | 11 ++ > drivers/net/i40e/i40e_ethdev.c | 200 ++++++++++++++++++++- > drivers/net/i40e/i40e_ethdev.h | 18 ++ > drivers/net/i40e/i40e_flow.c | 230 +++++++++++++++++++++++++ > 5 files changed, 465 insertions(+), 1 deletion(-) >=20 > diff --git a/doc/guides/nics/i40e.rst b/doc/guides/nics/i40e.rst index > 00c3042d5..cf35d51b3 100644 > --- a/doc/guides/nics/i40e.rst > +++ b/doc/guides/nics/i40e.rst > @@ -736,6 +736,13 @@ with DPDK, then the configuration will also impact > port B in the NIC with kernel driver, which don't want to use the TPID. > So PMD reports warning to clarify what is changed by writing global regi= ster. >=20 > +Cloud Filter > +~~~~~~~~~~~~ > + > +When programming cloud filters for IPv4_UDP/IPv4_TCP/IPv4_SCTP with SRC Same as above. > +port only or DST port only, it will make any cloud filter using > +inner_vlan or tunnel key invalid. Default configuration will be recovere= d only > by NIC core reset. > + > High Performance of Small Packets on 40GbE NIC > ---------------------------------------------- >=20 > diff --git a/doc/guides/rel_notes/release_20_08.rst > b/doc/guides/rel_notes/release_20_08.rst > index eaa9d13b5..c64083cf0 100644 > --- a/doc/guides/rel_notes/release_20_08.rst > +++ b/doc/guides/rel_notes/release_20_08.rst > @@ -137,6 +137,17 @@ New Features > See the :doc:`../sample_app_ug/l2_forward_real_virtual` for more > details of this parameter usage. >=20 > +* **Updated Intel i40e driver.** > + > + Updated i40e PMD with new features and improvements, including: > + > + * Added a new type of cloud filte. * Improved cloud filter > + This new feature enables cloud filter for IPv4_UDP/IPv4_TCP/IPv4_SCT= P > + with SRC port only or DST port only. > + This supports different filter types for the same packet type. > + E.g. one IPv4_UDP rules with SRC port only and another IPv4_UDP rule > + with DST port only. > + >=20 > Removed Items > ------------- > diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethde= v.c > index 777e14926..fd4582c84 100644 > --- a/drivers/net/i40e/i40e_ethdev.c > +++ b/drivers/net/i40e/i40e_ethdev.c > @@ -7944,6 +7944,13 @@ i40e_dev_tunnel_filter_set(struct i40e_pf *pf, > #define I40E_TR_GRE_KEY_MASK 0x400 > #define I40E_TR_GRE_KEY_WITH_XSUM_MASK 0x800 > #define I40E_TR_GRE_NO_KEY_MASK 0x8000 > +#define I40E_AQC_REPLACE_CLOUD_CMD_INPUT_PORT_TR_WORD0 0x49 > #define > +I40E_AQC_REPLACE_CLOUD_CMD_INPUT_DIRECTION_WORD0 0x41 #define > +I40E_AQC_REPLACE_CLOUD_CMD_INPUT_INGRESS_WORD0 0x80 > +#define I40E_DIRECTION_INGRESS_KEY 0x8000 > +#define I40E_TR_L4_TYPE_TCP 0x2 > +#define I40E_TR_L4_TYPE_UDP 0x4 > +#define I40E_TR_L4_TYPE_SCTP 0x8 >=20 > static enum > i40e_status_code i40e_replace_mpls_l1_filter(struct i40e_pf *pf) @@ -824= 2,6 > +8249,132 @@ i40e_status_code i40e_replace_gtp_cloud_filter(struct i40e_p= f > *pf) > return status; > } >=20 > +static enum i40e_status_code > +i40e_replace_port_l1_filter(struct i40e_pf *pf, > + enum i40e_l4_port_type l4_port_type) { > + struct i40e_aqc_replace_cloud_filters_cmd_buf filter_replace_buf; > + struct i40e_aqc_replace_cloud_filters_cmd filter_replace; > + enum i40e_status_code status =3D I40E_SUCCESS; > + struct i40e_hw *hw =3D I40E_PF_TO_HW(pf); > + struct rte_eth_dev *dev =3D ((struct i40e_adapter *)hw->back)->eth_dev; > + > + if (pf->support_multi_driver) { > + PMD_DRV_LOG(ERR, "Replace l1 filter is not supported."); > + return I40E_NOT_SUPPORTED; > + } > + > + memset(&filter_replace, 0, > + sizeof(struct i40e_aqc_replace_cloud_filters_cmd)); > + memset(&filter_replace_buf, 0, > + sizeof(struct i40e_aqc_replace_cloud_filters_cmd_buf)); > + > + /* create L1 filter */ > + if (l4_port_type =3D=3D I40E_L4_PORT_TYPE_SRC) { > + filter_replace.old_filter_type =3D > + > I40E_AQC_REPLACE_CLOUD_CMD_INPUT_FV_TUNNLE_KEY; > + filter_replace.new_filter_type =3D > I40E_AQC_ADD_L1_FILTER_0X11; > + filter_replace_buf.data[8] =3D > + > I40E_AQC_REPLACE_CLOUD_CMD_INPUT_FV_SRC_PORT; > + } else { > + filter_replace.old_filter_type =3D > + > I40E_AQC_REPLACE_CLOUD_CMD_INPUT_FV_STAG_IVLAN; > + filter_replace.new_filter_type =3D > I40E_AQC_ADD_L1_FILTER_0X10; > + filter_replace_buf.data[8] =3D > + > I40E_AQC_REPLACE_CLOUD_CMD_INPUT_FV_DST_PORT; > + } > + > + filter_replace.tr_bit =3D 0; > + /* Prepare the buffer, 3 entries */ > + filter_replace_buf.data[0] =3D > + > I40E_AQC_REPLACE_CLOUD_CMD_INPUT_DIRECTION_WORD0; > + filter_replace_buf.data[0] |=3D > + I40E_AQC_REPLACE_CLOUD_CMD_INPUT_VALIDATED; > + filter_replace_buf.data[2] =3D 0x00; > + filter_replace_buf.data[3] =3D > + I40E_AQC_REPLACE_CLOUD_CMD_INPUT_INGRESS_WORD0; > + filter_replace_buf.data[4] =3D > + I40E_AQC_REPLACE_CLOUD_CMD_INPUT_PORT_TR_WORD0; > + filter_replace_buf.data[4] |=3D > + I40E_AQC_REPLACE_CLOUD_CMD_INPUT_VALIDATED; > + filter_replace_buf.data[5] =3D 0x00; > + filter_replace_buf.data[6] =3D I40E_TR_L4_TYPE_UDP | > + I40E_TR_L4_TYPE_TCP | > + I40E_TR_L4_TYPE_SCTP; > + filter_replace_buf.data[7] =3D 0x00; > + filter_replace_buf.data[8] |=3D > + I40E_AQC_REPLACE_CLOUD_CMD_INPUT_VALIDATED; > + filter_replace_buf.data[9] =3D 0x00; > + filter_replace_buf.data[10] =3D 0xFF; > + filter_replace_buf.data[11] =3D 0xFF; > + > + status =3D i40e_aq_replace_cloud_filters(hw, &filter_replace, > + &filter_replace_buf); > + if (!status && filter_replace.old_filter_type !=3D > + filter_replace.new_filter_type) > + PMD_DRV_LOG(WARNING, "i40e device %s changed cloud l1 > type." > + " original: 0x%x, new: 0x%x", > + dev->device->name, > + filter_replace.old_filter_type, > + filter_replace.new_filter_type); > + > + return status; > +} > + > +static enum i40e_status_code > +i40e_replace_port_cloud_filter(struct i40e_pf *pf, > + enum i40e_l4_port_type l4_port_type) { > + struct i40e_aqc_replace_cloud_filters_cmd_buf filter_replace_buf; > + struct i40e_aqc_replace_cloud_filters_cmd filter_replace; > + enum i40e_status_code status =3D I40E_SUCCESS; > + struct i40e_hw *hw =3D I40E_PF_TO_HW(pf); > + struct rte_eth_dev *dev =3D ((struct i40e_adapter *)hw->back)->eth_dev; > + > + if (pf->support_multi_driver) { > + PMD_DRV_LOG(ERR, "Replace cloud filter is not supported."); > + return I40E_NOT_SUPPORTED; > + } > + > + memset(&filter_replace, 0, > + sizeof(struct i40e_aqc_replace_cloud_filters_cmd)); > + memset(&filter_replace_buf, 0, > + sizeof(struct i40e_aqc_replace_cloud_filters_cmd_buf)); > + > + if (l4_port_type =3D=3D I40E_L4_PORT_TYPE_SRC) { > + filter_replace.old_filter_type =3D > I40E_AQC_ADD_CLOUD_FILTER_IIP; > + filter_replace.new_filter_type =3D > + I40E_AQC_ADD_CLOUD_FILTER_0X11; > + filter_replace_buf.data[4] =3D > I40E_AQC_ADD_CLOUD_FILTER_0X11; > + } else { > + filter_replace.old_filter_type =3D > I40E_AQC_ADD_CLOUD_FILTER_OIP; > + filter_replace.new_filter_type =3D > + I40E_AQC_ADD_CLOUD_FILTER_0X10; > + filter_replace_buf.data[4] =3D > I40E_AQC_ADD_CLOUD_FILTER_0X10; > + } > + > + filter_replace.valid_flags =3D I40E_AQC_REPLACE_CLOUD_FILTER; > + filter_replace.tr_bit =3D 0; > + /* Prepare the buffer, 2 entries */ > + filter_replace_buf.data[0] =3D > I40E_AQC_REPLACE_CLOUD_CMD_INPUT_FV_STAG; > + filter_replace_buf.data[0] |=3D > + I40E_AQC_REPLACE_CLOUD_CMD_INPUT_VALIDATED; > + filter_replace_buf.data[4] |=3D > + I40E_AQC_REPLACE_CLOUD_CMD_INPUT_VALIDATED; > + status =3D i40e_aq_replace_cloud_filters(hw, &filter_replace, > + &filter_replace_buf); > + > + if (!status && filter_replace.old_filter_type !=3D > + filter_replace.new_filter_type) > + PMD_DRV_LOG(WARNING, "i40e device %s changed cloud > filter type." > + " original: 0x%x, new: 0x%x", > + dev->device->name, > + filter_replace.old_filter_type, > + filter_replace.new_filter_type); > + > + return status; > +} > + > int > i40e_dev_consistent_tunnel_filter_set(struct i40e_pf *pf, > struct i40e_tunnel_filter_conf *tunnel_filter, @@ -8389,6 > +8522,62 @@ i40e_dev_consistent_tunnel_filter_set(struct i40e_pf *pf, > pfilter->general_fields[0] =3D tunnel_filter->inner_vlan; > pfilter->general_fields[1] =3D tunnel_filter->outer_vlan; > big_buffer =3D 1; > + break; > + case I40E_CLOUD_TYPE_UDP: > + case I40E_CLOUD_TYPE_TCP: > + case I40E_CLOUD_TYPE_SCTP: > + if (tunnel_filter->l4_port_type =3D=3D I40E_L4_PORT_TYPE_SRC) { > + if (!pf->sport_replace_flag) { > + i40e_replace_port_l1_filter(pf, > + tunnel_filter->l4_port_type); > + i40e_replace_port_cloud_filter(pf, > + tunnel_filter->l4_port_type); > + pf->sport_replace_flag =3D 1; > + } > + teid_le =3D rte_cpu_to_le_32(tunnel_filter->tenant_id); > + pfilter- > >general_fields[I40E_AQC_ADD_CLOUD_FV_FLU_0X11_WORD0] =3D > + I40E_DIRECTION_INGRESS_KEY; > + > + if (tunnel_filter->tunnel_type =3D=3D > I40E_CLOUD_TYPE_UDP) > + pfilter- > >general_fields[I40E_AQC_ADD_CLOUD_FV_FLU_0X11_WORD1] =3D > + I40E_TR_L4_TYPE_UDP; > + else if (tunnel_filter->tunnel_type =3D=3D > I40E_CLOUD_TYPE_TCP) > + pfilter- > >general_fields[I40E_AQC_ADD_CLOUD_FV_FLU_0X11_WORD1] =3D > + I40E_TR_L4_TYPE_TCP; > + else > + pfilter- > >general_fields[I40E_AQC_ADD_CLOUD_FV_FLU_0X11_WORD1] =3D > + I40E_TR_L4_TYPE_SCTP; > + > + pfilter- > >general_fields[I40E_AQC_ADD_CLOUD_FV_FLU_0X11_WORD2] =3D > + (teid_le >> 16) & 0xFFFF; > + big_buffer =3D 1; > + } else { > + if (!pf->dport_replace_flag) { > + i40e_replace_port_l1_filter(pf, > + tunnel_filter->l4_port_type); > + i40e_replace_port_cloud_filter(pf, > + tunnel_filter->l4_port_type); > + pf->dport_replace_flag =3D 1; > + } > + teid_le =3D rte_cpu_to_le_32(tunnel_filter->tenant_id); > + pfilter- > >general_fields[I40E_AQC_ADD_CLOUD_FV_FLU_0X10_WORD0] =3D > + I40E_DIRECTION_INGRESS_KEY; > + > + if (tunnel_filter->tunnel_type =3D=3D > I40E_CLOUD_TYPE_UDP) > + pfilter- > >general_fields[I40E_AQC_ADD_CLOUD_FV_FLU_0X10_WORD1] =3D > + I40E_TR_L4_TYPE_UDP; > + else if (tunnel_filter->tunnel_type =3D=3D > I40E_CLOUD_TYPE_TCP) > + pfilter- > >general_fields[I40E_AQC_ADD_CLOUD_FV_FLU_0X10_WORD1] =3D > + I40E_TR_L4_TYPE_TCP; > + else > + pfilter- > >general_fields[I40E_AQC_ADD_CLOUD_FV_FLU_0X10_WORD1] =3D > + I40E_TR_L4_TYPE_SCTP; > + > + pfilter- > >general_fields[I40E_AQC_ADD_CLOUD_FV_FLU_0X10_WORD2] =3D > + (teid_le >> 16) & 0xFFFF; > + big_buffer =3D 1; > + } Can we merge the duplicate code? > + > break; > default: > /* Other tunnel types is not supported. */ @@ -8412,7 > +8601,16 @@ i40e_dev_consistent_tunnel_filter_set(struct i40e_pf *pf, > else if (tunnel_filter->tunnel_type =3D=3D I40E_TUNNEL_TYPE_QINQ) > pfilter->element.flags |=3D > I40E_AQC_ADD_CLOUD_FILTER_0X10; > - else { > + else if (tunnel_filter->tunnel_type =3D=3D I40E_CLOUD_TYPE_UDP || > + tunnel_filter->tunnel_type =3D=3D I40E_CLOUD_TYPE_TCP || > + tunnel_filter->tunnel_type =3D=3D I40E_CLOUD_TYPE_SCTP) { > + if (tunnel_filter->l4_port_type =3D=3D I40E_L4_PORT_TYPE_SRC) > + pfilter->element.flags |=3D > + I40E_AQC_ADD_L1_FILTER_0X11; Please check I40E_AQC_ADD_L1_FILTER_0X11 or I40E_AQC_ADD_CLOUD_FILTER_0X11= here. > + else > + pfilter->element.flags |=3D > + I40E_AQC_ADD_CLOUD_FILTER_0X10; > + } else { > val =3D i40e_dev_get_filter_type(tunnel_filter->filter_type, > &pfilter->element.flags); > if (val < 0) {