#include <linux/skbuff.h>
#include <net/gro.h>
#include <net/gso.h>
#include <net/udp.h>
#include <net/protocol.h>
#include <net/inet_common.h>
static struct sk_buff *__skb_udp_tunnel_segment(struct sk_buff *skb,
netdev_features_t features,
struct sk_buff *(*gso_inner_segment)(struct sk_buff *skb,
netdev_features_t features),
__be16 new_protocol, bool is_ipv6)
{ … }
struct sk_buff *skb_udp_tunnel_segment(struct sk_buff *skb,
netdev_features_t features,
bool is_ipv6)
{ … }
EXPORT_SYMBOL(…);
static void __udpv4_gso_segment_csum(struct sk_buff *seg,
__be32 *oldip, __be32 *newip,
__be16 *oldport, __be16 *newport)
{ … }
static struct sk_buff *__udpv4_gso_segment_list_csum(struct sk_buff *segs)
{ … }
static struct sk_buff *__udp_gso_segment_list(struct sk_buff *skb,
netdev_features_t features,
bool is_ipv6)
{ … }
struct sk_buff *__udp_gso_segment(struct sk_buff *gso_skb,
netdev_features_t features, bool is_ipv6)
{ … }
EXPORT_SYMBOL_GPL(…);
static struct sk_buff *udp4_ufo_fragment(struct sk_buff *skb,
netdev_features_t features)
{ … }
#define UDP_GRO_CNT_MAX …
static struct sk_buff *udp_gro_receive_segment(struct list_head *head,
struct sk_buff *skb)
{ … }
struct sk_buff *udp_gro_receive(struct list_head *head, struct sk_buff *skb,
struct udphdr *uh, struct sock *sk)
{ … }
EXPORT_SYMBOL(…);
static struct sock *udp4_gro_lookup_skb(struct sk_buff *skb, __be16 sport,
__be16 dport)
{ … }
INDIRECT_CALLABLE_SCOPE
struct sk_buff *udp4_gro_receive(struct list_head *head, struct sk_buff *skb)
{ … }
static int udp_gro_complete_segment(struct sk_buff *skb)
{ … }
int udp_gro_complete(struct sk_buff *skb, int nhoff,
udp_lookup_t lookup)
{ … }
EXPORT_SYMBOL(…);
INDIRECT_CALLABLE_SCOPE int udp4_gro_complete(struct sk_buff *skb, int nhoff)
{ … }
int __init udpv4_offload_init(void)
{ … }