linux/net/ipv6/ip6_offload.c

// SPDX-License-Identifier: GPL-2.0-or-later
/*
 *	IPV6 GSO/GRO offload support
 *	Linux INET6 implementation
 */

#include <linux/kernel.h>
#include <linux/socket.h>
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <linux/printk.h>

#include <net/protocol.h>
#include <net/ipv6.h>
#include <net/inet_common.h>
#include <net/tcp.h>
#include <net/udp.h>
#include <net/gro.h>
#include <net/gso.h>

#include "ip6_offload.h"

/* All GRO functions are always builtin, except UDP over ipv6, which lays in
 * ipv6 module, as it depends on UDPv6 lookup function, so we need special care
 * when ipv6 is built as a module
 */
#if IS_BUILTIN(CONFIG_IPV6)
#define INDIRECT_CALL_L4(f, f2, f1, ...)
#else
#define INDIRECT_CALL_L4
#endif

#define indirect_call_gro_receive_l4(f2, f1, cb, head, skb)

static int ipv6_gro_pull_exthdrs(struct sk_buff *skb, int off, int proto)
{}

static int ipv6_gso_pull_exthdrs(struct sk_buff *skb, int proto)
{}

static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb,
	netdev_features_t features)
{}

/* Return the total length of all the extension hdrs, following the same
 * logic in ipv6_gso_pull_exthdrs() when parsing ext-hdrs.
 */
static int ipv6_exthdrs_len(struct ipv6hdr *iph,
			    const struct net_offload **opps)
{}

INDIRECT_CALLABLE_SCOPE struct sk_buff *ipv6_gro_receive(struct list_head *head,
							 struct sk_buff *skb)
{}

static struct sk_buff *sit_ip6ip6_gro_receive(struct list_head *head,
					      struct sk_buff *skb)
{}

static struct sk_buff *ip4ip6_gro_receive(struct list_head *head,
					  struct sk_buff *skb)
{}

INDIRECT_CALLABLE_SCOPE int ipv6_gro_complete(struct sk_buff *skb, int nhoff)
{}

static int sit_gro_complete(struct sk_buff *skb, int nhoff)
{}

static int ip6ip6_gro_complete(struct sk_buff *skb, int nhoff)
{}

static int ip4ip6_gro_complete(struct sk_buff *skb, int nhoff)
{}


static struct sk_buff *sit_gso_segment(struct sk_buff *skb,
				       netdev_features_t features)
{}

static struct sk_buff *ip4ip6_gso_segment(struct sk_buff *skb,
					  netdev_features_t features)
{}

static struct sk_buff *ip6ip6_gso_segment(struct sk_buff *skb,
					  netdev_features_t features)
{}

static const struct net_offload sit_offload =;

static const struct net_offload ip4ip6_offload =;

static const struct net_offload ip6ip6_offload =;
static int __init ipv6_offload_init(void)
{}

fs_initcall(ipv6_offload_init);