| .. | .. |
|---|
| 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); |
|---|