app/testpmd: remove duplicated flow type name table
authorFerruh Yigit <ferruh.yigit@xilinx.com>
Wed, 29 Jun 2022 08:34:51 +0000 (16:34 +0800)
committerFerruh Yigit <ferruh.yigit@xilinx.com>
Wed, 29 Jun 2022 19:40:50 +0000 (21:40 +0200)
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()' and 'str_to_flowtype()' non-static to
prevent build error for the case PMDs using it disables. Making the two
functions generic, not for some PMDs.

Signed-off-by: Ferruh Yigit <ferruh.yigit@xilinx.com>
Signed-off-by: Huisong Li <lihuisong@huawei.com>
app/test-pmd/config.c
app/test-pmd/testpmd.h
drivers/net/i40e/i40e_testpmd.c

index 7be9a49..608bec9 100644 (file)
@@ -170,6 +170,35 @@ static const struct {
        },
 };
 
+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},
+};
+
 static void
 print_ethaddr(const char *name, struct rte_ether_addr *eth_addr)
 {
@@ -5665,42 +5694,29 @@ set_record_burst_stats(uint8_t on_off)
        record_burst_stats = on_off;
 }
 
-#if defined(RTE_NET_I40E) || defined(RTE_NET_IXGBE)
+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;
+       }
 
-static char*
+       if (isdigit(string[0])) {
+               int val = atoi(string);
+               if (val > 0 && val < 64)
+                       return (uint16_t)val;
+       }
+
+       return RTE_ETH_FLOW_UNKNOWN;
+}
+
+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)
@@ -5710,6 +5726,8 @@ flowtype_to_str(uint16_t flow_type)
        return NULL;
 }
 
+#if defined(RTE_NET_I40E) || defined(RTE_NET_IXGBE)
+
 static inline void
 print_fdir_mask(struct rte_eth_fdir_masks *mask)
 {
@@ -5774,7 +5792,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];
@@ -5790,7 +5808,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)))
index 9cc5752..fb2f519 100644 (file)
@@ -1204,6 +1204,9 @@ extern int flow_parse(const char *src, void *result, unsigned int size,
 uint64_t str_to_rsstypes(const char *str);
 const char *rsstypes_to_str(uint64_t rss_type);
 
+uint16_t str_to_flowtype(const char *string);
+const char *flowtype_to_str(uint16_t flow_type);
+
 /* For registering driver specific testpmd commands. */
 struct testpmd_driver_commands {
        TAILQ_ENTRY(testpmd_driver_commands) next;
index 86159e5..45f8da2 100644 (file)
@@ -461,45 +461,6 @@ static cmdline_parse_inst_t cmd_show_queue_region_info_all = {
        },
 };
 
-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;
@@ -527,7 +488,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;