1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef _NET_NF_TABLES_CORE_H 3#define _NET_NF_TABLES_CORE_H 4 5extern struct nft_expr_type nft_imm_type; 6extern struct nft_expr_type nft_cmp_type; 7extern struct nft_expr_type nft_lookup_type; 8extern struct nft_expr_type nft_bitwise_type; 9extern struct nft_expr_type nft_byteorder_type; 10extern struct nft_expr_type nft_payload_type; 11extern struct nft_expr_type nft_dynset_type; 12extern struct nft_expr_type nft_range_type; 13 14int nf_tables_core_module_init(void); 15void nf_tables_core_module_exit(void); 16 17struct nft_cmp_fast_expr { 18 u32 data; 19 enum nft_registers sreg:8; 20 u8 len; 21}; 22 23/* Calculate the mask for the nft_cmp_fast expression. On big endian the 24 * mask needs to include the *upper* bytes when interpreting that data as 25 * something smaller than the full u32, therefore a cpu_to_le32 is done. 26 */ 27static inline u32 nft_cmp_fast_mask(unsigned int len) 28{ 29 return cpu_to_le32(~0U >> (FIELD_SIZEOF(struct nft_cmp_fast_expr, 30 data) * BITS_PER_BYTE - len)); 31} 32 33extern const struct nft_expr_ops nft_cmp_fast_ops; 34 35struct nft_payload { 36 enum nft_payload_bases base:8; 37 u8 offset; 38 u8 len; 39 enum nft_registers dreg:8; 40}; 41 42struct nft_payload_set { 43 enum nft_payload_bases base:8; 44 u8 offset; 45 u8 len; 46 enum nft_registers sreg:8; 47 u8 csum_type; 48 u8 csum_offset; 49 u8 csum_flags; 50}; 51 52extern const struct nft_expr_ops nft_payload_fast_ops; 53 54extern struct static_key_false nft_counters_enabled; 55extern struct static_key_false nft_trace_enabled; 56 57#endif /* _NET_NF_TABLES_CORE_H */ 58