All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Kavanagh, Mark B" <mark.b.kavanagh@intel.com>
To: "Ananyev, Konstantin" <konstantin.ananyev@intel.com>,
	"dev@dpdk.org" <dev@dpdk.org>
Cc: "Hu, Jiayu" <jiayu.hu@intel.com>,
	"Tan, Jianfeng" <jianfeng.tan@intel.com>,
	"Yigit, Ferruh" <ferruh.yigit@intel.com>,
	"thomas@monjalon.net" <thomas@monjalon.net>
Subject: Re: [PATCH v6 5/6] app/testpmd: enable TCP/IPv4, VxLAN and GRE GSO
Date: Wed, 4 Oct 2017 16:23:27 +0000	[thread overview]
Message-ID: <DC5AD7FA266D86499789B1BCAEC715F8D3A1F2D5@IRSMSX101.ger.corp.intel.com> (raw)
In-Reply-To: <2601191342CEEE43887BDE71AB9772585FAA3E62@IRSMSX103.ger.corp.intel.com>



>-----Original Message-----
>From: Ananyev, Konstantin
>Sent: Wednesday, October 4, 2017 4:09 PM
>To: Kavanagh, Mark B <mark.b.kavanagh@intel.com>; dev@dpdk.org
>Cc: Hu, Jiayu <jiayu.hu@intel.com>; Tan, Jianfeng <jianfeng.tan@intel.com>;
>Yigit, Ferruh <ferruh.yigit@intel.com>; thomas@monjalon.net
>Subject: RE: [PATCH v6 5/6] app/testpmd: enable TCP/IPv4, VxLAN and GRE GSO
>
>
>
>> -----Original Message-----
>> From: Kavanagh, Mark B
>> Sent: Monday, October 2, 2017 5:46 PM
>> To: dev@dpdk.org
>> Cc: Hu, Jiayu <jiayu.hu@intel.com>; Tan, Jianfeng <jianfeng.tan@intel.com>;
>Ananyev, Konstantin <konstantin.ananyev@intel.com>; Yigit,
>> Ferruh <ferruh.yigit@intel.com>; thomas@monjalon.net; Kavanagh, Mark B
><mark.b.kavanagh@intel.com>
>> Subject: [PATCH v6 5/6] app/testpmd: enable TCP/IPv4, VxLAN and GRE GSO
>>
>> From: Jiayu Hu <jiayu.hu@intel.com>
>>
>> This patch adds GSO support to the csum forwarding engine. Oversized
>> packets transmitted over a GSO-enabled port will undergo segmentation
>> (with the exception of packet-types unsupported by the GSO library).
>> GSO support is disabled by default.
>>
>> GSO support may be toggled on a per-port basis, using the command:
>>
>>         "set port <port_id> gso on|off"
>>
>> The maximum packet length (including the packet header and payload) for
>> GSO segments may be set with the command:
>>
>>         "set gso segsz <length>"
>>
>> Show GSO configuration for a given port with the command:
>>
>> 	"show port <port_id> gso"
>>
>> Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
>> Signed-off-by: Mark Kavanagh <mark.b.kavanagh@intel.com>
>> ---
>>  app/test-pmd/cmdline.c                      | 178
>++++++++++++++++++++++++++++
>>  app/test-pmd/config.c                       |  24 ++++
>>  app/test-pmd/csumonly.c                     |  69 ++++++++++-
>>  app/test-pmd/testpmd.c                      |  13 ++
>>  app/test-pmd/testpmd.h                      |  10 ++
>>  doc/guides/testpmd_app_ug/testpmd_funcs.rst |  46 +++++++
>>  6 files changed, 335 insertions(+), 5 deletions(-)
>>
>> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
>> index ccdf239..05b0ce8 100644
>> --- a/app/test-pmd/cmdline.c
>> +++ b/app/test-pmd/cmdline.c
>> @@ -431,6 +431,17 @@ static void cmd_help_long_parsed(void *parsed_result,
>>  			"    Set max flow number and max packet number per-flow"
>>  			" for GRO.\n\n"
>>
>> +			"set port (port_id) gso (on|off)"
>> +			"    Enable or disable Generic Segmentation Offload in"
>> +			" csum forwarding engine.\n\n"
>> +
>> +			"set gso segsz (length)\n"
>> +			"    Set max packet length for output GSO segments,"
>> +			" including packet header and payload.\n\n"
>
>Probably a  good future improvement would be to allow user to specify gso_type
>too.

Would you like to see that change implemented in time for the 17.11 release?

>
>> +
>> +			"show port (port_id) gso\n"
>> +			"    Show GSO configuration.\n\n"
>> +
>>  			"set fwd (%s)\n"
>>  			"    Set packet forwarding mode.\n\n"
>>
>> @@ -3967,6 +3978,170 @@ struct cmd_gro_set_result {
>>  	},
>>  };
>>
>> +/* *** ENABLE/DISABLE GSO *** */
>> +struct cmd_gso_enable_result {
>> +	cmdline_fixed_string_t cmd_set;
>> +	cmdline_fixed_string_t cmd_port;
>> +	cmdline_fixed_string_t cmd_keyword;
>> +	cmdline_fixed_string_t cmd_mode;
>> +	uint8_t cmd_pid;
>> +};
>> +
>> +static void
>> +cmd_gso_enable_parsed(void *parsed_result,
>> +		__attribute__((unused)) struct cmdline *cl,
>> +		__attribute__((unused)) void *data)
>> +{
>> +	struct cmd_gso_enable_result *res;
>> +
>> +	res = parsed_result;
>> +	if (!strcmp(res->cmd_keyword, "gso"))
>> +		setup_gso(res->cmd_mode, res->cmd_pid);
>> +}
>> +
>> +cmdline_parse_token_string_t cmd_gso_enable_set =
>> +	TOKEN_STRING_INITIALIZER(struct cmd_gso_enable_result,
>> +			cmd_set, "set");
>> +cmdline_parse_token_string_t cmd_gso_enable_port =
>> +	TOKEN_STRING_INITIALIZER(struct cmd_gso_enable_result,
>> +			cmd_port, "port");
>> +cmdline_parse_token_string_t cmd_gso_enable_keyword =
>> +	TOKEN_STRING_INITIALIZER(struct cmd_gso_enable_result,
>> +			cmd_keyword, "gso");
>> +cmdline_parse_token_string_t cmd_gso_enable_mode =
>> +	TOKEN_STRING_INITIALIZER(struct cmd_gso_enable_result,
>> +			cmd_mode, "on#off");
>> +cmdline_parse_token_num_t cmd_gso_enable_pid =
>> +	TOKEN_NUM_INITIALIZER(struct cmd_gso_enable_result,
>> +			cmd_pid, UINT8);
>> +
>> +cmdline_parse_inst_t cmd_gso_enable = {
>> +	.f = cmd_gso_enable_parsed,
>> +	.data = NULL,
>> +	.help_str = "set port <port_id> gso on|off",
>> +	.tokens = {
>> +		(void *)&cmd_gso_enable_set,
>> +		(void *)&cmd_gso_enable_port,
>> +		(void *)&cmd_gso_enable_pid,
>> +		(void *)&cmd_gso_enable_keyword,
>> +		(void *)&cmd_gso_enable_mode,
>> +		NULL,
>> +	},
>> +};
>> +
>> +/* *** SET MAX PACKET LENGTH FOR GSO SEGMENTS *** */
>> +struct cmd_gso_size_result {
>> +	cmdline_fixed_string_t cmd_set;
>> +	cmdline_fixed_string_t cmd_keyword;
>> +	cmdline_fixed_string_t cmd_segsz;
>> +	uint16_t cmd_size;
>> +};
>> +
>> +static void
>> +cmd_gso_size_parsed(void *parsed_result,
>> +		       __attribute__((unused)) struct cmdline *cl,
>> +		       __attribute__((unused)) void *data)
>> +{
>> +	struct cmd_gso_size_result *res = parsed_result;
>> +
>> +	if (test_done == 0) {
>> +		printf("Before setting GSO segsz, please first stop fowarding\n");
>> +		return;
>> +	}
>> +
>> +	if (!strcmp(res->cmd_keyword, "gso") &&
>> +			!strcmp(res->cmd_segsz, "segsz")) {
>> +		if (res->cmd_size == 0) {
>
>As your gso_size includes packet header too, you probably shouldn't allow
>gso_size less
>then some minimal value of l2_len + l3_len + l4_len + ...
>Another alternative change gso_ctx.gso_size to count only payload size.

Okay - I'll take a look at this, thanks.

>
>> +			printf("gso_size should be larger than 0."
>> +					" Please input a legal value\n");
>> +		} else
>> +			gso_max_segment_size = res->cmd_size;
>> +	}
>> +}
>> +
>> +cmdline_parse_token_string_t cmd_gso_size_set =
>> +	TOKEN_STRING_INITIALIZER(struct cmd_gso_size_result,
>> +				cmd_set, "set");
>> +cmdline_parse_token_string_t cmd_gso_size_keyword =
>> +	TOKEN_STRING_INITIALIZER(struct cmd_gso_size_result,
>> +				cmd_keyword, "gso");
>> +cmdline_parse_token_string_t cmd_gso_size_segsz =
>> +	TOKEN_STRING_INITIALIZER(struct cmd_gso_size_result,
>> +				cmd_segsz, "segsz");
>> +cmdline_parse_token_num_t cmd_gso_size_size =
>> +	TOKEN_NUM_INITIALIZER(struct cmd_gso_size_result,
>> +				cmd_size, UINT16);
>> +
>> +cmdline_parse_inst_t cmd_gso_size = {
>> +	.f = cmd_gso_size_parsed,
>> +	.data = NULL,
>> +	.help_str = "set gso segsz <length>",
>> +	.tokens = {
>> +		(void *)&cmd_gso_size_set,
>> +		(void *)&cmd_gso_size_keyword,
>> +		(void *)&cmd_gso_size_segsz,
>> +		(void *)&cmd_gso_size_size,
>> +		NULL,
>> +	},
>> +};
>> +
>> +/* *** SHOW GSO CONFIGURATION *** */
>> +struct cmd_gso_show_result {
>> +	cmdline_fixed_string_t cmd_show;
>> +	cmdline_fixed_string_t cmd_port;
>> +	cmdline_fixed_string_t cmd_keyword;
>> +	uint8_t cmd_pid;
>> +};
>> +
>> +static void
>> +cmd_gso_show_parsed(void *parsed_result,
>> +		       __attribute__((unused)) struct cmdline *cl,
>> +		       __attribute__((unused)) void *data)
>> +{
>> +	struct cmd_gso_show_result *res = parsed_result;
>> +
>> +	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, "gso")) {
>> +		if (gso_ports[res->cmd_pid].enable) {
>> +			printf("Max GSO'd packet size: %uB\n"
>> +					"Supported GSO types: TCP/IPv4, "
>> +					"VxLAN with inner TCP/IPv4 packet, "
>> +					"GRE with inner TCP/IPv4  packet\n",
>> +					gso_max_segment_size);
>> +		} else
>> +			printf("GSO is not enabled on Port %u\n", res->cmd_pid);
>> +	}
>> +}
>> +
>> +cmdline_parse_token_string_t cmd_gso_show_show =
>> +TOKEN_STRING_INITIALIZER(struct cmd_gso_show_result,
>> +		cmd_show, "show");
>> +cmdline_parse_token_string_t cmd_gso_show_port =
>> +TOKEN_STRING_INITIALIZER(struct cmd_gso_show_result,
>> +		cmd_port, "port");
>> +cmdline_parse_token_string_t cmd_gso_show_keyword =
>> +	TOKEN_STRING_INITIALIZER(struct cmd_gso_show_result,
>> +				cmd_keyword, "gso");
>> +cmdline_parse_token_num_t cmd_gso_show_pid =
>> +	TOKEN_NUM_INITIALIZER(struct cmd_gso_show_result,
>> +				cmd_pid, UINT8);
>> +
>> +cmdline_parse_inst_t cmd_gso_show = {
>> +	.f = cmd_gso_show_parsed,
>> +	.data = NULL,
>> +	.help_str = "show port <port_id> gso",
>> +	.tokens = {
>> +		(void *)&cmd_gso_show_show,
>> +		(void *)&cmd_gso_show_port,
>> +		(void *)&cmd_gso_show_pid,
>> +		(void *)&cmd_gso_show_keyword,
>> +		NULL,
>> +	},
>> +};
>> +
>>  /* *** ENABLE/DISABLE FLUSH ON RX STREAMS *** */
>>  struct cmd_set_flush_rx {
>>  	cmdline_fixed_string_t set;
>> @@ -14255,6 +14430,9 @@ struct cmd_cmdfile_result {
>>  	(cmdline_parse_inst_t *)&cmd_tunnel_tso_show,
>>  	(cmdline_parse_inst_t *)&cmd_enable_gro,
>>  	(cmdline_parse_inst_t *)&cmd_gro_set,
>> +	(cmdline_parse_inst_t *)&cmd_gso_enable,
>> +	(cmdline_parse_inst_t *)&cmd_gso_size,
>> +	(cmdline_parse_inst_t *)&cmd_gso_show,
>>  	(cmdline_parse_inst_t *)&cmd_link_flow_control_set,
>>  	(cmdline_parse_inst_t *)&cmd_link_flow_control_set_rx,
>>  	(cmdline_parse_inst_t *)&cmd_link_flow_control_set_tx,
>> diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
>> index 3ae3e1c..88d09d0 100644
>> --- a/app/test-pmd/config.c
>> +++ b/app/test-pmd/config.c
>> @@ -2454,6 +2454,30 @@ struct igb_ring_desc_16_bytes {
>>  	}
>>  }
>>
>> +void
>> +setup_gso(const char *mode, uint8_t port_id)
>> +{
>> +	if (!rte_eth_dev_is_valid_port(port_id)) {
>> +		printf("invalid port id %u\n", port_id);
>> +		return;
>> +	}
>> +	if (strcmp(mode, "on") == 0) {
>> +		if (test_done == 0) {
>> +			printf("before enabling GSO,"
>> +					" please stop forwarding first\n");
>> +			return;
>> +		}
>> +		gso_ports[port_id].enable = 1;
>> +	} else if (strcmp(mode, "off") == 0) {
>> +		if (test_done == 0) {
>> +			printf("before disabling GSO,"
>> +					" please stop forwarding first\n");
>> +			return;
>> +		}
>> +		gso_ports[port_id].enable = 0;
>> +	}
>> +}
>> +
>>  char*
>>  list_pkt_forwarding_modes(void)
>>  {
>> diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c
>> index 90c8119..bd1a287 100644
>> --- a/app/test-pmd/csumonly.c
>> +++ b/app/test-pmd/csumonly.c
>> @@ -70,6 +70,8 @@
>>  #include <rte_string_fns.h>
>>  #include <rte_flow.h>
>>  #include <rte_gro.h>
>> +#include <rte_gso.h>
>> +
>>  #include "testpmd.h"
>>
>>  #define IP_DEFTTL  64   /* from RFC 1340. */
>> @@ -91,6 +93,7 @@
>>  /* structure that caches offload info for the current packet */
>>  struct testpmd_offload_info {
>>  	uint16_t ethertype;
>> +	uint8_t gso_enable;
>>  	uint16_t l2_len;
>>  	uint16_t l3_len;
>>  	uint16_t l4_len;
>> @@ -381,6 +384,8 @@ struct simple_gre_hdr {
>>  				get_udptcp_checksum(l3_hdr, tcp_hdr,
>>  					info->ethertype);
>>  		}
>> +		if (info->gso_enable)
>> +			ol_flags |= PKT_TX_TCP_SEG;
>>  	} else if (info->l4_proto == IPPROTO_SCTP) {
>>  		sctp_hdr = (struct sctp_hdr *)((char *)l3_hdr + info->l3_len);
>>  		sctp_hdr->cksum = 0;
>> @@ -627,6 +632,9 @@ struct simple_gre_hdr {
>>  pkt_burst_checksum_forward(struct fwd_stream *fs)
>>  {
>>  	struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
>> +	struct rte_mbuf *gso_segments[GSO_MAX_PKT_BURST];
>> +	struct rte_gso_ctx *gso_ctx;
>> +	struct rte_mbuf **tx_pkts_burst;
>>  	struct rte_port *txp;
>>  	struct rte_mbuf *m, *p;
>>  	struct ether_hdr *eth_hdr;
>> @@ -634,13 +642,15 @@ struct simple_gre_hdr {
>>  	uint16_t nb_rx;
>>  	uint16_t nb_tx;
>>  	uint16_t nb_prep;
>> -	uint16_t i;
>> +	uint16_t i, j;
>>  	uint64_t rx_ol_flags, tx_ol_flags;
>>  	uint16_t testpmd_ol_flags;
>>  	uint32_t retry;
>>  	uint32_t rx_bad_ip_csum;
>>  	uint32_t rx_bad_l4_csum;
>>  	struct testpmd_offload_info info;
>> +	uint16_t nb_segments = 0;
>> +	int ret;
>>
>>  #ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES
>>  	uint64_t start_tsc;
>> @@ -674,6 +684,8 @@ struct simple_gre_hdr {
>>  	memset(&info, 0, sizeof(info));
>>  	info.tso_segsz = txp->tso_segsz;
>>  	info.tunnel_tso_segsz = txp->tunnel_tso_segsz;
>> +	if (gso_ports[fs->tx_port].enable)
>> +		info.gso_enable = 1;
>>
>>  	for (i = 0; i < nb_rx; i++) {
>>  		if (likely(i < nb_rx - 1))
>> @@ -851,13 +863,59 @@ struct simple_gre_hdr {
>>  		}
>>  	}
>>
>> +	if (gso_ports[fs->tx_port].enable == 0)
>> +		tx_pkts_burst = pkts_burst;
>> +	else {
>> +		gso_ctx = &(current_fwd_lcore()->gso_ctx);
>> +		gso_ctx->gso_size = gso_max_segment_size;
>> +		for (i = 0; i < nb_rx; i++) {
>
>It seems quite a lot of code to handle an error case, which I suppose
>will happen pretty rare.
>Why not just:
>
>ret = rte_gso_segment(pkts_burst[i], gso_ctx,
>					&gso_segments[nb_segments],
>					RTE_DIM(gso_segments) - nb_segments);
>If (ret < 0)  {
>    RTE_LOG(DEBUG, ....);
>     rte_free(pkts_burst[i]);
>} else
>   nb_segments += ret;

Ditto - thanks!

>
>
>
>> +			if (unlikely(nb_rx - i >= GSO_MAX_PKT_BURST -
>> +						nb_segments)) {
>> +				/*
>> +				 * insufficient space in gso_segments,
>> +				 * stop GSO.
>> +				 */
>> +				for (j = i; j < GSO_MAX_PKT_BURST -
>> +						nb_segments; j++) {
>> +					pkts_burst[j]->ol_flags &=
>> +						(~PKT_TX_TCP_SEG);
>> +					gso_segments[nb_segments++] =
>> +						pkts_burst[j];
>> +				}
>> +				for (; j < nb_rx; j++)
>> +					rte_pktmbuf_free(pkts_burst[j]);
>> +				break;
>> +			}
>> +			ret = rte_gso_segment(pkts_burst[i], gso_ctx,
>> +					&gso_segments[nb_segments],
>> +					GSO_MAX_PKT_BURST - nb_segments);
>> +			if (ret >= 1)
>> +				nb_segments += ret;
>> +			else if (ret < 0) {
>> +				/*
>> +				 * insufficient MBUFs or space in
>> +				 * gso_segments, stop GSO.
>> +				 */
>> +				for (j = i; j < nb_rx; j++) {
>> +					pkts_burst[j]->ol_flags &=
>> +						(~PKT_TX_TCP_SEG);
>> +					gso_segments[nb_segments++] =
>> +						pkts_burst[j];
>> +				}
>> +				break;
>> +			}
>> +		}
>> +		tx_pkts_burst = gso_segments;
>> +		nb_rx = nb_segments;
>> +	}
>> +
>>  	nb_prep = rte_eth_tx_prepare(fs->tx_port, fs->tx_queue,
>> -			pkts_burst, nb_rx);
>> +			tx_pkts_burst, nb_rx);
>>  	if (nb_prep != nb_rx)
>>  		printf("Preparing packet burst to transmit failed: %s\n",
>>  				rte_strerror(rte_errno));
>>
>> -	nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, pkts_burst,
>> +	nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, tx_pkts_burst,
>>  			nb_prep);
>>
>>  	/*
>> @@ -868,7 +926,7 @@ struct simple_gre_hdr {
>>  		while (nb_tx < nb_rx && retry++ < burst_tx_retry_num) {
>>  			rte_delay_us(burst_tx_delay_time);
>>  			nb_tx += rte_eth_tx_burst(fs->tx_port, fs->tx_queue,
>> -					&pkts_burst[nb_tx], nb_rx - nb_tx);
>> +					&tx_pkts_burst[nb_tx], nb_rx - nb_tx);
>>  		}
>>  	}
>>  	fs->tx_packets += nb_tx;
>> @@ -881,9 +939,10 @@ struct simple_gre_hdr {
>>  	if (unlikely(nb_tx < nb_rx)) {
>>  		fs->fwd_dropped += (nb_rx - nb_tx);
>>  		do {
>> -			rte_pktmbuf_free(pkts_burst[nb_tx]);
>> +			rte_pktmbuf_free(tx_pkts_burst[nb_tx]);
>>  		} while (++nb_tx < nb_rx);
>>  	}
>> +
>>  #ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES
>>  	end_tsc = rte_rdtsc();
>>  	core_cycles = (end_tsc - start_tsc);
>> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
>> index e097ee0..97e349d 100644
>> --- a/app/test-pmd/testpmd.c
>> +++ b/app/test-pmd/testpmd.c
>> @@ -400,6 +400,9 @@ static int eth_event_callback(uint8_t port_id,
>>   */
>>  static int all_ports_started(void);
>>
>> +struct gso_status gso_ports[RTE_MAX_ETHPORTS];
>> +uint16_t gso_max_segment_size = ETHER_MAX_LEN - ETHER_CRC_LEN;
>> +
>>  /*
>>   * Helper function to check if socket is already discovered.
>>   * If yes, return positive value. If not, return zero.
>> @@ -570,6 +573,7 @@ static int eth_event_callback(uint8_t port_id,
>>  	unsigned int nb_mbuf_per_pool;
>>  	lcoreid_t  lc_id;
>>  	uint8_t port_per_socket[RTE_MAX_NUMA_NODES];
>> +	uint32_t gso_types = 0;
>>
>>  	memset(port_per_socket,0,RTE_MAX_NUMA_NODES);
>>
>> @@ -654,6 +658,8 @@ static int eth_event_callback(uint8_t port_id,
>>
>>  	init_port_config();
>>
>> +	gso_types = DEV_TX_OFFLOAD_TCP_TSO | DEV_TX_OFFLOAD_VXLAN_TNL_TSO |
>> +		DEV_TX_OFFLOAD_GRE_TNL_TSO;
>>  	/*
>>  	 * Records which Mbuf pool to use by each logical core, if needed.
>>  	 */
>> @@ -664,6 +670,13 @@ static int eth_event_callback(uint8_t port_id,
>>  		if (mbp == NULL)
>>  			mbp = mbuf_pool_find(0);
>>  		fwd_lcores[lc_id]->mbp = mbp;
>> +		/* initialize GSO context */
>> +		fwd_lcores[lc_id]->gso_ctx.direct_pool = mbp;
>> +		fwd_lcores[lc_id]->gso_ctx.indirect_pool = mbp;
>> +		fwd_lcores[lc_id]->gso_ctx.gso_types = gso_types;
>> +		fwd_lcores[lc_id]->gso_ctx.gso_size = ETHER_MAX_LEN -
>> +			ETHER_CRC_LEN;
>> +		fwd_lcores[lc_id]->gso_ctx.ipid_flag = !RTE_GSO_IPID_FIXED;
>
>Just
>fwd_lcores[lc_id]->gso_ctx.ipid_flag = 0;
>should do here.

Agreed.

Thanks again,
Mark 


>
>Konstantin

  reply	other threads:[~2017-10-04 16:28 UTC|newest]

Thread overview: 157+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-24 14:15 [PATCH 0/5] Support TCP/IPv4, VxLAN and GRE GSO in DPDK Jiayu Hu
2017-08-24 14:15 ` [PATCH 1/5] lib: add Generic Segmentation Offload API framework Jiayu Hu
2017-08-30  1:38   ` Ananyev, Konstantin
2017-08-30  7:57     ` Jiayu Hu
2017-08-24 14:15 ` [PATCH 2/5] gso/lib: add TCP/IPv4 GSO support Jiayu Hu
2017-08-30  1:38   ` Ananyev, Konstantin
2017-08-30  2:55     ` Jiayu Hu
2017-08-30  9:25       ` Kavanagh, Mark B
2017-08-30  9:39         ` Ananyev, Konstantin
2017-08-30  9:59           ` Ananyev, Konstantin
2017-08-30 13:27             ` Kavanagh, Mark B
2017-08-30  9:03     ` Jiayu Hu
2017-09-04  3:31     ` Jiayu Hu
2017-09-04  9:54       ` Ananyev, Konstantin
2017-09-05  1:09         ` Hu, Jiayu
2017-09-11 13:04           ` Ananyev, Konstantin
2017-08-24 14:15 ` [PATCH 3/5] lib/gso: add VxLAN " Jiayu Hu
2017-08-24 14:15 ` [PATCH 4/5] lib/gso: add GRE " Jiayu Hu
2017-08-24 14:15 ` [PATCH 5/5] app/testpmd: enable TCP/IPv4, VxLAN and GRE GSO Jiayu Hu
2017-08-30  1:37 ` [PATCH 0/5] Support TCP/IPv4, VxLAN and GRE GSO in DPDK Ananyev, Konstantin
2017-08-30  7:36   ` Jiayu Hu
2017-08-30 10:49     ` Ananyev, Konstantin
2017-08-30 13:32       ` Kavanagh, Mark B
2017-09-05  7:57 ` [PATCH v2 " Jiayu Hu
2017-09-05  7:57   ` [PATCH v2 1/5] gso: add Generic Segmentation Offload API framework Jiayu Hu
2017-09-05  7:57   ` [PATCH v2 2/5] gso: add TCP/IPv4 GSO support Jiayu Hu
2017-09-05  7:57   ` [PATCH v2 3/5] gso: add VxLAN " Jiayu Hu
2017-09-05  7:57   ` [PATCH v2 4/5] gso: add GRE " Jiayu Hu
2017-09-05  7:57   ` [PATCH v2 5/5] app/testpmd: enable TCP/IPv4, VxLAN and GRE GSO Jiayu Hu
2017-09-12  2:43   ` [PATCH v3 0/5] Support TCP/IPv4, VxLAN and GRE GSO in DPDK Jiayu Hu
2017-09-12  2:43     ` [PATCH v3 1/5] gso: add Generic Segmentation Offload API framework Jiayu Hu
2017-09-12 10:36       ` Ananyev, Konstantin
2017-09-13  2:11         ` Jiayu Hu
2017-09-14 18:33       ` Ferruh Yigit
2017-09-15  1:12         ` Hu, Jiayu
2017-09-12  2:43     ` [PATCH v3 2/5] gso: add TCP/IPv4 GSO support Jiayu Hu
2017-09-12 11:17       ` Ananyev, Konstantin
2017-09-13  2:48         ` Jiayu Hu
2017-09-13  9:38           ` Ananyev, Konstantin
2017-09-13 10:23             ` Hu, Jiayu
2017-09-13 14:52             ` Kavanagh, Mark B
2017-09-13 15:13               ` Ananyev, Konstantin
2017-09-14  0:59                 ` Hu, Jiayu
2017-09-14  8:35                   ` Kavanagh, Mark B
2017-09-14  8:39                     ` Ananyev, Konstantin
2017-09-14  9:00                       ` Kavanagh, Mark B
2017-09-14  9:10                         ` Ananyev, Konstantin
2017-09-14  9:35                           ` Kavanagh, Mark B
2017-09-12 14:17       ` Ananyev, Konstantin
2017-09-13 10:44         ` Jiayu Hu
2017-09-13 22:10           ` Ananyev, Konstantin
2017-09-14  6:07             ` Jiayu Hu
2017-09-14  8:47               ` Ananyev, Konstantin
2017-09-14  9:29                 ` Hu, Jiayu
2017-09-14  9:35                   ` Ananyev, Konstantin
2017-09-14 10:01                     ` Hu, Jiayu
2017-09-14 15:42                       ` Kavanagh, Mark B
2017-09-14 18:38                         ` Ananyev, Konstantin
2017-09-15  7:54                           ` Hu, Jiayu
2017-09-15  8:15                             ` Ananyev, Konstantin
2017-09-15  8:17                             ` Ananyev, Konstantin
2017-09-15  8:38                               ` Hu, Jiayu
2017-09-14  8:51               ` Kavanagh, Mark B
2017-09-14  9:45                 ` Hu, Jiayu
2017-09-12  2:43     ` [PATCH v3 3/5] gso: add VxLAN " Jiayu Hu
2017-09-12  2:43     ` [PATCH v3 4/5] gso: add GRE " Jiayu Hu
2017-09-12  2:43     ` [PATCH v3 5/5] app/testpmd: enable TCP/IPv4, VxLAN and GRE GSO Jiayu Hu
2017-09-14 18:33       ` Ferruh Yigit
2017-09-15  1:13         ` Hu, Jiayu
2017-09-19  7:32     ` [PATCH v4 0/5] Support TCP/IPv4, VxLAN and GRE GSO in DPDK Jiayu Hu
2017-09-19  7:32       ` [PATCH v4 1/5] gso: add Generic Segmentation Offload API framework Jiayu Hu
2017-09-19  7:32       ` [PATCH v4 2/5] gso: add TCP/IPv4 GSO support Jiayu Hu
2017-09-20  7:03         ` Yao, Lei A
2017-09-19  7:32       ` [PATCH v4 3/5] gso: add VxLAN " Jiayu Hu
2017-09-20  3:11         ` Tan, Jianfeng
2017-09-20  3:17           ` Hu, Jiayu
2017-09-19  7:32       ` [PATCH v4 4/5] gso: add GRE " Jiayu Hu
2017-09-20  2:53         ` Tan, Jianfeng
2017-09-20  6:01           ` Hu, Jiayu
2017-09-19  7:32       ` [PATCH v4 5/5] app/testpmd: enable TCP/IPv4, VxLAN and GRE GSO Jiayu Hu
2017-09-28 22:13       ` [PATCH v5 0/6] Support TCP/IPv4, VxLAN and GRE GSO in DPDK Mark Kavanagh
2017-10-02 16:45         ` [PATCH v6 0/6] Support TCP/IPv4, VxLAN, " Mark Kavanagh
2017-10-02 16:45           ` [PATCH v6 1/6] gso: add Generic Segmentation Offload API framework Mark Kavanagh
2017-10-04 13:11             ` Ananyev, Konstantin
2017-10-04 13:21               ` Kavanagh, Mark B
2017-10-02 16:45           ` [PATCH v6 2/6] gso: add TCP/IPv4 GSO support Mark Kavanagh
2017-10-04 13:32             ` Ananyev, Konstantin
2017-10-04 14:30               ` Kavanagh, Mark B
2017-10-04 14:49                 ` Ananyev, Konstantin
2017-10-04 14:59                   ` Kavanagh, Mark B
2017-10-04 13:35             ` Ananyev, Konstantin
2017-10-04 14:22               ` Kavanagh, Mark B
2017-10-02 16:45           ` [PATCH v6 3/6] gso: add VxLAN " Mark Kavanagh
2017-10-04 14:12             ` Ananyev, Konstantin
2017-10-04 14:35               ` Kavanagh, Mark B
2017-10-04 16:13               ` Kavanagh, Mark B
2017-10-04 16:17                 ` Ananyev, Konstantin
2017-10-02 16:45           ` [PATCH v6 4/6] gso: add GRE " Mark Kavanagh
2017-10-04 14:15             ` Ananyev, Konstantin
2017-10-04 14:36               ` Kavanagh, Mark B
2017-10-02 16:45           ` [PATCH v6 5/6] app/testpmd: enable TCP/IPv4, VxLAN and GRE GSO Mark Kavanagh
2017-10-04 15:08             ` Ananyev, Konstantin
2017-10-04 16:23               ` Kavanagh, Mark B [this message]
2017-10-04 16:26                 ` Ananyev, Konstantin
2017-10-04 16:51                   ` Kavanagh, Mark B
2017-10-02 16:45           ` [PATCH v6 6/6] doc: add GSO programmer's guide Mark Kavanagh
2017-10-04 13:51             ` Mcnamara, John
2017-10-05 11:02           ` [PATCH v7 0/6] Support TCP/IPv4, VxLAN, and GRE GSO in DPDK Mark Kavanagh
2017-10-05 11:02             ` [PATCH v7 1/6] gso: add Generic Segmentation Offload API framework Mark Kavanagh
2017-10-05 11:02             ` [PATCH v7 2/6] gso: add TCP/IPv4 GSO support Mark Kavanagh
2017-10-05 11:02             ` [PATCH v7 3/6] gso: add VxLAN " Mark Kavanagh
2017-10-05 11:02             ` [PATCH v7 4/6] gso: add GRE " Mark Kavanagh
2017-10-05 11:02             ` [PATCH v7 5/6] app/testpmd: enable TCP/IPv4, VxLAN and GRE GSO Mark Kavanagh
2017-10-05 11:02             ` [PATCH v7 6/6] doc: add GSO programmer's guide Mark Kavanagh
2017-10-05 13:22             ` [PATCH v7 0/6] Support TCP/IPv4, VxLAN, and GRE GSO in DPDK Ananyev, Konstantin
2017-10-05 14:39               ` Kavanagh, Mark B
2017-10-05 15:43             ` [PATCH v8 " Mark Kavanagh
2017-10-05 17:12               ` Ananyev, Konstantin
2017-10-05 20:16                 ` Kavanagh, Mark B
2017-10-05 20:36               ` [PATCH v9 " Mark Kavanagh
2017-10-05 22:24                 ` Ananyev, Konstantin
2017-10-06  8:24                   ` FW: " Kavanagh, Mark B
2017-10-06 10:35                   ` Kavanagh, Mark B
2017-10-06 23:32                 ` Ferruh Yigit
2017-10-06 23:34                   ` Ferruh Yigit
2017-10-07 14:56                 ` [PATCH v10 " Jiayu Hu
2017-10-07 14:56                   ` [PATCH v10 1/6] gso: add Generic Segmentation Offload API framework Jiayu Hu
2017-10-07 14:56                   ` [PATCH v10 2/6] gso: add TCP/IPv4 GSO support Jiayu Hu
2017-10-07 14:56                   ` [PATCH v10 3/6] gso: add VxLAN " Jiayu Hu
2017-10-07 14:56                   ` [PATCH v10 4/6] gso: add GRE " Jiayu Hu
2017-10-07 14:56                   ` [PATCH v10 5/6] app/testpmd: enable TCP/IPv4, VxLAN and GRE GSO Jiayu Hu
2017-10-07 14:56                   ` [PATCH v10 6/6] doc: add GSO programmer's guide Jiayu Hu
2017-10-08  3:40                   ` [PATCH v10 0/6] Support TCP/IPv4, VxLAN, and GRE GSO in DPDK Ferruh Yigit
2017-10-05 20:36               ` [PATCH v9 1/6] gso: add Generic Segmentation Offload API framework Mark Kavanagh
2017-10-05 20:36               ` [PATCH v9 2/6] gso: add TCP/IPv4 GSO support Mark Kavanagh
2017-10-05 20:36               ` [PATCH v9 3/6] gso: add VxLAN " Mark Kavanagh
2017-10-05 20:36               ` [PATCH v9 4/6] gso: add GRE " Mark Kavanagh
2017-10-05 20:36               ` [PATCH v9 5/6] app/testpmd: enable TCP/IPv4, VxLAN and GRE GSO Mark Kavanagh
2017-10-05 20:36               ` [PATCH v9 6/6] doc: add GSO programmer's guide Mark Kavanagh
2017-10-06 13:34                 ` Mcnamara, John
2017-10-06 13:41                   ` Kavanagh, Mark B
2017-10-05 15:43             ` [PATCH v8 1/6] gso: add Generic Segmentation Offload API framework Mark Kavanagh
2017-10-05 15:44             ` [PATCH v8 2/6] gso: add TCP/IPv4 GSO support Mark Kavanagh
2017-10-05 15:44             ` [PATCH v8 3/6] gso: add VxLAN " Mark Kavanagh
2017-10-05 15:44             ` [PATCH v8 4/6] gso: add GRE " Mark Kavanagh
2017-10-05 15:44             ` [PATCH v8 5/6] app/testpmd: enable TCP/IPv4, VxLAN and GRE GSO Mark Kavanagh
2017-10-05 15:44             ` [PATCH v8 6/6] doc: add GSO programmer's guide Mark Kavanagh
2017-10-05 17:57               ` Mcnamara, John
2017-09-28 22:13       ` [PATCH v5 1/6] gso: add Generic Segmentation Offload API framework Mark Kavanagh
2017-09-28 22:13       ` [PATCH v5 2/6] gso: add TCP/IPv4 GSO support Mark Kavanagh
2017-09-29  3:12         ` Jiayu Hu
2017-09-29  9:05           ` Kavanagh, Mark B
2017-09-28 22:13       ` [PATCH v5 3/6] gso: add VxLAN " Mark Kavanagh
2017-09-28 22:13       ` [PATCH v5 4/6] gso: add GRE " Mark Kavanagh
2017-09-28 22:13       ` [PATCH v5 5/6] app/testpmd: enable TCP/IPv4, VxLAN and GRE GSO Mark Kavanagh
2017-09-28 22:13       ` [PATCH v5 6/6] doc: add GSO programmer's guide Mark Kavanagh
2017-09-28 22:18       ` [PATCH v5 2/6] gso: add TCP/IPv4 GSO support Mark Kavanagh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DC5AD7FA266D86499789B1BCAEC715F8D3A1F2D5@IRSMSX101.ger.corp.intel.com \
    --to=mark.b.kavanagh@intel.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=jianfeng.tan@intel.com \
    --cc=jiayu.hu@intel.com \
    --cc=konstantin.ananyev@intel.com \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.