From 9d8293e6226b51c571124e0e5bbf0573377669f7 Mon Sep 17 00:00:00 2001 From: Konstantin Ananyev Date: Wed, 16 Jan 2019 12:55:46 +0000 Subject: [PATCH] examples/ip_fragmentation: fix MTU for i40e 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 --- examples/ip_fragmentation/main.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/examples/ip_fragmentation/main.c b/examples/ip_fragmentation/main.c index 8d789b417e..e90a61e35d 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: " -- 2.20.1