13f251d74SDavid Ahern#!/bin/bash 23f251d74SDavid Ahern# SPDX-License-Identifier: GPL-2.0 33f251d74SDavid Ahern# 43f251d74SDavid Ahern# Various combinations of VRF with xfrms and qdisc. 53f251d74SDavid Ahern 661b12ebeSHangbin Liusource lib.sh 73f251d74SDavid AhernPAUSE_ON_FAIL=no 83f251d74SDavid AhernVERBOSE=0 93f251d74SDavid Ahernret=0 103f251d74SDavid Ahern 113f251d74SDavid AhernHOST1_4=192.168.1.1 123f251d74SDavid AhernHOST2_4=192.168.1.2 133f251d74SDavid AhernHOST1_6=2001:db8:1::1 143f251d74SDavid AhernHOST2_6=2001:db8:1::2 153f251d74SDavid Ahern 163f251d74SDavid AhernXFRM1_4=10.0.1.1 173f251d74SDavid AhernXFRM2_4=10.0.1.2 183f251d74SDavid AhernXFRM1_6=fc00:1000::1 193f251d74SDavid AhernXFRM2_6=fc00:1000::2 203f251d74SDavid AhernIF_ID=123 213f251d74SDavid Ahern 223f251d74SDavid AhernVRF=red 233f251d74SDavid AhernTABLE=300 243f251d74SDavid Ahern 253f251d74SDavid AhernAUTH_1=0xd94fcfea65fddf21dc6e0d24a0253508 263f251d74SDavid AhernAUTH_2=0xdc6e0d24a0253508d94fcfea65fddf21 273f251d74SDavid AhernENC_1=0xfc46c20f8048be9725930ff3fb07ac2a91f0347dffeacf62 283f251d74SDavid AhernENC_2=0x3fb07ac2a91f0347dffeacf62fc46c20f8048be9725930ff 293f251d74SDavid AhernSPI_1=0x02122b77 303f251d74SDavid AhernSPI_2=0x2b770212 313f251d74SDavid Ahern 323f251d74SDavid Ahernwhich ping6 > /dev/null 2>&1 && ping6=$(which ping6) || ping6=$(which ping) 333f251d74SDavid Ahern 343f251d74SDavid Ahern################################################################################ 353f251d74SDavid Ahern# 363f251d74SDavid Ahernlog_test() 373f251d74SDavid Ahern{ 383f251d74SDavid Ahern local rc=$1 393f251d74SDavid Ahern local expected=$2 403f251d74SDavid Ahern local msg="$3" 413f251d74SDavid Ahern 423f251d74SDavid Ahern if [ ${rc} -eq ${expected} ]; then 433f251d74SDavid Ahern printf "TEST: %-60s [ OK ]\n" "${msg}" 443f251d74SDavid Ahern nsuccess=$((nsuccess+1)) 453f251d74SDavid Ahern else 463f251d74SDavid Ahern ret=1 473f251d74SDavid Ahern nfail=$((nfail+1)) 483f251d74SDavid Ahern printf "TEST: %-60s [FAIL]\n" "${msg}" 493f251d74SDavid Ahern if [ "${PAUSE_ON_FAIL}" = "yes" ]; then 503f251d74SDavid Ahern echo 513f251d74SDavid Ahern echo "hit enter to continue, 'q' to quit" 523f251d74SDavid Ahern read a 533f251d74SDavid Ahern [ "$a" = "q" ] && exit 1 543f251d74SDavid Ahern fi 553f251d74SDavid Ahern fi 563f251d74SDavid Ahern} 573f251d74SDavid Ahern 583f251d74SDavid Ahernrun_cmd_host1() 593f251d74SDavid Ahern{ 603f251d74SDavid Ahern local cmd="$*" 613f251d74SDavid Ahern local out 623f251d74SDavid Ahern local rc 633f251d74SDavid Ahern 643f251d74SDavid Ahern if [ "$VERBOSE" = "1" ]; then 653f251d74SDavid Ahern printf " COMMAND: $cmd\n" 663f251d74SDavid Ahern fi 673f251d74SDavid Ahern 6861b12ebeSHangbin Liu out=$(eval ip netns exec $host1 $cmd 2>&1) 693f251d74SDavid Ahern rc=$? 703f251d74SDavid Ahern if [ "$VERBOSE" = "1" ]; then 713f251d74SDavid Ahern if [ -n "$out" ]; then 723f251d74SDavid Ahern echo 733f251d74SDavid Ahern echo " $out" 743f251d74SDavid Ahern fi 753f251d74SDavid Ahern echo 763f251d74SDavid Ahern fi 773f251d74SDavid Ahern 783f251d74SDavid Ahern return $rc 793f251d74SDavid Ahern} 803f251d74SDavid Ahern 813f251d74SDavid Ahern################################################################################ 823f251d74SDavid Ahern# create namespaces for hosts and sws 833f251d74SDavid Ahern 843f251d74SDavid Aherncreate_vrf() 853f251d74SDavid Ahern{ 863f251d74SDavid Ahern local ns=$1 873f251d74SDavid Ahern local vrf=$2 883f251d74SDavid Ahern local table=$3 893f251d74SDavid Ahern 903f251d74SDavid Ahern if [ -n "${ns}" ]; then 913f251d74SDavid Ahern ns="-netns ${ns}" 923f251d74SDavid Ahern fi 933f251d74SDavid Ahern 943f251d74SDavid Ahern ip ${ns} link add ${vrf} type vrf table ${table} 953f251d74SDavid Ahern ip ${ns} link set ${vrf} up 963f251d74SDavid Ahern ip ${ns} route add vrf ${vrf} unreachable default metric 8192 973f251d74SDavid Ahern ip ${ns} -6 route add vrf ${vrf} unreachable default metric 8192 983f251d74SDavid Ahern 993f251d74SDavid Ahern ip ${ns} addr add 127.0.0.1/8 dev ${vrf} 1003f251d74SDavid Ahern ip ${ns} -6 addr add ::1 dev ${vrf} nodad 1013f251d74SDavid Ahern 1023f251d74SDavid Ahern ip ${ns} ru del pref 0 1033f251d74SDavid Ahern ip ${ns} ru add pref 32765 from all lookup local 1043f251d74SDavid Ahern ip ${ns} -6 ru del pref 0 1053f251d74SDavid Ahern ip ${ns} -6 ru add pref 32765 from all lookup local 1063f251d74SDavid Ahern} 1073f251d74SDavid Ahern 1083f251d74SDavid Aherncreate_ns() 1093f251d74SDavid Ahern{ 1103f251d74SDavid Ahern local ns=$1 1113f251d74SDavid Ahern local addr=$2 1123f251d74SDavid Ahern local addr6=$3 1133f251d74SDavid Ahern 1143f251d74SDavid Ahern [ -z "${addr}" ] && addr="-" 1153f251d74SDavid Ahern [ -z "${addr6}" ] && addr6="-" 1163f251d74SDavid Ahern 1173f251d74SDavid Ahern if [ "${addr}" != "-" ]; then 1183f251d74SDavid Ahern ip -netns ${ns} addr add dev lo ${addr} 1193f251d74SDavid Ahern fi 1203f251d74SDavid Ahern if [ "${addr6}" != "-" ]; then 1213f251d74SDavid Ahern ip -netns ${ns} -6 addr add dev lo ${addr6} 1223f251d74SDavid Ahern fi 1233f251d74SDavid Ahern 1243f251d74SDavid Ahern ip -netns ${ns} ro add unreachable default metric 8192 1253f251d74SDavid Ahern ip -netns ${ns} -6 ro add unreachable default metric 8192 1263f251d74SDavid Ahern 1273f251d74SDavid Ahern ip netns exec ${ns} sysctl -qw net.ipv4.ip_forward=1 1283f251d74SDavid Ahern ip netns exec ${ns} sysctl -qw net.ipv6.conf.all.keep_addr_on_down=1 1293f251d74SDavid Ahern ip netns exec ${ns} sysctl -qw net.ipv6.conf.all.forwarding=1 1303f251d74SDavid Ahern ip netns exec ${ns} sysctl -qw net.ipv6.conf.default.forwarding=1 1313f251d74SDavid Ahern ip netns exec ${ns} sysctl -qw net.ipv6.conf.default.accept_dad=0 1323f251d74SDavid Ahern} 1333f251d74SDavid Ahern 1343f251d74SDavid Ahern# create veth pair to connect namespaces and apply addresses. 1353f251d74SDavid Ahernconnect_ns() 1363f251d74SDavid Ahern{ 1373f251d74SDavid Ahern local ns1=$1 1383f251d74SDavid Ahern local ns1_dev=$2 1393f251d74SDavid Ahern local ns1_addr=$3 1403f251d74SDavid Ahern local ns1_addr6=$4 1413f251d74SDavid Ahern local ns2=$5 1423f251d74SDavid Ahern local ns2_dev=$6 1433f251d74SDavid Ahern local ns2_addr=$7 1443f251d74SDavid Ahern local ns2_addr6=$8 1453f251d74SDavid Ahern local ns1arg 1463f251d74SDavid Ahern local ns2arg 1473f251d74SDavid Ahern 1483f251d74SDavid Ahern if [ -n "${ns1}" ]; then 1493f251d74SDavid Ahern ns1arg="-netns ${ns1}" 1503f251d74SDavid Ahern fi 1513f251d74SDavid Ahern if [ -n "${ns2}" ]; then 1523f251d74SDavid Ahern ns2arg="-netns ${ns2}" 1533f251d74SDavid Ahern fi 1543f251d74SDavid Ahern 1553f251d74SDavid Ahern ip ${ns1arg} li add ${ns1_dev} type veth peer name tmp 1563f251d74SDavid Ahern ip ${ns1arg} li set ${ns1_dev} up 1573f251d74SDavid Ahern ip ${ns1arg} li set tmp netns ${ns2} name ${ns2_dev} 1583f251d74SDavid Ahern ip ${ns2arg} li set ${ns2_dev} up 1593f251d74SDavid Ahern 1603f251d74SDavid Ahern if [ "${ns1_addr}" != "-" ]; then 1613f251d74SDavid Ahern ip ${ns1arg} addr add dev ${ns1_dev} ${ns1_addr} 1623f251d74SDavid Ahern ip ${ns2arg} addr add dev ${ns2_dev} ${ns2_addr} 1633f251d74SDavid Ahern fi 1643f251d74SDavid Ahern 1653f251d74SDavid Ahern if [ "${ns1_addr6}" != "-" ]; then 1663f251d74SDavid Ahern ip ${ns1arg} addr add dev ${ns1_dev} ${ns1_addr6} nodad 1673f251d74SDavid Ahern ip ${ns2arg} addr add dev ${ns2_dev} ${ns2_addr6} nodad 1683f251d74SDavid Ahern fi 1693f251d74SDavid Ahern} 1703f251d74SDavid Ahern 1713f251d74SDavid Ahern################################################################################ 1723f251d74SDavid Ahern 1733f251d74SDavid Aherncleanup() 1743f251d74SDavid Ahern{ 17561b12ebeSHangbin Liu cleanup_ns $host1 $host2 1763f251d74SDavid Ahern} 1773f251d74SDavid Ahern 1783f251d74SDavid Ahernsetup() 1793f251d74SDavid Ahern{ 18061b12ebeSHangbin Liu setup_ns host1 host2 18161b12ebeSHangbin Liu create_ns "$host1" 18261b12ebeSHangbin Liu create_ns "$host2" 1833f251d74SDavid Ahern 18461b12ebeSHangbin Liu connect_ns "$host1" eth0 ${HOST1_4}/24 ${HOST1_6}/64 \ 18561b12ebeSHangbin Liu "$host2" eth0 ${HOST2_4}/24 ${HOST2_6}/64 1863f251d74SDavid Ahern 18761b12ebeSHangbin Liu create_vrf "$host1" ${VRF} ${TABLE} 18861b12ebeSHangbin Liu ip -netns $host1 link set dev eth0 master ${VRF} 1893f251d74SDavid Ahern} 1903f251d74SDavid Ahern 1913f251d74SDavid Aherncleanup_xfrm() 1923f251d74SDavid Ahern{ 19361b12ebeSHangbin Liu for ns in $host1 $host2 1943f251d74SDavid Ahern do 1953f251d74SDavid Ahern for x in state policy 1963f251d74SDavid Ahern do 1973f251d74SDavid Ahern ip -netns ${ns} xfrm ${x} flush 1983f251d74SDavid Ahern ip -6 -netns ${ns} xfrm ${x} flush 1993f251d74SDavid Ahern done 2003f251d74SDavid Ahern done 2013f251d74SDavid Ahern} 2023f251d74SDavid Ahern 2033f251d74SDavid Ahernsetup_xfrm() 2043f251d74SDavid Ahern{ 2053f251d74SDavid Ahern local h1_4=$1 2063f251d74SDavid Ahern local h2_4=$2 2073f251d74SDavid Ahern local h1_6=$3 2083f251d74SDavid Ahern local h2_6=$4 2093f251d74SDavid Ahern local devarg="$5" 2103f251d74SDavid Ahern 2113f251d74SDavid Ahern # 2123f251d74SDavid Ahern # policy 2133f251d74SDavid Ahern # 2143f251d74SDavid Ahern 2153f251d74SDavid Ahern # host1 - IPv4 out 21661b12ebeSHangbin Liu ip -netns $host1 xfrm policy add \ 2173f251d74SDavid Ahern src ${h1_4} dst ${h2_4} ${devarg} dir out \ 2183f251d74SDavid Ahern tmpl src ${HOST1_4} dst ${HOST2_4} proto esp mode tunnel 2193f251d74SDavid Ahern 2203f251d74SDavid Ahern # host2 - IPv4 in 22161b12ebeSHangbin Liu ip -netns $host2 xfrm policy add \ 2223f251d74SDavid Ahern src ${h1_4} dst ${h2_4} dir in \ 2233f251d74SDavid Ahern tmpl src ${HOST1_4} dst ${HOST2_4} proto esp mode tunnel 2243f251d74SDavid Ahern 2253f251d74SDavid Ahern # host1 - IPv4 in 22661b12ebeSHangbin Liu ip -netns $host1 xfrm policy add \ 2273f251d74SDavid Ahern src ${h2_4} dst ${h1_4} ${devarg} dir in \ 2283f251d74SDavid Ahern tmpl src ${HOST2_4} dst ${HOST1_4} proto esp mode tunnel 2293f251d74SDavid Ahern 2303f251d74SDavid Ahern # host2 - IPv4 out 23161b12ebeSHangbin Liu ip -netns $host2 xfrm policy add \ 2323f251d74SDavid Ahern src ${h2_4} dst ${h1_4} dir out \ 2333f251d74SDavid Ahern tmpl src ${HOST2_4} dst ${HOST1_4} proto esp mode tunnel 2343f251d74SDavid Ahern 2353f251d74SDavid Ahern 2363f251d74SDavid Ahern # host1 - IPv6 out 23761b12ebeSHangbin Liu ip -6 -netns $host1 xfrm policy add \ 2383f251d74SDavid Ahern src ${h1_6} dst ${h2_6} ${devarg} dir out \ 2393f251d74SDavid Ahern tmpl src ${HOST1_6} dst ${HOST2_6} proto esp mode tunnel 2403f251d74SDavid Ahern 2413f251d74SDavid Ahern # host2 - IPv6 in 24261b12ebeSHangbin Liu ip -6 -netns $host2 xfrm policy add \ 2433f251d74SDavid Ahern src ${h1_6} dst ${h2_6} dir in \ 2443f251d74SDavid Ahern tmpl src ${HOST1_6} dst ${HOST2_6} proto esp mode tunnel 2453f251d74SDavid Ahern 2463f251d74SDavid Ahern # host1 - IPv6 in 24761b12ebeSHangbin Liu ip -6 -netns $host1 xfrm policy add \ 2483f251d74SDavid Ahern src ${h2_6} dst ${h1_6} ${devarg} dir in \ 2493f251d74SDavid Ahern tmpl src ${HOST2_6} dst ${HOST1_6} proto esp mode tunnel 2503f251d74SDavid Ahern 2513f251d74SDavid Ahern # host2 - IPv6 out 25261b12ebeSHangbin Liu ip -6 -netns $host2 xfrm policy add \ 2533f251d74SDavid Ahern src ${h2_6} dst ${h1_6} dir out \ 2543f251d74SDavid Ahern tmpl src ${HOST2_6} dst ${HOST1_6} proto esp mode tunnel 2553f251d74SDavid Ahern 2563f251d74SDavid Ahern # 2573f251d74SDavid Ahern # state 2583f251d74SDavid Ahern # 25961b12ebeSHangbin Liu ip -netns $host1 xfrm state add src ${HOST1_4} dst ${HOST2_4} \ 2603f251d74SDavid Ahern proto esp spi ${SPI_1} reqid 0 mode tunnel \ 2613f251d74SDavid Ahern replay-window 4 replay-oseq 0x4 \ 262cb43c60eSMagali Lemes auth-trunc 'hmac(sha1)' ${AUTH_1} 96 \ 263cb43c60eSMagali Lemes enc 'cbc(aes)' ${ENC_1} \ 2643f251d74SDavid Ahern sel src ${h1_4} dst ${h2_4} ${devarg} 2653f251d74SDavid Ahern 26661b12ebeSHangbin Liu ip -netns $host2 xfrm state add src ${HOST1_4} dst ${HOST2_4} \ 2673f251d74SDavid Ahern proto esp spi ${SPI_1} reqid 0 mode tunnel \ 2683f251d74SDavid Ahern replay-window 4 replay-oseq 0x4 \ 269cb43c60eSMagali Lemes auth-trunc 'hmac(sha1)' ${AUTH_1} 96 \ 270cb43c60eSMagali Lemes enc 'cbc(aes)' ${ENC_1} \ 2713f251d74SDavid Ahern sel src ${h1_4} dst ${h2_4} 2723f251d74SDavid Ahern 2733f251d74SDavid Ahern 27461b12ebeSHangbin Liu ip -netns $host1 xfrm state add src ${HOST2_4} dst ${HOST1_4} \ 2753f251d74SDavid Ahern proto esp spi ${SPI_2} reqid 0 mode tunnel \ 2763f251d74SDavid Ahern replay-window 4 replay-oseq 0x4 \ 277cb43c60eSMagali Lemes auth-trunc 'hmac(sha1)' ${AUTH_2} 96 \ 278cb43c60eSMagali Lemes enc 'cbc(aes)' ${ENC_2} \ 2793f251d74SDavid Ahern sel src ${h2_4} dst ${h1_4} ${devarg} 2803f251d74SDavid Ahern 28161b12ebeSHangbin Liu ip -netns $host2 xfrm state add src ${HOST2_4} dst ${HOST1_4} \ 2823f251d74SDavid Ahern proto esp spi ${SPI_2} reqid 0 mode tunnel \ 2833f251d74SDavid Ahern replay-window 4 replay-oseq 0x4 \ 284cb43c60eSMagali Lemes auth-trunc 'hmac(sha1)' ${AUTH_2} 96 \ 285cb43c60eSMagali Lemes enc 'cbc(aes)' ${ENC_2} \ 2863f251d74SDavid Ahern sel src ${h2_4} dst ${h1_4} 2873f251d74SDavid Ahern 2883f251d74SDavid Ahern 28961b12ebeSHangbin Liu ip -6 -netns $host1 xfrm state add src ${HOST1_6} dst ${HOST2_6} \ 2903f251d74SDavid Ahern proto esp spi ${SPI_1} reqid 0 mode tunnel \ 2913f251d74SDavid Ahern replay-window 4 replay-oseq 0x4 \ 292cb43c60eSMagali Lemes auth-trunc 'hmac(sha1)' ${AUTH_1} 96 \ 293cb43c60eSMagali Lemes enc 'cbc(aes)' ${ENC_1} \ 2943f251d74SDavid Ahern sel src ${h1_6} dst ${h2_6} ${devarg} 2953f251d74SDavid Ahern 29661b12ebeSHangbin Liu ip -6 -netns $host2 xfrm state add src ${HOST1_6} dst ${HOST2_6} \ 2973f251d74SDavid Ahern proto esp spi ${SPI_1} reqid 0 mode tunnel \ 2983f251d74SDavid Ahern replay-window 4 replay-oseq 0x4 \ 299cb43c60eSMagali Lemes auth-trunc 'hmac(sha1)' ${AUTH_1} 96 \ 300cb43c60eSMagali Lemes enc 'cbc(aes)' ${ENC_1} \ 3013f251d74SDavid Ahern sel src ${h1_6} dst ${h2_6} 3023f251d74SDavid Ahern 3033f251d74SDavid Ahern 30461b12ebeSHangbin Liu ip -6 -netns $host1 xfrm state add src ${HOST2_6} dst ${HOST1_6} \ 3053f251d74SDavid Ahern proto esp spi ${SPI_2} reqid 0 mode tunnel \ 3063f251d74SDavid Ahern replay-window 4 replay-oseq 0x4 \ 307cb43c60eSMagali Lemes auth-trunc 'hmac(sha1)' ${AUTH_2} 96 \ 308cb43c60eSMagali Lemes enc 'cbc(aes)' ${ENC_2} \ 3093f251d74SDavid Ahern sel src ${h2_6} dst ${h1_6} ${devarg} 3103f251d74SDavid Ahern 31161b12ebeSHangbin Liu ip -6 -netns $host2 xfrm state add src ${HOST2_6} dst ${HOST1_6} \ 3123f251d74SDavid Ahern proto esp spi ${SPI_2} reqid 0 mode tunnel \ 3133f251d74SDavid Ahern replay-window 4 replay-oseq 0x4 \ 314cb43c60eSMagali Lemes auth-trunc 'hmac(sha1)' ${AUTH_2} 96 \ 315cb43c60eSMagali Lemes enc 'cbc(aes)' ${ENC_2} \ 3163f251d74SDavid Ahern sel src ${h2_6} dst ${h1_6} 3173f251d74SDavid Ahern} 3183f251d74SDavid Ahern 3193f251d74SDavid Aherncleanup_xfrm_dev() 3203f251d74SDavid Ahern{ 32161b12ebeSHangbin Liu ip -netns $host1 li del xfrm0 32261b12ebeSHangbin Liu ip -netns $host2 addr del ${XFRM2_4}/24 dev eth0 32361b12ebeSHangbin Liu ip -netns $host2 addr del ${XFRM2_6}/64 dev eth0 3243f251d74SDavid Ahern} 3253f251d74SDavid Ahern 3263f251d74SDavid Ahernsetup_xfrm_dev() 3273f251d74SDavid Ahern{ 3283f251d74SDavid Ahern local vrfarg="vrf ${VRF}" 3293f251d74SDavid Ahern 33061b12ebeSHangbin Liu ip -netns $host1 li add type xfrm dev eth0 if_id ${IF_ID} 33161b12ebeSHangbin Liu ip -netns $host1 li set xfrm0 ${vrfarg} up 33261b12ebeSHangbin Liu ip -netns $host1 addr add ${XFRM1_4}/24 dev xfrm0 33361b12ebeSHangbin Liu ip -netns $host1 addr add ${XFRM1_6}/64 dev xfrm0 3343f251d74SDavid Ahern 33561b12ebeSHangbin Liu ip -netns $host2 addr add ${XFRM2_4}/24 dev eth0 33661b12ebeSHangbin Liu ip -netns $host2 addr add ${XFRM2_6}/64 dev eth0 3373f251d74SDavid Ahern 3383f251d74SDavid Ahern setup_xfrm ${XFRM1_4} ${XFRM2_4} ${XFRM1_6} ${XFRM2_6} "if_id ${IF_ID}" 3393f251d74SDavid Ahern} 3403f251d74SDavid Ahern 3413f251d74SDavid Ahernrun_tests() 3423f251d74SDavid Ahern{ 3433f251d74SDavid Ahern cleanup_xfrm 3443f251d74SDavid Ahern 3453f251d74SDavid Ahern # no IPsec 3463f251d74SDavid Ahern run_cmd_host1 ip vrf exec ${VRF} ping -c1 -w1 ${HOST2_4} 3473f251d74SDavid Ahern log_test $? 0 "IPv4 no xfrm policy" 3483f251d74SDavid Ahern run_cmd_host1 ip vrf exec ${VRF} ${ping6} -c1 -w1 ${HOST2_6} 3493f251d74SDavid Ahern log_test $? 0 "IPv6 no xfrm policy" 3503f251d74SDavid Ahern 3513f251d74SDavid Ahern # xfrm without VRF in sel 3523f251d74SDavid Ahern setup_xfrm ${HOST1_4} ${HOST2_4} ${HOST1_6} ${HOST2_6} 3533f251d74SDavid Ahern run_cmd_host1 ip vrf exec ${VRF} ping -c1 -w1 ${HOST2_4} 3543f251d74SDavid Ahern log_test $? 0 "IPv4 xfrm policy based on address" 3553f251d74SDavid Ahern run_cmd_host1 ip vrf exec ${VRF} ${ping6} -c1 -w1 ${HOST2_6} 3563f251d74SDavid Ahern log_test $? 0 "IPv6 xfrm policy based on address" 3573f251d74SDavid Ahern cleanup_xfrm 3583f251d74SDavid Ahern 3593f251d74SDavid Ahern # xfrm with VRF in sel 3603f251d74SDavid Ahern # Known failure: ipv4 resets the flow oif after the lookup. Fix is 3613f251d74SDavid Ahern # not straightforward. 3623f251d74SDavid Ahern # setup_xfrm ${HOST1_4} ${HOST2_4} ${HOST1_6} ${HOST2_6} "dev ${VRF}" 3633f251d74SDavid Ahern # run_cmd_host1 ip vrf exec ${VRF} ping -c1 -w1 ${HOST2_4} 3643f251d74SDavid Ahern # log_test $? 0 "IPv4 xfrm policy with VRF in selector" 3653f251d74SDavid Ahern run_cmd_host1 ip vrf exec ${VRF} ${ping6} -c1 -w1 ${HOST2_6} 3663f251d74SDavid Ahern log_test $? 0 "IPv6 xfrm policy with VRF in selector" 3673f251d74SDavid Ahern cleanup_xfrm 3683f251d74SDavid Ahern 3693f251d74SDavid Ahern # xfrm with enslaved device in sel 3703f251d74SDavid Ahern # Known failures: combined with the above, __xfrm{4,6}_selector_match 3713f251d74SDavid Ahern # needs to consider both l3mdev and enslaved device index. 3723f251d74SDavid Ahern # setup_xfrm ${HOST1_4} ${HOST2_4} ${HOST1_6} ${HOST2_6} "dev eth0" 3733f251d74SDavid Ahern # run_cmd_host1 ip vrf exec ${VRF} ping -c1 -w1 ${HOST2_4} 3743f251d74SDavid Ahern # log_test $? 0 "IPv4 xfrm policy with enslaved device in selector" 3753f251d74SDavid Ahern # run_cmd_host1 ip vrf exec ${VRF} ${ping6} -c1 -w1 ${HOST2_6} 3763f251d74SDavid Ahern # log_test $? 0 "IPv6 xfrm policy with enslaved device in selector" 3773f251d74SDavid Ahern # cleanup_xfrm 3783f251d74SDavid Ahern 3793f251d74SDavid Ahern # xfrm device 3803f251d74SDavid Ahern setup_xfrm_dev 3813f251d74SDavid Ahern run_cmd_host1 ip vrf exec ${VRF} ping -c1 -w1 ${XFRM2_4} 3823f251d74SDavid Ahern log_test $? 0 "IPv4 xfrm policy with xfrm device" 3833f251d74SDavid Ahern run_cmd_host1 ip vrf exec ${VRF} ${ping6} -c1 -w1 ${XFRM2_6} 3843f251d74SDavid Ahern log_test $? 0 "IPv6 xfrm policy with xfrm device" 3853f251d74SDavid Ahern cleanup_xfrm_dev 3863f251d74SDavid Ahern} 3873f251d74SDavid Ahern 3883f251d74SDavid Ahern################################################################################ 3893f251d74SDavid Ahern# usage 3903f251d74SDavid Ahern 3913f251d74SDavid Ahernusage() 3923f251d74SDavid Ahern{ 3933f251d74SDavid Ahern cat <<EOF 3943f251d74SDavid Ahernusage: ${0##*/} OPTS 3953f251d74SDavid Ahern 3963f251d74SDavid Ahern -p Pause on fail 3973f251d74SDavid Ahern -v verbose mode (show commands and output) 3983f251d74SDavid Ahern 3993f251d74SDavid Aherndone 4003f251d74SDavid AhernEOF 4013f251d74SDavid Ahern} 4023f251d74SDavid Ahern 4033f251d74SDavid Ahern################################################################################ 4043f251d74SDavid Ahern# main 4053f251d74SDavid Ahern 4063f251d74SDavid Ahernwhile getopts :pv o 4073f251d74SDavid Aherndo 4083f251d74SDavid Ahern case $o in 4093f251d74SDavid Ahern p) PAUSE_ON_FAIL=yes;; 4103f251d74SDavid Ahern v) VERBOSE=$(($VERBOSE + 1));; 4113f251d74SDavid Ahern h) usage; exit 0;; 4123f251d74SDavid Ahern *) usage; exit 1;; 4133f251d74SDavid Ahern esac 4143f251d74SDavid Aherndone 4153f251d74SDavid Ahern 4163f251d74SDavid Aherncleanup 2>/dev/null 4173f251d74SDavid Ahernsetup 4183f251d74SDavid Ahern 4193f251d74SDavid Ahernecho 4203f251d74SDavid Ahernecho "No qdisc on VRF device" 4213f251d74SDavid Ahernrun_tests 4223f251d74SDavid Ahern 4233f251d74SDavid Ahernrun_cmd_host1 tc qdisc add dev ${VRF} root netem delay 100ms 4243f251d74SDavid Ahernecho 4253f251d74SDavid Ahernecho "netem qdisc on VRF device" 4263f251d74SDavid Ahernrun_tests 4273f251d74SDavid Ahern 4283f251d74SDavid Ahernprintf "\nTests passed: %3d\n" ${nsuccess} 4293f251d74SDavid Ahernprintf "Tests failed: %3d\n" ${nfail} 4303f251d74SDavid Ahern 4313f251d74SDavid Ahernexit $ret 432