examples/ip_fragmentation: fix MTU for i40e
authorKonstantin Ananyev <konstantin.ananyev@intel.com>
Wed, 16 Jan 2019 12:55:46 +0000 (12:55 +0000)
committerThomas Monjalon <thomas@monjalon.net>
Thu, 17 Jan 2019 22:53:05 +0000 (23:53 +0100)
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

index 8d789b4..e90a61e 100644 (file)
 #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: "