X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest-pmd%2Fcmdline.c;h=7b86bef0ed3d5d5b8bf718d1c3cd241a22a30e50;hb=f2fc83b40f06da6a6b2476005279ba52d4ce3c44;hp=db53cc0ccebab3ca82d2b168bdc203ca4354d436;hpb=62e8a5a8c888ec03e2485248132fd32d3b3c5b60;p=dpdk.git diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index db53cc0cce..7b86bef0ed 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -11,13 +11,7 @@ #include #include #include -#ifndef __linux__ -#ifndef __FreeBSD__ -#include -#else #include -#endif -#endif #include #include @@ -44,9 +38,9 @@ #include #include #include -#include #include #include +#include #include #include @@ -86,22 +80,24 @@ struct cmd_help_brief_result { cmdline_fixed_string_t help; }; -static void cmd_help_brief_parsed(__attribute__((unused)) void *parsed_result, +static void cmd_help_brief_parsed(__rte_unused void *parsed_result, struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused void *data) { cmdline_printf( cl, "\n" "Help is available for the following sections:\n\n" - " help control : Start and stop forwarding.\n" - " help display : Displaying port, stats and config " + " help control : Start and stop forwarding.\n" + " help display : Displaying port, stats and config " "information.\n" - " help config : Configuration information.\n" - " help ports : Configuring ports.\n" - " help registers : Reading and setting port registers.\n" - " help filters : Filters configuration help.\n" - " help all : All of the above sections.\n\n" + " help config : Configuration information.\n" + " help ports : Configuring ports.\n" + " help registers : Reading and setting port registers.\n" + " help filters : Filters configuration help.\n" + " help traffic_management : Traffic Management commmands.\n" + " help devices : Device related cmds.\n" + " help all : All of the above sections.\n\n" ); } @@ -127,7 +123,7 @@ struct cmd_help_long_result { static void cmd_help_long_parsed(void *parsed_result, struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused void *data) { int show_all = 0; struct cmd_help_long_result *res = parsed_result; @@ -210,21 +206,45 @@ static void cmd_help_long_parsed(void *parsed_result, "show port meter stats (port_id) (meter_id) (clear)\n" " Get meter stats on a port\n\n" - "show port tm cap (port_id)\n" - " Display the port TM capability.\n\n" - "show port tm level cap (port_id) (level_id)\n" - " Display the port TM hierarchical level capability.\n\n" + "show fwd stats all\n" + " Display statistics for all fwd engines.\n\n" + + "clear fwd stats all\n" + " Clear statistics for all fwd engines.\n\n" + + "show port (port_id) rx_offload capabilities\n" + " List all per queue and per port Rx offloading" + " capabilities of a port\n\n" + + "show port (port_id) rx_offload configuration\n" + " List port level and all queue level" + " Rx offloading configuration\n\n" + + "show port (port_id) tx_offload capabilities\n" + " List all per queue and per port" + " Tx offloading capabilities of a port\n\n" + + "show port (port_id) tx_offload configuration\n" + " List port level and all queue level" + " Tx offloading configuration\n\n" + + "show port (port_id) tx_metadata\n" + " Show Tx metadata value set" + " for a specific port\n\n" - "show port tm node cap (port_id) (node_id)\n" - " Display the port TM node capability.\n\n" + "show port (port_id) ptypes\n" + " Show port supported ptypes" + " for a specific port\n\n" - "show port tm node type (port_id) (node_id)\n" - " Display the port TM node type.\n\n" + "show device info (|all)" + " Show general information about devices probed.\n\n" - "show port tm node stats (port_id) (node_id) (clear)\n" - " Display the port TM node stats.\n\n" + "show port (port_id) rxq|txq (queue_id) desc (desc_id) status" + " Show status of rx|tx descriptor.\n\n" + "show port (port_id) macs|mcast_macs" + " Display list of mac addresses added to port.\n\n" ); } @@ -310,9 +330,6 @@ static void cmd_help_long_parsed(void *parsed_result, "set vf broadcast (port_id) (vf_id) (on|off)\n" " Set VF broadcast for a VF from the PF.\n\n" - "vlan set strip (on|off) (port_id)\n" - " Set the VLAN strip on a port.\n\n" - "vlan set stripq (on|off) (port_id,queue_id)\n" " Set the VLAN strip for a queue on a port.\n\n" @@ -343,12 +360,8 @@ static void cmd_help_long_parsed(void *parsed_result, "set tc tx min-bandwidth (port_id) (bw1, bw2, ...)\n" " Set all TCs' min bandwidth(%%) for all PF and VFs.\n\n" - "vlan set filter (on|off) (port_id)\n" - " Set the VLAN filter on a port.\n\n" - - "vlan set qinq (on|off) (port_id)\n" - " Set the VLAN QinQ (extended queue in queue)" - " on a port.\n\n" + "vlan set (strip|filter|qinq_strip|extend) (on|off) (port_id)\n" + " Set the VLAN strip or filter or qinq strip or extend\n\n" "vlan set (inner|outer) tpid (value) (port_id)\n" " Set the VLAN TPID for Packet Filtering on" @@ -371,12 +384,12 @@ static void cmd_help_long_parsed(void *parsed_result, "filtered for VF(s) from port_id.\n\n" "tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) " - "(inner_vlan) (vxlan|nvgre|ipingre) (imac-ivlan|imac-ivlan-tenid|" + "(inner_vlan) (vxlan|nvgre|ipingre|vxlan-gpe) (imac-ivlan|imac-ivlan-tenid|" "imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)\n" " add a tunnel filter of a port.\n\n" "tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) " - "(inner_vlan) (vxlan|nvgre|ipingre) (imac-ivlan|imac-ivlan-tenid|" + "(inner_vlan) (vxlan|nvgre|ipingre|vxlan-gpe) (imac-ivlan|imac-ivlan-tenid|" "imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)\n" " remove a tunnel filter of a port.\n\n" @@ -642,11 +655,6 @@ static void cmd_help_long_parsed(void *parsed_result, "E-tag set filter del e-tag-id (value) port (port_id)\n" " Delete an E-tag forwarding filter on a port\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 "ddp add (port_id) (profile_path[,backup_profile_path])\n" " Load a profile package on a port\n\n" @@ -665,6 +673,9 @@ static void cmd_help_long_parsed(void *parsed_result, "ptype mapping update (port_id) (hw_ptype) (sw_ptype)\n" " Update a ptype mapping item on a port\n\n" + "set port (port_id) ptype_mask (ptype_mask)\n" + " set packet types classification for a specific port\n\n" + "set port (port_id) queue-region region_id (value) " "queue_start_index (value) queue_num (value)\n" " Set a queue region on a port\n\n" @@ -727,89 +738,6 @@ 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" - "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" - " Add port tm node private shaper profile.\n\n" - - "del port tm node shaper profile (port_id) (shaper_profile_id)\n" - " Delete port tm node private shaper profile.\n\n" - - "add port tm node shared shaper (port_id) (shared_shaper_id)" - " (shaper_profile_id)\n" - " Add/update port tm node shared shaper.\n\n" - - "del port tm node shared shaper (port_id) (shared_shaper_id)\n" - " Delete port tm node shared shaper.\n\n" - - "set port tm node shaper profile (port_id) (node_id)" - " (shaper_profile_id)\n" - " Set port tm node shaper profile.\n\n" - - "add port tm node wred profile (port_id) (wred_profile_id)" - " (color_g) (min_th_g) (max_th_g) (maxp_inv_g) (wq_log2_g)" - " (color_y) (min_th_y) (max_th_y) (maxp_inv_y) (wq_log2_y)" - " (color_r) (min_th_r) (max_th_r) (maxp_inv_r) (wq_log2_r)\n" - " Add port tm node wred profile.\n\n" - - "del port tm node wred profile (port_id) (wred_profile_id)\n" - " Delete port tm node wred profile.\n\n" - - "add port tm nonleaf node (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.\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)" - " [(shared_shaper_id_0) (shared_shaper_id_1)...]\n" - " Add port tm leaf node.\n\n" - - "del port tm node (port_id) (node_id)\n" - " Delete port tm node.\n\n" - - "set port tm node parent (port_id) (node_id) (parent_node_id)" - " (priority) (weight)\n" - " Set port tm node parent.\n\n" - - "suspend port tm node (port_id) (node_id)" - " Suspend tm node.\n\n" - - "resume port tm node (port_id) (node_id)" - " Resume tm node.\n\n" - - "port tm hierarchy commit (port_id) (clean_on_fail)\n" - " Commit tm hierarchy.\n\n" - - "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" - " Configure the VXLAN encapsulation for flows.\n\n" - - "vxlan-with-vlan ip-version (ipv4|ipv6) vni (vni)" - " udp-src (udp-src) udp-dst (udp-dst) ip-src (ip-src)" - " ip-dst (ip-dst) vlan-tci (vlan-tci) eth-src (eth-src)" - " eth-dst (eth-dst)\n" - " Configure the VXLAN encapsulation for flows.\n\n" - - "vxlan-tos-ttl ip-version (ipv4|ipv6) vni (vni) udp-src" - " (udp-src) udp-dst (udp-dst) ip-tos (ip-tos) ip-ttl (ip-ttl)" - " ip-src (ip-src) ip-dst (ip-dst) eth-src (eth-src)" - " eth-dst (eth-dst)\n" - " Configure the VXLAN encapsulation for flows.\n\n" - - "nvgre ip-version (ipv4|ipv6) tni (tni) ip-src" - " (ip-src) ip-dst (ip-dst) eth-src (eth-src) eth-dst" - " (eth-dst)\n" - " Configure the NVGRE encapsulation for flows.\n\n" - - "nvgre-with-vlan ip-version (ipv4|ipv6) tni (tni)" - " ip-src (ip-src) ip-dst (ip-dst) vlan-tci (vlan-tci)" - " eth-src (eth-src) eth-dst (eth-dst)\n" - " Configure the NVGRE encapsulation for flows.\n\n" - , list_pkt_forwarding_modes() ); } @@ -831,6 +759,9 @@ static void cmd_help_long_parsed(void *parsed_result, "port close (port_id|all)\n" " Close all ports or port_id.\n\n" + "port reset (port_id|all)\n" + " Reset all ports or port_id.\n\n" + "port attach (ident)\n" " Attach physical or virtual dev by pci address or virtual device name\n\n" @@ -851,14 +782,15 @@ static void cmd_help_long_parsed(void *parsed_result, "port config all max-pkt-len (value)\n" " Set the max packet length.\n\n" - "port config all (crc-strip|scatter|rx-cksum|rx-timestamp|hw-vlan|hw-vlan-filter|" - "hw-vlan-strip|hw-vlan-extend|drop-en)" - " (on|off)\n" - " Set crc-strip/scatter/rx-checksum/hardware-vlan/drop_en" - " for ports.\n\n" + "port config all max-lro-pkt-size (value)\n" + " Set the max LRO aggregated packet size.\n\n" + + "port config all drop-en (on|off)\n" + " Enable or disable packet drop on all RX queues of all ports when no " + "receive buffers available.\n\n" "port config all rss (all|default|ip|tcp|udp|sctp|" - "ether|port|vxlan|geneve|nvgre|none|)\n" + "ether|port|vxlan|geneve|nvgre|vxlan-gpe|none|)\n" " Set the RSS mode.\n\n" "port config port-id rss reta (hash,queue)[,(hash,queue)]\n" @@ -924,6 +856,57 @@ static void cmd_help_long_parsed(void *parsed_result, "port config (port_id) udp_tunnel_port add|rm vxlan|geneve (udp_port)\n\n" " Add/remove UDP tunnel port for tunneling offload\n\n" + + "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" + " 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" + " Enable or disable a per queue Rx offloading" + " only on a specific Rx queue\n\n" + + "port config (port_id) tx_offload vlan_insert|" + "ipv4_cksum|udp_cksum|tcp_cksum|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\n" + " Enable or disable a per port Tx offloading" + " on all Tx queues of a port\n\n" + + "port (port_id) txq (queue_id) tx_offload vlan_insert|" + "ipv4_cksum|udp_cksum|tcp_cksum|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\n" + " Enable or disable a per queue Tx offloading" + " only on a specific Tx queue\n\n" + + "bpf-load rx|tx (port) (queue) (J|M|B) (file_name)\n" + " Load an eBPF program as a callback" + " for particular RX/TX queue\n\n" + + "bpf-unload rx|tx (port) (queue)\n" + " Unload previously loaded eBPF program" + " for particular RX/TX queue\n\n" + + "port config (port_id) tx_metadata (value)\n" + " Set Tx metadata value per port. Testpmd will add this value" + " to any Tx packet sent from this port\n\n" + + "port config (port_id) dynf (name) set|clear\n" + " Register a dynf and Set/clear this flag on Tx. " + "Testpmd will set this value to any Tx packet " + "sent from this port\n\n" ); } @@ -1082,7 +1065,7 @@ static void cmd_help_long_parsed(void *parsed_result, "get_hash_global_config (port_id)\n" " Get the global configurations of hash filters.\n\n" - "set_hash_global_config (port_id) (toeplitz|simple_xor|default)" + "set_hash_global_config (port_id) (toeplitz|simple_xor|symmetric_toeplitz|default)" " (ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|" "ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload)" " (enable|disable)\n" @@ -1141,8 +1124,154 @@ static void cmd_help_long_parsed(void *parsed_result, "flow isolate {port_id} {boolean}\n" " Restrict ingress traffic to the defined" " flow rules\n\n" + + "set vxlan ip-version (ipv4|ipv6) vni (vni) udp-src" + " (udp-src) udp-dst (udp-dst) ip-src (ip-src) ip-dst" + " (ip-dst) eth-src (eth-src) eth-dst (eth-dst)\n" + " Configure the VXLAN encapsulation for flows.\n\n" + + "set vxlan-with-vlan ip-version (ipv4|ipv6) vni (vni)" + " udp-src (udp-src) udp-dst (udp-dst) ip-src (ip-src)" + " ip-dst (ip-dst) vlan-tci (vlan-tci) eth-src (eth-src)" + " eth-dst (eth-dst)\n" + " Configure the VXLAN encapsulation for flows.\n\n" + + "set vxlan-tos-ttl ip-version (ipv4|ipv6) vni (vni) udp-src" + " (udp-src) udp-dst (udp-dst) ip-tos (ip-tos) ip-ttl (ip-ttl)" + " ip-src (ip-src) ip-dst (ip-dst) eth-src (eth-src)" + " eth-dst (eth-dst)\n" + " Configure the VXLAN encapsulation for flows.\n\n" + + "set nvgre ip-version (ipv4|ipv6) tni (tni) ip-src" + " (ip-src) ip-dst (ip-dst) eth-src (eth-src) eth-dst" + " (eth-dst)\n" + " Configure the NVGRE encapsulation for flows.\n\n" + + "set nvgre-with-vlan ip-version (ipv4|ipv6) tni (tni)" + " ip-src (ip-src) ip-dst (ip-dst) vlan-tci (vlan-tci)" + " eth-src (eth-src) eth-dst (eth-dst)\n" + " Configure the NVGRE encapsulation for flows.\n\n" + + "set raw_encap {flow items}\n" + " Configure the encapsulation with raw data.\n\n" + + "set raw_decap {flow items}\n" + " Configure the decapsulation with raw data.\n\n" + ); } + + if (show_all || !strcmp(res->section, "traffic_management")) { + cmdline_printf( + cl, + "\n" + "Traffic Management:\n" + "--------------\n" + "show port tm cap (port_id)\n" + " Display the port TM capability.\n\n" + + "show port tm level cap (port_id) (level_id)\n" + " Display the port TM hierarchical level capability.\n\n" + + "show port tm node cap (port_id) (node_id)\n" + " Display the port TM node capability.\n\n" + + "show port tm node type (port_id) (node_id)\n" + " Display the port TM node type.\n\n" + + "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" + " Add port tm node private shaper profile.\n\n" + + "del port tm node shaper profile (port_id) (shaper_profile_id)\n" + " Delete port tm node private shaper profile.\n\n" + + "add port tm node shared shaper (port_id) (shared_shaper_id)" + " (shaper_profile_id)\n" + " Add/update port tm node shared shaper.\n\n" + + "del port tm node shared shaper (port_id) (shared_shaper_id)\n" + " Delete port tm node shared shaper.\n\n" + + "set port tm node shaper profile (port_id) (node_id)" + " (shaper_profile_id)\n" + " Set port tm node shaper profile.\n\n" + + "add port tm node wred profile (port_id) (wred_profile_id)" + " (color_g) (min_th_g) (max_th_g) (maxp_inv_g) (wq_log2_g)" + " (color_y) (min_th_y) (max_th_y) (maxp_inv_y) (wq_log2_y)" + " (color_r) (min_th_r) (max_th_r) (maxp_inv_r) (wq_log2_r)\n" + " Add port tm node wred profile.\n\n" + + "del port tm node wred profile (port_id) (wred_profile_id)\n" + " Delete port tm node wred profile.\n\n" + + "add port tm nonleaf node (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.\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)" + " [(shared_shaper_id_0) (shared_shaper_id_1)...]\n" + " Add port tm leaf node.\n\n" + + "del port tm node (port_id) (node_id)\n" + " Delete port tm node.\n\n" + + "set port tm node parent (port_id) (node_id) (parent_node_id)" + " (priority) (weight)\n" + " Set port tm node parent.\n\n" + + "suspend port tm node (port_id) (node_id)" + " Suspend tm node.\n\n" + + "resume port tm node (port_id) (node_id)" + " Resume tm node.\n\n" + + "port tm hierarchy commit (port_id) (clean_on_fail)\n" + " Commit tm hierarchy.\n\n" + + "set port tm mark ip_ecn (port) (green) (yellow)" + " (red)\n" + " Enables/Disables the traffic management marking" + " for IP ECN (Explicit Congestion Notification)" + " packets on a given port\n\n" + + "set port tm mark ip_dscp (port) (green) (yellow)" + " (red)\n" + " Enables/Disables the traffic management marking" + " on the port for IP dscp packets\n\n" + + "set port tm mark vlan_dei (port) (green) (yellow)" + " (red)\n" + " Enables/Disables the traffic management marking" + " on the port for VLAN packets with DEI enabled\n\n" + ); + } + + if (show_all || !strcmp(res->section, "devices")) { + cmdline_printf( + cl, + "\n" + "Device Operations:\n" + "--------------\n" + "device detach (identifier)\n" + " Detach device by identifier.\n\n" + ); + } + } cmdline_parse_token_string_t cmd_help_long_help = @@ -1151,12 +1280,13 @@ cmdline_parse_token_string_t cmd_help_long_help = cmdline_parse_token_string_t cmd_help_long_section = TOKEN_STRING_INITIALIZER(struct cmd_help_long_result, section, "all#control#display#config#" - "ports#registers#filters"); + "ports#registers#filters#traffic_management#devices"); cmdline_parse_inst_t cmd_help_long = { .f = cmd_help_long_parsed, .data = NULL, - .help_str = "help all|control|display|config|ports|register|filters: " + .help_str = "help all|control|display|config|ports|register|" + "filters|traffic_management|devices: " "Show help", .tokens = { (void *)&cmd_help_long_help, @@ -1174,8 +1304,8 @@ struct cmd_operate_port_result { }; static void cmd_operate_port_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_operate_port_result *res = parsed_result; @@ -1220,8 +1350,8 @@ struct cmd_operate_specific_port_result { }; static void cmd_operate_specific_port_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_operate_specific_port_result *res = parsed_result; @@ -1269,8 +1399,8 @@ struct cmd_set_port_setup_on_result { }; static void cmd_set_port_setup_on_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_port_setup_on_result *res = parsed_result; @@ -1316,12 +1446,12 @@ cmdline_parse_inst_t cmd_set_port_setup_on = { struct cmd_operate_attach_port_result { cmdline_fixed_string_t port; cmdline_fixed_string_t keyword; - cmdline_fixed_string_t identifier; + cmdline_multi_string_t identifier; }; static void cmd_operate_attach_port_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_operate_attach_port_result *res = parsed_result; @@ -1339,7 +1469,7 @@ cmdline_parse_token_string_t cmd_operate_attach_port_keyword = keyword, "attach"); cmdline_parse_token_string_t cmd_operate_attach_port_identifier = TOKEN_STRING_INITIALIZER(struct cmd_operate_attach_port_result, - identifier, NULL); + identifier, TOKEN_STRING_MULTI); cmdline_parse_inst_t cmd_operate_attach_port = { .f = cmd_operate_attach_port_parsed, @@ -1362,15 +1492,17 @@ struct cmd_operate_detach_port_result { }; static void cmd_operate_detach_port_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_operate_detach_port_result *res = parsed_result; - if (!strcmp(res->keyword, "detach")) + if (!strcmp(res->keyword, "detach")) { + RTE_ETH_VALID_PORTID_OR_RET(res->port_id); detach_port_device(res->port_id); - else + } else { printf("Unknown parameter\n"); + } } cmdline_parse_token_string_t cmd_operate_detach_port_port = @@ -1395,6 +1527,47 @@ cmdline_parse_inst_t cmd_operate_detach_port = { }, }; +/* *** detach device by identifier *** */ +struct cmd_operate_detach_device_result { + cmdline_fixed_string_t device; + cmdline_fixed_string_t keyword; + cmdline_fixed_string_t identifier; +}; + +static void cmd_operate_detach_device_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ + struct cmd_operate_detach_device_result *res = parsed_result; + + if (!strcmp(res->keyword, "detach")) + detach_devargs(res->identifier); + else + printf("Unknown parameter\n"); +} + +cmdline_parse_token_string_t cmd_operate_detach_device_device = + TOKEN_STRING_INITIALIZER(struct cmd_operate_detach_device_result, + device, "device"); +cmdline_parse_token_string_t cmd_operate_detach_device_keyword = + TOKEN_STRING_INITIALIZER(struct cmd_operate_detach_device_result, + keyword, "detach"); +cmdline_parse_token_string_t cmd_operate_detach_device_identifier = + TOKEN_STRING_INITIALIZER(struct cmd_operate_detach_device_result, + identifier, NULL); + +cmdline_parse_inst_t cmd_operate_detach_device = { + .f = cmd_operate_detach_device_parsed, + .data = NULL, + .help_str = "device detach :" + "(identifier: pci address or virtual dev name)", + .tokens = { + (void *)&cmd_operate_detach_device_device, + (void *)&cmd_operate_detach_device_keyword, + (void *)&cmd_operate_detach_device_identifier, + NULL, + }, +}; /* *** configure speed for all ports *** */ struct cmd_config_speed_all { cmdline_fixed_string_t port; @@ -1459,8 +1632,8 @@ parse_and_check_speed_duplex(char *speedstr, char *duplexstr, uint32_t *speed) static void cmd_config_speed_all_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_speed_all *res = parsed_result; uint32_t link_speed; @@ -1531,8 +1704,8 @@ struct cmd_config_speed_specific { static void cmd_config_speed_specific_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_speed_specific *res = parsed_result; uint32_t link_speed; @@ -1605,8 +1778,8 @@ struct cmd_config_loopback_all { static void cmd_config_loopback_all_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_loopback_all *res = parsed_result; portid_t pid; @@ -1661,8 +1834,8 @@ struct cmd_config_loopback_specific { static void cmd_config_loopback_specific_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_loopback_specific *res = parsed_result; @@ -1721,8 +1894,8 @@ struct cmd_config_rx_tx { static void cmd_config_rx_tx_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_rx_tx *res = parsed_result; @@ -1811,8 +1984,8 @@ struct cmd_config_max_pkt_len_result { static void cmd_config_max_pkt_len_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_max_pkt_len_result *res = parsed_result; portid_t pid; @@ -1827,16 +2000,16 @@ cmd_config_max_pkt_len_parsed(void *parsed_result, uint64_t rx_offloads = port->dev_conf.rxmode.offloads; if (!strcmp(res->name, "max-pkt-len")) { - if (res->value < ETHER_MIN_LEN) { + if (res->value < RTE_ETHER_MIN_LEN) { printf("max-pkt-len can not be less than %d\n", - ETHER_MIN_LEN); + RTE_ETHER_MIN_LEN); return; } if (res->value == port->dev_conf.rxmode.max_rx_pkt_len) return; port->dev_conf.rxmode.max_rx_pkt_len = res->value; - if (res->value > ETHER_MAX_LEN) + if (res->value > RTE_ETHER_MAX_LEN) rx_offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME; else rx_offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME; @@ -1882,6 +2055,78 @@ cmdline_parse_inst_t cmd_config_max_pkt_len = { }, }; +/* *** config max LRO aggregated packet size *** */ +struct cmd_config_max_lro_pkt_size_result { + cmdline_fixed_string_t port; + cmdline_fixed_string_t keyword; + cmdline_fixed_string_t all; + cmdline_fixed_string_t name; + uint32_t value; +}; + +static void +cmd_config_max_lro_pkt_size_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ + struct cmd_config_max_lro_pkt_size_result *res = parsed_result; + portid_t pid; + + if (!all_ports_stopped()) { + printf("Please stop all ports first\n"); + return; + } + + RTE_ETH_FOREACH_DEV(pid) { + struct rte_port *port = &ports[pid]; + + if (!strcmp(res->name, "max-lro-pkt-size")) { + if (res->value == + port->dev_conf.rxmode.max_lro_pkt_size) + return; + + port->dev_conf.rxmode.max_lro_pkt_size = res->value; + } else { + printf("Unknown parameter\n"); + return; + } + } + + init_port_config(); + + cmd_reconfig_device_queue(RTE_PORT_ALL, 1, 1); +} + +cmdline_parse_token_string_t cmd_config_max_lro_pkt_size_port = + TOKEN_STRING_INITIALIZER(struct cmd_config_max_lro_pkt_size_result, + port, "port"); +cmdline_parse_token_string_t cmd_config_max_lro_pkt_size_keyword = + TOKEN_STRING_INITIALIZER(struct cmd_config_max_lro_pkt_size_result, + keyword, "config"); +cmdline_parse_token_string_t cmd_config_max_lro_pkt_size_all = + TOKEN_STRING_INITIALIZER(struct cmd_config_max_lro_pkt_size_result, + all, "all"); +cmdline_parse_token_string_t cmd_config_max_lro_pkt_size_name = + TOKEN_STRING_INITIALIZER(struct cmd_config_max_lro_pkt_size_result, + name, "max-lro-pkt-size"); +cmdline_parse_token_num_t cmd_config_max_lro_pkt_size_value = + TOKEN_NUM_INITIALIZER(struct cmd_config_max_lro_pkt_size_result, + value, UINT32); + +cmdline_parse_inst_t cmd_config_max_lro_pkt_size = { + .f = cmd_config_max_lro_pkt_size_parsed, + .data = NULL, + .help_str = "port config all max-lro-pkt-size ", + .tokens = { + (void *)&cmd_config_max_lro_pkt_size_port, + (void *)&cmd_config_max_lro_pkt_size_keyword, + (void *)&cmd_config_max_lro_pkt_size_all, + (void *)&cmd_config_max_lro_pkt_size_name, + (void *)&cmd_config_max_lro_pkt_size_value, + NULL, + }, +}; + /* *** configure port MTU *** */ struct cmd_config_mtu_result { cmdline_fixed_string_t port; @@ -1893,13 +2138,13 @@ struct cmd_config_mtu_result { static void cmd_config_mtu_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_mtu_result *res = parsed_result; - if (res->value < ETHER_MIN_LEN) { - printf("mtu cannot be less than %d\n", ETHER_MIN_LEN); + if (res->value < RTE_ETHER_MIN_LEN) { + printf("mtu cannot be less than %d\n", RTE_ETHER_MIN_LEN); return; } port_mtu_set(res->port_id, res->value); @@ -1944,111 +2189,28 @@ struct cmd_config_rx_mode_flag { static void cmd_config_rx_mode_flag_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_rx_mode_flag *res = parsed_result; - portid_t pid; if (!all_ports_stopped()) { printf("Please stop all ports first\n"); return; } - RTE_ETH_FOREACH_DEV(pid) { - struct rte_port *port; - uint64_t rx_offloads; - - port = &ports[pid]; - rx_offloads = port->dev_conf.rxmode.offloads; - if (!strcmp(res->name, "crc-strip")) { - if (!strcmp(res->value, "on")) { - rx_offloads &= ~DEV_RX_OFFLOAD_KEEP_CRC; - } else if (!strcmp(res->value, "off")) { - rx_offloads |= DEV_RX_OFFLOAD_KEEP_CRC; - } else { - printf("Unknown parameter\n"); - return; - } - } else if (!strcmp(res->name, "scatter")) { - if (!strcmp(res->value, "on")) { - rx_offloads |= DEV_RX_OFFLOAD_SCATTER; - } else if (!strcmp(res->value, "off")) { - rx_offloads &= ~DEV_RX_OFFLOAD_SCATTER; - } else { - printf("Unknown parameter\n"); - return; - } - } else if (!strcmp(res->name, "rx-cksum")) { - if (!strcmp(res->value, "on")) - rx_offloads |= DEV_RX_OFFLOAD_CHECKSUM; - else if (!strcmp(res->value, "off")) - rx_offloads &= ~DEV_RX_OFFLOAD_CHECKSUM; - else { - printf("Unknown parameter\n"); - return; - } - } else if (!strcmp(res->name, "rx-timestamp")) { - if (!strcmp(res->value, "on")) - rx_offloads |= DEV_RX_OFFLOAD_TIMESTAMP; - else if (!strcmp(res->value, "off")) - rx_offloads &= ~DEV_RX_OFFLOAD_TIMESTAMP; - else { - printf("Unknown parameter\n"); - return; - } - } else if (!strcmp(res->name, "hw-vlan")) { - if (!strcmp(res->value, "on")) { - rx_offloads |= (DEV_RX_OFFLOAD_VLAN_FILTER | - DEV_RX_OFFLOAD_VLAN_STRIP); - } else if (!strcmp(res->value, "off")) { - rx_offloads &= ~(DEV_RX_OFFLOAD_VLAN_FILTER | - DEV_RX_OFFLOAD_VLAN_STRIP); - } else { - printf("Unknown parameter\n"); - return; - } - } else if (!strcmp(res->name, "hw-vlan-filter")) { - if (!strcmp(res->value, "on")) - rx_offloads |= DEV_RX_OFFLOAD_VLAN_FILTER; - else if (!strcmp(res->value, "off")) - rx_offloads &= ~DEV_RX_OFFLOAD_VLAN_FILTER; - else { - printf("Unknown parameter\n"); - return; - } - } else if (!strcmp(res->name, "hw-vlan-strip")) { - if (!strcmp(res->value, "on")) - rx_offloads |= DEV_RX_OFFLOAD_VLAN_STRIP; - else if (!strcmp(res->value, "off")) - rx_offloads &= ~DEV_RX_OFFLOAD_VLAN_STRIP; - else { - printf("Unknown parameter\n"); - return; - } - } else if (!strcmp(res->name, "hw-vlan-extend")) { - if (!strcmp(res->value, "on")) - rx_offloads |= DEV_RX_OFFLOAD_VLAN_EXTEND; - else if (!strcmp(res->value, "off")) - rx_offloads &= ~DEV_RX_OFFLOAD_VLAN_EXTEND; - else { - printf("Unknown parameter\n"); - return; - } - } else if (!strcmp(res->name, "drop-en")) { - if (!strcmp(res->value, "on")) - rx_drop_en = 1; - else if (!strcmp(res->value, "off")) - rx_drop_en = 0; - else { - printf("Unknown parameter\n"); - return; - } - } else { + if (!strcmp(res->name, "drop-en")) { + if (!strcmp(res->value, "on")) + rx_drop_en = 1; + else if (!strcmp(res->value, "off")) + rx_drop_en = 0; + else { printf("Unknown parameter\n"); return; } - port->dev_conf.rxmode.offloads = rx_offloads; + } else { + printf("Unknown parameter\n"); + return; } init_port_config(); @@ -2065,8 +2227,7 @@ cmdline_parse_token_string_t cmd_config_rx_mode_flag_all = TOKEN_STRING_INITIALIZER(struct cmd_config_rx_mode_flag, all, "all"); cmdline_parse_token_string_t cmd_config_rx_mode_flag_name = TOKEN_STRING_INITIALIZER(struct cmd_config_rx_mode_flag, name, - "crc-strip#scatter#rx-cksum#rx-timestamp#hw-vlan#" - "hw-vlan-filter#hw-vlan-strip#hw-vlan-extend"); + "drop-en"); cmdline_parse_token_string_t cmd_config_rx_mode_flag_value = TOKEN_STRING_INITIALIZER(struct cmd_config_rx_mode_flag, value, "on#off"); @@ -2074,8 +2235,7 @@ cmdline_parse_token_string_t cmd_config_rx_mode_flag_value = cmdline_parse_inst_t cmd_config_rx_mode_flag = { .f = cmd_config_rx_mode_flag_parsed, .data = NULL, - .help_str = "port config all crc-strip|scatter|rx-cksum|rx-timestamp|hw-vlan|" - "hw-vlan-filter|hw-vlan-strip|hw-vlan-extend on|off", + .help_str = "port config all drop-en on|off", .tokens = { (void *)&cmd_config_rx_mode_flag_port, (void *)&cmd_config_rx_mode_flag_keyword, @@ -2097,8 +2257,8 @@ struct cmd_config_rss { static void cmd_config_rss_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_rss *res = parsed_result; struct rte_eth_rss_conf rss_conf = { .rss_key_len = 0, }; @@ -2107,6 +2267,7 @@ cmd_config_rss_parsed(void *parsed_result, int all_updated = 1; int diag; uint16_t i; + int ret; if (!strcmp(res->value, "all")) rss_conf.rss_hf = ETH_RSS_IP | ETH_RSS_TCP | @@ -2130,6 +2291,14 @@ 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-src-only")) + rss_conf.rss_hf = ETH_RSS_L3_SRC_ONLY; + else if (!strcmp(res->value, "l3-dst-only")) + rss_conf.rss_hf = ETH_RSS_L3_DST_ONLY; + else if (!strcmp(res->value, "l4-src-only")) + rss_conf.rss_hf = ETH_RSS_L4_SRC_ONLY; + else if (!strcmp(res->value, "l4-dst-only")) + rss_conf.rss_hf = ETH_RSS_L4_DST_ONLY; else if (!strcmp(res->value, "none")) rss_conf.rss_hf = 0; else if (!strcmp(res->value, "default")) @@ -2146,7 +2315,10 @@ cmd_config_rss_parsed(void *parsed_result, RTE_ETH_FOREACH_DEV(i) { struct rte_eth_rss_conf local_rss_conf; - rte_eth_dev_info_get(i, &dev_info); + ret = eth_dev_info_get_print_err(i, &dev_info); + if (ret != 0) + return; + if (use_default) rss_conf.rss_hf = dev_info.flow_type_rss_offloads; @@ -2185,7 +2357,7 @@ cmdline_parse_inst_t cmd_config_rss = { .f = cmd_config_rss_parsed, .data = NULL, .help_str = "port config all rss " - "all|default|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|none|", + "all|default|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|vxlan-gpe|none|", .tokens = { (void *)&cmd_config_rss_port, (void *)&cmd_config_rss_keyword, @@ -2233,8 +2405,8 @@ parse_and_check_key_hexa_digit(char *key, int idx) static void cmd_config_rss_hash_key_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_rss_hash_key *res = parsed_result; uint8_t hash_key[RSS_HASH_KEY_LENGTH]; @@ -2244,9 +2416,12 @@ cmd_config_rss_hash_key_parsed(void *parsed_result, struct rte_eth_dev_info dev_info; uint8_t hash_key_size; uint32_t key_len; + int ret; + + ret = eth_dev_info_get_print_err(res->port_id, &dev_info); + if (ret != 0) + return; - memset(&dev_info, 0, sizeof(dev_info)); - rte_eth_dev_info_get(res->port_id, &dev_info); if (dev_info.hash_key_size > 0 && dev_info.hash_key_size <= sizeof(hash_key)) hash_key_size = dev_info.hash_key_size; @@ -2291,7 +2466,8 @@ cmdline_parse_token_string_t cmd_config_rss_hash_key_rss_type = "ipv4#ipv4-frag#ipv4-tcp#ipv4-udp#ipv4-sctp#" "ipv4-other#ipv6#ipv6-frag#ipv6-tcp#ipv6-udp#" "ipv6-sctp#ipv6-other#l2-payload#ipv6-ex#" - "ipv6-tcp-ex#ipv6-udp-ex"); + "ipv6-tcp-ex#ipv6-udp-ex#" + "l3-src-only#l3-dst-only#l4-src-only#l4-dst-only"); cmdline_parse_token_string_t cmd_config_rss_hash_key_value = TOKEN_STRING_INITIALIZER(struct cmd_config_rss_hash_key, key, NULL); @@ -2301,7 +2477,8 @@ cmdline_parse_inst_t cmd_config_rss_hash_key = { .help_str = "port config rss-hash-key " "ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|" "ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|" - "l2-payload|ipv6-ex|ipv6-tcp-ex|ipv6-udp-ex " + "l2-payload|ipv6-ex|ipv6-tcp-ex|ipv6-udp-ex|" + "l3-src-only|l3-dst-only|l4-src-only|l4-dst-only " "", .tokens = { (void *)&cmd_config_rss_hash_key_port, @@ -2327,8 +2504,8 @@ struct cmd_config_rxtx_ring_size { static void cmd_config_rxtx_ring_size_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_rxtx_ring_size *res = parsed_result; struct rte_port *port; @@ -2421,8 +2598,8 @@ struct cmd_config_rxtx_queue { static void cmd_config_rxtx_queue_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_rxtx_queue *res = parsed_result; uint8_t isrx; @@ -2516,8 +2693,8 @@ struct cmd_config_deferred_start_rxtx_queue { static void cmd_config_deferred_start_rxtx_queue_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_deferred_start_rxtx_queue *res = parsed_result; struct rte_port *port; @@ -2614,8 +2791,8 @@ cmdline_parse_token_string_t cmd_setup_rxtx_queue_setup = static void cmd_setup_rxtx_queue_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_setup_rxtx_queue *res = parsed_result; struct rte_port *port; @@ -2770,16 +2947,18 @@ parse_reta_config(const char *str, static void cmd_set_rss_reta_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { int ret; struct rte_eth_dev_info dev_info; struct rte_eth_rss_reta_entry64 reta_conf[8]; struct cmd_config_rss_reta *res = parsed_result; - memset(&dev_info, 0, sizeof(dev_info)); - rte_eth_dev_info_get(res->port_id, &dev_info); + ret = eth_dev_info_get_print_err(res->port_id, &dev_info); + if (ret != 0) + return; + if (dev_info.reta_size == 0) { printf("Redirection table size is 0 which is " "invalid for RSS\n"); @@ -2890,16 +3069,19 @@ showport_parse_reta_config(struct rte_eth_rss_reta_entry64 *conf, static void cmd_showport_reta_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_showport_reta *res = parsed_result; struct rte_eth_rss_reta_entry64 reta_conf[8]; struct rte_eth_dev_info dev_info; uint16_t max_reta_size; + int ret; + + ret = eth_dev_info_get_print_err(res->port_id, &dev_info); + if (ret != 0) + return; - memset(&dev_info, 0, sizeof(dev_info)); - rte_eth_dev_info_get(res->port_id, &dev_info); max_reta_size = RTE_MIN(dev_info.reta_size, ETH_RSS_RETA_SIZE_512); if (res->size == 0 || res->size > max_reta_size) { printf("Invalid redirection table size: %u (1-%u)\n", @@ -2960,7 +3142,7 @@ struct cmd_showport_rss_hash { }; static void cmd_showport_rss_hash_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, + __rte_unused struct cmdline *cl, void *show_rss_key) { struct cmd_showport_rss_hash *res = parsed_result; @@ -3022,8 +3204,8 @@ struct cmd_config_dcb { static void cmd_config_dcb_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_dcb *res = parsed_result; portid_t port_id = res->port_id; @@ -3120,12 +3302,13 @@ struct cmd_config_burst { static void cmd_config_burst_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_burst *res = parsed_result; struct rte_eth_dev_info dev_info; uint16_t rec_nb_pkts; + int ret; if (!all_ports_stopped()) { printf("Please stop all ports first\n"); @@ -3139,7 +3322,10 @@ cmd_config_burst_parsed(void *parsed_result, * size for all ports, so assume all ports are the same * NIC model and use the values from Port 0. */ - rte_eth_dev_info_get(0, &dev_info); + ret = eth_dev_info_get_print_err(0, &dev_info); + if (ret != 0) + return; + rec_nb_pkts = dev_info.default_rxportconf.burst_size; if (rec_nb_pkts == 0) { @@ -3207,8 +3393,8 @@ struct cmd_config_thresh { static void cmd_config_thresh_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_thresh *res = parsed_result; @@ -3276,8 +3462,8 @@ struct cmd_config_threshold { static void cmd_config_threshold_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_threshold *res = parsed_result; @@ -3334,9 +3520,9 @@ struct cmd_stop_result { cmdline_fixed_string_t stop; }; -static void cmd_stop_parsed(__attribute__((unused)) void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) +static void cmd_stop_parsed(__rte_unused void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) { stop_packet_forwarding(); } @@ -3427,8 +3613,8 @@ struct cmd_set_list_result { }; static void cmd_set_list_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_list_result *res; union { @@ -3495,8 +3681,8 @@ struct cmd_setmask_result { }; static void cmd_set_mask_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_setmask_result *res = parsed_result; @@ -3543,8 +3729,8 @@ struct cmd_set_result { }; static void cmd_set_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_result *res = parsed_result; if (!strcmp(res->what, "nbport")) { @@ -3590,8 +3776,8 @@ struct cmd_set_log_result { static void cmd_set_log_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_log_result *res; int ret; @@ -3638,8 +3824,8 @@ struct cmd_set_txpkts_result { static void cmd_set_txpkts_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_txpkts_result *res; unsigned seg_lengths[RTE_MAX_SEGS_PER_PKT]; @@ -3684,8 +3870,8 @@ struct cmd_set_txsplit_result { static void cmd_set_txsplit_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_txsplit_result *res; @@ -3725,8 +3911,8 @@ struct cmd_rx_vlan_filter_all_result { static void cmd_rx_vlan_filter_all_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_rx_vlan_filter_all_result *res = parsed_result; @@ -3776,8 +3962,8 @@ struct cmd_vlan_offload_result { static void cmd_vlan_offload_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { int on; struct cmd_vlan_offload_result *res = parsed_result; @@ -3828,6 +4014,8 @@ cmd_vlan_offload_parsed(void *parsed_result, } else if (!strcmp(res->what, "filter")) rx_vlan_filter_set(port_id, on); + else if (!strcmp(res->what, "qinq_strip")) + rx_vlan_qinq_strip_set(port_id, on); else vlan_extend_set(port_id, on); @@ -3842,7 +4030,7 @@ cmdline_parse_token_string_t cmd_vlan_offload_set = set, "set"); cmdline_parse_token_string_t cmd_vlan_offload_what = TOKEN_STRING_INITIALIZER(struct cmd_vlan_offload_result, - what, "strip#filter#qinq#stripq"); + what, "strip#filter#qinq_strip#extend#stripq"); cmdline_parse_token_string_t cmd_vlan_offload_on = TOKEN_STRING_INITIALIZER(struct cmd_vlan_offload_result, on, "on#off"); @@ -3853,9 +4041,9 @@ cmdline_parse_token_string_t cmd_vlan_offload_portid = cmdline_parse_inst_t cmd_vlan_offload = { .f = cmd_vlan_offload_parsed, .data = NULL, - .help_str = "vlan set strip|filter|qinq|stripq on|off " + .help_str = "vlan set strip|filter|qinq_strip|extend|stripq on|off " ": " - "Filter/Strip for rx side qinq(extended) for both rx/tx sides", + "Strip/Filter/QinQ for rx side Extend for both rx/tx sides", .tokens = { (void *)&cmd_vlan_offload_vlan, (void *)&cmd_vlan_offload_set, @@ -3878,8 +4066,8 @@ struct cmd_vlan_tpid_result { static void cmd_vlan_tpid_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_vlan_tpid_result *res = parsed_result; enum rte_vlan_type vlan_type; @@ -3940,8 +4128,8 @@ struct cmd_rx_vlan_filter_result { static void cmd_rx_vlan_filter_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_rx_vlan_filter_result *res = parsed_result; @@ -3989,8 +4177,8 @@ struct cmd_tx_vlan_set_result { static void cmd_tx_vlan_set_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_tx_vlan_set_result *res = parsed_result; @@ -4043,8 +4231,8 @@ struct cmd_tx_vlan_set_qinq_result { static void cmd_tx_vlan_set_qinq_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_tx_vlan_set_qinq_result *res = parsed_result; @@ -4102,8 +4290,8 @@ struct cmd_tx_vlan_set_pvid_result { static void cmd_tx_vlan_set_pvid_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_tx_vlan_set_pvid_result *res = parsed_result; @@ -4156,8 +4344,8 @@ struct cmd_tx_vlan_reset_result { static void cmd_tx_vlan_reset_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_tx_vlan_reset_result *res = parsed_result; @@ -4209,6 +4397,7 @@ csum_show(int port_id) { struct rte_eth_dev_info dev_info; uint64_t tx_offloads; + int ret; tx_offloads = ports[port_id].dev_conf.txmode.offloads; printf("Parse tunnel is %s\n", @@ -4227,7 +4416,10 @@ csum_show(int port_id) (tx_offloads & DEV_TX_OFFLOAD_OUTER_UDP_CKSUM) ? "hw" : "sw"); /* display warnings if configuration is not supported by the NIC */ - rte_eth_dev_info_get(port_id, &dev_info); + ret = eth_dev_info_get_print_err(port_id, &dev_info); + if (ret != 0) + return; + if ((tx_offloads & DEV_TX_OFFLOAD_IPV4_CKSUM) && (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_IPV4_CKSUM) == 0) { printf("Warning: hardware IP checksum enabled but not " @@ -4261,15 +4453,27 @@ csum_show(int port_id) } } +static void +cmd_config_queue_tx_offloads(struct rte_port *port) +{ + int k; + + /* Apply queue tx offloads configuration */ + for (k = 0; k < port->dev_info.max_rx_queues; k++) + port->tx_conf[k].offloads = + port->dev_conf.txmode.offloads; +} + static void cmd_csum_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_csum_result *res = parsed_result; int hw = 0; uint64_t csum_offloads = 0; struct rte_eth_dev_info dev_info; + int ret; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) { printf("invalid port %d\n", res->port_id); @@ -4280,7 +4484,10 @@ cmd_csum_parsed(void *parsed_result, return; } - rte_eth_dev_info_get(res->port_id, &dev_info); + ret = eth_dev_info_get_print_err(res->port_id, &dev_info); + if (ret != 0) + return; + if (!strcmp(res->mode, "set")) { if (!strcmp(res->hwsw, "hw")) @@ -4345,6 +4552,7 @@ cmd_csum_parsed(void *parsed_result, ports[res->port_id].dev_conf.txmode.offloads &= (~csum_offloads); } + cmd_config_queue_tx_offloads(&ports[res->port_id]); } csum_show(res->port_id); @@ -4409,8 +4617,8 @@ struct cmd_csum_tunnel_result { static void cmd_csum_tunnel_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_csum_tunnel_result *res = parsed_result; @@ -4462,11 +4670,12 @@ struct cmd_tso_set_result { static void cmd_tso_set_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_tso_set_result *res = parsed_result; struct rte_eth_dev_info dev_info; + int ret; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; @@ -4478,7 +4687,10 @@ cmd_tso_set_parsed(void *parsed_result, if (!strcmp(res->mode, "set")) ports[res->port_id].tso_segsz = res->tso_segsz; - rte_eth_dev_info_get(res->port_id, &dev_info); + ret = eth_dev_info_get_print_err(res->port_id, &dev_info); + if (ret != 0) + return; + if ((ports[res->port_id].tso_segsz != 0) && (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_TCP_TSO) == 0) { printf("Error: TSO is not supported by port %d\n", @@ -4496,9 +4708,13 @@ cmd_tso_set_parsed(void *parsed_result, printf("TSO segment size for non-tunneled packets is %d\n", ports[res->port_id].tso_segsz); } + cmd_config_queue_tx_offloads(&ports[res->port_id]); /* display warnings if configuration is not supported by the NIC */ - rte_eth_dev_info_get(res->port_id, &dev_info); + ret = eth_dev_info_get_print_err(res->port_id, &dev_info); + if (ret != 0) + return; + if ((ports[res->port_id].tso_segsz != 0) && (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_TCP_TSO) == 0) { printf("Warning: TSO enabled but not " @@ -4567,7 +4783,9 @@ check_tunnel_tso_nic_support(portid_t port_id) { struct rte_eth_dev_info dev_info; - rte_eth_dev_info_get(port_id, &dev_info); + if (eth_dev_info_get_print_err(port_id, &dev_info) != 0) + return dev_info; + if (!(dev_info.tx_offload_capa & DEV_TX_OFFLOAD_VXLAN_TNL_TSO)) printf("Warning: VXLAN TUNNEL TSO not supported therefore " "not enabled for port %d\n", port_id); @@ -4591,8 +4809,8 @@ check_tunnel_tso_nic_support(portid_t port_id) static void cmd_tunnel_tso_set_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_tunnel_tso_set_result *res = parsed_result; struct rte_eth_dev_info dev_info; @@ -4651,6 +4869,7 @@ cmd_tunnel_tso_set_parsed(void *parsed_result, "if outer L3 is IPv4; not necessary for IPv6\n"); } + cmd_config_queue_tx_offloads(&ports[res->port_id]); cmd_reconfig_device_queue(res->port_id, 1, 1); } @@ -4711,8 +4930,8 @@ struct cmd_gro_enable_result { static void cmd_gro_enable_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_gro_enable_result *res; @@ -4761,8 +4980,8 @@ struct cmd_gro_show_result { static void cmd_gro_show_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_gro_show_result *res; @@ -4807,8 +5026,8 @@ struct cmd_gro_flush_result { static void cmd_gro_flush_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_gro_flush_result *res; @@ -4855,8 +5074,8 @@ struct cmd_gso_enable_result { static void cmd_gso_enable_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_gso_enable_result *res; @@ -4905,8 +5124,8 @@ struct cmd_gso_size_result { static void cmd_gso_size_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_gso_size_result *res = parsed_result; @@ -4963,8 +5182,8 @@ struct cmd_gso_show_result { static void cmd_gso_show_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_gso_show_result *res = parsed_result; @@ -5020,8 +5239,8 @@ struct cmd_set_flush_rx { static void cmd_set_flush_rx_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_flush_rx *res = parsed_result; no_flush_rx = (uint8_t)((strcmp(res->mode, "on") == 0) ? 0 : 1); @@ -5059,8 +5278,8 @@ struct cmd_set_link_check { static void cmd_set_link_check_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_link_check *res = parsed_result; no_link_check = (uint8_t)((strcmp(res->mode, "on") == 0) ? 0 : 1); @@ -5101,8 +5320,8 @@ struct cmd_set_bypass_mode_result { static void cmd_set_bypass_mode_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_bypass_mode_result *res = parsed_result; portid_t port_id = res->port_id; @@ -5169,8 +5388,8 @@ struct cmd_set_bypass_event_result { static void cmd_set_bypass_event_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { int32_t rc = -EINVAL; struct cmd_set_bypass_event_result *res = parsed_result; @@ -5276,8 +5495,8 @@ struct cmd_set_bypass_timeout_result { static void cmd_set_bypass_timeout_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { __rte_unused struct cmd_set_bypass_timeout_result *res = parsed_result; @@ -5338,8 +5557,8 @@ struct cmd_show_bypass_config_result { static void cmd_show_bypass_config_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_show_bypass_config_result *res = parsed_result; portid_t port_id = res->port_id; @@ -5348,7 +5567,7 @@ cmd_show_bypass_config_parsed(void *parsed_result, uint32_t event_mode; uint32_t bypass_mode; uint32_t timeout = bypass_timeout; - int i; + unsigned int i; static const char * const timeouts[RTE_PMD_IXGBE_BYPASS_TMT_NUM] = {"off", "1.5", "2", "3", "4", "8", "16", "32"}; @@ -5361,7 +5580,6 @@ cmd_show_bypass_config_parsed(void *parsed_result, "OS/board off", "power supply off", "timeout"}; - int num_events = (sizeof events) / (sizeof events[0]); /* Display the bypass mode.*/ if (rte_pmd_ixgbe_bypass_state_show(port_id, &bypass_mode) != 0) { @@ -5382,7 +5600,7 @@ cmd_show_bypass_config_parsed(void *parsed_result, printf("\tbypass timeout = %s\n", timeouts[timeout]); /* Display the bypass events and associated modes. */ - for (i = RTE_PMD_IXGBE_BYPASS_EVENT_START; i < num_events; i++) { + for (i = RTE_PMD_IXGBE_BYPASS_EVENT_START; i < RTE_DIM(events); i++) { if (rte_pmd_ixgbe_bypass_event_show(port_id, i, &event_mode)) { printf("\tFailed to get bypass mode for event = %s\n", @@ -5439,8 +5657,8 @@ struct cmd_set_bonding_mode_result { }; static void cmd_set_bonding_mode_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_bonding_mode_result *res = parsed_result; portid_t port_id = res->port_id; @@ -5492,8 +5710,8 @@ struct cmd_set_bonding_lacp_dedicated_queues_result { }; static void cmd_set_bonding_lacp_dedicated_queues_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_bonding_lacp_dedicated_queues_result *res = parsed_result; portid_t port_id = res->port_id; @@ -5570,8 +5788,8 @@ struct cmd_set_bonding_balance_xmit_policy_result { }; static void cmd_set_bonding_balance_xmit_policy_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_bonding_balance_xmit_policy_result *res = parsed_result; portid_t port_id = res->port_id; @@ -5636,8 +5854,8 @@ struct cmd_show_bonding_config_result { }; static void cmd_show_bonding_config_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_show_bonding_config_result *res = parsed_result; int bonding_mode, agg_mode; @@ -5780,8 +5998,8 @@ struct cmd_set_bonding_primary_result { }; static void cmd_set_bonding_primary_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_bonding_primary_result *res = parsed_result; portid_t master_port_id = res->port_id; @@ -5837,8 +6055,8 @@ struct cmd_add_bonding_slave_result { }; static void cmd_add_bonding_slave_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_add_bonding_slave_result *res = parsed_result; portid_t master_port_id = res->port_id; @@ -5895,8 +6113,8 @@ struct cmd_remove_bonding_slave_result { }; static void cmd_remove_bonding_slave_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_remove_bonding_slave_result *res = parsed_result; portid_t master_port_id = res->port_id; @@ -5955,12 +6173,13 @@ struct cmd_create_bonded_device_result { static int bond_dev_num = 0; static void cmd_create_bonded_device_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_create_bonded_device_result *res = parsed_result; char ethdev_name[RTE_ETH_NAME_MAX_LEN]; int port_id; + int ret; if (test_done == 0) { printf("Please stop forwarding first\n"); @@ -5982,7 +6201,11 @@ static void cmd_create_bonded_device_parsed(void *parsed_result, /* Update number of ports */ nb_ports = rte_eth_dev_count_avail(); reconfig(port_id, res->socket); - rte_eth_promiscuous_enable(port_id); + ret = rte_eth_promiscuous_enable(port_id); + if (ret != 0) + printf("Failed to enable promiscuous mode for port %u: %s - ignore\n", + port_id, rte_strerror(-ret)); + ports[port_id].need_setup = 0; ports[port_id].port_status = RTE_PORT_STOPPED; } @@ -6026,12 +6249,12 @@ struct cmd_set_bond_mac_addr_result { cmdline_fixed_string_t bonding; cmdline_fixed_string_t mac_addr; uint16_t port_num; - struct ether_addr address; + struct rte_ether_addr address; }; static void cmd_set_bond_mac_addr_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_bond_mac_addr_result *res = parsed_result; int ret; @@ -6085,8 +6308,8 @@ struct cmd_set_bond_mon_period_result { }; static void cmd_set_bond_mon_period_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_bond_mon_period_result *res = parsed_result; int ret; @@ -6141,8 +6364,8 @@ struct cmd_set_bonding_agg_mode_policy_result { static void cmd_set_bonding_agg_mode(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_bonding_agg_mode_policy_result *res = parsed_result; uint8_t policy = AGG_BANDWIDTH; @@ -6203,8 +6426,8 @@ struct cmd_set_fwd_mode_result { }; static void cmd_set_fwd_mode_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_fwd_mode_result *res = parsed_result; @@ -6263,8 +6486,8 @@ struct cmd_set_fwd_retry_mode_result { }; static void cmd_set_fwd_retry_mode_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_fwd_retry_mode_result *res = parsed_result; @@ -6334,8 +6557,8 @@ struct cmd_set_burst_tx_retry_result { }; static void cmd_set_burst_tx_retry_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_burst_tx_retry_result *res = parsed_result; @@ -6390,7 +6613,7 @@ struct cmd_set_promisc_mode_result { }; static void cmd_set_promisc_mode_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, + __rte_unused struct cmdline *cl, void *allports) { struct cmd_set_promisc_mode_result *res = parsed_result; @@ -6404,18 +6627,10 @@ static void cmd_set_promisc_mode_parsed(void *parsed_result, /* all ports */ if (allports) { - RTE_ETH_FOREACH_DEV(i) { - if (enable) - rte_eth_promiscuous_enable(i); - else - rte_eth_promiscuous_disable(i); - } - } - else { - if (enable) - rte_eth_promiscuous_enable(res->port_num); - else - rte_eth_promiscuous_disable(res->port_num); + RTE_ETH_FOREACH_DEV(i) + eth_set_promisc_mode(i, enable); + } else { + eth_set_promisc_mode(res->port_num, enable); } } @@ -6470,7 +6685,7 @@ struct cmd_set_allmulti_mode_result { }; static void cmd_set_allmulti_mode_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, + __rte_unused struct cmdline *cl, void *allports) { struct cmd_set_allmulti_mode_result *res = parsed_result; @@ -6485,17 +6700,11 @@ static void cmd_set_allmulti_mode_parsed(void *parsed_result, /* all ports */ if (allports) { RTE_ETH_FOREACH_DEV(i) { - if (enable) - rte_eth_allmulticast_enable(i); - else - rte_eth_allmulticast_disable(i); + eth_set_allmulticast_mode(i, enable); } } else { - if (enable) - rte_eth_allmulticast_enable(res->port_num); - else - rte_eth_allmulticast_disable(res->port_num); + eth_set_allmulticast_mode(res->port_num, enable); } } @@ -6775,7 +6984,7 @@ cmdline_parse_inst_t cmd_link_flow_control_set_autoneg = { static void cmd_link_flow_ctrl_set_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, + __rte_unused struct cmdline *cl, void *data) { struct cmd_link_flow_ctrl_set_result *res = parsed_result; @@ -6864,8 +7073,8 @@ struct cmd_priority_flow_ctrl_set_result { static void cmd_priority_flow_ctrl_set_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_priority_flow_ctrl_set_result *res = parsed_result; struct rte_eth_pfc_conf pfc_conf; @@ -6879,9 +7088,10 @@ cmd_priority_flow_ctrl_set_parsed(void *parsed_result, * the RTE_FC_RX_PAUSE, Respond to the pause frame at the Tx side. */ static enum rte_eth_fc_mode rx_tx_onoff_2_pfc_mode[2][2] = { - {RTE_FC_NONE, RTE_FC_RX_PAUSE}, {RTE_FC_TX_PAUSE, RTE_FC_FULL} + {RTE_FC_NONE, RTE_FC_TX_PAUSE}, {RTE_FC_RX_PAUSE, RTE_FC_FULL} }; + memset(&pfc_conf, 0, sizeof(struct rte_eth_pfc_conf)); rx_fc_enable = (!strncmp(res->rx_pfc_mode, "on",2)) ? 1 : 0; tx_fc_enable = (!strncmp(res->tx_pfc_mode, "on",2)) ? 1 : 0; pfc_conf.fc.mode = rx_tx_onoff_2_pfc_mode[rx_fc_enable][tx_fc_enable]; @@ -6957,9 +7167,9 @@ struct cmd_reset_result { cmdline_fixed_string_t def; }; -static void cmd_reset_parsed(__attribute__((unused)) void *parsed_result, +static void cmd_reset_parsed(__rte_unused void *parsed_result, struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused void *data) { cmdline_printf(cl, "Reset to default forwarding configuration...\n"); set_def_fwd_config(); @@ -6990,9 +7200,9 @@ struct cmd_start_result { cmdline_parse_token_string_t cmd_start_start = TOKEN_STRING_INITIALIZER(struct cmd_start_result, start, "start"); -static void cmd_start_parsed(__attribute__((unused)) void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) +static void cmd_start_parsed(__rte_unused void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) { start_packet_forwarding(0); } @@ -7014,9 +7224,9 @@ struct cmd_start_tx_first_result { }; static void -cmd_start_tx_first_parsed(__attribute__((unused)) void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) +cmd_start_tx_first_parsed(__rte_unused void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) { start_packet_forwarding(1); } @@ -7049,8 +7259,8 @@ struct cmd_start_tx_first_n_result { static void cmd_start_tx_first_n_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_start_tx_first_n_result *res = parsed_result; @@ -7098,9 +7308,9 @@ cmdline_parse_token_string_t cmd_set_link_up_port = cmdline_parse_token_num_t cmd_set_link_up_port_id = TOKEN_NUM_INITIALIZER(struct cmd_set_link_up_result, port_id, UINT16); -static void cmd_set_link_up_parsed(__attribute__((unused)) void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) +static void cmd_set_link_up_parsed(__rte_unused void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_link_up_result *res = parsed_result; dev_set_link_up(res->port_id); @@ -7138,9 +7348,9 @@ cmdline_parse_token_num_t cmd_set_link_down_port_id = TOKEN_NUM_INITIALIZER(struct cmd_set_link_down_result, port_id, UINT16); static void cmd_set_link_down_parsed( - __attribute__((unused)) void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_link_down_result *res = parsed_result; dev_set_link_down(res->port_id); @@ -7167,8 +7377,8 @@ struct cmd_showcfg_result { }; static void cmd_showcfg_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_showcfg_result *res = parsed_result; if (!strcmp(res->what, "rxtx")) @@ -7210,8 +7420,8 @@ struct cmd_showportall_result { }; static void cmd_showportall_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { portid_t i; @@ -7284,8 +7494,8 @@ struct cmd_showport_result { }; static void cmd_showport_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_showport_result *res = parsed_result; if (!strcmp(res->show, "clear")) { @@ -7339,6 +7549,51 @@ cmdline_parse_inst_t cmd_showport = { }, }; +/* *** SHOW DEVICE INFO *** */ +struct cmd_showdevice_result { + cmdline_fixed_string_t show; + cmdline_fixed_string_t device; + cmdline_fixed_string_t what; + cmdline_fixed_string_t identifier; +}; + +static void cmd_showdevice_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ + struct cmd_showdevice_result *res = parsed_result; + if (!strcmp(res->what, "info")) { + if (!strcmp(res->identifier, "all")) + device_infos_display(NULL); + else + device_infos_display(res->identifier); + } +} + +cmdline_parse_token_string_t cmd_showdevice_show = + TOKEN_STRING_INITIALIZER(struct cmd_showdevice_result, show, + "show"); +cmdline_parse_token_string_t cmd_showdevice_device = + TOKEN_STRING_INITIALIZER(struct cmd_showdevice_result, device, "device"); +cmdline_parse_token_string_t cmd_showdevice_what = + TOKEN_STRING_INITIALIZER(struct cmd_showdevice_result, what, + "info"); +cmdline_parse_token_string_t cmd_showdevice_identifier = + TOKEN_STRING_INITIALIZER(struct cmd_showdevice_result, + identifier, NULL); + +cmdline_parse_inst_t cmd_showdevice = { + .f = cmd_showdevice_parsed, + .data = NULL, + .help_str = "show device info |all", + .tokens = { + (void *)&cmd_showdevice_show, + (void *)&cmd_showdevice_device, + (void *)&cmd_showdevice_what, + (void *)&cmd_showdevice_identifier, + NULL, + }, +}; /* *** SHOW QUEUE INFO *** */ struct cmd_showqueue_result { cmdline_fixed_string_t show; @@ -7350,8 +7605,8 @@ struct cmd_showqueue_result { static void cmd_showqueue_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_showqueue_result *res = parsed_result; @@ -7386,6 +7641,49 @@ cmdline_parse_inst_t cmd_showqueue = { }, }; +/* show/clear fwd engine statistics */ +struct fwd_result { + cmdline_fixed_string_t action; + cmdline_fixed_string_t fwd; + cmdline_fixed_string_t stats; + cmdline_fixed_string_t all; +}; + +cmdline_parse_token_string_t cmd_fwd_action = + TOKEN_STRING_INITIALIZER(struct fwd_result, action, "show#clear"); +cmdline_parse_token_string_t cmd_fwd_fwd = + TOKEN_STRING_INITIALIZER(struct fwd_result, fwd, "fwd"); +cmdline_parse_token_string_t cmd_fwd_stats = + TOKEN_STRING_INITIALIZER(struct fwd_result, stats, "stats"); +cmdline_parse_token_string_t cmd_fwd_all = + TOKEN_STRING_INITIALIZER(struct fwd_result, all, "all"); + +static void +cmd_showfwdall_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ + struct fwd_result *res = parsed_result; + + if (!strcmp(res->action, "show")) + fwd_stats_display(); + else + fwd_stats_reset(); +} + +static cmdline_parse_inst_t cmd_showfwdall = { + .f = cmd_showfwdall_parsed, + .data = NULL, + .help_str = "show|clear fwd stats all", + .tokens = { + (void *)&cmd_fwd_action, + (void *)&cmd_fwd_fwd, + (void *)&cmd_fwd_stats, + (void *)&cmd_fwd_all, + NULL, + }, +}; + /* *** READ PORT REGISTER *** */ struct cmd_read_reg_result { cmdline_fixed_string_t read; @@ -7396,8 +7694,8 @@ struct cmd_read_reg_result { static void cmd_read_reg_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_read_reg_result *res = parsed_result; port_reg_display(res->port_id, res->reg_off); @@ -7437,8 +7735,8 @@ struct cmd_read_reg_bit_field_result { static void cmd_read_reg_bit_field_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_read_reg_bit_field_result *res = parsed_result; port_reg_bit_field_display(res->port_id, res->reg_off, @@ -7491,8 +7789,8 @@ struct cmd_read_reg_bit_result { static void cmd_read_reg_bit_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_read_reg_bit_result *res = parsed_result; port_reg_bit_display(res->port_id, res->reg_off, res->bit_pos); @@ -7535,8 +7833,8 @@ struct cmd_write_reg_result { static void cmd_write_reg_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_write_reg_result *res = parsed_result; port_reg_set(res->port_id, res->reg_off, res->value); @@ -7580,8 +7878,8 @@ struct cmd_write_reg_bit_field_result { static void cmd_write_reg_bit_field_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_write_reg_bit_field_result *res = parsed_result; port_reg_bit_field_set(res->port_id, res->reg_off, @@ -7640,8 +7938,8 @@ struct cmd_write_reg_bit_result { static void cmd_write_reg_bit_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_write_reg_bit_result *res = parsed_result; port_reg_bit_set(res->port_id, res->reg_off, res->bit_pos, res->value); @@ -7689,8 +7987,8 @@ struct cmd_read_rxd_txd_result { static void cmd_read_rxd_txd_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_read_rxd_txd_result *res = parsed_result; @@ -7731,9 +8029,9 @@ struct cmd_quit_result { cmdline_fixed_string_t quit; }; -static void cmd_quit_parsed(__attribute__((unused)) void *parsed_result, +static void cmd_quit_parsed(__rte_unused void *parsed_result, struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused void *data) { cmdline_quit(cl); } @@ -7756,12 +8054,12 @@ struct cmd_mac_addr_result { cmdline_fixed_string_t mac_addr_cmd; cmdline_fixed_string_t what; uint16_t port_num; - struct ether_addr address; + struct rte_ether_addr address; }; static void cmd_mac_addr_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_mac_addr_result *res = parsed_result; int ret; @@ -7815,8 +8113,8 @@ struct cmd_eth_peer_result { }; static void cmd_set_eth_peer_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_eth_peer_result *res = parsed_result; @@ -7863,8 +8161,8 @@ struct cmd_set_qmap_result { static void cmd_set_qmap_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_qmap_result *res = parsed_result; int is_rx = (strcmp(res->what, "tx") == 0) ? 0 : 1; @@ -7916,8 +8214,8 @@ struct cmd_set_xstats_hide_zero_result { static void cmd_set_xstats_hide_zero_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_xstats_hide_zero_result *res; uint16_t on_off = 0; @@ -7955,14 +8253,14 @@ struct cmd_set_uc_hash_table { cmdline_fixed_string_t port; portid_t port_id; cmdline_fixed_string_t what; - struct ether_addr address; + struct rte_ether_addr address; cmdline_fixed_string_t mode; }; static void cmd_set_uc_hash_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { int ret=0; struct cmd_set_uc_hash_table *res = parsed_result; @@ -8022,8 +8320,8 @@ struct cmd_set_uc_all_hash_table { static void cmd_set_uc_all_hash_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { int ret=0; struct cmd_set_uc_all_hash_table *res = parsed_result; @@ -8079,15 +8377,15 @@ struct cmd_set_vf_macvlan_filter { portid_t port_id; cmdline_fixed_string_t vf; uint8_t vf_id; - struct ether_addr address; + struct rte_ether_addr address; cmdline_fixed_string_t filter_type; cmdline_fixed_string_t mode; }; static void cmd_set_vf_macvlan_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { int is_on, ret = 0; struct cmd_set_vf_macvlan_filter *res = parsed_result; @@ -8095,7 +8393,7 @@ cmd_set_vf_macvlan_parsed(void *parsed_result, memset(&filter, 0, sizeof(struct rte_eth_mac_filter)); - rte_memcpy(&filter.mac_addr, &res->address, ETHER_ADDR_LEN); + rte_memcpy(&filter.mac_addr, &res->address, RTE_ETHER_ADDR_LEN); /* set VF MAC filter */ filter.is_vf = 1; @@ -8189,8 +8487,8 @@ struct cmd_set_vf_traffic { static void cmd_set_vf_traffic_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_vf_traffic *res = parsed_result; int is_rx = (strcmp(res->what, "rx") == 0) ? 1 : 0; @@ -8251,23 +8549,23 @@ struct cmd_set_vf_rxmode { static void cmd_set_vf_rxmode_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { int ret = -ENOTSUP; - uint16_t rx_mode = 0; + uint16_t vf_rxmode = 0; struct cmd_set_vf_rxmode *res = parsed_result; int is_on = (strcmp(res->on, "on") == 0) ? 1 : 0; if (!strcmp(res->what,"rxmode")) { if (!strcmp(res->mode, "AUPE")) - rx_mode |= ETH_VMDQ_ACCEPT_UNTAG; + vf_rxmode |= ETH_VMDQ_ACCEPT_UNTAG; else if (!strcmp(res->mode, "ROPE")) - rx_mode |= ETH_VMDQ_ACCEPT_HASH_UC; + vf_rxmode |= ETH_VMDQ_ACCEPT_HASH_UC; else if (!strcmp(res->mode, "BAM")) - rx_mode |= ETH_VMDQ_ACCEPT_BROADCAST; + vf_rxmode |= ETH_VMDQ_ACCEPT_BROADCAST; else if (!strncmp(res->mode, "MPE",3)) - rx_mode |= ETH_VMDQ_ACCEPT_MULTICAST; + vf_rxmode |= ETH_VMDQ_ACCEPT_MULTICAST; } RTE_SET_USED(is_on); @@ -8275,12 +8573,12 @@ cmd_set_vf_rxmode_parsed(void *parsed_result, #ifdef RTE_LIBRTE_IXGBE_PMD if (ret == -ENOTSUP) ret = rte_pmd_ixgbe_set_vf_rxmode(res->port_id, res->vf_id, - rx_mode, (uint8_t)is_on); + vf_rxmode, (uint8_t)is_on); #endif #ifdef RTE_LIBRTE_BNXT_PMD if (ret == -ENOTSUP) ret = rte_pmd_bnxt_set_vf_rxmode(res->port_id, res->vf_id, - rx_mode, (uint8_t)is_on); + vf_rxmode, (uint8_t)is_on); #endif if (ret < 0) printf("bad VF receive mode parameter, return code = %d \n", @@ -8338,12 +8636,12 @@ struct cmd_vf_mac_addr_result { uint16_t port_num; cmdline_fixed_string_t vf; uint8_t vf_num; - struct ether_addr address; + struct rte_ether_addr address; }; static void cmd_vf_mac_addr_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_vf_mac_addr_result *res = parsed_result; int ret = -ENOTSUP; @@ -8419,8 +8717,8 @@ struct cmd_vf_rx_vlan_filter { static void cmd_vf_rx_vlan_filter_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_vf_rx_vlan_filter *res = parsed_result; int ret = -ENOTSUP; @@ -8512,8 +8810,8 @@ struct cmd_queue_rate_limit_result { }; static void cmd_queue_rate_limit_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_queue_rate_limit_result *res = parsed_result; int ret = 0; @@ -8581,8 +8879,8 @@ struct cmd_vf_rate_limit_result { }; static void cmd_vf_rate_limit_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_vf_rate_limit_result *res = parsed_result; int ret = 0; @@ -8651,8 +8949,8 @@ struct cmd_tunnel_filter_result { cmdline_fixed_string_t cmd; cmdline_fixed_string_t what; portid_t port_id; - struct ether_addr outer_mac; - struct ether_addr inner_mac; + struct rte_ether_addr outer_mac; + struct rte_ether_addr inner_mac; cmdline_ipaddr_t ip_value; uint16_t inner_vlan; cmdline_fixed_string_t tunnel_type; @@ -8663,8 +8961,8 @@ struct cmd_tunnel_filter_result { static void cmd_tunnel_filter_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_tunnel_filter_result *res = parsed_result; struct rte_eth_tunnel_filter_conf tunnel_filter_conf; @@ -8672,8 +8970,8 @@ cmd_tunnel_filter_parsed(void *parsed_result, memset(&tunnel_filter_conf, 0, sizeof(tunnel_filter_conf)); - ether_addr_copy(&res->outer_mac, &tunnel_filter_conf.outer_mac); - ether_addr_copy(&res->inner_mac, &tunnel_filter_conf.inner_mac); + rte_ether_addr_copy(&res->outer_mac, &tunnel_filter_conf.outer_mac); + rte_ether_addr_copy(&res->inner_mac, &tunnel_filter_conf.inner_mac); tunnel_filter_conf.inner_vlan = res->inner_vlan; if (res->ip_value.family == AF_INET) { @@ -8710,6 +9008,8 @@ cmd_tunnel_filter_parsed(void *parsed_result, if (!strcmp(res->tunnel_type, "vxlan")) tunnel_filter_conf.tunnel_type = RTE_TUNNEL_TYPE_VXLAN; + else if (!strcmp(res->tunnel_type, "vxlan-gpe")) + tunnel_filter_conf.tunnel_type = RTE_TUNNEL_TYPE_VXLAN_GPE; else if (!strcmp(res->tunnel_type, "nvgre")) tunnel_filter_conf.tunnel_type = RTE_TUNNEL_TYPE_NVGRE; else if (!strcmp(res->tunnel_type, "ipingre")) @@ -8759,7 +9059,7 @@ cmdline_parse_token_ipaddr_t cmd_tunnel_filter_ip_value = ip_value); cmdline_parse_token_string_t cmd_tunnel_filter_tunnel_type = TOKEN_STRING_INITIALIZER(struct cmd_tunnel_filter_result, - tunnel_type, "vxlan#nvgre#ipingre"); + tunnel_type, "vxlan#nvgre#ipingre#vxlan-gpe"); cmdline_parse_token_string_t cmd_tunnel_filter_filter_type = TOKEN_STRING_INITIALIZER(struct cmd_tunnel_filter_result, @@ -8805,8 +9105,8 @@ struct cmd_tunnel_udp_config { static void cmd_tunnel_udp_config_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_tunnel_udp_config *res = parsed_result; struct rte_eth_udp_tunnel tunnel_udp; @@ -8867,8 +9167,8 @@ struct cmd_config_tunnel_udp_port { static void cmd_cfg_tunnel_udp_port_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_tunnel_udp_port *res = parsed_result; struct rte_eth_udp_tunnel tunnel_udp; @@ -8883,6 +9183,8 @@ cmd_cfg_tunnel_udp_port_parsed(void *parsed_result, tunnel_udp.prot_type = RTE_TUNNEL_TYPE_VXLAN; } else if (!strcmp(res->tunnel_type, "geneve")) { tunnel_udp.prot_type = RTE_TUNNEL_TYPE_GENEVE; + } else if (!strcmp(res->tunnel_type, "vxlan-gpe")) { + tunnel_udp.prot_type = RTE_TUNNEL_TYPE_VXLAN_GPE; } else { printf("Invalid tunnel type\n"); return; @@ -8917,7 +9219,7 @@ cmdline_parse_token_string_t cmd_config_tunnel_udp_port_action = "add#rm"); cmdline_parse_token_string_t cmd_config_tunnel_udp_port_tunnel_type = TOKEN_STRING_INITIALIZER(struct cmd_config_tunnel_udp_port, tunnel_type, - "vxlan#geneve"); + "vxlan#geneve#vxlan-gpe"); cmdline_parse_token_num_t cmd_config_tunnel_udp_port_value = TOKEN_NUM_INITIALIZER(struct cmd_config_tunnel_udp_port, udp_port, UINT16); @@ -8925,7 +9227,7 @@ cmdline_parse_token_num_t cmd_config_tunnel_udp_port_value = cmdline_parse_inst_t cmd_cfg_tunnel_udp_port = { .f = cmd_cfg_tunnel_udp_port_parsed, .data = NULL, - .help_str = "port config udp_tunnel_port add|rm vxlan|geneve ", + .help_str = "port config udp_tunnel_port add|rm vxlan|geneve|vxlan-gpe ", .tokens = { (void *)&cmd_config_tunnel_udp_port_port, (void *)&cmd_config_tunnel_udp_port_config, @@ -8948,8 +9250,8 @@ struct cmd_global_config_result { static void cmd_global_config_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_global_config_result *res = parsed_result; struct rte_eth_global_cfg conf; @@ -9038,8 +9340,8 @@ cmdline_parse_token_string_t cmd_mirror_mask_on = static void cmd_set_mirror_mask_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { int ret,nb_item,i; struct cmd_set_mirror_mask_result *res = parsed_result; @@ -9065,7 +9367,7 @@ cmd_set_mirror_mask_parsed(void *parsed_result, return; for (i = 0; i < nb_item; i++) { - if (vlan_list[i] > ETHER_MAX_VLAN_ID) { + if (vlan_list[i] > RTE_ETHER_MAX_VLAN_ID) { printf("Invalid vlan_id: must be < 4096\n"); return; } @@ -9149,8 +9451,8 @@ cmdline_parse_token_string_t cmd_mirror_link_on = static void cmd_set_mirror_link_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { int ret; struct cmd_set_mirror_link_result *res = parsed_result; @@ -9223,8 +9525,8 @@ cmdline_parse_token_num_t cmd_rm_mirror_rule_ruleid = static void cmd_reset_mirror_rule_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { int ret; struct cmd_set_mirror_link_result *res = parsed_result; @@ -9265,8 +9567,8 @@ dump_struct_sizes(void) } static void cmd_dump_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_dump_result *res = parsed_result; @@ -9314,7 +9616,7 @@ struct cmd_dump_one_result { }; static void cmd_dump_one_parsed(void *parsed_result, struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused void *data) { struct cmd_dump_one_result *res = parsed_result; @@ -9368,8 +9670,8 @@ struct cmd_syn_filter_result { static void cmd_syn_filter_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_syn_filter_result *res = parsed_result; struct rte_eth_syn_filter syn_filter; @@ -9462,8 +9764,8 @@ struct cmd_queue_region_result { static void cmd_queue_region_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_queue_region_result *res = parsed_result; int ret = -ENOTSUP; @@ -9561,8 +9863,8 @@ struct cmd_region_flowtype_result { static void cmd_region_flowtype_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_region_flowtype_result *res = parsed_result; int ret = -ENOTSUP; @@ -9652,8 +9954,8 @@ struct cmd_user_priority_region_result { static void cmd_user_priority_region_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_user_priority_region_result *res = parsed_result; int ret = -ENOTSUP; @@ -9743,8 +10045,8 @@ struct cmd_flush_queue_region_result { static void cmd_flush_queue_region_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_flush_queue_region_result *res = parsed_result; int ret = -ENOTSUP; @@ -9825,8 +10127,8 @@ struct cmd_show_queue_region_info { static void cmd_show_queue_region_info_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_show_queue_region_info *res = parsed_result; int ret = -ENOTSUP; @@ -9909,8 +10211,8 @@ struct cmd_2tuple_filter_result { static void cmd_2tuple_filter_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct rte_eth_ntuple_filter filter; struct cmd_2tuple_filter_result *res = parsed_result; @@ -9935,7 +10237,7 @@ cmd_2tuple_filter_parsed(void *parsed_result, " when protocol is TCP.\n"); return; } - if (res->tcp_flags_value > TCP_FLAG_ALL) { + if (res->tcp_flags_value > RTE_NTUPLE_TCP_FLAGS_MASK) { printf("invalid TCP flags.\n"); return; } @@ -10064,8 +10366,8 @@ struct cmd_5tuple_filter_result { static void cmd_5tuple_filter_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct rte_eth_ntuple_filter filter; struct cmd_5tuple_filter_result *res = parsed_result; @@ -10093,7 +10395,7 @@ cmd_5tuple_filter_parsed(void *parsed_result, " when protocol is TCP.\n"); return; } - if (res->tcp_flags_value > TCP_FLAG_ALL) { + if (res->tcp_flags_value > RTE_NTUPLE_TCP_FLAGS_MASK) { printf("invalid TCP flags.\n"); return; } @@ -10272,8 +10574,8 @@ static int xdigit2val(unsigned char c) static void cmd_flex_filter_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { int ret = 0; struct rte_eth_flex_filter filter; @@ -10438,7 +10740,7 @@ struct cmd_ethertype_filter_result { portid_t port_id; cmdline_fixed_string_t ops; cmdline_fixed_string_t mac; - struct ether_addr mac_addr; + struct rte_ether_addr mac_addr; cmdline_fixed_string_t ethertype; uint16_t ethertype_value; cmdline_fixed_string_t drop; @@ -10479,8 +10781,8 @@ cmdline_parse_token_num_t cmd_ethertype_filter_queue_id = static void cmd_ethertype_filter_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_ethertype_filter_result *res = parsed_result; struct rte_eth_ethertype_filter filter; @@ -10498,7 +10800,7 @@ cmd_ethertype_filter_parsed(void *parsed_result, if (!strcmp(res->mac, "mac_addr")) { filter.flags |= RTE_ETHTYPE_FLAGS_MAC; rte_memcpy(&filter.mac_addr, &res->mac_addr, - sizeof(struct ether_addr)); + sizeof(struct rte_ether_addr)); } if (!strcmp(res->drop, "drop")) filter.flags |= RTE_ETHTYPE_FLAGS_DROP; @@ -10577,7 +10879,7 @@ struct cmd_flow_director_result { cmdline_fixed_string_t fd_id; uint32_t fd_id_value; cmdline_fixed_string_t mac; - struct ether_addr mac_addr; + struct rte_ether_addr mac_addr; cmdline_fixed_string_t tunnel; cmdline_fixed_string_t tunnel_type; cmdline_fixed_string_t tunnel_id; @@ -10703,8 +11005,8 @@ do { \ static void cmd_flow_director_filter_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_flow_director_result *res = parsed_result; struct rte_eth_fdir_filter entry; @@ -10880,12 +11182,12 @@ cmd_flow_director_filter_parsed(void *parsed_result, if (fdir_conf.mode == RTE_FDIR_MODE_PERFECT_MAC_VLAN) rte_memcpy(&entry.input.flow.mac_vlan_flow.mac_addr, &res->mac_addr, - sizeof(struct ether_addr)); + sizeof(struct rte_ether_addr)); if (fdir_conf.mode == RTE_FDIR_MODE_PERFECT_TUNNEL) { rte_memcpy(&entry.input.flow.tunnel_flow.mac_addr, &res->mac_addr, - sizeof(struct ether_addr)); + sizeof(struct rte_ether_addr)); entry.input.flow.tunnel_flow.tunnel_type = str2fdir_tunneltype(res->tunnel_type); entry.input.flow.tunnel_flow.tunnel_id = @@ -10911,8 +11213,11 @@ cmd_flow_director_filter_parsed(void *parsed_result, else if (!strncmp(res->pf_vf, "vf", 2)) { struct rte_eth_dev_info dev_info; - memset(&dev_info, 0, sizeof(dev_info)); - rte_eth_dev_info_get(res->port_id, &dev_info); + ret = eth_dev_info_get_print_err(res->port_id, + &dev_info); + if (ret != 0) + return; + errno = 0; vf_id = strtoul(res->pf_vf + 2, &end, 10); if (errno != 0 || *end != '\0' || @@ -11320,8 +11625,8 @@ cmdline_parse_token_num_t cmd_flush_flow_director_port_id = static void cmd_flush_flow_director_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_flow_director_result *res = parsed_result; int ret = 0; @@ -11378,8 +11683,8 @@ struct cmd_flow_director_mask_result { static void cmd_flow_director_mask_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_flow_director_mask_result *res = parsed_result; struct rte_eth_fdir_masks *mask; @@ -11570,8 +11875,8 @@ struct cmd_flow_director_flex_mask_result { static void cmd_flow_director_flex_mask_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_flow_director_flex_mask_result *res = parsed_result; struct rte_eth_fdir_info fdir_info; @@ -11724,8 +12029,8 @@ parse_offsets(const char *q_arg, uint16_t *offsets, uint16_t max_num) static void cmd_flow_director_flxpld_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_flow_director_flexpayload_result *res = parsed_result; struct rte_eth_flex_payload_cfg flex_cfg; @@ -11939,6 +12244,7 @@ flowtype_to_str(uint16_t ftype) {"vxlan", RTE_ETH_FLOW_VXLAN}, {"geneve", RTE_ETH_FLOW_GENEVE}, {"nvgre", RTE_ETH_FLOW_NVGRE}, + {"vxlan-gpe", RTE_ETH_FLOW_VXLAN_GPE}, }; for (i = 0; i < RTE_DIM(ftype_table); i++) { @@ -11985,6 +12291,9 @@ cmd_get_hash_global_config_parsed(void *parsed_result, case RTE_ETH_HASH_FUNCTION_SIMPLE_XOR: printf("Hash function is Simple XOR\n"); break; + case RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ: + printf("Hash function is Symmetric Toeplitz\n"); + break; default: printf("Unknown hash function\n"); break; @@ -12058,6 +12367,9 @@ cmd_set_hash_global_config_parsed(void *parsed_result, else if (!strcmp(res->hash_func, "simple_xor")) info.info.global_conf.hash_func = RTE_ETH_HASH_FUNCTION_SIMPLE_XOR; + else if (!strcmp(res->hash_func, "symmetric_toeplitz")) + info.info.global_conf.hash_func = + RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ; else if (!strcmp(res->hash_func, "default")) info.info.global_conf.hash_func = RTE_ETH_HASH_FUNCTION_DEFAULT; @@ -12076,7 +12388,7 @@ cmd_set_hash_global_config_parsed(void *parsed_result, res->port_id); else printf("Global hash configurations have been set " - "succcessfully by port %d\n", res->port_id); + "successfully by port %d\n", res->port_id); } cmdline_parse_token_string_t cmd_set_hash_global_config_all = @@ -12087,7 +12399,7 @@ cmdline_parse_token_num_t cmd_set_hash_global_config_port_id = port_id, UINT16); cmdline_parse_token_string_t cmd_set_hash_global_config_hash_func = TOKEN_STRING_INITIALIZER(struct cmd_set_hash_global_config_result, - hash_func, "toeplitz#simple_xor#default"); + hash_func, "toeplitz#simple_xor#symmetric_toeplitz#default"); cmdline_parse_token_string_t cmd_set_hash_global_config_flow_type = TOKEN_STRING_INITIALIZER(struct cmd_set_hash_global_config_result, flow_type, @@ -12101,7 +12413,7 @@ cmdline_parse_inst_t cmd_set_hash_global_config = { .f = cmd_set_hash_global_config_parsed, .data = NULL, .help_str = "set_hash_global_config " - "toeplitz|simple_xor|default " + "toeplitz|simple_xor|symmetric_toeplitz|default " "ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|" "ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|" "l2_payload enable|disable", @@ -12317,16 +12629,16 @@ struct cmd_mcast_addr_result { cmdline_fixed_string_t mcast_addr_cmd; cmdline_fixed_string_t what; uint16_t port_num; - struct ether_addr mc_addr; + struct rte_ether_addr mc_addr; }; static void cmd_mcast_addr_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_mcast_addr_result *res = parsed_result; - if (!is_multicast_ether_addr(&res->mc_addr)) { + if (!rte_is_multicast_ether_addr(&res->mc_addr)) { printf("Invalid multicast addr %02X:%02X:%02X:%02X:%02X:%02X\n", res->mc_addr.addr_bytes[0], res->mc_addr.addr_bytes[1], res->mc_addr.addr_bytes[2], res->mc_addr.addr_bytes[3], @@ -12436,8 +12748,8 @@ str2fdir_l2_tunnel_type(char *string) static void cmd_config_l2_tunnel_eth_type_all_parsed (void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_l2_tunnel_eth_type_result *res = parsed_result; struct rte_eth_l2_tunnel_conf entry; @@ -12471,8 +12783,8 @@ cmdline_parse_inst_t cmd_config_l2_tunnel_eth_type_all = { static void cmd_config_l2_tunnel_eth_type_specific_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_l2_tunnel_eth_type_result *res = parsed_result; @@ -12547,8 +12859,8 @@ cmdline_parse_token_string_t cmd_config_l2_tunnel_en_dis_en_dis = static void cmd_config_l2_tunnel_en_dis_all_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_l2_tunnel_en_dis_result *res = parsed_result; struct rte_eth_l2_tunnel_conf entry; @@ -12589,8 +12901,8 @@ cmdline_parse_inst_t cmd_config_l2_tunnel_en_dis_all = { static void cmd_config_l2_tunnel_en_dis_specific_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_l2_tunnel_en_dis_result *res = parsed_result; @@ -12745,8 +13057,8 @@ cmdline_parse_token_num_t cmd_config_e_tag_vf_id = static void cmd_config_e_tag_insertion_en_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_e_tag_result *res = parsed_result; @@ -12767,8 +13079,8 @@ cmd_config_e_tag_insertion_en_parsed( static void cmd_config_e_tag_insertion_dis_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_e_tag_result *res = parsed_result; @@ -12826,8 +13138,8 @@ cmdline_parse_inst_t cmd_config_e_tag_insertion_dis = { static void cmd_config_e_tag_stripping_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_e_tag_result *res = parsed_result; @@ -12871,8 +13183,8 @@ cmdline_parse_inst_t cmd_config_e_tag_stripping_en_dis = { static void cmd_config_e_tag_forwarding_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_e_tag_result *res = parsed_result; struct rte_eth_l2_tunnel_conf entry; @@ -12915,8 +13227,8 @@ cmdline_parse_inst_t cmd_config_e_tag_forwarding_en_dis = { static void cmd_config_e_tag_filter_add_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_e_tag_result *res = parsed_result; struct rte_eth_l2_tunnel_conf entry; @@ -12973,8 +13285,8 @@ cmdline_parse_inst_t cmd_config_e_tag_filter_add = { static void cmd_config_e_tag_filter_del_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_e_tag_result *res = parsed_result; struct rte_eth_l2_tunnel_conf entry; @@ -13071,8 +13383,8 @@ cmdline_parse_token_string_t cmd_vf_vlan_anti_spoof_on_off = static void cmd_set_vf_vlan_anti_spoof_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_vf_vlan_anti_spoof_result *res = parsed_result; int ret = -ENOTSUP; @@ -13177,8 +13489,8 @@ cmdline_parse_token_string_t cmd_vf_mac_anti_spoof_on_off = static void cmd_set_vf_mac_anti_spoof_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_vf_mac_anti_spoof_result *res = parsed_result; int ret = -ENOTSUP; @@ -13283,8 +13595,8 @@ cmdline_parse_token_string_t cmd_vf_vlan_stripq_on_off = static void cmd_set_vf_vlan_stripq_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_vf_vlan_stripq_result *res = parsed_result; int ret = -ENOTSUP; @@ -13389,8 +13701,8 @@ cmdline_parse_token_num_t cmd_vf_vlan_insert_vlan_id = static void cmd_set_vf_vlan_insert_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_vf_vlan_insert_result *res = parsed_result; int ret = -ENOTSUP; @@ -13483,8 +13795,8 @@ cmdline_parse_token_string_t cmd_tx_loopback_on_off = static void cmd_set_tx_loopback_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_tx_loopback_result *res = parsed_result; int ret = -ENOTSUP; @@ -13583,8 +13895,8 @@ cmdline_parse_token_string_t cmd_all_queues_drop_en_on_off = static void cmd_set_all_queues_drop_en_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_all_queues_drop_en_result *res = parsed_result; int ret = -ENOTSUP; @@ -13679,8 +13991,8 @@ cmdline_parse_token_string_t cmd_vf_split_drop_en_on_off = static void cmd_set_vf_split_drop_en_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_vf_split_drop_en_result *res = parsed_result; int ret = -ENOTSUP; @@ -13736,7 +14048,7 @@ struct cmd_set_vf_mac_addr_result { cmdline_fixed_string_t addr; portid_t port_id; uint16_t vf_id; - struct ether_addr mac_addr; + struct rte_ether_addr mac_addr; }; @@ -13772,8 +14084,8 @@ cmdline_parse_token_etheraddr_t cmd_set_vf_mac_addr_mac_addr = static void cmd_set_vf_mac_addr_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_vf_mac_addr_result *res = parsed_result; int ret = -ENOTSUP; @@ -13886,8 +14198,8 @@ cmdline_parse_token_string_t cmd_macsec_offload_on_rp_on_off = static void cmd_set_macsec_offload_on_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_macsec_offload_on_result *res = parsed_result; int ret = -ENOTSUP; @@ -13903,7 +14215,10 @@ cmd_set_macsec_offload_on_parsed( return; } - rte_eth_dev_info_get(port_id, &dev_info); + ret = eth_dev_info_get_print_err(port_id, &dev_info); + if (ret != 0) + return; + if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MACSEC_INSERT) { #ifdef RTE_LIBRTE_IXGBE_PMD ret = rte_pmd_ixgbe_macsec_enable(port_id, en, rp); @@ -13982,8 +14297,8 @@ cmdline_parse_token_string_t cmd_macsec_offload_off_off = static void cmd_set_macsec_offload_off_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_macsec_offload_off_result *res = parsed_result; int ret = -ENOTSUP; @@ -13997,7 +14312,10 @@ cmd_set_macsec_offload_off_parsed( return; } - rte_eth_dev_info_get(port_id, &dev_info); + ret = eth_dev_info_get_print_err(port_id, &dev_info); + if (ret != 0) + return; + if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MACSEC_INSERT) { #ifdef RTE_LIBRTE_IXGBE_PMD ret = rte_pmd_ixgbe_macsec_disable(port_id); @@ -14041,7 +14359,7 @@ struct cmd_macsec_sc_result { cmdline_fixed_string_t sc; cmdline_fixed_string_t tx_rx; portid_t port_id; - struct ether_addr mac; + struct rte_ether_addr mac; uint16_t pi; }; @@ -14078,8 +14396,8 @@ cmdline_parse_token_num_t cmd_macsec_sc_pi = static void cmd_set_macsec_sc_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_macsec_sc_result *res = parsed_result; int ret = -ENOTSUP; @@ -14178,8 +14496,8 @@ cmdline_parse_token_string_t cmd_macsec_sa_key = static void cmd_set_macsec_sa_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_macsec_sa_result *res = parsed_result; int ret = -ENOTSUP; @@ -14290,8 +14608,8 @@ cmdline_parse_token_string_t cmd_vf_promisc_on_off = static void cmd_set_vf_promisc_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_vf_promisc_result *res = parsed_result; int ret = -ENOTSUP; @@ -14380,8 +14698,8 @@ cmdline_parse_token_string_t cmd_vf_allmulti_on_off = static void cmd_set_vf_allmulti_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_vf_allmulti_result *res = parsed_result; int ret = -ENOTSUP; @@ -14470,8 +14788,8 @@ cmdline_parse_token_string_t cmd_set_vf_broadcast_on_off = static void cmd_set_vf_broadcast_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_vf_broadcast_result *res = parsed_result; int ret = -ENOTSUP; @@ -14564,8 +14882,8 @@ cmdline_parse_token_string_t cmd_set_vf_vlan_tag_on_off = static void cmd_set_vf_vlan_tag_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_vf_vlan_tag_result *res = parsed_result; int ret = -ENOTSUP; @@ -14687,8 +15005,8 @@ cmdline_parse_token_num_t cmd_vf_tc_bw_tc_map = static void cmd_vf_max_bw_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_vf_tc_bw_result *res = parsed_result; int ret = -ENOTSUP; @@ -14781,8 +15099,8 @@ vf_tc_min_bw_parse_bw_list(uint8_t *bw_list, static void cmd_vf_tc_min_bw_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_vf_tc_bw_result *res = parsed_result; uint8_t tc_num; @@ -14839,8 +15157,8 @@ cmdline_parse_inst_t cmd_vf_tc_min_bw = { static void cmd_tc_min_bw_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_vf_tc_bw_result *res = parsed_result; struct rte_port *port; @@ -14902,8 +15220,8 @@ cmdline_parse_inst_t cmd_tc_min_bw = { static void cmd_vf_tc_max_bw_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_vf_tc_bw_result *res = parsed_result; int ret = -ENOTSUP; @@ -14989,8 +15307,8 @@ cmdline_parse_token_num_t cmd_set_port_tm_hierarchy_default_port_id = port_id, UINT16); static void cmd_set_port_tm_hierarchy_default_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_port_tm_hierarchy_default_result *res = parsed_result; struct rte_port *p; @@ -15042,8 +15360,8 @@ struct cmd_set_vxlan_result { uint16_t tci; uint8_t tos; uint8_t ttl; - struct ether_addr eth_src; - struct ether_addr eth_dst; + struct rte_ether_addr eth_src; + struct rte_ether_addr eth_dst; }; cmdline_parse_token_string_t cmd_set_vxlan_set = @@ -15114,8 +15432,8 @@ cmdline_parse_token_etheraddr_t cmd_set_vxlan_eth_dst_value = TOKEN_ETHERADDR_INITIALIZER(struct cmd_set_vxlan_result, eth_dst); static void cmd_set_vxlan_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_vxlan_result *res = parsed_result; union { @@ -15155,9 +15473,9 @@ static void cmd_set_vxlan_parsed(void *parsed_result, if (vxlan_encap_conf.select_vlan) vxlan_encap_conf.vlan_tci = rte_cpu_to_be_16(res->tci); rte_memcpy(vxlan_encap_conf.eth_src, res->eth_src.addr_bytes, - ETHER_ADDR_LEN); + RTE_ETHER_ADDR_LEN); rte_memcpy(vxlan_encap_conf.eth_dst, res->eth_dst.addr_bytes, - ETHER_ADDR_LEN); + RTE_ETHER_ADDR_LEN); } cmdline_parse_inst_t cmd_set_vxlan = { @@ -15265,8 +15583,8 @@ struct cmd_set_nvgre_result { cmdline_ipaddr_t ip_src; cmdline_ipaddr_t ip_dst; uint16_t tci; - struct ether_addr eth_src; - struct ether_addr eth_dst; + struct rte_ether_addr eth_src; + struct rte_ether_addr eth_dst; }; cmdline_parse_token_string_t cmd_set_nvgre_set = @@ -15314,8 +15632,8 @@ cmdline_parse_token_etheraddr_t cmd_set_nvgre_eth_dst_value = TOKEN_ETHERADDR_INITIALIZER(struct cmd_set_nvgre_result, eth_dst); static void cmd_set_nvgre_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_nvgre_result *res = parsed_result; union { @@ -15346,9 +15664,9 @@ static void cmd_set_nvgre_parsed(void *parsed_result, if (nvgre_encap_conf.select_vlan) nvgre_encap_conf.vlan_tci = rte_cpu_to_be_16(res->tci); rte_memcpy(nvgre_encap_conf.eth_src, res->eth_src.addr_bytes, - ETHER_ADDR_LEN); + RTE_ETHER_ADDR_LEN); rte_memcpy(nvgre_encap_conf.eth_dst, res->eth_dst.addr_bytes, - ETHER_ADDR_LEN); + RTE_ETHER_ADDR_LEN); } cmdline_parse_inst_t cmd_set_nvgre = { @@ -15411,8 +15729,8 @@ struct cmd_set_l2_encap_result { cmdline_fixed_string_t ip_version; uint32_t vlan_present:1; uint16_t tci; - struct ether_addr eth_src; - struct ether_addr eth_dst; + struct rte_ether_addr eth_src; + struct rte_ether_addr eth_dst; }; cmdline_parse_token_string_t cmd_set_l2_encap_set = @@ -15445,8 +15763,8 @@ cmdline_parse_token_etheraddr_t cmd_set_l2_encap_eth_dst_value = TOKEN_ETHERADDR_INITIALIZER(struct cmd_set_l2_encap_result, eth_dst); static void cmd_set_l2_encap_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_l2_encap_result *res = parsed_result; @@ -15463,9 +15781,9 @@ static void cmd_set_l2_encap_parsed(void *parsed_result, if (l2_encap_conf.select_vlan) l2_encap_conf.vlan_tci = rte_cpu_to_be_16(res->tci); rte_memcpy(l2_encap_conf.eth_src, res->eth_src.addr_bytes, - ETHER_ADDR_LEN); + RTE_ETHER_ADDR_LEN); rte_memcpy(l2_encap_conf.eth_dst, res->eth_dst.addr_bytes, - ETHER_ADDR_LEN); + RTE_ETHER_ADDR_LEN); } cmdline_parse_inst_t cmd_set_l2_encap = { @@ -15524,8 +15842,8 @@ cmdline_parse_token_string_t cmd_set_l2_decap_l2_decap_with_vlan = "l2_decap-with-vlan"); static void cmd_set_l2_decap_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_l2_decap_result *res = parsed_result; @@ -15568,8 +15886,8 @@ struct cmd_set_mplsogre_encap_result { cmdline_ipaddr_t ip_src; cmdline_ipaddr_t ip_dst; uint16_t tci; - struct ether_addr eth_src; - struct ether_addr eth_dst; + struct rte_ether_addr eth_src; + struct rte_ether_addr eth_dst; }; cmdline_parse_token_string_t cmd_set_mplsogre_encap_set = @@ -15623,8 +15941,8 @@ cmdline_parse_token_etheraddr_t cmd_set_mplsogre_encap_eth_dst_value = eth_dst); static void cmd_set_mplsogre_encap_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_mplsogre_encap_result *res = parsed_result; union { @@ -15655,9 +15973,9 @@ static void cmd_set_mplsogre_encap_parsed(void *parsed_result, if (mplsogre_encap_conf.select_vlan) mplsogre_encap_conf.vlan_tci = rte_cpu_to_be_16(res->tci); rte_memcpy(mplsogre_encap_conf.eth_src, res->eth_src.addr_bytes, - ETHER_ADDR_LEN); + RTE_ETHER_ADDR_LEN); rte_memcpy(mplsogre_encap_conf.eth_dst, res->eth_dst.addr_bytes, - ETHER_ADDR_LEN); + RTE_ETHER_ADDR_LEN); } cmdline_parse_inst_t cmd_set_mplsogre_encap = { @@ -15738,8 +16056,8 @@ cmdline_parse_token_string_t cmd_set_mplsogre_decap_ip_version_value = ip_version, "ipv4#ipv6"); static void cmd_set_mplsogre_decap_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_mplsogre_decap_result *res = parsed_result; @@ -15792,8 +16110,8 @@ struct cmd_set_mplsoudp_encap_result { cmdline_ipaddr_t ip_src; cmdline_ipaddr_t ip_dst; uint16_t tci; - struct ether_addr eth_src; - struct ether_addr eth_dst; + struct rte_ether_addr eth_src; + struct rte_ether_addr eth_dst; }; cmdline_parse_token_string_t cmd_set_mplsoudp_encap_set = @@ -15859,8 +16177,8 @@ cmdline_parse_token_etheraddr_t cmd_set_mplsoudp_encap_eth_dst_value = eth_dst); static void cmd_set_mplsoudp_encap_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_mplsoudp_encap_result *res = parsed_result; union { @@ -15893,9 +16211,9 @@ static void cmd_set_mplsoudp_encap_parsed(void *parsed_result, if (mplsoudp_encap_conf.select_vlan) mplsoudp_encap_conf.vlan_tci = rte_cpu_to_be_16(res->tci); rte_memcpy(mplsoudp_encap_conf.eth_src, res->eth_src.addr_bytes, - ETHER_ADDR_LEN); + RTE_ETHER_ADDR_LEN); rte_memcpy(mplsoudp_encap_conf.eth_dst, res->eth_dst.addr_bytes, - ETHER_ADDR_LEN); + RTE_ETHER_ADDR_LEN); } cmdline_parse_inst_t cmd_set_mplsoudp_encap = { @@ -15985,8 +16303,8 @@ cmdline_parse_token_string_t cmd_set_mplsoudp_decap_ip_version_value = ip_version, "ipv4#ipv6"); static void cmd_set_mplsoudp_decap_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_set_mplsoudp_decap_result *res = parsed_result; @@ -16030,8 +16348,8 @@ cmdline_parse_inst_t cmd_set_mplsoudp_decap_with_vlan = { static void cmd_strict_link_prio_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_vf_tc_bw_result *res = parsed_result; int ret = -ENOTSUP; @@ -16094,8 +16412,8 @@ cmdline_parse_token_string_t cmd_ddp_add_filepath = static void cmd_ddp_add_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_ddp_add_result *res = parsed_result; uint8_t *buff; @@ -16174,8 +16492,8 @@ cmdline_parse_token_string_t cmd_ddp_del_filepath = static void cmd_ddp_del_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_ddp_del_result *res = parsed_result; uint8_t *buff; @@ -16239,8 +16557,8 @@ cmdline_parse_token_string_t cmd_ddp_info_filepath = static void cmd_ddp_info_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_ddp_info_result *res = parsed_result; uint8_t *pkg; @@ -16478,9 +16796,9 @@ cmdline_parse_token_num_t cmd_ddp_get_list_port_id = static void cmd_ddp_get_list_parsed( - __attribute__((unused)) void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) { #ifdef RTE_LIBRTE_I40E_PMD struct cmd_ddp_get_list_result *res = parsed_result; @@ -16554,9 +16872,9 @@ struct cmd_cfg_input_set_result { static void cmd_cfg_input_set_parsed( - __attribute__((unused)) void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) { #ifdef RTE_LIBRTE_I40E_PMD struct cmd_cfg_input_set_result *res = parsed_result; @@ -16677,9 +16995,9 @@ struct cmd_clear_input_set_result { static void cmd_clear_input_set_parsed( - __attribute__((unused)) void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) { #ifdef RTE_LIBRTE_I40E_PMD struct cmd_clear_input_set_result *res = parsed_result; @@ -16796,8 +17114,8 @@ cmdline_parse_token_num_t cmd_show_vf_stats_vf_id = static void cmd_show_vf_stats_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_show_vf_stats_result *res = parsed_result; struct rte_eth_stats stats; @@ -16905,8 +17223,8 @@ cmdline_parse_token_num_t cmd_clear_vf_stats_vf_id = static void cmd_clear_vf_stats_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_clear_vf_stats_result *res = parsed_result; int ret = -ENOTSUP; @@ -16997,8 +17315,8 @@ cmdline_parse_token_string_t cmd_pctype_mapping_reset_reset = static void cmd_pctype_mapping_reset_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_pctype_mapping_reset_result *res = parsed_result; int ret = -ENOTSUP; @@ -17075,8 +17393,8 @@ cmdline_parse_token_string_t cmd_pctype_mapping_get_mapping = static void cmd_pctype_mapping_get_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_pctype_mapping_get_result *res = parsed_result; int ret = -ENOTSUP; @@ -17191,8 +17509,8 @@ cmdline_parse_token_num_t cmd_pctype_mapping_update_flow_type = static void cmd_pctype_mapping_update_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_pctype_mapping_update_result *res = parsed_result; int ret = -ENOTSUP; @@ -17289,8 +17607,8 @@ cmdline_parse_token_num_t cmd_ptype_mapping_get_valid_only = static void cmd_ptype_mapping_get_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_ptype_mapping_get_result *res = parsed_result; int ret = -ENOTSUP; @@ -17394,8 +17712,8 @@ cmdline_parse_token_num_t cmd_ptype_mapping_replace_pkt_type = static void cmd_ptype_mapping_replace_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_ptype_mapping_replace_result *res = parsed_result; int ret = -ENOTSUP; @@ -17476,8 +17794,8 @@ cmdline_parse_token_num_t cmd_ptype_mapping_reset_port_id = static void cmd_ptype_mapping_reset_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_ptype_mapping_reset_result *res = parsed_result; int ret = -ENOTSUP; @@ -17557,8 +17875,8 @@ cmdline_parse_token_num_t cmd_ptype_mapping_update_sw_ptype = static void cmd_ptype_mapping_update_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_ptype_mapping_update_result *res = parsed_result; int ret = -ENOTSUP; @@ -17624,8 +17942,8 @@ cmdline_parse_token_string_t cmd_load_cmdfile_filename = static void cmd_load_from_file_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_cmdfile_result *res = parsed_result; @@ -17687,7 +18005,7 @@ print_rx_offloads(uint64_t offloads) begin = __builtin_ctzll(offloads); end = sizeof(offloads) * CHAR_BIT - __builtin_clzll(offloads); - single_offload = 1 << begin; + single_offload = 1ULL << begin; for (bit = begin; bit < end; bit++) { if (offloads & single_offload) printf(" %s", @@ -17699,16 +18017,20 @@ print_rx_offloads(uint64_t offloads) static void cmd_rx_offload_get_capa_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_rx_offload_get_capa_result *res = parsed_result; struct rte_eth_dev_info dev_info; portid_t port_id = res->port_id; uint64_t queue_offloads; uint64_t port_offloads; + int ret; + + ret = eth_dev_info_get_print_err(port_id, &dev_info); + if (ret != 0) + return; - rte_eth_dev_info_get(port_id, &dev_info); queue_offloads = dev_info.rx_queue_offload_capa; port_offloads = dev_info.rx_offload_capa ^ queue_offloads; @@ -17769,8 +18091,8 @@ cmdline_parse_token_string_t cmd_rx_offload_get_configuration_configuration = static void cmd_rx_offload_get_configuration_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_rx_offload_get_configuration_result *res = parsed_result; struct rte_eth_dev_info dev_info; @@ -17780,6 +18102,7 @@ cmd_rx_offload_get_configuration_parsed( uint64_t queue_offloads; uint16_t nb_rx_queues; int q; + int ret; printf("Rx Offloading Configuration of port %d :\n", port_id); @@ -17788,7 +18111,10 @@ cmd_rx_offload_get_configuration_parsed( print_rx_offloads(port_offloads); printf("\n"); - rte_eth_dev_info_get(port_id, &dev_info); + ret = eth_dev_info_get_print_err(port_id, &dev_info); + if (ret != 0) + return; + nb_rx_queues = dev_info.nb_rx_queues; for (q = 0; q < nb_rx_queues; q++) { queue_offloads = port->rx_conf[q].offloads; @@ -17845,7 +18171,7 @@ 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#" - "crc_strip#scatter#timestamp#security#keep_crc"); + "scatter#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, @@ -17877,8 +18203,8 @@ search_rx_offload(const char *name) static void cmd_config_per_port_rx_offload_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_per_port_rx_offload_result *res = parsed_result; portid_t port_id = res->port_id; @@ -17887,6 +18213,7 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result, uint64_t single_offload; uint16_t nb_rx_queues; int q; + int ret; if (port->port_status != RTE_PORT_STOPPED) { printf("Error: Can't config offload when Port %d " @@ -17900,7 +18227,10 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result, return; } - rte_eth_dev_info_get(port_id, &dev_info); + ret = eth_dev_info_get_print_err(port_id, &dev_info); + if (ret != 0) + return; + nb_rx_queues = dev_info.nb_rx_queues; if (!strcmp(res->on_off, "on")) { port->dev_conf.rxmode.offloads |= single_offload; @@ -17921,7 +18251,7 @@ 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|crc_strip|scatter|timestamp|security|keep_crc " + "jumbo_frame|scatter|timestamp|security|keep_crc|rss_hash " "on|off", .tokens = { (void *)&cmd_config_per_port_rx_offload_result_port, @@ -17971,7 +18301,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#" - "crc_strip#scatter#timestamp#security#keep_crc"); + "scatter#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, @@ -17979,8 +18309,8 @@ cmdline_parse_token_string_t cmd_config_per_queue_rx_offload_result_on_off = static void cmd_config_per_queue_rx_offload_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_per_queue_rx_offload_result *res = parsed_result; struct rte_eth_dev_info dev_info; @@ -17988,6 +18318,7 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result, uint16_t queue_id = res->queue_id; struct rte_port *port = &ports[port_id]; uint64_t single_offload; + int ret; if (port->port_status != RTE_PORT_STOPPED) { printf("Error: Can't config offload when Port %d " @@ -17995,7 +18326,10 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result, return; } - rte_eth_dev_info_get(port_id, &dev_info); + ret = eth_dev_info_get_print_err(port_id, &dev_info); + if (ret != 0) + return; + if (queue_id >= dev_info.nb_rx_queues) { printf("Error: input queue_id should be 0 ... " "%d\n", dev_info.nb_rx_queues - 1); @@ -18023,7 +18357,7 @@ 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|crc_strip|scatter|timestamp|security|keep_crc " + "jumbo_frame|scatter|timestamp|security|keep_crc " "on|off", .tokens = { (void *)&cmd_config_per_queue_rx_offload_result_port, @@ -18081,7 +18415,7 @@ print_tx_offloads(uint64_t offloads) begin = __builtin_ctzll(offloads); end = sizeof(offloads) * CHAR_BIT - __builtin_clzll(offloads); - single_offload = 1 << begin; + single_offload = 1ULL << begin; for (bit = begin; bit < end; bit++) { if (offloads & single_offload) printf(" %s", @@ -18093,16 +18427,20 @@ print_tx_offloads(uint64_t offloads) static void cmd_tx_offload_get_capa_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_tx_offload_get_capa_result *res = parsed_result; struct rte_eth_dev_info dev_info; portid_t port_id = res->port_id; uint64_t queue_offloads; uint64_t port_offloads; + int ret; + + ret = eth_dev_info_get_print_err(port_id, &dev_info); + if (ret != 0) + return; - rte_eth_dev_info_get(port_id, &dev_info); queue_offloads = dev_info.tx_queue_offload_capa; port_offloads = dev_info.tx_offload_capa ^ queue_offloads; @@ -18163,8 +18501,8 @@ cmdline_parse_token_string_t cmd_tx_offload_get_configuration_configuration = static void cmd_tx_offload_get_configuration_parsed( void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_tx_offload_get_configuration_result *res = parsed_result; struct rte_eth_dev_info dev_info; @@ -18174,6 +18512,7 @@ cmd_tx_offload_get_configuration_parsed( uint64_t queue_offloads; uint16_t nb_tx_queues; int q; + int ret; printf("Tx Offloading Configuration of port %d :\n", port_id); @@ -18182,7 +18521,10 @@ cmd_tx_offload_get_configuration_parsed( print_tx_offloads(port_offloads); printf("\n"); - rte_eth_dev_info_get(port_id, &dev_info); + ret = eth_dev_info_get_print_err(port_id, &dev_info); + if (ret != 0) + return; + nb_tx_queues = dev_info.nb_tx_queues; for (q = 0; q < nb_tx_queues; q++) { queue_offloads = port->tx_conf[q].offloads; @@ -18240,8 +18582,7 @@ 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#" - "match_metadata"); + "mt_lockfree#multi_segs#mbuf_fast_free#security"); 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, @@ -18258,13 +18599,13 @@ search_tx_offload(const char *name) single_offload = 1; for (bit = 0; bit < sizeof(single_offload) * CHAR_BIT; bit++) { single_name = rte_eth_dev_tx_offload_name(single_offload); + if (single_name == NULL) + break; if (!strcasecmp(single_name, name)) { found = 1; break; } else if (!strcasecmp(single_name, "UNKNOWN")) break; - else if (single_name == NULL) - break; single_offload <<= 1; } @@ -18276,8 +18617,8 @@ search_tx_offload(const char *name) static void cmd_config_per_port_tx_offload_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_per_port_tx_offload_result *res = parsed_result; portid_t port_id = res->port_id; @@ -18286,6 +18627,7 @@ cmd_config_per_port_tx_offload_parsed(void *parsed_result, uint64_t single_offload; uint16_t nb_tx_queues; int q; + int ret; if (port->port_status != RTE_PORT_STOPPED) { printf("Error: Can't config offload when Port %d " @@ -18299,7 +18641,10 @@ cmd_config_per_port_tx_offload_parsed(void *parsed_result, return; } - rte_eth_dev_info_get(port_id, &dev_info); + ret = eth_dev_info_get_print_err(port_id, &dev_info); + if (ret != 0) + return; + nb_tx_queues = dev_info.nb_tx_queues; if (!strcmp(res->on_off, "on")) { port->dev_conf.txmode.offloads |= single_offload; @@ -18322,8 +18667,7 @@ 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|" - "match_metadata on|off", + "mt_lockfree|multi_segs|mbuf_fast_free|security on|off", .tokens = { (void *)&cmd_config_per_port_tx_offload_result_port, (void *)&cmd_config_per_port_tx_offload_result_config, @@ -18381,8 +18725,8 @@ cmdline_parse_token_string_t cmd_config_per_queue_tx_offload_result_on_off = static void cmd_config_per_queue_tx_offload_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_per_queue_tx_offload_result *res = parsed_result; struct rte_eth_dev_info dev_info; @@ -18390,6 +18734,7 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result, uint16_t queue_id = res->queue_id; struct rte_port *port = &ports[port_id]; uint64_t single_offload; + int ret; if (port->port_status != RTE_PORT_STOPPED) { printf("Error: Can't config offload when Port %d " @@ -18397,7 +18742,10 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result, return; } - rte_eth_dev_info_get(port_id, &dev_info); + ret = eth_dev_info_get_print_err(port_id, &dev_info); + if (ret != 0) + return; + if (queue_id >= dev_info.nb_tx_queues) { printf("Error: input queue_id should be 0 ... " "%d\n", dev_info.nb_tx_queues - 1); @@ -18451,19 +18799,20 @@ struct cmd_config_tx_metadata_specific_result { static void cmd_config_tx_metadata_specific_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_config_tx_metadata_specific_result *res = parsed_result; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; - ports[res->port_id].tx_metadata = rte_cpu_to_be_32(res->value); + ports[res->port_id].tx_metadata = res->value; /* Add/remove callback to insert valid metadata in every Tx packet. */ if (ports[res->port_id].tx_metadata) add_tx_md_callback(res->port_id); else remove_tx_md_callback(res->port_id); + rte_flow_dynf_metadata_register(); } cmdline_parse_token_string_t cmd_config_tx_metadata_specific_port = @@ -18496,6 +18845,89 @@ cmdline_parse_inst_t cmd_config_tx_metadata_specific = { }, }; +/* *** set dynf *** */ +struct cmd_config_tx_dynf_specific_result { + cmdline_fixed_string_t port; + cmdline_fixed_string_t keyword; + uint16_t port_id; + cmdline_fixed_string_t item; + cmdline_fixed_string_t name; + cmdline_fixed_string_t value; +}; + +static void +cmd_config_dynf_specific_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ + struct cmd_config_tx_dynf_specific_result *res = parsed_result; + struct rte_mbuf_dynflag desc_flag; + int flag; + uint64_t old_port_flags; + + if (port_id_is_invalid(res->port_id, ENABLED_WARN)) + return; + flag = rte_mbuf_dynflag_lookup(res->name, NULL); + if (flag <= 0) { + if (strlcpy(desc_flag.name, res->name, + RTE_MBUF_DYN_NAMESIZE) >= RTE_MBUF_DYN_NAMESIZE) { + printf("Flag name too long\n"); + return; + } + desc_flag.flags = 0; + flag = rte_mbuf_dynflag_register(&desc_flag); + if (flag < 0) { + printf("Can't register flag\n"); + return; + } + strcpy(dynf_names[flag], desc_flag.name); + } + old_port_flags = ports[res->port_id].mbuf_dynf; + if (!strcmp(res->value, "set")) { + ports[res->port_id].mbuf_dynf |= 1UL << flag; + if (old_port_flags == 0) + add_tx_dynf_callback(res->port_id); + } else { + ports[res->port_id].mbuf_dynf &= ~(1UL << flag); + if (ports[res->port_id].mbuf_dynf == 0) + remove_tx_dynf_callback(res->port_id); + } +} + +cmdline_parse_token_string_t cmd_config_tx_dynf_specific_port = + TOKEN_STRING_INITIALIZER(struct cmd_config_tx_dynf_specific_result, + keyword, "port"); +cmdline_parse_token_string_t cmd_config_tx_dynf_specific_keyword = + TOKEN_STRING_INITIALIZER(struct cmd_config_tx_dynf_specific_result, + keyword, "config"); +cmdline_parse_token_num_t cmd_config_tx_dynf_specific_port_id = + TOKEN_NUM_INITIALIZER(struct cmd_config_tx_dynf_specific_result, + port_id, UINT16); +cmdline_parse_token_string_t cmd_config_tx_dynf_specific_item = + TOKEN_STRING_INITIALIZER(struct cmd_config_tx_dynf_specific_result, + item, "dynf"); +cmdline_parse_token_string_t cmd_config_tx_dynf_specific_name = + TOKEN_STRING_INITIALIZER(struct cmd_config_tx_dynf_specific_result, + name, NULL); +cmdline_parse_token_string_t cmd_config_tx_dynf_specific_value = + TOKEN_STRING_INITIALIZER(struct cmd_config_tx_dynf_specific_result, + value, "set#clear"); + +cmdline_parse_inst_t cmd_config_tx_dynf_specific = { + .f = cmd_config_dynf_specific_parsed, + .data = NULL, + .help_str = "port config dynf set|clear", + .tokens = { + (void *)&cmd_config_tx_dynf_specific_port, + (void *)&cmd_config_tx_dynf_specific_keyword, + (void *)&cmd_config_tx_dynf_specific_port_id, + (void *)&cmd_config_tx_dynf_specific_item, + (void *)&cmd_config_tx_dynf_specific_name, + (void *)&cmd_config_tx_dynf_specific_value, + NULL, + }, +}; + /* *** display tx_metadata per port configuration *** */ struct cmd_show_tx_metadata_result { cmdline_fixed_string_t cmd_show; @@ -18506,8 +18938,8 @@ struct cmd_show_tx_metadata_result { static void cmd_show_tx_metadata_parsed(void *parsed_result, - __attribute__((unused)) struct cmdline *cl, - __attribute__((unused)) void *data) + __rte_unused struct cmdline *cl, + __rte_unused void *data) { struct cmd_show_tx_metadata_result *res = parsed_result; @@ -18517,7 +18949,7 @@ cmd_show_tx_metadata_parsed(void *parsed_result, } if (!strcmp(res->cmd_keyword, "tx_metadata")) { printf("Port %u tx_metadata: %u\n", res->cmd_pid, - rte_be_to_cpu_32(ports[res->cmd_pid].tx_metadata)); + ports[res->cmd_pid].tx_metadata); } } @@ -18547,6 +18979,342 @@ cmdline_parse_inst_t cmd_show_tx_metadata = { }, }; +/* show port supported ptypes */ + +/* Common result structure for show port ptypes */ +struct cmd_show_port_supported_ptypes_result { + cmdline_fixed_string_t show; + cmdline_fixed_string_t port; + portid_t port_id; + cmdline_fixed_string_t ptypes; +}; + +/* Common CLI fields for show port ptypes */ +cmdline_parse_token_string_t cmd_show_port_supported_ptypes_show = + TOKEN_STRING_INITIALIZER + (struct cmd_show_port_supported_ptypes_result, + show, "show"); +cmdline_parse_token_string_t cmd_show_port_supported_ptypes_port = + TOKEN_STRING_INITIALIZER + (struct cmd_show_port_supported_ptypes_result, + port, "port"); +cmdline_parse_token_num_t cmd_show_port_supported_ptypes_port_id = + TOKEN_NUM_INITIALIZER + (struct cmd_show_port_supported_ptypes_result, + port_id, UINT16); +cmdline_parse_token_string_t cmd_show_port_supported_ptypes_ptypes = + TOKEN_STRING_INITIALIZER + (struct cmd_show_port_supported_ptypes_result, + ptypes, "ptypes"); + +static void +cmd_show_port_supported_ptypes_parsed( + void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ +#define RSVD_PTYPE_MASK 0xf0000000 +#define MAX_PTYPES_PER_LAYER 16 +#define LTYPE_NAMESIZE 32 +#define PTYPE_NAMESIZE 256 + struct cmd_show_port_supported_ptypes_result *res = parsed_result; + char buf[PTYPE_NAMESIZE], ltype[LTYPE_NAMESIZE]; + uint32_t ptype_mask = RTE_PTYPE_L2_MASK; + uint32_t ptypes[MAX_PTYPES_PER_LAYER]; + uint16_t port_id = res->port_id; + int ret, i; + + ret = rte_eth_dev_get_supported_ptypes(port_id, ptype_mask, NULL, 0); + if (ret < 0) + return; + + while (ptype_mask != RSVD_PTYPE_MASK) { + + switch (ptype_mask) { + case RTE_PTYPE_L2_MASK: + strlcpy(ltype, "L2", sizeof(ltype)); + break; + case RTE_PTYPE_L3_MASK: + strlcpy(ltype, "L3", sizeof(ltype)); + break; + case RTE_PTYPE_L4_MASK: + strlcpy(ltype, "L4", sizeof(ltype)); + break; + case RTE_PTYPE_TUNNEL_MASK: + strlcpy(ltype, "Tunnel", sizeof(ltype)); + break; + case RTE_PTYPE_INNER_L2_MASK: + strlcpy(ltype, "Inner L2", sizeof(ltype)); + break; + case RTE_PTYPE_INNER_L3_MASK: + strlcpy(ltype, "Inner L3", sizeof(ltype)); + break; + case RTE_PTYPE_INNER_L4_MASK: + strlcpy(ltype, "Inner L4", sizeof(ltype)); + break; + default: + return; + } + + ret = rte_eth_dev_get_supported_ptypes(res->port_id, + ptype_mask, ptypes, + MAX_PTYPES_PER_LAYER); + + if (ret > 0) + printf("Supported %s ptypes:\n", ltype); + else + printf("%s ptypes unsupported\n", ltype); + + for (i = 0; i < ret; ++i) { + rte_get_ptype_name(ptypes[i], buf, sizeof(buf)); + printf("%s\n", buf); + } + + ptype_mask <<= 4; + } +} + +cmdline_parse_inst_t cmd_show_port_supported_ptypes = { + .f = cmd_show_port_supported_ptypes_parsed, + .data = NULL, + .help_str = "show port ptypes", + .tokens = { + (void *)&cmd_show_port_supported_ptypes_show, + (void *)&cmd_show_port_supported_ptypes_port, + (void *)&cmd_show_port_supported_ptypes_port_id, + (void *)&cmd_show_port_supported_ptypes_ptypes, + NULL, + }, +}; + +/* *** display rx/tx descriptor status *** */ +struct cmd_show_rx_tx_desc_status_result { + cmdline_fixed_string_t cmd_show; + cmdline_fixed_string_t cmd_port; + cmdline_fixed_string_t cmd_keyword; + cmdline_fixed_string_t cmd_desc; + cmdline_fixed_string_t cmd_status; + portid_t cmd_pid; + portid_t cmd_qid; + portid_t cmd_did; +}; + +static void +cmd_show_rx_tx_desc_status_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ + struct cmd_show_rx_tx_desc_status_result *res = parsed_result; + int rc; + + if (!rte_eth_dev_is_valid_port(res->cmd_pid)) { + printf("invalid port id %u\n", res->cmd_pid); + return; + } + + if (!strcmp(res->cmd_keyword, "rxq")) { + rc = rte_eth_rx_descriptor_status(res->cmd_pid, res->cmd_qid, + res->cmd_did); + if (rc < 0) { + printf("Invalid queueid = %d\n", res->cmd_qid); + return; + } + if (rc == RTE_ETH_RX_DESC_AVAIL) + printf("Desc status = AVAILABLE\n"); + else if (rc == RTE_ETH_RX_DESC_DONE) + printf("Desc status = DONE\n"); + else + printf("Desc status = UNAVAILABLE\n"); + } else if (!strcmp(res->cmd_keyword, "txq")) { + rc = rte_eth_tx_descriptor_status(res->cmd_pid, res->cmd_qid, + res->cmd_did); + if (rc < 0) { + printf("Invalid queueid = %d\n", res->cmd_qid); + return; + } + if (rc == RTE_ETH_TX_DESC_FULL) + printf("Desc status = FULL\n"); + else if (rc == RTE_ETH_TX_DESC_DONE) + printf("Desc status = DONE\n"); + else + printf("Desc status = UNAVAILABLE\n"); + } +} + +cmdline_parse_token_string_t cmd_show_rx_tx_desc_status_show = + TOKEN_STRING_INITIALIZER(struct cmd_show_rx_tx_desc_status_result, + cmd_show, "show"); +cmdline_parse_token_string_t cmd_show_rx_tx_desc_status_port = + TOKEN_STRING_INITIALIZER(struct cmd_show_rx_tx_desc_status_result, + cmd_port, "port"); +cmdline_parse_token_num_t cmd_show_rx_tx_desc_status_pid = + TOKEN_NUM_INITIALIZER(struct cmd_show_rx_tx_desc_status_result, + cmd_pid, UINT16); +cmdline_parse_token_string_t cmd_show_rx_tx_desc_status_keyword = + TOKEN_STRING_INITIALIZER(struct cmd_show_rx_tx_desc_status_result, + cmd_keyword, "rxq#txq"); +cmdline_parse_token_num_t cmd_show_rx_tx_desc_status_qid = + TOKEN_NUM_INITIALIZER(struct cmd_show_rx_tx_desc_status_result, + cmd_qid, UINT16); +cmdline_parse_token_string_t cmd_show_rx_tx_desc_status_desc = + TOKEN_STRING_INITIALIZER(struct cmd_show_rx_tx_desc_status_result, + cmd_desc, "desc"); +cmdline_parse_token_num_t cmd_show_rx_tx_desc_status_did = + TOKEN_NUM_INITIALIZER(struct cmd_show_rx_tx_desc_status_result, + cmd_did, UINT16); +cmdline_parse_token_string_t cmd_show_rx_tx_desc_status_status = + TOKEN_STRING_INITIALIZER(struct cmd_show_rx_tx_desc_status_result, + cmd_status, "status"); +cmdline_parse_inst_t cmd_show_rx_tx_desc_status = { + .f = cmd_show_rx_tx_desc_status_parsed, + .data = NULL, + .help_str = "show port rxq|txq desc " + "status", + .tokens = { + (void *)&cmd_show_rx_tx_desc_status_show, + (void *)&cmd_show_rx_tx_desc_status_port, + (void *)&cmd_show_rx_tx_desc_status_pid, + (void *)&cmd_show_rx_tx_desc_status_keyword, + (void *)&cmd_show_rx_tx_desc_status_qid, + (void *)&cmd_show_rx_tx_desc_status_desc, + (void *)&cmd_show_rx_tx_desc_status_did, + (void *)&cmd_show_rx_tx_desc_status_status, + NULL, + }, +}; + +/* Common result structure for set port ptypes */ +struct cmd_set_port_ptypes_result { + cmdline_fixed_string_t set; + cmdline_fixed_string_t port; + portid_t port_id; + cmdline_fixed_string_t ptype_mask; + uint32_t mask; +}; + +/* Common CLI fields for set port ptypes */ +cmdline_parse_token_string_t cmd_set_port_ptypes_set = + TOKEN_STRING_INITIALIZER + (struct cmd_set_port_ptypes_result, + set, "set"); +cmdline_parse_token_string_t cmd_set_port_ptypes_port = + TOKEN_STRING_INITIALIZER + (struct cmd_set_port_ptypes_result, + port, "port"); +cmdline_parse_token_num_t cmd_set_port_ptypes_port_id = + TOKEN_NUM_INITIALIZER + (struct cmd_set_port_ptypes_result, + port_id, UINT16); +cmdline_parse_token_string_t cmd_set_port_ptypes_mask_str = + TOKEN_STRING_INITIALIZER + (struct cmd_set_port_ptypes_result, + ptype_mask, "ptype_mask"); +cmdline_parse_token_num_t cmd_set_port_ptypes_mask_u32 = + TOKEN_NUM_INITIALIZER + (struct cmd_set_port_ptypes_result, + mask, UINT32); + +static void +cmd_set_port_ptypes_parsed( + void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ + struct cmd_set_port_ptypes_result *res = parsed_result; +#define PTYPE_NAMESIZE 256 + char ptype_name[PTYPE_NAMESIZE]; + uint16_t port_id = res->port_id; + uint32_t ptype_mask = res->mask; + int ret, i; + + ret = rte_eth_dev_get_supported_ptypes(port_id, RTE_PTYPE_ALL_MASK, + NULL, 0); + if (ret <= 0) { + printf("Port %d doesn't support any ptypes.\n", port_id); + return; + } + + uint32_t ptypes[ret]; + + ret = rte_eth_dev_set_ptypes(port_id, ptype_mask, ptypes, ret); + if (ret < 0) { + printf("Unable to set requested ptypes for Port %d\n", port_id); + return; + } + + printf("Successfully set following ptypes for Port %d\n", port_id); + for (i = 0; i < ret && ptypes[i] != RTE_PTYPE_UNKNOWN; i++) { + rte_get_ptype_name(ptypes[i], ptype_name, sizeof(ptype_name)); + printf("%s\n", ptype_name); + } + + clear_ptypes = false; +} + +cmdline_parse_inst_t cmd_set_port_ptypes = { + .f = cmd_set_port_ptypes_parsed, + .data = NULL, + .help_str = "set port ptype_mask ", + .tokens = { + (void *)&cmd_set_port_ptypes_set, + (void *)&cmd_set_port_ptypes_port, + (void *)&cmd_set_port_ptypes_port_id, + (void *)&cmd_set_port_ptypes_mask_str, + (void *)&cmd_set_port_ptypes_mask_u32, + NULL, + }, +}; + +/* *** display mac addresses added to a port *** */ +struct cmd_showport_macs_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_showport_macs_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ + struct cmd_showport_macs_result *res = parsed_result; + + if (port_id_is_invalid(res->cmd_pid, ENABLED_WARN)) + return; + + if (!strcmp(res->cmd_keyword, "macs")) + show_macs(res->cmd_pid); + else if (!strcmp(res->cmd_keyword, "mcast_macs")) + show_mcast_macs(res->cmd_pid); +} + +cmdline_parse_token_string_t cmd_showport_macs_show = + TOKEN_STRING_INITIALIZER(struct cmd_showport_macs_result, + cmd_show, "show"); +cmdline_parse_token_string_t cmd_showport_macs_port = + TOKEN_STRING_INITIALIZER(struct cmd_showport_macs_result, + cmd_port, "port"); +cmdline_parse_token_num_t cmd_showport_macs_pid = + TOKEN_NUM_INITIALIZER(struct cmd_showport_macs_result, + cmd_pid, UINT16); +cmdline_parse_token_string_t cmd_showport_macs_keyword = + TOKEN_STRING_INITIALIZER(struct cmd_showport_macs_result, + cmd_keyword, "macs#mcast_macs"); + +cmdline_parse_inst_t cmd_showport_macs = { + .f = cmd_showport_macs_parsed, + .data = NULL, + .help_str = "show port macs|mcast_macs", + .tokens = { + (void *)&cmd_showport_macs_show, + (void *)&cmd_showport_macs_port, + (void *)&cmd_showport_macs_pid, + (void *)&cmd_showport_macs_keyword, + NULL, + }, +}; + /* ******************************************************************************** */ /* list of instructions */ @@ -18558,7 +19326,9 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_showport, (cmdline_parse_inst_t *)&cmd_showqueue, (cmdline_parse_inst_t *)&cmd_showportall, + (cmdline_parse_inst_t *)&cmd_showdevice, (cmdline_parse_inst_t *)&cmd_showcfg, + (cmdline_parse_inst_t *)&cmd_showfwdall, (cmdline_parse_inst_t *)&cmd_start, (cmdline_parse_inst_t *)&cmd_start_tx_first, (cmdline_parse_inst_t *)&cmd_start_tx_first_n, @@ -18645,6 +19415,7 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_operate_specific_port, (cmdline_parse_inst_t *)&cmd_operate_attach_port, (cmdline_parse_inst_t *)&cmd_operate_detach_port, + (cmdline_parse_inst_t *)&cmd_operate_detach_device, (cmdline_parse_inst_t *)&cmd_set_port_setup_on, (cmdline_parse_inst_t *)&cmd_config_speed_all, (cmdline_parse_inst_t *)&cmd_config_speed_specific, @@ -18653,6 +19424,7 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_config_rx_tx, (cmdline_parse_inst_t *)&cmd_config_mtu, (cmdline_parse_inst_t *)&cmd_config_max_pkt_len, + (cmdline_parse_inst_t *)&cmd_config_max_lro_pkt_size, (cmdline_parse_inst_t *)&cmd_config_rx_mode_flag, (cmdline_parse_inst_t *)&cmd_config_rss, (cmdline_parse_inst_t *)&cmd_config_rxtx_ring_size, @@ -18661,6 +19433,7 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_setup_rxtx_queue, (cmdline_parse_inst_t *)&cmd_config_rss_reta, (cmdline_parse_inst_t *)&cmd_showport_reta, + (cmdline_parse_inst_t *)&cmd_showport_macs, (cmdline_parse_inst_t *)&cmd_config_burst, (cmdline_parse_inst_t *)&cmd_config_thresh, (cmdline_parse_inst_t *)&cmd_config_threshold, @@ -18782,6 +19555,8 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_clear_input_set, (cmdline_parse_inst_t *)&cmd_show_vf_stats, (cmdline_parse_inst_t *)&cmd_clear_vf_stats, + (cmdline_parse_inst_t *)&cmd_show_port_supported_ptypes, + (cmdline_parse_inst_t *)&cmd_set_port_ptypes, (cmdline_parse_inst_t *)&cmd_ptype_mapping_get, (cmdline_parse_inst_t *)&cmd_ptype_mapping_replace, (cmdline_parse_inst_t *)&cmd_ptype_mapping_reset, @@ -18832,6 +19607,11 @@ cmdline_parse_ctx_t main_ctx[] = { #endif (cmdline_parse_inst_t *)&cmd_config_tx_metadata_specific, (cmdline_parse_inst_t *)&cmd_show_tx_metadata, + (cmdline_parse_inst_t *)&cmd_show_rx_tx_desc_status, + (cmdline_parse_inst_t *)&cmd_set_raw, + (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, NULL, };