#define pr_fmt(fmt) …
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/string.h>
#include <linux/socket.h>
#include <linux/sockios.h>
#include <linux/jiffies.h>
#include <linux/net.h>
#include <linux/list.h>
#include <linux/netdevice.h>
#include <linux/in6.h>
#include <linux/ipv6.h>
#include <linux/icmpv6.h>
#include <linux/random.h>
#include <linux/jhash.h>
#include <linux/skbuff.h>
#include <linux/slab.h>
#include <linux/export.h>
#include <linux/tcp.h>
#include <linux/udp.h>
#include <net/sock.h>
#include <net/snmp.h>
#include <net/ipv6.h>
#include <net/ip6_route.h>
#include <net/protocol.h>
#include <net/transp_v6.h>
#include <net/rawv6.h>
#include <net/ndisc.h>
#include <net/addrconf.h>
#include <net/ipv6_frag.h>
#include <net/inet_ecn.h>
static const char ip6_frag_cache_name[] = …;
static u8 ip6_frag_ecn(const struct ipv6hdr *ipv6h)
{ … }
static struct inet_frags ip6_frags;
static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *skb,
struct sk_buff *prev_tail, struct net_device *dev);
static void ip6_frag_expire(struct timer_list *t)
{ … }
static struct frag_queue *
fq_find(struct net *net, __be32 id, const struct ipv6hdr *hdr, int iif)
{ … }
static int ip6_frag_queue(struct frag_queue *fq, struct sk_buff *skb,
struct frag_hdr *fhdr, int nhoff,
u32 *prob_offset)
{ … }
static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *skb,
struct sk_buff *prev_tail, struct net_device *dev)
{ … }
static int ipv6_frag_rcv(struct sk_buff *skb)
{ … }
static const struct inet6_protocol frag_protocol = …;
#ifdef CONFIG_SYSCTL
static struct ctl_table ip6_frags_ns_ctl_table[] = …;
static int ip6_frags_secret_interval_unused;
static struct ctl_table ip6_frags_ctl_table[] = …;
static int __net_init ip6_frags_ns_sysctl_register(struct net *net)
{ … }
static void __net_exit ip6_frags_ns_sysctl_unregister(struct net *net)
{ … }
static struct ctl_table_header *ip6_ctl_header;
static int ip6_frags_sysctl_register(void)
{ … }
static void ip6_frags_sysctl_unregister(void)
{ … }
#else
static int ip6_frags_ns_sysctl_register(struct net *net)
{
return 0;
}
static void ip6_frags_ns_sysctl_unregister(struct net *net)
{
}
static int ip6_frags_sysctl_register(void)
{
return 0;
}
static void ip6_frags_sysctl_unregister(void)
{
}
#endif
static int __net_init ipv6_frags_init_net(struct net *net)
{ … }
static void __net_exit ipv6_frags_pre_exit_net(struct net *net)
{ … }
static void __net_exit ipv6_frags_exit_net(struct net *net)
{ … }
static struct pernet_operations ip6_frags_ops = …;
static const struct rhashtable_params ip6_rhash_params = …;
int __init ipv6_frag_init(void)
{ … }
void ipv6_frag_exit(void)
{ … }