app/testpmd: remove duplicated flow type name table

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>
This commit is contained in:
Ferruh Yigit 2022-06-29 16:34:51 +08:00
parent d7bfa4df99
commit 119786aa6e
3 changed files with 56 additions and 74 deletions

View 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;
static char*
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;
}
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)))

View 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;

View 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;