3 # This test is for stress-testing the nf_tables config plane path vs.
4 # packet path processing: Make sure we never release rules that are
5 # still visible to other cpus.
9 # Kselftest framework requirement - SKIP code is 4.
13 tables="foo bar baz quux"
15 nft --version > /dev/null 2>&1
17 echo "SKIP: Could not run test without nft tool"
21 ip -Version > /dev/null 2>&1
23 echo "SKIP: Could not run test without ip tool"
29 for table in $tables; do
30 echo add table inet "$table" >> "$tmp"
31 echo flush table inet "$table" >> "$tmp"
33 echo "add chain inet $table INPUT { type filter hook input priority 0; }" >> "$tmp"
34 echo "add chain inet $table OUTPUT { type filter hook output priority 0; }" >> "$tmp"
35 for c in $(seq 1 400); do
36 chain=$(printf "chain%03u" "$c")
37 echo "add chain inet $table $chain" >> "$tmp"
40 for c in $(seq 1 400); do
41 chain=$(printf "chain%03u" "$c")
42 for BASE in INPUT OUTPUT; do
43 echo "add rule inet $table $BASE counter jump $chain" >> "$tmp"
45 echo "add rule inet $table $chain counter return" >> "$tmp"
49 ip netns add "$testns"
50 ip -netns "$testns" link set lo up
52 lscpu | grep ^CPU\(s\): | ( read cpu cpunum ;
54 for i in $(seq 0 $cpunum);do
55 mask=$(printf 0x%x $((1<<$i)))
56 ip netns exec "$testns" taskset $mask ping -4 127.0.0.1 -fq > /dev/null &
57 ip netns exec "$testns" taskset $mask ping -6 ::1 -fq > /dev/null &
62 for i in $(seq 1 10) ; do ip netns exec "$testns" nft -f "$tmp" & done
64 for table in $tables;do
65 randsleep=$((RANDOM%10))
67 ip netns exec "$testns" nft delete table inet $table 2>/dev/null
70 randsleep=$((RANDOM%10))
78 ip netns del "$testns"