From: Aleksei Oladko <[email protected]> The rpath.sh test fails on certain iptables versions when attempting to zero all table counters at once via 'iptables -Z'. The operation returns
RULE_REPLACE failed (Invalid argument): rule in chain PREROUTING As a workaround, reset counters by iterating over rules and zeroing them individually instead of using a single RULE_REPLACE operation. https://virtuozzo.atlassian.net/browse/VSTOR-121588 Signed-off-by: Aleksei Oladko <[email protected]> Signed-off-by: Konstantin Khorenko <[email protected]> Reviewed-by: Pavel Tikhomirov <[email protected]> Feature: fix selftests --- Changes: v2: Replace bash -c with xargs approach with a simpler while read loop to avoid nested shell invocations and improve code readability. This also drops '$iptables' which really made me think this won't work as bash should not substitute variables in single quotes. And makes us able to drop "\$1" extra quoting as well. --- .../testing/selftests/net/netfilter/rpath.sh | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/net/netfilter/rpath.sh b/tools/testing/selftests/net/netfilter/rpath.sh index 86ec4e68594dc..2272d0ba0f977 100755 --- a/tools/testing/selftests/net/netfilter/rpath.sh +++ b/tools/testing/selftests/net/netfilter/rpath.sh @@ -133,8 +133,24 @@ netns_ping() { # (netns, args...) } clear_counters() { - [ -n "$iptables" ] && ip netns exec "$ns2" "$iptables" -t raw -Z - [ -n "$ip6tables" ] && ip netns exec "$ns2" "$ip6tables" -t raw -Z + if [ -n "$iptables" ]; then + if ! ip netns exec "$ns2" "$iptables" -t raw -Z 2>/dev/null; then + ip netns exec "$ns2" "$iptables" -L PREROUTING -t raw -n --line-numbers | \ + awk '$1+0>0 {print $1}' | \ + while read rulenum; do + ip netns exec "$ns2" "$iptables" -t raw -Z PREROUTING "$rulenum" 2>/dev/null + done + fi + fi + if [ -n "$ip6tables" ]; then + if ! ip netns exec "$ns2" "$ip6tables" -t raw -Z 2>/dev/null; then + ip netns exec "$ns2" "$ip6tables" -L PREROUTING -t raw -n --line-numbers | \ + awk '$1+0>0 {print $1}' | \ + while read rulenum; do + ip netns exec "$ns2" "$ip6tables" -t raw -Z PREROUTING "$rulenum" 2>/dev/null + done + fi + fi if [ -n "$nft" ]; then ( echo "delete table inet t"; -- 2.43.0 _______________________________________________ Devel mailing list [email protected] https://lists.openvz.org/mailman/listinfo/devel
