X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest-pmd%2Fcmdline.c;h=07ee4e4e1374568053aaaa214b2693516d96abad;hb=2befc67ff6798a38c9f52f1f09b3f87bdd4afb4a;hp=bcf9080c48d84ae7204e1a0338081e3fc8b1acda;hpb=0e459ffa08891a3ba238821a80499b9b17e2f2d3;p=dpdk.git diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index bcf9080c48..07ee4e4e13 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -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" @@ -180,7 +183,7 @@ static void cmd_help_long_parsed(void *parsed_result, "show (rxq|txq) info (port_id) (queue_id)\n" " Display information for configured RX/TX queue.\n\n" - "show config (rxtx|cores|fwd|txpkts)\n" + "show config (rxtx|cores|fwd|rxoffs|rxpkts|txpkts)\n" " Display the given configuration.\n\n" "read rxd (port_id) (queue_id) (rxd_id)\n" @@ -245,6 +248,12 @@ static void cmd_help_long_parsed(void *parsed_result, "show port (port_id) macs|mcast_macs" " Display list of mac addresses added to port.\n\n" + + "show port (port_id) fec capabilities" + " Show fec capabilities of a port.\n\n" + + "show port (port_id) fec_mode" + " Show fec mode of a port.\n\n" ); } @@ -285,6 +294,18 @@ static void cmd_help_long_parsed(void *parsed_result, " Set the transmit delay time and number of retries," " effective when retry is enabled.\n\n" + "set rxoffs (x[,y]*)\n" + " Set the offset of each packet segment on" + " receiving if split feature is engaged." + " Affects only the queues configured with split" + " offloads.\n\n" + + "set rxpkts (x[,y]*)\n" + " Set the length of each segment to scatter" + " packets on receiving if split feature is engaged." + " Affects only the queues configured with split" + " offloads.\n\n" + "set txpkts (x[,y]*)\n" " Set the length of each segment of TXONLY" " and optionally CSUM packets.\n\n" @@ -294,6 +315,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 +550,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" @@ -738,6 +769,9 @@ static void cmd_help_long_parsed(void *parsed_result, "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" + , list_pkt_forwarding_modes() ); } @@ -769,7 +803,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 +824,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|)\n" + "ether|port|vxlan|geneve|nvgre|vxlan-gpe|none|level-default|" + "level-outer|level-inner|)\n" " Set the RSS mode.\n\n" "port config port-id rss reta (hash,queue)[,(hash,queue)]\n" @@ -860,16 +895,16 @@ static void cmd_help_long_parsed(void *parsed_result, "port config rx_offload vlan_strip|" "ipv4_cksum|udp_cksum|tcp_cksum|tcp_lro|qinq_strip|" "outer_ipv4_cksum|macsec_strip|header_split|" - "vlan_filter|vlan_extend|jumbo_frame|" - "scatter|timestamp|security|keep_crc on|off\n" + "vlan_filter|vlan_extend|jumbo_frame|scatter|" + "buffer_split|timestamp|security|keep_crc on|off\n" " Enable or disable a per port Rx offloading" " on all Rx queues of a port\n\n" "port (port_id) rxq (queue_id) rx_offload vlan_strip|" "ipv4_cksum|udp_cksum|tcp_cksum|tcp_lro|qinq_strip|" "outer_ipv4_cksum|macsec_strip|header_split|" - "vlan_filter|vlan_extend|jumbo_frame|" - "scatter|timestamp|security|keep_crc on|off\n" + "vlan_filter|vlan_extend|jumbo_frame|scatter|" + "buffer_split|timestamp|security|keep_crc on|off\n" " Enable or disable a per queue Rx offloading" " only on a specific Rx queue\n\n" @@ -1129,6 +1164,24 @@ static void cmd_help_long_parsed(void *parsed_result, " List and destroy aged flows" " flow rules\n\n" + "flow shared_action {port_id} create" + " [action_id {shared_action_id}]" + " [ingress] [egress]" + " action {action} / end\n" + " Create shared action.\n\n" + + "flow shared_action {port_id} update" + " {shared_action_id} action {action} / end\n" + " Update shared action.\n\n" + + "flow shared_action {port_id} destroy" + " action_id {shared_action_id} [...]\n" + " Destroy specific shared actions.\n\n" + + "flow shared_action {port_id} query" + " {shared_action_id}\n" + " Query an existing shared action.\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" @@ -1186,14 +1239,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" @@ -1225,6 +1273,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)" @@ -1623,6 +1677,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 { @@ -1670,7 +1726,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 = @@ -1681,7 +1737,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, @@ -1745,7 +1801,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"); @@ -1757,7 +1813,7 @@ cmdline_parse_inst_t cmd_config_speed_specific = { .f = cmd_config_speed_specific_parsed, .data = NULL, .help_str = "port config 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, @@ -2272,7 +2328,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")) @@ -2295,6 +2351,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")) @@ -2315,9 +2383,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) @@ -2376,7 +2457,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|", + "nvgre|vxlan-gpe|l2tpv3|esp|ah|pfcp|none|level-default|" + "level-outer|level-inner|", .tokens = { (void *)&cmd_config_rss_port, (void *)&cmd_config_rss_keyword, @@ -2488,7 +2570,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); @@ -2501,7 +2583,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 " "", .tokens = { (void *)&cmd_config_rss_hash_key_port, @@ -2855,7 +2937,7 @@ cmd_setup_rxtx_queue_parsed( if (!numa_support || socket_id == NUMA_NO_CONFIG) socket_id = port->socket_id; - mp = mbuf_pool_find(socket_id); + mp = mbuf_pool_find(socket_id, 0); if (mp == NULL) { printf("Failed to setup RX queue: " "No mempool allocation" @@ -2863,12 +2945,12 @@ cmd_setup_rxtx_queue_parsed( rxring_numa[res->portid]); return; } - ret = rte_eth_rx_queue_setup(res->portid, - res->qid, - port->nb_rx_desc[res->qid], - socket_id, - &port->rx_conf[res->qid], - mp); + ret = rx_queue_setup(res->portid, + res->qid, + port->nb_rx_desc[res->qid], + socket_id, + &port->rx_conf[res->qid], + mp); if (ret) printf("Failed to setup RX queue\n"); } else { @@ -3837,6 +3919,98 @@ cmdline_parse_inst_t cmd_set_log = { }, }; +/* *** SET SEGMENT OFFSETS OF RX PACKETS SPLIT *** */ + +struct cmd_set_rxoffs_result { + cmdline_fixed_string_t cmd_keyword; + cmdline_fixed_string_t rxoffs; + cmdline_fixed_string_t seg_offsets; +}; + +static void +cmd_set_rxoffs_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ + struct cmd_set_rxoffs_result *res; + unsigned int seg_offsets[MAX_SEGS_BUFFER_SPLIT]; + unsigned int nb_segs; + + res = parsed_result; + nb_segs = parse_item_list(res->seg_offsets, "segment offsets", + MAX_SEGS_BUFFER_SPLIT, seg_offsets, 0); + if (nb_segs > 0) + set_rx_pkt_offsets(seg_offsets, nb_segs); +} + +cmdline_parse_token_string_t cmd_set_rxoffs_keyword = + TOKEN_STRING_INITIALIZER(struct cmd_set_rxoffs_result, + cmd_keyword, "set"); +cmdline_parse_token_string_t cmd_set_rxoffs_name = + TOKEN_STRING_INITIALIZER(struct cmd_set_rxoffs_result, + rxoffs, "rxoffs"); +cmdline_parse_token_string_t cmd_set_rxoffs_offsets = + TOKEN_STRING_INITIALIZER(struct cmd_set_rxoffs_result, + seg_offsets, NULL); + +cmdline_parse_inst_t cmd_set_rxoffs = { + .f = cmd_set_rxoffs_parsed, + .data = NULL, + .help_str = "set rxoffs ", + .tokens = { + (void *)&cmd_set_rxoffs_keyword, + (void *)&cmd_set_rxoffs_name, + (void *)&cmd_set_rxoffs_offsets, + NULL, + }, +}; + +/* *** SET SEGMENT LENGTHS OF RX PACKETS SPLIT *** */ + +struct cmd_set_rxpkts_result { + cmdline_fixed_string_t cmd_keyword; + cmdline_fixed_string_t rxpkts; + cmdline_fixed_string_t seg_lengths; +}; + +static void +cmd_set_rxpkts_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ + struct cmd_set_rxpkts_result *res; + unsigned int seg_lengths[MAX_SEGS_BUFFER_SPLIT]; + unsigned int nb_segs; + + res = parsed_result; + nb_segs = parse_item_list(res->seg_lengths, "segment lengths", + MAX_SEGS_BUFFER_SPLIT, seg_lengths, 0); + if (nb_segs > 0) + set_rx_pkt_segments(seg_lengths, nb_segs); +} + +cmdline_parse_token_string_t cmd_set_rxpkts_keyword = + TOKEN_STRING_INITIALIZER(struct cmd_set_rxpkts_result, + cmd_keyword, "set"); +cmdline_parse_token_string_t cmd_set_rxpkts_name = + TOKEN_STRING_INITIALIZER(struct cmd_set_rxpkts_result, + rxpkts, "rxpkts"); +cmdline_parse_token_string_t cmd_set_rxpkts_lengths = + TOKEN_STRING_INITIALIZER(struct cmd_set_rxpkts_result, + seg_lengths, NULL); + +cmdline_parse_inst_t cmd_set_rxpkts = { + .f = cmd_set_rxpkts_parsed, + .data = NULL, + .help_str = "set rxpkts ", + .tokens = { + (void *)&cmd_set_rxpkts_keyword, + (void *)&cmd_set_rxpkts_name, + (void *)&cmd_set_rxpkts_lengths, + NULL, + }, +}; + /* *** SET SEGMENT LENGTHS OF TXONLY PACKETS *** */ struct cmd_set_txpkts_result { @@ -3924,6 +4098,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 ,", + .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; @@ -4205,6 +4425,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; @@ -4259,6 +4482,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; @@ -4372,6 +4598,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; @@ -7410,8 +7639,14 @@ static void cmd_showcfg_parsed(void *parsed_result, fwd_lcores_config_display(); else if (!strcmp(res->what, "fwd")) pkt_fwd_config_display(&cur_fwd_config); + else if (!strcmp(res->what, "rxoffs")) + show_rx_pkt_offsets(); + else if (!strcmp(res->what, "rxpkts")) + show_rx_pkt_segments(); 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 = @@ -7420,12 +7655,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#rxoffs#rxpkts#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|rxoffs|rxpkts|txpkts|txtimes", .tokens = { (void *)&cmd_showcfg_show, (void *)&cmd_showcfg_port, @@ -7617,6 +7852,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 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; @@ -8270,6 +8550,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; @@ -9285,6 +9649,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"); } @@ -15347,80 +15715,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 ", - .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; @@ -16889,8 +17183,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, @@ -18247,7 +18543,8 @@ cmdline_parse_token_string_t cmd_config_per_port_rx_offload_result_offload = offload, "vlan_strip#ipv4_cksum#udp_cksum#tcp_cksum#tcp_lro#" "qinq_strip#outer_ipv4_cksum#macsec_strip#" "header_split#vlan_filter#vlan_extend#jumbo_frame#" - "scatter#timestamp#security#keep_crc#rss_hash"); + "scatter#buffer_split#timestamp#security#" + "keep_crc#rss_hash"); cmdline_parse_token_string_t cmd_config_per_port_rx_offload_result_on_off = TOKEN_STRING_INITIALIZER (struct cmd_config_per_port_rx_offload_result, @@ -18327,8 +18624,8 @@ cmdline_parse_inst_t cmd_config_per_port_rx_offload = { .help_str = "port config rx_offload vlan_strip|ipv4_cksum|" "udp_cksum|tcp_cksum|tcp_lro|qinq_strip|outer_ipv4_cksum|" "macsec_strip|header_split|vlan_filter|vlan_extend|" - "jumbo_frame|scatter|timestamp|security|keep_crc|rss_hash " - "on|off", + "jumbo_frame|scatter|buffer_split|timestamp|security|" + "keep_crc|rss_hash on|off", .tokens = { (void *)&cmd_config_per_port_rx_offload_result_port, (void *)&cmd_config_per_port_rx_offload_result_config, @@ -18377,7 +18674,7 @@ cmdline_parse_token_string_t cmd_config_per_queue_rx_offload_result_offload = offload, "vlan_strip#ipv4_cksum#udp_cksum#tcp_cksum#tcp_lro#" "qinq_strip#outer_ipv4_cksum#macsec_strip#" "header_split#vlan_filter#vlan_extend#jumbo_frame#" - "scatter#timestamp#security#keep_crc"); + "scatter#buffer_split#timestamp#security#keep_crc"); cmdline_parse_token_string_t cmd_config_per_queue_rx_offload_result_on_off = TOKEN_STRING_INITIALIZER (struct cmd_config_per_queue_rx_offload_result, @@ -18433,8 +18730,8 @@ cmdline_parse_inst_t cmd_config_per_queue_rx_offload = { "vlan_strip|ipv4_cksum|" "udp_cksum|tcp_cksum|tcp_lro|qinq_strip|outer_ipv4_cksum|" "macsec_strip|header_split|vlan_filter|vlan_extend|" - "jumbo_frame|scatter|timestamp|security|keep_crc " - "on|off", + "jumbo_frame|scatter|buffer_split|timestamp|security|" + "keep_crc on|off", .tokens = { (void *)&cmd_config_per_queue_rx_offload_result_port, (void *)&cmd_config_per_queue_rx_offload_result_port_id, @@ -18658,7 +18955,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, @@ -18743,7 +19041,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, @@ -19055,6 +19354,226 @@ cmdline_parse_inst_t cmd_show_tx_metadata = { }, }; +/* *** show fec capability per port configuration *** */ +struct cmd_show_fec_capability_result { + cmdline_fixed_string_t cmd_show; + cmdline_fixed_string_t cmd_port; + cmdline_fixed_string_t cmd_fec; + cmdline_fixed_string_t cmd_keyword; + portid_t cmd_pid; +}; + +static void +cmd_show_fec_capability_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ +#define FEC_CAP_NUM 2 + struct cmd_show_fec_capability_result *res = parsed_result; + struct rte_eth_fec_capa speed_fec_capa[FEC_CAP_NUM]; + unsigned int num = FEC_CAP_NUM; + unsigned int ret_num; + int ret; + + if (!rte_eth_dev_is_valid_port(res->cmd_pid)) { + printf("Invalid port id %u\n", res->cmd_pid); + return; + } + + ret = rte_eth_fec_get_capability(res->cmd_pid, speed_fec_capa, num); + if (ret == -ENOTSUP) { + printf("Function not implemented\n"); + return; + } else if (ret < 0) { + printf("Get FEC capability failed\n"); + return; + } + + ret_num = (unsigned int)ret; + show_fec_capability(ret_num, speed_fec_capa); +} + +cmdline_parse_token_string_t cmd_show_fec_capability_show = + TOKEN_STRING_INITIALIZER(struct cmd_show_fec_capability_result, + cmd_show, "show"); +cmdline_parse_token_string_t cmd_show_fec_capability_port = + TOKEN_STRING_INITIALIZER(struct cmd_show_fec_capability_result, + cmd_port, "port"); +cmdline_parse_token_num_t cmd_show_fec_capability_pid = + TOKEN_NUM_INITIALIZER(struct cmd_show_fec_capability_result, + cmd_pid, UINT16); +cmdline_parse_token_string_t cmd_show_fec_capability_fec = + TOKEN_STRING_INITIALIZER(struct cmd_show_fec_capability_result, + cmd_fec, "fec"); +cmdline_parse_token_string_t cmd_show_fec_capability_keyword = + TOKEN_STRING_INITIALIZER(struct cmd_show_fec_capability_result, + cmd_keyword, "capabilities"); + +cmdline_parse_inst_t cmd_show_capability = { + .f = cmd_show_fec_capability_parsed, + .data = NULL, + .help_str = "show port fec capabilities", + .tokens = { + (void *)&cmd_show_fec_capability_show, + (void *)&cmd_show_fec_capability_port, + (void *)&cmd_show_fec_capability_pid, + (void *)&cmd_show_fec_capability_fec, + (void *)&cmd_show_fec_capability_keyword, + NULL, + }, +}; + +/* *** show fec mode per port configuration *** */ +struct cmd_show_fec_metadata_result { + cmdline_fixed_string_t cmd_show; + cmdline_fixed_string_t cmd_port; + cmdline_fixed_string_t cmd_keyword; + portid_t cmd_pid; +}; + +static void +cmd_show_fec_mode_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ +#define FEC_NAME_SIZE 16 + struct cmd_show_fec_metadata_result *res = parsed_result; + uint32_t mode; + char buf[FEC_NAME_SIZE]; + int ret; + + if (!rte_eth_dev_is_valid_port(res->cmd_pid)) { + printf("Invalid port id %u\n", res->cmd_pid); + return; + } + ret = rte_eth_fec_get(res->cmd_pid, &mode); + if (ret == -ENOTSUP) { + printf("Function not implemented\n"); + return; + } else if (ret < 0) { + printf("Get FEC mode failed\n"); + return; + } + + switch (mode) { + case RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC): + strlcpy(buf, "off", sizeof(buf)); + break; + case RTE_ETH_FEC_MODE_CAPA_MASK(AUTO): + strlcpy(buf, "auto", sizeof(buf)); + break; + case RTE_ETH_FEC_MODE_CAPA_MASK(BASER): + strlcpy(buf, "baser", sizeof(buf)); + break; + case RTE_ETH_FEC_MODE_CAPA_MASK(RS): + strlcpy(buf, "rs", sizeof(buf)); + break; + default: + return; + } + + printf("%s\n", buf); +} + +cmdline_parse_token_string_t cmd_show_fec_mode_show = + TOKEN_STRING_INITIALIZER(struct cmd_show_fec_metadata_result, + cmd_show, "show"); +cmdline_parse_token_string_t cmd_show_fec_mode_port = + TOKEN_STRING_INITIALIZER(struct cmd_show_fec_metadata_result, + cmd_port, "port"); +cmdline_parse_token_num_t cmd_show_fec_mode_pid = + TOKEN_NUM_INITIALIZER(struct cmd_show_fec_metadata_result, + cmd_pid, UINT16); +cmdline_parse_token_string_t cmd_show_fec_mode_keyword = + TOKEN_STRING_INITIALIZER(struct cmd_show_fec_metadata_result, + cmd_keyword, "fec_mode"); + +cmdline_parse_inst_t cmd_show_fec_mode = { + .f = cmd_show_fec_mode_parsed, + .data = NULL, + .help_str = "show port fec_mode", + .tokens = { + (void *)&cmd_show_fec_mode_show, + (void *)&cmd_show_fec_mode_port, + (void *)&cmd_show_fec_mode_pid, + (void *)&cmd_show_fec_mode_keyword, + NULL, + }, +}; + +/* *** set fec mode per port configuration *** */ +struct cmd_set_port_fec_mode { + cmdline_fixed_string_t set; + cmdline_fixed_string_t port; + portid_t port_id; + cmdline_fixed_string_t fec_mode; + cmdline_fixed_string_t fec_value; +}; + +/* Common CLI fields for set fec mode */ +cmdline_parse_token_string_t cmd_set_port_fec_mode_set = + TOKEN_STRING_INITIALIZER + (struct cmd_set_port_fec_mode, + set, "set"); +cmdline_parse_token_string_t cmd_set_port_fec_mode_port = + TOKEN_STRING_INITIALIZER + (struct cmd_set_port_fec_mode, + port, "port"); +cmdline_parse_token_num_t cmd_set_port_fec_mode_port_id = + TOKEN_NUM_INITIALIZER + (struct cmd_set_port_fec_mode, + port_id, UINT16); +cmdline_parse_token_string_t cmd_set_port_fec_mode_str = + TOKEN_STRING_INITIALIZER + (struct cmd_set_port_fec_mode, + fec_mode, "fec_mode"); +cmdline_parse_token_string_t cmd_set_port_fec_mode_value = + TOKEN_STRING_INITIALIZER + (struct cmd_set_port_fec_mode, + fec_value, NULL); + +static void +cmd_set_port_fec_mode_parsed( + void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ + struct cmd_set_port_fec_mode *res = parsed_result; + uint16_t port_id = res->port_id; + uint32_t mode; + int ret; + + ret = parse_fec_mode(res->fec_value, &mode); + if (ret < 0) { + printf("Unknown fec mode: %s for Port %d\n", res->fec_value, + port_id); + return; + } + + ret = rte_eth_fec_set(port_id, mode); + if (ret == -ENOTSUP) { + printf("Function not implemented\n"); + return; + } else if (ret < 0) { + printf("Set FEC mode failed\n"); + return; + } +} + +cmdline_parse_inst_t cmd_set_fec_mode = { + .f = cmd_set_port_fec_mode_parsed, + .data = NULL, + .help_str = "set port fec_mode auto|off|rs|baser", + .tokens = { + (void *)&cmd_set_port_fec_mode_set, + (void *)&cmd_set_port_fec_mode_port, + (void *)&cmd_set_port_fec_mode_port_id, + (void *)&cmd_set_port_fec_mode_str, + (void *)&cmd_set_port_fec_mode_value, + NULL, + }, +}; + /* show port supported ptypes */ /* Common result structure for show port ptypes */ @@ -19401,6 +19920,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, @@ -19413,8 +19933,11 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_reset, (cmdline_parse_inst_t *)&cmd_set_numbers, (cmdline_parse_inst_t *)&cmd_set_log, + (cmdline_parse_inst_t *)&cmd_set_rxoffs, + (cmdline_parse_inst_t *)&cmd_set_rxpkts, (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, @@ -19487,6 +20010,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, @@ -19603,9 +20128,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, @@ -19659,6 +20181,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, @@ -19688,6 +20211,9 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_show_set_raw, (cmdline_parse_inst_t *)&cmd_show_set_raw_all, (cmdline_parse_inst_t *)&cmd_config_tx_dynf_specific, + (cmdline_parse_inst_t *)&cmd_show_fec_mode, + (cmdline_parse_inst_t *)&cmd_set_fec_mode, + (cmdline_parse_inst_t *)&cmd_show_capability, NULL, };