diff options
author | Alex Shi <alex.shi@linaro.org> | 2016-11-01 12:01:20 +0800 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2016-11-01 12:01:20 +0800 |
commit | 79df8fa79b6a2aced892ad2b2c9832e7d9bdea6b (patch) | |
tree | 725b3b29e466e846837cf56cec1bafd99fe5ca71 /net/ipv4/af_inet.c | |
parent | c11a255c622e7a2d312f4080c6ef529dd67b3c38 (diff) | |
parent | 1714a3e139090705a0bd862a8b7bba930181cfbd (diff) |
Merge branch 'linux-linaro-lsk-v4.4' into linux-linaro-lsk-v4.4-android
Diffstat (limited to 'net/ipv4/af_inet.c')
-rw-r--r-- | net/ipv4/af_inet.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index eb12bd0ff9d3..caa6f158a077 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -1398,6 +1398,19 @@ out: return pp; } +static struct sk_buff **ipip_gro_receive(struct sk_buff **head, + struct sk_buff *skb) +{ + if (NAPI_GRO_CB(skb)->encap_mark) { + NAPI_GRO_CB(skb)->flush = 1; + return NULL; + } + + NAPI_GRO_CB(skb)->encap_mark = 1; + + return inet_gro_receive(head, skb); +} + int inet_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len) { if (sk->sk_family == AF_INET) @@ -1440,6 +1453,13 @@ out_unlock: return err; } +static int ipip_gro_complete(struct sk_buff *skb, int nhoff) +{ + skb->encapsulation = 1; + skb_shinfo(skb)->gso_type |= SKB_GSO_IPIP; + return inet_gro_complete(skb, nhoff); +} + int inet_ctl_sock_create(struct sock **sk, unsigned short family, unsigned short type, unsigned char protocol, struct net *net) @@ -1667,8 +1687,8 @@ static struct packet_offload ip_packet_offload __read_mostly = { static const struct net_offload ipip_offload = { .callbacks = { .gso_segment = inet_gso_segment, - .gro_receive = inet_gro_receive, - .gro_complete = inet_gro_complete, + .gro_receive = ipip_gro_receive, + .gro_complete = ipip_gro_complete, }, }; |