]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
datatype: add xinteger_type alias to print in hexadecimal
authorPablo Neira Ayuso <pablo@netfilter.org>
Tue, 2 Nov 2021 13:07:04 +0000 (14:07 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 3 Nov 2021 11:48:19 +0000 (12:48 +0100)
Add an alias of the integer type to print raw payload expressions in
hexadecimal.

Update tests/py.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/datatype.h
src/datatype.c
src/payload.c
tests/py/any/rawpayload.t
tests/py/any/rawpayload.t.payload

index 7ddd3566d459d97f5f523455d7fa25303840cd40..f5bb9dc4d937761ffe759121064c0ddf55afb5ee 100644 (file)
@@ -254,6 +254,7 @@ extern const struct datatype verdict_type;
 extern const struct datatype nfproto_type;
 extern const struct datatype bitmask_type;
 extern const struct datatype integer_type;
+extern const struct datatype xinteger_type;
 extern const struct datatype string_type;
 extern const struct datatype lladdr_type;
 extern const struct datatype ipaddr_type;
index b849f70833c7beae44c55592db5384d1f16c4bc5..a06c39960fa0cbc335f422300579d854bc2800d9 100644 (file)
@@ -410,6 +410,22 @@ const struct datatype integer_type = {
        .parse          = integer_type_parse,
 };
 
+static void xinteger_type_print(const struct expr *expr, struct output_ctx *octx)
+{
+       nft_gmp_print(octx, "0x%Zx", expr->value);
+}
+
+/* Alias of integer_type to print raw payload expressions in hexadecimal. */
+const struct datatype xinteger_type = {
+       .type           = TYPE_INTEGER,
+       .name           = "integer",
+       .desc           = "integer",
+       .basetype       = &integer_type,
+       .print          = xinteger_type_print,
+       .json           = integer_type_json,
+       .parse          = integer_type_parse,
+};
+
 static void string_type_print(const struct expr *expr, struct output_ctx *octx)
 {
        unsigned int len = div_round_up(expr->len, BITS_PER_BYTE);
index c662900bdaac31a6dc3985a41f4fcadf97d48494..d9e0d4254f19557446a173cf68c2cb5e2cc31be8 100644 (file)
@@ -269,7 +269,7 @@ void payload_init_raw(struct expr *expr, enum proto_bases base,
        expr->payload.base      = base;
        expr->payload.offset    = offset;
        expr->len               = len;
-       expr->dtype             = &integer_type;
+       expr->dtype             = &xinteger_type;
 
        if (base != PROTO_BASE_TRANSPORT_HDR)
                return;
index 9687729d610d18ab297b88718fbbd25d0bf763aa..9fe377e24397f322a7db3bade82f6ab313ba6b70 100644 (file)
@@ -7,14 +7,14 @@
 
 meta l4proto { tcp, udp, sctp} @th,16,16 { 22, 23, 80 };ok;meta l4proto { 6, 17, 132} th dport { 22, 23, 80}
 meta l4proto tcp @th,16,16 { 22, 23, 80};ok;tcp dport { 22, 23, 80}
-@nh,8,8 255;ok
-@nh,8,16 0;ok
+@nh,8,8 0xff;ok
+@nh,8,16 0x0;ok
 
 # out of range (0-1)
 @th,16,1 2;fail
 
 @ll,0,0 2;fail
 @ll,0,1;fail
-@ll,0,1 1;ok;@ll,0,8 & 128 == 128
-@ll,0,8 and 0x80 eq 0x80;ok;@ll,0,8 & 128 == 128
-@ll,0,128 0xfedcba987654321001234567890abcde;ok;@ll,0,128 338770000845734292516042252062074518750
+@ll,0,1 1;ok;@ll,0,8 & 0x80 == 0x80
+@ll,0,8 & 0x80 == 0x80;ok
+@ll,0,128 0xfedcba987654321001234567890abcde;ok
index b3ca919fb6e53b52b3534b48830dac4ace7b6d49..d2b38183cc95936976691cc4b74d40ad3756ac4a 100644 (file)
@@ -21,12 +21,12 @@ inet test-inet input
   [ payload load 2b @ transport header + 2 => reg 1 ]
   [ lookup reg 1 set __set%d ]
 
-# @nh,8,8 255
+# @nh,8,8 0xff
 inet test-inet input
   [ payload load 1b @ network header + 1 => reg 1 ]
   [ cmp eq reg 1 0x000000ff ]
 
-# @nh,8,16 0
+# @nh,8,16 0x0
 inet test-inet input
   [ payload load 2b @ network header + 1 => reg 1 ]
   [ cmp eq reg 1 0x00000000 ]
@@ -37,7 +37,7 @@ inet test-inet input
   [ bitwise reg 1 = ( reg 1 & 0x00000080 ) ^ 0x00000000 ]
   [ cmp eq reg 1 0x00000080 ]
 
-# @ll,0,8 and 0x80 eq 0x80
+# @ll,0,8 & 0x80 == 0x80
 inet test-inet input
   [ payload load 1b @ link header + 0 => reg 1 ]
   [ bitwise reg 1 = ( reg 1 & 0x00000080 ) ^ 0x00000000 ]