#include <linux/kernel.h>
#include <linux/if_vlan.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/netlink.h>
#include <linux/netfilter.h>
#include <linux/netfilter/nf_tables.h>
#include <net/netfilter/nf_tables_core.h>
#include <net/netfilter/nf_tables.h>
#include <net/netfilter/nf_tables_offload.h>
#include <linux/tcp.h>
#include <linux/udp.h>
#include <net/gre.h>
#include <linux/icmpv6.h>
#include <linux/ip.h>
#include <linux/ipv6.h>
#include <net/sctp/checksum.h>
static bool nft_payload_rebuild_vlan_hdr(const struct sk_buff *skb, int mac_off,
struct vlan_ethhdr *veth)
{ … }
static bool
nft_payload_copy_vlan(u32 *d, const struct sk_buff *skb, u8 offset, u8 len)
{ … }
static int __nft_payload_inner_offset(struct nft_pktinfo *pkt)
{ … }
int nft_payload_inner_offset(const struct nft_pktinfo *pkt)
{ … }
static bool nft_payload_need_vlan_adjust(u32 offset, u32 len)
{ … }
void nft_payload_eval(const struct nft_expr *expr,
struct nft_regs *regs,
const struct nft_pktinfo *pkt)
{ … }
static const struct nla_policy nft_payload_policy[NFTA_PAYLOAD_MAX + 1] = …;
static int nft_payload_init(const struct nft_ctx *ctx,
const struct nft_expr *expr,
const struct nlattr * const tb[])
{ … }
static int nft_payload_dump(struct sk_buff *skb,
const struct nft_expr *expr, bool reset)
{ … }
static bool nft_payload_reduce(struct nft_regs_track *track,
const struct nft_expr *expr)
{ … }
static bool nft_payload_offload_mask(struct nft_offload_reg *reg,
u32 priv_len, u32 field_len)
{ … }
static int nft_payload_offload_ll(struct nft_offload_ctx *ctx,
struct nft_flow_rule *flow,
const struct nft_payload *priv)
{ … }
static int nft_payload_offload_ip(struct nft_offload_ctx *ctx,
struct nft_flow_rule *flow,
const struct nft_payload *priv)
{ … }
static int nft_payload_offload_ip6(struct nft_offload_ctx *ctx,
struct nft_flow_rule *flow,
const struct nft_payload *priv)
{ … }
static int nft_payload_offload_nh(struct nft_offload_ctx *ctx,
struct nft_flow_rule *flow,
const struct nft_payload *priv)
{ … }
static int nft_payload_offload_tcp(struct nft_offload_ctx *ctx,
struct nft_flow_rule *flow,
const struct nft_payload *priv)
{ … }
static int nft_payload_offload_udp(struct nft_offload_ctx *ctx,
struct nft_flow_rule *flow,
const struct nft_payload *priv)
{ … }
static int nft_payload_offload_th(struct nft_offload_ctx *ctx,
struct nft_flow_rule *flow,
const struct nft_payload *priv)
{ … }
static int nft_payload_offload(struct nft_offload_ctx *ctx,
struct nft_flow_rule *flow,
const struct nft_expr *expr)
{ … }
static const struct nft_expr_ops nft_payload_ops = …;
const struct nft_expr_ops nft_payload_fast_ops = …;
void nft_payload_inner_eval(const struct nft_expr *expr, struct nft_regs *regs,
const struct nft_pktinfo *pkt,
struct nft_inner_tun_ctx *tun_ctx)
{ … }
static int nft_payload_inner_init(const struct nft_ctx *ctx,
const struct nft_expr *expr,
const struct nlattr * const tb[])
{ … }
static const struct nft_expr_ops nft_payload_inner_ops = …;
static inline void nft_csum_replace(__sum16 *sum, __wsum fsum, __wsum tsum)
{ … }
static bool nft_payload_udp_checksum(struct sk_buff *skb, unsigned int thoff)
{ … }
static int nft_payload_l4csum_offset(const struct nft_pktinfo *pkt,
struct sk_buff *skb,
unsigned int *l4csum_offset)
{ … }
static int nft_payload_csum_sctp(struct sk_buff *skb, int offset)
{ … }
static int nft_payload_l4csum_update(const struct nft_pktinfo *pkt,
struct sk_buff *skb,
__wsum fsum, __wsum tsum)
{ … }
static int nft_payload_csum_inet(struct sk_buff *skb, const u32 *src,
__wsum fsum, __wsum tsum, int csum_offset)
{ … }
struct nft_payload_set { … };
struct nft_payload_vlan_hdr { … };
static bool
nft_payload_set_vlan(const u32 *src, struct sk_buff *skb, u8 offset, u8 len,
int *vlan_hlen)
{ … }
static void nft_payload_set_eval(const struct nft_expr *expr,
struct nft_regs *regs,
const struct nft_pktinfo *pkt)
{ … }
static int nft_payload_set_init(const struct nft_ctx *ctx,
const struct nft_expr *expr,
const struct nlattr * const tb[])
{ … }
static int nft_payload_set_dump(struct sk_buff *skb,
const struct nft_expr *expr, bool reset)
{ … }
static bool nft_payload_set_reduce(struct nft_regs_track *track,
const struct nft_expr *expr)
{ … }
static const struct nft_expr_ops nft_payload_set_ops = …;
static const struct nft_expr_ops *
nft_payload_select_ops(const struct nft_ctx *ctx,
const struct nlattr * const tb[])
{ … }
struct nft_expr_type nft_payload_type __read_mostly = …;