icmp packets on em larger than 1472
oberman at es.net
Thu Nov 11 04:52:28 UTC 2010
> Date: Wed, 10 Nov 2010 04:21:12 -0800 (PST)
> From: Kirill Yelizarov <ykirill at yahoo.com>
> Sender: owner-freebsd-stable at freebsd.org
> All my em cards running 8.1 stable don't reply to icmp echo requests packets larger than 1472 bytes.
> On stable 7.2 the same hardware works as expected:
> # ping -s 1500 192.168.64.99
> PING 192.168.64.99 (192.168.64.99): 1500 data bytes
> 1508 bytes from 192.168.64.99: icmp_seq=0 ttl=63 time=1.249 ms
> 1508 bytes from 192.168.64.99: icmp_seq=1 ttl=63 time=1.158 ms
> Here is the dump on em interface
> 15:06:31.452043 IP 192.168.66.65 > *****: ICMP echo request, id 28729, seq 5, length 1480
> 15:06:31.452047 IP 192.168.66.65 > ****: icmp
> 15:06:31.452069 IP **** > 192.168.66.65: ICMP echo reply, id 28729, seq 5, length 1480
> 15:06:31.452071 IP *** > 192.168.66.65: icmp
> Same ping from same source (it's a 8.1 stable with fxp interface) to em card running 8.1 stable
> #pciconf -lv
> em0 at pci0:3:4:0: class=0x020000 card=0x10798086 chip=0x10798086 rev=0x03 hdr=0x00
> vendor = 'Intel Corporation'
> device = 'Dual Port Gigabit Ethernet Controller (82546EB)'
> class = network
> subclass = ethernet
> # ping -s 1472 192.168.64.200
> PING 192.168.64.200 (192.168.64.200): 1472 data bytes
> 1480 bytes from 192.168.64.200: icmp_seq=0 ttl=63 time=0.848 ms
> # ping -s 1473 192.168.64.200
> PING 192.168.64.200 (192.168.64.200): 1473 data bytes
> --- 192.168.64.200 ping statistics ---
> 4 packets transmitted, 0 packets received, 100.0% packet loss
> And here is it's dump on em card
> 5:11:15.191496 IP 192.168.66.65 > *****: ICMP echo request, id 33593, seq 0, length 1480
> 15:11:15.191534 IP 192.168.66.65 > *****: icmp
> 15:11:16.192119 IP 192.168.66.65 > *****: ICMP echo request, id 33593, seq 1, length 1480
> 15:11:16.192156 IP 192.168.66.65 > ******: icmp
> igb cards on 8.1 stable are not affected
I'm unsure why it ever worked. Was the interface MTU set to 1500
(default) under V7?
Most ping programs (including FreeBSD) send the specified number of DATA
bytes. Add the ICMP header (8 bytes) and the IP header (20 bytes) to
1472 and you get 1500, the largest packet that should work. It even
gives you a hint as, for no reason I have never understood, the program
includes the ICMP header is the displayed packet size (1480/1508).
Also, the IP MTU of 1500 does not include the Ethernet framing which
includes 12 bytes of address and two bytes of ethertype or the CRC.
If the igb is allowing over 1500 bytes of IP packet through, assuming
the MTU has not been increased for the standard 1500, something is
clearly broken. 1472 is the right answer and 1500 (or 1473) is not.
R. Kevin Oberman, Network Engineer
Energy Sciences Network (ESnet)
Ernest O. Lawrence Berkeley National Laboratory (Berkeley Lab)
E-mail: oberman at es.net Phone: +1 510 486-8634
Key fingerprint:059B 2DDF 031C 9BA3 14A4 EADA 927D EBB3 987B 3751
More information about the freebsd-stable