X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest-pmd%2Fcmdline.c;h=3f6d81c9a1dec88629893eade4ac4c9ce24a06a8;hb=d6192a7cca54642d2019c7726f40ff07eedd7b92;hp=996a498768599aaca5e45ede28485cbb8f67455b;hpb=489bdbbfc269c819ec679605d1f0e8ad058789f4;p=dpdk.git diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 996a498768..3f6d81c9a1 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -50,20 +50,20 @@ #include #include #include -#ifdef RTE_LIBRTE_PMD_BOND +#ifdef RTE_NET_BOND #include #include #endif -#if defined RTE_LIBRTE_DPAA_BUS && defined RTE_LIBRTE_DPAA_PMD +#if defined RTE_BUS_DPAA && defined RTE_NET_DPAA #include #endif -#ifdef RTE_LIBRTE_IXGBE_PMD +#ifdef RTE_NET_IXGBE #include #endif -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E #include #endif -#ifdef RTE_LIBRTE_BNXT_PMD +#ifdef RTE_NET_BNXT #include #endif #include "testpmd.h" @@ -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" @@ -593,7 +624,7 @@ static void cmd_help_long_parsed(void *parsed_result, " Show the bypass configuration for a bypass enabled NIC" " using the lowest port on the NIC.\n\n" -#ifdef RTE_LIBRTE_PMD_BOND +#ifdef RTE_NET_BOND "create bonded device (mode) (socket)\n" " Create a new bonded device with specific bonding mode and socket.\n\n" @@ -618,7 +649,7 @@ static void cmd_help_long_parsed(void *parsed_result, "set bonding mode IEEE802.3AD aggregator policy (port_id) (agg_name)" " Set Aggregation mode for IEEE802.3AD (mode 4)" - "set bonding xmit_balance_policy (port_id) (l2|l23|l34)\n" + "set bonding balance_xmit_policy (port_id) (l2|l23|l34)\n" " Set the transmit balance policy for bonded device running in balance mode.\n\n" "set bonding mon_period (port_id) (value)\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() ); } @@ -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)" @@ -2274,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")) @@ -2297,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")) @@ -2317,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) @@ -2378,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, @@ -2490,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); @@ -2503,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, @@ -2857,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" @@ -2865,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 { @@ -3839,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 { @@ -3926,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; @@ -4207,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; @@ -4261,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; @@ -4374,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; @@ -5352,7 +5579,7 @@ cmd_set_bypass_mode_parsed(void *parsed_result, portid_t port_id = res->port_id; int32_t rc = -EINVAL; -#if defined RTE_LIBRTE_IXGBE_PMD && defined RTE_LIBRTE_IXGBE_BYPASS +#if defined RTE_NET_IXGBE && defined RTE_LIBRTE_IXGBE_BYPASS uint32_t bypass_mode = RTE_PMD_IXGBE_BYPASS_MODE_NORMAL; if (!strcmp(res->value, "bypass")) @@ -5420,7 +5647,7 @@ cmd_set_bypass_event_parsed(void *parsed_result, struct cmd_set_bypass_event_result *res = parsed_result; portid_t port_id = res->port_id; -#if defined RTE_LIBRTE_IXGBE_PMD && defined RTE_LIBRTE_IXGBE_BYPASS +#if defined RTE_NET_IXGBE && defined RTE_LIBRTE_IXGBE_BYPASS uint32_t bypass_event = RTE_PMD_IXGBE_BYPASS_EVENT_NONE; uint32_t bypass_mode = RTE_PMD_IXGBE_BYPASS_MODE_NORMAL; @@ -5525,7 +5752,7 @@ cmd_set_bypass_timeout_parsed(void *parsed_result, { __rte_unused struct cmd_set_bypass_timeout_result *res = parsed_result; -#if defined RTE_LIBRTE_IXGBE_PMD && defined RTE_LIBRTE_IXGBE_BYPASS +#if defined RTE_NET_IXGBE && defined RTE_LIBRTE_IXGBE_BYPASS if (!strcmp(res->value, "1.5")) bypass_timeout = RTE_PMD_IXGBE_BYPASS_TMT_1_5_SEC; else if (!strcmp(res->value, "2")) @@ -5588,7 +5815,7 @@ cmd_show_bypass_config_parsed(void *parsed_result, struct cmd_show_bypass_config_result *res = parsed_result; portid_t port_id = res->port_id; int rc = -EINVAL; -#if defined RTE_LIBRTE_IXGBE_PMD && defined RTE_LIBRTE_IXGBE_BYPASS +#if defined RTE_NET_IXGBE && defined RTE_LIBRTE_IXGBE_BYPASS uint32_t event_mode; uint32_t bypass_mode; uint32_t timeout = bypass_timeout; @@ -5671,7 +5898,7 @@ cmdline_parse_inst_t cmd_show_bypass_config = { }, }; -#ifdef RTE_LIBRTE_PMD_BOND +#ifdef RTE_NET_BOND /* *** SET BONDING MODE *** */ struct cmd_set_bonding_mode_result { cmdline_fixed_string_t set; @@ -6441,7 +6668,7 @@ cmdline_parse_inst_t cmd_set_bonding_agg_mode_policy = { }; -#endif /* RTE_LIBRTE_PMD_BOND */ +#endif /* RTE_NET_BOND */ /* *** SET FORWARDING MODE *** */ struct cmd_set_fwd_mode_result { @@ -7412,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 = @@ -7422,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, @@ -7619,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; @@ -8272,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; @@ -8595,12 +8957,12 @@ cmd_set_vf_rxmode_parsed(void *parsed_result, RTE_SET_USED(is_on); -#ifdef RTE_LIBRTE_IXGBE_PMD +#ifdef RTE_NET_IXGBE if (ret == -ENOTSUP) ret = rte_pmd_ixgbe_set_vf_rxmode(res->port_id, res->vf_id, vf_rxmode, (uint8_t)is_on); #endif -#ifdef RTE_LIBRTE_BNXT_PMD +#ifdef RTE_NET_BNXT if (ret == -ENOTSUP) ret = rte_pmd_bnxt_set_vf_rxmode(res->port_id, res->vf_id, vf_rxmode, (uint8_t)is_on); @@ -8674,12 +9036,12 @@ static void cmd_vf_mac_addr_parsed(void *parsed_result, if (strcmp(res->what, "add") != 0) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E if (ret == -ENOTSUP) ret = rte_pmd_i40e_add_vf_mac_addr(res->port_num, res->vf_num, &res->address); #endif -#ifdef RTE_LIBRTE_BNXT_PMD +#ifdef RTE_NET_BNXT if (ret == -ENOTSUP) ret = rte_pmd_bnxt_mac_addr_add(res->port_num, &res->address, res->vf_num); @@ -8750,17 +9112,17 @@ cmd_vf_rx_vlan_filter_parsed(void *parsed_result, __rte_unused int is_add = (strcmp(res->what, "add") == 0) ? 1 : 0; -#ifdef RTE_LIBRTE_IXGBE_PMD +#ifdef RTE_NET_IXGBE if (ret == -ENOTSUP) ret = rte_pmd_ixgbe_set_vf_vlan_filter(res->port_id, res->vlan_id, res->vf_mask, is_add); #endif -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E if (ret == -ENOTSUP) ret = rte_pmd_i40e_set_vf_vlan_filter(res->port_id, res->vlan_id, res->vf_mask, is_add); #endif -#ifdef RTE_LIBRTE_BNXT_PMD +#ifdef RTE_NET_BNXT if (ret == -ENOTSUP) ret = rte_pmd_bnxt_set_vf_vlan_filter(res->port_id, res->vlan_id, res->vf_mask, is_add); @@ -9287,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_NET_I40E + 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"); } @@ -9847,7 +10213,7 @@ cmd_queue_region_parsed(void *parsed_result, { struct cmd_queue_region_result *res = parsed_result; int ret = -ENOTSUP; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E struct rte_pmd_i40e_queue_region_conf region_conf; enum rte_pmd_i40e_queue_region_op op_type; #endif @@ -9855,7 +10221,7 @@ cmd_queue_region_parsed(void *parsed_result, if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E memset(®ion_conf, 0, sizeof(region_conf)); op_type = RTE_PMD_I40E_RSS_QUEUE_REGION_SET; region_conf.region_id = res->region_id; @@ -9946,7 +10312,7 @@ cmd_region_flowtype_parsed(void *parsed_result, { struct cmd_region_flowtype_result *res = parsed_result; int ret = -ENOTSUP; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E struct rte_pmd_i40e_queue_region_conf region_conf; enum rte_pmd_i40e_queue_region_op op_type; #endif @@ -9954,7 +10320,7 @@ cmd_region_flowtype_parsed(void *parsed_result, if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E memset(®ion_conf, 0, sizeof(region_conf)); op_type = RTE_PMD_I40E_RSS_QUEUE_REGION_FLOWTYPE_SET; @@ -10037,7 +10403,7 @@ cmd_user_priority_region_parsed(void *parsed_result, { struct cmd_user_priority_region_result *res = parsed_result; int ret = -ENOTSUP; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E struct rte_pmd_i40e_queue_region_conf region_conf; enum rte_pmd_i40e_queue_region_op op_type; #endif @@ -10045,7 +10411,7 @@ cmd_user_priority_region_parsed(void *parsed_result, if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E memset(®ion_conf, 0, sizeof(region_conf)); op_type = RTE_PMD_I40E_RSS_QUEUE_REGION_USER_PRIORITY_SET; region_conf.user_priority = res->user_priority_id; @@ -10128,7 +10494,7 @@ cmd_flush_queue_region_parsed(void *parsed_result, { struct cmd_flush_queue_region_result *res = parsed_result; int ret = -ENOTSUP; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E struct rte_pmd_i40e_queue_region_conf region_conf; enum rte_pmd_i40e_queue_region_op op_type; #endif @@ -10136,7 +10502,7 @@ cmd_flush_queue_region_parsed(void *parsed_result, if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E memset(®ion_conf, 0, sizeof(region_conf)); if (strcmp(res->what, "on") == 0) @@ -10210,7 +10576,7 @@ cmd_show_queue_region_info_parsed(void *parsed_result, { struct cmd_show_queue_region_info *res = parsed_result; int ret = -ENOTSUP; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E struct rte_pmd_i40e_queue_regions rte_pmd_regions; enum rte_pmd_i40e_queue_region_op op_type; #endif @@ -10218,7 +10584,7 @@ cmd_show_queue_region_info_parsed(void *parsed_result, if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E memset(&rte_pmd_regions, 0, sizeof(rte_pmd_regions)); op_type = RTE_PMD_I40E_RSS_QUEUE_REGION_INFO_GET; @@ -11114,7 +11480,7 @@ cmd_flow_director_filter_parsed(void *parsed_result, } } else { if (!strcmp(res->mode_value, "raw")) { -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E struct rte_pmd_i40e_flow_type_mapping mapping[RTE_PMD_I40E_FLOW_TYPE_MAX]; struct rte_pmd_i40e_pkt_template_conf conf; @@ -13472,17 +13838,17 @@ cmd_set_vf_vlan_anti_spoof_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_IXGBE_PMD +#ifdef RTE_NET_IXGBE if (ret == -ENOTSUP) ret = rte_pmd_ixgbe_set_vf_vlan_anti_spoof(res->port_id, res->vf_id, is_on); #endif -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E if (ret == -ENOTSUP) ret = rte_pmd_i40e_set_vf_vlan_anti_spoof(res->port_id, res->vf_id, is_on); #endif -#ifdef RTE_LIBRTE_BNXT_PMD +#ifdef RTE_NET_BNXT if (ret == -ENOTSUP) ret = rte_pmd_bnxt_set_vf_vlan_anti_spoof(res->port_id, res->vf_id, is_on); @@ -13578,17 +13944,17 @@ cmd_set_vf_mac_anti_spoof_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_IXGBE_PMD +#ifdef RTE_NET_IXGBE if (ret == -ENOTSUP) ret = rte_pmd_ixgbe_set_vf_mac_anti_spoof(res->port_id, res->vf_id, is_on); #endif -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E if (ret == -ENOTSUP) ret = rte_pmd_i40e_set_vf_mac_anti_spoof(res->port_id, res->vf_id, is_on); #endif -#ifdef RTE_LIBRTE_BNXT_PMD +#ifdef RTE_NET_BNXT if (ret == -ENOTSUP) ret = rte_pmd_bnxt_set_vf_mac_anti_spoof(res->port_id, res->vf_id, is_on); @@ -13684,17 +14050,17 @@ cmd_set_vf_vlan_stripq_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_IXGBE_PMD +#ifdef RTE_NET_IXGBE if (ret == -ENOTSUP) ret = rte_pmd_ixgbe_set_vf_vlan_stripq(res->port_id, res->vf_id, is_on); #endif -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E if (ret == -ENOTSUP) ret = rte_pmd_i40e_set_vf_vlan_stripq(res->port_id, res->vf_id, is_on); #endif -#ifdef RTE_LIBRTE_BNXT_PMD +#ifdef RTE_NET_BNXT if (ret == -ENOTSUP) ret = rte_pmd_bnxt_set_vf_vlan_stripq(res->port_id, res->vf_id, is_on); @@ -13788,17 +14154,17 @@ cmd_set_vf_vlan_insert_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_IXGBE_PMD +#ifdef RTE_NET_IXGBE if (ret == -ENOTSUP) ret = rte_pmd_ixgbe_set_vf_vlan_insert(res->port_id, res->vf_id, res->vlan_id); #endif -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E if (ret == -ENOTSUP) ret = rte_pmd_i40e_set_vf_vlan_insert(res->port_id, res->vf_id, res->vlan_id); #endif -#ifdef RTE_LIBRTE_BNXT_PMD +#ifdef RTE_NET_BNXT if (ret == -ENOTSUP) ret = rte_pmd_bnxt_set_vf_vlan_insert(res->port_id, res->vf_id, res->vlan_id); @@ -13884,19 +14250,19 @@ cmd_set_tx_loopback_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_IXGBE_PMD +#ifdef RTE_NET_IXGBE if (ret == -ENOTSUP) ret = rte_pmd_ixgbe_set_tx_loopback(res->port_id, is_on); #endif -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E if (ret == -ENOTSUP) ret = rte_pmd_i40e_set_tx_loopback(res->port_id, is_on); #endif -#ifdef RTE_LIBRTE_BNXT_PMD +#ifdef RTE_NET_BNXT if (ret == -ENOTSUP) ret = rte_pmd_bnxt_set_tx_loopback(res->port_id, is_on); #endif -#if defined RTE_LIBRTE_DPAA_BUS && defined RTE_LIBRTE_DPAA_PMD +#if defined RTE_BUS_DPAA && defined RTE_NET_DPAA if (ret == -ENOTSUP) ret = rte_pmd_dpaa_set_tx_loopback(res->port_id, is_on); #endif @@ -13983,11 +14349,11 @@ cmd_set_all_queues_drop_en_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_IXGBE_PMD +#ifdef RTE_NET_IXGBE if (ret == -ENOTSUP) ret = rte_pmd_ixgbe_set_all_queues_drop_en(res->port_id, is_on); #endif -#ifdef RTE_LIBRTE_BNXT_PMD +#ifdef RTE_NET_BNXT if (ret == -ENOTSUP) ret = rte_pmd_bnxt_set_all_queues_drop_en(res->port_id, is_on); #endif @@ -14079,7 +14445,7 @@ cmd_set_vf_split_drop_en_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_IXGBE_PMD +#ifdef RTE_NET_IXGBE ret = rte_pmd_ixgbe_set_vf_split_drop_en(res->port_id, res->vf_id, is_on); #endif @@ -14171,17 +14537,17 @@ cmd_set_vf_mac_addr_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_IXGBE_PMD +#ifdef RTE_NET_IXGBE if (ret == -ENOTSUP) ret = rte_pmd_ixgbe_set_vf_mac_addr(res->port_id, res->vf_id, &res->mac_addr); #endif -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E if (ret == -ENOTSUP) ret = rte_pmd_i40e_set_vf_mac_addr(res->port_id, res->vf_id, &res->mac_addr); #endif -#ifdef RTE_LIBRTE_BNXT_PMD +#ifdef RTE_NET_BNXT if (ret == -ENOTSUP) ret = rte_pmd_bnxt_set_vf_mac_addr(res->port_id, res->vf_id, &res->mac_addr); @@ -14298,7 +14664,7 @@ cmd_set_macsec_offload_on_parsed( return; if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MACSEC_INSERT) { -#ifdef RTE_LIBRTE_IXGBE_PMD +#ifdef RTE_NET_IXGBE ret = rte_pmd_ixgbe_macsec_enable(port_id, en, rp); #endif } @@ -14395,7 +14761,7 @@ cmd_set_macsec_offload_off_parsed( return; if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MACSEC_INSERT) { -#ifdef RTE_LIBRTE_IXGBE_PMD +#ifdef RTE_NET_IXGBE ret = rte_pmd_ixgbe_macsec_disable(port_id); #endif } @@ -14481,7 +14847,7 @@ cmd_set_macsec_sc_parsed( int ret = -ENOTSUP; int is_tx = (strcmp(res->tx_rx, "tx") == 0) ? 1 : 0; -#ifdef RTE_LIBRTE_IXGBE_PMD +#ifdef RTE_NET_IXGBE ret = is_tx ? rte_pmd_ixgbe_macsec_config_txsc(res->port_id, res->mac.addr_bytes) : @@ -14600,7 +14966,7 @@ cmd_set_macsec_sa_parsed( key[i] = (uint8_t) ((xdgt0 * 16) + xdgt1); } -#ifdef RTE_LIBRTE_IXGBE_PMD +#ifdef RTE_NET_IXGBE ret = is_tx ? rte_pmd_ixgbe_macsec_select_txsa(res->port_id, res->idx, res->an, res->pn, key) : @@ -14697,7 +15063,7 @@ cmd_set_vf_promisc_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E ret = rte_pmd_i40e_set_vf_unicast_promisc(res->port_id, res->vf_id, is_on); #endif @@ -14787,7 +15153,7 @@ cmd_set_vf_allmulti_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E ret = rte_pmd_i40e_set_vf_multicast_promisc(res->port_id, res->vf_id, is_on); #endif @@ -14877,7 +15243,7 @@ cmd_set_vf_broadcast_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E ret = rte_pmd_i40e_set_vf_broadcast(res->port_id, res->vf_id, is_on); #endif @@ -14971,7 +15337,7 @@ cmd_set_vf_vlan_tag_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E ret = rte_pmd_i40e_set_vf_vlan_tag(res->port_id, res->vf_id, is_on); #endif @@ -15092,7 +15458,7 @@ cmd_vf_max_bw_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E ret = rte_pmd_i40e_set_vf_max_bw(res->port_id, res->vf_id, res->bw); #endif @@ -15192,7 +15558,7 @@ cmd_vf_tc_min_bw_parsed( if (ret) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E ret = rte_pmd_i40e_set_vf_tc_bw_alloc(res->port_id, res->vf_id, tc_num, bw); #endif @@ -15258,7 +15624,7 @@ cmd_tc_min_bw_parsed( if (ret) return; -#ifdef RTE_LIBRTE_IXGBE_PMD +#ifdef RTE_NET_IXGBE ret = rte_pmd_ixgbe_set_tc_bw_alloc(res->port_id, tc_num, bw); #endif @@ -15307,7 +15673,7 @@ cmd_vf_tc_max_bw_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E ret = rte_pmd_i40e_set_vf_tc_max_bw(res->port_id, res->vf_id, res->tc_no, res->bw); #endif @@ -15349,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; @@ -16435,7 +16727,7 @@ cmd_strict_link_prio_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E ret = rte_pmd_i40e_set_tc_strict_prio(res->port_id, res->tc_map); #endif @@ -16519,7 +16811,7 @@ cmd_ddp_add_parsed( return; } -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E if (ret == -ENOTSUP) ret = rte_pmd_i40e_process_ddp_package(res->port_id, buff, size, @@ -16587,7 +16879,7 @@ cmd_ddp_del_parsed( if (!buff) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E if (ret == -ENOTSUP) ret = rte_pmd_i40e_process_ddp_package(res->port_id, buff, size, @@ -16642,7 +16934,7 @@ cmd_ddp_info_parsed( uint8_t *pkg; uint32_t pkg_size; int ret = -ENOTSUP; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E uint32_t i, j, n; uint8_t *buff; uint32_t buff_size = 0; @@ -16663,7 +16955,7 @@ cmd_ddp_info_parsed( if (!pkg) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E ret = rte_pmd_i40e_get_ddp_info(pkg, pkg_size, (uint8_t *)&info, sizeof(info), RTE_PMD_I40E_PKG_INFO_GLOBAL_HEADER); @@ -16878,7 +17170,7 @@ cmd_ddp_get_list_parsed( __rte_unused struct cmdline *cl, __rte_unused void *data) { -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E struct cmd_ddp_get_list_result *res = parsed_result; struct rte_pmd_i40e_profile_list *p_list; struct rte_pmd_i40e_profile_info *p_info; @@ -16888,7 +17180,7 @@ cmd_ddp_get_list_parsed( #endif int ret = -ENOTSUP; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E size = PROFILE_INFO_SIZE * MAX_PROFILE_NUM + 4; p_list = (struct rte_pmd_i40e_profile_list *)malloc(size); if (!p_list) { @@ -16956,7 +17248,7 @@ cmd_cfg_input_set_parsed( __rte_unused struct cmdline *cl, __rte_unused void *data) { -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E struct cmd_cfg_input_set_result *res = parsed_result; enum rte_pmd_i40e_inset_type inset_type = INSET_NONE; struct rte_pmd_i40e_inset inset; @@ -16968,7 +17260,7 @@ cmd_cfg_input_set_parsed( return; } -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E if (!strcmp(res->inset_type, "hash_inset")) inset_type = INSET_HASH; else if (!strcmp(res->inset_type, "fdir_inset")) @@ -17079,7 +17371,7 @@ cmd_clear_input_set_parsed( __rte_unused struct cmdline *cl, __rte_unused void *data) { -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E struct cmd_clear_input_set_result *res = parsed_result; enum rte_pmd_i40e_inset_type inset_type = INSET_NONE; struct rte_pmd_i40e_inset inset; @@ -17091,7 +17383,7 @@ cmd_clear_input_set_parsed( return; } -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E if (!strcmp(res->inset_type, "hash_inset")) inset_type = INSET_HASH; else if (!strcmp(res->inset_type, "fdir_inset")) @@ -17207,13 +17499,13 @@ cmd_show_vf_stats_parsed( memset(&stats, 0, sizeof(stats)); -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E if (ret == -ENOTSUP) ret = rte_pmd_i40e_get_vf_stats(res->port_id, res->vf_id, &stats); #endif -#ifdef RTE_LIBRTE_BNXT_PMD +#ifdef RTE_NET_BNXT if (ret == -ENOTSUP) ret = rte_pmd_bnxt_get_vf_stats(res->port_id, res->vf_id, @@ -17312,12 +17604,12 @@ cmd_clear_vf_stats_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E if (ret == -ENOTSUP) ret = rte_pmd_i40e_reset_vf_stats(res->port_id, res->vf_id); #endif -#ifdef RTE_LIBRTE_BNXT_PMD +#ifdef RTE_NET_BNXT if (ret == -ENOTSUP) ret = rte_pmd_bnxt_reset_vf_stats(res->port_id, res->vf_id); @@ -17404,7 +17696,7 @@ cmd_pctype_mapping_reset_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E ret = rte_pmd_i40e_flow_type_mapping_reset(res->port_id); #endif @@ -17478,7 +17770,7 @@ cmd_pctype_mapping_get_parsed( { struct cmd_pctype_mapping_get_result *res = parsed_result; int ret = -ENOTSUP; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E struct rte_pmd_i40e_flow_type_mapping mapping[RTE_PMD_I40E_FLOW_TYPE_MAX]; int i, j, first_pctype; @@ -17487,7 +17779,7 @@ cmd_pctype_mapping_get_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E ret = rte_pmd_i40e_flow_type_mapping_get(res->port_id, mapping); #endif @@ -17505,7 +17797,7 @@ cmd_pctype_mapping_get_parsed( return; } -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E for (i = 0; i < RTE_PMD_I40E_FLOW_TYPE_MAX; i++) { if (mapping[i].pctype != 0ULL) { first_pctype = 1; @@ -17594,7 +17886,7 @@ cmd_pctype_mapping_update_parsed( { struct cmd_pctype_mapping_update_result *res = parsed_result; int ret = -ENOTSUP; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E struct rte_pmd_i40e_flow_type_mapping mapping; unsigned int i; unsigned int nb_item; @@ -17604,7 +17896,7 @@ cmd_pctype_mapping_update_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E nb_item = parse_item_list(res->pctype_list, "pctypes", RTE_PMD_I40E_PCTYPE_MAX, pctype_list, 1); mapping.flow_type = res->flow_type; @@ -17692,7 +17984,7 @@ cmd_ptype_mapping_get_parsed( { struct cmd_ptype_mapping_get_result *res = parsed_result; int ret = -ENOTSUP; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E int max_ptype_num = 256; struct rte_pmd_i40e_ptype_mapping mapping[max_ptype_num]; uint16_t count; @@ -17702,7 +17994,7 @@ cmd_ptype_mapping_get_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E ret = rte_pmd_i40e_ptype_mapping_get(res->port_id, mapping, max_ptype_num, @@ -17723,7 +18015,7 @@ cmd_ptype_mapping_get_parsed( printf("programming error: (%s)\n", strerror(-ret)); } -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E if (!ret) { for (i = 0; i < count; i++) printf("%3d\t0x%08x\n", @@ -17801,7 +18093,7 @@ cmd_ptype_mapping_replace_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E ret = rte_pmd_i40e_ptype_mapping_replace(res->port_id, res->target, res->mask, @@ -17883,7 +18175,7 @@ cmd_ptype_mapping_reset_parsed( if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E ret = rte_pmd_i40e_ptype_mapping_reset(res->port_id); #endif @@ -17960,13 +18252,13 @@ cmd_ptype_mapping_update_parsed( { struct cmd_ptype_mapping_update_result *res = parsed_result; int ret = -ENOTSUP; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E struct rte_pmd_i40e_ptype_mapping mapping; #endif if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; -#ifdef RTE_LIBRTE_I40E_PMD +#ifdef RTE_NET_I40E mapping.hw_ptype = res->hw_ptype; mapping.sw_ptype = res->sw_ptype; ret = rte_pmd_i40e_ptype_mapping_update(res->port_id, @@ -18251,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, @@ -18331,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, @@ -18381,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, @@ -18437,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, @@ -18662,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, @@ -18747,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, @@ -19059,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 */ @@ -19405,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, @@ -19417,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, @@ -19434,7 +19953,7 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_set_bypass_event, (cmdline_parse_inst_t *)&cmd_set_bypass_timeout, (cmdline_parse_inst_t *)&cmd_show_bypass_config, -#ifdef RTE_LIBRTE_PMD_BOND +#ifdef RTE_NET_BOND (cmdline_parse_inst_t *) &cmd_set_bonding_mode, (cmdline_parse_inst_t *) &cmd_show_bonding_config, (cmdline_parse_inst_t *) &cmd_set_bonding_primary, @@ -19491,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, @@ -19607,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, @@ -19663,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, @@ -19681,7 +20200,7 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_tx_offload_get_configuration, (cmdline_parse_inst_t *)&cmd_config_per_port_tx_offload, (cmdline_parse_inst_t *)&cmd_config_per_queue_tx_offload, -#ifdef RTE_LIBRTE_BPF +#ifdef RTE_LIB_BPF (cmdline_parse_inst_t *)&cmd_operate_bpf_ld_parse, (cmdline_parse_inst_t *)&cmd_operate_bpf_unld_parse, #endif @@ -19692,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, }; @@ -19716,7 +20238,7 @@ cmdline_read_from_file(const char *filename) printf("Read CLI commands from %s\n", filename); } -/* prompt function, called from main on MASTER lcore */ +/* prompt function, called from main on MAIN lcore */ void prompt(void) {