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 int nf_tables_core_module_init(void); 20 void nf_tables_core_module_exit(void); 21 22 struct nft_cmp_fast_expr { 23 u32 data; 24 enum nft_registers sreg:8; 25 u8 len; 26 }; 27 28 struct nft_immediate_expr { 29 struct nft_data data; 30 enum nft_registers dreg:8; 31 u8 dlen; 32 }; 33 34 /* Calculate the mask for the nft_cmp_fast expression. On big endian the 35 * mask needs to include the *upper* bytes when interpreting that data as 36 * something smaller than the full u32, therefore a cpu_to_le32 is done. 37 */ 38 static inline u32 nft_cmp_fast_mask(unsigned int len) 39 { 40 return cpu_to_le32(~0U >> (FIELD_SIZEOF(struct nft_cmp_fast_expr, 41 data) * BITS_PER_BYTE - len)); 42 } 43 44 extern const struct nft_expr_ops nft_cmp_fast_ops; 45 46 struct nft_payload { 47 enum nft_payload_bases base:8; 48 u8 offset; 49 u8 len; 50 enum nft_registers dreg:8; 51 }; 52 53 struct nft_payload_set { 54 enum nft_payload_bases base:8; 55 u8 offset; 56 u8 len; 57 enum nft_registers sreg:8; 58 u8 csum_type; 59 u8 csum_offset; 60 u8 csum_flags; 61 }; 62 63 extern const struct nft_expr_ops nft_payload_fast_ops; 64 65 extern struct static_key_false nft_counters_enabled; 66 extern struct static_key_false nft_trace_enabled; 67 68 #endif /* _NET_NF_TABLES_CORE_H */ 69