i40e: fix interrupt disabling when stopping
[dpdk.git] / app / test-pmd / cmdline.c
index d5a625b..c637198 100644 (file)
@@ -633,7 +633,8 @@ static void cmd_help_long_parsed(void *parsed_result,
                        " flow (ipv4-other|ipv4-frag|ipv6-other|ipv6-frag)"
                        " src (src_ip_address) dst (dst_ip_address)"
                        " vlan (vlan_value) flexbytes (flexbytes_value)"
-                       " (drop|fwd) queue (queue_id) fd_id (fd_id_value)\n"
+                       " (drop|fwd) pf|vf(vf_id) queue (queue_id)"
+                       " fd_id (fd_id_value)\n"
                        "    Add/Del an IP type flow director filter.\n\n"
 
                        "flow_director_filter (port_id) (add|del|update)"
@@ -641,7 +642,8 @@ static void cmd_help_long_parsed(void *parsed_result,
                        " src (src_ip_address) (src_port)"
                        " dst (dst_ip_address) (dst_port)"
                        " vlan (vlan_value) flexbytes (flexbytes_value)"
-                       " (drop|fwd) queue (queue_id) fd_id (fd_id_value)\n"
+                       " (drop|fwd) pf|vf(vf_id) queue (queue_id)"
+                       " fd_id (fd_id_value)\n"
                        "    Add/Del an UDP/TCP type flow director filter.\n\n"
 
                        "flow_director_filter (port_id) (add|del|update)"
@@ -650,13 +652,13 @@ static void cmd_help_long_parsed(void *parsed_result,
                        " dst (dst_ip_address) (dst_port)"
                        " tag (verification_tag) vlan (vlan_value)"
                        " flexbytes (flexbytes_value) (drop|fwd)"
-                       " queue (queue_id) fd_id (fd_id_value)\n"
+                       " pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value)\n"
                        "    Add/Del a SCTP type flow director filter.\n\n"
 
                        "flow_director_filter (port_id) (add|del|update)"
                        " flow l2_payload ether (ethertype)"
                        " flexbytes (flexbytes_value) (drop|fwd)"
-                       " queue (queue_id) fd_id (fd_id_value)\n"
+                       " pf|vf(vf_id) queue (queue_id) fd_id (fd_id_value)\n"
                        "    Add/Del a l2 payload type flow director filter.\n\n"
 
                        "flush_flow_director (port_id)\n"
@@ -692,6 +694,28 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload)"
                        " (enable|disable)\n"
                        "    Set the global configurations of hash filters.\n\n"
+
+                       "set_hash_input_set (port_id) (ipv4|ipv4-frag|"
+                       "ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|"
+                       "ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|"
+                       "l2_payload) (ovlan|ivlan|src-ipv4|dst-ipv4|src-ipv6|"
+                       "dst-ipv6|ipv4-tos|ipv4-proto|ipv6-tc|"
+                       "ipv6-next-header|udp-src-port|udp-dst-port|"
+                       "tcp-src-port|tcp-dst-port|sctp-src-port|"
+                       "sctp-dst-port|sctp-veri-tag|udp-key|gre-key|fld-1st|"
+                       "fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|fld-7th|"
+                       "fld-8th|none) (select|add)\n"
+                       "    Set the input set for hash.\n\n"
+
+                       "set_fdir_input_set (port_id) (ipv4|ipv4-frag|"
+                       "ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|"
+                       "ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|"
+                       "l2_payload) (src-ipv4|dst-ipv4|src-ipv6|dst-ipv6|"
+                       "udp-src-port|udp-dst-port|tcp-src-port|tcp-dst-port|"
+                       "sctp-src-port|sctp-dst-port|sctp-veri-tag|fld-1st|"
+                       "fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|fld-7th|"
+                       "fld-8th|none) (select|add)\n"
+                       "    Set the input set for FDir.\n\n"
                );
        }
 }
@@ -5352,6 +5376,53 @@ cmdline_parse_inst_t cmd_showport = {
        },
 };
 
+/* *** SHOW QUEUE INFO *** */
+struct cmd_showqueue_result {
+       cmdline_fixed_string_t show;
+       cmdline_fixed_string_t type;
+       cmdline_fixed_string_t what;
+       uint8_t portnum;
+       uint16_t queuenum;
+};
+
+static void
+cmd_showqueue_parsed(void *parsed_result,
+       __attribute__((unused)) struct cmdline *cl,
+       __attribute__((unused)) void *data)
+{
+       struct cmd_showqueue_result *res = parsed_result;
+
+       if (!strcmp(res->type, "rxq"))
+               rx_queue_infos_display(res->portnum, res->queuenum);
+       else if (!strcmp(res->type, "txq"))
+               tx_queue_infos_display(res->portnum, res->queuenum);
+}
+
+cmdline_parse_token_string_t cmd_showqueue_show =
+       TOKEN_STRING_INITIALIZER(struct cmd_showqueue_result, show, "show");
+cmdline_parse_token_string_t cmd_showqueue_type =
+       TOKEN_STRING_INITIALIZER(struct cmd_showqueue_result, type, "rxq#txq");
+cmdline_parse_token_string_t cmd_showqueue_what =
+       TOKEN_STRING_INITIALIZER(struct cmd_showqueue_result, what, "info");
+cmdline_parse_token_num_t cmd_showqueue_portnum =
+       TOKEN_NUM_INITIALIZER(struct cmd_showqueue_result, portnum, UINT8);
+cmdline_parse_token_num_t cmd_showqueue_queuenum =
+       TOKEN_NUM_INITIALIZER(struct cmd_showqueue_result, queuenum, UINT16);
+
+cmdline_parse_inst_t cmd_showqueue = {
+       .f = cmd_showqueue_parsed,
+       .data = NULL,
+       .help_str = "show rxq|txq info <port number> <queue_number>",
+       .tokens = {
+               (void *)&cmd_showqueue_show,
+               (void *)&cmd_showqueue_type,
+               (void *)&cmd_showqueue_what,
+               (void *)&cmd_showqueue_portnum,
+               (void *)&cmd_showqueue_queuenum,
+               NULL,
+       },
+};
+
 /* *** READ PORT REGISTER *** */
 struct cmd_read_reg_result {
        cmdline_fixed_string_t read;
@@ -6670,6 +6741,57 @@ cmdline_parse_inst_t cmd_tunnel_udp_config = {
        },
 };
 
+/* *** GLOBAL CONFIG *** */
+struct cmd_global_config_result {
+       cmdline_fixed_string_t cmd;
+       uint8_t port_id;
+       cmdline_fixed_string_t cfg_type;
+       uint8_t len;
+};
+
+static void
+cmd_global_config_parsed(void *parsed_result,
+                        __attribute__((unused)) struct cmdline *cl,
+                        __attribute__((unused)) void *data)
+{
+       struct cmd_global_config_result *res = parsed_result;
+       struct rte_eth_global_cfg conf;
+       int ret;
+
+       memset(&conf, 0, sizeof(conf));
+       conf.cfg_type = RTE_ETH_GLOBAL_CFG_TYPE_GRE_KEY_LEN;
+       conf.cfg.gre_key_len = res->len;
+       ret = rte_eth_dev_filter_ctrl(res->port_id, RTE_ETH_FILTER_NONE,
+                                     RTE_ETH_FILTER_SET, &conf);
+       if (ret != 0)
+               printf("Global config error\n");
+}
+
+cmdline_parse_token_string_t cmd_global_config_cmd =
+       TOKEN_STRING_INITIALIZER(struct cmd_global_config_result, cmd,
+               "global_config");
+cmdline_parse_token_num_t cmd_global_config_port_id =
+       TOKEN_NUM_INITIALIZER(struct cmd_global_config_result, port_id, UINT8);
+cmdline_parse_token_string_t cmd_global_config_type =
+       TOKEN_STRING_INITIALIZER(struct cmd_global_config_result,
+               cfg_type, "gre-key-len");
+cmdline_parse_token_num_t cmd_global_config_gre_key_len =
+       TOKEN_NUM_INITIALIZER(struct cmd_global_config_result,
+               len, UINT8);
+
+cmdline_parse_inst_t cmd_global_config = {
+       .f = cmd_global_config_parsed,
+       .data = (void *)NULL,
+       .help_str = "global_config <port_id> gre-key-len <number>",
+       .tokens = {
+               (void *)&cmd_global_config_cmd,
+               (void *)&cmd_global_config_port_id,
+               (void *)&cmd_global_config_type,
+               (void *)&cmd_global_config_gre_key_len,
+               NULL,
+       },
+};
+
 /* *** CONFIGURE VM MIRROR VLAN/POOL RULE *** */
 struct cmd_set_mirror_mask_result {
        cmdline_fixed_string_t set;
@@ -7791,6 +7913,7 @@ struct cmd_flow_director_result {
        uint16_t vlan_value;
        cmdline_fixed_string_t flexbytes;
        cmdline_fixed_string_t flexbytes_value;
+       cmdline_fixed_string_t pf_vf;
        cmdline_fixed_string_t drop;
        cmdline_fixed_string_t queue;
        uint16_t  queue_id;
@@ -7923,6 +8046,8 @@ cmd_flow_director_filter_parsed(void *parsed_result,
        struct cmd_flow_director_result *res = parsed_result;
        struct rte_eth_fdir_filter entry;
        uint8_t flexbytes[RTE_ETH_FDIR_MAX_FLEXLEN];
+       char *end;
+       unsigned long vf_id;
        int ret = 0;
 
        ret = rte_eth_dev_filter_supported(res->port_id, RTE_ETH_FILTER_FDIR);
@@ -8049,6 +8174,27 @@ cmd_flow_director_filter_parsed(void *parsed_result,
                entry.action.behavior = RTE_ETH_FDIR_REJECT;
        else
                entry.action.behavior = RTE_ETH_FDIR_ACCEPT;
+
+       if (!strcmp(res->pf_vf, "pf"))
+               entry.input.flow_ext.is_vf = 0;
+       else if (!strncmp(res->pf_vf, "vf", 2)) {
+               struct rte_eth_dev_info dev_info;
+
+               memset(&dev_info, 0, sizeof(dev_info));
+               rte_eth_dev_info_get(res->port_id, &dev_info);
+               errno = 0;
+               vf_id = strtoul(res->pf_vf + 2, &end, 10);
+               if (errno != 0 || *end != '\0' || vf_id >= dev_info.max_vfs) {
+                       printf("invalid parameter %s.\n", res->pf_vf);
+                       return;
+               }
+               entry.input.flow_ext.is_vf = 1;
+               entry.input.flow_ext.dst_id = (uint16_t)vf_id;
+       } else {
+               printf("invalid parameter %s.\n", res->pf_vf);
+               return;
+       }
+
        /* set to report FD ID by default */
        entry.action.report_status = RTE_ETH_FDIR_REPORT_ID;
        entry.action.rx_queue = res->queue_id;
@@ -8128,6 +8274,9 @@ cmdline_parse_token_string_t cmd_flow_director_flexbytes_value =
 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_pf_vf =
+       TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
+                             pf_vf, NULL);
 cmdline_parse_token_string_t cmd_flow_director_queue =
        TOKEN_STRING_INITIALIZER(struct cmd_flow_director_result,
                                 queue, "queue");
@@ -8193,6 +8342,7 @@ cmdline_parse_inst_t cmd_add_del_ip_flow_director = {
                (void *)&cmd_flow_director_flexbytes,
                (void *)&cmd_flow_director_flexbytes_value,
                (void *)&cmd_flow_director_drop,
+               (void *)&cmd_flow_director_pf_vf,
                (void *)&cmd_flow_director_queue,
                (void *)&cmd_flow_director_queue_id,
                (void *)&cmd_flow_director_fd_id,
@@ -8224,6 +8374,7 @@ cmdline_parse_inst_t cmd_add_del_udp_flow_director = {
                (void *)&cmd_flow_director_flexbytes,
                (void *)&cmd_flow_director_flexbytes_value,
                (void *)&cmd_flow_director_drop,
+               (void *)&cmd_flow_director_pf_vf,
                (void *)&cmd_flow_director_queue,
                (void *)&cmd_flow_director_queue_id,
                (void *)&cmd_flow_director_fd_id,
@@ -8257,6 +8408,7 @@ cmdline_parse_inst_t cmd_add_del_sctp_flow_director = {
                (void *)&cmd_flow_director_flexbytes,
                (void *)&cmd_flow_director_flexbytes_value,
                (void *)&cmd_flow_director_drop,
+               (void *)&cmd_flow_director_pf_vf,
                (void *)&cmd_flow_director_queue,
                (void *)&cmd_flow_director_queue_id,
                (void *)&cmd_flow_director_fd_id,
@@ -8282,6 +8434,7 @@ cmdline_parse_inst_t cmd_add_del_l2_flow_director = {
                (void *)&cmd_flow_director_flexbytes,
                (void *)&cmd_flow_director_flexbytes_value,
                (void *)&cmd_flow_director_drop,
+               (void *)&cmd_flow_director_pf_vf,
                (void *)&cmd_flow_director_queue,
                (void *)&cmd_flow_director_queue_id,
                (void *)&cmd_flow_director_fd_id,
@@ -9158,6 +9311,200 @@ cmdline_parse_inst_t cmd_set_hash_global_config = {
        },
 };
 
+/* Set hash input set */
+struct cmd_set_hash_input_set_result {
+       cmdline_fixed_string_t set_hash_input_set;
+       uint8_t port_id;
+       cmdline_fixed_string_t flow_type;
+       cmdline_fixed_string_t inset_field;
+       cmdline_fixed_string_t select;
+};
+
+static enum rte_eth_input_set_field
+str2inset(char *string)
+{
+       uint16_t i;
+
+       static const struct {
+               char str[32];
+               enum rte_eth_input_set_field inset;
+       } inset_table[] = {
+               {"ovlan", RTE_ETH_INPUT_SET_L2_OUTER_VLAN},
+               {"ivlan", RTE_ETH_INPUT_SET_L2_INNER_VLAN},
+               {"src-ipv4", RTE_ETH_INPUT_SET_L3_SRC_IP4},
+               {"dst-ipv4", RTE_ETH_INPUT_SET_L3_DST_IP4},
+               {"ipv4-tos", RTE_ETH_INPUT_SET_L3_IP4_TOS},
+               {"ipv4-proto", RTE_ETH_INPUT_SET_L3_IP4_PROTO},
+               {"src-ipv6", RTE_ETH_INPUT_SET_L3_SRC_IP6},
+               {"dst-ipv6", RTE_ETH_INPUT_SET_L3_DST_IP6},
+               {"ipv6-tc", RTE_ETH_INPUT_SET_L3_IP6_TC},
+               {"ipv6-next-header", RTE_ETH_INPUT_SET_L3_IP6_NEXT_HEADER},
+               {"udp-src-port", RTE_ETH_INPUT_SET_L4_UDP_SRC_PORT},
+               {"udp-dst-port", RTE_ETH_INPUT_SET_L4_UDP_DST_PORT},
+               {"tcp-src-port", RTE_ETH_INPUT_SET_L4_TCP_SRC_PORT},
+               {"tcp-dst-port", RTE_ETH_INPUT_SET_L4_TCP_DST_PORT},
+               {"sctp-src-port", RTE_ETH_INPUT_SET_L4_SCTP_SRC_PORT},
+               {"sctp-dst-port", RTE_ETH_INPUT_SET_L4_SCTP_DST_PORT},
+               {"sctp-veri-tag", RTE_ETH_INPUT_SET_L4_SCTP_VERIFICATION_TAG},
+               {"udp-key", RTE_ETH_INPUT_SET_TUNNEL_L4_UDP_KEY},
+               {"gre-key", RTE_ETH_INPUT_SET_TUNNEL_GRE_KEY},
+               {"fld-1st", RTE_ETH_INPUT_SET_FLEX_PAYLOAD_1ST_WORD},
+               {"fld-2nd", RTE_ETH_INPUT_SET_FLEX_PAYLOAD_2ND_WORD},
+               {"fld-3rd", RTE_ETH_INPUT_SET_FLEX_PAYLOAD_3RD_WORD},
+               {"fld-4th", RTE_ETH_INPUT_SET_FLEX_PAYLOAD_4TH_WORD},
+               {"fld-5th", RTE_ETH_INPUT_SET_FLEX_PAYLOAD_5TH_WORD},
+               {"fld-6th", RTE_ETH_INPUT_SET_FLEX_PAYLOAD_6TH_WORD},
+               {"fld-7th", RTE_ETH_INPUT_SET_FLEX_PAYLOAD_7TH_WORD},
+               {"fld-8th", RTE_ETH_INPUT_SET_FLEX_PAYLOAD_8TH_WORD},
+               {"none", RTE_ETH_INPUT_SET_NONE},
+       };
+
+       for (i = 0; i < RTE_DIM(inset_table); i++) {
+               if (!strcmp(string, inset_table[i].str))
+                       return inset_table[i].inset;
+       }
+
+       return RTE_ETH_INPUT_SET_UNKNOWN;
+}
+
+static void
+cmd_set_hash_input_set_parsed(void *parsed_result,
+                             __rte_unused struct cmdline *cl,
+                             __rte_unused void *data)
+{
+       struct cmd_set_hash_input_set_result *res = parsed_result;
+       struct rte_eth_hash_filter_info info;
+
+       memset(&info, 0, sizeof(info));
+       info.info_type = RTE_ETH_HASH_FILTER_INPUT_SET_SELECT;
+       info.info.input_set_conf.flow_type = str2flowtype(res->flow_type);
+       info.info.input_set_conf.field[0] = str2inset(res->inset_field);
+       info.info.input_set_conf.inset_size = 1;
+       if (!strcmp(res->select, "select"))
+               info.info.input_set_conf.op = RTE_ETH_INPUT_SET_SELECT;
+       else if (!strcmp(res->select, "add"))
+               info.info.input_set_conf.op = RTE_ETH_INPUT_SET_ADD;
+       rte_eth_dev_filter_ctrl(res->port_id, RTE_ETH_FILTER_HASH,
+                               RTE_ETH_FILTER_SET, &info);
+}
+
+cmdline_parse_token_string_t cmd_set_hash_input_set_cmd =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_hash_input_set_result,
+               set_hash_input_set, "set_hash_input_set");
+cmdline_parse_token_num_t cmd_set_hash_input_set_port_id =
+       TOKEN_NUM_INITIALIZER(struct cmd_set_hash_input_set_result,
+               port_id, UINT8);
+cmdline_parse_token_string_t cmd_set_hash_input_set_flow_type =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_hash_input_set_result,
+               flow_type,
+               "ipv4#ipv4-frag#ipv4-tcp#ipv4-udp#ipv4-sctp#ipv4-other#ipv6#"
+               "ipv6-frag#ipv6-tcp#ipv6-udp#ipv6-sctp#ipv6-other#l2_payload");
+cmdline_parse_token_string_t cmd_set_hash_input_set_field =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_hash_input_set_result,
+               inset_field,
+               "ovlan#ivlan#src-ipv4#dst-ipv4#src-ipv6#dst-ipv6#"
+               "ipv4-tos#ipv4-proto#ipv6-tc#ipv6-next-header#udp-src-port#"
+               "udp-dst-port#tcp-src-port#tcp-dst-port#sctp-src-port#"
+               "sctp-dst-port#sctp-veri-tag#udp-key#gre-key#fld-1st#"
+               "fld-2nd#fld-3rd#fld-4th#fld-5th#fld-6th#fld-7th#"
+               "fld-8th#none");
+cmdline_parse_token_string_t cmd_set_hash_input_set_select =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_hash_input_set_result,
+               select, "select#add");
+
+cmdline_parse_inst_t cmd_set_hash_input_set = {
+       .f = cmd_set_hash_input_set_parsed,
+       .data = NULL,
+       .help_str = "set_hash_input_set <port_id> "
+       "ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag|"
+       "ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload "
+       "ovlan|ivlan|src-ipv4|dst-ipv4|src-ipv6|dst-ipv6|ipv4-tos|ipv4-proto|"
+       "ipv6-tc|ipv6-next-header|udp-src-port|udp-dst-port|tcp-src-port|"
+       "tcp-dst-port|sctp-src-port|sctp-dst-port|sctp-veri-tag|udp-key|"
+       "gre-key|fld-1st|fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|"
+       "fld-7th|fld-8th|none select|add",
+       .tokens = {
+               (void *)&cmd_set_hash_input_set_cmd,
+               (void *)&cmd_set_hash_input_set_port_id,
+               (void *)&cmd_set_hash_input_set_flow_type,
+               (void *)&cmd_set_hash_input_set_field,
+               (void *)&cmd_set_hash_input_set_select,
+               NULL,
+       },
+};
+
+/* Set flow director input set */
+struct cmd_set_fdir_input_set_result {
+       cmdline_fixed_string_t set_fdir_input_set;
+       uint8_t port_id;
+       cmdline_fixed_string_t flow_type;
+       cmdline_fixed_string_t inset_field;
+       cmdline_fixed_string_t select;
+};
+
+static void
+cmd_set_fdir_input_set_parsed(void *parsed_result,
+       __rte_unused struct cmdline *cl,
+       __rte_unused void *data)
+{
+       struct cmd_set_fdir_input_set_result *res = parsed_result;
+       struct rte_eth_fdir_filter_info info;
+
+       memset(&info, 0, sizeof(info));
+       info.info_type = RTE_ETH_FDIR_FILTER_INPUT_SET_SELECT;
+       info.info.input_set_conf.flow_type = str2flowtype(res->flow_type);
+       info.info.input_set_conf.field[0] = str2inset(res->inset_field);
+       info.info.input_set_conf.inset_size = 1;
+       if (!strcmp(res->select, "select"))
+               info.info.input_set_conf.op = RTE_ETH_INPUT_SET_SELECT;
+       else if (!strcmp(res->select, "add"))
+               info.info.input_set_conf.op = RTE_ETH_INPUT_SET_ADD;
+       rte_eth_dev_filter_ctrl(res->port_id, RTE_ETH_FILTER_FDIR,
+               RTE_ETH_FILTER_SET, &info);
+}
+
+cmdline_parse_token_string_t cmd_set_fdir_input_set_cmd =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_fdir_input_set_result,
+       set_fdir_input_set, "set_fdir_input_set");
+cmdline_parse_token_num_t cmd_set_fdir_input_set_port_id =
+       TOKEN_NUM_INITIALIZER(struct cmd_set_fdir_input_set_result,
+       port_id, UINT8);
+cmdline_parse_token_string_t cmd_set_fdir_input_set_flow_type =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_fdir_input_set_result,
+       flow_type,
+       "ipv4#ipv4-frag#ipv4-tcp#ipv4-udp#ipv4-sctp#ipv4-other#ipv6#"
+       "ipv6-frag#ipv6-tcp#ipv6-udp#ipv6-sctp#ipv6-other#l2_payload");
+cmdline_parse_token_string_t cmd_set_fdir_input_set_field =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_fdir_input_set_result,
+       inset_field,
+       "src-ipv4#dst-ipv4#src-ipv6#dst-ipv6#udp-src-port#udp-dst-port#"
+       "tcp-src-port#tcp-dst-port#sctp-src-port#sctp-dst-port#"
+       "sctp-veri-tag#fld-1st#fld-2nd#fld-3rd#fld-4th#fld-5th#fld-6th#"
+       "fld-7th#fld-8th#none");
+cmdline_parse_token_string_t cmd_set_fdir_input_set_select =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_fdir_input_set_result,
+       select, "select#add");
+
+cmdline_parse_inst_t cmd_set_fdir_input_set = {
+       .f = cmd_set_fdir_input_set_parsed,
+       .data = NULL,
+       .help_str = "set_fdir_input_set <port_id> "
+       "ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag|"
+       "ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload "
+       "src-ipv4|dst-ipv4|src-ipv6|dst-ipv6|udp-src-port|udp-dst-port|"
+       "tcp-src-port|tcp-dst-port|sctp-src-port|sctp-dst-port|sctp-veri-tag|"
+       "fld-1st|fld-2nd|fld-3rd|fld-4th|fld-5th|fld-6th|"
+       "fld-7th|fld-8th|none select|add",
+       .tokens = {
+               (void *)&cmd_set_fdir_input_set_cmd,
+               (void *)&cmd_set_fdir_input_set_port_id,
+               (void *)&cmd_set_fdir_input_set_flow_type,
+               (void *)&cmd_set_fdir_input_set_field,
+               (void *)&cmd_set_fdir_input_set_select,
+               NULL,
+       },
+};
+
 /* *** ADD/REMOVE A MULTICAST MAC ADDRESS TO/FROM A PORT *** */
 struct cmd_mcast_addr_result {
        cmdline_fixed_string_t mcast_addr_cmd;
@@ -9217,6 +9564,7 @@ cmdline_parse_ctx_t main_ctx[] = {
        (cmdline_parse_inst_t *)&cmd_help_long,
        (cmdline_parse_inst_t *)&cmd_quit,
        (cmdline_parse_inst_t *)&cmd_showport,
+       (cmdline_parse_inst_t *)&cmd_showqueue,
        (cmdline_parse_inst_t *)&cmd_showportall,
        (cmdline_parse_inst_t *)&cmd_showcfg,
        (cmdline_parse_inst_t *)&cmd_start,
@@ -9315,6 +9663,7 @@ cmdline_parse_ctx_t main_ctx[] = {
        (cmdline_parse_inst_t *)&cmd_vf_rate_limit,
        (cmdline_parse_inst_t *)&cmd_tunnel_filter,
        (cmdline_parse_inst_t *)&cmd_tunnel_udp_config,
+       (cmdline_parse_inst_t *)&cmd_global_config,
        (cmdline_parse_inst_t *)&cmd_set_mirror_mask,
        (cmdline_parse_inst_t *)&cmd_set_mirror_link,
        (cmdline_parse_inst_t *)&cmd_reset_mirror_rule,
@@ -9344,6 +9693,8 @@ cmdline_parse_ctx_t main_ctx[] = {
        (cmdline_parse_inst_t *)&cmd_set_sym_hash_ena_per_port,
        (cmdline_parse_inst_t *)&cmd_get_hash_global_config,
        (cmdline_parse_inst_t *)&cmd_set_hash_global_config,
+       (cmdline_parse_inst_t *)&cmd_set_hash_input_set,
+       (cmdline_parse_inst_t *)&cmd_set_fdir_input_set,
        (cmdline_parse_inst_t *)&cmd_mcast_addr,
        NULL,
 };