Running Redhat Linux 6.2 on a Compaq Deskpro with 3Com NIC. Ping a Cisco (or other device that can reply to ICMP). If you send: ping 1.2.3.4 -s 100 It works. If you send: ping 1.2.3.4 -s 101 It fails. Some protocol tracing reveals that the Linux box is incorrectly computing the ICMP packet checksum, and the Cisco is dropping the packet. This actually happens with all ICMP packets with an ODD SIZE PAYLOAD.
I wasn't able to reproduce this on RH6.0, RH6.2 or RH7.0. Are you sure your Cisco isn't misbehaving? For example, could there be some kind of 'drop too big pings' issue there? FWIW, using kernel-2.2.16-3 (and up) here.
Nope. I used a Sniffer(TM) device set up for Ethernet to snoop on the frames coming out of my linux box. Each ICMP packet that was captured was reported as having a correct TCP header checksum, but each packet with odd sized payload was being flagged as having an incorrect ICMP checksum by the Sniffer, and was being dropped by the Cisco. I attached the linux box to other devices where I can force it to ignore checksum vlaues, and all sizes worked o.k. I also tried it for a range of sizes, from 64-10001 bytes. All odd sizes were computed wrong. I'm looking to blame drivers for my ethernet hardware, but I'm going to look through the ping checksum routine as well. I'm running Red Hat (Hedwig) 2.2.5-15 Kernel
There was an odd-byte checksum problem fixed in ping. The ping in iputils-20000418-6 fixes the odd-byte checksum problem (and several things).