@@ -637,21 +637,6 @@ static void cmd_help_long_parsed(void *parsed_result,
"set port (port_id) ptype_mask (ptype_mask)\n"
" set packet types classification for a specific port\n\n"
- "set port (port_id) queue-region region_id (value) "
- "queue_start_index (value) queue_num (value)\n"
- " Set a queue region on a port\n\n"
-
- "set port (port_id) queue-region region_id (value) "
- "flowtype (value)\n"
- " Set a flowtype region index on a port\n\n"
-
- "set port (port_id) queue-region UP (value) region_id (value)\n"
- " Set the mapping of User Priority to "
- "queue region on a port\n\n"
-
- "set port (port_id) queue-region flush (on|off)\n"
- " flush all queue region related configuration\n\n"
-
"show port meter cap (port_id)\n"
" Show port meter capability information\n\n"
@@ -702,9 +687,6 @@ static void cmd_help_long_parsed(void *parsed_result,
"set port meter stats mask (port_id) (mtr_id) (stats_mask)\n"
" meter update stats\n\n"
- "show port (port_id) queue-region\n"
- " show all queue region related configuration info\n\n"
-
"set port (port_id) fec_mode auto|off|rs|baser\n"
" set fec mode for a specific port\n\n"
@@ -912,13 +894,6 @@ static void cmd_help_long_parsed(void *parsed_result,
"filters:\n"
"--------\n\n"
-#ifdef RTE_NET_I40E
- "flow_director_filter (port_id) mode raw (add|del|update)"
- " flow (flow_id) (drop|fwd) queue (queue_id)"
- " fd_id (fd_id_value) packet (packet file name)\n"
- " Add/Del a raw type flow director filter.\n\n"
-#endif
-
"flow_director_mask (port_id) mode IP vlan (vlan_value)"
" src_mask (ipv4_src) (ipv6_src) (src_port)"
" dst_mask (ipv4_dst) (ipv6_dst) (dst_port)\n"
@@ -9094,450 +9069,6 @@ cmdline_parse_inst_t cmd_dump_one = {
},
};
-/* *** queue region set *** */
-struct cmd_queue_region_result {
- cmdline_fixed_string_t set;
- cmdline_fixed_string_t port;
- portid_t port_id;
- cmdline_fixed_string_t cmd;
- cmdline_fixed_string_t region;
- uint8_t region_id;
- cmdline_fixed_string_t queue_start_index;
- uint8_t queue_id;
- cmdline_fixed_string_t queue_num;
- uint8_t queue_num_value;
-};
-
-static void
-cmd_queue_region_parsed(void *parsed_result,
- __rte_unused struct cmdline *cl,
- __rte_unused void *data)
-{
- struct cmd_queue_region_result *res = parsed_result;
- int ret = -ENOTSUP;
-#ifdef RTE_NET_I40E
- struct rte_pmd_i40e_queue_region_conf region_conf;
- enum rte_pmd_i40e_queue_region_op op_type;
-#endif
-
- if (port_id_is_invalid(res->port_id, ENABLED_WARN))
- return;
-
-#ifdef RTE_NET_I40E
- memset(®ion_conf, 0, sizeof(region_conf));
- op_type = RTE_PMD_I40E_RSS_QUEUE_REGION_SET;
- region_conf.region_id = res->region_id;
- region_conf.queue_num = res->queue_num_value;
- region_conf.queue_start_index = res->queue_id;
-
- ret = rte_pmd_i40e_rss_queue_region_conf(res->port_id,
- op_type, ®ion_conf);
-#endif
-
- switch (ret) {
- case 0:
- break;
- case -ENOTSUP:
- fprintf(stderr, "function not implemented or supported\n");
- break;
- default:
- fprintf(stderr, "queue region config error: (%s)\n",
- strerror(-ret));
- }
-}
-
-cmdline_parse_token_string_t cmd_queue_region_set =
-TOKEN_STRING_INITIALIZER(struct cmd_queue_region_result,
- set, "set");
-cmdline_parse_token_string_t cmd_queue_region_port =
- TOKEN_STRING_INITIALIZER(struct cmd_queue_region_result, port, "port");
-cmdline_parse_token_num_t cmd_queue_region_port_id =
- TOKEN_NUM_INITIALIZER(struct cmd_queue_region_result,
- port_id, RTE_UINT16);
-cmdline_parse_token_string_t cmd_queue_region_cmd =
- TOKEN_STRING_INITIALIZER(struct cmd_queue_region_result,
- cmd, "queue-region");
-cmdline_parse_token_string_t cmd_queue_region_id =
- TOKEN_STRING_INITIALIZER(struct cmd_queue_region_result,
- region, "region_id");
-cmdline_parse_token_num_t cmd_queue_region_index =
- TOKEN_NUM_INITIALIZER(struct cmd_queue_region_result,
- region_id, RTE_UINT8);
-cmdline_parse_token_string_t cmd_queue_region_queue_start_index =
- TOKEN_STRING_INITIALIZER(struct cmd_queue_region_result,
- queue_start_index, "queue_start_index");
-cmdline_parse_token_num_t cmd_queue_region_queue_id =
- TOKEN_NUM_INITIALIZER(struct cmd_queue_region_result,
- queue_id, RTE_UINT8);
-cmdline_parse_token_string_t cmd_queue_region_queue_num =
- TOKEN_STRING_INITIALIZER(struct cmd_queue_region_result,
- queue_num, "queue_num");
-cmdline_parse_token_num_t cmd_queue_region_queue_num_value =
- TOKEN_NUM_INITIALIZER(struct cmd_queue_region_result,
- queue_num_value, RTE_UINT8);
-
-cmdline_parse_inst_t cmd_queue_region = {
- .f = cmd_queue_region_parsed,
- .data = NULL,
- .help_str = "set port <port_id> queue-region region_id <value> "
- "queue_start_index <value> queue_num <value>: Set a queue region",
- .tokens = {
- (void *)&cmd_queue_region_set,
- (void *)&cmd_queue_region_port,
- (void *)&cmd_queue_region_port_id,
- (void *)&cmd_queue_region_cmd,
- (void *)&cmd_queue_region_id,
- (void *)&cmd_queue_region_index,
- (void *)&cmd_queue_region_queue_start_index,
- (void *)&cmd_queue_region_queue_id,
- (void *)&cmd_queue_region_queue_num,
- (void *)&cmd_queue_region_queue_num_value,
- NULL,
- },
-};
-
-/* *** queue region and flowtype set *** */
-struct cmd_region_flowtype_result {
- cmdline_fixed_string_t set;
- cmdline_fixed_string_t port;
- portid_t port_id;
- cmdline_fixed_string_t cmd;
- cmdline_fixed_string_t region;
- uint8_t region_id;
- cmdline_fixed_string_t flowtype;
- uint8_t flowtype_id;
-};
-
-static void
-cmd_region_flowtype_parsed(void *parsed_result,
- __rte_unused struct cmdline *cl,
- __rte_unused void *data)
-{
- struct cmd_region_flowtype_result *res = parsed_result;
- int ret = -ENOTSUP;
-#ifdef RTE_NET_I40E
- struct rte_pmd_i40e_queue_region_conf region_conf;
- enum rte_pmd_i40e_queue_region_op op_type;
-#endif
-
- if (port_id_is_invalid(res->port_id, ENABLED_WARN))
- return;
-
-#ifdef RTE_NET_I40E
- memset(®ion_conf, 0, sizeof(region_conf));
-
- op_type = RTE_PMD_I40E_RSS_QUEUE_REGION_FLOWTYPE_SET;
- region_conf.region_id = res->region_id;
- region_conf.hw_flowtype = res->flowtype_id;
-
- ret = rte_pmd_i40e_rss_queue_region_conf(res->port_id,
- op_type, ®ion_conf);
-#endif
-
- switch (ret) {
- case 0:
- break;
- case -ENOTSUP:
- fprintf(stderr, "function not implemented or supported\n");
- break;
- default:
- fprintf(stderr, "region flowtype config error: (%s)\n",
- strerror(-ret));
- }
-}
-
-cmdline_parse_token_string_t cmd_region_flowtype_set =
-TOKEN_STRING_INITIALIZER(struct cmd_region_flowtype_result,
- set, "set");
-cmdline_parse_token_string_t cmd_region_flowtype_port =
- TOKEN_STRING_INITIALIZER(struct cmd_region_flowtype_result,
- port, "port");
-cmdline_parse_token_num_t cmd_region_flowtype_port_index =
- TOKEN_NUM_INITIALIZER(struct cmd_region_flowtype_result,
- port_id, RTE_UINT16);
-cmdline_parse_token_string_t cmd_region_flowtype_cmd =
- TOKEN_STRING_INITIALIZER(struct cmd_region_flowtype_result,
- cmd, "queue-region");
-cmdline_parse_token_string_t cmd_region_flowtype_index =
- TOKEN_STRING_INITIALIZER(struct cmd_region_flowtype_result,
- region, "region_id");
-cmdline_parse_token_num_t cmd_region_flowtype_id =
- TOKEN_NUM_INITIALIZER(struct cmd_region_flowtype_result,
- region_id, RTE_UINT8);
-cmdline_parse_token_string_t cmd_region_flowtype_flow_index =
- TOKEN_STRING_INITIALIZER(struct cmd_region_flowtype_result,
- flowtype, "flowtype");
-cmdline_parse_token_num_t cmd_region_flowtype_flow_id =
- TOKEN_NUM_INITIALIZER(struct cmd_region_flowtype_result,
- flowtype_id, RTE_UINT8);
-cmdline_parse_inst_t cmd_region_flowtype = {
- .f = cmd_region_flowtype_parsed,
- .data = NULL,
- .help_str = "set port <port_id> queue-region region_id <value> "
- "flowtype <value>: Set a flowtype region index",
- .tokens = {
- (void *)&cmd_region_flowtype_set,
- (void *)&cmd_region_flowtype_port,
- (void *)&cmd_region_flowtype_port_index,
- (void *)&cmd_region_flowtype_cmd,
- (void *)&cmd_region_flowtype_index,
- (void *)&cmd_region_flowtype_id,
- (void *)&cmd_region_flowtype_flow_index,
- (void *)&cmd_region_flowtype_flow_id,
- NULL,
- },
-};
-
-/* *** User Priority (UP) to queue region (region_id) set *** */
-struct cmd_user_priority_region_result {
- cmdline_fixed_string_t set;
- cmdline_fixed_string_t port;
- portid_t port_id;
- cmdline_fixed_string_t cmd;
- cmdline_fixed_string_t user_priority;
- uint8_t user_priority_id;
- cmdline_fixed_string_t region;
- uint8_t region_id;
-};
-
-static void
-cmd_user_priority_region_parsed(void *parsed_result,
- __rte_unused struct cmdline *cl,
- __rte_unused void *data)
-{
- struct cmd_user_priority_region_result *res = parsed_result;
- int ret = -ENOTSUP;
-#ifdef RTE_NET_I40E
- struct rte_pmd_i40e_queue_region_conf region_conf;
- enum rte_pmd_i40e_queue_region_op op_type;
-#endif
-
- if (port_id_is_invalid(res->port_id, ENABLED_WARN))
- return;
-
-#ifdef RTE_NET_I40E
- memset(®ion_conf, 0, sizeof(region_conf));
- op_type = RTE_PMD_I40E_RSS_QUEUE_REGION_USER_PRIORITY_SET;
- region_conf.user_priority = res->user_priority_id;
- region_conf.region_id = res->region_id;
-
- ret = rte_pmd_i40e_rss_queue_region_conf(res->port_id,
- op_type, ®ion_conf);
-#endif
-
- switch (ret) {
- case 0:
- break;
- case -ENOTSUP:
- fprintf(stderr, "function not implemented or supported\n");
- break;
- default:
- fprintf(stderr, "user_priority region config error: (%s)\n",
- strerror(-ret));
- }
-}
-
-cmdline_parse_token_string_t cmd_user_priority_region_set =
- TOKEN_STRING_INITIALIZER(struct cmd_user_priority_region_result,
- set, "set");
-cmdline_parse_token_string_t cmd_user_priority_region_port =
- TOKEN_STRING_INITIALIZER(struct cmd_user_priority_region_result,
- port, "port");
-cmdline_parse_token_num_t cmd_user_priority_region_port_index =
- TOKEN_NUM_INITIALIZER(struct cmd_user_priority_region_result,
- port_id, RTE_UINT16);
-cmdline_parse_token_string_t cmd_user_priority_region_cmd =
- TOKEN_STRING_INITIALIZER(struct cmd_user_priority_region_result,
- cmd, "queue-region");
-cmdline_parse_token_string_t cmd_user_priority_region_UP =
- TOKEN_STRING_INITIALIZER(struct cmd_user_priority_region_result,
- user_priority, "UP");
-cmdline_parse_token_num_t cmd_user_priority_region_UP_id =
- TOKEN_NUM_INITIALIZER(struct cmd_user_priority_region_result,
- user_priority_id, RTE_UINT8);
-cmdline_parse_token_string_t cmd_user_priority_region_region =
- TOKEN_STRING_INITIALIZER(struct cmd_user_priority_region_result,
- region, "region_id");
-cmdline_parse_token_num_t cmd_user_priority_region_region_id =
- TOKEN_NUM_INITIALIZER(struct cmd_user_priority_region_result,
- region_id, RTE_UINT8);
-
-cmdline_parse_inst_t cmd_user_priority_region = {
- .f = cmd_user_priority_region_parsed,
- .data = NULL,
- .help_str = "set port <port_id> queue-region UP <value> "
- "region_id <value>: Set the mapping of User Priority (UP) "
- "to queue region (region_id) ",
- .tokens = {
- (void *)&cmd_user_priority_region_set,
- (void *)&cmd_user_priority_region_port,
- (void *)&cmd_user_priority_region_port_index,
- (void *)&cmd_user_priority_region_cmd,
- (void *)&cmd_user_priority_region_UP,
- (void *)&cmd_user_priority_region_UP_id,
- (void *)&cmd_user_priority_region_region,
- (void *)&cmd_user_priority_region_region_id,
- NULL,
- },
-};
-
-/* *** flush all queue region related configuration *** */
-struct cmd_flush_queue_region_result {
- cmdline_fixed_string_t set;
- cmdline_fixed_string_t port;
- portid_t port_id;
- cmdline_fixed_string_t cmd;
- cmdline_fixed_string_t flush;
- cmdline_fixed_string_t what;
-};
-
-static void
-cmd_flush_queue_region_parsed(void *parsed_result,
- __rte_unused struct cmdline *cl,
- __rte_unused void *data)
-{
- struct cmd_flush_queue_region_result *res = parsed_result;
- int ret = -ENOTSUP;
-#ifdef RTE_NET_I40E
- struct rte_pmd_i40e_queue_region_conf region_conf;
- enum rte_pmd_i40e_queue_region_op op_type;
-#endif
-
- if (port_id_is_invalid(res->port_id, ENABLED_WARN))
- return;
-
-#ifdef RTE_NET_I40E
- memset(®ion_conf, 0, sizeof(region_conf));
-
- if (strcmp(res->what, "on") == 0)
- op_type = RTE_PMD_I40E_RSS_QUEUE_REGION_ALL_FLUSH_ON;
- else
- op_type = RTE_PMD_I40E_RSS_QUEUE_REGION_ALL_FLUSH_OFF;
-
- ret = rte_pmd_i40e_rss_queue_region_conf(res->port_id,
- op_type, ®ion_conf);
-#endif
-
- switch (ret) {
- case 0:
- break;
- case -ENOTSUP:
- fprintf(stderr, "function not implemented or supported\n");
- break;
- default:
- fprintf(stderr, "queue region config flush error: (%s)\n",
- strerror(-ret));
- }
-}
-
-cmdline_parse_token_string_t cmd_flush_queue_region_set =
- TOKEN_STRING_INITIALIZER(struct cmd_flush_queue_region_result,
- set, "set");
-cmdline_parse_token_string_t cmd_flush_queue_region_port =
- TOKEN_STRING_INITIALIZER(struct cmd_flush_queue_region_result,
- port, "port");
-cmdline_parse_token_num_t cmd_flush_queue_region_port_index =
- TOKEN_NUM_INITIALIZER(struct cmd_flush_queue_region_result,
- port_id, RTE_UINT16);
-cmdline_parse_token_string_t cmd_flush_queue_region_cmd =
- TOKEN_STRING_INITIALIZER(struct cmd_flush_queue_region_result,
- cmd, "queue-region");
-cmdline_parse_token_string_t cmd_flush_queue_region_flush =
- TOKEN_STRING_INITIALIZER(struct cmd_flush_queue_region_result,
- flush, "flush");
-cmdline_parse_token_string_t cmd_flush_queue_region_what =
- TOKEN_STRING_INITIALIZER(struct cmd_flush_queue_region_result,
- what, "on#off");
-
-cmdline_parse_inst_t cmd_flush_queue_region = {
- .f = cmd_flush_queue_region_parsed,
- .data = NULL,
- .help_str = "set port <port_id> queue-region flush on|off"
- ": flush all queue region related configuration",
- .tokens = {
- (void *)&cmd_flush_queue_region_set,
- (void *)&cmd_flush_queue_region_port,
- (void *)&cmd_flush_queue_region_port_index,
- (void *)&cmd_flush_queue_region_cmd,
- (void *)&cmd_flush_queue_region_flush,
- (void *)&cmd_flush_queue_region_what,
- NULL,
- },
-};
-
-/* *** get all queue region related configuration info *** */
-struct cmd_show_queue_region_info {
- cmdline_fixed_string_t show;
- cmdline_fixed_string_t port;
- portid_t port_id;
- cmdline_fixed_string_t cmd;
-};
-
-static void
-cmd_show_queue_region_info_parsed(void *parsed_result,
- __rte_unused struct cmdline *cl,
- __rte_unused void *data)
-{
- struct cmd_show_queue_region_info *res = parsed_result;
- int ret = -ENOTSUP;
-#ifdef RTE_NET_I40E
- struct rte_pmd_i40e_queue_regions rte_pmd_regions;
- enum rte_pmd_i40e_queue_region_op op_type;
-#endif
-
- if (port_id_is_invalid(res->port_id, ENABLED_WARN))
- return;
-
-#ifdef RTE_NET_I40E
- memset(&rte_pmd_regions, 0, sizeof(rte_pmd_regions));
-
- op_type = RTE_PMD_I40E_RSS_QUEUE_REGION_INFO_GET;
-
- ret = rte_pmd_i40e_rss_queue_region_conf(res->port_id,
- op_type, &rte_pmd_regions);
-
- port_queue_region_info_display(res->port_id, &rte_pmd_regions);
-#endif
-
- switch (ret) {
- case 0:
- break;
- case -ENOTSUP:
- fprintf(stderr, "function not implemented or supported\n");
- break;
- default:
- fprintf(stderr, "queue region config info show error: (%s)\n",
- strerror(-ret));
- }
-}
-
-cmdline_parse_token_string_t cmd_show_queue_region_info_get =
-TOKEN_STRING_INITIALIZER(struct cmd_show_queue_region_info,
- show, "show");
-cmdline_parse_token_string_t cmd_show_queue_region_info_port =
- TOKEN_STRING_INITIALIZER(struct cmd_show_queue_region_info,
- port, "port");
-cmdline_parse_token_num_t cmd_show_queue_region_info_port_index =
- TOKEN_NUM_INITIALIZER(struct cmd_show_queue_region_info,
- port_id, RTE_UINT16);
-cmdline_parse_token_string_t cmd_show_queue_region_info_cmd =
- TOKEN_STRING_INITIALIZER(struct cmd_show_queue_region_info,
- cmd, "queue-region");
-
-cmdline_parse_inst_t cmd_show_queue_region_info_all = {
- .f = cmd_show_queue_region_info_parsed,
- .data = NULL,
- .help_str = "show port <port_id> queue-region"
- ": show all queue region related configuration info",
- .tokens = {
- (void *)&cmd_show_queue_region_info_get,
- (void *)&cmd_show_queue_region_info_port,
- (void *)&cmd_show_queue_region_info_port_index,
- (void *)&cmd_show_queue_region_info_cmd,
- NULL,
- },
-};
-
/* *** Filters Control *** */
#define IPV4_ADDR_TO_UINT(ip_addr, ip) \
@@ -9562,194 +9093,6 @@ do { \
} \
} while (0)
-#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;
- portid_t port_id;
- cmdline_fixed_string_t mode;
- cmdline_fixed_string_t mode_value;
- cmdline_fixed_string_t ops;
- cmdline_fixed_string_t flow;
- cmdline_fixed_string_t flow_type;
- cmdline_fixed_string_t drop;
- cmdline_fixed_string_t queue;
- uint16_t queue_id;
- cmdline_fixed_string_t fd_id;
- uint32_t fd_id_value;
- cmdline_fixed_string_t packet;
- char filepath[];
-};
-
-static void
-cmd_flow_director_filter_parsed(void *parsed_result,
- __rte_unused struct cmdline *cl,
- __rte_unused void *data)
-{
- struct cmd_flow_director_result *res = parsed_result;
- int ret = 0;
- 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 i, port = res->port_id;
- uint8_t add;
-
- memset(&conf, 0, sizeof(conf));
-
- if (flow_type == RTE_ETH_FLOW_UNKNOWN) {
- fprintf(stderr, "Invalid flow type specified.\n");
- return;
- }
- ret = rte_pmd_i40e_flow_type_mapping_get(res->port_id,
- mapping);
- if (ret)
- return;
- if (mapping[flow_type].pctype == 0ULL) {
- fprintf(stderr, "Invalid flow type specified.\n");
- return;
- }
- for (i = 0; i < RTE_PMD_I40E_PCTYPE_MAX; i++) {
- if (mapping[flow_type].pctype & (1ULL << i)) {
- conf.input.pctype = i;
- break;
- }
- }
-
- conf.input.packet = open_file(res->filepath,
- &conf.input.length);
- if (!conf.input.packet)
- return;
- if (!strcmp(res->drop, "drop"))
- conf.action.behavior =
- RTE_PMD_I40E_PKT_TEMPLATE_REJECT;
- else
- conf.action.behavior =
- RTE_PMD_I40E_PKT_TEMPLATE_ACCEPT;
- conf.action.report_status =
- RTE_PMD_I40E_PKT_TEMPLATE_REPORT_ID;
- conf.action.rx_queue = res->queue_id;
- conf.soft_id = res->fd_id_value;
- add = strcmp(res->ops, "del") ? 1 : 0;
- ret = rte_pmd_i40e_flow_add_del_packet_template(port,
- &conf,
- add);
- if (ret < 0)
- fprintf(stderr, "flow director config error: (%s)\n",
- strerror(-ret));
- close_file(conf.input.packet);
-}
-
-cmdline_parse_token_string_t cmd_flow_director_filter =
- TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
- flow_director_filter, "flow_director_filter");
-cmdline_parse_token_num_t cmd_flow_director_port_id =
- TOKEN_NUM_INITIALIZER(struct cmd_flow_director_result,
- port_id, RTE_UINT16);
-cmdline_parse_token_string_t cmd_flow_director_ops =
- TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
- ops, "add#del#update");
-cmdline_parse_token_string_t cmd_flow_director_flow =
- TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
- flow, "flow");
-cmdline_parse_token_string_t cmd_flow_director_flow_type =
- TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
- flow_type, NULL);
-cmdline_parse_token_string_t cmd_flow_director_drop =
- TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
- drop, "drop#fwd");
-cmdline_parse_token_string_t cmd_flow_director_queue =
- TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
- queue, "queue");
-cmdline_parse_token_num_t cmd_flow_director_queue_id =
- TOKEN_NUM_INITIALIZER(struct cmd_flow_director_result,
- queue_id, RTE_UINT16);
-cmdline_parse_token_string_t cmd_flow_director_fd_id =
- TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
- fd_id, "fd_id");
-cmdline_parse_token_num_t cmd_flow_director_fd_id_value =
- TOKEN_NUM_INITIALIZER(struct cmd_flow_director_result,
- fd_id_value, RTE_UINT32);
-
-cmdline_parse_token_string_t cmd_flow_director_mode =
- TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
- mode, "mode");
-cmdline_parse_token_string_t cmd_flow_director_mode_raw =
- TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
- mode_value, "raw");
-cmdline_parse_token_string_t cmd_flow_director_packet =
- TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
- packet, "packet");
-cmdline_parse_token_string_t cmd_flow_director_filepath =
- TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
- filepath, NULL);
-
-cmdline_parse_inst_t cmd_add_del_raw_flow_director = {
- .f = cmd_flow_director_filter_parsed,
- .data = NULL,
- .help_str = "flow_director_filter ... : Add or delete a raw flow "
- "director entry on NIC",
- .tokens = {
- (void *)&cmd_flow_director_filter,
- (void *)&cmd_flow_director_port_id,
- (void *)&cmd_flow_director_mode,
- (void *)&cmd_flow_director_mode_raw,
- (void *)&cmd_flow_director_ops,
- (void *)&cmd_flow_director_flow,
- (void *)&cmd_flow_director_flow_type,
- (void *)&cmd_flow_director_drop,
- (void *)&cmd_flow_director_queue,
- (void *)&cmd_flow_director_queue_id,
- (void *)&cmd_flow_director_fd_id,
- (void *)&cmd_flow_director_fd_id_value,
- (void *)&cmd_flow_director_packet,
- (void *)&cmd_flow_director_filepath,
- NULL,
- },
-};
-
-#endif /* RTE_NET_I40E */
-
/* *** deal with flow director mask *** */
struct cmd_flow_director_mask_result {
cmdline_fixed_string_t flow_director_mask;
@@ -16939,9 +16282,6 @@ static cmdline_parse_ctx_t builtin_ctx[] = {
(cmdline_parse_inst_t *)&cmd_cleanup_txq_mbufs,
(cmdline_parse_inst_t *)&cmd_dump,
(cmdline_parse_inst_t *)&cmd_dump_one,
-#ifdef RTE_NET_I40E
- (cmdline_parse_inst_t *)&cmd_add_del_raw_flow_director,
-#endif
(cmdline_parse_inst_t *)&cmd_set_flow_director_ip_mask,
(cmdline_parse_inst_t *)&cmd_set_flow_director_mac_vlan_mask,
(cmdline_parse_inst_t *)&cmd_set_flow_director_tunnel_mask,
@@ -17023,11 +16363,6 @@ static cmdline_parse_ctx_t builtin_ctx[] = {
(cmdline_parse_inst_t *)&cmd_pctype_mapping_get,
(cmdline_parse_inst_t *)&cmd_pctype_mapping_reset,
(cmdline_parse_inst_t *)&cmd_pctype_mapping_update,
- (cmdline_parse_inst_t *)&cmd_queue_region,
- (cmdline_parse_inst_t *)&cmd_region_flowtype,
- (cmdline_parse_inst_t *)&cmd_user_priority_region,
- (cmdline_parse_inst_t *)&cmd_flush_queue_region,
- (cmdline_parse_inst_t *)&cmd_show_queue_region_info_all,
(cmdline_parse_inst_t *)&cmd_show_port_tm_cap,
(cmdline_parse_inst_t *)&cmd_show_port_tm_level_cap,
(cmdline_parse_inst_t *)&cmd_show_port_tm_node_cap,
new file mode 100644
@@ -0,0 +1,655 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2010-2016 Intel Corporation.
+ */
+#include <rte_pmd_i40e.h>
+
+#include <cmdline_parse_num.h>
+#include <cmdline_parse_string.h>
+
+#include "testpmd.h"
+
+/* *** queue region set *** */
+struct cmd_queue_region_result {
+ cmdline_fixed_string_t set;
+ cmdline_fixed_string_t port;
+ portid_t port_id;
+ cmdline_fixed_string_t cmd;
+ cmdline_fixed_string_t region;
+ uint8_t region_id;
+ cmdline_fixed_string_t queue_start_index;
+ uint8_t queue_id;
+ cmdline_fixed_string_t queue_num;
+ uint8_t queue_num_value;
+};
+
+static void
+cmd_queue_region_parsed(void *parsed_result,
+ __rte_unused struct cmdline *cl,
+ __rte_unused void *data)
+{
+ struct cmd_queue_region_result *res = parsed_result;
+ int ret = -ENOTSUP;
+ struct rte_pmd_i40e_queue_region_conf region_conf;
+ enum rte_pmd_i40e_queue_region_op op_type;
+
+ if (port_id_is_invalid(res->port_id, ENABLED_WARN))
+ return;
+
+ memset(®ion_conf, 0, sizeof(region_conf));
+ op_type = RTE_PMD_I40E_RSS_QUEUE_REGION_SET;
+ region_conf.region_id = res->region_id;
+ region_conf.queue_num = res->queue_num_value;
+ region_conf.queue_start_index = res->queue_id;
+
+ ret = rte_pmd_i40e_rss_queue_region_conf(res->port_id,
+ op_type, ®ion_conf);
+ switch (ret) {
+ case 0:
+ break;
+ case -ENOTSUP:
+ fprintf(stderr, "function not implemented or supported\n");
+ break;
+ default:
+ fprintf(stderr, "queue region config error: (%s)\n",
+ strerror(-ret));
+ }
+}
+
+cmdline_parse_token_string_t cmd_queue_region_set =
+TOKEN_STRING_INITIALIZER(struct cmd_queue_region_result,
+ set, "set");
+cmdline_parse_token_string_t cmd_queue_region_port =
+ TOKEN_STRING_INITIALIZER(struct cmd_queue_region_result, port, "port");
+cmdline_parse_token_num_t cmd_queue_region_port_id =
+ TOKEN_NUM_INITIALIZER(struct cmd_queue_region_result,
+ port_id, RTE_UINT16);
+cmdline_parse_token_string_t cmd_queue_region_cmd =
+ TOKEN_STRING_INITIALIZER(struct cmd_queue_region_result,
+ cmd, "queue-region");
+cmdline_parse_token_string_t cmd_queue_region_id =
+ TOKEN_STRING_INITIALIZER(struct cmd_queue_region_result,
+ region, "region_id");
+cmdline_parse_token_num_t cmd_queue_region_index =
+ TOKEN_NUM_INITIALIZER(struct cmd_queue_region_result,
+ region_id, RTE_UINT8);
+cmdline_parse_token_string_t cmd_queue_region_queue_start_index =
+ TOKEN_STRING_INITIALIZER(struct cmd_queue_region_result,
+ queue_start_index, "queue_start_index");
+cmdline_parse_token_num_t cmd_queue_region_queue_id =
+ TOKEN_NUM_INITIALIZER(struct cmd_queue_region_result,
+ queue_id, RTE_UINT8);
+cmdline_parse_token_string_t cmd_queue_region_queue_num =
+ TOKEN_STRING_INITIALIZER(struct cmd_queue_region_result,
+ queue_num, "queue_num");
+cmdline_parse_token_num_t cmd_queue_region_queue_num_value =
+ TOKEN_NUM_INITIALIZER(struct cmd_queue_region_result,
+ queue_num_value, RTE_UINT8);
+
+cmdline_parse_inst_t cmd_queue_region = {
+ .f = cmd_queue_region_parsed,
+ .data = NULL,
+ .help_str = "set port <port_id> queue-region region_id <value> "
+ "queue_start_index <value> queue_num <value>: Set a queue region",
+ .tokens = {
+ (void *)&cmd_queue_region_set,
+ (void *)&cmd_queue_region_port,
+ (void *)&cmd_queue_region_port_id,
+ (void *)&cmd_queue_region_cmd,
+ (void *)&cmd_queue_region_id,
+ (void *)&cmd_queue_region_index,
+ (void *)&cmd_queue_region_queue_start_index,
+ (void *)&cmd_queue_region_queue_id,
+ (void *)&cmd_queue_region_queue_num,
+ (void *)&cmd_queue_region_queue_num_value,
+ NULL,
+ },
+};
+
+/* *** queue region and flowtype set *** */
+struct cmd_region_flowtype_result {
+ cmdline_fixed_string_t set;
+ cmdline_fixed_string_t port;
+ portid_t port_id;
+ cmdline_fixed_string_t cmd;
+ cmdline_fixed_string_t region;
+ uint8_t region_id;
+ cmdline_fixed_string_t flowtype;
+ uint8_t flowtype_id;
+};
+
+static void
+cmd_region_flowtype_parsed(void *parsed_result,
+ __rte_unused struct cmdline *cl,
+ __rte_unused void *data)
+{
+ struct cmd_region_flowtype_result *res = parsed_result;
+ int ret = -ENOTSUP;
+ struct rte_pmd_i40e_queue_region_conf region_conf;
+ enum rte_pmd_i40e_queue_region_op op_type;
+
+ if (port_id_is_invalid(res->port_id, ENABLED_WARN))
+ return;
+
+ memset(®ion_conf, 0, sizeof(region_conf));
+
+ op_type = RTE_PMD_I40E_RSS_QUEUE_REGION_FLOWTYPE_SET;
+ region_conf.region_id = res->region_id;
+ region_conf.hw_flowtype = res->flowtype_id;
+
+ ret = rte_pmd_i40e_rss_queue_region_conf(res->port_id,
+ op_type, ®ion_conf);
+ switch (ret) {
+ case 0:
+ break;
+ case -ENOTSUP:
+ fprintf(stderr, "function not implemented or supported\n");
+ break;
+ default:
+ fprintf(stderr, "region flowtype config error: (%s)\n",
+ strerror(-ret));
+ }
+}
+
+cmdline_parse_token_string_t cmd_region_flowtype_set =
+TOKEN_STRING_INITIALIZER(struct cmd_region_flowtype_result,
+ set, "set");
+cmdline_parse_token_string_t cmd_region_flowtype_port =
+ TOKEN_STRING_INITIALIZER(struct cmd_region_flowtype_result,
+ port, "port");
+cmdline_parse_token_num_t cmd_region_flowtype_port_index =
+ TOKEN_NUM_INITIALIZER(struct cmd_region_flowtype_result,
+ port_id, RTE_UINT16);
+cmdline_parse_token_string_t cmd_region_flowtype_cmd =
+ TOKEN_STRING_INITIALIZER(struct cmd_region_flowtype_result,
+ cmd, "queue-region");
+cmdline_parse_token_string_t cmd_region_flowtype_index =
+ TOKEN_STRING_INITIALIZER(struct cmd_region_flowtype_result,
+ region, "region_id");
+cmdline_parse_token_num_t cmd_region_flowtype_id =
+ TOKEN_NUM_INITIALIZER(struct cmd_region_flowtype_result,
+ region_id, RTE_UINT8);
+cmdline_parse_token_string_t cmd_region_flowtype_flow_index =
+ TOKEN_STRING_INITIALIZER(struct cmd_region_flowtype_result,
+ flowtype, "flowtype");
+cmdline_parse_token_num_t cmd_region_flowtype_flow_id =
+ TOKEN_NUM_INITIALIZER(struct cmd_region_flowtype_result,
+ flowtype_id, RTE_UINT8);
+cmdline_parse_inst_t cmd_region_flowtype = {
+ .f = cmd_region_flowtype_parsed,
+ .data = NULL,
+ .help_str = "set port <port_id> queue-region region_id <value> "
+ "flowtype <value>: Set a flowtype region index",
+ .tokens = {
+ (void *)&cmd_region_flowtype_set,
+ (void *)&cmd_region_flowtype_port,
+ (void *)&cmd_region_flowtype_port_index,
+ (void *)&cmd_region_flowtype_cmd,
+ (void *)&cmd_region_flowtype_index,
+ (void *)&cmd_region_flowtype_id,
+ (void *)&cmd_region_flowtype_flow_index,
+ (void *)&cmd_region_flowtype_flow_id,
+ NULL,
+ },
+};
+
+/* *** User Priority (UP) to queue region (region_id) set *** */
+struct cmd_user_priority_region_result {
+ cmdline_fixed_string_t set;
+ cmdline_fixed_string_t port;
+ portid_t port_id;
+ cmdline_fixed_string_t cmd;
+ cmdline_fixed_string_t user_priority;
+ uint8_t user_priority_id;
+ cmdline_fixed_string_t region;
+ uint8_t region_id;
+};
+
+static void
+cmd_user_priority_region_parsed(void *parsed_result,
+ __rte_unused struct cmdline *cl,
+ __rte_unused void *data)
+{
+ struct cmd_user_priority_region_result *res = parsed_result;
+ int ret = -ENOTSUP;
+ struct rte_pmd_i40e_queue_region_conf region_conf;
+ enum rte_pmd_i40e_queue_region_op op_type;
+
+ if (port_id_is_invalid(res->port_id, ENABLED_WARN))
+ return;
+
+ memset(®ion_conf, 0, sizeof(region_conf));
+ op_type = RTE_PMD_I40E_RSS_QUEUE_REGION_USER_PRIORITY_SET;
+ region_conf.user_priority = res->user_priority_id;
+ region_conf.region_id = res->region_id;
+
+ ret = rte_pmd_i40e_rss_queue_region_conf(res->port_id,
+ op_type, ®ion_conf);
+ switch (ret) {
+ case 0:
+ break;
+ case -ENOTSUP:
+ fprintf(stderr, "function not implemented or supported\n");
+ break;
+ default:
+ fprintf(stderr, "user_priority region config error: (%s)\n",
+ strerror(-ret));
+ }
+}
+
+cmdline_parse_token_string_t cmd_user_priority_region_set =
+ TOKEN_STRING_INITIALIZER(struct cmd_user_priority_region_result,
+ set, "set");
+cmdline_parse_token_string_t cmd_user_priority_region_port =
+ TOKEN_STRING_INITIALIZER(struct cmd_user_priority_region_result,
+ port, "port");
+cmdline_parse_token_num_t cmd_user_priority_region_port_index =
+ TOKEN_NUM_INITIALIZER(struct cmd_user_priority_region_result,
+ port_id, RTE_UINT16);
+cmdline_parse_token_string_t cmd_user_priority_region_cmd =
+ TOKEN_STRING_INITIALIZER(struct cmd_user_priority_region_result,
+ cmd, "queue-region");
+cmdline_parse_token_string_t cmd_user_priority_region_UP =
+ TOKEN_STRING_INITIALIZER(struct cmd_user_priority_region_result,
+ user_priority, "UP");
+cmdline_parse_token_num_t cmd_user_priority_region_UP_id =
+ TOKEN_NUM_INITIALIZER(struct cmd_user_priority_region_result,
+ user_priority_id, RTE_UINT8);
+cmdline_parse_token_string_t cmd_user_priority_region_region =
+ TOKEN_STRING_INITIALIZER(struct cmd_user_priority_region_result,
+ region, "region_id");
+cmdline_parse_token_num_t cmd_user_priority_region_region_id =
+ TOKEN_NUM_INITIALIZER(struct cmd_user_priority_region_result,
+ region_id, RTE_UINT8);
+
+cmdline_parse_inst_t cmd_user_priority_region = {
+ .f = cmd_user_priority_region_parsed,
+ .data = NULL,
+ .help_str = "set port <port_id> queue-region UP <value> "
+ "region_id <value>: Set the mapping of User Priority (UP) "
+ "to queue region (region_id) ",
+ .tokens = {
+ (void *)&cmd_user_priority_region_set,
+ (void *)&cmd_user_priority_region_port,
+ (void *)&cmd_user_priority_region_port_index,
+ (void *)&cmd_user_priority_region_cmd,
+ (void *)&cmd_user_priority_region_UP,
+ (void *)&cmd_user_priority_region_UP_id,
+ (void *)&cmd_user_priority_region_region,
+ (void *)&cmd_user_priority_region_region_id,
+ NULL,
+ },
+};
+
+/* *** flush all queue region related configuration *** */
+struct cmd_flush_queue_region_result {
+ cmdline_fixed_string_t set;
+ cmdline_fixed_string_t port;
+ portid_t port_id;
+ cmdline_fixed_string_t cmd;
+ cmdline_fixed_string_t flush;
+ cmdline_fixed_string_t what;
+};
+
+static void
+cmd_flush_queue_region_parsed(void *parsed_result,
+ __rte_unused struct cmdline *cl,
+ __rte_unused void *data)
+{
+ struct cmd_flush_queue_region_result *res = parsed_result;
+ int ret = -ENOTSUP;
+ struct rte_pmd_i40e_queue_region_conf region_conf;
+ enum rte_pmd_i40e_queue_region_op op_type;
+
+ if (port_id_is_invalid(res->port_id, ENABLED_WARN))
+ return;
+
+ memset(®ion_conf, 0, sizeof(region_conf));
+
+ if (strcmp(res->what, "on") == 0)
+ op_type = RTE_PMD_I40E_RSS_QUEUE_REGION_ALL_FLUSH_ON;
+ else
+ op_type = RTE_PMD_I40E_RSS_QUEUE_REGION_ALL_FLUSH_OFF;
+
+ ret = rte_pmd_i40e_rss_queue_region_conf(res->port_id,
+ op_type, ®ion_conf);
+ switch (ret) {
+ case 0:
+ break;
+ case -ENOTSUP:
+ fprintf(stderr, "function not implemented or supported\n");
+ break;
+ default:
+ fprintf(stderr, "queue region config flush error: (%s)\n",
+ strerror(-ret));
+ }
+}
+
+cmdline_parse_token_string_t cmd_flush_queue_region_set =
+ TOKEN_STRING_INITIALIZER(struct cmd_flush_queue_region_result,
+ set, "set");
+cmdline_parse_token_string_t cmd_flush_queue_region_port =
+ TOKEN_STRING_INITIALIZER(struct cmd_flush_queue_region_result,
+ port, "port");
+cmdline_parse_token_num_t cmd_flush_queue_region_port_index =
+ TOKEN_NUM_INITIALIZER(struct cmd_flush_queue_region_result,
+ port_id, RTE_UINT16);
+cmdline_parse_token_string_t cmd_flush_queue_region_cmd =
+ TOKEN_STRING_INITIALIZER(struct cmd_flush_queue_region_result,
+ cmd, "queue-region");
+cmdline_parse_token_string_t cmd_flush_queue_region_flush =
+ TOKEN_STRING_INITIALIZER(struct cmd_flush_queue_region_result,
+ flush, "flush");
+cmdline_parse_token_string_t cmd_flush_queue_region_what =
+ TOKEN_STRING_INITIALIZER(struct cmd_flush_queue_region_result,
+ what, "on#off");
+
+cmdline_parse_inst_t cmd_flush_queue_region = {
+ .f = cmd_flush_queue_region_parsed,
+ .data = NULL,
+ .help_str = "set port <port_id> queue-region flush on|off"
+ ": flush all queue region related configuration",
+ .tokens = {
+ (void *)&cmd_flush_queue_region_set,
+ (void *)&cmd_flush_queue_region_port,
+ (void *)&cmd_flush_queue_region_port_index,
+ (void *)&cmd_flush_queue_region_cmd,
+ (void *)&cmd_flush_queue_region_flush,
+ (void *)&cmd_flush_queue_region_what,
+ NULL,
+ },
+};
+
+/* *** get all queue region related configuration info *** */
+struct cmd_show_queue_region_info {
+ cmdline_fixed_string_t show;
+ cmdline_fixed_string_t port;
+ portid_t port_id;
+ cmdline_fixed_string_t cmd;
+};
+
+static void
+cmd_show_queue_region_info_parsed(void *parsed_result,
+ __rte_unused struct cmdline *cl,
+ __rte_unused void *data)
+{
+ struct cmd_show_queue_region_info *res = parsed_result;
+ int ret = -ENOTSUP;
+ struct rte_pmd_i40e_queue_regions rte_pmd_regions;
+ enum rte_pmd_i40e_queue_region_op op_type;
+
+ if (port_id_is_invalid(res->port_id, ENABLED_WARN))
+ return;
+
+ memset(&rte_pmd_regions, 0, sizeof(rte_pmd_regions));
+
+ op_type = RTE_PMD_I40E_RSS_QUEUE_REGION_INFO_GET;
+
+ ret = rte_pmd_i40e_rss_queue_region_conf(res->port_id,
+ op_type, &rte_pmd_regions);
+
+ port_queue_region_info_display(res->port_id, &rte_pmd_regions);
+ switch (ret) {
+ case 0:
+ break;
+ case -ENOTSUP:
+ fprintf(stderr, "function not implemented or supported\n");
+ break;
+ default:
+ fprintf(stderr, "queue region config info show error: (%s)\n",
+ strerror(-ret));
+ }
+}
+
+cmdline_parse_token_string_t cmd_show_queue_region_info_get =
+TOKEN_STRING_INITIALIZER(struct cmd_show_queue_region_info,
+ show, "show");
+cmdline_parse_token_string_t cmd_show_queue_region_info_port =
+ TOKEN_STRING_INITIALIZER(struct cmd_show_queue_region_info,
+ port, "port");
+cmdline_parse_token_num_t cmd_show_queue_region_info_port_index =
+ TOKEN_NUM_INITIALIZER(struct cmd_show_queue_region_info,
+ port_id, RTE_UINT16);
+cmdline_parse_token_string_t cmd_show_queue_region_info_cmd =
+ TOKEN_STRING_INITIALIZER(struct cmd_show_queue_region_info,
+ cmd, "queue-region");
+
+cmdline_parse_inst_t cmd_show_queue_region_info_all = {
+ .f = cmd_show_queue_region_info_parsed,
+ .data = NULL,
+ .help_str = "show port <port_id> queue-region"
+ ": show all queue region related configuration info",
+ .tokens = {
+ (void *)&cmd_show_queue_region_info_get,
+ (void *)&cmd_show_queue_region_info_port,
+ (void *)&cmd_show_queue_region_info_port_index,
+ (void *)&cmd_show_queue_region_info_cmd,
+ NULL,
+ },
+};
+
+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;
+ portid_t port_id;
+ cmdline_fixed_string_t mode;
+ cmdline_fixed_string_t mode_value;
+ cmdline_fixed_string_t ops;
+ cmdline_fixed_string_t flow;
+ cmdline_fixed_string_t flow_type;
+ cmdline_fixed_string_t drop;
+ cmdline_fixed_string_t queue;
+ uint16_t queue_id;
+ cmdline_fixed_string_t fd_id;
+ uint32_t fd_id_value;
+ cmdline_fixed_string_t packet;
+ char filepath[];
+};
+
+static void
+cmd_flow_director_filter_parsed(void *parsed_result,
+ __rte_unused struct cmdline *cl,
+ __rte_unused void *data)
+{
+ struct cmd_flow_director_result *res = parsed_result;
+ int ret = 0;
+ 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 i, port = res->port_id;
+ uint8_t add;
+
+ memset(&conf, 0, sizeof(conf));
+
+ if (flow_type == RTE_ETH_FLOW_UNKNOWN) {
+ fprintf(stderr, "Invalid flow type specified.\n");
+ return;
+ }
+ ret = rte_pmd_i40e_flow_type_mapping_get(res->port_id,
+ mapping);
+ if (ret)
+ return;
+ if (mapping[flow_type].pctype == 0ULL) {
+ fprintf(stderr, "Invalid flow type specified.\n");
+ return;
+ }
+ for (i = 0; i < RTE_PMD_I40E_PCTYPE_MAX; i++) {
+ if (mapping[flow_type].pctype & (1ULL << i)) {
+ conf.input.pctype = i;
+ break;
+ }
+ }
+
+ conf.input.packet = open_file(res->filepath,
+ &conf.input.length);
+ if (!conf.input.packet)
+ return;
+ if (!strcmp(res->drop, "drop"))
+ conf.action.behavior =
+ RTE_PMD_I40E_PKT_TEMPLATE_REJECT;
+ else
+ conf.action.behavior =
+ RTE_PMD_I40E_PKT_TEMPLATE_ACCEPT;
+ conf.action.report_status =
+ RTE_PMD_I40E_PKT_TEMPLATE_REPORT_ID;
+ conf.action.rx_queue = res->queue_id;
+ conf.soft_id = res->fd_id_value;
+ add = strcmp(res->ops, "del") ? 1 : 0;
+ ret = rte_pmd_i40e_flow_add_del_packet_template(port,
+ &conf,
+ add);
+ if (ret < 0)
+ fprintf(stderr, "flow director config error: (%s)\n",
+ strerror(-ret));
+ close_file(conf.input.packet);
+}
+
+cmdline_parse_token_string_t cmd_flow_director_filter =
+ TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
+ flow_director_filter, "flow_director_filter");
+cmdline_parse_token_num_t cmd_flow_director_port_id =
+ TOKEN_NUM_INITIALIZER(struct cmd_flow_director_result,
+ port_id, RTE_UINT16);
+cmdline_parse_token_string_t cmd_flow_director_ops =
+ TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
+ ops, "add#del#update");
+cmdline_parse_token_string_t cmd_flow_director_flow =
+ TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
+ flow, "flow");
+cmdline_parse_token_string_t cmd_flow_director_flow_type =
+ TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
+ flow_type, NULL);
+cmdline_parse_token_string_t cmd_flow_director_drop =
+ TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
+ drop, "drop#fwd");
+cmdline_parse_token_string_t cmd_flow_director_queue =
+ TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
+ queue, "queue");
+cmdline_parse_token_num_t cmd_flow_director_queue_id =
+ TOKEN_NUM_INITIALIZER(struct cmd_flow_director_result,
+ queue_id, RTE_UINT16);
+cmdline_parse_token_string_t cmd_flow_director_fd_id =
+ TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
+ fd_id, "fd_id");
+cmdline_parse_token_num_t cmd_flow_director_fd_id_value =
+ TOKEN_NUM_INITIALIZER(struct cmd_flow_director_result,
+ fd_id_value, RTE_UINT32);
+
+cmdline_parse_token_string_t cmd_flow_director_mode =
+ TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
+ mode, "mode");
+cmdline_parse_token_string_t cmd_flow_director_mode_raw =
+ TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
+ mode_value, "raw");
+cmdline_parse_token_string_t cmd_flow_director_packet =
+ TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
+ packet, "packet");
+cmdline_parse_token_string_t cmd_flow_director_filepath =
+ TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
+ filepath, NULL);
+
+cmdline_parse_inst_t cmd_add_del_raw_flow_director = {
+ .f = cmd_flow_director_filter_parsed,
+ .data = NULL,
+ .help_str = "flow_director_filter ... : Add or delete a raw flow "
+ "director entry on NIC",
+ .tokens = {
+ (void *)&cmd_flow_director_filter,
+ (void *)&cmd_flow_director_port_id,
+ (void *)&cmd_flow_director_mode,
+ (void *)&cmd_flow_director_mode_raw,
+ (void *)&cmd_flow_director_ops,
+ (void *)&cmd_flow_director_flow,
+ (void *)&cmd_flow_director_flow_type,
+ (void *)&cmd_flow_director_drop,
+ (void *)&cmd_flow_director_queue,
+ (void *)&cmd_flow_director_queue_id,
+ (void *)&cmd_flow_director_fd_id,
+ (void *)&cmd_flow_director_fd_id_value,
+ (void *)&cmd_flow_director_packet,
+ (void *)&cmd_flow_director_filepath,
+ NULL,
+ },
+};
+
+static struct testpmd_cmdline_parser driver_parser = {
+ .ctx = (cmdline_parse_ctx_t[]) {
+ (cmdline_parse_inst_t *)&cmd_queue_region,
+ (cmdline_parse_inst_t *)&cmd_region_flowtype,
+ (cmdline_parse_inst_t *)&cmd_user_priority_region,
+ (cmdline_parse_inst_t *)&cmd_flush_queue_region,
+ (cmdline_parse_inst_t *)&cmd_show_queue_region_info_all,
+ (cmdline_parse_inst_t *)&cmd_add_del_raw_flow_director,
+ NULL
+ },
+ .help = {
+ "set port (port_id) queue-region region_id (value) "
+ "queue_start_index (value) queue_num (value)\n"
+ " Set a queue region on a port\n",
+
+ "set port (port_id) queue-region region_id (value) "
+ "flowtype (value)\n"
+ " Set a flowtype region index on a port\n",
+
+ "set port (port_id) queue-region UP (value) region_id (value)\n"
+ " Set the mapping of User Priority to "
+ "queue region on a port\n",
+
+ "set port (port_id) queue-region flush (on|off)\n"
+ " flush all queue region related configuration\n",
+
+ "show port (port_id) queue-region\n"
+ " show all queue region related configuration info\n",
+
+ "flow_director_filter (port_id) mode raw (add|del|update)"
+ " flow (flow_id) (drop|fwd) queue (queue_id)"
+ " fd_id (fd_id_value) packet (packet file name)\n"
+ " Add/Del a raw type flow director filter.\n",
+
+ NULL
+ },
+};
+
+RTE_INIT(i40e_testpmd)
+{
+ testpmd_add_commands(&driver_parser);
+}
@@ -21,6 +21,8 @@ sources = files(
'rte_pmd_i40e.c',
)
+testpmd_sources = files('i40e_testpmd.c')
+
deps += ['hash']
includes += include_directories('base')