aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/ip6_offload.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv6/ip6_offload.c')
-rw-r--r--net/ipv6/ip6_offload.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/net/ipv6/ip6_offload.c b/net/ipv6/ip6_offload.c
index eeca943f12dc..82e9f3076028 100644
--- a/net/ipv6/ip6_offload.c
+++ b/net/ipv6/ip6_offload.c
@@ -258,6 +258,19 @@ out:
258 return pp; 258 return pp;
259} 259}
260 260
261static struct sk_buff **sit_gro_receive(struct sk_buff **head,
262 struct sk_buff *skb)
263{
264 if (NAPI_GRO_CB(skb)->encap_mark) {
265 NAPI_GRO_CB(skb)->flush = 1;
266 return NULL;
267 }
268
269 NAPI_GRO_CB(skb)->encap_mark = 1;
270
271 return ipv6_gro_receive(head, skb);
272}
273
261static int ipv6_gro_complete(struct sk_buff *skb, int nhoff) 274static int ipv6_gro_complete(struct sk_buff *skb, int nhoff)
262{ 275{
263 const struct net_offload *ops; 276 const struct net_offload *ops;
@@ -302,7 +315,7 @@ static struct packet_offload ipv6_packet_offload __read_mostly = {
302static const struct net_offload sit_offload = { 315static const struct net_offload sit_offload = {
303 .callbacks = { 316 .callbacks = {
304 .gso_segment = ipv6_gso_segment, 317 .gso_segment = ipv6_gso_segment,
305 .gro_receive = ipv6_gro_receive, 318 .gro_receive = sit_gro_receive,
306 .gro_complete = sit_gro_complete, 319 .gro_complete = sit_gro_complete,
307 }, 320 },
308}; 321};