I am using LwIP with the AXI Ethernet IP core and a MicroBlaze in Vivado/SDK 2015.4. I found the following assignment in xaxiemacif.c:
netif->mtu = XAE_MTU - XAE_HDR_SIZE;
where XAE_MTU is defined as 1500 and XAE_HDR_SIZE as 14 in xaxietherent.h. In ip.c, LwIP uses netif->mtu as the maximum size of the IP packet that can be sent as the Ethernet payload without requiring fragmentation (or jumbo frames). The true MTU of Ethernet is 1500 bytes. However, it appears to me that it is erroneously defined as 1486 bytes in the Xilinx driver by incorrectly subtracting the Ethernet header size (14) from 1500. This causes IP packets between 1486 and 1500 bytes in length to be unnecessarily fragmented.
To my knowledge, the Ethernet MTU of 1500 bytes is the maximum size of the payload (excluding the header). Accordingly, it appears to me that netif->mtu should be set to 1500 in xaxiemacif.c.
Yes you are correct. I've made the same correction to my LwIP code (way back from ISE 14.4, I can't believe this bug is still here!) to remove the - XAE_HDR_SIZE. I also made a change to xaxiemacif_dma.c. Could be different now: