#include <linux/errno.h>
#include <linux/types.h>
#include <linux/socket.h>
#include <linux/sockios.h>
#include <linux/net.h>
#include <linux/netdevice.h>
#include <linux/in6.h>
#include <linux/icmpv6.h>
#include <linux/mroute6.h>
#include <linux/slab.h>
#include <linux/indirect_call_wrapper.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv6.h>
#include <net/sock.h>
#include <net/snmp.h>
#include <net/udp.h>
#include <net/ipv6.h>
#include <net/protocol.h>
#include <net/transp_v6.h>
#include <net/rawv6.h>
#include <net/ndisc.h>
#include <net/ip6_route.h>
#include <net/addrconf.h>
#include <net/xfrm.h>
#include <net/inet_ecn.h>
#include <net/dst_metadata.h>
static void ip6_rcv_finish_core(struct net *net, struct sock *sk,
struct sk_buff *skb)
{ … }
int ip6_rcv_finish(struct net *net, struct sock *sk, struct sk_buff *skb)
{ … }
static void ip6_sublist_rcv_finish(struct list_head *head)
{ … }
static bool ip6_can_use_hint(const struct sk_buff *skb,
const struct sk_buff *hint)
{ … }
static struct sk_buff *ip6_extract_route_hint(const struct net *net,
struct sk_buff *skb)
{ … }
static void ip6_list_rcv_finish(struct net *net, struct sock *sk,
struct list_head *head)
{ … }
static struct sk_buff *ip6_rcv_core(struct sk_buff *skb, struct net_device *dev,
struct net *net)
{ … }
int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev)
{ … }
static void ip6_sublist_rcv(struct list_head *head, struct net_device *dev,
struct net *net)
{ … }
void ipv6_list_rcv(struct list_head *head, struct packet_type *pt,
struct net_device *orig_dev)
{ … }
INDIRECT_CALLABLE_DECLARE(…);
void ip6_protocol_deliver_rcu(struct net *net, struct sk_buff *skb, int nexthdr,
bool have_final)
{ … }
static int ip6_input_finish(struct net *net, struct sock *sk, struct sk_buff *skb)
{ … }
int ip6_input(struct sk_buff *skb)
{ … }
EXPORT_SYMBOL_GPL(…);
int ip6_mc_input(struct sk_buff *skb)
{ … }