Lines Matching +full:single +full:- +full:link

2 # SPDX-License-Identifier: GPL-2.0
8 # Kselftest framework requirement - SKIP code is 4.
11 # all tests in this script. Can be overridden with -t option
21 IP="$(which ip) -netns ns1"
32 if [ ${rc} -eq ${expected} ]; then
33 printf " TEST: %-60s [ OK ]\n" "${msg}"
38 printf " TEST: %-60s [FAIL]\n" "${msg}"
57 set -e
60 $IP link set dev lo up
61 ip netns exec ns1 sysctl -qw net.ipv4.ip_forward=1
62 ip netns exec ns1 sysctl -qw net.ipv6.conf.all.forwarding=1
64 $IP link add dummy0 type dummy
65 $IP link set dev dummy0 up
67 $IP -6 address add 2001:db8:1::1/64 dev dummy0
74 $IP link del dev dummy0 &> /dev/null
84 addr=$($IP -6 -br addr show dev ${dev} | \
94 [ -z "$addr" ] && return 1
104 echo "Single path route test"
111 $IP -6 route get fibmatch 2001:db8:1::2 &> /dev/null
114 set -e
115 $IP link del dev dummy0
120 log_test $? 2 "IPv4 fibmatch - no route"
121 $IP -6 route get fibmatch 2001:db8:1::2 &> /dev/null
122 log_test $? 2 "IPv6 fibmatch - no route"
135 set -e
136 $IP link add dummy1 type dummy
137 $IP link set dev dummy1 up
139 $IP -6 address add 2001:db8:2::1/64 dev dummy1
144 $IP -6 route add 2001:db8:3::/64 \
152 $IP -6 route get fibmatch 2001:db8:3::1 &> /dev/null
155 set -e
156 $IP link del dev dummy0
161 log_test $? 2 "IPv4 - multipath route removed on delete"
163 $IP -6 route get fibmatch 2001:db8:3::1 &> /dev/null
165 log_test $? 0 "IPv6 - multipath down to single path"
167 set -e
168 $IP link del dev dummy1
172 $IP -6 route get fibmatch 2001:db8:3::1 &> /dev/null
173 log_test $? 2 "IPv6 - no route"
187 echo "Single path, admin down"
194 $IP -6 route get fibmatch 2001:db8:1::2 &> /dev/null
197 set -e
198 $IP link set dev dummy0 down
204 $IP -6 route get fibmatch 2001:db8:1::2 &> /dev/null
218 $IP -6 route get fibmatch 2001:db8:3::1 \
225 $IP -6 route get fibmatch 2001:db8:3::1 \
230 grep $down_dev | grep -q "dead linkdown"
232 $IP -6 route get fibmatch 2001:db8:3::1 | \
233 grep $down_dev | grep -q "dead linkdown"
237 grep $up_dev | grep -q "dead linkdown"
239 $IP -6 route get fibmatch 2001:db8:3::1 | \
240 grep $up_dev | grep -q "dead linkdown"
251 set -e
252 $IP link add dummy1 type dummy
253 $IP link set dev dummy1 up
256 $IP -6 address add 2001:db8:2::1/64 dev dummy1
261 $IP -6 route add 2001:db8:3::/64 \
270 $IP -6 route get fibmatch 2001:db8:3::1 &> /dev/null
273 set -e
274 $IP link set dev dummy0 down
280 set -e
281 $IP link set dev dummy0 up
282 $IP link set dev dummy1 down
288 set -e
289 $IP link set dev dummy0 down
295 $IP -6 route get fibmatch 2001:db8:3::1 &> /dev/null
298 $IP link del dev dummy1
312 echo "Local carrier tests - single path"
316 set -e
317 $IP link set dev dummy0 carrier on
323 $IP -6 route get fibmatch 2001:db8:1::1 &> /dev/null
327 grep -q "linkdown"
328 log_test $? 1 "IPv4 - no linkdown flag"
329 $IP -6 route get fibmatch 2001:db8:1::1 | \
330 grep -q "linkdown"
331 log_test $? 1 "IPv6 - no linkdown flag"
333 set -e
334 $IP link set dev dummy0 carrier off
341 $IP -6 route get fibmatch 2001:db8:1::1 &> /dev/null
345 grep -q "linkdown"
346 log_test $? 1 "IPv4 - linkdown flag set"
347 $IP -6 route get fibmatch 2001:db8:1::1 | \
348 grep -q "linkdown"
349 log_test $? 1 "IPv6 - linkdown flag set"
351 set -e
353 $IP -6 address add 2001:db8:2::1/64 dev dummy0
359 $IP -6 route get fibmatch 2001:db8:2::1 &> /dev/null
363 grep -q "linkdown"
365 $IP -6 route get fibmatch 2001:db8:2::1 | \
366 grep -q "linkdown"
377 echo "Single path route carrier test"
381 set -e
382 $IP link set dev dummy0 carrier on
388 $IP -6 route get fibmatch 2001:db8:1::2 &> /dev/null
392 grep -q "linkdown"
394 $IP -6 route get fibmatch 2001:db8:1::2 | \
395 grep -q "linkdown"
398 set -e
399 $IP link set dev dummy0 carrier off
406 $IP -6 route get fibmatch 2001:db8:1::2 &> /dev/null
410 grep -q "linkdown"
412 $IP -6 route get fibmatch 2001:db8:1::2 | \
413 grep -q "linkdown"
416 set -e
418 $IP -6 address add 2001:db8:2::1/64 dev dummy0
424 $IP -6 route get fibmatch 2001:db8:2::2 &> /dev/null
428 grep -q "linkdown"
430 $IP -6 route get fibmatch 2001:db8:2::2 | \
431 grep -q "linkdown"
450 set -e
454 ip -netns ns2 link set dev lo up
456 $IP link add name veth1 type veth peer name veth2
457 $IP link set dev veth2 netns ns2
459 ip -netns ns2 address add 192.0.2.1/24 dev veth2
460 $IP link set dev veth1 up
461 ip -netns ns2 link set dev veth2 up
463 $IP link set dev lo address 52:54:00:6a:c7:5e
464 $IP link set dev veth1 address 52:54:00:6a:c7:5e
465 ip -netns ns2 link set dev lo address 52:54:00:6a:c7:5e
466 ip -netns ns2 link set dev veth2 address 52:54:00:6a:c7:5e
496 $NS_EXEC sysctl -qw net.ipv4.conf.all.rp_filter=1
497 $NS_EXEC sysctl -qw net.ipv4.conf.all.accept_local=1
498 $NS_EXEC sysctl -qw net.ipv4.conf.all.route_localnet=1
499 ip netns exec ns2 sysctl -qw net.ipv4.conf.all.rp_filter=1
500 ip netns exec ns2 sysctl -qw net.ipv4.conf.all.accept_local=1
501 ip netns exec ns2 sysctl -qw net.ipv4.conf.all.route_localnet=1
504 run_cmd "ip netns exec ns2 ping -w1 -c1 192.0.2.1"
507 run_cmd "ip netns exec ns2 ping -w1 -c1 127.0.0.1"
527 [ "$vrf" = "-" ] && vrf="default"
528 [ -n "$gw" ] && gw="via $gw"
529 [ -n "$dev" ] && dev="dev $dev"
538 if [ "$VERBOSE" = "1" -a -n "$out" ]; then
557 if [ -z "$lldummy" ]; then
561 if [ -z "$llv1" ]; then
570 - 2001:db8:101::/64 2001:db8:1::2
572 - 2001:db8:102::/64 2001:db8:1::2 "dummy0"
574 - 2001:db8:103::1/64 $llv1 "veth0"
578 - 2001:db8:104::1/64 $llv1
582 - 2001:db8:105::/64 2001:db8:1::1
584 - 2001:db8:106::/64 2001:db8:1::1 "dummy0"
586 - 2001:db8:107::1/64 $lldummy "dummy0"
590 - 2001:db8:108::/64 2001:db8:51::2
592 - 2001:db8:109::/64 2001:db8:51::2 "veth0"
594 - 2001:db8:110::1/64 $llv1 "veth0"
597 - 2001:db8:111::/64 "" "red"
610 # dummy0 - 198.51.100.1/24 2001:db8:1::1/64
611 # veth0 - 192.0.2.1/24 2001:db8:51::1/64
614 # dummy1 - 192.168.2.1/24 2001:db8:2::1/64
615 # veth1 - 192.0.2.2/24 2001:db8:51::2/64
617 # [ dummy0 veth0 ]--[ veth1 dummy1 ]
623 set -e
625 $IP -4 rule add pref 32765 table local
626 $IP -4 rule del pref 0
627 $IP -6 rule add pref 32765 table local
628 $IP -6 rule del pref 0
630 $IP link add red type vrf table 1
631 $IP link set red up
632 $IP -4 route add vrf red unreachable default metric 4278198272
633 $IP -6 route add vrf red unreachable default metric 4278198272
635 $IP link add veth0 type veth peer name veth1
636 $IP link set dev veth0 up
638 $IP -6 address add 2001:db8:51::1/64 dev veth0
640 $IP link set dev veth1 vrf red up
642 $IP -6 address add 2001:db8:51::2/64 dev veth1
644 $IP link add dummy1 type dummy
645 $IP link set dev dummy1 vrf red up
647 $IP -6 address add 2001:db8:2::1/64 dev dummy1
655 $IP link del dev dummy1
656 $IP link del veth0
657 $IP link del red
668 set -e
672 $IP link add dummy_$i type dummy
673 $IP link set dev dummy_$i up
674 $IP -6 address add 2001:$i::1/64 dev dummy_$i
680 $IP -6 route add 2001::/64 \
692 if [ -z "$err" ];then
715 set -e
719 $IP link add dummy_$i type dummy
720 $IP link set dev dummy_$i up
739 if [ -z "$err" ];then
760 set -e
765 $NS_EXEC sysctl -wq net.ipv6.route.gc_interval=$EXPIRE
767 $IP link add dummy_10 type dummy
768 $IP link set dev dummy_10 up
769 $IP -6 address add 2001:10::1/64 dev dummy_10
771 $NS_EXEC sysctl -wq net.ipv6.route.flush=1
776 $IP -6 route add 2001:20::$i \
780 N_EXP_SLEEP=$($IP -6 route list |grep expires|wc -l)
781 if [ $N_EXP_SLEEP -ne 0 ]; then
790 $IP -6 route add 2001:30::$i \
796 $IP -6 route add 2001:20::$i \
800 N_EXP_SLEEP=$($IP -6 route list |grep expires|wc -l)
801 if [ $N_EXP_SLEEP -ne 0 ]; then
822 $IP link add dummy1 type dummy
823 $IP link set dummy1 up
824 $IP -6 route add default dev dummy1
825 $IP -6 rule add table main suppress_prefixlength 0
826 ping -f -c 1000 -W 1 1234::1 >/dev/null 2>&1
827 $IP -6 rule del table main suppress_prefixlength 0
828 $IP link del dummy1
852 if [ "$VERBOSE" = "1" -a -n "$out" ]; then
869 if [ -z "${out}" ]; then
878 # tricky way to convert output to 1-line without ip's
908 run_cmd "$IP -6 ro flush ${pfx}"
909 [ $? -ne 0 ] && exit 1
911 out=$($IP -6 ro ls match ${pfx})
912 if [ -n "$out" ]; then
917 run_cmd "$IP -6 ro add ${pfx} ${nh}"
918 if [ $? -ne 0 ]; then
924 # add initial route - used in replace route tests
937 set -- $expected
940 out=$($IP -6 ro ls match ${pfx} | sed -e 's/ pref medium//')
959 [ "${VERBOSE}" = "1" ] && set -x
960 set -e
964 ip -netns ns2 link set dev lo up
965 ip netns exec ns2 sysctl -qw net.ipv4.ip_forward=1
966 ip netns exec ns2 sysctl -qw net.ipv6.conf.all.forwarding=1
975 ip -netns ns2 li add dummy1 type dummy
976 ip -netns ns2 li set dummy1 up
978 $IP -6 addr add 2001:db8:101::1/64 dev veth1 nodad
979 $IP -6 addr add 2001:db8:103::1/64 dev veth3 nodad
983 ip -netns ns2 -6 addr add 2001:db8:101::2/64 dev veth2 nodad
984 ip -netns ns2 -6 addr add 2001:db8:103::2/64 dev veth4 nodad
985 ip -netns ns2 -6 addr add 2001:db8:104::1/64 dev dummy1 nodad
987 ip -netns ns2 addr add 172.16.101.2/24 dev veth2
988 ip -netns ns2 addr add 172.16.103.2/24 dev veth4
989 ip -netns ns2 addr add 172.16.104.1/24 dev dummy1
994 # assumption is that basic add of a single path route works
1003 # route add same prefix - fails with EEXISTS b/c ip adds NLM_F_EXCL
1005 run_cmd "$IP -6 ro add 2001:db8:104::/64 via 2001:db8:103::2"
1006 log_test $? 2 "Attempt to add duplicate route - gw"
1008 # route add same prefix - fails with EEXISTS b/c ip adds NLM_F_EXCL
1010 run_cmd "$IP -6 ro add 2001:db8:104::/64 dev veth3"
1011 log_test $? 2 "Attempt to add duplicate route - dev only"
1013 # route add same prefix - fails with EEXISTS b/c ip adds NLM_F_EXCL
1015 run_cmd "$IP -6 ro add unreachable 2001:db8:104::/64"
1016 log_test $? 2 "Attempt to add duplicate route - reject route"
1019 # - iproute2 sets NLM_F_CREATE | NLM_F_APPEND
1021 run_cmd "$IP -6 ro append 2001:db8:104::/64 via 2001:db8:103::2"
1023 log_test $? 0 "Append nexthop to existing route - gw"
1031 run_cmd "$IP -6 ro add 2001:db8:104::/64 nexthop via 2001:db8:101::2 nexthop via 2001:db8:103::2"
1036 run_cmd "$IP -6 ro add 2001:db8:104::/64 via 2001:db8:103::2 metric 512"
1038 if [ $rc -eq 0 ]; then
1039 run_cmd "$IP -6 ro add 2001:db8:104::/64 via 2001:db8:103::3 metric 256"
1044 run_cmd "$IP -6 ro del 2001:db8:104::/64 metric 512"
1046 if [ $rc -eq 0 ]; then
1055 # single path with single path
1058 run_cmd "$IP -6 ro replace 2001:db8:104::/64 via 2001:db8:103::2"
1060 log_test $? 0 "Single path with single path"
1062 # single path with multipath
1065 …run_cmd "$IP -6 ro replace 2001:db8:104::/64 nexthop via 2001:db8:101::3 nexthop via 2001:db8:103:…
1067 log_test $? 0 "Single path with multipath"
1069 # single path with single path using MULTIPATH attribute
1072 run_cmd "$IP -6 ro replace 2001:db8:104::/64 nexthop via 2001:db8:103::2"
1074 log_test $? 0 "Single path with single path via multipath attribute"
1076 # route replace fails - invalid nexthop
1078 run_cmd "$IP -6 ro replace 2001:db8:104::/64 via 2001:db8:104::2"
1079 if [ $? -eq 0 ]; then
1088 # replace non-existent route
1089 # - note use of change versus replace since ip adds NLM_F_CREATE
1092 run_cmd "$IP -6 ro change 2001:db8:105::/64 via 2001:db8:101::2"
1093 log_test $? 2 "Single path - replace of non-existent route"
1100 …run_cmd "$IP -6 ro replace 2001:db8:104::/64 nexthop via 2001:db8:101::3 nexthop via 2001:db8:103:…
1104 # multipath with single
1106 run_cmd "$IP -6 ro replace 2001:db8:104::/64 via 2001:db8:101::3"
1108 log_test $? 0 "Multipath with single path"
1110 # multipath with single
1112 run_cmd "$IP -6 ro replace 2001:db8:104::/64 nexthop via 2001:db8:101::3"
1114 log_test $? 0 "Multipath with single path via multipath attribute"
1116 # multipath with dev-only
1118 run_cmd "$IP -6 ro replace 2001:db8:104::/64 dev veth1"
1120 log_test $? 0 "Multipath with dev-only"
1122 # route replace fails - invalid nexthop 1
1124 …run_cmd "$IP -6 ro replace 2001:db8:104::/64 nexthop via 2001:db8:111::3 nexthop via 2001:db8:103:…
1126 log_test $? 0 "Multipath - invalid first nexthop"
1128 # route replace fails - invalid nexthop 2
1130 …run_cmd "$IP -6 ro replace 2001:db8:104::/64 nexthop via 2001:db8:101::3 nexthop via 2001:db8:113:…
1132 log_test $? 0 "Multipath - invalid second nexthop"
1134 # multipath non-existent route
1136 …run_cmd "$IP -6 ro change 2001:db8:105::/64 nexthop via 2001:db8:101::3 nexthop via 2001:db8:103::…
1137 log_test $? 2 "Multipath - replace of non-existent route"
1154 run_cmd "$IP -6 route flush 2001:db8:102::/64"
1157 run_cmd "$IP -6 route add 2001:db8:102::/64 dsfield 0x04 via 2001:db8:101::2"
1174 ip addr help 2>&1 | grep -q metric
1175 if [ $? -ne 0 ]; then
1194 set -e
1201 run_cmd "$IP -6 addr add dev dummy1 2001:db8:104::1/64"
1202 run_cmd "$IP -6 addr add dev dummy2 2001:db8:104::2/64"
1208 set -e
1209 run_cmd "$IP -6 addr flush dev dummy1"
1210 run_cmd "$IP -6 addr add dev dummy1 2001:db8:104::1/64 metric 257"
1216 set -e
1217 run_cmd "$IP -6 addr flush dev dummy2"
1218 run_cmd "$IP -6 addr add dev dummy2 2001:db8:104::2/64 metric 258"
1224 run_cmd "$IP -6 addr del dev dummy1 2001:db8:104::1/64 metric 257"
1226 if [ $rc -eq 0 ]; then
1232 run_cmd "$IP -6 addr change dev dummy2 2001:db8:104::2/64 metric 259"
1234 if [ $rc -eq 0 ]; then
1241 run_cmd "ip netns exec ns1 sysctl -qw net.ipv6.conf.all.keep_addr_on_down=1"
1244 if [ $rc -eq 0 ]; then
1245 out=$($IP -6 ro ls match 2001:db8:104::/64)
1249 log_test $rc 0 "Prefix route removed on link down"
1251 # verify prefix route re-inserted with assigned metric
1254 if [ $rc -eq 0 ]; then
1258 log_test $rc 0 "Prefix route with metric on link up"
1261 set -e
1262 run_cmd "$IP -6 addr flush dev dummy2"
1263 run_cmd "$IP -6 addr add dev dummy2 2001:db8:104::1 peer 2001:db8:104::2 metric 260"
1271 set -e
1272 run_cmd "$IP -6 addr change dev dummy2 2001:db8:104::1 peer 2001:db8:104::3 metric 261"
1295 # single path with metrics
1297 run_cmd "$IP -6 ro add 2001:db8:111::/64 via 2001:db8:101::2 mtu 1400"
1299 if [ $rc -eq 0 ]; then
1303 log_test $rc 0 "Single path route with mtu metric"
1309 run_cmd "$IP -6 ro add 2001:db8:112::/64 via 2001:db8:101::2 mtu 1400"
1310 run_cmd "$IP -6 ro append 2001:db8:112::/64 via 2001:db8:103::2"
1312 if [ $rc -eq 0 ]; then
1316 log_test $rc 0 "Multipath route via 2 single routes with mtu metric on first"
1320 run_cmd "$IP -6 ro add 2001:db8:113::/64 via 2001:db8:101::2"
1321 run_cmd "$IP -6 ro append 2001:db8:113::/64 via 2001:db8:103::2 mtu 1400"
1323 if [ $rc -eq 0 ]; then
1327 log_test $rc 0 "Multipath route via 2 single routes with mtu metric on 2nd"
1329 run_cmd "$IP -6 ro del 2001:db8:113::/64 via 2001:db8:101::2"
1330 if [ $? -eq 0 ]; then
1338 …run_cmd "$IP -6 ro add 2001:db8:115::/64 mtu 1400 nexthop via 2001:db8:101::2 nexthop via 2001:db8…
1340 if [ $rc -eq 0 ]; then
1346 $IP -6 ro add 2001:db8:104::/64 via 2001:db8:101::2 mtu 1300
1347 run_cmd "ip netns exec ns1 ${ping6} -w1 -c1 -s 1500 2001:db8:104::1"
1350 run_cmd "$IP -6 ro add 2001:db8:114::/64 via 2001:db8:101::2 congctl lock foo"
1371 [ $? -ne 0 ] && exit 1
1374 if [ -n "$out" ]; then
1380 if [ $? -ne 0 ]; then
1386 # add initial route - used in replace route tests
1398 set -- $expected
1406 # assumption is that basic add of a single path route works
1415 # route add same prefix - fails with EEXISTS b/c ip adds NLM_F_EXCL
1418 log_test $? 2 "Attempt to add duplicate route - gw"
1420 # route add same prefix - fails with EEXISTS b/c ip adds NLM_F_EXCL
1423 log_test $? 2 "Attempt to add duplicate route - dev only"
1425 # route add same prefix - fails with EEXISTS b/c ip adds NLM_F_EXCL
1428 log_test $? 2 "Attempt to add duplicate route - reject route"
1431 # - adds a new route; does NOT convert existing route to ECMP
1438 # - iproute2 sets NLM_F_CREATE | NLM_F_APPEND
1442 log_test $? 0 "Append nexthop to existing route - gw"
1446 check_route "172.16.104.0/24 via 172.16.101.2 dev veth1 172.16.104.0/24 dev veth3 scope link"
1447 log_test $? 0 "Append nexthop to existing route - dev only"
1452 log_test $? 0 "Append nexthop to existing route - reject route"
1458 log_test $? 0 "Append nexthop to existing reject route - gw"
1463 check_route "unreachable 172.16.104.0/24 172.16.104.0/24 dev veth3 scope link"
1464 log_test $? 0 "Append nexthop to existing reject route - dev only"
1479 if [ $rc -eq 0 ]; then
1487 if [ $rc -eq 0 ]; then
1496 # single path with single path
1501 log_test $? 0 "Single path with single path"
1503 # single path with multipath
1508 log_test $? 0 "Single path with multipath"
1510 # single path with reject
1515 log_test $? 0 "Single path with reject route"
1517 # single path with single path using MULTIPATH attribute
1522 log_test $? 0 "Single path with single path via multipath attribute"
1524 # route replace fails - invalid nexthop
1527 if [ $? -eq 0 ]; then
1536 # replace non-existent route
1537 # - note use of change versus replace since ip adds NLM_F_CREATE
1541 log_test $? 2 "Single path - replace of non-existent route"
1552 # multipath with single
1556 log_test $? 0 "Multipath with single path"
1558 # multipath with single
1562 log_test $? 0 "Multipath with single path via multipath attribute"
1570 # route replace fails - invalid nexthop 1
1574 log_test $? 0 "Multipath - invalid first nexthop"
1576 # route replace fails - invalid nexthop 2
1580 log_test $? 0 "Multipath - invalid second nexthop"
1582 # multipath non-existent route
1585 log_test $? 2 "Multipath - replace of non-existent route"
1602 run_cmd "ip netns add test-ns"
1603 run_cmd "ip link add veth-outside type veth peer name veth-inside"
1604 run_cmd "ip link add vrf-100 type vrf table 1100"
1605 run_cmd "ip link set veth-outside master vrf-100"
1606 run_cmd "ip link set veth-inside netns test-ns"
1607 run_cmd "ip link set veth-outside up"
1608 run_cmd "ip link set vrf-100 up"
1609 run_cmd "ip route add 10.1.1.1/32 dev veth-outside table 1100"
1610 run_cmd "ip netns exec test-ns ip link set veth-inside up"
1611 run_cmd "ip netns exec test-ns ip addr add 10.1.1.1/32 dev veth-inside"
1612 run_cmd "ip netns exec test-ns ip route add 10.0.0.1/32 dev veth-inside"
1613 run_cmd "ip netns exec test-ns ip route add default via 10.0.0.1"
1614 run_cmd "ip netns exec test-ns ping 10.0.0.1 -c 1 -i 1"
1615 run_cmd "ip link delete vrf-100"
1646 grep -q "via 172.16.103.2"
1647 log_test $? 0 "IPv4 route with DSCP and ECN:Not-ECT"
1650 grep -q "via 172.16.103.2"
1654 grep -q "via 172.16.103.2"
1658 grep -q "via 172.16.103.2"
1663 grep -q "via 172.16.101.2"
1664 log_test $? 0 "IPv4 route with unknown DSCP and ECN:Not-ECT"
1667 grep -q "via 172.16.101.2"
1671 grep -q "via 172.16.101.2"
1675 grep -q "via 172.16.101.2"
1680 grep -q "via 172.16.101.2"
1681 log_test $? 0 "IPv4 route with no DSCP and ECN:Not-ECT"
1684 grep -q "via 172.16.101.2"
1688 grep -q "via 172.16.101.2"
1692 grep -q "via 172.16.101.2"
1719 set -e
1730 ….104.0/24 dev dummy1 proto kernel scope link src 172.16.104.1 172.16.104.0/24 dev dummy2 proto ker…
1733 set -e
1738 ….104.0/24 dev dummy2 proto kernel scope link src 172.16.104.2 172.16.104.0/24 dev dummy1 proto ker…
1741 set -e
1746 …0/24 dev dummy1 proto kernel scope link src 172.16.104.1 metric 257 172.16.104.0/24 dev dummy2 pro…
1751 if [ $rc -eq 0 ]; then
1752 check_route "172.16.104.0/24 dev dummy2 proto kernel scope link src 172.16.104.2 metric 258"
1759 if [ $rc -eq 0 ]; then
1760 check_route "172.16.104.0/24 dev dummy2 proto kernel scope link src 172.16.104.2 metric 259"
1768 if [ $rc -eq 0 ]; then
1773 log_test $rc 0 "Prefix route removed on link down"
1775 # verify prefix route re-inserted with assigned metric
1778 if [ $rc -eq 0 ]; then
1779 check_route "172.16.104.0/24 dev dummy2 proto kernel scope link src 172.16.104.2 metric 259"
1782 log_test $rc 0 "Prefix route with metric on link up"
1789 if [ $rc -eq 0 ]; then
1790 check_route "172.16.104.0/24 dev dummy2 proto kernel scope link src 172.16.104.0 metric 260"
1798 if [ $rc -eq 0 ]; then
1799 check_route "172.16.104.2 dev dummy2 proto kernel scope link src 172.16.104.1 metric 260"
1806 if [ $rc -eq 0 ]; then
1807 check_route "172.16.104.3 dev dummy2 proto kernel scope link src 172.16.104.1 metric 261"
1828 if [ $rc -eq 0 ]; then
1832 log_test $rc 0 "Single path route with mtu metric"
1837 if [ $rc -eq 0 ]; then
1844 run_cmd "ip netns exec ns1 ping -w1 -c1 -s 1500 172.16.104.1"
1860 set -e
1888 $IP ro ls vrf red | grep -q 172.16.105.0/24
1891 $IP ro ls | grep -q 172.16.105.0/24
1898 $IP ro ls | grep -q 172.16.105.0/24
1901 $IP ro ls vrf red | grep -q 172.16.105.0/24
1909 $IP ro ls vrf red | grep -q 172.16.106.0/24
1912 $IP ro ls | grep -q 172.16.106.0/24
1919 $IP ro ls | grep -q 172.16.106.0/24
1922 $IP ro ls vrf red | grep -q 172.16.106.0/24
1930 $IP ro ls | grep -q 172.16.107.0/24
1945 set -e
1978 # Single device using src address
1982 # VRF with single device using src address
1994 # Link local source route
1999 echo " Single device using src address"
2002 $IP -6 route show | grep -q "src 2001:db8:101::10 "
2008 $IP -6 route show | grep -q "src 2001:db8:101::11 "
2012 $IP -6 route show | grep -q "src 2001:db8:101::11 "
2015 echo " VRF with single device using src address"
2018 $IP -6 route show vrf red | grep -q "src 2001:db8:101::10 "
2024 $IP -6 route show vrf red | grep -q "src 2001:db8:101::11 "
2028 $IP -6 route show vrf red | grep -q "src 2001:db8:101::11 "
2034 $IP -6 route show vrf red | grep -q "src 2001:db8:101::12 "
2036 $IP -6 route show | grep -q " src 2001:db8:101::12 "
2042 $IP -6 route show vrf red | grep -q "src 2001:db8:101::12 "
2044 $IP -6 route show | grep -q " src 2001:db8:101::12 "
2050 $IP -6 route show vrf red | grep -q "src 2001:db8:101::13 "
2052 $IP -6 route show | grep -q "src 2001:db8:101::13 "
2057 $IP -6 route show vrf red | grep -q "src 2001:db8:101::13 "
2059 $IP -6 route show | grep -q "src 2001:db8:101::13 "
2065 $IP -6 route show | grep -q "src 2001:db8:101::15"
2068 echo " Link local source route"
2070 $IP -6 route show | grep -q "2001:db8:116::/64 dev dummy2 src fe80::1"
2073 $IP -6 route show | grep -q "2001:db8:116::/64 dev dummy2 src fe80::1"
2075 $IP -6 route show | grep -q "2001:db8:117::/64 dev dummy3 src fe80::1"
2079 $IP -6 route show | grep -q "2001:db8:117::/64 dev dummy3 src fe80::1"
2099 # single path route
2103 log_test $rc 0 "Single path route with IPv6 gateway"
2104 if [ $rc -eq 0 ]; then
2108 run_cmd "ip netns exec ns1 ping -w1 -c1 172.16.104.1"
2109 log_test $rc 0 "Single path route with IPv6 gateway - ping"
2113 log_test $rc 0 "Single path route delete"
2114 if [ $rc -eq 0 ]; then
2119 # multipath - v6 then v4
2123 log_test $rc 0 "Multipath route add - v6 nexthop then v4"
2124 if [ $rc -eq 0 ]; then
2129 log_test $? 2 " Multipath route delete - nexthops in wrong order"
2135 # multipath - v4 then v6
2139 log_test $rc 0 "Multipath route add - v4 nexthop then v6"
2140 if [ $rc -eq 0 ]; then
2145 log_test $? 2 " Multipath route delete - nexthops in wrong order"
2155 if [ ! -x "$(command -v socat)" ]; then
2165 iptables -t mangle -L OUTPUT &> /dev/null
2166 if [ $? -ne 0 ]; then
2176 ip6tables -t mangle -L OUTPUT &> /dev/null
2177 if [ $? -ne 0 ]; then
2199 ip netns exec ns2 socat UDP4-LISTEN:54321,fork $tmp_file &
2217 $NS_EXEC iptables -t mangle -A OUTPUT -j MARK --set-mark 1
2220 log_test $? 0 " Connection with correct parameters - mangling"
2224 $NS_EXEC iptables -t mangle -D OUTPUT -j MARK --set-mark 1
2227 log_test $? 0 " Connection with correct parameters - no mangling"
2230 [[ $(cat $tmp_file | wc -l) -eq 3 ]]
2231 log_test $? 0 " Connection check - server side"
2257 ip netns exec ns2 socat UDP6-LISTEN:54321,fork $tmp_file &
2261 $IP -6 rule add pref 100 ipproto udp sport 12345 dport 54321 table 123
2262 $IP -6 route add table 123 2001:db8:101::/64 dev veth1
2266 $IP -6 route add unreachable 2001:db8:101::2/128
2275 $NS_EXEC ip6tables -t mangle -A OUTPUT -j MARK --set-mark 1
2278 log_test $? 0 " Connection with correct parameters - mangling"
2282 $NS_EXEC ip6tables -t mangle -D OUTPUT -j MARK --set-mark 1
2285 log_test $? 0 " Connection with correct parameters - no mangling"
2288 [[ $(cat $tmp_file | wc -l) -eq 3 ]]
2289 log_test $? 0 " Connection check - server side"
2291 $IP -6 route del unreachable 2001:db8:101::2/128
2292 $IP -6 route del table 123 2001:db8:101::/64 dev veth1
2293 $IP -6 rule del pref 100
2303 ip neigh help 2>&1 | grep -q 'ip neigh get'
2304 if [ $? -ne 0 ]; then
2323 set -e
2358 if [ ! -x "$(command -v mausezahn)" ]; then
2363 if [ ! -x "$(command -v jq)" ]; then
2368 if [ ! -x "$(command -v bc)" ]; then
2373 if [ ! -x "$(command -v perf)" ]; then
2378 perf list fib:* | grep -q fib_table_lookup
2379 if [ $? -ne 0 ]; then
2384 perf list fib6:* | grep -q fib6_table_lookup
2385 if [ $? -ne 0 ]; then
2400 ip -n $ns -j -s link show dev $dev \
2409 local count=$(tail -n 1 $file | jq '.["counter-value"] | tonumber | floor')
2410 local ratio=$(echo "scale=2; $count / $expected" | bc -l)
2412 [[ $res -eq 1 ]]
2425 set -e
2426 run_cmd "ip netns exec ns1 ethtool -K veth1 tcp-segmentation-offload off"
2428 run_cmd "ip netns exec ns2 bash -c \"echo 20000 > /sys/class/net/veth2/gro_flush_timeout\""
2429 run_cmd "ip netns exec ns2 bash -c \"echo 1 > /sys/class/net/veth2/napi_defer_hard_irqs\""
2430 run_cmd "ip netns exec ns2 ethtool -K veth2 generic-receive-offload on"
2431 run_cmd "ip -n ns2 link add name nh1 up type dummy"
2432 run_cmd "ip -n ns2 link add name nh2 up type dummy"
2433 run_cmd "ip -n ns2 address add 172.16.201.1/24 dev nh1"
2434 run_cmd "ip -n ns2 address add 172.16.202.1/24 dev nh2"
2435 run_cmd "ip -n ns2 neigh add 172.16.201.2 lladdr 00:11:22:33:44:55 nud perm dev nh1"
2436 run_cmd "ip -n ns2 neigh add 172.16.202.2 lladdr 00:aa:bb:cc:dd:ee nud perm dev nh2"
2437 run_cmd "ip -n ns2 route add 203.0.113.0/24
2439 run_cmd "ip netns exec ns2 sysctl -qw net.ipv4.fib_multipath_hash_policy=1"
2440 run_cmd "ip netns exec ns2 sysctl -qw net.ipv4.conf.veth2.rp_filter=0"
2441 run_cmd "ip netns exec ns2 sysctl -qw net.ipv4.conf.all.rp_filter=0"
2442 run_cmd "ip netns exec ns2 sysctl -qw net.ipv4.conf.default.rp_filter=0"
2445 local dmac=$(ip -n ns2 -j link show dev veth2 | jq -r '.[]["address"]')
2447 local cmd="ip netns exec ns1 mausezahn veth1 -a own -b $dmac
2448 -A 172.16.101.1 -B 203.0.113.1 -t udp 'sp=12345,dp=0-65535' -q"
2455 run_cmd "perf stat -a -e fib:fib_table_lookup --filter 'err == 0' -j -o $tmp_file -- $cmd"
2457 local diff=$(echo $t1_rx_pkts - $t0_rx_pkts | bc -l)
2473 set -e
2474 run_cmd "ip netns exec ns1 ethtool -K veth1 tcp-segmentation-offload off"
2476 run_cmd "ip netns exec ns2 bash -c \"echo 20000 > /sys/class/net/veth2/gro_flush_timeout\""
2477 run_cmd "ip netns exec ns2 bash -c \"echo 1 > /sys/class/net/veth2/napi_defer_hard_irqs\""
2478 run_cmd "ip netns exec ns2 ethtool -K veth2 generic-receive-offload on"
2479 run_cmd "ip -n ns2 link add name nh1 up type dummy"
2480 run_cmd "ip -n ns2 link add name nh2 up type dummy"
2481 run_cmd "ip -n ns2 -6 address add 2001:db8:201::1/64 dev nh1"
2482 run_cmd "ip -n ns2 -6 address add 2001:db8:202::1/64 dev nh2"
2483 run_cmd "ip -n ns2 -6 neigh add 2001:db8:201::2 lladdr 00:11:22:33:44:55 nud perm dev nh1"
2484 run_cmd "ip -n ns2 -6 neigh add 2001:db8:202::2 lladdr 00:aa:bb:cc:dd:ee nud perm dev nh2"
2485 run_cmd "ip -n ns2 -6 route add 2001:db8:301::/64
2487 run_cmd "ip netns exec ns2 sysctl -qw net.ipv6.fib_multipath_hash_policy=1"
2490 local dmac=$(ip -n ns2 -j link show dev veth2 | jq -r '.[]["address"]')
2492 local cmd="ip netns exec ns1 mausezahn -6 veth1 -a own -b $dmac
2493 -A 2001:db8:101::1 -B 2001:db8:301::1 -t udp 'sp=12345,dp=0-65535' -q"
2500 run_cmd "perf stat -a -e fib6:fib6_table_lookup --filter 'err == 0' -j -o $tmp_file -- $cmd"
2502 local diff=$(echo $t1_rx_pkts - $t0_rx_pkts | bc -l)
2517 -t <test> Test(s) to run (default: all)
2519 -p Pause on fail
2520 -P Pause after each test before cleanup
2521 -v verbose mode (show commands and output)
2547 if [ "$(id -u)" -ne 0 ];then
2552 if [ ! -x "$(command -v ip)" ]; then
2557 ip route help 2>&1 | grep -q fibmatch
2558 if [ $? -ne 0 ]; then