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 7extern struct nft_expr_type nft_imm_type; 8extern struct nft_expr_type nft_cmp_type; 9extern struct nft_expr_type nft_lookup_type; 10extern struct nft_expr_type nft_bitwise_type; 11extern struct nft_expr_type nft_byteorder_type; 12extern struct nft_expr_type nft_payload_type; 13extern struct nft_expr_type nft_dynset_type; 14extern struct nft_expr_type nft_range_type; 15extern struct nft_expr_type nft_meta_type; 16extern struct nft_expr_type nft_rt_type; 17extern struct nft_expr_type nft_exthdr_type; 18 19int nf_tables_core_module_init(void); 20void nf_tables_core_module_exit(void); 21 22struct nft_cmp_fast_expr { 23 u32 data; 24 enum nft_registers sreg:8; 25 u8 len; 26}; 27 28struct 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 */ 38static 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 44extern const struct nft_expr_ops nft_cmp_fast_ops; 45 46struct nft_payload { 47 enum nft_payload_bases base:8; 48 u8 offset; 49 u8 len; 50 enum nft_registers dreg:8; 51}; 52 53struct 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 63extern const struct nft_expr_ops nft_payload_fast_ops; 64 65extern struct static_key_false nft_counters_enabled; 66extern struct static_key_false nft_trace_enabled; 67 68extern struct nft_set_type nft_set_rhash_type; 69extern struct nft_set_type nft_set_hash_type; 70extern struct nft_set_type nft_set_hash_fast_type; 71extern struct nft_set_type nft_set_rbtree_type; 72extern struct nft_set_type nft_set_bitmap_type; 73 74#endif /* _NET_NF_TABLES_CORE_H */ 75