#define pr_fmt(fmt) …
#include <linux/types.h>
#include <linux/netfilter.h>
#include <linux/skbuff.h>
#include <linux/vmalloc.h>
#include <linux/stddef.h>
#include <linux/err.h>
#include <linux/kernel.h>
#include <linux/netdevice.h>
#include <linux/slab.h>
#include <linux/export.h>
#include <net/netfilter/nf_conntrack.h>
#include <net/netfilter/nf_conntrack_core.h>
#include <net/netfilter/nf_conntrack_ecache.h>
#include <net/netfilter/nf_conntrack_extend.h>
static DEFINE_MUTEX(nf_ct_ecache_mutex);
#define DYING_NULLS_VAL …
#define ECACHE_MAX_JIFFIES …
#define ECACHE_RETRY_JIFFIES …
enum retry_state { … };
struct nf_conntrack_net_ecache *nf_conn_pernet_ecache(const struct net *net)
{ … }
#if IS_MODULE(CONFIG_NF_CT_NETLINK)
EXPORT_SYMBOL_GPL(nf_conn_pernet_ecache);
#endif
static enum retry_state ecache_work_evict_list(struct nf_conntrack_net *cnet)
{ … }
static void ecache_work(struct work_struct *work)
{ … }
static int __nf_conntrack_eventmask_report(struct nf_conntrack_ecache *e,
const u32 events,
const u32 missed,
const struct nf_ct_event *item)
{ … }
int nf_conntrack_eventmask_report(unsigned int events, struct nf_conn *ct,
u32 portid, int report)
{ … }
EXPORT_SYMBOL_GPL(…);
void nf_ct_deliver_cached_events(struct nf_conn *ct)
{ … }
EXPORT_SYMBOL_GPL(…);
void nf_ct_expect_event_report(enum ip_conntrack_expect_events event,
struct nf_conntrack_expect *exp,
u32 portid, int report)
{ … }
void nf_conntrack_register_notifier(struct net *net,
const struct nf_ct_event_notifier *new)
{ … }
EXPORT_SYMBOL_GPL(…);
void nf_conntrack_unregister_notifier(struct net *net)
{ … }
EXPORT_SYMBOL_GPL(…);
void nf_conntrack_ecache_work(struct net *net, enum nf_ct_ecache_state state)
{ … }
bool nf_ct_ecache_ext_add(struct nf_conn *ct, u16 ctmask, u16 expmask, gfp_t gfp)
{ … }
EXPORT_SYMBOL_GPL(…);
#define NF_CT_EVENTS_DEFAULT …
static int nf_ct_events __read_mostly = …;
void nf_conntrack_ecache_pernet_init(struct net *net)
{ … }
void nf_conntrack_ecache_pernet_fini(struct net *net)
{ … }