]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
tests: add a test case for double-flush bug in pipapo
authorFlorian Westphal <fw@strlen.de>
Fri, 1 Dec 2023 14:49:18 +0000 (15:49 +0100)
committerFlorian Westphal <fw@strlen.de>
Mon, 8 Jan 2024 13:17:22 +0000 (14:17 +0100)
Test for
'netfilter: nft_set_pipapo: skip inactive elements during set walk'.

Reported-by: Xingyuan Mo <hdthky0@gmail.com>
Signed-off-by: Florian Westphal <fw@strlen.de>
tests/shell/testcases/maps/dumps/pipapo_double_flush.nft [new file with mode: 0644]
tests/shell/testcases/maps/pipapo_double_flush [new file with mode: 0755]

diff --git a/tests/shell/testcases/maps/dumps/pipapo_double_flush.nft b/tests/shell/testcases/maps/dumps/pipapo_double_flush.nft
new file mode 100644 (file)
index 0000000..cca569e
--- /dev/null
@@ -0,0 +1,9 @@
+table inet t {
+       map m {
+               type ipv4_addr . ipv4_addr : verdict
+               flags interval
+       }
+
+       chain c {
+       }
+}
diff --git a/tests/shell/testcases/maps/pipapo_double_flush b/tests/shell/testcases/maps/pipapo_double_flush
new file mode 100755 (executable)
index 0000000..35ad096
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+# NFT_TEST_REQUIRES(NFT_TEST_HAVE_pipapo)
+
+set -e
+
+$NFT add table inet t
+$NFT add chain inet t c
+$NFT 'add map inet t m { type ipv4_addr . ipv4_addr : verdict; flags interval;}'
+
+for i in $(seq 1 10); do
+       $NFT "add element inet t m { 10.0.0.1 . 1.2.$i.1 - 1.2.$i.10 : jump c }"
+done
+
+$NFT -f /dev/stdin <<EOF
+add element inet t m { 10.1.1.1 . 1.1.1.4 : accept }
+add element inet t m { 10.1.1.6 . 1.1.1.4 : drop  }
+add element inet t m { 10.1.1.7 . 1.1.1.4 : jump c  }
+flush map inet t m
+add element inet t m { 10.1.1.1 . 1.1.1.4 : accept }
+add element inet t m { 10.1.1.6 . 1.1.1.4 : drop  }
+add element inet t m { 10.1.1.7 . 1.1.1.4 : jump c  }
+flush map inet t m
+flush map inet t m
+EOF