]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
parser_bison: stateful statement support in map
authorPablo Neira Ayuso <pablo@netfilter.org>
Mon, 26 Jul 2021 10:00:07 +0000 (12:00 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 26 Jul 2021 14:56:24 +0000 (16:56 +0200)
Missing parser extension to support for stateful statements in map.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/parser_bison.y
tests/shell/testcases/maps/0011vmap_0 [new file with mode: 0755]
tests/shell/testcases/maps/dumps/0011vmap_0.nft [new file with mode: 0644]

index 5545a43d160efd0961d2437d6cfb68edf8e4196b..b9b3d026a4ee8faa04b239ce2a24b6c3a47c164d 100644 (file)
@@ -2052,6 +2052,12 @@ map_block                :       /* empty */     { $$ = $<set>-1; }
                                $1->flags |= $3;
                                $$ = $1;
                        }
+                       |       map_block       stateful_stmt_list              stmt_separator
+                       {
+                               list_splice_tail($2, &$1->stmt_list);
+                               $$ = $1;
+                               free($2);
+                       }
                        |       map_block       ELEMENTS        '='             set_block_expr
                        {
                                $1->init = $4;
diff --git a/tests/shell/testcases/maps/0011vmap_0 b/tests/shell/testcases/maps/0011vmap_0
new file mode 100755 (executable)
index 0000000..83704d4
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+set -e
+
+EXPECTED="table inet filter {
+       map portmap {
+               type inet_service : verdict
+               counter
+       }
+
+        chain ssh_input {
+        }
+
+        chain wan_input {
+                tcp dport vmap @portmap
+        }
+
+        chain prerouting {
+                type filter hook prerouting priority -300; policy accept;
+                iif vmap { "lo" : jump wan_input }
+        }
+}"
+
+$NFT -f - <<< "$EXPECTED"
+$NFT 'add element inet filter portmap { 22 : jump ssh_input, * : drop }'
diff --git a/tests/shell/testcases/maps/dumps/0011vmap_0.nft b/tests/shell/testcases/maps/dumps/0011vmap_0.nft
new file mode 100644 (file)
index 0000000..4a72b5e
--- /dev/null
@@ -0,0 +1,19 @@
+table inet filter {
+       map portmap {
+               type inet_service : verdict
+               counter
+               elements = { 22 counter packets 0 bytes 0 : jump ssh_input, * counter packets 0 bytes 0 : drop }
+       }
+
+       chain ssh_input {
+       }
+
+       chain wan_input {
+               tcp dport vmap @portmap
+       }
+
+       chain prerouting {
+               type filter hook prerouting priority raw; policy accept;
+               iif vmap { "lo" : jump wan_input }
+       }
+}