netfilter: nft_cmp: optimize comparison for 16-bytes
Allow up to 16-byte comparisons with a new cmp fast version. Use two 64-bit words and calculate the mask representing the bits to be compared. Make sure the comparison is 64-bit aligned and avoid out-of-bound memory access on registers. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
@@ -42,6 +42,14 @@ struct nft_cmp_fast_expr {
|
||||
bool inv;
|
||||
};
|
||||
|
||||
struct nft_cmp16_fast_expr {
|
||||
struct nft_data data;
|
||||
struct nft_data mask;
|
||||
u8 sreg;
|
||||
u8 len;
|
||||
bool inv;
|
||||
};
|
||||
|
||||
struct nft_immediate_expr {
|
||||
struct nft_data data;
|
||||
u8 dreg;
|
||||
@@ -59,6 +67,7 @@ static inline u32 nft_cmp_fast_mask(unsigned int len)
|
||||
}
|
||||
|
||||
extern const struct nft_expr_ops nft_cmp_fast_ops;
|
||||
extern const struct nft_expr_ops nft_cmp16_fast_ops;
|
||||
|
||||
struct nft_payload {
|
||||
enum nft_payload_bases base:8;
|
||||
|
||||
Reference in New Issue
Block a user