" 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|vxlan) (hw|sw) (port_id)\n"
" Select hardware or software calculation of the"
" checksum with when transmitting a packet using the"
" csum forward engine.\n"
" the forward engine)\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"
}
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;
/* *** 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;
};
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("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(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);
+ }
+
+}
+
+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);
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,
+cmdline_parse_token_string_t cmd_csum_proto =
+ TOKEN_STRING_INITIALIZER(struct cmd_csum_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_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 <port>",
+ "using csum forward engine: csum set ip|tcp|udp|sctp|vxlan hw|sw <port>",
.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 <port>",
+ .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 <port>",
+ .help_str = "enable/disable parsing of tunnels for csum engine: "
+ "csum parse_tunnel on|off <tx-port>",
.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,
},
};
(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,