root/include/net/netfilter/nf_tables_core.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. nft_cmp_fast_mask

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _NET_NF_TABLES_CORE_H
   3 #define _NET_NF_TABLES_CORE_H
   4 
   5 #include <net/netfilter/nf_tables.h>
   6 
   7 extern struct nft_expr_type nft_imm_type;
   8 extern struct nft_expr_type nft_cmp_type;
   9 extern struct nft_expr_type nft_lookup_type;
  10 extern struct nft_expr_type nft_bitwise_type;
  11 extern struct nft_expr_type nft_byteorder_type;
  12 extern struct nft_expr_type nft_payload_type;
  13 extern struct nft_expr_type nft_dynset_type;
  14 extern struct nft_expr_type nft_range_type;
  15 extern struct nft_expr_type nft_meta_type;
  16 extern struct nft_expr_type nft_rt_type;
  17 extern struct nft_expr_type nft_exthdr_type;
  18 
  19 #ifdef CONFIG_NETWORK_SECMARK
  20 extern struct nft_object_type nft_secmark_obj_type;
  21 #endif
  22 
  23 int nf_tables_core_module_init(void);
  24 void nf_tables_core_module_exit(void);
  25 
  26 struct nft_cmp_fast_expr {
  27         u32                     data;
  28         enum nft_registers      sreg:8;
  29         u8                      len;
  30 };
  31 
  32 struct nft_immediate_expr {
  33         struct nft_data         data;
  34         enum nft_registers      dreg:8;
  35         u8                      dlen;
  36 };
  37 
  38 /* Calculate the mask for the nft_cmp_fast expression. On big endian the
  39  * mask needs to include the *upper* bytes when interpreting that data as
  40  * something smaller than the full u32, therefore a cpu_to_le32 is done.
  41  */
  42 static inline u32 nft_cmp_fast_mask(unsigned int len)
  43 {
  44         return cpu_to_le32(~0U >> (FIELD_SIZEOF(struct nft_cmp_fast_expr,
  45                                                 data) * BITS_PER_BYTE - len));
  46 }
  47 
  48 extern const struct nft_expr_ops nft_cmp_fast_ops;
  49 
  50 struct nft_payload {
  51         enum nft_payload_bases  base:8;
  52         u8                      offset;
  53         u8                      len;
  54         enum nft_registers      dreg:8;
  55 };
  56 
  57 struct nft_payload_set {
  58         enum nft_payload_bases  base:8;
  59         u8                      offset;
  60         u8                      len;
  61         enum nft_registers      sreg:8;
  62         u8                      csum_type;
  63         u8                      csum_offset;
  64         u8                      csum_flags;
  65 };
  66 
  67 extern const struct nft_expr_ops nft_payload_fast_ops;
  68 
  69 extern struct static_key_false nft_counters_enabled;
  70 extern struct static_key_false nft_trace_enabled;
  71 
  72 extern struct nft_set_type nft_set_rhash_type;
  73 extern struct nft_set_type nft_set_hash_type;
  74 extern struct nft_set_type nft_set_hash_fast_type;
  75 extern struct nft_set_type nft_set_rbtree_type;
  76 extern struct nft_set_type nft_set_bitmap_type;
  77 
  78 struct nft_expr;
  79 struct nft_regs;
  80 struct nft_pktinfo;
  81 void nft_meta_get_eval(const struct nft_expr *expr,
  82                        struct nft_regs *regs, const struct nft_pktinfo *pkt);
  83 void nft_cmp_eval(const struct nft_expr *expr,
  84                   struct nft_regs *regs, const struct nft_pktinfo *pkt);
  85 void nft_lookup_eval(const struct nft_expr *expr,
  86                      struct nft_regs *regs, const struct nft_pktinfo *pkt);
  87 void nft_payload_eval(const struct nft_expr *expr,
  88                       struct nft_regs *regs, const struct nft_pktinfo *pkt);
  89 void nft_immediate_eval(const struct nft_expr *expr,
  90                         struct nft_regs *regs, const struct nft_pktinfo *pkt);
  91 void nft_bitwise_eval(const struct nft_expr *expr,
  92                       struct nft_regs *regs, const struct nft_pktinfo *pkt);
  93 void nft_range_eval(const struct nft_expr *expr,
  94                     struct nft_regs *regs, const struct nft_pktinfo *pkt);
  95 void nft_byteorder_eval(const struct nft_expr *expr,
  96                         struct nft_regs *regs, const struct nft_pktinfo *pkt);
  97 void nft_dynset_eval(const struct nft_expr *expr,
  98                      struct nft_regs *regs, const struct nft_pktinfo *pkt);
  99 void nft_rt_get_eval(const struct nft_expr *expr,
 100                      struct nft_regs *regs, const struct nft_pktinfo *pkt);
 101 #endif /* _NET_NF_TABLES_CORE_H */

/* [<][>][^][v][top][bottom][index][help] */