app/testpmd: add offload capabilities query

Add two new commands "show port cap <port>" and "show
port cap all" to display what offload capabilities supported
in ports. It will not only display all the capabilities of
the port, but also the enabling condition for each capability
in the running time.

Signed-off-by: Qiming Yang <qiming.yang@intel.com>
Acked-by: Jingjing Wu <jingjing.wu@intel.com>
Acked-by: Beilei Xing <beilei.xing@intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
This commit is contained in:
Qiming Yang 2017-01-16 10:31:26 +08:00 committed by Thomas Monjalon
parent aad0c999b3
commit d28645c741
4 changed files with 196 additions and 10 deletions

View File

@ -186,7 +186,7 @@ static void cmd_help_long_parsed(void *parsed_result,
"Display:\n"
"--------\n\n"
"show port (info|stats|xstats|fdir|stat_qmap|dcb_tc) (port_id|all)\n"
"show port (info|stats|xstats|fdir|stat_qmap|dcb_tc|cap) (port_id|all)\n"
" Display information for port_id, or all.\n\n"
"show port X rss reta (size) (mask0,mask1,...)\n"
@ -5837,6 +5837,9 @@ static void cmd_showportall_parsed(void *parsed_result,
else if (!strcmp(res->what, "dcb_tc"))
FOREACH_PORT(i, ports)
port_dcb_info_display(i);
else if (!strcmp(res->what, "cap"))
FOREACH_PORT(i, ports)
port_offload_cap_display(i);
}
cmdline_parse_token_string_t cmd_showportall_show =
@ -5846,13 +5849,14 @@ cmdline_parse_token_string_t cmd_showportall_port =
TOKEN_STRING_INITIALIZER(struct cmd_showportall_result, port, "port");
cmdline_parse_token_string_t cmd_showportall_what =
TOKEN_STRING_INITIALIZER(struct cmd_showportall_result, what,
"info#stats#xstats#fdir#stat_qmap#dcb_tc");
"info#stats#xstats#fdir#stat_qmap#dcb_tc#cap");
cmdline_parse_token_string_t cmd_showportall_all =
TOKEN_STRING_INITIALIZER(struct cmd_showportall_result, all, "all");
cmdline_parse_inst_t cmd_showportall = {
.f = cmd_showportall_parsed,
.data = NULL,
.help_str = "show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc all",
.help_str = "show|clear port "
"info|stats|xstats|fdir|stat_qmap|dcb_tc|cap all",
.tokens = {
(void *)&cmd_showportall_show,
(void *)&cmd_showportall_port,
@ -5892,6 +5896,8 @@ static void cmd_showport_parsed(void *parsed_result,
nic_stats_mapping_display(res->portnum);
else if (!strcmp(res->what, "dcb_tc"))
port_dcb_info_display(res->portnum);
else if (!strcmp(res->what, "cap"))
port_offload_cap_display(res->portnum);
}
cmdline_parse_token_string_t cmd_showport_show =
@ -5901,14 +5907,15 @@ cmdline_parse_token_string_t cmd_showport_port =
TOKEN_STRING_INITIALIZER(struct cmd_showport_result, port, "port");
cmdline_parse_token_string_t cmd_showport_what =
TOKEN_STRING_INITIALIZER(struct cmd_showport_result, what,
"info#stats#xstats#fdir#stat_qmap#dcb_tc");
"info#stats#xstats#fdir#stat_qmap#dcb_tc#cap");
cmdline_parse_token_num_t cmd_showport_portnum =
TOKEN_NUM_INITIALIZER(struct cmd_showport_result, portnum, UINT8);
cmdline_parse_inst_t cmd_showport = {
.f = cmd_showport_parsed,
.data = NULL,
.help_str = "show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc "
.help_str = "show|clear port "
"info|stats|xstats|fdir|stat_qmap|dcb_tc|cap "
"<port_id>",
.tokens = {
(void *)&cmd_showport_show,

View File

@ -543,6 +543,182 @@ port_infos_display(portid_t port_id)
printf("TXDs number alignment: %hu\n", dev_info.tx_desc_lim.nb_align);
}
void
port_offload_cap_display(portid_t port_id)
{
struct rte_eth_dev *dev;
struct rte_eth_dev_info dev_info;
static const char *info_border = "************";
if (port_id_is_invalid(port_id, ENABLED_WARN))
return;
dev = &rte_eth_devices[port_id];
rte_eth_dev_info_get(port_id, &dev_info);
printf("\n%s Port %d supported offload features: %s\n",
info_border, port_id, info_border);
if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_VLAN_STRIP) {
printf("VLAN stripped: ");
if (dev->data->dev_conf.rxmode.hw_vlan_strip)
printf("on\n");
else
printf("off\n");
}
if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_QINQ_STRIP) {
printf("Double VLANs stripped: ");
if (dev->data->dev_conf.rxmode.hw_vlan_extend)
printf("on\n");
else
printf("off\n");
}
if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_IPV4_CKSUM) {
printf("RX IPv4 checksum: ");
if (dev->data->dev_conf.rxmode.hw_ip_checksum)
printf("on\n");
else
printf("off\n");
}
if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_UDP_CKSUM) {
printf("RX UDP checksum: ");
if (dev->data->dev_conf.rxmode.hw_ip_checksum)
printf("on\n");
else
printf("off\n");
}
if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_TCP_CKSUM) {
printf("RX TCP checksum: ");
if (dev->data->dev_conf.rxmode.hw_ip_checksum)
printf("on\n");
else
printf("off\n");
}
if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM)
printf("RX Outer IPv4 checksum: on");
if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_TCP_LRO) {
printf("Large receive offload: ");
if (dev->data->dev_conf.rxmode.enable_lro)
printf("on\n");
else
printf("off\n");
}
if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_VLAN_INSERT) {
printf("VLAN insert: ");
if (ports[port_id].tx_ol_flags &
TESTPMD_TX_OFFLOAD_INSERT_VLAN)
printf("on\n");
else
printf("off\n");
}
if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_QINQ_INSERT) {
printf("Double VLANs insert: ");
if (ports[port_id].tx_ol_flags &
TESTPMD_TX_OFFLOAD_INSERT_QINQ)
printf("on\n");
else
printf("off\n");
}
if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_IPV4_CKSUM) {
printf("TX IPv4 checksum: ");
if (ports[port_id].tx_ol_flags & TESTPMD_TX_OFFLOAD_IP_CKSUM)
printf("on\n");
else
printf("off\n");
}
if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_UDP_CKSUM) {
printf("TX UDP checksum: ");
if (ports[port_id].tx_ol_flags & TESTPMD_TX_OFFLOAD_UDP_CKSUM)
printf("on\n");
else
printf("off\n");
}
if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_TCP_CKSUM) {
printf("TX TCP checksum: ");
if (ports[port_id].tx_ol_flags & TESTPMD_TX_OFFLOAD_TCP_CKSUM)
printf("on\n");
else
printf("off\n");
}
if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_SCTP_CKSUM) {
printf("TX SCTP checksum: ");
if (ports[port_id].tx_ol_flags & TESTPMD_TX_OFFLOAD_SCTP_CKSUM)
printf("on\n");
else
printf("off\n");
}
if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM) {
printf("TX Outer IPv4 checksum: ");
if (ports[port_id].tx_ol_flags &
TESTPMD_TX_OFFLOAD_OUTER_IP_CKSUM)
printf("on\n");
else
printf("off\n");
}
if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_TCP_TSO) {
printf("TX TCP segmentation: ");
if (ports[port_id].tso_segsz != 0)
printf("on\n");
else
printf("off\n");
}
if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_UDP_TSO) {
printf("TX UDP segmentation: ");
if (ports[port_id].tso_segsz != 0)
printf("on\n");
else
printf("off\n");
}
if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_VXLAN_TNL_TSO) {
printf("TSO for VXLAN tunnel packet: ");
if (ports[port_id].tunnel_tso_segsz)
printf("on\n");
else
printf("off\n");
}
if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_GRE_TNL_TSO) {
printf("TSO for GRE tunnel packet: ");
if (ports[port_id].tunnel_tso_segsz)
printf("on\n");
else
printf("off\n");
}
if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_IPIP_TNL_TSO) {
printf("TSO for IPIP tunnel packet: ");
if (ports[port_id].tunnel_tso_segsz)
printf("on\n");
else
printf("off\n");
}
if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_GENEVE_TNL_TSO) {
printf("TSO for GENEVE tunnel packet: ");
if (ports[port_id].tunnel_tso_segsz)
printf("on\n");
else
printf("off\n");
}
}
int
port_id_is_invalid(portid_t port_id, enum print_warning warning)
{

View File

@ -500,6 +500,7 @@ void nic_xstats_display(portid_t port_id);
void nic_xstats_clear(portid_t port_id);
void nic_stats_mapping_display(portid_t port_id);
void port_infos_display(portid_t port_id);
void port_offload_cap_display(portid_t port_id);
void rx_queue_infos_display(portid_t port_idi, uint16_t queue_id);
void tx_queue_infos_display(portid_t port_idi, uint16_t queue_id);
void fwd_lcores_config_display(void);

View File

@ -51,10 +51,10 @@ If you type a partial command and hit ``<TAB>`` you get a list of the available
testpmd> show port <TAB>
info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc X
info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc all
stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc X
stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc all
info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap X
info [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap all
stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap X
stats [Mul-choice STRING]: show|clear port info|stats|xstats|fdir|stat_qmap|dcb_tc|cap all
...
@ -131,7 +131,7 @@ show port
Display information for a given port or all ports::
testpmd> show port (info|stats|xstats|fdir|stat_qmap|dcb_tc) (port_id|all)
testpmd> show port (info|stats|xstats|fdir|stat_qmap|dcb_tc|cap) (port_id|all)
The available information categories are:
@ -147,6 +147,8 @@ The available information categories are:
* ``dcb_tc``: DCB information such as TC mapping.
* ``cap``: Supported offload capabilities.
For example:
.. code-block:: console