]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
evaluate: no need to swap byte-order for values of fewer than 16 bits.
authorJeremy Sowden <jeremy@azazel.net>
Tue, 3 Mar 2020 09:48:31 +0000 (09:48 +0000)
committerFlorian Westphal <fw@strlen.de>
Wed, 4 Mar 2020 22:36:45 +0000 (23:36 +0100)
Endianness is not meaningful for objects smaller than 2 bytes and the
byte-order conversions are no-ops in the kernel, so just update the
expression as if it were constant.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
src/evaluate.c
tests/py/any/meta.t.payload

index 9b1a04f26f44d212ec03c0a51e6360483d0cf7af..f4260436ae0f5444efe6aba1be87044fcd5a8faf 100644 (file)
@@ -147,7 +147,7 @@ static int byteorder_conversion(struct eval_ctx *ctx, struct expr **expr,
                                  byteorder_names[byteorder],
                                  byteorder_names[(*expr)->byteorder]);
 
-       if (expr_is_constant(*expr))
+       if (expr_is_constant(*expr) || (*expr)->len / BITS_PER_BYTE < 2)
                (*expr)->byteorder = byteorder;
        else {
                op = byteorder_conversion_op(*expr, byteorder);
index 486d7aa566ea36fa316d29234b0b0ca22f3021db..2af244a9e246d25a93cd43b04e732907bcab3eda 100644 (file)
@@ -99,14 +99,12 @@ ip test-ip4 input
 # meta l4proto 33-45
 ip test-ip4 input
   [ meta load l4proto => reg 1 ]
-  [ byteorder reg 1 = hton(reg 1, 2, 1) ]
   [ cmp gte reg 1 0x00000021 ]
   [ cmp lte reg 1 0x0000002d ]
 
 # meta l4proto != 33-45
 ip test-ip4 input
   [ meta load l4proto => reg 1 ]
-  [ byteorder reg 1 = hton(reg 1, 2, 1) ]
   [ range neq reg 1 0x00000021 0x0000002d ]
 
 # meta l4proto { 33, 55, 67, 88}
@@ -865,7 +863,6 @@ __set%d test-ip4 0
        element 00000000  : 1 [end]     element 00000021  : 0 [end]     element 00000038  : 1 [end]     element 00000042  : 0 [end]     element 00000059  : 1 [end]
 ip test-ip4 input 
   [ meta load l4proto => reg 1 ]
-  [ byteorder reg 1 = hton(reg 1, 2, 1) ]
   [ lookup reg 1 set __set%d ]
 
 # meta l4proto != { 33-55, 66-88}
@@ -874,7 +871,6 @@ __set%d test-ip4 0
        element 00000000  : 1 [end]     element 00000021  : 0 [end]     element 00000038  : 1 [end]     element 00000042  : 0 [end]     element 00000059  : 1 [end]
 ip test-ip4 input 
   [ meta load l4proto => reg 1 ]
-  [ byteorder reg 1 = hton(reg 1, 2, 1) ]
   [ lookup reg 1 set __set%d 0x1 ]
 
 # meta skuid { 2001-2005, 3001-3005} accept