106 lines
2.9 KiB
Bash
Executable File
106 lines
2.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
#
|
|
# Test IPv6 force_forwarding interface property
|
|
#
|
|
# This test verifies that the force_forwarding property works correctly:
|
|
# - When global forwarding is disabled, packets are not forwarded normally
|
|
# - When force_forwarding is enabled on an interface, packets are forwarded
|
|
# regardless of the global forwarding setting
|
|
|
|
source lib.sh
|
|
|
|
cleanup() {
|
|
cleanup_ns $ns1 $ns2 $ns3
|
|
}
|
|
|
|
trap cleanup EXIT
|
|
|
|
setup_test() {
|
|
# Create three namespaces: sender, router, receiver
|
|
setup_ns ns1 ns2 ns3
|
|
|
|
# Create veth pairs: ns1 <-> ns2 <-> ns3
|
|
ip link add name veth12 type veth peer name veth21
|
|
ip link add name veth23 type veth peer name veth32
|
|
|
|
# Move interfaces to namespaces
|
|
ip link set veth12 netns $ns1
|
|
ip link set veth21 netns $ns2
|
|
ip link set veth23 netns $ns2
|
|
ip link set veth32 netns $ns3
|
|
|
|
# Configure interfaces
|
|
ip -n $ns1 addr add 2001:db8:1::1/64 dev veth12 nodad
|
|
ip -n $ns2 addr add 2001:db8:1::2/64 dev veth21 nodad
|
|
ip -n $ns2 addr add 2001:db8:2::1/64 dev veth23 nodad
|
|
ip -n $ns3 addr add 2001:db8:2::2/64 dev veth32 nodad
|
|
|
|
# Bring up interfaces
|
|
ip -n $ns1 link set veth12 up
|
|
ip -n $ns2 link set veth21 up
|
|
ip -n $ns2 link set veth23 up
|
|
ip -n $ns3 link set veth32 up
|
|
|
|
# Add routes
|
|
ip -n $ns1 route add 2001:db8:2::/64 via 2001:db8:1::2
|
|
ip -n $ns3 route add 2001:db8:1::/64 via 2001:db8:2::1
|
|
|
|
# Disable global forwarding
|
|
ip netns exec $ns2 sysctl -qw net.ipv6.conf.all.forwarding=0
|
|
}
|
|
|
|
test_force_forwarding() {
|
|
local ret=0
|
|
|
|
echo "TEST: force_forwarding functionality"
|
|
|
|
# Check if force_forwarding sysctl exists
|
|
if ! ip netns exec $ns2 test -f /proc/sys/net/ipv6/conf/veth21/force_forwarding; then
|
|
echo "SKIP: force_forwarding not available"
|
|
return $ksft_skip
|
|
fi
|
|
|
|
# Test 1: Without force_forwarding, ping should fail
|
|
ip netns exec $ns2 sysctl -qw net.ipv6.conf.veth21.force_forwarding=0
|
|
ip netns exec $ns2 sysctl -qw net.ipv6.conf.veth23.force_forwarding=0
|
|
|
|
if ip netns exec $ns1 ping -6 -c 1 -W 2 2001:db8:2::2 &>/dev/null; then
|
|
echo "FAIL: ping succeeded when forwarding disabled"
|
|
ret=1
|
|
else
|
|
echo "PASS: forwarding disabled correctly"
|
|
fi
|
|
|
|
# Test 2: With force_forwarding enabled, ping should succeed
|
|
ip netns exec $ns2 sysctl -qw net.ipv6.conf.veth21.force_forwarding=1
|
|
ip netns exec $ns2 sysctl -qw net.ipv6.conf.veth23.force_forwarding=1
|
|
|
|
if ip netns exec $ns1 ping -6 -c 1 -W 2 2001:db8:2::2 &>/dev/null; then
|
|
echo "PASS: force_forwarding enabled forwarding"
|
|
else
|
|
echo "FAIL: ping failed with force_forwarding enabled"
|
|
ret=1
|
|
fi
|
|
|
|
return $ret
|
|
}
|
|
|
|
echo "IPv6 force_forwarding test"
|
|
echo "=========================="
|
|
|
|
setup_test
|
|
test_force_forwarding
|
|
ret=$?
|
|
|
|
if [ $ret -eq 0 ]; then
|
|
echo "OK"
|
|
exit 0
|
|
elif [ $ret -eq $ksft_skip ]; then
|
|
echo "SKIP"
|
|
exit $ksft_skip
|
|
else
|
|
echo "FAIL"
|
|
exit 1
|
|
fi
|