app/testpmd: add csum parse-tunnel command
Add a new command related to csum forward engine: csum parse-tunnel (on|off) (tx_port_id) If enabled, the tunnel packets received by the csum forward engine are parsed and seen as "outer-headers/inner-headers/data". If disabled, the parsing of the csum forward engine stops at the first l4 layer. A tunnel packet is seens as "headers/data" (inner headers are included in payload). Note: the port argument is the tx_port. It's more coherent compared to all other testpmd csum flags. Signed-off-by: Olivier Matz <olivier.matz@6wind.com> Acked-by: Jijiang Liu <jijiang.liu@intel.com>
This commit is contained in:
parent
75032511f3
commit
64fc36064d
@ -327,6 +327,12 @@ static void cmd_help_long_parsed(void *parsed_result,
|
||||
" the forward engine)\n"
|
||||
" Please check the NIC datasheet for HW limits.\n\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"
|
||||
|
||||
@ -2898,6 +2904,8 @@ csum_show(int port_id)
|
||||
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",
|
||||
@ -3020,6 +3028,63 @@ cmdline_parse_inst_t cmd_csum_show = {
|
||||
},
|
||||
};
|
||||
|
||||
/* 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 = "enable/disable parsing of tunnels for csum engine: "
|
||||
"csum parse_tunnel on|off <tx-port>",
|
||||
.tokens = {
|
||||
(void *)&cmd_csum_tunnel_csum,
|
||||
(void *)&cmd_csum_tunnel_parse,
|
||||
(void *)&cmd_csum_tunnel_onoff,
|
||||
(void *)&cmd_csum_tunnel_portid,
|
||||
NULL,
|
||||
},
|
||||
};
|
||||
|
||||
/* *** ENABLE HARDWARE SEGMENTATION IN TX PACKETS *** */
|
||||
struct cmd_tso_set_result {
|
||||
cmdline_fixed_string_t tso;
|
||||
@ -9069,6 +9134,7 @@ cmdline_parse_ctx_t main_ctx[] = {
|
||||
(cmdline_parse_inst_t *)&cmd_tx_vlan_set_pvid,
|
||||
(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,
|
||||
|
@ -373,7 +373,8 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
|
||||
l3_hdr = (char *)eth_hdr + l2_len;
|
||||
|
||||
/* check if it's a supported tunnel (only vxlan for now) */
|
||||
if (l4_proto == IPPROTO_UDP) {
|
||||
if ((testpmd_ol_flags & TESTPMD_TX_OFFLOAD_PARSE_TUNNEL) &&
|
||||
l4_proto == IPPROTO_UDP) {
|
||||
udp_hdr = (struct udp_hdr *)((char *)l3_hdr + l3_len);
|
||||
|
||||
/* check udp destination port, 4789 is the default
|
||||
|
@ -127,8 +127,11 @@ struct fwd_stream {
|
||||
#define TESTPMD_TX_OFFLOAD_SCTP_CKSUM 0x0008
|
||||
/** Offload VxLAN checksum in csum forward engine */
|
||||
#define TESTPMD_TX_OFFLOAD_VXLAN_CKSUM 0x0010
|
||||
/** Parse tunnel in csum forward engine. If set, dissect tunnel headers
|
||||
* of rx packets. If not set, treat inner headers as payload. */
|
||||
#define TESTPMD_TX_OFFLOAD_PARSE_TUNNEL 0x0020
|
||||
/** Insert VLAN header in forward engine */
|
||||
#define TESTPMD_TX_OFFLOAD_INSERT_VLAN 0x0020
|
||||
#define TESTPMD_TX_OFFLOAD_INSERT_VLAN 0x0040
|
||||
|
||||
/**
|
||||
* The data structure associated with each port.
|
||||
|
Loading…
Reference in New Issue
Block a user