app/testpmd: show supported packet types
[dpdk.git] / app / test-pmd / cmdline.c
index dd4e6e6..6597608 100644 (file)
 #include <termios.h>
 #include <unistd.h>
 #include <inttypes.h>
-#ifndef __linux__
-#ifndef __FreeBSD__
-#include <net/socket.h>
-#else
+#ifdef __FreeBSD__
 #include <sys/socket.h>
 #endif
-#endif
 #include <netinet/in.h>
 
 #include <sys/queue.h>
@@ -238,6 +234,10 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "    Show Tx metadata value set"
                        " for a specific port\n\n"
 
+                       "show port (port_id) ptypes\n"
+                       "    Show port supported ptypes"
+                       " for a specific port\n\n"
+
                        "show device info (<identifier>|all)"
                        "       Show general information about devices probed.\n\n"
                );
@@ -758,6 +758,9 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "port close (port_id|all)\n"
                        "    Close all ports or port_id.\n\n"
 
+                       "port reset (port_id|all)\n"
+                       "    Reset all ports or port_id.\n\n"
+
                        "port attach (ident)\n"
                        "    Attach physical or virtual dev by pci address or virtual device name\n\n"
 
@@ -1053,7 +1056,7 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "get_hash_global_config (port_id)\n"
                        "    Get the global configurations of hash filters.\n\n"
 
-                       "set_hash_global_config (port_id) (toeplitz|simple_xor|default)"
+                       "set_hash_global_config (port_id) (toeplitz|simple_xor|symmetric_toeplitz|default)"
                        " (ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|"
                        "ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload)"
                        " (enable|disable)\n"
@@ -12193,6 +12196,9 @@ cmd_get_hash_global_config_parsed(void *parsed_result,
        case RTE_ETH_HASH_FUNCTION_SIMPLE_XOR:
                printf("Hash function is Simple XOR\n");
                break;
+       case RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ:
+               printf("Hash function is Symmetric Toeplitz\n");
+               break;
        default:
                printf("Unknown hash function\n");
                break;
@@ -12266,6 +12272,9 @@ cmd_set_hash_global_config_parsed(void *parsed_result,
        else if (!strcmp(res->hash_func, "simple_xor"))
                info.info.global_conf.hash_func =
                        RTE_ETH_HASH_FUNCTION_SIMPLE_XOR;
+       else if (!strcmp(res->hash_func, "symmetric_toeplitz"))
+               info.info.global_conf.hash_func =
+                       RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ;
        else if (!strcmp(res->hash_func, "default"))
                info.info.global_conf.hash_func =
                        RTE_ETH_HASH_FUNCTION_DEFAULT;
@@ -12295,7 +12304,7 @@ cmdline_parse_token_num_t cmd_set_hash_global_config_port_id =
                port_id, UINT16);
 cmdline_parse_token_string_t cmd_set_hash_global_config_hash_func =
        TOKEN_STRING_INITIALIZER(struct cmd_set_hash_global_config_result,
-               hash_func, "toeplitz#simple_xor#default");
+               hash_func, "toeplitz#simple_xor#symmetric_toeplitz#default");
 cmdline_parse_token_string_t cmd_set_hash_global_config_flow_type =
        TOKEN_STRING_INITIALIZER(struct cmd_set_hash_global_config_result,
                flow_type,
@@ -12309,7 +12318,7 @@ cmdline_parse_inst_t cmd_set_hash_global_config = {
        .f = cmd_set_hash_global_config_parsed,
        .data = NULL,
        .help_str = "set_hash_global_config <port_id> "
-               "toeplitz|simple_xor|default "
+               "toeplitz|simple_xor|symmetric_toeplitz|default "
                "ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|"
                "ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|"
                "l2_payload enable|disable",
@@ -18793,6 +18802,114 @@ cmdline_parse_inst_t cmd_show_tx_metadata = {
        },
 };
 
+/* show port supported ptypes */
+
+/* Common result structure for show port ptypes */
+struct cmd_show_port_supported_ptypes_result {
+       cmdline_fixed_string_t show;
+       cmdline_fixed_string_t port;
+       portid_t port_id;
+       cmdline_fixed_string_t ptypes;
+};
+
+/* Common CLI fields for show port ptypes */
+cmdline_parse_token_string_t cmd_show_port_supported_ptypes_show =
+       TOKEN_STRING_INITIALIZER
+               (struct cmd_show_port_supported_ptypes_result,
+                show, "show");
+cmdline_parse_token_string_t cmd_show_port_supported_ptypes_port =
+       TOKEN_STRING_INITIALIZER
+               (struct cmd_show_port_supported_ptypes_result,
+                port, "port");
+cmdline_parse_token_num_t cmd_show_port_supported_ptypes_port_id =
+       TOKEN_NUM_INITIALIZER
+               (struct cmd_show_port_supported_ptypes_result,
+                port_id, UINT16);
+cmdline_parse_token_string_t cmd_show_port_supported_ptypes_ptypes =
+       TOKEN_STRING_INITIALIZER
+               (struct cmd_show_port_supported_ptypes_result,
+                ptypes, "ptypes");
+
+static void
+cmd_show_port_supported_ptypes_parsed(
+       void *parsed_result,
+       __attribute__((unused)) struct cmdline *cl,
+       __attribute__((unused)) void *data)
+{
+#define RSVD_PTYPE_MASK       0xf0000000
+#define MAX_PTYPES_PER_LAYER  16
+#define LTYPE_NAMESIZE        32
+#define PTYPE_NAMESIZE        256
+       struct cmd_show_port_supported_ptypes_result *res = parsed_result;
+       char buf[PTYPE_NAMESIZE], ltype[LTYPE_NAMESIZE];
+       uint32_t ptype_mask = RTE_PTYPE_L2_MASK;
+       uint32_t ptypes[MAX_PTYPES_PER_LAYER];
+       uint16_t port_id = res->port_id;
+       int ret, i;
+
+       ret = rte_eth_dev_get_supported_ptypes(port_id, ptype_mask, NULL, 0);
+       if (ret < 0)
+               return;
+
+       while (ptype_mask != RSVD_PTYPE_MASK) {
+
+               switch (ptype_mask) {
+               case RTE_PTYPE_L2_MASK:
+                       strlcpy(ltype, "L2", sizeof(ltype));
+                       break;
+               case RTE_PTYPE_L3_MASK:
+                       strlcpy(ltype, "L3", sizeof(ltype));
+                       break;
+               case RTE_PTYPE_L4_MASK:
+                       strlcpy(ltype, "L4", sizeof(ltype));
+                       break;
+               case RTE_PTYPE_TUNNEL_MASK:
+                       strlcpy(ltype, "Tunnel", sizeof(ltype));
+                       break;
+               case RTE_PTYPE_INNER_L2_MASK:
+                       strlcpy(ltype, "Inner L2", sizeof(ltype));
+                       break;
+               case RTE_PTYPE_INNER_L3_MASK:
+                       strlcpy(ltype, "Inner L3", sizeof(ltype));
+                       break;
+               case RTE_PTYPE_INNER_L4_MASK:
+                       strlcpy(ltype, "Inner L4", sizeof(ltype));
+                       break;
+               default:
+                       return;
+               }
+
+               ret = rte_eth_dev_get_supported_ptypes(res->port_id,
+                                                      ptype_mask, ptypes,
+                                                      MAX_PTYPES_PER_LAYER);
+
+               if (ret > 0)
+                       printf("Supported %s ptypes:\n", ltype);
+               else
+                       printf("%s ptypes unsupported\n", ltype);
+
+               for (i = 0; i < ret; ++i) {
+                       rte_get_ptype_name(ptypes[i], buf, sizeof(buf));
+                       printf("%s\n", buf);
+               }
+
+               ptype_mask <<= 4;
+       }
+}
+
+cmdline_parse_inst_t cmd_show_port_supported_ptypes = {
+       .f = cmd_show_port_supported_ptypes_parsed,
+       .data = NULL,
+       .help_str = "show port <port_id> ptypes",
+       .tokens = {
+               (void *)&cmd_show_port_supported_ptypes_show,
+               (void *)&cmd_show_port_supported_ptypes_port,
+               (void *)&cmd_show_port_supported_ptypes_port_id,
+               (void *)&cmd_show_port_supported_ptypes_ptypes,
+               NULL,
+       },
+};
+
 /* ******************************************************************************** */
 
 /* list of instructions */
@@ -19031,6 +19148,7 @@ cmdline_parse_ctx_t main_ctx[] = {
        (cmdline_parse_inst_t *)&cmd_clear_input_set,
        (cmdline_parse_inst_t *)&cmd_show_vf_stats,
        (cmdline_parse_inst_t *)&cmd_clear_vf_stats,
+       (cmdline_parse_inst_t *)&cmd_show_port_supported_ptypes,
        (cmdline_parse_inst_t *)&cmd_ptype_mapping_get,
        (cmdline_parse_inst_t *)&cmd_ptype_mapping_replace,
        (cmdline_parse_inst_t *)&cmd_ptype_mapping_reset,