diff options
| -rw-r--r-- | tools/testing/selftests/net/Makefile | 1 | ||||
| -rwxr-xr-x | tools/testing/selftests/net/fib_tests.sh | 146 |
2 files changed, 147 insertions, 0 deletions
diff --git a/tools/testing/selftests/net/Makefile b/tools/testing/selftests/net/Makefile index 500c74db746c..d7c30d366935 100644 --- a/tools/testing/selftests/net/Makefile +++ b/tools/testing/selftests/net/Makefile | |||
| @@ -5,6 +5,7 @@ CFLAGS = -Wall -Wl,--no-as-needed -O2 -g | |||
| 5 | CFLAGS += -I../../../../usr/include/ | 5 | CFLAGS += -I../../../../usr/include/ |
| 6 | 6 | ||
| 7 | TEST_PROGS := run_netsocktests run_afpackettests test_bpf.sh netdevice.sh rtnetlink.sh | 7 | TEST_PROGS := run_netsocktests run_afpackettests test_bpf.sh netdevice.sh rtnetlink.sh |
| 8 | TEST_PROGS += fib_tests.sh | ||
| 8 | TEST_GEN_FILES = socket | 9 | TEST_GEN_FILES = socket |
| 9 | TEST_GEN_FILES += psock_fanout psock_tpacket msg_zerocopy | 10 | TEST_GEN_FILES += psock_fanout psock_tpacket msg_zerocopy |
| 10 | TEST_GEN_PROGS = reuseport_bpf reuseport_bpf_cpu reuseport_bpf_numa | 11 | TEST_GEN_PROGS = reuseport_bpf reuseport_bpf_cpu reuseport_bpf_numa |
diff --git a/tools/testing/selftests/net/fib_tests.sh b/tools/testing/selftests/net/fib_tests.sh new file mode 100755 index 000000000000..767d2ab2385d --- /dev/null +++ b/tools/testing/selftests/net/fib_tests.sh | |||
| @@ -0,0 +1,146 @@ | |||
| 1 | #!/bin/bash | ||
| 2 | # SPDX-License-Identifier: GPL-2.0 | ||
| 3 | |||
| 4 | # This test is for checking IPv4 and IPv6 FIB behavior in response to | ||
| 5 | # different events. | ||
| 6 | |||
| 7 | ret=0 | ||
| 8 | |||
| 9 | check_err() | ||
| 10 | { | ||
| 11 | if [ $ret -eq 0 ]; then | ||
| 12 | ret=$1 | ||
| 13 | fi | ||
| 14 | } | ||
| 15 | |||
| 16 | check_fail() | ||
| 17 | { | ||
| 18 | if [ $1 -eq 0 ]; then | ||
| 19 | ret=1 | ||
| 20 | fi | ||
| 21 | } | ||
| 22 | |||
| 23 | netns_create() | ||
| 24 | { | ||
| 25 | local testns=$1 | ||
| 26 | |||
| 27 | ip netns add $testns | ||
| 28 | ip netns exec $testns ip link set dev lo up | ||
| 29 | } | ||
| 30 | |||
| 31 | fib_unreg_unicast_test() | ||
| 32 | { | ||
| 33 | ret=0 | ||
| 34 | |||
| 35 | netns_create "testns" | ||
| 36 | |||
| 37 | ip netns exec testns ip link add dummy0 type dummy | ||
| 38 | ip netns exec testns ip link set dev dummy0 up | ||
| 39 | |||
| 40 | ip netns exec testns ip address add 198.51.100.1/24 dev dummy0 | ||
| 41 | ip netns exec testns ip -6 address add 2001:db8:1::1/64 dev dummy0 | ||
| 42 | |||
| 43 | ip netns exec testns ip route get fibmatch 198.51.100.2 &> /dev/null | ||
| 44 | check_err $? | ||
| 45 | ip netns exec testns ip -6 route get fibmatch 2001:db8:1::2 &> /dev/null | ||
| 46 | check_err $? | ||
| 47 | |||
| 48 | ip netns exec testns ip link del dev dummy0 | ||
| 49 | check_err $? | ||
| 50 | |||
| 51 | ip netns exec testns ip route get fibmatch 198.51.100.2 &> /dev/null | ||
| 52 | check_fail $? | ||
| 53 | ip netns exec testns ip -6 route get fibmatch 2001:db8:1::2 &> /dev/null | ||
| 54 | check_fail $? | ||
| 55 | |||
| 56 | ip netns del testns | ||
| 57 | |||
| 58 | if [ $ret -ne 0 ]; then | ||
| 59 | echo "FAIL: unicast route test" | ||
| 60 | return 1 | ||
| 61 | fi | ||
| 62 | echo "PASS: unicast route test" | ||
| 63 | } | ||
| 64 | |||
| 65 | fib_unreg_multipath_test() | ||
| 66 | { | ||
| 67 | ret=0 | ||
| 68 | |||
| 69 | netns_create "testns" | ||
| 70 | |||
| 71 | ip netns exec testns ip link add dummy0 type dummy | ||
| 72 | ip netns exec testns ip link set dev dummy0 up | ||
| 73 | |||
| 74 | ip netns exec testns ip link add dummy1 type dummy | ||
| 75 | ip netns exec testns ip link set dev dummy1 up | ||
| 76 | |||
| 77 | ip netns exec testns ip address add 198.51.100.1/24 dev dummy0 | ||
| 78 | ip netns exec testns ip -6 address add 2001:db8:1::1/64 dev dummy0 | ||
| 79 | |||
| 80 | ip netns exec testns ip address add 192.0.2.1/24 dev dummy1 | ||
| 81 | ip netns exec testns ip -6 address add 2001:db8:2::1/64 dev dummy1 | ||
| 82 | |||
| 83 | ip netns exec testns ip route add 203.0.113.0/24 \ | ||
| 84 | nexthop via 198.51.100.2 dev dummy0 \ | ||
| 85 | nexthop via 192.0.2.2 dev dummy1 | ||
| 86 | ip netns exec testns ip -6 route add 2001:db8:3::/64 \ | ||
| 87 | nexthop via 2001:db8:1::2 dev dummy0 \ | ||
| 88 | nexthop via 2001:db8:2::2 dev dummy1 | ||
| 89 | |||
| 90 | ip netns exec testns ip route get fibmatch 203.0.113.1 &> /dev/null | ||
| 91 | check_err $? | ||
| 92 | ip netns exec testns ip -6 route get fibmatch 2001:db8:3::1 &> /dev/null | ||
| 93 | check_err $? | ||
| 94 | |||
| 95 | ip netns exec testns ip link del dev dummy0 | ||
| 96 | check_err $? | ||
| 97 | |||
| 98 | ip netns exec testns ip route get fibmatch 203.0.113.1 &> /dev/null | ||
| 99 | check_fail $? | ||
| 100 | ip netns exec testns ip -6 route get fibmatch 2001:db8:3::1 &> /dev/null | ||
| 101 | # In IPv6 we do not flush the entire multipath route. | ||
| 102 | check_err $? | ||
| 103 | |||
| 104 | ip netns exec testns ip link del dev dummy1 | ||
| 105 | |||
| 106 | ip netns del testns | ||
| 107 | |||
| 108 | if [ $ret -ne 0 ]; then | ||
| 109 | echo "FAIL: multipath route test" | ||
| 110 | return 1 | ||
| 111 | fi | ||
| 112 | echo "PASS: multipath route test" | ||
| 113 | } | ||
| 114 | |||
| 115 | fib_unreg_test() | ||
| 116 | { | ||
| 117 | echo "Running netdev unregister tests" | ||
| 118 | |||
| 119 | fib_unreg_unicast_test | ||
| 120 | fib_unreg_multipath_test | ||
| 121 | } | ||
| 122 | |||
| 123 | fib_test() | ||
| 124 | { | ||
| 125 | fib_unreg_test | ||
| 126 | } | ||
| 127 | |||
| 128 | if [ "$(id -u)" -ne 0 ];then | ||
| 129 | echo "SKIP: Need root privileges" | ||
| 130 | exit 0 | ||
| 131 | fi | ||
| 132 | |||
| 133 | if [ ! -x "$(command -v ip)" ]; then | ||
| 134 | echo "SKIP: Could not run test without ip tool" | ||
| 135 | exit 0 | ||
| 136 | fi | ||
| 137 | |||
| 138 | ip route help 2>&1 | grep -q fibmatch | ||
| 139 | if [ $? -ne 0 ]; then | ||
| 140 | echo "SKIP: iproute2 too old, missing fibmatch" | ||
| 141 | exit 0 | ||
| 142 | fi | ||
| 143 | |||
| 144 | fib_test | ||
| 145 | |||
| 146 | exit $ret | ||
