IP_GRE: Fix IP-Identification.
GRE-GSO generates ip fragments with id 0,2,3,4... for every GSO packet, which is not correct. Following patch fixes it by setting ip-header id unique id of fragments are allowed. As Eric Dumazet suggested it is optimized by using inner ip-header whenever inner packet is ipv4. Signed-off-by: Pravin B Shelar <pshelar@nicira.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
2bedc2e65b
commit
490ab08127
3 changed files with 23 additions and 3 deletions
|
@ -1332,8 +1332,10 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb,
|
|||
if (skb->next != NULL)
|
||||
iph->frag_off |= htons(IP_MF);
|
||||
offset += (skb->len - skb->mac_len - iph->ihl * 4);
|
||||
} else
|
||||
iph->id = htons(id++);
|
||||
} else {
|
||||
if (!(iph->frag_off & htons(IP_DF)))
|
||||
iph->id = htons(id++);
|
||||
}
|
||||
iph->tot_len = htons(skb->len - skb->mac_len);
|
||||
iph->check = 0;
|
||||
iph->check = ip_fast_csum(skb_network_header(skb), iph->ihl);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue