#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/list.h>
#include <linux/rculist.h>
#include <linux/skbuff.h>
#include <linux/netlink.h>
#include <linux/netfilter.h>
#include <linux/static_key.h>
#include <linux/netfilter/nfnetlink.h>
#include <linux/netfilter/nf_tables.h>
#include <net/netfilter/nf_tables_core.h>
#include <net/netfilter/nf_tables.h>
#include <net/netfilter/nf_log.h>
#include <net/netfilter/nft_meta.h>
#if defined(CONFIG_MITIGATION_RETPOLINE) && defined(CONFIG_X86)
static struct static_key_false nf_tables_skip_direct_calls;
static bool nf_skip_indirect_calls(void)
{ … }
static void __init nf_skip_indirect_calls_enable(void)
{ … }
#else
static inline bool nf_skip_indirect_calls(void) { return false; }
static inline void nf_skip_indirect_calls_enable(void) { }
#endif
static noinline void __nft_trace_packet(const struct nft_pktinfo *pkt,
const struct nft_verdict *verdict,
const struct nft_rule_dp *rule,
struct nft_traceinfo *info,
enum nft_trace_types type)
{ … }
static inline void nft_trace_packet(const struct nft_pktinfo *pkt,
struct nft_verdict *verdict,
struct nft_traceinfo *info,
const struct nft_rule_dp *rule,
enum nft_trace_types type)
{ … }
static inline void nft_trace_copy_nftrace(const struct nft_pktinfo *pkt,
struct nft_traceinfo *info)
{ … }
static void nft_bitwise_fast_eval(const struct nft_expr *expr,
struct nft_regs *regs)
{ … }
static void nft_cmp_fast_eval(const struct nft_expr *expr,
struct nft_regs *regs)
{ … }
static void nft_cmp16_fast_eval(const struct nft_expr *expr,
struct nft_regs *regs)
{ … }
static noinline void __nft_trace_verdict(const struct nft_pktinfo *pkt,
struct nft_traceinfo *info,
const struct nft_rule_dp *rule,
const struct nft_regs *regs)
{ … }
static inline void nft_trace_verdict(const struct nft_pktinfo *pkt,
struct nft_traceinfo *info,
const struct nft_rule_dp *rule,
const struct nft_regs *regs)
{ … }
static bool nft_payload_fast_eval(const struct nft_expr *expr,
struct nft_regs *regs,
const struct nft_pktinfo *pkt)
{ … }
DEFINE_STATIC_KEY_FALSE(nft_counters_enabled);
static noinline void nft_update_chain_stats(const struct nft_chain *chain,
const struct nft_pktinfo *pkt)
{ … }
struct nft_jumpstack { … };
static void expr_call_ops_eval(const struct nft_expr *expr,
struct nft_regs *regs,
struct nft_pktinfo *pkt)
{ … }
#define nft_rule_expr_first(rule) …
#define nft_rule_expr_next(expr) …
#define nft_rule_expr_last(rule) …
#define nft_rule_dp_for_each_expr(expr, last, rule) …
unsigned int
nft_do_chain(struct nft_pktinfo *pkt, void *priv)
{ … }
EXPORT_SYMBOL_GPL(…);
static struct nft_expr_type *nft_basic_types[] = …;
static struct nft_object_type *nft_basic_objects[] = …;
int __init nf_tables_core_module_init(void)
{ … }
void nf_tables_core_module_exit(void)
{ … }