diff options
Diffstat (limited to 'net/ipv6/ip6_offload.c')
-rw-r--r-- | net/ipv6/ip6_offload.c | 15 |
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 | ||
261 | static 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 | |||
261 | static int ipv6_gro_complete(struct sk_buff *skb, int nhoff) | 274 | static 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 = { | |||
302 | static const struct net_offload sit_offload = { | 315 | static 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 | }; |