examples/ip_fragmentation: fix fail to start on i40e

Message ID 1547643346-24486-1-git-send-email-konstantin.ananyev@intel.com
State Accepted, archived
Delegated to: Thomas Monjalon
Headers show
Series
  • examples/ip_fragmentation: fix fail to start on i40e
Related show

Checks

Context Check Description
ci/Intel-compilation success Compilation OK
ci/intel-Performance-Testing success Performance Testing PASS
ci/mellanox-Performance-Testing success Performance Testing PASS
ci/checkpatch success coding style OK

Commit Message

Ananyev, Konstantin Jan. 16, 2019, 12:55 p.m.
Previous commit sets mtu to the same value as max_rx_pkt_len.
Though PMDs (at least Intel ones) consider MTU as
max_rx_pkt_len minus ether header, crc bytes, vlan tags.

Fixes: 73d2c1d3f33c ("examples/ip_fragmentation: support big packets")
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
---
 examples/ip_fragmentation/main.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

Comments

Thomas Monjalon Jan. 17, 2019, 10:52 p.m. | #1
16/01/2019 13:55, Konstantin Ananyev:
> Previous commit sets mtu to the same value as max_rx_pkt_len.
> Though PMDs (at least Intel ones) consider MTU as
> max_rx_pkt_len minus ether header, crc bytes, vlan tags.
> 
> Fixes: 73d2c1d3f33c ("examples/ip_fragmentation: support big packets")
> Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>

Applied, thanks

Patch

diff --git a/examples/ip_fragmentation/main.c b/examples/ip_fragmentation/main.c
index 8d789b417..e90a61e35 100644
--- a/examples/ip_fragmentation/main.c
+++ b/examples/ip_fragmentation/main.c
@@ -55,6 +55,13 @@ 
 #define	IPV4_MTU_DEFAULT	ETHER_MTU
 #define	IPV6_MTU_DEFAULT	ETHER_MTU
 
+/*
+ * The overhead from max frame size to MTU.
+ * We have to consider the max possible overhead.
+ */
+#define MTU_OVERHEAD	\
+	(ETHER_HDR_LEN + ETHER_CRC_LEN + 2 * sizeof(struct vlan_hdr))
+
 /*
  * Default payload in bytes for the IPv6 packet.
  */
@@ -938,7 +945,7 @@  main(int argc, char **argv)
 
 		/* set the mtu to the maximum received packet size */
 		ret = rte_eth_dev_set_mtu(portid,
-			local_port_conf.rxmode.max_rx_pkt_len);
+			local_port_conf.rxmode.max_rx_pkt_len - MTU_OVERHEAD);
 		if (ret < 0) {
 			printf("\n");
 			rte_exit(EXIT_FAILURE, "Set MTU failed: "