Skip to content

Commit

Permalink
udp: increase inner ip header ID during segmentation
Browse files Browse the repository at this point in the history
Similar to GRE tunnel, UDP tunnel should take care of IP header ID
too.

Cc: Pravin B Shelar <pshelar@nicira.com>
Cc: Eric Dumazet <edumazet@google.com>
Cc: "David S. Miller" <davem@davemloft.net>
Signed-off-by: Cong Wang <amwang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Cong Wang authored and David S. Miller committed Mar 22, 2013
1 parent 10c0d7e commit d6a8c36
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion net/ipv4/udp.c
Original file line number Diff line number Diff line change
Expand Up @@ -2304,7 +2304,8 @@ static struct sk_buff *skb_udp_tunnel_segment(struct sk_buff *skb,
struct sk_buff *segs = ERR_PTR(-EINVAL);
int mac_len = skb->mac_len;
int tnl_hlen = skb_inner_mac_header(skb) - skb_transport_header(skb);
int outer_hlen;
int outer_hlen, id;
struct iphdr *iph;
netdev_features_t enc_features;

if (unlikely(!pskb_may_pull(skb, tnl_hlen)))
Expand All @@ -2315,6 +2316,8 @@ static struct sk_buff *skb_udp_tunnel_segment(struct sk_buff *skb,
skb_reset_mac_header(skb);
skb_set_network_header(skb, skb_inner_network_offset(skb));
skb->mac_len = skb_inner_network_offset(skb);
iph = ip_hdr(skb);
id = ntohs(iph->id);

/* segment inner packet. */
enc_features = skb->dev->hw_enc_features & netif_skb_features(skb);
Expand All @@ -2329,6 +2332,8 @@ static struct sk_buff *skb_udp_tunnel_segment(struct sk_buff *skb,
int udp_offset = outer_hlen - tnl_hlen;

skb->mac_len = mac_len;
iph = (struct iphdr *)skb_inner_network_header(skb);
iph->id = htons(id++);

skb_push(skb, outer_hlen);
skb_reset_mac_header(skb);
Expand Down

0 comments on commit d6a8c36

Please sign in to comment.