.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
---|
1 | 2 | /* |
---|
2 | 3 | * IPV4 GSO/GRO offload support |
---|
3 | 4 | * Linux INET implementation |
---|
4 | 5 | * |
---|
5 | | - * This program is free software; you can redistribute it and/or |
---|
6 | | - * modify it under the terms of the GNU General Public License |
---|
7 | | - * as published by the Free Software Foundation; either version |
---|
8 | | - * 2 of the License, or (at your option) any later version. |
---|
9 | | - * |
---|
10 | 6 | * TCPv4 GSO/GRO support |
---|
11 | 7 | */ |
---|
12 | 8 | |
---|
| 9 | +#include <linux/indirect_call_wrapper.h> |
---|
13 | 10 | #include <linux/skbuff.h> |
---|
14 | 11 | #include <net/tcp.h> |
---|
15 | 12 | #include <net/protocol.h> |
---|
.. | .. |
---|
301 | 298 | if (th->cwr) |
---|
302 | 299 | skb_shinfo(skb)->gso_type |= SKB_GSO_TCP_ECN; |
---|
303 | 300 | |
---|
| 301 | + if (skb->encapsulation) |
---|
| 302 | + skb->inner_transport_header = skb->transport_header; |
---|
| 303 | + |
---|
304 | 304 | return 0; |
---|
305 | 305 | } |
---|
306 | 306 | EXPORT_SYMBOL(tcp_gro_complete); |
---|
307 | 307 | |
---|
308 | | -static struct sk_buff *tcp4_gro_receive(struct list_head *head, struct sk_buff *skb) |
---|
| 308 | +INDIRECT_CALLABLE_SCOPE |
---|
| 309 | +struct sk_buff *tcp4_gro_receive(struct list_head *head, struct sk_buff *skb) |
---|
309 | 310 | { |
---|
310 | 311 | /* Don't bother verifying checksum if we're going to flush anyway. */ |
---|
311 | 312 | if (!NAPI_GRO_CB(skb)->flush && |
---|
.. | .. |
---|
318 | 319 | return tcp_gro_receive(head, skb); |
---|
319 | 320 | } |
---|
320 | 321 | |
---|
321 | | -static int tcp4_gro_complete(struct sk_buff *skb, int thoff) |
---|
| 322 | +INDIRECT_CALLABLE_SCOPE int tcp4_gro_complete(struct sk_buff *skb, int thoff) |
---|
322 | 323 | { |
---|
323 | 324 | const struct iphdr *iph = ip_hdr(skb); |
---|
324 | 325 | struct tcphdr *th = tcp_hdr(skb); |
---|