]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
src: remove STMT_NAT_F_INTERVAL flags and interval keyword
authorPablo Neira Ayuso <pablo@netfilter.org>
Tue, 13 Jul 2021 18:18:15 +0000 (20:18 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 13 Jul 2021 18:21:32 +0000 (20:21 +0200)
STMT_NAT_F_INTERVAL is not useful, the keyword interval can be removed
to simplify the syntax, e.g.

 snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 }

This patch reworks 9599d9d25a6b ("src: NAT support for intervals in
maps").

Do not remove STMT_NAT_F_INTERVAL yet since this flag is needed for
interval concatenations coming in a follow up patch.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/evaluate.c
src/json.c
src/netlink_delinearize.c
src/parser_bison.y
src/statement.c
tests/py/ip/snat.t
tests/py/ip/snat.t.payload
tests/shell/testcases/sets/0047nat_0
tests/shell/testcases/sets/dumps/0047nat_0.nft

index dbc773d164ed91c2dbd9a103da4ce492d9f76c03..13888e5b476dc5240221146cb43c6b0886ef2678 100644 (file)
@@ -3200,26 +3200,6 @@ static int stmt_evaluate_nat(struct eval_ctx *ctx, struct stmt *stmt)
                        return err;
        }
 
-       if (stmt->nat.type_flags & STMT_NAT_F_INTERVAL) {
-               switch (stmt->nat.addr->etype) {
-               case EXPR_MAP:
-                       if (!(stmt->nat.addr->mappings->set->data->flags & EXPR_F_INTERVAL))
-                               return expr_error(ctx->msgs, stmt->nat.addr,
-                                                 "map is not defined as interval");
-                       break;
-               case EXPR_RANGE:
-               case EXPR_PREFIX:
-                       break;
-               default:
-                       return expr_error(ctx->msgs, stmt->nat.addr,
-                                         "neither prefix, range nor map expression");
-               }
-
-               stmt->flags |= STMT_F_TERMINAL;
-
-               return 0;
-       }
-
        if (stmt->nat.proto != NULL) {
                err = nat_evaluate_transport(ctx, stmt, &stmt->nat.proto);
                if (err < 0)
index f111ad678f8a030fe0747d583a3d00272cc84c88..edc9d640bbbc05a1cf9cd5400eadc9bc1964305f 100644 (file)
@@ -1329,8 +1329,6 @@ static json_t *nat_type_flags_json(uint32_t type_flags)
 {
        json_t *array = json_array();
 
-       if (type_flags & STMT_NAT_F_INTERVAL)
-               json_array_append_new(array, json_string("interval"));
        if (type_flags & STMT_NAT_F_PREFIX)
                json_array_append_new(array, json_string("prefix"));
        if (type_flags & STMT_NAT_F_CONCAT)
index fd994b8bdde673ae154ff906fc3cf2557c9e1512..a4ae938a57491b9c5c4d8bbe101e9b69c7ac6efb 100644 (file)
@@ -1119,7 +1119,6 @@ static void netlink_parse_nat(struct netlink_parse_ctx *ctx,
 
        if (is_nat_addr_map(addr, family)) {
                stmt->nat.family = family;
-               stmt->nat.type_flags |= STMT_NAT_F_INTERVAL;
                ctx->stmt = stmt;
                return;
        }
index 872d7cdb92ad247be5a82330d2528cde2829d62d..790cd832b74222161ab998a983f7d8271c4351c0 100644 (file)
@@ -3623,28 +3623,24 @@ nat_stmt_args           :       stmt_expr
                        {
                                $<stmt>0->nat.family = $1;
                                $<stmt>0->nat.addr = $4;
-                               $<stmt>0->nat.type_flags = STMT_NAT_F_INTERVAL;
                        }
                        |       INTERVAL TO     stmt_expr
                        {
                                $<stmt>0->nat.addr = $3;
-                               $<stmt>0->nat.type_flags = STMT_NAT_F_INTERVAL;
                        }
                        |       nf_key_proto PREFIX TO  stmt_expr
                        {
                                $<stmt>0->nat.family = $1;
                                $<stmt>0->nat.addr = $4;
                                $<stmt>0->nat.type_flags =
-                                               STMT_NAT_F_PREFIX |
-                                               STMT_NAT_F_INTERVAL;
+                                               STMT_NAT_F_PREFIX;
                                $<stmt>0->nat.flags |= NF_NAT_RANGE_NETMAP;
                        }
                        |       PREFIX TO       stmt_expr
                        {
                                $<stmt>0->nat.addr = $3;
                                $<stmt>0->nat.type_flags =
-                                               STMT_NAT_F_PREFIX |
-                                               STMT_NAT_F_INTERVAL;
+                                               STMT_NAT_F_PREFIX;
                                $<stmt>0->nat.flags |= NF_NAT_RANGE_NETMAP;
                        }
                        ;
index dfd275104c59ed713cc7f59c6260b0ef501cd9a6..6db7e397586007af3b72ac28d2003acc888fbb8b 100644 (file)
@@ -677,8 +677,6 @@ static void nat_stmt_print(const struct stmt *stmt, struct output_ctx *octx)
                        nft_print(octx, " addr . port");
                else if (stmt->nat.type_flags & STMT_NAT_F_PREFIX)
                        nft_print(octx, " prefix");
-               else if (stmt->nat.type_flags & STMT_NAT_F_INTERVAL)
-                       nft_print(octx, " interval");
 
                nft_print(octx, " to");
        }
index c6e8a8e68f9d2c15ce14d1e4648018f82330a2a4..56ab943e8b97e3ff65fa89b31222186407596131 100644 (file)
@@ -10,5 +10,5 @@ iifname "eth0" tcp dport != {80, 90, 23} snat to 192.168.3.2;ok
 iifname "eth0" tcp dport != 23-34 snat to 192.168.3.2;ok
 
 snat ip addr . port to ip saddr map { 10.141.11.4 : 192.168.2.3 . 80 };ok
-snat ip interval to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 };ok
+snat ip to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 };ok
 snat ip prefix to ip saddr map { 10.141.11.0/24 : 192.168.2.0/24 };ok
index ef4c1ce9f150b5f1e3eed4dc91b3b5ab9d84010a..2a03ff1f95a059825be6eb7a1c5727c1456519cf 100644 (file)
@@ -69,7 +69,7 @@ ip
   [ lookup reg 1 set __map%d dreg 1 ]
   [ nat snat ip addr_min reg 1 proto_min reg 9 ]
 
-# snat ip interval to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 }
+# snat ip to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 }
 __map%d test-ip4 b size 1
 __map%d test-ip4 0
        element 040b8d0a  : 0202a8c0 0402a8c0 0 [end]
index 746a6b6d345051f712c53e7547ec3b973ea58ca2..cb1d4d68d2d26734ecff68b3157402a6f946b7f8 100755 (executable)
@@ -10,7 +10,7 @@ EXPECTED="table ip x {
 
             chain y {
                     type nat hook postrouting priority srcnat; policy accept;
-                    snat ip interval to ip saddr map @y
+                    snat to ip saddr map @y
             }
      }
 "
index 70730ef3c56fca771f6acec44f6c90e065d4a5dc..e796805471a3e844e31a68f373ed4332efde6c5c 100644 (file)
@@ -8,6 +8,6 @@ table ip x {
 
        chain y {
                type nat hook postrouting priority srcnat; policy accept;
-               snat ip interval to ip saddr map @y
+               snat ip to ip saddr map @y
        }
 }