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 AB580A0543; Tue, 21 Jun 2022 09:51:46 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4D7704069C; Tue, 21 Jun 2022 09:51:46 +0200 (CEST) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2046.outbound.protection.outlook.com [40.107.236.46]) by mails.dpdk.org (Postfix) with ESMTP id 483CF40151 for ; Tue, 21 Jun 2022 09:51:44 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SRgrHCIoL2rrDICqo5WrnC9xL4YFEJV3AAZujfEFudrrwlcckAGy3yCKH33sTfSFEEGRhn30GY1zvv0Cu7BRzabDMFLKOkXwPWqOaS4TmsogYE1T32gJqrmwFQ2xrD1BOJlQlh73EzrvoUss9i7jW/G7M7sjrZS9jfZ5Es42nVT1TYCxOUmMlBR0PVTWqmO8r+Waasok1z8rgVcYkvUyVfcYrwuTZFh7BXdvsLooho36RQxmZtxTlE1FqhqghvLQPs4khElbZqNwv942/ICXvRlah83dBR3GAks0SEI/9fqCu8JGAo0eAU/sB1Hgung5u2enSMTD6qn7m2y/4G5DHQ== 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=ai+M+zCLJ3MTyRO0Ozsu2TxCeP2Vhz+9HQoCC1wz7RA=; b=hP/gSx0ft9VbK3sIa9gPzDJMPnbqF656rG2+VD33UzNFTfQbS0KElnIVaJDD98nmFm25ZlvfNFjHsxYeqRg51y7l33M2ij+panu1tv+3kC/FytTf5lu8YiHuMjRMkwcS1nwRREAD44SHiyjvQSzDoScXsmAbLMuqyDQMHjEA/beaHxjlDXf0ySp3owwN3pvq1xKib4GqoH+LX5CpSmxwwpKvTNwUmmCiwLqilpUvYUz2PuU2pvFYa9H8faJF0NI+VipZS8OeGgcwAzAkXF03xwL2swauHzOgOyh/mN+yIbNesbwm/JHBwtY/n2FvkPWRuCp/FpMahGglgFXlWGy5yw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 149.199.80.198) smtp.rcpttodomain=huawei.com smtp.mailfrom=xilinx.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=xilinx.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector2-xilinx-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ai+M+zCLJ3MTyRO0Ozsu2TxCeP2Vhz+9HQoCC1wz7RA=; b=TdtzRx8VAG93fqDtc+pRQYBKJuhS9xKl4uib17NuRVmn0QJkvgHzBPwNvOWb0RjdvsQa0yCXorEy41i+urrCoPSKgjDagDExfKvu/fDJwugTYii4tBLJWzSzx8hpQmTF3+/Rd94Cs2yW48adyA9MSJQDdQY+iXz9PpY3F2ovcfs= Received: from SA9PR13CA0074.namprd13.prod.outlook.com (2603:10b6:806:23::19) by CY4PR02MB2439.namprd02.prod.outlook.com (2603:10b6:903:72::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.16; Tue, 21 Jun 2022 07:51:41 +0000 Received: from SN1NAM02FT0019.eop-nam02.prod.protection.outlook.com (2603:10b6:806:23:cafe::d) by SA9PR13CA0074.outlook.office365.com (2603:10b6:806:23::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5373.9 via Frontend Transport; Tue, 21 Jun 2022 07:51:41 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 149.199.80.198) smtp.mailfrom=xilinx.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=xilinx.com; Received-SPF: Pass (protection.outlook.com: domain of xilinx.com designates 149.199.80.198 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.80.198; helo=xir-pvapexch02.xlnx.xilinx.com; pr=C Received: from xir-pvapexch02.xlnx.xilinx.com (149.199.80.198) by SN1NAM02FT0019.mail.protection.outlook.com (10.97.4.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.5353.14 via Frontend Transport; Tue, 21 Jun 2022 07:51:41 +0000 Received: from xir-pvapexch02.xlnx.xilinx.com (172.21.17.17) by xir-pvapexch02.xlnx.xilinx.com (172.21.17.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Tue, 21 Jun 2022 08:51:39 +0100 Received: from smtp.xilinx.com (172.21.105.198) by xir-pvapexch02.xlnx.xilinx.com (172.21.17.17) with Microsoft SMTP Server id 15.1.2176.14 via Frontend Transport; Tue, 21 Jun 2022 08:51:39 +0100 Envelope-to: lihuisong@huawei.com, xiaoyun.li@intel.com, aman.deep.singh@intel.com, yuying.zhang@intel.com, andrew.rybchenko@oktetlabs.ru, dev@dpdk.org, thomas@monjalon.net, huangdaode@huawei.com Received: from [10.71.119.54] (port=59947) by smtp.xilinx.com with esmtp (Exim 4.90) (envelope-from ) id 1o3Yfj-0006pC-EU; Tue, 21 Jun 2022 08:51:39 +0100 Message-ID: <1f205d2f-ec36-d471-265e-94d05f31fb7f@xilinx.com> Date: Tue, 21 Jun 2022 08:51:38 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 Subject: Re: [PATCH V3 app/testpmd 4/4] app/testpmd: remove duplicated flow type to string table Content-Language: en-US To: "lihuisong (C)" , , , , CC: , , References: <20220429102445.23711-1-lihuisong@huawei.com> <20220607083246.12259-1-lihuisong@huawei.com> <20220607083246.12259-5-lihuisong@huawei.com> <20a69b54-40ca-f1be-3253-4f5aed741919@huawei.com> <1b05f308-d313-6e62-0a4f-76f2f6dfc918@xilinx.com> From: Ferruh Yigit In-Reply-To: Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b8f1cf39-eb3f-449c-7a05-08da535ae11c X-MS-TrafficTypeDiagnostic: CY4PR02MB2439:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: CwrroOlDve/A4Nl4k6qQwtxlYsYMQ5K21hLr4KC+9sqss1kzP6puWgZfegdLuUqbUuB4YWpIV/TF5sYgencNZrG1JdoZO6iKJmkNY+AMkduwmMbebmlhp/nrljRihcm18N9s93QBQiMRYgSlrh5SPCeZrZ5dZvyFNvfUOqeR/tpDGJJr5sRxJOwzMCCRFqUasJ9Org7cNvAuvWs82sPMzwUweZgtabNLDUt+NVPT3DEYvXgT3kfIU/CSG4tH0QmnKl60sVGJNC4tYkpEFPUw/UTxlrJexkDeG5JLv/uzPlFblEfQYg0e7aDE53PoJm4KGCn372OL8Jyy2wiFfjIdvGPt3CGyX0Df7XcUuUxwu5g39sWyPY+Pk0KB+Y0yZD262wiksy7yJqyLC6y2DVKUwKtx8Co5CxAUgaBAnVaNDdrd1tcgz1GikaLzpV13Yr6DdykPoW+nDp5oIxMQxFpy+hr0CEvodWrDETduBVb1oIHPk+c/x6Zxzkl7kmIbSWkCTTIr7GuhMAVAqNMqUFatsA6rbTQBweiBsibfNFCWgZAZWn5KQVit1IkxPUBYmP+G4i5YLLE6hmxm4p6Ogfqx3XsHYjSnHW+BseJKTBTojM4FnJtll0xdqZDiqEXPppiF1wWjBPKqrCZaDufcKPF/AyEPd4L9miluSvLTaFnAkjbE2FsF1yvJtLSojGzJbre901kkfuwsMDoGe1zNP3Z2VwY5PjL5TqnLs5BuLTLaKp9XlUNRl78Ra3D9IZwgzV9klvauF0+tY5Ftjn2Ek3WNgkZeDAsKXabllrkWqPtG8pnv6/qXT9yf90pf5YtMFnSj X-Forefront-Antispam-Report: CIP:149.199.80.198; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:xir-pvapexch02.xlnx.xilinx.com; PTR:unknown-80-198.xilinx.com; CAT:NONE; SFS:(13230016)(4636009)(396003)(39860400002)(376002)(346002)(136003)(46966006)(40470700004)(36840700001)(41300700001)(26005)(83380400001)(36860700001)(40480700001)(9786002)(82740400003)(2616005)(40460700003)(4326008)(70586007)(110136005)(356005)(316002)(8676002)(54906003)(36756003)(31686004)(8936002)(2906002)(44832011)(82310400005)(5660300002)(70206006)(53546011)(186003)(31696002)(47076005)(426003)(336012)(478600001)(7636003)(50156003)(43740500002); DIR:OUT; SFP:1101; X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jun 2022 07:51:41.2592 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b8f1cf39-eb3f-449c-7a05-08da535ae11c X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.80.198]; Helo=[xir-pvapexch02.xlnx.xilinx.com] X-MS-Exchange-CrossTenant-AuthSource: SN1NAM02FT0019.eop-nam02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR02MB2439 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 On 6/21/2022 3:18 AM, lihuisong (C) wrote: > CAUTION: This message has originated from an External Source. Please use > proper judgment and caution when opening attachments, clicking links, or > responding to this email. > > > 在 2022/6/20 20:38, Ferruh Yigit 写道: >> On 6/9/2022 4:26 AM, lihuisong (C) wrote: >>> CAUTION: This message has originated from an External Source. Please >>> use proper judgment and caution when opening attachments, clicking >>> links, or responding to this email. >>> >>> >>> 在 2022/6/7 23:47, Ferruh Yigit 写道: >>>> On 6/7/2022 9:32 AM, Huisong Li wrote: >>>> >>>>> >>>>> From: Ferruh Yigit >>>>> >>>>> Flow type table has two instance, one is used for flow type to string >>>>> conversion, and other is used for string to flow type conversion. >>>>> And tables are diverged by time. >>>>> >>>>> Unifying tables to prevent maintaining two different tables. >>>>> >>>>> Note: made 'flowtype_to_str()' non-static to prevent build error >>>>> for the >>>>> case PMDs using it disables. Making function generic, not for some >>>>> PMDs. >>>>> >>>>> Signed-off-by: Ferruh Yigit >>>>> Signed-off-by: Huisong Li >>>>> --- >>>>>   app/test-pmd/cmdline.c | 41 +------------------ >>>>>   app/test-pmd/config.c  | 92 >>>>> +++++++++++++++++++++++++++--------------- >>>>>   app/test-pmd/testpmd.h |  5 +++ >>>>>   3 files changed, 65 insertions(+), 73 deletions(-) >>>>> >>>>> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c >>>>> index fdd0cada3b..e44bb3f475 100644 >>>>> --- a/app/test-pmd/cmdline.c >>>>> +++ b/app/test-pmd/cmdline.c >>>>> @@ -10591,45 +10591,6 @@ do { \ >>>>> >>>>>   #ifdef RTE_NET_I40E >>>>> >>>>> -static uint16_t >>>>> -str2flowtype(char *string) >>>>> -{ >>>>> -       uint8_t i = 0; >>>>> -       static const struct { >>>>> -               char str[32]; >>>>> -               uint16_t type; >>>>> -       } flowtype_str[] = { >>>>> -               {"raw", RTE_ETH_FLOW_RAW}, >>>>> -               {"ipv4", RTE_ETH_FLOW_IPV4}, >>>>> -               {"ipv4-frag", RTE_ETH_FLOW_FRAG_IPV4}, >>>>> -               {"ipv4-tcp", RTE_ETH_FLOW_NONFRAG_IPV4_TCP}, >>>>> -               {"ipv4-udp", RTE_ETH_FLOW_NONFRAG_IPV4_UDP}, >>>>> -               {"ipv4-sctp", RTE_ETH_FLOW_NONFRAG_IPV4_SCTP}, >>>>> -               {"ipv4-other", RTE_ETH_FLOW_NONFRAG_IPV4_OTHER}, >>>>> -               {"ipv6", RTE_ETH_FLOW_IPV6}, >>>>> -               {"ipv6-frag", RTE_ETH_FLOW_FRAG_IPV6}, >>>>> -               {"ipv6-tcp", RTE_ETH_FLOW_NONFRAG_IPV6_TCP}, >>>>> -               {"ipv6-udp", RTE_ETH_FLOW_NONFRAG_IPV6_UDP}, >>>>> -               {"ipv6-sctp", RTE_ETH_FLOW_NONFRAG_IPV6_SCTP}, >>>>> -               {"ipv6-other", RTE_ETH_FLOW_NONFRAG_IPV6_OTHER}, >>>>> -               {"l2_payload", RTE_ETH_FLOW_L2_PAYLOAD}, >>>>> -               {"ipv6-ex", RTE_ETH_FLOW_IPV6_EX}, >>>>> -               {"ipv6-tcp-ex", RTE_ETH_FLOW_IPV6_TCP_EX}, >>>>> -               {"ipv6-udp-ex", RTE_ETH_FLOW_IPV6_UDP_EX}, >>>>> -               {"gtpu", RTE_ETH_FLOW_GTPU}, >>>>> -       }; >>>>> - >>>>> -       for (i = 0; i < RTE_DIM(flowtype_str); i++) { >>>>> -               if (!strcmp(flowtype_str[i].str, string)) >>>>> -                       return flowtype_str[i].type; >>>>> -       } >>>>> - >>>>> -       if (isdigit(string[0]) && atoi(string) > 0 && atoi(string) >>>>> < 64) >>>>> -               return (uint16_t)atoi(string); >>>>> - >>>>> -       return RTE_ETH_FLOW_UNKNOWN; >>>>> -} >>>>> - >>>>>   /* *** deal with flow director filter *** */ >>>>>   struct cmd_flow_director_result { >>>>>          cmdline_fixed_string_t flow_director_filter; >>>>> @@ -10658,7 +10619,7 @@ cmd_flow_director_filter_parsed(void >>>>> *parsed_result, >>>>>          struct rte_pmd_i40e_flow_type_mapping >>>>> mapping[RTE_PMD_I40E_FLOW_TYPE_MAX]; >>>>>          struct rte_pmd_i40e_pkt_template_conf conf; >>>>> -       uint16_t flow_type = str2flowtype(res->flow_type); >>>>> +       uint16_t flow_type = str_to_flowtype(res->flow_type); >>>>>          uint16_t i, port = res->port_id; >>>>>          uint8_t add; >>>>> >>>>> diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c >>>>> index 209cbcc514..ed0be8036b 100644 >>>>> --- a/app/test-pmd/config.c >>>>> +++ b/app/test-pmd/config.c >>>>> @@ -86,6 +86,38 @@ static const struct { >>>>>          }, >>>>>   }; >>>>> >>>>> +#if defined(RTE_NET_I40E) || defined(RTE_NET_IXGBE) >>>>> + >>>> >>>> Although right now 'flowtype_to_str()' & 'str_to_flowtype()' are used >>>> by code for above PMDs, the functionality is nothing special to any >>>> PMD. >>>> What about making above functions as non-static functions and get rid >>>> of all related #ifdef? >>>> >>> Currently, they are not used anywhere but here. If remove #ifdef, a >>> warning will encounter. >> >> If you make functions non-static, I think there won't be any warnings. >> >> It is better to make functionality more generic, instead of PMD specific. > These codes has been moved to i40e PMD. Can we remove this patch from > the set? There are two set of arrays, one moved to i40e folder, other not, right? I think better to move 'str2flowtype()' back to testpmd and unify arrays. As discussed above it is not i40e specific. >> >>>> >>>>> +static const struct { >>>>> +       char str[32]; >>>>> +       uint16_t ftype; >>>>> +} flowtype_str_table[] = { >>>>> +       {"raw", RTE_ETH_FLOW_RAW}, >>>>> +       {"ipv4", RTE_ETH_FLOW_IPV4}, >>>>> +       {"ipv4-frag", RTE_ETH_FLOW_FRAG_IPV4}, >>>>> +       {"ipv4-tcp", RTE_ETH_FLOW_NONFRAG_IPV4_TCP}, >>>>> +       {"ipv4-udp", RTE_ETH_FLOW_NONFRAG_IPV4_UDP}, >>>>> +       {"ipv4-sctp", RTE_ETH_FLOW_NONFRAG_IPV4_SCTP}, >>>>> +       {"ipv4-other", RTE_ETH_FLOW_NONFRAG_IPV4_OTHER}, >>>>> +       {"ipv6", RTE_ETH_FLOW_IPV6}, >>>>> +       {"ipv6-frag", RTE_ETH_FLOW_FRAG_IPV6}, >>>>> +       {"ipv6-tcp", RTE_ETH_FLOW_NONFRAG_IPV6_TCP}, >>>>> +       {"ipv6-udp", RTE_ETH_FLOW_NONFRAG_IPV6_UDP}, >>>>> +       {"ipv6-sctp", RTE_ETH_FLOW_NONFRAG_IPV6_SCTP}, >>>>> +       {"ipv6-other", RTE_ETH_FLOW_NONFRAG_IPV6_OTHER}, >>>>> +       {"l2_payload", RTE_ETH_FLOW_L2_PAYLOAD}, >>>>> +       {"ipv6-ex", RTE_ETH_FLOW_IPV6_EX}, >>>>> +       {"ipv6-tcp-ex", RTE_ETH_FLOW_IPV6_TCP_EX}, >>>>> +       {"ipv6-udp-ex", RTE_ETH_FLOW_IPV6_UDP_EX}, >>>>> +       {"port", RTE_ETH_FLOW_PORT}, >>>>> +       {"vxlan", RTE_ETH_FLOW_VXLAN}, >>>>> +       {"geneve", RTE_ETH_FLOW_GENEVE}, >>>>> +       {"nvgre", RTE_ETH_FLOW_NVGRE}, >>>>> +       {"vxlan-gpe", RTE_ETH_FLOW_VXLAN_GPE}, >>>>> +       {"gtpu", RTE_ETH_FLOW_GTPU}, >>>>> +}; >>>>> +#endif >>>>> + >>>>>   const struct rss_type_info rss_offload_table[] = { >>>>>          {"ipv4", RTE_ETH_RSS_IPV4}, >>>>>          {"ipv4-frag", RTE_ETH_RSS_FRAG_IPV4}, >>>>> @@ -5713,41 +5745,35 @@ set_record_burst_stats(uint8_t on_off) >>>>>          record_burst_stats = on_off; >>>>>   } >>>>> >>>>> +#ifdef RTE_NET_I40E >>>>> + >>>>> +uint16_t >>>>> +str_to_flowtype(const char *string) >>>>> +{ >>>>> +       uint8_t i; >>>>> + >>>>> +       for (i = 0; i < RTE_DIM(flowtype_str_table); i++) { >>>>> +               if (!strcmp(flowtype_str_table[i].str, string)) >>>>> +                       return flowtype_str_table[i].ftype; >>>>> +       } >>>>> + >>>>> +       if (isdigit(string[0])) { >>>>> +               int val = atoi(string); >>>>> +               if (val > 0 && val < 64) >>>>> +                       return (uint16_t)val; >>>>> +       } >>>>> + >>>>> +       return RTE_ETH_FLOW_UNKNOWN; >>>>> +} >>>>> + >>>>> +#endif /* RTE_NET_I40E */ >>>>> + >>>>>   #if defined(RTE_NET_I40E) || defined(RTE_NET_IXGBE) >>>>> -static char* >>>>> + >>>>> +static const char* >>>>>   flowtype_to_str(uint16_t flow_type) >>>>>   { >>>>> -       struct flow_type_info { >>>>> -               char str[32]; >>>>> -               uint16_t ftype; >>>>> -       }; >>>>> - >>>>>          uint8_t i; >>>>> -       static struct flow_type_info flowtype_str_table[] = { >>>>> -               {"raw", RTE_ETH_FLOW_RAW}, >>>>> -               {"ipv4", RTE_ETH_FLOW_IPV4}, >>>>> -               {"ipv4-frag", RTE_ETH_FLOW_FRAG_IPV4}, >>>>> -               {"ipv4-tcp", RTE_ETH_FLOW_NONFRAG_IPV4_TCP}, >>>>> -               {"ipv4-udp", RTE_ETH_FLOW_NONFRAG_IPV4_UDP}, >>>>> -               {"ipv4-sctp", RTE_ETH_FLOW_NONFRAG_IPV4_SCTP}, >>>>> -               {"ipv4-other", RTE_ETH_FLOW_NONFRAG_IPV4_OTHER}, >>>>> -               {"ipv6", RTE_ETH_FLOW_IPV6}, >>>>> -               {"ipv6-frag", RTE_ETH_FLOW_FRAG_IPV6}, >>>>> -               {"ipv6-tcp", RTE_ETH_FLOW_NONFRAG_IPV6_TCP}, >>>>> -               {"ipv6-udp", RTE_ETH_FLOW_NONFRAG_IPV6_UDP}, >>>>> -               {"ipv6-sctp", RTE_ETH_FLOW_NONFRAG_IPV6_SCTP}, >>>>> -               {"ipv6-other", RTE_ETH_FLOW_NONFRAG_IPV6_OTHER}, >>>>> -               {"l2_payload", RTE_ETH_FLOW_L2_PAYLOAD}, >>>>> -               {"ipv6-ex", RTE_ETH_FLOW_IPV6_EX}, >>>>> -               {"ipv6-tcp-ex", RTE_ETH_FLOW_IPV6_TCP_EX}, >>>>> -               {"ipv6-udp-ex", RTE_ETH_FLOW_IPV6_UDP_EX}, >>>>> -               {"port", RTE_ETH_FLOW_PORT}, >>>>> -               {"vxlan", RTE_ETH_FLOW_VXLAN}, >>>>> -               {"geneve", RTE_ETH_FLOW_GENEVE}, >>>>> -               {"nvgre", RTE_ETH_FLOW_NVGRE}, >>>>> -               {"vxlan-gpe", RTE_ETH_FLOW_VXLAN_GPE}, >>>>> -               {"gtpu", RTE_ETH_FLOW_GTPU}, >>>>> -       }; >>>>> >>>>>          for (i = 0; i < RTE_DIM(flowtype_str_table); i++) { >>>>>                  if (flowtype_str_table[i].ftype == flow_type) >>>>> @@ -5821,7 +5847,7 @@ print_fdir_flex_mask(struct >>>>> rte_eth_fdir_flex_conf *flex_conf, uint32_t num) >>>>>   { >>>>>          struct rte_eth_fdir_flex_mask *mask; >>>>>          uint32_t i, j; >>>>> -       char *p; >>>>> +       const char *p; >>>>> >>>>>          for (i = 0; i < flex_conf->nb_flexmasks; i++) { >>>>>                  mask = &flex_conf->flex_mask[i]; >>>>> @@ -5837,7 +5863,7 @@ static inline void >>>>>   print_fdir_flow_type(uint32_t flow_types_mask) >>>>>   { >>>>>          int i; >>>>> -       char *p; >>>>> +       const char *p; >>>>> >>>>>          for (i = RTE_ETH_FLOW_UNKNOWN; i < RTE_ETH_FLOW_MAX; i++) { >>>>>                  if (!(flow_types_mask & (1 << i))) >>>>> diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h >>>>> index 6693813dda..b7931a2bee 100644 >>>>> --- a/app/test-pmd/testpmd.h >>>>> +++ b/app/test-pmd/testpmd.h >>>>> @@ -1086,6 +1086,11 @@ void pmd_test_exit(void); >>>>>   #if defined(RTE_NET_I40E) || defined(RTE_NET_IXGBE) >>>>>   void fdir_get_infos(portid_t port_id); >>>>>   #endif >>>>> + >>>>> +#ifdef RTE_NET_I40E >>>>> +uint16_t str_to_flowtype(const char *string); >>>>> +#endif >>>>> + >>>>>   void fdir_set_flex_mask(portid_t port_id, >>>>>                             struct rte_eth_fdir_flex_mask *cfg); >>>>>   void fdir_set_flex_payload(portid_t port_id, >>>>> -- >>>>> 2.33.0 >>>>> >>>> >>>> . >> >> .