#include <linux/types.h>
#include <linux/ipv6.h>
#include <linux/in6.h>
#include <linux/netfilter.h>
#include <linux/module.h>
#include <linux/skbuff.h>
#include <linux/icmp.h>
#include <linux/rcupdate.h>
#include <linux/sysctl.h>
#include <net/ipv6_frag.h>
#include <linux/netfilter_ipv6.h>
#include <linux/netfilter_bridge.h>
#if IS_ENABLED(CONFIG_NF_CONNTRACK)
#include <net/netfilter/nf_conntrack.h>
#include <net/netfilter/nf_conntrack_helper.h>
#include <net/netfilter/nf_conntrack_l4proto.h>
#include <net/netfilter/nf_conntrack_core.h>
#include <net/netfilter/ipv6/nf_conntrack_ipv6.h>
#endif
#include <net/netfilter/nf_conntrack_zones.h>
#include <net/netfilter/ipv6/nf_defrag_ipv6.h>
static DEFINE_MUTEX(defrag6_mutex);
static enum ip6_defrag_users nf_ct6_defrag_user(unsigned int hooknum,
struct sk_buff *skb)
{ … }
static unsigned int ipv6_defrag(void *priv,
struct sk_buff *skb,
const struct nf_hook_state *state)
{ … }
static const struct nf_hook_ops ipv6_defrag_ops[] = …;
static void __net_exit defrag6_net_exit(struct net *net)
{ … }
static const struct nf_defrag_hook defrag_hook = …;
static struct pernet_operations defrag6_net_ops = …;
static int __init nf_defrag_init(void)
{ … }
static void __exit nf_defrag_fini(void)
{ … }
int nf_defrag_ipv6_enable(struct net *net)
{ … }
EXPORT_SYMBOL_GPL(…);
void nf_defrag_ipv6_disable(struct net *net)
{ … }
EXPORT_SYMBOL_GPL(…);
module_init(…) …;
module_exit(nf_defrag_fini);
MODULE_LICENSE(…) …;
MODULE_DESCRIPTION(…) …;