net/virtio: set default speed unknown
[dpdk.git] / app / test-pmd / cmdline.c
index 22fb23a..524c75b 100644 (file)
@@ -95,7 +95,7 @@ static void cmd_help_brief_parsed(__rte_unused void *parsed_result,
                "    help ports                      : Configuring ports.\n"
                "    help registers                  : Reading and setting port registers.\n"
                "    help filters                    : Filters configuration help.\n"
-               "    help traffic_management         : Traffic Management commmands.\n"
+               "    help traffic_management         : Traffic Management commands.\n"
                "    help devices                    : Device related cmds.\n"
                "    help all                        : All of the above sections.\n\n"
        );
@@ -166,6 +166,9 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "show port (info|stats|summary|xstats|fdir|stat_qmap|dcb_tc|cap) (port_id|all)\n"
                        "    Display information for port_id, or all.\n\n"
 
+                       "show port port_id (module_eeprom|eeprom)\n"
+                       "    Display the module EEPROM or EEPROM information for port_id.\n\n"
+
                        "show port X rss reta (size) (mask0,mask1,...)\n"
                        "    Display the rss redirection table entry indicated"
                        " by masks on port X. size is used to indicate the"
@@ -294,6 +297,10 @@ static void cmd_help_long_parsed(void *parsed_result,
                        " Right now only applicable for CSUM and TXONLY"
                        " modes\n\n"
 
+                       "set txtimes (x, y)\n"
+                       "    Set the scheduling on timestamps"
+                       " timings for the TXONLY mode\n\n"
+
                        "set corelist (x[,y]*)\n"
                        "    Set the list of forwarding cores.\n\n"
 
@@ -525,6 +532,12 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "    Set the option to hide the zero values"
                        " for xstats display.\n"
 
+                       "set record-core-cycles on|off\n"
+                       "    Set the option to enable measurement of CPU cycles.\n"
+
+                       "set record-burst-stats on|off\n"
+                       "    Set the option to enable display of RX and TX bursts.\n"
+
                        "set port (port_id) vf (vf_id) rx|tx on|off\n"
                        "    Enable/Disable a VF receive/tranmit from a port\n\n"
 
@@ -769,7 +782,7 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "    Detach physical or virtual dev by port_id\n\n"
 
                        "port config (port_id|all)"
-                       " speed (10|100|1000|10000|25000|40000|50000|100000|auto)"
+                       " speed (10|100|1000|10000|25000|40000|50000|100000|200000|auto)"
                        " duplex (half|full|auto)\n"
                        "    Set speed and duplex for all ports or port_id\n\n"
 
@@ -790,7 +803,8 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "receive buffers available.\n\n"
 
                        "port config all rss (all|default|ip|tcp|udp|sctp|"
-                       "ether|port|vxlan|geneve|nvgre|vxlan-gpe|none|<flowtype_id>)\n"
+                       "ether|port|vxlan|geneve|nvgre|vxlan-gpe|none|level-default|"
+                       "level-outer|level-inner|<flowtype_id>)\n"
                        "    Set the RSS mode.\n\n"
 
                        "port config port-id rss reta (hash,queue)[,(hash,queue)]\n"
@@ -1125,6 +1139,10 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "    Restrict ingress traffic to the defined"
                        " flow rules\n\n"
 
+                       "flow aged {port_id} [destroy]\n"
+                       "    List and destroy aged flows"
+                       " flow rules\n\n"
+
                        "set vxlan ip-version (ipv4|ipv6) vni (vni) udp-src"
                        " (udp-src) udp-dst (udp-dst) ip-src (ip-src) ip-dst"
                        " (ip-dst) eth-src (eth-src) eth-dst (eth-dst)\n"
@@ -1182,14 +1200,9 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "show port tm node stats (port_id) (node_id) (clear)\n"
                        "       Display the port TM node stats.\n\n"
 
-#if defined RTE_LIBRTE_PMD_SOFTNIC && defined RTE_LIBRTE_SCHED
-                       "set port tm hierarchy default (port_id)\n"
-                       "       Set default traffic Management hierarchy on a port\n\n"
-#endif
-
                        "add port tm node shaper profile (port_id) (shaper_profile_id)"
                        " (cmit_tb_rate) (cmit_tb_size) (peak_tb_rate) (peak_tb_size)"
-                       " (packet_length_adjust)\n"
+                       " (packet_length_adjust) (packet_mode)\n"
                        "       Add port tm node private shaper profile.\n\n"
 
                        "del port tm node shaper profile (port_id) (shaper_profile_id)\n"
@@ -1221,6 +1234,12 @@ static void cmd_help_long_parsed(void *parsed_result,
                        " [(shared_shaper_id_0) (shared_shaper_id_1)...]\n"
                        "       Add port tm nonleaf node.\n\n"
 
+                       "add port tm nonleaf node pktmode (port_id) (node_id) (parent_node_id)"
+                       " (priority) (weight) (level_id) (shaper_profile_id)"
+                       " (n_sp_priorities) (stats_mask) (n_shared_shapers)"
+                       " [(shared_shaper_id_0) (shared_shaper_id_1)...]\n"
+                       "       Add port tm nonleaf node with pkt mode enabled.\n\n"
+
                        "add port tm leaf node (port_id) (node_id) (parent_node_id)"
                        " (priority) (weight) (level_id) (shaper_profile_id)"
                        " (cman_mode) (wred_profile_id) (stats_mask) (n_shared_shapers)"
@@ -1619,6 +1638,8 @@ parse_and_check_speed_duplex(char *speedstr, char *duplexstr, uint32_t *speed)
                        *speed = ETH_LINK_SPEED_50G;
                } else if (!strcmp(speedstr, "100000")) {
                        *speed = ETH_LINK_SPEED_100G;
+               } else if (!strcmp(speedstr, "200000")) {
+                       *speed = ETH_LINK_SPEED_200G;
                } else if (!strcmp(speedstr, "auto")) {
                        *speed = ETH_LINK_SPEED_AUTONEG;
                } else {
@@ -1666,7 +1687,7 @@ cmdline_parse_token_string_t cmd_config_speed_all_item1 =
        TOKEN_STRING_INITIALIZER(struct cmd_config_speed_all, item1, "speed");
 cmdline_parse_token_string_t cmd_config_speed_all_value1 =
        TOKEN_STRING_INITIALIZER(struct cmd_config_speed_all, value1,
-                               "10#100#1000#10000#25000#40000#50000#100000#auto");
+                               "10#100#1000#10000#25000#40000#50000#100000#200000#auto");
 cmdline_parse_token_string_t cmd_config_speed_all_item2 =
        TOKEN_STRING_INITIALIZER(struct cmd_config_speed_all, item2, "duplex");
 cmdline_parse_token_string_t cmd_config_speed_all_value2 =
@@ -1677,7 +1698,7 @@ cmdline_parse_inst_t cmd_config_speed_all = {
        .f = cmd_config_speed_all_parsed,
        .data = NULL,
        .help_str = "port config all speed "
-               "10|100|1000|10000|25000|40000|50000|100000|auto duplex "
+               "10|100|1000|10000|25000|40000|50000|100000|200000|auto duplex "
                                                        "half|full|auto",
        .tokens = {
                (void *)&cmd_config_speed_all_port,
@@ -1741,7 +1762,7 @@ cmdline_parse_token_string_t cmd_config_speed_specific_item1 =
                                                                "speed");
 cmdline_parse_token_string_t cmd_config_speed_specific_value1 =
        TOKEN_STRING_INITIALIZER(struct cmd_config_speed_specific, value1,
-                               "10#100#1000#10000#25000#40000#50000#100000#auto");
+                               "10#100#1000#10000#25000#40000#50000#100000#200000#auto");
 cmdline_parse_token_string_t cmd_config_speed_specific_item2 =
        TOKEN_STRING_INITIALIZER(struct cmd_config_speed_specific, item2,
                                                                "duplex");
@@ -1753,7 +1774,7 @@ cmdline_parse_inst_t cmd_config_speed_specific = {
        .f = cmd_config_speed_specific_parsed,
        .data = NULL,
        .help_str = "port config <port_id> speed "
-               "10|100|1000|10000|25000|40000|50000|100000|auto duplex "
+               "10|100|1000|10000|25000|40000|50000|100000|200000|auto duplex "
                                                        "half|full|auto",
        .tokens = {
                (void *)&cmd_config_speed_specific_port,
@@ -2268,7 +2289,7 @@ cmd_config_rss_parsed(void *parsed_result,
                rss_conf.rss_hf = ETH_RSS_ETH | ETH_RSS_VLAN | ETH_RSS_IP |
                        ETH_RSS_TCP | ETH_RSS_UDP | ETH_RSS_SCTP |
                        ETH_RSS_L2_PAYLOAD | ETH_RSS_L2TPV3 | ETH_RSS_ESP |
-                       ETH_RSS_AH | ETH_RSS_PFCP;
+                       ETH_RSS_AH | ETH_RSS_PFCP | ETH_RSS_GTPU;
        else if (!strcmp(res->value, "eth"))
                rss_conf.rss_hf = ETH_RSS_ETH;
        else if (!strcmp(res->value, "vlan"))
@@ -2291,6 +2312,18 @@ cmd_config_rss_parsed(void *parsed_result,
                rss_conf.rss_hf = ETH_RSS_GENEVE;
        else if (!strcmp(res->value, "nvgre"))
                rss_conf.rss_hf = ETH_RSS_NVGRE;
+       else if (!strcmp(res->value, "l3-pre32"))
+               rss_conf.rss_hf = RTE_ETH_RSS_L3_PRE32;
+       else if (!strcmp(res->value, "l3-pre40"))
+               rss_conf.rss_hf = RTE_ETH_RSS_L3_PRE40;
+       else if (!strcmp(res->value, "l3-pre48"))
+               rss_conf.rss_hf = RTE_ETH_RSS_L3_PRE48;
+       else if (!strcmp(res->value, "l3-pre56"))
+               rss_conf.rss_hf = RTE_ETH_RSS_L3_PRE56;
+       else if (!strcmp(res->value, "l3-pre64"))
+               rss_conf.rss_hf = RTE_ETH_RSS_L3_PRE64;
+       else if (!strcmp(res->value, "l3-pre96"))
+               rss_conf.rss_hf = RTE_ETH_RSS_L3_PRE96;
        else if (!strcmp(res->value, "l3-src-only"))
                rss_conf.rss_hf = ETH_RSS_L3_SRC_ONLY;
        else if (!strcmp(res->value, "l3-dst-only"))
@@ -2311,9 +2344,22 @@ cmd_config_rss_parsed(void *parsed_result,
                rss_conf.rss_hf = ETH_RSS_AH;
        else if (!strcmp(res->value, "pfcp"))
                rss_conf.rss_hf = ETH_RSS_PFCP;
+       else if (!strcmp(res->value, "pppoe"))
+               rss_conf.rss_hf = ETH_RSS_PPPOE;
+       else if (!strcmp(res->value, "gtpu"))
+               rss_conf.rss_hf = ETH_RSS_GTPU;
        else if (!strcmp(res->value, "none"))
                rss_conf.rss_hf = 0;
-       else if (!strcmp(res->value, "default"))
+       else if (!strcmp(res->value, "level-default")) {
+               rss_hf &= (~ETH_RSS_LEVEL_MASK);
+               rss_conf.rss_hf = (rss_hf | ETH_RSS_LEVEL_PMD_DEFAULT);
+       } else if (!strcmp(res->value, "level-outer")) {
+               rss_hf &= (~ETH_RSS_LEVEL_MASK);
+               rss_conf.rss_hf = (rss_hf | ETH_RSS_LEVEL_OUTERMOST);
+       } else if (!strcmp(res->value, "level-inner")) {
+               rss_hf &= (~ETH_RSS_LEVEL_MASK);
+               rss_conf.rss_hf = (rss_hf | ETH_RSS_LEVEL_INNERMOST);
+       } else if (!strcmp(res->value, "default"))
                use_default = 1;
        else if (isdigit(res->value[0]) && atoi(res->value) > 0 &&
                                                atoi(res->value) < 64)
@@ -2372,7 +2418,8 @@ cmdline_parse_inst_t cmd_config_rss = {
        .data = NULL,
        .help_str = "port config all rss "
                "all|default|eth|vlan|ip|tcp|udp|sctp|ether|port|vxlan|geneve|"
-               "nvgre|vxlan-gpe|l2tpv3|esp|ah|pfcp|none|<flowtype_id>",
+               "nvgre|vxlan-gpe|l2tpv3|esp|ah|pfcp|none|level-default|"
+               "level-outer|level-inner|<flowtype_id>",
        .tokens = {
                (void *)&cmd_config_rss_port,
                (void *)&cmd_config_rss_keyword,
@@ -2484,7 +2531,7 @@ cmdline_parse_token_string_t cmd_config_rss_hash_key_rss_type =
                                 "ipv6-tcp-ex#ipv6-udp-ex#"
                                 "l3-src-only#l3-dst-only#l4-src-only#l4-dst-only#"
                                 "l2-src-only#l2-dst-only#s-vlan#c-vlan#"
-                                "l2tpv3#esp#ah#pfcp");
+                                "l2tpv3#esp#ah#pfcp#pppoe#gtpu");
 cmdline_parse_token_string_t cmd_config_rss_hash_key_value =
        TOKEN_STRING_INITIALIZER(struct cmd_config_rss_hash_key, key, NULL);
 
@@ -2497,7 +2544,7 @@ cmdline_parse_inst_t cmd_config_rss_hash_key = {
                "l2-payload|ipv6-ex|ipv6-tcp-ex|ipv6-udp-ex|"
                "l3-src-only|l3-dst-only|l4-src-only|l4-dst-only|"
                "l2-src-only|l2-dst-only|s-vlan|c-vlan|"
-               "l2tpv3|esp|ah|pfcp "
+               "l2tpv3|esp|ah|pfcp|pppoe|gtpu "
                "<string of hex digits (variable length, NIC dependent)>",
        .tokens = {
                (void *)&cmd_config_rss_hash_key_port,
@@ -3920,6 +3967,52 @@ cmdline_parse_inst_t cmd_set_txsplit = {
        },
 };
 
+/* *** SET TIMES FOR TXONLY PACKETS SCHEDULING ON TIMESTAMPS *** */
+
+struct cmd_set_txtimes_result {
+       cmdline_fixed_string_t cmd_keyword;
+       cmdline_fixed_string_t txtimes;
+       cmdline_fixed_string_t tx_times;
+};
+
+static void
+cmd_set_txtimes_parsed(void *parsed_result,
+                      __rte_unused struct cmdline *cl,
+                      __rte_unused void *data)
+{
+       struct cmd_set_txtimes_result *res;
+       unsigned int tx_times[2] = {0, 0};
+       unsigned int n_times;
+
+       res = parsed_result;
+       n_times = parse_item_list(res->tx_times, "tx times",
+                                 2, tx_times, 0);
+       if (n_times == 2)
+               set_tx_pkt_times(tx_times);
+}
+
+cmdline_parse_token_string_t cmd_set_txtimes_keyword =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_txtimes_result,
+                                cmd_keyword, "set");
+cmdline_parse_token_string_t cmd_set_txtimes_name =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_txtimes_result,
+                                txtimes, "txtimes");
+cmdline_parse_token_string_t cmd_set_txtimes_value =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_txtimes_result,
+                                tx_times, NULL);
+
+cmdline_parse_inst_t cmd_set_txtimes = {
+       .f = cmd_set_txtimes_parsed,
+       .data = NULL,
+       .help_str = "set txtimes <inter_burst>,<intra_burst>",
+       .tokens = {
+               (void *)&cmd_set_txtimes_keyword,
+               (void *)&cmd_set_txtimes_name,
+               (void *)&cmd_set_txtimes_value,
+               NULL,
+       },
+};
+
 /* *** ADD/REMOVE ALL VLAN IDENTIFIERS TO/FROM A PORT VLAN RX FILTER *** */
 struct cmd_rx_vlan_filter_all_result {
        cmdline_fixed_string_t rx_vlan;
@@ -4201,6 +4294,9 @@ cmd_tx_vlan_set_parsed(void *parsed_result,
 {
        struct cmd_tx_vlan_set_result *res = parsed_result;
 
+       if (port_id_is_invalid(res->port_id, ENABLED_WARN))
+               return;
+
        if (!port_is_stopped(res->port_id)) {
                printf("Please stop port %d first\n", res->port_id);
                return;
@@ -4255,6 +4351,9 @@ cmd_tx_vlan_set_qinq_parsed(void *parsed_result,
 {
        struct cmd_tx_vlan_set_qinq_result *res = parsed_result;
 
+       if (port_id_is_invalid(res->port_id, ENABLED_WARN))
+               return;
+
        if (!port_is_stopped(res->port_id)) {
                printf("Please stop port %d first\n", res->port_id);
                return;
@@ -4368,6 +4467,9 @@ cmd_tx_vlan_reset_parsed(void *parsed_result,
 {
        struct cmd_tx_vlan_reset_result *res = parsed_result;
 
+       if (port_id_is_invalid(res->port_id, ENABLED_WARN))
+               return;
+
        if (!port_is_stopped(res->port_id)) {
                printf("Please stop port %d first\n", res->port_id);
                return;
@@ -5150,7 +5252,7 @@ cmd_gso_size_parsed(void *parsed_result,
 
        if (test_done == 0) {
                printf("Before setting GSO segsz, please first"
-                               " stop fowarding\n");
+                               " stop forwarding\n");
                return;
        }
 
@@ -7408,6 +7510,8 @@ static void cmd_showcfg_parsed(void *parsed_result,
                pkt_fwd_config_display(&cur_fwd_config);
        else if (!strcmp(res->what, "txpkts"))
                show_tx_pkt_segments();
+       else if (!strcmp(res->what, "txtimes"))
+               show_tx_pkt_times();
 }
 
 cmdline_parse_token_string_t cmd_showcfg_show =
@@ -7416,12 +7520,12 @@ cmdline_parse_token_string_t cmd_showcfg_port =
        TOKEN_STRING_INITIALIZER(struct cmd_showcfg_result, cfg, "config");
 cmdline_parse_token_string_t cmd_showcfg_what =
        TOKEN_STRING_INITIALIZER(struct cmd_showcfg_result, what,
-                                "rxtx#cores#fwd#txpkts");
+                                "rxtx#cores#fwd#txpkts#txtimes");
 
 cmdline_parse_inst_t cmd_showcfg = {
        .f = cmd_showcfg_parsed,
        .data = NULL,
-       .help_str = "show config rxtx|cores|fwd|txpkts",
+       .help_str = "show config rxtx|cores|fwd|txpkts|txtimes",
        .tokens = {
                (void *)&cmd_showcfg_show,
                (void *)&cmd_showcfg_port,
@@ -7613,6 +7717,51 @@ cmdline_parse_inst_t cmd_showdevice = {
                NULL,
        },
 };
+
+/* *** SHOW MODULE EEPROM/EEPROM port INFO *** */
+struct cmd_showeeprom_result {
+       cmdline_fixed_string_t show;
+       cmdline_fixed_string_t port;
+       uint16_t portnum;
+       cmdline_fixed_string_t type;
+};
+
+static void cmd_showeeprom_parsed(void *parsed_result,
+               __rte_unused struct cmdline *cl,
+               __rte_unused void *data)
+{
+       struct cmd_showeeprom_result *res = parsed_result;
+
+       if (!strcmp(res->type, "eeprom"))
+               port_eeprom_display(res->portnum);
+       else if (!strcmp(res->type, "module_eeprom"))
+               port_module_eeprom_display(res->portnum);
+       else
+               printf("Unknown argument\n");
+}
+
+cmdline_parse_token_string_t cmd_showeeprom_show =
+       TOKEN_STRING_INITIALIZER(struct cmd_showeeprom_result, show, "show");
+cmdline_parse_token_string_t cmd_showeeprom_port =
+       TOKEN_STRING_INITIALIZER(struct cmd_showeeprom_result, port, "port");
+cmdline_parse_token_num_t cmd_showeeprom_portnum =
+       TOKEN_NUM_INITIALIZER(struct cmd_showeeprom_result, portnum, UINT16);
+cmdline_parse_token_string_t cmd_showeeprom_type =
+       TOKEN_STRING_INITIALIZER(struct cmd_showeeprom_result, type, "module_eeprom#eeprom");
+
+cmdline_parse_inst_t cmd_showeeprom = {
+       .f = cmd_showeeprom_parsed,
+       .data = NULL,
+       .help_str = "show port <port_id> module_eeprom|eeprom",
+       .tokens = {
+               (void *)&cmd_showeeprom_show,
+               (void *)&cmd_showeeprom_port,
+               (void *)&cmd_showeeprom_portnum,
+               (void *)&cmd_showeeprom_type,
+               NULL,
+       },
+};
+
 /* *** SHOW QUEUE INFO *** */
 struct cmd_showqueue_result {
        cmdline_fixed_string_t show;
@@ -8266,6 +8415,90 @@ cmdline_parse_inst_t cmd_set_xstats_hide_zero = {
        },
 };
 
+/* *** SET OPTION TO ENABLE MEASUREMENT OF CPU CYCLES *** */
+struct cmd_set_record_core_cycles_result {
+       cmdline_fixed_string_t keyword;
+       cmdline_fixed_string_t name;
+       cmdline_fixed_string_t on_off;
+};
+
+static void
+cmd_set_record_core_cycles_parsed(void *parsed_result,
+                       __rte_unused struct cmdline *cl,
+                       __rte_unused void *data)
+{
+       struct cmd_set_record_core_cycles_result *res;
+       uint16_t on_off = 0;
+
+       res = parsed_result;
+       on_off = !strcmp(res->on_off, "on") ? 1 : 0;
+       set_record_core_cycles(on_off);
+}
+
+cmdline_parse_token_string_t cmd_set_record_core_cycles_keyword =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_record_core_cycles_result,
+                                keyword, "set");
+cmdline_parse_token_string_t cmd_set_record_core_cycles_name =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_record_core_cycles_result,
+                                name, "record-core-cycles");
+cmdline_parse_token_string_t cmd_set_record_core_cycles_on_off =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_record_core_cycles_result,
+                                on_off, "on#off");
+
+cmdline_parse_inst_t cmd_set_record_core_cycles = {
+       .f = cmd_set_record_core_cycles_parsed,
+       .data = NULL,
+       .help_str = "set record-core-cycles on|off",
+       .tokens = {
+               (void *)&cmd_set_record_core_cycles_keyword,
+               (void *)&cmd_set_record_core_cycles_name,
+               (void *)&cmd_set_record_core_cycles_on_off,
+               NULL,
+       },
+};
+
+/* *** SET OPTION TO ENABLE DISPLAY OF RX AND TX BURSTS *** */
+struct cmd_set_record_burst_stats_result {
+       cmdline_fixed_string_t keyword;
+       cmdline_fixed_string_t name;
+       cmdline_fixed_string_t on_off;
+};
+
+static void
+cmd_set_record_burst_stats_parsed(void *parsed_result,
+                       __rte_unused struct cmdline *cl,
+                       __rte_unused void *data)
+{
+       struct cmd_set_record_burst_stats_result *res;
+       uint16_t on_off = 0;
+
+       res = parsed_result;
+       on_off = !strcmp(res->on_off, "on") ? 1 : 0;
+       set_record_burst_stats(on_off);
+}
+
+cmdline_parse_token_string_t cmd_set_record_burst_stats_keyword =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_record_burst_stats_result,
+                                keyword, "set");
+cmdline_parse_token_string_t cmd_set_record_burst_stats_name =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_record_burst_stats_result,
+                                name, "record-burst-stats");
+cmdline_parse_token_string_t cmd_set_record_burst_stats_on_off =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_record_burst_stats_result,
+                                on_off, "on#off");
+
+cmdline_parse_inst_t cmd_set_record_burst_stats = {
+       .f = cmd_set_record_burst_stats_parsed,
+       .data = NULL,
+       .help_str = "set record-burst-stats on|off",
+       .tokens = {
+               (void *)&cmd_set_record_burst_stats_keyword,
+               (void *)&cmd_set_record_burst_stats_name,
+               (void *)&cmd_set_record_burst_stats_on_off,
+               NULL,
+       },
+};
+
 /* *** CONFIGURE UNICAST HASH TABLE *** */
 struct cmd_set_uc_hash_table {
        cmdline_fixed_string_t set;
@@ -9281,6 +9514,10 @@ cmd_global_config_parsed(void *parsed_result,
        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);
+#ifdef RTE_LIBRTE_I40E_PMD
+       if (ret == -ENOTSUP)
+               ret = rte_pmd_i40e_set_gre_key_len(res->port_id, res->len);
+#endif
        if (ret != 0)
                printf("Global config error\n");
 }
@@ -15343,80 +15580,6 @@ cmdline_parse_inst_t cmd_vf_tc_max_bw = {
        },
 };
 
-
-#if defined RTE_LIBRTE_PMD_SOFTNIC && defined RTE_LIBRTE_SCHED
-
-/* *** Set Port default Traffic Management Hierarchy *** */
-struct cmd_set_port_tm_hierarchy_default_result {
-       cmdline_fixed_string_t set;
-       cmdline_fixed_string_t port;
-       cmdline_fixed_string_t tm;
-       cmdline_fixed_string_t hierarchy;
-       cmdline_fixed_string_t def;
-       portid_t port_id;
-};
-
-cmdline_parse_token_string_t cmd_set_port_tm_hierarchy_default_set =
-       TOKEN_STRING_INITIALIZER(
-               struct cmd_set_port_tm_hierarchy_default_result, set, "set");
-cmdline_parse_token_string_t cmd_set_port_tm_hierarchy_default_port =
-       TOKEN_STRING_INITIALIZER(
-               struct cmd_set_port_tm_hierarchy_default_result, port, "port");
-cmdline_parse_token_string_t cmd_set_port_tm_hierarchy_default_tm =
-       TOKEN_STRING_INITIALIZER(
-               struct cmd_set_port_tm_hierarchy_default_result, tm, "tm");
-cmdline_parse_token_string_t cmd_set_port_tm_hierarchy_default_hierarchy =
-       TOKEN_STRING_INITIALIZER(
-               struct cmd_set_port_tm_hierarchy_default_result,
-                       hierarchy, "hierarchy");
-cmdline_parse_token_string_t cmd_set_port_tm_hierarchy_default_default =
-       TOKEN_STRING_INITIALIZER(
-               struct cmd_set_port_tm_hierarchy_default_result,
-                       def, "default");
-cmdline_parse_token_num_t cmd_set_port_tm_hierarchy_default_port_id =
-       TOKEN_NUM_INITIALIZER(
-               struct cmd_set_port_tm_hierarchy_default_result,
-                       port_id, UINT16);
-
-static void cmd_set_port_tm_hierarchy_default_parsed(void *parsed_result,
-       __rte_unused struct cmdline *cl,
-       __rte_unused void *data)
-{
-       struct cmd_set_port_tm_hierarchy_default_result *res = parsed_result;
-       struct rte_port *p;
-       portid_t port_id = res->port_id;
-
-       if (port_id_is_invalid(port_id, ENABLED_WARN))
-               return;
-
-       p = &ports[port_id];
-
-       /* Forward mode: tm */
-       if (strcmp(cur_fwd_config.fwd_eng->fwd_mode_name, "softnic")) {
-               printf("  softnicfwd mode not enabled(error)\n");
-               return;
-       }
-
-       /* Set the default tm hierarchy */
-       p->softport.default_tm_hierarchy_enable = 1;
-}
-
-cmdline_parse_inst_t cmd_set_port_tm_hierarchy_default = {
-       .f = cmd_set_port_tm_hierarchy_default_parsed,
-       .data = NULL,
-       .help_str = "set port tm hierarchy default <port_id>",
-       .tokens = {
-               (void *)&cmd_set_port_tm_hierarchy_default_set,
-               (void *)&cmd_set_port_tm_hierarchy_default_port,
-               (void *)&cmd_set_port_tm_hierarchy_default_tm,
-               (void *)&cmd_set_port_tm_hierarchy_default_hierarchy,
-               (void *)&cmd_set_port_tm_hierarchy_default_default,
-               (void *)&cmd_set_port_tm_hierarchy_default_port_id,
-               NULL,
-       },
-};
-#endif
-
 /** Set VXLAN encapsulation details */
 struct cmd_set_vxlan_result {
        cmdline_fixed_string_t set;
@@ -16885,8 +17048,10 @@ cmd_ddp_get_list_parsed(
 #ifdef RTE_LIBRTE_I40E_PMD
        size = PROFILE_INFO_SIZE * MAX_PROFILE_NUM + 4;
        p_list = (struct rte_pmd_i40e_profile_list *)malloc(size);
-       if (!p_list)
+       if (!p_list) {
                printf("%s: Failed to malloc buffer\n", __func__);
+               return;
+       }
 
        if (ret == -ENOTSUP)
                ret = rte_pmd_i40e_get_ddp_list(res->port_id,
@@ -18654,7 +18819,8 @@ cmdline_parse_token_string_t cmd_config_per_port_tx_offload_result_offload =
                          "sctp_cksum#tcp_tso#udp_tso#outer_ipv4_cksum#"
                          "qinq_insert#vxlan_tnl_tso#gre_tnl_tso#"
                          "ipip_tnl_tso#geneve_tnl_tso#macsec_insert#"
-                         "mt_lockfree#multi_segs#mbuf_fast_free#security");
+                         "mt_lockfree#multi_segs#mbuf_fast_free#security#"
+                         "send_on_timestamp");
 cmdline_parse_token_string_t cmd_config_per_port_tx_offload_result_on_off =
        TOKEN_STRING_INITIALIZER
                (struct cmd_config_per_port_tx_offload_result,
@@ -18739,7 +18905,8 @@ cmdline_parse_inst_t cmd_config_per_port_tx_offload = {
                    "sctp_cksum|tcp_tso|udp_tso|outer_ipv4_cksum|"
                    "qinq_insert|vxlan_tnl_tso|gre_tnl_tso|"
                    "ipip_tnl_tso|geneve_tnl_tso|macsec_insert|"
-                   "mt_lockfree|multi_segs|mbuf_fast_free|security on|off",
+                   "mt_lockfree|multi_segs|mbuf_fast_free|security|"
+                   "send_on_timestamp on|off",
        .tokens = {
                (void *)&cmd_config_per_port_tx_offload_result_port,
                (void *)&cmd_config_per_port_tx_offload_result_config,
@@ -19397,6 +19564,7 @@ cmdline_parse_ctx_t main_ctx[] = {
        (cmdline_parse_inst_t *)&cmd_load_from_file,
        (cmdline_parse_inst_t *)&cmd_showport,
        (cmdline_parse_inst_t *)&cmd_showqueue,
+       (cmdline_parse_inst_t *)&cmd_showeeprom,
        (cmdline_parse_inst_t *)&cmd_showportall,
        (cmdline_parse_inst_t *)&cmd_showdevice,
        (cmdline_parse_inst_t *)&cmd_showcfg,
@@ -19411,6 +19579,7 @@ cmdline_parse_ctx_t main_ctx[] = {
        (cmdline_parse_inst_t *)&cmd_set_log,
        (cmdline_parse_inst_t *)&cmd_set_txpkts,
        (cmdline_parse_inst_t *)&cmd_set_txsplit,
+       (cmdline_parse_inst_t *)&cmd_set_txtimes,
        (cmdline_parse_inst_t *)&cmd_set_fwd_list,
        (cmdline_parse_inst_t *)&cmd_set_fwd_mask,
        (cmdline_parse_inst_t *)&cmd_set_fwd_mode,
@@ -19483,6 +19652,8 @@ cmdline_parse_ctx_t main_ctx[] = {
        (cmdline_parse_inst_t *)&cmd_set_fwd_eth_peer,
        (cmdline_parse_inst_t *)&cmd_set_qmap,
        (cmdline_parse_inst_t *)&cmd_set_xstats_hide_zero,
+       (cmdline_parse_inst_t *)&cmd_set_record_core_cycles,
+       (cmdline_parse_inst_t *)&cmd_set_record_burst_stats,
        (cmdline_parse_inst_t *)&cmd_operate_port,
        (cmdline_parse_inst_t *)&cmd_operate_specific_port,
        (cmdline_parse_inst_t *)&cmd_operate_attach_port,
@@ -19599,9 +19770,6 @@ cmdline_parse_ctx_t main_ctx[] = {
        (cmdline_parse_inst_t *)&cmd_vf_tc_max_bw,
        (cmdline_parse_inst_t *)&cmd_strict_link_prio,
        (cmdline_parse_inst_t *)&cmd_tc_min_bw,
-#if defined RTE_LIBRTE_PMD_SOFTNIC && defined RTE_LIBRTE_SCHED
-       (cmdline_parse_inst_t *)&cmd_set_port_tm_hierarchy_default,
-#endif
        (cmdline_parse_inst_t *)&cmd_set_vxlan,
        (cmdline_parse_inst_t *)&cmd_set_vxlan_tos_ttl,
        (cmdline_parse_inst_t *)&cmd_set_vxlan_with_vlan,
@@ -19655,6 +19823,7 @@ cmdline_parse_ctx_t main_ctx[] = {
        (cmdline_parse_inst_t *)&cmd_del_port_tm_node_wred_profile,
        (cmdline_parse_inst_t *)&cmd_set_port_tm_node_shaper_profile,
        (cmdline_parse_inst_t *)&cmd_add_port_tm_nonleaf_node,
+       (cmdline_parse_inst_t *)&cmd_add_port_tm_nonleaf_node_pmode,
        (cmdline_parse_inst_t *)&cmd_add_port_tm_leaf_node,
        (cmdline_parse_inst_t *)&cmd_del_port_tm_node,
        (cmdline_parse_inst_t *)&cmd_set_port_tm_node_parent,