diff mbox series

[nftables] src: Optimize prefix match only if is big-endian

Message ID 20210820161237.18821-1-shaw.leon@gmail.com
State Accepted
Delegated to: Pablo Neira
Headers show
Series [nftables] src: Optimize prefix match only if is big-endian | expand

Commit Message

Xiao Liang Aug. 20, 2021, 4:12 p.m. UTC
A prefix of integer type is big-endian in nature. Prefix match can be
optimized to truncated 'cmp' only if it is big-endian.

Signed-off-by: Xiao Liang <shaw.leon@gmail.com>
---
 src/netlink_linearize.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Pablo Neira Ayuso Aug. 23, 2021, 2:36 p.m. UTC | #1
On Sat, Aug 21, 2021 at 12:12:37AM +0800, Xiao Liang wrote:
> A prefix of integer type is big-endian in nature. Prefix match can be
> optimized to truncated 'cmp' only if it is big-endian.

Applied, thanks.
diff mbox series

Patch

diff --git a/src/netlink_linearize.c b/src/netlink_linearize.c
index eb53ccec..454b9ba3 100644
--- a/src/netlink_linearize.c
+++ b/src/netlink_linearize.c
@@ -548,7 +548,8 @@  static void netlink_gen_relational(struct netlink_linearize_ctx *ctx,
 	case EXPR_PREFIX:
 		sreg = get_register(ctx, expr->left);
 		if (expr_basetype(expr->left)->type != TYPE_STRING &&
-		    (!expr->right->prefix_len ||
+		    (expr->right->byteorder != BYTEORDER_BIG_ENDIAN ||
+		     !expr->right->prefix_len ||
 		     expr->right->prefix_len % BITS_PER_BYTE)) {
 			len = div_round_up(expr->right->len, BITS_PER_BYTE);
 			netlink_gen_expr(ctx, expr->left, sreg);