Commit 87ce7d79 authored by Florian Westphal's avatar Florian Westphal Committed by Jakub Kicinski

selftests: netfilter: ipvs.sh: move to lib.sh infra

The setup_ns helper makes the netns names random, so replace nsX with $nsX
everywhere.

Replace nc with socat, otherwise script fails on my system due to
incompatible nc versions ("nc: cannot use -p and -l").
Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
Link: https://lore.kernel.org/r/20240411233624.8129-11-fw@strlen.deSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 10e2ed3f
#!/bin/sh #!/bin/bash
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
# #
# End-to-end ipvs test suite # End-to-end ipvs test suite
...@@ -24,8 +24,8 @@ ...@@ -24,8 +24,8 @@
# We assume that all network driver are loaded # We assume that all network driver are loaded
# #
# Kselftest framework requirement - SKIP code is 4. source lib.sh
ksft_skip=4
ret=0 ret=0
GREEN='\033[0;92m' GREEN='\033[0;92m'
RED='\033[0;31m' RED='\033[0;31m'
...@@ -46,53 +46,39 @@ readonly datalen=32 ...@@ -46,53 +46,39 @@ readonly datalen=32
sysipvsnet="/proc/sys/net/ipv4/vs/" sysipvsnet="/proc/sys/net/ipv4/vs/"
if [ ! -d $sysipvsnet ]; then if [ ! -d $sysipvsnet ]; then
modprobe -q ip_vs if ! modprobe -q ip_vs; then
if [ $? -ne 0 ]; then
echo "skip: could not run test without ipvs module" echo "skip: could not run test without ipvs module"
exit $ksft_skip exit $ksft_skip
fi fi
fi fi
ip -Version > /dev/null 2>&1 checktool "ipvsadm -v" "run test without ipvsadm"
if [ $? -ne 0 ]; then checktool "socat -h" "run test without socat"
echo "SKIP: Could not run test without ip tool"
exit $ksft_skip
fi
ipvsadm -v > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "SKIP: Could not run test without ipvsadm"
exit $ksft_skip
fi
setup() { setup() {
ip netns add ns0 setup_ns ns0 ns1 ns2
ip netns add ns1
ip netns add ns2 ip link add veth01 netns "${ns0}" type veth peer name veth10 netns "${ns1}"
ip link add veth02 netns "${ns0}" type veth peer name veth20 netns "${ns2}"
ip link add veth01 netns ns0 type veth peer name veth10 netns ns1 ip link add veth12 netns "${ns1}" type veth peer name veth21 netns "${ns2}"
ip link add veth02 netns ns0 type veth peer name veth20 netns ns2
ip link add veth12 netns ns1 type veth peer name veth21 netns ns2 ip netns exec "${ns0}" ip link set veth01 up
ip netns exec "${ns0}" ip link set veth02 up
ip netns exec ns0 ip link set veth01 up ip netns exec "${ns0}" ip link add br0 type bridge
ip netns exec ns0 ip link set veth02 up ip netns exec "${ns0}" ip link set veth01 master br0
ip netns exec ns0 ip link add br0 type bridge ip netns exec "${ns0}" ip link set veth02 master br0
ip netns exec ns0 ip link set veth01 master br0 ip netns exec "${ns0}" ip link set br0 up
ip netns exec ns0 ip link set veth02 master br0 ip netns exec "${ns0}" ip addr add "${cip_v4}/24" dev br0
ip netns exec ns0 ip link set br0 up
ip netns exec ns0 ip addr add ${cip_v4}/24 dev br0 ip netns exec "${ns1}" ip link set veth10 up
ip netns exec "${ns1}" ip addr add "${gip_v4}/24" dev veth10
ip netns exec ns1 ip link set lo up ip netns exec "${ns1}" ip link set veth12 up
ip netns exec ns1 ip link set veth10 up ip netns exec "${ns1}" ip addr add "${dip_v4}/24" dev veth12
ip netns exec ns1 ip addr add ${gip_v4}/24 dev veth10
ip netns exec ns1 ip link set veth12 up ip netns exec "${ns2}" ip link set veth21 up
ip netns exec ns1 ip addr add ${dip_v4}/24 dev veth12 ip netns exec "${ns2}" ip addr add "${rip_v4}/24" dev veth21
ip netns exec "${ns2}" ip link set veth20 up
ip netns exec ns2 ip link set lo up ip netns exec "${ns2}" ip addr add "${sip_v4}/24" dev veth20
ip netns exec ns2 ip link set veth21 up
ip netns exec ns2 ip addr add ${rip_v4}/24 dev veth21
ip netns exec ns2 ip link set veth20 up
ip netns exec ns2 ip addr add ${sip_v4}/24 dev veth20
sleep 1 sleep 1
...@@ -100,10 +86,7 @@ setup() { ...@@ -100,10 +86,7 @@ setup() {
} }
cleanup() { cleanup() {
for i in 0 1 2 cleanup_all_ns
do
ip netns del ns$i > /dev/null 2>&1
done
if [ -f "${outfile}" ]; then if [ -f "${outfile}" ]; then
rm "${outfile}" rm "${outfile}"
...@@ -114,13 +97,13 @@ cleanup() { ...@@ -114,13 +97,13 @@ cleanup() {
} }
server_listen() { server_listen() {
ip netns exec ns2 nc -l -p 8080 > "${outfile}" & ip netns exec "$ns2" socat -u -4 TCP-LISTEN:8080,reuseaddr STDOUT > "${outfile}" &
server_pid=$! server_pid=$!
sleep 0.2 sleep 0.2
} }
client_connect() { client_connect() {
ip netns exec ns0 timeout 2 nc -w 1 ${vip_v4} ${port} < "${infile}" ip netns exec "${ns0}" timeout 2 socat -u -4 STDIN TCP:"${vip_v4}":"${port}" < "${infile}"
} }
verify_data() { verify_data() {
...@@ -136,58 +119,58 @@ test_service() { ...@@ -136,58 +119,58 @@ test_service() {
test_dr() { test_dr() {
ip netns exec ns0 ip route add ${vip_v4} via ${gip_v4} dev br0 ip netns exec "${ns0}" ip route add "${vip_v4}" via "${gip_v4}" dev br0
ip netns exec ns1 sysctl -qw net.ipv4.ip_forward=1 ip netns exec "${ns1}" sysctl -qw net.ipv4.ip_forward=1
ip netns exec ns1 ipvsadm -A -t ${vip_v4}:${port} -s rr ip netns exec "${ns1}" ipvsadm -A -t "${vip_v4}:${port}" -s rr
ip netns exec ns1 ipvsadm -a -t ${vip_v4}:${port} -r ${rip_v4}:${port} ip netns exec "${ns1}" ipvsadm -a -t "${vip_v4}:${port}" -r "${rip_v4}:${port}"
ip netns exec ns1 ip addr add ${vip_v4}/32 dev lo:1 ip netns exec "${ns1}" ip addr add "${vip_v4}/32" dev lo:1
# avoid incorrect arp response # avoid incorrect arp response
ip netns exec ns2 sysctl -qw net.ipv4.conf.all.arp_ignore=1 ip netns exec "${ns2}" sysctl -qw net.ipv4.conf.all.arp_ignore=1
ip netns exec ns2 sysctl -qw net.ipv4.conf.all.arp_announce=2 ip netns exec "${ns2}" sysctl -qw net.ipv4.conf.all.arp_announce=2
# avoid reverse route lookup # avoid reverse route lookup
ip netns exec ns2 sysctl -qw net.ipv4.conf.all.rp_filter=0 ip netns exec "${ns2}" sysctl -qw net.ipv4.conf.all.rp_filter=0
ip netns exec ns2 sysctl -qw net.ipv4.conf.veth21.rp_filter=0 ip netns exec "${ns2}" sysctl -qw net.ipv4.conf.veth21.rp_filter=0
ip netns exec ns2 ip addr add ${vip_v4}/32 dev lo:1 ip netns exec "${ns2}" ip addr add "${vip_v4}/32" dev lo:1
test_service test_service
} }
test_nat() { test_nat() {
ip netns exec ns0 ip route add ${vip_v4} via ${gip_v4} dev br0 ip netns exec "${ns0}" ip route add "${vip_v4}" via "${gip_v4}" dev br0
ip netns exec ns1 sysctl -qw net.ipv4.ip_forward=1 ip netns exec "${ns1}" sysctl -qw net.ipv4.ip_forward=1
ip netns exec ns1 ipvsadm -A -t ${vip_v4}:${port} -s rr ip netns exec "${ns1}" ipvsadm -A -t "${vip_v4}:${port}" -s rr
ip netns exec ns1 ipvsadm -a -m -t ${vip_v4}:${port} -r ${rip_v4}:${port} ip netns exec "${ns1}" ipvsadm -a -m -t "${vip_v4}:${port}" -r "${rip_v4}:${port}"
ip netns exec ns1 ip addr add ${vip_v4}/32 dev lo:1 ip netns exec "${ns1}" ip addr add "${vip_v4}/32" dev lo:1
ip netns exec ns2 ip link del veth20 ip netns exec "${ns2}" ip link del veth20
ip netns exec ns2 ip route add default via ${dip_v4} dev veth21 ip netns exec "${ns2}" ip route add default via "${dip_v4}" dev veth21
test_service test_service
} }
test_tun() { test_tun() {
ip netns exec ns0 ip route add ${vip_v4} via ${gip_v4} dev br0 ip netns exec "${ns0}" ip route add "${vip_v4}" via "${gip_v4}" dev br0
ip netns exec ns1 modprobe ipip ip netns exec "${ns1}" modprobe -q ipip
ip netns exec ns1 ip link set tunl0 up ip netns exec "${ns1}" ip link set tunl0 up
ip netns exec ns1 sysctl -qw net.ipv4.ip_forward=0 ip netns exec "${ns1}" sysctl -qw net.ipv4.ip_forward=0
ip netns exec ns1 sysctl -qw net.ipv4.conf.all.send_redirects=0 ip netns exec "${ns1}" sysctl -qw net.ipv4.conf.all.send_redirects=0
ip netns exec ns1 sysctl -qw net.ipv4.conf.default.send_redirects=0 ip netns exec "${ns1}" sysctl -qw net.ipv4.conf.default.send_redirects=0
ip netns exec ns1 ipvsadm -A -t ${vip_v4}:${port} -s rr ip netns exec "${ns1}" ipvsadm -A -t "${vip_v4}:${port}" -s rr
ip netns exec ns1 ipvsadm -a -i -t ${vip_v4}:${port} -r ${rip_v4}:${port} ip netns exec "${ns1}" ipvsadm -a -i -t "${vip_v4}:${port}" -r ${rip_v4}:${port}
ip netns exec ns1 ip addr add ${vip_v4}/32 dev lo:1 ip netns exec "${ns1}" ip addr add ${vip_v4}/32 dev lo:1
ip netns exec ns2 modprobe ipip ip netns exec "${ns2}" modprobe -q ipip
ip netns exec ns2 ip link set tunl0 up ip netns exec "${ns2}" ip link set tunl0 up
ip netns exec ns2 sysctl -qw net.ipv4.conf.all.arp_ignore=1 ip netns exec "${ns2}" sysctl -qw net.ipv4.conf.all.arp_ignore=1
ip netns exec ns2 sysctl -qw net.ipv4.conf.all.arp_announce=2 ip netns exec "${ns2}" sysctl -qw net.ipv4.conf.all.arp_announce=2
ip netns exec ns2 sysctl -qw net.ipv4.conf.all.rp_filter=0 ip netns exec "${ns2}" sysctl -qw net.ipv4.conf.all.rp_filter=0
ip netns exec ns2 sysctl -qw net.ipv4.conf.tunl0.rp_filter=0 ip netns exec "${ns2}" sysctl -qw net.ipv4.conf.tunl0.rp_filter=0
ip netns exec ns2 sysctl -qw net.ipv4.conf.veth21.rp_filter=0 ip netns exec "${ns2}" sysctl -qw net.ipv4.conf.veth21.rp_filter=0
ip netns exec ns2 ip addr add ${vip_v4}/32 dev lo:1 ip netns exec "${ns2}" ip addr add "${vip_v4}/32" dev lo:1
test_service test_service
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment