Subject: GRO issue with kernel 3.4.94 (icmp fragmentation needed)

From: "jungwon park" <[email-masked]>
Date: Fri, 27 Jun 2014 08:42:05 +0900

When using the linux router is turned on GRO, router send the 'fragmentation
needed' packets to the sender.
and the sender's packets are dropped.
The router seems to handle the larger than MTU(1500) with TCP segments by
GRO.

topology : [Host A] - [Linux Router] - [Host B] kernel : 3.4.94 GRO : on MTU
: 1500

tcpdmp :

10:36:36.592752 IP (tos 0x0, ttl 127, id 15685, offset 0, flags [DF], proto
TCP (6), length 198) x.x.x.x.49512 > x.x.x.x.445: P 908:1066(158) ack 587
win 254
10:36:36.592911 IP (tos 0x0, ttl 128, id 9712, offset 0, flags [DF], proto
TCP (6), length 117) x.x.x.x.445 > x.x.x.x.49512: P 587:664(77) ack 1066 win
252
10:36:36.594552 IP (tos 0x0, ttl 127, id 15686, offset 0, flags [DF], proto
TCP (6), length 390) x.x.x.x.49512 > x.x.x.x.445: P 1066:1416(350) ack 664
win 254
10:36:36.596544 IP (tos 0x0, ttl 128, id 9713, offset 0, flags [DF], proto
TCP (6), length 2960) x.x.x.x.445 > x.x.x.x.49512: . 664:3584(2920) ack 1416
win 251
10:36:36.596566 IP (tos 0xc0, ttl 64, id 8339, offset 0, flags [none], proto
ICMP (1), length 576) x.x.x.x > x.x.x.x: ICMP x.x.x.x unreachable - need to
frag (mtu 1500), length 556
	IP (tos 0x0, ttl 128, id 9713, offset 0, flags [DF], proto TCP (6),
length 2960) x.x.x.x.445 > x.x.x.x.49512:  tcp 2940 [bad hdr length 0 - too
short, < 20][|icmp]

When I turned off GRO, the router operate normally, and there is no problem.
and with 3.4.91 kernel, the router has no problem.

I doubt 'ipv4: ip_forward: fix inverted local_df test' patch.
(http://patchwork.ozlabs.org/patch/345509/)
When I revert this patch, the router has no problem.

(sorry my poor english.)