X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest-pmd%2Fcmdline.c;h=d37610a9d1ff7e4ed143fab2298bafe5957b71b0;hb=1b306359e58cb7b90c7d4130a9e74ab5c340298a;hp=590e4272715add2f56a80d705124e4bc39b2c166;hpb=a09f3e4c50467512970519943d26d9c5753584e0;p=dpdk.git diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 590e427271..d37610a9d1 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -317,17 +317,23 @@ static void cmd_help_long_parsed(void *parsed_result, " Disable hardware insertion of a VLAN header in" " packets sent on a port.\n\n" - "tx_cksum set (ip|udp|tcp|sctp|vxlan) (hw|sw) (port_id)\n" + "csum set (ip|udp|tcp|sctp|outer-ip) (hw|sw) (port_id)\n" " Select hardware or software calculation of the" " checksum with when transmitting a packet using the" " csum forward engine.\n" " ip|udp|tcp|sctp always concern the inner layer.\n" - " vxlan concerns the outer IP and UDP layer (in" - " case the packet is recognized as a vxlan packet by" - " the forward engine)\n" + " outer-ip concerns the outer IP layer in" + " case the packet is recognized as a tunnel packet by" + " the forward engine (vxlan, gre and ipip are supported)\n" " Please check the NIC datasheet for HW limits.\n\n" - "tx_checksum show (port_id)\n" + "csum parse-tunnel (on|off) (tx_port_id)\n" + " If disabled, treat tunnel packets as non-tunneled" + " packets (treat inner headers as payload). The port\n" + " argument is the port used for TX in csum forward" + " engine.\n\n" + + "csum show (port_id)\n" " Display tx checksum offload configuration\n\n" "tso set (segsize) (portid)\n" @@ -2097,17 +2103,17 @@ cmd_config_thresh_parsed(void *parsed_result, } if (!strcmp(res->name, "txpt")) - tx_thresh.pthresh = res->value; + tx_pthresh = res->value; else if(!strcmp(res->name, "txht")) - tx_thresh.hthresh = res->value; + tx_hthresh = res->value; else if(!strcmp(res->name, "txwt")) - tx_thresh.wthresh = res->value; + tx_wthresh = res->value; else if(!strcmp(res->name, "rxpt")) - rx_thresh.pthresh = res->value; + rx_pthresh = res->value; else if(!strcmp(res->name, "rxht")) - rx_thresh.hthresh = res->value; + rx_hthresh = res->value; else if(!strcmp(res->name, "rxwt")) - rx_thresh.wthresh = res->value; + rx_wthresh = res->value; else { printf("Unknown parameter\n"); return; @@ -2316,6 +2322,11 @@ static void cmd_set_list_parsed(void *parsed_result, } parsed_items; unsigned int nb_item; + if (test_done == 0) { + printf("Please stop forwarding first\n"); + return; + } + res = parsed_result; if (!strcmp(res->list_name, "corelist")) { nb_item = parse_item_list(res->list_of_items, "core", @@ -2370,6 +2381,10 @@ static void cmd_set_mask_parsed(void *parsed_result, { struct cmd_setmask_result *res = parsed_result; + if (test_done == 0) { + printf("Please stop forwarding first\n"); + return; + } if (!strcmp(res->mask, "coremask")) set_fwd_lcores_mask(res->hexavalue); else if (!strcmp(res->mask, "portmask")) @@ -2874,8 +2889,8 @@ cmdline_parse_inst_t cmd_tx_vlan_reset = { /* *** ENABLE HARDWARE INSERTION OF CHECKSUM IN TX PACKETS *** */ -struct cmd_tx_cksum_result { - cmdline_fixed_string_t tx_cksum; +struct cmd_csum_result { + cmdline_fixed_string_t csum; cmdline_fixed_string_t mode; cmdline_fixed_string_t proto; cmdline_fixed_string_t hwsw; @@ -2883,14 +2898,62 @@ struct cmd_tx_cksum_result { }; static void -cmd_tx_cksum_parsed(void *parsed_result, +csum_show(int port_id) +{ + struct rte_eth_dev_info dev_info; + uint16_t ol_flags; + + ol_flags = ports[port_id].tx_ol_flags; + printf("Parse tunnel is %s\n", + (ol_flags & TESTPMD_TX_OFFLOAD_PARSE_TUNNEL) ? "on" : "off"); + printf("IP checksum offload is %s\n", + (ol_flags & TESTPMD_TX_OFFLOAD_IP_CKSUM) ? "hw" : "sw"); + printf("UDP checksum offload is %s\n", + (ol_flags & TESTPMD_TX_OFFLOAD_UDP_CKSUM) ? "hw" : "sw"); + printf("TCP checksum offload is %s\n", + (ol_flags & TESTPMD_TX_OFFLOAD_TCP_CKSUM) ? "hw" : "sw"); + printf("SCTP checksum offload is %s\n", + (ol_flags & TESTPMD_TX_OFFLOAD_SCTP_CKSUM) ? "hw" : "sw"); + printf("Outer-Ip checksum offload is %s\n", + (ol_flags & TESTPMD_TX_OFFLOAD_OUTER_IP_CKSUM) ? "hw" : "sw"); + + /* display warnings if configuration is not supported by the NIC */ + rte_eth_dev_info_get(port_id, &dev_info); + if ((ol_flags & TESTPMD_TX_OFFLOAD_IP_CKSUM) && + (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_IPV4_CKSUM) == 0) { + printf("Warning: hardware IP checksum enabled but not " + "supported by port %d\n", port_id); + } + if ((ol_flags & TESTPMD_TX_OFFLOAD_UDP_CKSUM) && + (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_UDP_CKSUM) == 0) { + printf("Warning: hardware UDP checksum enabled but not " + "supported by port %d\n", port_id); + } + if ((ol_flags & TESTPMD_TX_OFFLOAD_TCP_CKSUM) && + (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_TCP_CKSUM) == 0) { + printf("Warning: hardware TCP checksum enabled but not " + "supported by port %d\n", port_id); + } + if ((ol_flags & TESTPMD_TX_OFFLOAD_SCTP_CKSUM) && + (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_SCTP_CKSUM) == 0) { + printf("Warning: hardware SCTP checksum enabled but not " + "supported by port %d\n", port_id); + } + if ((ol_flags & TESTPMD_TX_OFFLOAD_OUTER_IP_CKSUM) && + (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM) == 0) { + printf("Warning: hardware outer IP checksum enabled but not " + "supported by port %d\n", port_id); + } +} + +static void +cmd_csum_parsed(void *parsed_result, __attribute__((unused)) struct cmdline *cl, __attribute__((unused)) void *data) { - struct cmd_tx_cksum_result *res = parsed_result; + struct cmd_csum_result *res = parsed_result; int hw = 0; - uint16_t ol_flags, mask = 0; - struct rte_eth_dev_info dev_info; + uint16_t mask = 0; if (port_id_is_invalid(res->port_id)) { printf("invalid port %d\n", res->port_id); @@ -2910,8 +2973,8 @@ cmd_tx_cksum_parsed(void *parsed_result, mask = TESTPMD_TX_OFFLOAD_TCP_CKSUM; } else if (!strcmp(res->proto, "sctp")) { mask = TESTPMD_TX_OFFLOAD_SCTP_CKSUM; - } else if (!strcmp(res->proto, "vxlan")) { - mask = TESTPMD_TX_OFFLOAD_VXLAN_CKSUM; + } else if (!strcmp(res->proto, "outer-ip")) { + mask = TESTPMD_TX_OFFLOAD_OUTER_IP_CKSUM; } if (hw) @@ -2919,86 +2982,109 @@ cmd_tx_cksum_parsed(void *parsed_result, else ports[res->port_id].tx_ol_flags &= (~mask); } - - ol_flags = ports[res->port_id].tx_ol_flags; - printf("IP checksum offload is %s\n", - (ol_flags & TESTPMD_TX_OFFLOAD_IP_CKSUM) ? "hw" : "sw"); - printf("UDP checksum offload is %s\n", - (ol_flags & TESTPMD_TX_OFFLOAD_UDP_CKSUM) ? "hw" : "sw"); - printf("TCP checksum offload is %s\n", - (ol_flags & TESTPMD_TX_OFFLOAD_TCP_CKSUM) ? "hw" : "sw"); - printf("SCTP checksum offload is %s\n", - (ol_flags & TESTPMD_TX_OFFLOAD_SCTP_CKSUM) ? "hw" : "sw"); - printf("VxLAN checksum offload is %s\n", - (ol_flags & TESTPMD_TX_OFFLOAD_VXLAN_CKSUM) ? "hw" : "sw"); - - /* display warnings if configuration is not supported by the NIC */ - rte_eth_dev_info_get(res->port_id, &dev_info); - if ((ol_flags & TESTPMD_TX_OFFLOAD_IP_CKSUM) && - (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_IPV4_CKSUM) == 0) { - printf("Warning: hardware IP checksum enabled but not " - "supported by port %d\n", res->port_id); - } - if ((ol_flags & TESTPMD_TX_OFFLOAD_UDP_CKSUM) && - (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_UDP_CKSUM) == 0) { - printf("Warning: hardware UDP checksum enabled but not " - "supported by port %d\n", res->port_id); - } - if ((ol_flags & TESTPMD_TX_OFFLOAD_TCP_CKSUM) && - (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_TCP_CKSUM) == 0) { - printf("Warning: hardware TCP checksum enabled but not " - "supported by port %d\n", res->port_id); - } - if ((ol_flags & TESTPMD_TX_OFFLOAD_SCTP_CKSUM) && - (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_SCTP_CKSUM) == 0) { - printf("Warning: hardware SCTP checksum enabled but not " - "supported by port %d\n", res->port_id); - } + csum_show(res->port_id); } -cmdline_parse_token_string_t cmd_tx_cksum_tx_cksum = - TOKEN_STRING_INITIALIZER(struct cmd_tx_cksum_result, - tx_cksum, "tx_checksum"); -cmdline_parse_token_string_t cmd_tx_cksum_mode = - TOKEN_STRING_INITIALIZER(struct cmd_tx_cksum_result, +cmdline_parse_token_string_t cmd_csum_csum = + TOKEN_STRING_INITIALIZER(struct cmd_csum_result, + csum, "csum"); +cmdline_parse_token_string_t cmd_csum_mode = + TOKEN_STRING_INITIALIZER(struct cmd_csum_result, mode, "set"); -cmdline_parse_token_string_t cmd_tx_cksum_proto = - TOKEN_STRING_INITIALIZER(struct cmd_tx_cksum_result, - proto, "ip#tcp#udp#sctp#vxlan"); -cmdline_parse_token_string_t cmd_tx_cksum_hwsw = - TOKEN_STRING_INITIALIZER(struct cmd_tx_cksum_result, +cmdline_parse_token_string_t cmd_csum_proto = + TOKEN_STRING_INITIALIZER(struct cmd_csum_result, + proto, "ip#tcp#udp#sctp#outer-ip"); +cmdline_parse_token_string_t cmd_csum_hwsw = + TOKEN_STRING_INITIALIZER(struct cmd_csum_result, hwsw, "hw#sw"); -cmdline_parse_token_num_t cmd_tx_cksum_portid = - TOKEN_NUM_INITIALIZER(struct cmd_tx_cksum_result, +cmdline_parse_token_num_t cmd_csum_portid = + TOKEN_NUM_INITIALIZER(struct cmd_csum_result, port_id, UINT8); -cmdline_parse_inst_t cmd_tx_cksum_set = { - .f = cmd_tx_cksum_parsed, +cmdline_parse_inst_t cmd_csum_set = { + .f = cmd_csum_parsed, .data = NULL, .help_str = "enable/disable hardware calculation of L3/L4 checksum when " - "using csum forward engine: tx_cksum set ip|tcp|udp|sctp|vxlan hw|sw ", + "using csum forward engine: csum set ip|tcp|udp|sctp|outer-ip hw|sw ", .tokens = { - (void *)&cmd_tx_cksum_tx_cksum, - (void *)&cmd_tx_cksum_mode, - (void *)&cmd_tx_cksum_proto, - (void *)&cmd_tx_cksum_hwsw, - (void *)&cmd_tx_cksum_portid, + (void *)&cmd_csum_csum, + (void *)&cmd_csum_mode, + (void *)&cmd_csum_proto, + (void *)&cmd_csum_hwsw, + (void *)&cmd_csum_portid, NULL, }, }; -cmdline_parse_token_string_t cmd_tx_cksum_mode_show = - TOKEN_STRING_INITIALIZER(struct cmd_tx_cksum_result, +cmdline_parse_token_string_t cmd_csum_mode_show = + TOKEN_STRING_INITIALIZER(struct cmd_csum_result, mode, "show"); -cmdline_parse_inst_t cmd_tx_cksum_show = { - .f = cmd_tx_cksum_parsed, +cmdline_parse_inst_t cmd_csum_show = { + .f = cmd_csum_parsed, + .data = NULL, + .help_str = "show checksum offload configuration: csum show ", + .tokens = { + (void *)&cmd_csum_csum, + (void *)&cmd_csum_mode_show, + (void *)&cmd_csum_portid, + NULL, + }, +}; + +/* Enable/disable tunnel parsing */ +struct cmd_csum_tunnel_result { + cmdline_fixed_string_t csum; + cmdline_fixed_string_t parse; + cmdline_fixed_string_t onoff; + uint8_t port_id; +}; + +static void +cmd_csum_tunnel_parsed(void *parsed_result, + __attribute__((unused)) struct cmdline *cl, + __attribute__((unused)) void *data) +{ + struct cmd_csum_tunnel_result *res = parsed_result; + + if (port_id_is_invalid(res->port_id)) { + printf("invalid port %d\n", res->port_id); + return; + } + + if (!strcmp(res->onoff, "on")) + ports[res->port_id].tx_ol_flags |= + TESTPMD_TX_OFFLOAD_PARSE_TUNNEL; + else + ports[res->port_id].tx_ol_flags &= + (~TESTPMD_TX_OFFLOAD_PARSE_TUNNEL); + + csum_show(res->port_id); +} + +cmdline_parse_token_string_t cmd_csum_tunnel_csum = + TOKEN_STRING_INITIALIZER(struct cmd_csum_tunnel_result, + csum, "csum"); +cmdline_parse_token_string_t cmd_csum_tunnel_parse = + TOKEN_STRING_INITIALIZER(struct cmd_csum_tunnel_result, + parse, "parse_tunnel"); +cmdline_parse_token_string_t cmd_csum_tunnel_onoff = + TOKEN_STRING_INITIALIZER(struct cmd_csum_tunnel_result, + onoff, "on#off"); +cmdline_parse_token_num_t cmd_csum_tunnel_portid = + TOKEN_NUM_INITIALIZER(struct cmd_csum_tunnel_result, + port_id, UINT8); + +cmdline_parse_inst_t cmd_csum_tunnel = { + .f = cmd_csum_tunnel_parsed, .data = NULL, - .help_str = "show checksum offload configuration: tx_cksum show ", + .help_str = "enable/disable parsing of tunnels for csum engine: " + "csum parse_tunnel on|off ", .tokens = { - (void *)&cmd_tx_cksum_tx_cksum, - (void *)&cmd_tx_cksum_mode_show, - (void *)&cmd_tx_cksum_portid, + (void *)&cmd_csum_tunnel_csum, + (void *)&cmd_csum_tunnel_parse, + (void *)&cmd_csum_tunnel_onoff, + (void *)&cmd_csum_tunnel_portid, NULL, }, }; @@ -5108,7 +5194,7 @@ cmd_link_flow_ctrl_set_parsed(void *parsed_result, struct cmd_link_flow_ctrl_set_result *res = parsed_result; cmdline_parse_inst_t *cmd = data; struct rte_eth_fc_conf fc_conf; - int rx_fc_en, tx_fc_en; + int rx_fc_en, tx_fc_en = 0; int ret; /* @@ -5584,7 +5670,7 @@ cmdline_parse_token_string_t cmd_showport_what = TOKEN_STRING_INITIALIZER(struct cmd_showport_result, what, "info#stats#xstats#fdir#stat_qmap"); cmdline_parse_token_num_t cmd_showport_portnum = - TOKEN_NUM_INITIALIZER(struct cmd_showport_result, portnum, INT32); + TOKEN_NUM_INITIALIZER(struct cmd_showport_result, portnum, UINT8); cmdline_parse_inst_t cmd_showport = { .f = cmd_showport_parsed, @@ -9050,8 +9136,9 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_tx_vlan_set, (cmdline_parse_inst_t *)&cmd_tx_vlan_reset, (cmdline_parse_inst_t *)&cmd_tx_vlan_set_pvid, - (cmdline_parse_inst_t *)&cmd_tx_cksum_set, - (cmdline_parse_inst_t *)&cmd_tx_cksum_show, + (cmdline_parse_inst_t *)&cmd_csum_set, + (cmdline_parse_inst_t *)&cmd_csum_show, + (cmdline_parse_inst_t *)&cmd_csum_tunnel, (cmdline_parse_inst_t *)&cmd_tso_set, (cmdline_parse_inst_t *)&cmd_tso_show, (cmdline_parse_inst_t *)&cmd_link_flow_control_set,