#define pr_fmt(fmt) …
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/string.h>
#include <linux/net.h>
#include <linux/netdevice.h>
#include <linux/ipv6.h>
#include <linux/slab.h>
#include <net/ipv6_frag.h>
#include <net/netfilter/ipv6/nf_conntrack_ipv6.h>
#include <linux/sysctl.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv6.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <net/netfilter/ipv6/nf_defrag_ipv6.h>
#include <net/netns/generic.h>
static const char nf_frags_cache_name[] = …;
static unsigned int nf_frag_pernet_id __read_mostly;
static struct inet_frags nf_frags;
static struct nft_ct_frag6_pernet *nf_frag_pernet(struct net *net)
{ … }
#ifdef CONFIG_SYSCTL
static struct ctl_table nf_ct_frag6_sysctl_table[] = …;
static int nf_ct_frag6_sysctl_register(struct net *net)
{ … }
static void __net_exit nf_ct_frags6_sysctl_unregister(struct net *net)
{ … }
#else
static int nf_ct_frag6_sysctl_register(struct net *net)
{
return 0;
}
static void __net_exit nf_ct_frags6_sysctl_unregister(struct net *net)
{
}
#endif
static int nf_ct_frag6_reasm(struct frag_queue *fq, struct sk_buff *skb,
struct sk_buff *prev_tail, struct net_device *dev);
static inline u8 ip6_frag_ecn(const struct ipv6hdr *ipv6h)
{ … }
static void nf_ct_frag6_expire(struct timer_list *t)
{ … }
static struct frag_queue *fq_find(struct net *net, __be32 id, u32 user,
const struct ipv6hdr *hdr, int iif)
{ … }
static int nf_ct_frag6_queue(struct frag_queue *fq, struct sk_buff *skb,
const struct frag_hdr *fhdr, int nhoff)
{ … }
static int nf_ct_frag6_reasm(struct frag_queue *fq, struct sk_buff *skb,
struct sk_buff *prev_tail, struct net_device *dev)
{ … }
static int
find_prev_fhdr(struct sk_buff *skb, u8 *prevhdrp, int *prevhoff, int *fhoff)
{ … }
int nf_ct_frag6_gather(struct net *net, struct sk_buff *skb, u32 user)
{ … }
EXPORT_SYMBOL_GPL(…);
static int nf_ct_net_init(struct net *net)
{ … }
static void nf_ct_net_pre_exit(struct net *net)
{ … }
static void nf_ct_net_exit(struct net *net)
{ … }
static struct pernet_operations nf_ct_net_ops = …;
static const struct rhashtable_params nfct_rhash_params = …;
int nf_ct_frag6_init(void)
{ … }
void nf_ct_frag6_cleanup(void)
{ … }