1*053f45beSAndroid Build Coastguard Worker#!/bin/bash 2*053f45beSAndroid Build Coastguard Worker# 3*053f45beSAndroid Build Coastguard Worker# This test is for checking rtnetlink callpaths, and get as much coverage as possible. 4*053f45beSAndroid Build Coastguard Worker# 5*053f45beSAndroid Build Coastguard Worker# set -e 6*053f45beSAndroid Build Coastguard Worker 7*053f45beSAndroid Build Coastguard Workerdevdummy="test-dummy0" 8*053f45beSAndroid Build Coastguard Worker 9*053f45beSAndroid Build Coastguard Worker# Kselftest framework requirement - SKIP code is 4. 10*053f45beSAndroid Build Coastguard Workerksft_skip=4 11*053f45beSAndroid Build Coastguard Worker 12*053f45beSAndroid Build Coastguard Worker# set global exit status, but never reset nonzero one. 13*053f45beSAndroid Build Coastguard Workercheck_err() 14*053f45beSAndroid Build Coastguard Worker{ 15*053f45beSAndroid Build Coastguard Worker if [ $ret -eq 0 ]; then 16*053f45beSAndroid Build Coastguard Worker ret=$1 17*053f45beSAndroid Build Coastguard Worker fi 18*053f45beSAndroid Build Coastguard Worker} 19*053f45beSAndroid Build Coastguard Worker 20*053f45beSAndroid Build Coastguard Worker# same but inverted -- used when command must fail for test to pass 21*053f45beSAndroid Build Coastguard Workercheck_fail() 22*053f45beSAndroid Build Coastguard Worker{ 23*053f45beSAndroid Build Coastguard Worker if [ $1 -eq 0 ]; then 24*053f45beSAndroid Build Coastguard Worker ret=1 25*053f45beSAndroid Build Coastguard Worker fi 26*053f45beSAndroid Build Coastguard Worker} 27*053f45beSAndroid Build Coastguard Worker 28*053f45beSAndroid Build Coastguard Workerkci_add_dummy() 29*053f45beSAndroid Build Coastguard Worker{ 30*053f45beSAndroid Build Coastguard Worker ip link add name "$devdummy" type dummy 31*053f45beSAndroid Build Coastguard Worker check_err $? 32*053f45beSAndroid Build Coastguard Worker ip link set "$devdummy" up 33*053f45beSAndroid Build Coastguard Worker check_err $? 34*053f45beSAndroid Build Coastguard Worker} 35*053f45beSAndroid Build Coastguard Worker 36*053f45beSAndroid Build Coastguard Workerkci_del_dummy() 37*053f45beSAndroid Build Coastguard Worker{ 38*053f45beSAndroid Build Coastguard Worker ip link del dev "$devdummy" 39*053f45beSAndroid Build Coastguard Worker check_err $? 40*053f45beSAndroid Build Coastguard Worker} 41*053f45beSAndroid Build Coastguard Worker 42*053f45beSAndroid Build Coastguard Workerkci_test_netconf() 43*053f45beSAndroid Build Coastguard Worker{ 44*053f45beSAndroid Build Coastguard Worker dev="$1" 45*053f45beSAndroid Build Coastguard Worker r=$ret 46*053f45beSAndroid Build Coastguard Worker 47*053f45beSAndroid Build Coastguard Worker ip netconf show dev "$dev" > /dev/null 48*053f45beSAndroid Build Coastguard Worker check_err $? 49*053f45beSAndroid Build Coastguard Worker 50*053f45beSAndroid Build Coastguard Worker for f in 4 6; do 51*053f45beSAndroid Build Coastguard Worker ip -$f netconf show dev "$dev" > /dev/null 52*053f45beSAndroid Build Coastguard Worker check_err $? 53*053f45beSAndroid Build Coastguard Worker done 54*053f45beSAndroid Build Coastguard Worker 55*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ] ;then 56*053f45beSAndroid Build Coastguard Worker echo "FAIL: ip netconf show $dev" 57*053f45beSAndroid Build Coastguard Worker test $r -eq 0 && ret=0 58*053f45beSAndroid Build Coastguard Worker return 1 59*053f45beSAndroid Build Coastguard Worker fi 60*053f45beSAndroid Build Coastguard Worker} 61*053f45beSAndroid Build Coastguard Worker 62*053f45beSAndroid Build Coastguard Worker# add a bridge with vlans on top 63*053f45beSAndroid Build Coastguard Workerkci_test_bridge() 64*053f45beSAndroid Build Coastguard Worker{ 65*053f45beSAndroid Build Coastguard Worker devbr="test-br0" 66*053f45beSAndroid Build Coastguard Worker vlandev="testbr-vlan1" 67*053f45beSAndroid Build Coastguard Worker 68*053f45beSAndroid Build Coastguard Worker local ret=0 69*053f45beSAndroid Build Coastguard Worker ip link add name "$devbr" type bridge 70*053f45beSAndroid Build Coastguard Worker check_err $? 71*053f45beSAndroid Build Coastguard Worker 72*053f45beSAndroid Build Coastguard Worker ip link set dev "$devdummy" master "$devbr" 73*053f45beSAndroid Build Coastguard Worker check_err $? 74*053f45beSAndroid Build Coastguard Worker 75*053f45beSAndroid Build Coastguard Worker ip link set "$devbr" up 76*053f45beSAndroid Build Coastguard Worker check_err $? 77*053f45beSAndroid Build Coastguard Worker 78*053f45beSAndroid Build Coastguard Worker ip link add link "$devbr" name "$vlandev" type vlan id 1 79*053f45beSAndroid Build Coastguard Worker check_err $? 80*053f45beSAndroid Build Coastguard Worker ip addr add dev "$vlandev" 10.200.7.23/30 81*053f45beSAndroid Build Coastguard Worker check_err $? 82*053f45beSAndroid Build Coastguard Worker ip -6 addr add dev "$vlandev" dead:42::1234/64 83*053f45beSAndroid Build Coastguard Worker check_err $? 84*053f45beSAndroid Build Coastguard Worker ip -d link > /dev/null 85*053f45beSAndroid Build Coastguard Worker check_err $? 86*053f45beSAndroid Build Coastguard Worker ip r s t all > /dev/null 87*053f45beSAndroid Build Coastguard Worker check_err $? 88*053f45beSAndroid Build Coastguard Worker 89*053f45beSAndroid Build Coastguard Worker for name in "$devbr" "$vlandev" "$devdummy" ; do 90*053f45beSAndroid Build Coastguard Worker kci_test_netconf "$name" 91*053f45beSAndroid Build Coastguard Worker done 92*053f45beSAndroid Build Coastguard Worker 93*053f45beSAndroid Build Coastguard Worker ip -6 addr del dev "$vlandev" dead:42::1234/64 94*053f45beSAndroid Build Coastguard Worker check_err $? 95*053f45beSAndroid Build Coastguard Worker 96*053f45beSAndroid Build Coastguard Worker ip link del dev "$vlandev" 97*053f45beSAndroid Build Coastguard Worker check_err $? 98*053f45beSAndroid Build Coastguard Worker ip link del dev "$devbr" 99*053f45beSAndroid Build Coastguard Worker check_err $? 100*053f45beSAndroid Build Coastguard Worker 101*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ];then 102*053f45beSAndroid Build Coastguard Worker echo "FAIL: bridge setup" 103*053f45beSAndroid Build Coastguard Worker return 1 104*053f45beSAndroid Build Coastguard Worker fi 105*053f45beSAndroid Build Coastguard Worker echo "PASS: bridge setup" 106*053f45beSAndroid Build Coastguard Worker 107*053f45beSAndroid Build Coastguard Worker} 108*053f45beSAndroid Build Coastguard Worker 109*053f45beSAndroid Build Coastguard Workerkci_test_gre() 110*053f45beSAndroid Build Coastguard Worker{ 111*053f45beSAndroid Build Coastguard Worker gredev=neta 112*053f45beSAndroid Build Coastguard Worker rem=10.42.42.1 113*053f45beSAndroid Build Coastguard Worker loc=10.0.0.1 114*053f45beSAndroid Build Coastguard Worker 115*053f45beSAndroid Build Coastguard Worker local ret=0 116*053f45beSAndroid Build Coastguard Worker ip tunnel add $gredev mode gre remote $rem local $loc ttl 1 117*053f45beSAndroid Build Coastguard Worker check_err $? 118*053f45beSAndroid Build Coastguard Worker ip link set $gredev up 119*053f45beSAndroid Build Coastguard Worker check_err $? 120*053f45beSAndroid Build Coastguard Worker ip addr add 10.23.7.10 dev $gredev 121*053f45beSAndroid Build Coastguard Worker check_err $? 122*053f45beSAndroid Build Coastguard Worker ip route add 10.23.8.0/30 dev $gredev 123*053f45beSAndroid Build Coastguard Worker check_err $? 124*053f45beSAndroid Build Coastguard Worker ip addr add dev "$devdummy" 10.23.7.11/24 125*053f45beSAndroid Build Coastguard Worker check_err $? 126*053f45beSAndroid Build Coastguard Worker ip link > /dev/null 127*053f45beSAndroid Build Coastguard Worker check_err $? 128*053f45beSAndroid Build Coastguard Worker ip addr > /dev/null 129*053f45beSAndroid Build Coastguard Worker check_err $? 130*053f45beSAndroid Build Coastguard Worker 131*053f45beSAndroid Build Coastguard Worker kci_test_netconf "$gredev" 132*053f45beSAndroid Build Coastguard Worker 133*053f45beSAndroid Build Coastguard Worker ip addr del dev "$devdummy" 10.23.7.11/24 134*053f45beSAndroid Build Coastguard Worker check_err $? 135*053f45beSAndroid Build Coastguard Worker 136*053f45beSAndroid Build Coastguard Worker ip link del $gredev 137*053f45beSAndroid Build Coastguard Worker check_err $? 138*053f45beSAndroid Build Coastguard Worker 139*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ];then 140*053f45beSAndroid Build Coastguard Worker echo "FAIL: gre tunnel endpoint" 141*053f45beSAndroid Build Coastguard Worker return 1 142*053f45beSAndroid Build Coastguard Worker fi 143*053f45beSAndroid Build Coastguard Worker echo "PASS: gre tunnel endpoint" 144*053f45beSAndroid Build Coastguard Worker} 145*053f45beSAndroid Build Coastguard Worker 146*053f45beSAndroid Build Coastguard Worker# tc uses rtnetlink too, for full tc testing 147*053f45beSAndroid Build Coastguard Worker# please see tools/testing/selftests/tc-testing. 148*053f45beSAndroid Build Coastguard Workerkci_test_tc() 149*053f45beSAndroid Build Coastguard Worker{ 150*053f45beSAndroid Build Coastguard Worker dev=lo 151*053f45beSAndroid Build Coastguard Worker local ret=0 152*053f45beSAndroid Build Coastguard Worker 153*053f45beSAndroid Build Coastguard Worker tc qdisc add dev "$dev" root handle 1: htb 154*053f45beSAndroid Build Coastguard Worker check_err $? 155*053f45beSAndroid Build Coastguard Worker tc class add dev "$dev" parent 1: classid 1:10 htb rate 1mbit 156*053f45beSAndroid Build Coastguard Worker check_err $? 157*053f45beSAndroid Build Coastguard Worker tc filter add dev "$dev" parent 1:0 prio 5 handle ffe: protocol ip u32 divisor 256 158*053f45beSAndroid Build Coastguard Worker check_err $? 159*053f45beSAndroid Build Coastguard Worker tc filter add dev "$dev" parent 1:0 prio 5 handle ffd: protocol ip u32 divisor 256 160*053f45beSAndroid Build Coastguard Worker check_err $? 161*053f45beSAndroid Build Coastguard Worker tc filter add dev "$dev" parent 1:0 prio 5 handle ffc: protocol ip u32 divisor 256 162*053f45beSAndroid Build Coastguard Worker check_err $? 163*053f45beSAndroid Build Coastguard Worker tc filter add dev "$dev" protocol ip parent 1: prio 5 handle ffe:2:3 u32 ht ffe:2: match ip src 10.0.0.3 flowid 1:10 164*053f45beSAndroid Build Coastguard Worker check_err $? 165*053f45beSAndroid Build Coastguard Worker tc filter add dev "$dev" protocol ip parent 1: prio 5 handle ffe:2:2 u32 ht ffe:2: match ip src 10.0.0.2 flowid 1:10 166*053f45beSAndroid Build Coastguard Worker check_err $? 167*053f45beSAndroid Build Coastguard Worker tc filter show dev "$dev" parent 1:0 > /dev/null 168*053f45beSAndroid Build Coastguard Worker check_err $? 169*053f45beSAndroid Build Coastguard Worker tc filter del dev "$dev" protocol ip parent 1: prio 5 handle ffe:2:3 u32 170*053f45beSAndroid Build Coastguard Worker check_err $? 171*053f45beSAndroid Build Coastguard Worker tc filter show dev "$dev" parent 1:0 > /dev/null 172*053f45beSAndroid Build Coastguard Worker check_err $? 173*053f45beSAndroid Build Coastguard Worker tc qdisc del dev "$dev" root handle 1: htb 174*053f45beSAndroid Build Coastguard Worker check_err $? 175*053f45beSAndroid Build Coastguard Worker 176*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ];then 177*053f45beSAndroid Build Coastguard Worker echo "FAIL: tc htb hierarchy" 178*053f45beSAndroid Build Coastguard Worker return 1 179*053f45beSAndroid Build Coastguard Worker fi 180*053f45beSAndroid Build Coastguard Worker echo "PASS: tc htb hierarchy" 181*053f45beSAndroid Build Coastguard Worker 182*053f45beSAndroid Build Coastguard Worker} 183*053f45beSAndroid Build Coastguard Worker 184*053f45beSAndroid Build Coastguard Workerkci_test_polrouting() 185*053f45beSAndroid Build Coastguard Worker{ 186*053f45beSAndroid Build Coastguard Worker local ret=0 187*053f45beSAndroid Build Coastguard Worker ip rule add fwmark 1 lookup 100 188*053f45beSAndroid Build Coastguard Worker check_err $? 189*053f45beSAndroid Build Coastguard Worker ip route add local 0.0.0.0/0 dev lo table 100 190*053f45beSAndroid Build Coastguard Worker check_err $? 191*053f45beSAndroid Build Coastguard Worker ip r s t all > /dev/null 192*053f45beSAndroid Build Coastguard Worker check_err $? 193*053f45beSAndroid Build Coastguard Worker ip rule del fwmark 1 lookup 100 194*053f45beSAndroid Build Coastguard Worker check_err $? 195*053f45beSAndroid Build Coastguard Worker ip route del local 0.0.0.0/0 dev lo table 100 196*053f45beSAndroid Build Coastguard Worker check_err $? 197*053f45beSAndroid Build Coastguard Worker 198*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ];then 199*053f45beSAndroid Build Coastguard Worker echo "FAIL: policy route test" 200*053f45beSAndroid Build Coastguard Worker return 1 201*053f45beSAndroid Build Coastguard Worker fi 202*053f45beSAndroid Build Coastguard Worker echo "PASS: policy routing" 203*053f45beSAndroid Build Coastguard Worker} 204*053f45beSAndroid Build Coastguard Worker 205*053f45beSAndroid Build Coastguard Workerkci_test_route_get() 206*053f45beSAndroid Build Coastguard Worker{ 207*053f45beSAndroid Build Coastguard Worker local hash_policy=$(sysctl -n net.ipv4.fib_multipath_hash_policy) 208*053f45beSAndroid Build Coastguard Worker 209*053f45beSAndroid Build Coastguard Worker local ret=0 210*053f45beSAndroid Build Coastguard Worker 211*053f45beSAndroid Build Coastguard Worker ip route get 127.0.0.1 > /dev/null 212*053f45beSAndroid Build Coastguard Worker check_err $? 213*053f45beSAndroid Build Coastguard Worker ip route get 127.0.0.1 dev "$devdummy" > /dev/null 214*053f45beSAndroid Build Coastguard Worker check_err $? 215*053f45beSAndroid Build Coastguard Worker ip route get ::1 > /dev/null 216*053f45beSAndroid Build Coastguard Worker check_err $? 217*053f45beSAndroid Build Coastguard Worker ip route get fe80::1 dev "$devdummy" > /dev/null 218*053f45beSAndroid Build Coastguard Worker check_err $? 219*053f45beSAndroid Build Coastguard Worker ip route get 127.0.0.1 from 127.0.0.1 oif lo tos 0x10 mark 0x1 > /dev/null 220*053f45beSAndroid Build Coastguard Worker check_err $? 221*053f45beSAndroid Build Coastguard Worker ip route get ::1 from ::1 iif lo oif lo tos 0x10 mark 0x1 > /dev/null 222*053f45beSAndroid Build Coastguard Worker check_err $? 223*053f45beSAndroid Build Coastguard Worker ip addr add dev "$devdummy" 10.23.7.11/24 224*053f45beSAndroid Build Coastguard Worker check_err $? 225*053f45beSAndroid Build Coastguard Worker ip route get 10.23.7.11 from 10.23.7.12 iif "$devdummy" > /dev/null 226*053f45beSAndroid Build Coastguard Worker check_err $? 227*053f45beSAndroid Build Coastguard Worker ip route add 10.23.8.0/24 \ 228*053f45beSAndroid Build Coastguard Worker nexthop via 10.23.7.13 dev "$devdummy" \ 229*053f45beSAndroid Build Coastguard Worker nexthop via 10.23.7.14 dev "$devdummy" 230*053f45beSAndroid Build Coastguard Worker check_err $? 231*053f45beSAndroid Build Coastguard Worker sysctl -wq net.ipv4.fib_multipath_hash_policy=0 232*053f45beSAndroid Build Coastguard Worker ip route get 10.23.8.11 > /dev/null 233*053f45beSAndroid Build Coastguard Worker check_err $? 234*053f45beSAndroid Build Coastguard Worker sysctl -wq net.ipv4.fib_multipath_hash_policy=1 235*053f45beSAndroid Build Coastguard Worker ip route get 10.23.8.11 > /dev/null 236*053f45beSAndroid Build Coastguard Worker check_err $? 237*053f45beSAndroid Build Coastguard Worker sysctl -wq net.ipv4.fib_multipath_hash_policy="$hash_policy" 238*053f45beSAndroid Build Coastguard Worker ip route del 10.23.8.0/24 239*053f45beSAndroid Build Coastguard Worker check_err $? 240*053f45beSAndroid Build Coastguard Worker ip addr del dev "$devdummy" 10.23.7.11/24 241*053f45beSAndroid Build Coastguard Worker check_err $? 242*053f45beSAndroid Build Coastguard Worker 243*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ];then 244*053f45beSAndroid Build Coastguard Worker echo "FAIL: route get" 245*053f45beSAndroid Build Coastguard Worker return 1 246*053f45beSAndroid Build Coastguard Worker fi 247*053f45beSAndroid Build Coastguard Worker 248*053f45beSAndroid Build Coastguard Worker echo "PASS: route get" 249*053f45beSAndroid Build Coastguard Worker} 250*053f45beSAndroid Build Coastguard Worker 251*053f45beSAndroid Build Coastguard Workerkci_test_addrlft() 252*053f45beSAndroid Build Coastguard Worker{ 253*053f45beSAndroid Build Coastguard Worker for i in $(seq 10 100) ;do 254*053f45beSAndroid Build Coastguard Worker lft=$(((RANDOM%3) + 1)) 255*053f45beSAndroid Build Coastguard Worker ip addr add 10.23.11.$i/32 dev "$devdummy" preferred_lft $lft valid_lft $((lft+1)) 256*053f45beSAndroid Build Coastguard Worker check_err $? 257*053f45beSAndroid Build Coastguard Worker done 258*053f45beSAndroid Build Coastguard Worker 259*053f45beSAndroid Build Coastguard Worker sleep 5 260*053f45beSAndroid Build Coastguard Worker 261*053f45beSAndroid Build Coastguard Worker ip addr show dev "$devdummy" | grep "10.23.11." 262*053f45beSAndroid Build Coastguard Worker if [ $? -eq 0 ]; then 263*053f45beSAndroid Build Coastguard Worker echo "FAIL: preferred_lft addresses remaining" 264*053f45beSAndroid Build Coastguard Worker check_err 1 265*053f45beSAndroid Build Coastguard Worker return 266*053f45beSAndroid Build Coastguard Worker fi 267*053f45beSAndroid Build Coastguard Worker 268*053f45beSAndroid Build Coastguard Worker echo "PASS: preferred_lft addresses have expired" 269*053f45beSAndroid Build Coastguard Worker} 270*053f45beSAndroid Build Coastguard Worker 271*053f45beSAndroid Build Coastguard Workerkci_test_promote_secondaries() 272*053f45beSAndroid Build Coastguard Worker{ 273*053f45beSAndroid Build Coastguard Worker promote=$(sysctl -n net.ipv4.conf.$devdummy.promote_secondaries) 274*053f45beSAndroid Build Coastguard Worker 275*053f45beSAndroid Build Coastguard Worker sysctl -q net.ipv4.conf.$devdummy.promote_secondaries=1 276*053f45beSAndroid Build Coastguard Worker 277*053f45beSAndroid Build Coastguard Worker for i in $(seq 2 254);do 278*053f45beSAndroid Build Coastguard Worker IP="10.23.11.$i" 279*053f45beSAndroid Build Coastguard Worker ip -f inet addr add $IP/16 brd + dev "$devdummy" 280*053f45beSAndroid Build Coastguard Worker ifconfig "$devdummy" $IP netmask 255.255.0.0 281*053f45beSAndroid Build Coastguard Worker done 282*053f45beSAndroid Build Coastguard Worker 283*053f45beSAndroid Build Coastguard Worker ip addr flush dev "$devdummy" 284*053f45beSAndroid Build Coastguard Worker 285*053f45beSAndroid Build Coastguard Worker [ $promote -eq 0 ] && sysctl -q net.ipv4.conf.$devdummy.promote_secondaries=0 286*053f45beSAndroid Build Coastguard Worker 287*053f45beSAndroid Build Coastguard Worker echo "PASS: promote_secondaries complete" 288*053f45beSAndroid Build Coastguard Worker} 289*053f45beSAndroid Build Coastguard Worker 290*053f45beSAndroid Build Coastguard Workerkci_test_addrlabel() 291*053f45beSAndroid Build Coastguard Worker{ 292*053f45beSAndroid Build Coastguard Worker local ret=0 293*053f45beSAndroid Build Coastguard Worker 294*053f45beSAndroid Build Coastguard Worker ip addrlabel add prefix dead::/64 dev lo label 1 295*053f45beSAndroid Build Coastguard Worker check_err $? 296*053f45beSAndroid Build Coastguard Worker 297*053f45beSAndroid Build Coastguard Worker ip addrlabel list |grep -q "prefix dead::/64 dev lo label 1" 298*053f45beSAndroid Build Coastguard Worker check_err $? 299*053f45beSAndroid Build Coastguard Worker 300*053f45beSAndroid Build Coastguard Worker ip addrlabel del prefix dead::/64 dev lo label 1 2> /dev/null 301*053f45beSAndroid Build Coastguard Worker check_err $? 302*053f45beSAndroid Build Coastguard Worker 303*053f45beSAndroid Build Coastguard Worker ip addrlabel add prefix dead::/64 label 1 2> /dev/null 304*053f45beSAndroid Build Coastguard Worker check_err $? 305*053f45beSAndroid Build Coastguard Worker 306*053f45beSAndroid Build Coastguard Worker ip addrlabel del prefix dead::/64 label 1 2> /dev/null 307*053f45beSAndroid Build Coastguard Worker check_err $? 308*053f45beSAndroid Build Coastguard Worker 309*053f45beSAndroid Build Coastguard Worker # concurrent add/delete 310*053f45beSAndroid Build Coastguard Worker for i in $(seq 1 1000); do 311*053f45beSAndroid Build Coastguard Worker ip addrlabel add prefix 1c3::/64 label 12345 2>/dev/null 312*053f45beSAndroid Build Coastguard Worker done & 313*053f45beSAndroid Build Coastguard Worker 314*053f45beSAndroid Build Coastguard Worker for i in $(seq 1 1000); do 315*053f45beSAndroid Build Coastguard Worker ip addrlabel del prefix 1c3::/64 label 12345 2>/dev/null 316*053f45beSAndroid Build Coastguard Worker done 317*053f45beSAndroid Build Coastguard Worker 318*053f45beSAndroid Build Coastguard Worker wait 319*053f45beSAndroid Build Coastguard Worker 320*053f45beSAndroid Build Coastguard Worker ip addrlabel del prefix 1c3::/64 label 12345 2>/dev/null 321*053f45beSAndroid Build Coastguard Worker 322*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ];then 323*053f45beSAndroid Build Coastguard Worker echo "FAIL: ipv6 addrlabel" 324*053f45beSAndroid Build Coastguard Worker return 1 325*053f45beSAndroid Build Coastguard Worker fi 326*053f45beSAndroid Build Coastguard Worker 327*053f45beSAndroid Build Coastguard Worker echo "PASS: ipv6 addrlabel" 328*053f45beSAndroid Build Coastguard Worker} 329*053f45beSAndroid Build Coastguard Worker 330*053f45beSAndroid Build Coastguard Workerkci_test_ifalias() 331*053f45beSAndroid Build Coastguard Worker{ 332*053f45beSAndroid Build Coastguard Worker local ret=0 333*053f45beSAndroid Build Coastguard Worker namewant=$(uuidgen) 334*053f45beSAndroid Build Coastguard Worker syspathname="/sys/class/net/$devdummy/ifalias" 335*053f45beSAndroid Build Coastguard Worker 336*053f45beSAndroid Build Coastguard Worker ip link set dev "$devdummy" alias "$namewant" 337*053f45beSAndroid Build Coastguard Worker check_err $? 338*053f45beSAndroid Build Coastguard Worker 339*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ]; then 340*053f45beSAndroid Build Coastguard Worker echo "FAIL: cannot set interface alias of $devdummy to $namewant" 341*053f45beSAndroid Build Coastguard Worker return 1 342*053f45beSAndroid Build Coastguard Worker fi 343*053f45beSAndroid Build Coastguard Worker 344*053f45beSAndroid Build Coastguard Worker ip link show "$devdummy" | grep -q "alias $namewant" 345*053f45beSAndroid Build Coastguard Worker check_err $? 346*053f45beSAndroid Build Coastguard Worker 347*053f45beSAndroid Build Coastguard Worker if [ -r "$syspathname" ] ; then 348*053f45beSAndroid Build Coastguard Worker read namehave < "$syspathname" 349*053f45beSAndroid Build Coastguard Worker if [ "$namewant" != "$namehave" ]; then 350*053f45beSAndroid Build Coastguard Worker echo "FAIL: did set ifalias $namewant but got $namehave" 351*053f45beSAndroid Build Coastguard Worker return 1 352*053f45beSAndroid Build Coastguard Worker fi 353*053f45beSAndroid Build Coastguard Worker 354*053f45beSAndroid Build Coastguard Worker namewant=$(uuidgen) 355*053f45beSAndroid Build Coastguard Worker echo "$namewant" > "$syspathname" 356*053f45beSAndroid Build Coastguard Worker ip link show "$devdummy" | grep -q "alias $namewant" 357*053f45beSAndroid Build Coastguard Worker check_err $? 358*053f45beSAndroid Build Coastguard Worker 359*053f45beSAndroid Build Coastguard Worker # sysfs interface allows to delete alias again 360*053f45beSAndroid Build Coastguard Worker echo "" > "$syspathname" 361*053f45beSAndroid Build Coastguard Worker 362*053f45beSAndroid Build Coastguard Worker ip link show "$devdummy" | grep -q "alias $namewant" 363*053f45beSAndroid Build Coastguard Worker check_fail $? 364*053f45beSAndroid Build Coastguard Worker 365*053f45beSAndroid Build Coastguard Worker for i in $(seq 1 100); do 366*053f45beSAndroid Build Coastguard Worker uuidgen > "$syspathname" & 367*053f45beSAndroid Build Coastguard Worker done 368*053f45beSAndroid Build Coastguard Worker 369*053f45beSAndroid Build Coastguard Worker wait 370*053f45beSAndroid Build Coastguard Worker 371*053f45beSAndroid Build Coastguard Worker # re-add the alias -- kernel should free mem when dummy dev is removed 372*053f45beSAndroid Build Coastguard Worker ip link set dev "$devdummy" alias "$namewant" 373*053f45beSAndroid Build Coastguard Worker check_err $? 374*053f45beSAndroid Build Coastguard Worker fi 375*053f45beSAndroid Build Coastguard Worker 376*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ]; then 377*053f45beSAndroid Build Coastguard Worker echo "FAIL: set interface alias $devdummy to $namewant" 378*053f45beSAndroid Build Coastguard Worker return 1 379*053f45beSAndroid Build Coastguard Worker fi 380*053f45beSAndroid Build Coastguard Worker 381*053f45beSAndroid Build Coastguard Worker echo "PASS: set ifalias $namewant for $devdummy" 382*053f45beSAndroid Build Coastguard Worker} 383*053f45beSAndroid Build Coastguard Worker 384*053f45beSAndroid Build Coastguard Workerkci_test_vrf() 385*053f45beSAndroid Build Coastguard Worker{ 386*053f45beSAndroid Build Coastguard Worker vrfname="test-vrf" 387*053f45beSAndroid Build Coastguard Worker local ret=0 388*053f45beSAndroid Build Coastguard Worker 389*053f45beSAndroid Build Coastguard Worker ip link show type vrf 2>/dev/null 390*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ]; then 391*053f45beSAndroid Build Coastguard Worker echo "SKIP: vrf: iproute2 too old" 392*053f45beSAndroid Build Coastguard Worker return $ksft_skip 393*053f45beSAndroid Build Coastguard Worker fi 394*053f45beSAndroid Build Coastguard Worker 395*053f45beSAndroid Build Coastguard Worker ip link add "$vrfname" type vrf table 10 396*053f45beSAndroid Build Coastguard Worker check_err $? 397*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ];then 398*053f45beSAndroid Build Coastguard Worker echo "FAIL: can't add vrf interface, skipping test" 399*053f45beSAndroid Build Coastguard Worker return 0 400*053f45beSAndroid Build Coastguard Worker fi 401*053f45beSAndroid Build Coastguard Worker 402*053f45beSAndroid Build Coastguard Worker ip -br link show type vrf | grep -q "$vrfname" 403*053f45beSAndroid Build Coastguard Worker check_err $? 404*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ];then 405*053f45beSAndroid Build Coastguard Worker echo "FAIL: created vrf device not found" 406*053f45beSAndroid Build Coastguard Worker return 1 407*053f45beSAndroid Build Coastguard Worker fi 408*053f45beSAndroid Build Coastguard Worker 409*053f45beSAndroid Build Coastguard Worker ip link set dev "$vrfname" up 410*053f45beSAndroid Build Coastguard Worker check_err $? 411*053f45beSAndroid Build Coastguard Worker 412*053f45beSAndroid Build Coastguard Worker ip link set dev "$devdummy" master "$vrfname" 413*053f45beSAndroid Build Coastguard Worker check_err $? 414*053f45beSAndroid Build Coastguard Worker ip link del dev "$vrfname" 415*053f45beSAndroid Build Coastguard Worker check_err $? 416*053f45beSAndroid Build Coastguard Worker 417*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ];then 418*053f45beSAndroid Build Coastguard Worker echo "FAIL: vrf" 419*053f45beSAndroid Build Coastguard Worker return 1 420*053f45beSAndroid Build Coastguard Worker fi 421*053f45beSAndroid Build Coastguard Worker 422*053f45beSAndroid Build Coastguard Worker echo "PASS: vrf" 423*053f45beSAndroid Build Coastguard Worker} 424*053f45beSAndroid Build Coastguard Worker 425*053f45beSAndroid Build Coastguard Workerkci_test_encap_vxlan() 426*053f45beSAndroid Build Coastguard Worker{ 427*053f45beSAndroid Build Coastguard Worker local ret=0 428*053f45beSAndroid Build Coastguard Worker vxlan="test-vxlan0" 429*053f45beSAndroid Build Coastguard Worker vlan="test-vlan0" 430*053f45beSAndroid Build Coastguard Worker testns="$1" 431*053f45beSAndroid Build Coastguard Worker 432*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link add "$vxlan" type vxlan id 42 group 239.1.1.1 \ 433*053f45beSAndroid Build Coastguard Worker dev "$devdummy" dstport 4789 2>/dev/null 434*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ]; then 435*053f45beSAndroid Build Coastguard Worker echo "FAIL: can't add vxlan interface, skipping test" 436*053f45beSAndroid Build Coastguard Worker return 0 437*053f45beSAndroid Build Coastguard Worker fi 438*053f45beSAndroid Build Coastguard Worker check_err $? 439*053f45beSAndroid Build Coastguard Worker 440*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" addr add 10.2.11.49/24 dev "$vxlan" 441*053f45beSAndroid Build Coastguard Worker check_err $? 442*053f45beSAndroid Build Coastguard Worker 443*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set up dev "$vxlan" 444*053f45beSAndroid Build Coastguard Worker check_err $? 445*053f45beSAndroid Build Coastguard Worker 446*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link add link "$vxlan" name "$vlan" type vlan id 1 447*053f45beSAndroid Build Coastguard Worker check_err $? 448*053f45beSAndroid Build Coastguard Worker 449*053f45beSAndroid Build Coastguard Worker # changelink testcases 450*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev "$vxlan" type vxlan vni 43 2>/dev/null 451*053f45beSAndroid Build Coastguard Worker check_fail $? 452*053f45beSAndroid Build Coastguard Worker 453*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev "$vxlan" type vxlan group ffe5::5 dev "$devdummy" 2>/dev/null 454*053f45beSAndroid Build Coastguard Worker check_fail $? 455*053f45beSAndroid Build Coastguard Worker 456*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev "$vxlan" type vxlan ttl inherit 2>/dev/null 457*053f45beSAndroid Build Coastguard Worker check_fail $? 458*053f45beSAndroid Build Coastguard Worker 459*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev "$vxlan" type vxlan ttl 64 460*053f45beSAndroid Build Coastguard Worker check_err $? 461*053f45beSAndroid Build Coastguard Worker 462*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev "$vxlan" type vxlan nolearning 463*053f45beSAndroid Build Coastguard Worker check_err $? 464*053f45beSAndroid Build Coastguard Worker 465*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev "$vxlan" type vxlan proxy 2>/dev/null 466*053f45beSAndroid Build Coastguard Worker check_fail $? 467*053f45beSAndroid Build Coastguard Worker 468*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev "$vxlan" type vxlan norsc 2>/dev/null 469*053f45beSAndroid Build Coastguard Worker check_fail $? 470*053f45beSAndroid Build Coastguard Worker 471*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev "$vxlan" type vxlan l2miss 2>/dev/null 472*053f45beSAndroid Build Coastguard Worker check_fail $? 473*053f45beSAndroid Build Coastguard Worker 474*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev "$vxlan" type vxlan l3miss 2>/dev/null 475*053f45beSAndroid Build Coastguard Worker check_fail $? 476*053f45beSAndroid Build Coastguard Worker 477*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev "$vxlan" type vxlan external 2>/dev/null 478*053f45beSAndroid Build Coastguard Worker check_fail $? 479*053f45beSAndroid Build Coastguard Worker 480*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev "$vxlan" type vxlan udpcsum 2>/dev/null 481*053f45beSAndroid Build Coastguard Worker check_fail $? 482*053f45beSAndroid Build Coastguard Worker 483*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev "$vxlan" type vxlan udp6zerocsumtx 2>/dev/null 484*053f45beSAndroid Build Coastguard Worker check_fail $? 485*053f45beSAndroid Build Coastguard Worker 486*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev "$vxlan" type vxlan udp6zerocsumrx 2>/dev/null 487*053f45beSAndroid Build Coastguard Worker check_fail $? 488*053f45beSAndroid Build Coastguard Worker 489*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev "$vxlan" type vxlan remcsumtx 2>/dev/null 490*053f45beSAndroid Build Coastguard Worker check_fail $? 491*053f45beSAndroid Build Coastguard Worker 492*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev "$vxlan" type vxlan remcsumrx 2>/dev/null 493*053f45beSAndroid Build Coastguard Worker check_fail $? 494*053f45beSAndroid Build Coastguard Worker 495*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev "$vxlan" type vxlan gbp 2>/dev/null 496*053f45beSAndroid Build Coastguard Worker check_fail $? 497*053f45beSAndroid Build Coastguard Worker 498*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev "$vxlan" type vxlan gpe 2>/dev/null 499*053f45beSAndroid Build Coastguard Worker check_fail $? 500*053f45beSAndroid Build Coastguard Worker 501*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link del "$vxlan" 502*053f45beSAndroid Build Coastguard Worker check_err $? 503*053f45beSAndroid Build Coastguard Worker 504*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ]; then 505*053f45beSAndroid Build Coastguard Worker echo "FAIL: vxlan" 506*053f45beSAndroid Build Coastguard Worker return 1 507*053f45beSAndroid Build Coastguard Worker fi 508*053f45beSAndroid Build Coastguard Worker echo "PASS: vxlan" 509*053f45beSAndroid Build Coastguard Worker} 510*053f45beSAndroid Build Coastguard Worker 511*053f45beSAndroid Build Coastguard Workerkci_test_encap_fou() 512*053f45beSAndroid Build Coastguard Worker{ 513*053f45beSAndroid Build Coastguard Worker local ret=0 514*053f45beSAndroid Build Coastguard Worker name="test-fou" 515*053f45beSAndroid Build Coastguard Worker testns="$1" 516*053f45beSAndroid Build Coastguard Worker 517*053f45beSAndroid Build Coastguard Worker ip fou help 2>&1 |grep -q 'Usage: ip fou' 518*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ];then 519*053f45beSAndroid Build Coastguard Worker echo "SKIP: fou: iproute2 too old" 520*053f45beSAndroid Build Coastguard Worker return $ksft_skip 521*053f45beSAndroid Build Coastguard Worker fi 522*053f45beSAndroid Build Coastguard Worker 523*053f45beSAndroid Build Coastguard Worker if ! /sbin/modprobe -q -n fou; then 524*053f45beSAndroid Build Coastguard Worker echo "SKIP: module fou is not found" 525*053f45beSAndroid Build Coastguard Worker return $ksft_skip 526*053f45beSAndroid Build Coastguard Worker fi 527*053f45beSAndroid Build Coastguard Worker /sbin/modprobe -q fou 528*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" fou add port 7777 ipproto 47 2>/dev/null 529*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ];then 530*053f45beSAndroid Build Coastguard Worker echo "FAIL: can't add fou port 7777, skipping test" 531*053f45beSAndroid Build Coastguard Worker return 1 532*053f45beSAndroid Build Coastguard Worker fi 533*053f45beSAndroid Build Coastguard Worker 534*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" fou add port 8888 ipproto 4 535*053f45beSAndroid Build Coastguard Worker check_err $? 536*053f45beSAndroid Build Coastguard Worker 537*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" fou del port 9999 2>/dev/null 538*053f45beSAndroid Build Coastguard Worker check_fail $? 539*053f45beSAndroid Build Coastguard Worker 540*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" fou del port 7777 541*053f45beSAndroid Build Coastguard Worker check_err $? 542*053f45beSAndroid Build Coastguard Worker 543*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ]; then 544*053f45beSAndroid Build Coastguard Worker echo "FAIL: fou" 545*053f45beSAndroid Build Coastguard Worker return 1 546*053f45beSAndroid Build Coastguard Worker fi 547*053f45beSAndroid Build Coastguard Worker 548*053f45beSAndroid Build Coastguard Worker echo "PASS: fou" 549*053f45beSAndroid Build Coastguard Worker} 550*053f45beSAndroid Build Coastguard Worker 551*053f45beSAndroid Build Coastguard Worker# test various encap methods, use netns to avoid unwanted interference 552*053f45beSAndroid Build Coastguard Workerkci_test_encap() 553*053f45beSAndroid Build Coastguard Worker{ 554*053f45beSAndroid Build Coastguard Worker testns="testns" 555*053f45beSAndroid Build Coastguard Worker local ret=0 556*053f45beSAndroid Build Coastguard Worker 557*053f45beSAndroid Build Coastguard Worker ip netns add "$testns" 558*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ]; then 559*053f45beSAndroid Build Coastguard Worker echo "SKIP encap tests: cannot add net namespace $testns" 560*053f45beSAndroid Build Coastguard Worker return $ksft_skip 561*053f45beSAndroid Build Coastguard Worker fi 562*053f45beSAndroid Build Coastguard Worker 563*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set lo up 564*053f45beSAndroid Build Coastguard Worker check_err $? 565*053f45beSAndroid Build Coastguard Worker 566*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link add name "$devdummy" type dummy 567*053f45beSAndroid Build Coastguard Worker check_err $? 568*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set "$devdummy" up 569*053f45beSAndroid Build Coastguard Worker check_err $? 570*053f45beSAndroid Build Coastguard Worker 571*053f45beSAndroid Build Coastguard Worker kci_test_encap_vxlan "$testns" 572*053f45beSAndroid Build Coastguard Worker check_err $? 573*053f45beSAndroid Build Coastguard Worker kci_test_encap_fou "$testns" 574*053f45beSAndroid Build Coastguard Worker check_err $? 575*053f45beSAndroid Build Coastguard Worker 576*053f45beSAndroid Build Coastguard Worker ip netns del "$testns" 577*053f45beSAndroid Build Coastguard Worker return $ret 578*053f45beSAndroid Build Coastguard Worker} 579*053f45beSAndroid Build Coastguard Worker 580*053f45beSAndroid Build Coastguard Workerkci_test_macsec() 581*053f45beSAndroid Build Coastguard Worker{ 582*053f45beSAndroid Build Coastguard Worker msname="test_macsec0" 583*053f45beSAndroid Build Coastguard Worker local ret=0 584*053f45beSAndroid Build Coastguard Worker 585*053f45beSAndroid Build Coastguard Worker ip macsec help 2>&1 | grep -q "^Usage: ip macsec" 586*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ]; then 587*053f45beSAndroid Build Coastguard Worker echo "SKIP: macsec: iproute2 too old" 588*053f45beSAndroid Build Coastguard Worker return $ksft_skip 589*053f45beSAndroid Build Coastguard Worker fi 590*053f45beSAndroid Build Coastguard Worker 591*053f45beSAndroid Build Coastguard Worker ip link add link "$devdummy" "$msname" type macsec port 42 encrypt on 592*053f45beSAndroid Build Coastguard Worker check_err $? 593*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ];then 594*053f45beSAndroid Build Coastguard Worker echo "FAIL: can't add macsec interface, skipping test" 595*053f45beSAndroid Build Coastguard Worker return 1 596*053f45beSAndroid Build Coastguard Worker fi 597*053f45beSAndroid Build Coastguard Worker 598*053f45beSAndroid Build Coastguard Worker ip macsec add "$msname" tx sa 0 pn 1024 on key 01 12345678901234567890123456789012 599*053f45beSAndroid Build Coastguard Worker check_err $? 600*053f45beSAndroid Build Coastguard Worker 601*053f45beSAndroid Build Coastguard Worker ip macsec add "$msname" rx port 1234 address "1c:ed:de:ad:be:ef" 602*053f45beSAndroid Build Coastguard Worker check_err $? 603*053f45beSAndroid Build Coastguard Worker 604*053f45beSAndroid Build Coastguard Worker ip macsec add "$msname" rx port 1234 address "1c:ed:de:ad:be:ef" sa 0 pn 1 on key 00 0123456789abcdef0123456789abcdef 605*053f45beSAndroid Build Coastguard Worker check_err $? 606*053f45beSAndroid Build Coastguard Worker 607*053f45beSAndroid Build Coastguard Worker ip macsec show > /dev/null 608*053f45beSAndroid Build Coastguard Worker check_err $? 609*053f45beSAndroid Build Coastguard Worker 610*053f45beSAndroid Build Coastguard Worker ip link del dev "$msname" 611*053f45beSAndroid Build Coastguard Worker check_err $? 612*053f45beSAndroid Build Coastguard Worker 613*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ];then 614*053f45beSAndroid Build Coastguard Worker echo "FAIL: macsec" 615*053f45beSAndroid Build Coastguard Worker return 1 616*053f45beSAndroid Build Coastguard Worker fi 617*053f45beSAndroid Build Coastguard Worker 618*053f45beSAndroid Build Coastguard Worker echo "PASS: macsec" 619*053f45beSAndroid Build Coastguard Worker} 620*053f45beSAndroid Build Coastguard Worker 621*053f45beSAndroid Build Coastguard Worker#------------------------------------------------------------------- 622*053f45beSAndroid Build Coastguard Worker# Example commands 623*053f45beSAndroid Build Coastguard Worker# ip x s add proto esp src 14.0.0.52 dst 14.0.0.70 \ 624*053f45beSAndroid Build Coastguard Worker# spi 0x07 mode transport reqid 0x07 replay-window 32 \ 625*053f45beSAndroid Build Coastguard Worker# aead 'rfc4106(gcm(aes))' 1234567890123456dcba 128 \ 626*053f45beSAndroid Build Coastguard Worker# sel src 14.0.0.52/24 dst 14.0.0.70/24 627*053f45beSAndroid Build Coastguard Worker# ip x p add dir out src 14.0.0.52/24 dst 14.0.0.70/24 \ 628*053f45beSAndroid Build Coastguard Worker# tmpl proto esp src 14.0.0.52 dst 14.0.0.70 \ 629*053f45beSAndroid Build Coastguard Worker# spi 0x07 mode transport reqid 0x07 630*053f45beSAndroid Build Coastguard Worker# 631*053f45beSAndroid Build Coastguard Worker# Subcommands not tested 632*053f45beSAndroid Build Coastguard Worker# ip x s update 633*053f45beSAndroid Build Coastguard Worker# ip x s allocspi 634*053f45beSAndroid Build Coastguard Worker# ip x s deleteall 635*053f45beSAndroid Build Coastguard Worker# ip x p update 636*053f45beSAndroid Build Coastguard Worker# ip x p deleteall 637*053f45beSAndroid Build Coastguard Worker# ip x p set 638*053f45beSAndroid Build Coastguard Worker#------------------------------------------------------------------- 639*053f45beSAndroid Build Coastguard Workerkci_test_ipsec() 640*053f45beSAndroid Build Coastguard Worker{ 641*053f45beSAndroid Build Coastguard Worker local ret=0 642*053f45beSAndroid Build Coastguard Worker algo="aead rfc4106(gcm(aes)) 0x3132333435363738393031323334353664636261 128" 643*053f45beSAndroid Build Coastguard Worker srcip=192.168.123.1 644*053f45beSAndroid Build Coastguard Worker dstip=192.168.123.2 645*053f45beSAndroid Build Coastguard Worker spi=7 646*053f45beSAndroid Build Coastguard Worker 647*053f45beSAndroid Build Coastguard Worker ip addr add $srcip dev $devdummy 648*053f45beSAndroid Build Coastguard Worker 649*053f45beSAndroid Build Coastguard Worker # flush to be sure there's nothing configured 650*053f45beSAndroid Build Coastguard Worker ip x s flush ; ip x p flush 651*053f45beSAndroid Build Coastguard Worker check_err $? 652*053f45beSAndroid Build Coastguard Worker 653*053f45beSAndroid Build Coastguard Worker # start the monitor in the background 654*053f45beSAndroid Build Coastguard Worker tmpfile=`mktemp /var/run/ipsectestXXX` 655*053f45beSAndroid Build Coastguard Worker mpid=`(ip x m > $tmpfile & echo $!) 2>/dev/null` 656*053f45beSAndroid Build Coastguard Worker sleep 0.2 657*053f45beSAndroid Build Coastguard Worker 658*053f45beSAndroid Build Coastguard Worker ipsecid="proto esp src $srcip dst $dstip spi 0x07" 659*053f45beSAndroid Build Coastguard Worker ip x s add $ipsecid \ 660*053f45beSAndroid Build Coastguard Worker mode transport reqid 0x07 replay-window 32 \ 661*053f45beSAndroid Build Coastguard Worker $algo sel src $srcip/24 dst $dstip/24 662*053f45beSAndroid Build Coastguard Worker check_err $? 663*053f45beSAndroid Build Coastguard Worker 664*053f45beSAndroid Build Coastguard Worker lines=`ip x s list | grep $srcip | grep $dstip | wc -l` 665*053f45beSAndroid Build Coastguard Worker test $lines -eq 2 666*053f45beSAndroid Build Coastguard Worker check_err $? 667*053f45beSAndroid Build Coastguard Worker 668*053f45beSAndroid Build Coastguard Worker ip x s count | grep -q "SAD count 1" 669*053f45beSAndroid Build Coastguard Worker check_err $? 670*053f45beSAndroid Build Coastguard Worker 671*053f45beSAndroid Build Coastguard Worker lines=`ip x s get $ipsecid | grep $srcip | grep $dstip | wc -l` 672*053f45beSAndroid Build Coastguard Worker test $lines -eq 2 673*053f45beSAndroid Build Coastguard Worker check_err $? 674*053f45beSAndroid Build Coastguard Worker 675*053f45beSAndroid Build Coastguard Worker ip x s delete $ipsecid 676*053f45beSAndroid Build Coastguard Worker check_err $? 677*053f45beSAndroid Build Coastguard Worker 678*053f45beSAndroid Build Coastguard Worker lines=`ip x s list | wc -l` 679*053f45beSAndroid Build Coastguard Worker test $lines -eq 0 680*053f45beSAndroid Build Coastguard Worker check_err $? 681*053f45beSAndroid Build Coastguard Worker 682*053f45beSAndroid Build Coastguard Worker ipsecsel="dir out src $srcip/24 dst $dstip/24" 683*053f45beSAndroid Build Coastguard Worker ip x p add $ipsecsel \ 684*053f45beSAndroid Build Coastguard Worker tmpl proto esp src $srcip dst $dstip \ 685*053f45beSAndroid Build Coastguard Worker spi 0x07 mode transport reqid 0x07 686*053f45beSAndroid Build Coastguard Worker check_err $? 687*053f45beSAndroid Build Coastguard Worker 688*053f45beSAndroid Build Coastguard Worker lines=`ip x p list | grep $srcip | grep $dstip | wc -l` 689*053f45beSAndroid Build Coastguard Worker test $lines -eq 2 690*053f45beSAndroid Build Coastguard Worker check_err $? 691*053f45beSAndroid Build Coastguard Worker 692*053f45beSAndroid Build Coastguard Worker ip x p count | grep -q "SPD IN 0 OUT 1 FWD 0" 693*053f45beSAndroid Build Coastguard Worker check_err $? 694*053f45beSAndroid Build Coastguard Worker 695*053f45beSAndroid Build Coastguard Worker lines=`ip x p get $ipsecsel | grep $srcip | grep $dstip | wc -l` 696*053f45beSAndroid Build Coastguard Worker test $lines -eq 2 697*053f45beSAndroid Build Coastguard Worker check_err $? 698*053f45beSAndroid Build Coastguard Worker 699*053f45beSAndroid Build Coastguard Worker ip x p delete $ipsecsel 700*053f45beSAndroid Build Coastguard Worker check_err $? 701*053f45beSAndroid Build Coastguard Worker 702*053f45beSAndroid Build Coastguard Worker lines=`ip x p list | wc -l` 703*053f45beSAndroid Build Coastguard Worker test $lines -eq 0 704*053f45beSAndroid Build Coastguard Worker check_err $? 705*053f45beSAndroid Build Coastguard Worker 706*053f45beSAndroid Build Coastguard Worker # check the monitor results 707*053f45beSAndroid Build Coastguard Worker kill $mpid 708*053f45beSAndroid Build Coastguard Worker lines=`wc -l $tmpfile | cut "-d " -f1` 709*053f45beSAndroid Build Coastguard Worker test $lines -eq 20 710*053f45beSAndroid Build Coastguard Worker check_err $? 711*053f45beSAndroid Build Coastguard Worker rm -rf $tmpfile 712*053f45beSAndroid Build Coastguard Worker 713*053f45beSAndroid Build Coastguard Worker # clean up any leftovers 714*053f45beSAndroid Build Coastguard Worker ip x s flush 715*053f45beSAndroid Build Coastguard Worker check_err $? 716*053f45beSAndroid Build Coastguard Worker ip x p flush 717*053f45beSAndroid Build Coastguard Worker check_err $? 718*053f45beSAndroid Build Coastguard Worker ip addr del $srcip/32 dev $devdummy 719*053f45beSAndroid Build Coastguard Worker 720*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ]; then 721*053f45beSAndroid Build Coastguard Worker echo "FAIL: ipsec" 722*053f45beSAndroid Build Coastguard Worker return 1 723*053f45beSAndroid Build Coastguard Worker fi 724*053f45beSAndroid Build Coastguard Worker echo "PASS: ipsec" 725*053f45beSAndroid Build Coastguard Worker} 726*053f45beSAndroid Build Coastguard Worker 727*053f45beSAndroid Build Coastguard Worker#------------------------------------------------------------------- 728*053f45beSAndroid Build Coastguard Worker# Example commands 729*053f45beSAndroid Build Coastguard Worker# ip x s add proto esp src 14.0.0.52 dst 14.0.0.70 \ 730*053f45beSAndroid Build Coastguard Worker# spi 0x07 mode transport reqid 0x07 replay-window 32 \ 731*053f45beSAndroid Build Coastguard Worker# aead 'rfc4106(gcm(aes))' 1234567890123456dcba 128 \ 732*053f45beSAndroid Build Coastguard Worker# sel src 14.0.0.52/24 dst 14.0.0.70/24 733*053f45beSAndroid Build Coastguard Worker# offload dev sim1 dir out 734*053f45beSAndroid Build Coastguard Worker# ip x p add dir out src 14.0.0.52/24 dst 14.0.0.70/24 \ 735*053f45beSAndroid Build Coastguard Worker# tmpl proto esp src 14.0.0.52 dst 14.0.0.70 \ 736*053f45beSAndroid Build Coastguard Worker# spi 0x07 mode transport reqid 0x07 737*053f45beSAndroid Build Coastguard Worker# 738*053f45beSAndroid Build Coastguard Worker#------------------------------------------------------------------- 739*053f45beSAndroid Build Coastguard Workerkci_test_ipsec_offload() 740*053f45beSAndroid Build Coastguard Worker{ 741*053f45beSAndroid Build Coastguard Worker local ret=0 742*053f45beSAndroid Build Coastguard Worker algo="aead rfc4106(gcm(aes)) 0x3132333435363738393031323334353664636261 128" 743*053f45beSAndroid Build Coastguard Worker srcip=192.168.123.3 744*053f45beSAndroid Build Coastguard Worker dstip=192.168.123.4 745*053f45beSAndroid Build Coastguard Worker sysfsd=/sys/kernel/debug/netdevsim/netdevsim0/ports/0/ 746*053f45beSAndroid Build Coastguard Worker sysfsf=$sysfsd/ipsec 747*053f45beSAndroid Build Coastguard Worker sysfsnet=/sys/bus/netdevsim/devices/netdevsim0/net/ 748*053f45beSAndroid Build Coastguard Worker probed=false 749*053f45beSAndroid Build Coastguard Worker 750*053f45beSAndroid Build Coastguard Worker # setup netdevsim since dummydev doesn't have offload support 751*053f45beSAndroid Build Coastguard Worker if [ ! -w /sys/bus/netdevsim/new_device ] ; then 752*053f45beSAndroid Build Coastguard Worker modprobe -q netdevsim 753*053f45beSAndroid Build Coastguard Worker check_err $? 754*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ]; then 755*053f45beSAndroid Build Coastguard Worker echo "SKIP: ipsec_offload can't load netdevsim" 756*053f45beSAndroid Build Coastguard Worker return $ksft_skip 757*053f45beSAndroid Build Coastguard Worker fi 758*053f45beSAndroid Build Coastguard Worker probed=true 759*053f45beSAndroid Build Coastguard Worker fi 760*053f45beSAndroid Build Coastguard Worker 761*053f45beSAndroid Build Coastguard Worker echo "0" > /sys/bus/netdevsim/new_device 762*053f45beSAndroid Build Coastguard Worker while [ ! -d $sysfsnet ] ; do :; done 763*053f45beSAndroid Build Coastguard Worker udevadm settle 764*053f45beSAndroid Build Coastguard Worker dev=`ls $sysfsnet` 765*053f45beSAndroid Build Coastguard Worker 766*053f45beSAndroid Build Coastguard Worker ip addr add $srcip dev $dev 767*053f45beSAndroid Build Coastguard Worker ip link set $dev up 768*053f45beSAndroid Build Coastguard Worker if [ ! -d $sysfsd ] ; then 769*053f45beSAndroid Build Coastguard Worker echo "FAIL: ipsec_offload can't create device $dev" 770*053f45beSAndroid Build Coastguard Worker return 1 771*053f45beSAndroid Build Coastguard Worker fi 772*053f45beSAndroid Build Coastguard Worker if [ ! -f $sysfsf ] ; then 773*053f45beSAndroid Build Coastguard Worker echo "FAIL: ipsec_offload netdevsim doesn't support IPsec offload" 774*053f45beSAndroid Build Coastguard Worker return 1 775*053f45beSAndroid Build Coastguard Worker fi 776*053f45beSAndroid Build Coastguard Worker 777*053f45beSAndroid Build Coastguard Worker # flush to be sure there's nothing configured 778*053f45beSAndroid Build Coastguard Worker ip x s flush ; ip x p flush 779*053f45beSAndroid Build Coastguard Worker 780*053f45beSAndroid Build Coastguard Worker # create offloaded SAs, both in and out 781*053f45beSAndroid Build Coastguard Worker ip x p add dir out src $srcip/24 dst $dstip/24 \ 782*053f45beSAndroid Build Coastguard Worker tmpl proto esp src $srcip dst $dstip spi 9 \ 783*053f45beSAndroid Build Coastguard Worker mode transport reqid 42 784*053f45beSAndroid Build Coastguard Worker check_err $? 785*053f45beSAndroid Build Coastguard Worker ip x p add dir in src $dstip/24 dst $srcip/24 \ 786*053f45beSAndroid Build Coastguard Worker tmpl proto esp src $dstip dst $srcip spi 9 \ 787*053f45beSAndroid Build Coastguard Worker mode transport reqid 42 788*053f45beSAndroid Build Coastguard Worker check_err $? 789*053f45beSAndroid Build Coastguard Worker 790*053f45beSAndroid Build Coastguard Worker ip x s add proto esp src $srcip dst $dstip spi 9 \ 791*053f45beSAndroid Build Coastguard Worker mode transport reqid 42 $algo sel src $srcip/24 dst $dstip/24 \ 792*053f45beSAndroid Build Coastguard Worker offload dev $dev dir out 793*053f45beSAndroid Build Coastguard Worker check_err $? 794*053f45beSAndroid Build Coastguard Worker ip x s add proto esp src $dstip dst $srcip spi 9 \ 795*053f45beSAndroid Build Coastguard Worker mode transport reqid 42 $algo sel src $dstip/24 dst $srcip/24 \ 796*053f45beSAndroid Build Coastguard Worker offload dev $dev dir in 797*053f45beSAndroid Build Coastguard Worker check_err $? 798*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ]; then 799*053f45beSAndroid Build Coastguard Worker echo "FAIL: ipsec_offload can't create SA" 800*053f45beSAndroid Build Coastguard Worker return 1 801*053f45beSAndroid Build Coastguard Worker fi 802*053f45beSAndroid Build Coastguard Worker 803*053f45beSAndroid Build Coastguard Worker # does offload show up in ip output 804*053f45beSAndroid Build Coastguard Worker lines=`ip x s list | grep -c "crypto offload parameters: dev $dev dir"` 805*053f45beSAndroid Build Coastguard Worker if [ $lines -ne 2 ] ; then 806*053f45beSAndroid Build Coastguard Worker echo "FAIL: ipsec_offload SA offload missing from list output" 807*053f45beSAndroid Build Coastguard Worker check_err 1 808*053f45beSAndroid Build Coastguard Worker fi 809*053f45beSAndroid Build Coastguard Worker 810*053f45beSAndroid Build Coastguard Worker # use ping to exercise the Tx path 811*053f45beSAndroid Build Coastguard Worker ping -I $dev -c 3 -W 1 -i 0 $dstip >/dev/null 812*053f45beSAndroid Build Coastguard Worker 813*053f45beSAndroid Build Coastguard Worker # does driver have correct offload info 814*053f45beSAndroid Build Coastguard Worker diff $sysfsf - << EOF 815*053f45beSAndroid Build Coastguard WorkerSA count=2 tx=3 816*053f45beSAndroid Build Coastguard Workersa[0] tx ipaddr=0x00000000 00000000 00000000 00000000 817*053f45beSAndroid Build Coastguard Workersa[0] spi=0x00000009 proto=0x32 salt=0x61626364 crypt=1 818*053f45beSAndroid Build Coastguard Workersa[0] key=0x34333231 38373635 32313039 36353433 819*053f45beSAndroid Build Coastguard Workersa[1] rx ipaddr=0x00000000 00000000 00000000 037ba8c0 820*053f45beSAndroid Build Coastguard Workersa[1] spi=0x00000009 proto=0x32 salt=0x61626364 crypt=1 821*053f45beSAndroid Build Coastguard Workersa[1] key=0x34333231 38373635 32313039 36353433 822*053f45beSAndroid Build Coastguard WorkerEOF 823*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ] ; then 824*053f45beSAndroid Build Coastguard Worker echo "FAIL: ipsec_offload incorrect driver data" 825*053f45beSAndroid Build Coastguard Worker check_err 1 826*053f45beSAndroid Build Coastguard Worker fi 827*053f45beSAndroid Build Coastguard Worker 828*053f45beSAndroid Build Coastguard Worker # does offload get removed from driver 829*053f45beSAndroid Build Coastguard Worker ip x s flush 830*053f45beSAndroid Build Coastguard Worker ip x p flush 831*053f45beSAndroid Build Coastguard Worker lines=`grep -c "SA count=0" $sysfsf` 832*053f45beSAndroid Build Coastguard Worker if [ $lines -ne 1 ] ; then 833*053f45beSAndroid Build Coastguard Worker echo "FAIL: ipsec_offload SA not removed from driver" 834*053f45beSAndroid Build Coastguard Worker check_err 1 835*053f45beSAndroid Build Coastguard Worker fi 836*053f45beSAndroid Build Coastguard Worker 837*053f45beSAndroid Build Coastguard Worker # clean up any leftovers 838*053f45beSAndroid Build Coastguard Worker $probed && rmmod netdevsim 839*053f45beSAndroid Build Coastguard Worker 840*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ]; then 841*053f45beSAndroid Build Coastguard Worker echo "FAIL: ipsec_offload" 842*053f45beSAndroid Build Coastguard Worker return 1 843*053f45beSAndroid Build Coastguard Worker fi 844*053f45beSAndroid Build Coastguard Worker echo "PASS: ipsec_offload" 845*053f45beSAndroid Build Coastguard Worker} 846*053f45beSAndroid Build Coastguard Worker 847*053f45beSAndroid Build Coastguard Workerkci_test_gretap() 848*053f45beSAndroid Build Coastguard Worker{ 849*053f45beSAndroid Build Coastguard Worker testns="testns" 850*053f45beSAndroid Build Coastguard Worker DEV_NS=gretap00 851*053f45beSAndroid Build Coastguard Worker local ret=0 852*053f45beSAndroid Build Coastguard Worker 853*053f45beSAndroid Build Coastguard Worker ip netns add "$testns" 854*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ]; then 855*053f45beSAndroid Build Coastguard Worker echo "SKIP gretap tests: cannot add net namespace $testns" 856*053f45beSAndroid Build Coastguard Worker return $ksft_skip 857*053f45beSAndroid Build Coastguard Worker fi 858*053f45beSAndroid Build Coastguard Worker 859*053f45beSAndroid Build Coastguard Worker ip link help gretap 2>&1 | grep -q "^Usage:" 860*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ];then 861*053f45beSAndroid Build Coastguard Worker echo "SKIP: gretap: iproute2 too old" 862*053f45beSAndroid Build Coastguard Worker ip netns del "$testns" 863*053f45beSAndroid Build Coastguard Worker return $ksft_skip 864*053f45beSAndroid Build Coastguard Worker fi 865*053f45beSAndroid Build Coastguard Worker 866*053f45beSAndroid Build Coastguard Worker # test native tunnel 867*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link add dev "$DEV_NS" type gretap seq \ 868*053f45beSAndroid Build Coastguard Worker key 102 local 172.16.1.100 remote 172.16.1.200 869*053f45beSAndroid Build Coastguard Worker check_err $? 870*053f45beSAndroid Build Coastguard Worker 871*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" addr add dev "$DEV_NS" 10.1.1.100/24 872*053f45beSAndroid Build Coastguard Worker check_err $? 873*053f45beSAndroid Build Coastguard Worker 874*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev $DEV_NS up 875*053f45beSAndroid Build Coastguard Worker check_err $? 876*053f45beSAndroid Build Coastguard Worker 877*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link del "$DEV_NS" 878*053f45beSAndroid Build Coastguard Worker check_err $? 879*053f45beSAndroid Build Coastguard Worker 880*053f45beSAndroid Build Coastguard Worker # test external mode 881*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link add dev "$DEV_NS" type gretap external 882*053f45beSAndroid Build Coastguard Worker check_err $? 883*053f45beSAndroid Build Coastguard Worker 884*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link del "$DEV_NS" 885*053f45beSAndroid Build Coastguard Worker check_err $? 886*053f45beSAndroid Build Coastguard Worker 887*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ]; then 888*053f45beSAndroid Build Coastguard Worker echo "FAIL: gretap" 889*053f45beSAndroid Build Coastguard Worker ip netns del "$testns" 890*053f45beSAndroid Build Coastguard Worker return 1 891*053f45beSAndroid Build Coastguard Worker fi 892*053f45beSAndroid Build Coastguard Worker echo "PASS: gretap" 893*053f45beSAndroid Build Coastguard Worker 894*053f45beSAndroid Build Coastguard Worker ip netns del "$testns" 895*053f45beSAndroid Build Coastguard Worker} 896*053f45beSAndroid Build Coastguard Worker 897*053f45beSAndroid Build Coastguard Workerkci_test_ip6gretap() 898*053f45beSAndroid Build Coastguard Worker{ 899*053f45beSAndroid Build Coastguard Worker testns="testns" 900*053f45beSAndroid Build Coastguard Worker DEV_NS=ip6gretap00 901*053f45beSAndroid Build Coastguard Worker local ret=0 902*053f45beSAndroid Build Coastguard Worker 903*053f45beSAndroid Build Coastguard Worker ip netns add "$testns" 904*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ]; then 905*053f45beSAndroid Build Coastguard Worker echo "SKIP ip6gretap tests: cannot add net namespace $testns" 906*053f45beSAndroid Build Coastguard Worker return $ksft_skip 907*053f45beSAndroid Build Coastguard Worker fi 908*053f45beSAndroid Build Coastguard Worker 909*053f45beSAndroid Build Coastguard Worker ip link help ip6gretap 2>&1 | grep -q "^Usage:" 910*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ];then 911*053f45beSAndroid Build Coastguard Worker echo "SKIP: ip6gretap: iproute2 too old" 912*053f45beSAndroid Build Coastguard Worker ip netns del "$testns" 913*053f45beSAndroid Build Coastguard Worker return $ksft_skip 914*053f45beSAndroid Build Coastguard Worker fi 915*053f45beSAndroid Build Coastguard Worker 916*053f45beSAndroid Build Coastguard Worker # test native tunnel 917*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link add dev "$DEV_NS" type ip6gretap seq \ 918*053f45beSAndroid Build Coastguard Worker key 102 local fc00:100::1 remote fc00:100::2 919*053f45beSAndroid Build Coastguard Worker check_err $? 920*053f45beSAndroid Build Coastguard Worker 921*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" addr add dev "$DEV_NS" fc00:200::1/96 922*053f45beSAndroid Build Coastguard Worker check_err $? 923*053f45beSAndroid Build Coastguard Worker 924*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev $DEV_NS up 925*053f45beSAndroid Build Coastguard Worker check_err $? 926*053f45beSAndroid Build Coastguard Worker 927*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link del "$DEV_NS" 928*053f45beSAndroid Build Coastguard Worker check_err $? 929*053f45beSAndroid Build Coastguard Worker 930*053f45beSAndroid Build Coastguard Worker # test external mode 931*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link add dev "$DEV_NS" type ip6gretap external 932*053f45beSAndroid Build Coastguard Worker check_err $? 933*053f45beSAndroid Build Coastguard Worker 934*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link del "$DEV_NS" 935*053f45beSAndroid Build Coastguard Worker check_err $? 936*053f45beSAndroid Build Coastguard Worker 937*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ]; then 938*053f45beSAndroid Build Coastguard Worker echo "FAIL: ip6gretap" 939*053f45beSAndroid Build Coastguard Worker ip netns del "$testns" 940*053f45beSAndroid Build Coastguard Worker return 1 941*053f45beSAndroid Build Coastguard Worker fi 942*053f45beSAndroid Build Coastguard Worker echo "PASS: ip6gretap" 943*053f45beSAndroid Build Coastguard Worker 944*053f45beSAndroid Build Coastguard Worker ip netns del "$testns" 945*053f45beSAndroid Build Coastguard Worker} 946*053f45beSAndroid Build Coastguard Worker 947*053f45beSAndroid Build Coastguard Workerkci_test_erspan() 948*053f45beSAndroid Build Coastguard Worker{ 949*053f45beSAndroid Build Coastguard Worker testns="testns" 950*053f45beSAndroid Build Coastguard Worker DEV_NS=erspan00 951*053f45beSAndroid Build Coastguard Worker local ret=0 952*053f45beSAndroid Build Coastguard Worker 953*053f45beSAndroid Build Coastguard Worker ip link help erspan 2>&1 | grep -q "^Usage:" 954*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ];then 955*053f45beSAndroid Build Coastguard Worker echo "SKIP: erspan: iproute2 too old" 956*053f45beSAndroid Build Coastguard Worker return $ksft_skip 957*053f45beSAndroid Build Coastguard Worker fi 958*053f45beSAndroid Build Coastguard Worker 959*053f45beSAndroid Build Coastguard Worker ip netns add "$testns" 960*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ]; then 961*053f45beSAndroid Build Coastguard Worker echo "SKIP erspan tests: cannot add net namespace $testns" 962*053f45beSAndroid Build Coastguard Worker return $ksft_skip 963*053f45beSAndroid Build Coastguard Worker fi 964*053f45beSAndroid Build Coastguard Worker 965*053f45beSAndroid Build Coastguard Worker # test native tunnel erspan v1 966*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link add dev "$DEV_NS" type erspan seq \ 967*053f45beSAndroid Build Coastguard Worker key 102 local 172.16.1.100 remote 172.16.1.200 \ 968*053f45beSAndroid Build Coastguard Worker erspan_ver 1 erspan 488 969*053f45beSAndroid Build Coastguard Worker check_err $? 970*053f45beSAndroid Build Coastguard Worker 971*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" addr add dev "$DEV_NS" 10.1.1.100/24 972*053f45beSAndroid Build Coastguard Worker check_err $? 973*053f45beSAndroid Build Coastguard Worker 974*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev $DEV_NS up 975*053f45beSAndroid Build Coastguard Worker check_err $? 976*053f45beSAndroid Build Coastguard Worker 977*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link del "$DEV_NS" 978*053f45beSAndroid Build Coastguard Worker check_err $? 979*053f45beSAndroid Build Coastguard Worker 980*053f45beSAndroid Build Coastguard Worker # test native tunnel erspan v2 981*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link add dev "$DEV_NS" type erspan seq \ 982*053f45beSAndroid Build Coastguard Worker key 102 local 172.16.1.100 remote 172.16.1.200 \ 983*053f45beSAndroid Build Coastguard Worker erspan_ver 2 erspan_dir ingress erspan_hwid 7 984*053f45beSAndroid Build Coastguard Worker check_err $? 985*053f45beSAndroid Build Coastguard Worker 986*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" addr add dev "$DEV_NS" 10.1.1.100/24 987*053f45beSAndroid Build Coastguard Worker check_err $? 988*053f45beSAndroid Build Coastguard Worker 989*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev $DEV_NS up 990*053f45beSAndroid Build Coastguard Worker check_err $? 991*053f45beSAndroid Build Coastguard Worker 992*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link del "$DEV_NS" 993*053f45beSAndroid Build Coastguard Worker check_err $? 994*053f45beSAndroid Build Coastguard Worker 995*053f45beSAndroid Build Coastguard Worker # test external mode 996*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link add dev "$DEV_NS" type erspan external 997*053f45beSAndroid Build Coastguard Worker check_err $? 998*053f45beSAndroid Build Coastguard Worker 999*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link del "$DEV_NS" 1000*053f45beSAndroid Build Coastguard Worker check_err $? 1001*053f45beSAndroid Build Coastguard Worker 1002*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ]; then 1003*053f45beSAndroid Build Coastguard Worker echo "FAIL: erspan" 1004*053f45beSAndroid Build Coastguard Worker ip netns del "$testns" 1005*053f45beSAndroid Build Coastguard Worker return 1 1006*053f45beSAndroid Build Coastguard Worker fi 1007*053f45beSAndroid Build Coastguard Worker echo "PASS: erspan" 1008*053f45beSAndroid Build Coastguard Worker 1009*053f45beSAndroid Build Coastguard Worker ip netns del "$testns" 1010*053f45beSAndroid Build Coastguard Worker} 1011*053f45beSAndroid Build Coastguard Worker 1012*053f45beSAndroid Build Coastguard Workerkci_test_ip6erspan() 1013*053f45beSAndroid Build Coastguard Worker{ 1014*053f45beSAndroid Build Coastguard Worker testns="testns" 1015*053f45beSAndroid Build Coastguard Worker DEV_NS=ip6erspan00 1016*053f45beSAndroid Build Coastguard Worker local ret=0 1017*053f45beSAndroid Build Coastguard Worker 1018*053f45beSAndroid Build Coastguard Worker ip link help ip6erspan 2>&1 | grep -q "^Usage:" 1019*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ];then 1020*053f45beSAndroid Build Coastguard Worker echo "SKIP: ip6erspan: iproute2 too old" 1021*053f45beSAndroid Build Coastguard Worker return $ksft_skip 1022*053f45beSAndroid Build Coastguard Worker fi 1023*053f45beSAndroid Build Coastguard Worker 1024*053f45beSAndroid Build Coastguard Worker ip netns add "$testns" 1025*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ]; then 1026*053f45beSAndroid Build Coastguard Worker echo "SKIP ip6erspan tests: cannot add net namespace $testns" 1027*053f45beSAndroid Build Coastguard Worker return $ksft_skip 1028*053f45beSAndroid Build Coastguard Worker fi 1029*053f45beSAndroid Build Coastguard Worker 1030*053f45beSAndroid Build Coastguard Worker # test native tunnel ip6erspan v1 1031*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link add dev "$DEV_NS" type ip6erspan seq \ 1032*053f45beSAndroid Build Coastguard Worker key 102 local fc00:100::1 remote fc00:100::2 \ 1033*053f45beSAndroid Build Coastguard Worker erspan_ver 1 erspan 488 1034*053f45beSAndroid Build Coastguard Worker check_err $? 1035*053f45beSAndroid Build Coastguard Worker 1036*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" addr add dev "$DEV_NS" 10.1.1.100/24 1037*053f45beSAndroid Build Coastguard Worker check_err $? 1038*053f45beSAndroid Build Coastguard Worker 1039*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev $DEV_NS up 1040*053f45beSAndroid Build Coastguard Worker check_err $? 1041*053f45beSAndroid Build Coastguard Worker 1042*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link del "$DEV_NS" 1043*053f45beSAndroid Build Coastguard Worker check_err $? 1044*053f45beSAndroid Build Coastguard Worker 1045*053f45beSAndroid Build Coastguard Worker # test native tunnel ip6erspan v2 1046*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link add dev "$DEV_NS" type ip6erspan seq \ 1047*053f45beSAndroid Build Coastguard Worker key 102 local fc00:100::1 remote fc00:100::2 \ 1048*053f45beSAndroid Build Coastguard Worker erspan_ver 2 erspan_dir ingress erspan_hwid 7 1049*053f45beSAndroid Build Coastguard Worker check_err $? 1050*053f45beSAndroid Build Coastguard Worker 1051*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" addr add dev "$DEV_NS" 10.1.1.100/24 1052*053f45beSAndroid Build Coastguard Worker check_err $? 1053*053f45beSAndroid Build Coastguard Worker 1054*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link set dev $DEV_NS up 1055*053f45beSAndroid Build Coastguard Worker check_err $? 1056*053f45beSAndroid Build Coastguard Worker 1057*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link del "$DEV_NS" 1058*053f45beSAndroid Build Coastguard Worker check_err $? 1059*053f45beSAndroid Build Coastguard Worker 1060*053f45beSAndroid Build Coastguard Worker # test external mode 1061*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link add dev "$DEV_NS" \ 1062*053f45beSAndroid Build Coastguard Worker type ip6erspan external 1063*053f45beSAndroid Build Coastguard Worker check_err $? 1064*053f45beSAndroid Build Coastguard Worker 1065*053f45beSAndroid Build Coastguard Worker ip -netns "$testns" link del "$DEV_NS" 1066*053f45beSAndroid Build Coastguard Worker check_err $? 1067*053f45beSAndroid Build Coastguard Worker 1068*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ]; then 1069*053f45beSAndroid Build Coastguard Worker echo "FAIL: ip6erspan" 1070*053f45beSAndroid Build Coastguard Worker ip netns del "$testns" 1071*053f45beSAndroid Build Coastguard Worker return 1 1072*053f45beSAndroid Build Coastguard Worker fi 1073*053f45beSAndroid Build Coastguard Worker echo "PASS: ip6erspan" 1074*053f45beSAndroid Build Coastguard Worker 1075*053f45beSAndroid Build Coastguard Worker ip netns del "$testns" 1076*053f45beSAndroid Build Coastguard Worker} 1077*053f45beSAndroid Build Coastguard Worker 1078*053f45beSAndroid Build Coastguard Workerkci_test_fdb_get() 1079*053f45beSAndroid Build Coastguard Worker{ 1080*053f45beSAndroid Build Coastguard Worker IP="ip -netns testns" 1081*053f45beSAndroid Build Coastguard Worker BRIDGE="bridge -netns testns" 1082*053f45beSAndroid Build Coastguard Worker brdev="test-br0" 1083*053f45beSAndroid Build Coastguard Worker vxlandev="vxlan10" 1084*053f45beSAndroid Build Coastguard Worker test_mac=de:ad:be:ef:13:37 1085*053f45beSAndroid Build Coastguard Worker localip="10.0.2.2" 1086*053f45beSAndroid Build Coastguard Worker dstip="10.0.2.3" 1087*053f45beSAndroid Build Coastguard Worker local ret=0 1088*053f45beSAndroid Build Coastguard Worker 1089*053f45beSAndroid Build Coastguard Worker bridge fdb help 2>&1 |grep -q 'bridge fdb get' 1090*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ];then 1091*053f45beSAndroid Build Coastguard Worker echo "SKIP: fdb get tests: iproute2 too old" 1092*053f45beSAndroid Build Coastguard Worker return $ksft_skip 1093*053f45beSAndroid Build Coastguard Worker fi 1094*053f45beSAndroid Build Coastguard Worker 1095*053f45beSAndroid Build Coastguard Worker ip netns add testns 1096*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ]; then 1097*053f45beSAndroid Build Coastguard Worker echo "SKIP fdb get tests: cannot add net namespace $testns" 1098*053f45beSAndroid Build Coastguard Worker return $ksft_skip 1099*053f45beSAndroid Build Coastguard Worker fi 1100*053f45beSAndroid Build Coastguard Worker 1101*053f45beSAndroid Build Coastguard Worker $IP link add "$vxlandev" type vxlan id 10 local $localip \ 1102*053f45beSAndroid Build Coastguard Worker dstport 4789 2>/dev/null 1103*053f45beSAndroid Build Coastguard Worker check_err $? 1104*053f45beSAndroid Build Coastguard Worker $IP link add name "$brdev" type bridge &>/dev/null 1105*053f45beSAndroid Build Coastguard Worker check_err $? 1106*053f45beSAndroid Build Coastguard Worker $IP link set dev "$vxlandev" master "$brdev" &>/dev/null 1107*053f45beSAndroid Build Coastguard Worker check_err $? 1108*053f45beSAndroid Build Coastguard Worker $BRIDGE fdb add $test_mac dev "$vxlandev" master &>/dev/null 1109*053f45beSAndroid Build Coastguard Worker check_err $? 1110*053f45beSAndroid Build Coastguard Worker $BRIDGE fdb add $test_mac dev "$vxlandev" dst $dstip self &>/dev/null 1111*053f45beSAndroid Build Coastguard Worker check_err $? 1112*053f45beSAndroid Build Coastguard Worker 1113*053f45beSAndroid Build Coastguard Worker $BRIDGE fdb get $test_mac brport "$vxlandev" 2>/dev/null | grep -q "dev $vxlandev master $brdev" 1114*053f45beSAndroid Build Coastguard Worker check_err $? 1115*053f45beSAndroid Build Coastguard Worker $BRIDGE fdb get $test_mac br "$brdev" 2>/dev/null | grep -q "dev $vxlandev master $brdev" 1116*053f45beSAndroid Build Coastguard Worker check_err $? 1117*053f45beSAndroid Build Coastguard Worker $BRIDGE fdb get $test_mac dev "$vxlandev" self 2>/dev/null | grep -q "dev $vxlandev dst $dstip" 1118*053f45beSAndroid Build Coastguard Worker check_err $? 1119*053f45beSAndroid Build Coastguard Worker 1120*053f45beSAndroid Build Coastguard Worker ip netns del testns &>/dev/null 1121*053f45beSAndroid Build Coastguard Worker 1122*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ]; then 1123*053f45beSAndroid Build Coastguard Worker echo "FAIL: bridge fdb get" 1124*053f45beSAndroid Build Coastguard Worker return 1 1125*053f45beSAndroid Build Coastguard Worker fi 1126*053f45beSAndroid Build Coastguard Worker 1127*053f45beSAndroid Build Coastguard Worker echo "PASS: bridge fdb get" 1128*053f45beSAndroid Build Coastguard Worker} 1129*053f45beSAndroid Build Coastguard Worker 1130*053f45beSAndroid Build Coastguard Workerkci_test_neigh_get() 1131*053f45beSAndroid Build Coastguard Worker{ 1132*053f45beSAndroid Build Coastguard Worker dstmac=de:ad:be:ef:13:37 1133*053f45beSAndroid Build Coastguard Worker dstip=10.0.2.4 1134*053f45beSAndroid Build Coastguard Worker dstip6=dead::2 1135*053f45beSAndroid Build Coastguard Worker local ret=0 1136*053f45beSAndroid Build Coastguard Worker 1137*053f45beSAndroid Build Coastguard Worker ip neigh help 2>&1 |grep -q 'ip neigh get' 1138*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ];then 1139*053f45beSAndroid Build Coastguard Worker echo "SKIP: fdb get tests: iproute2 too old" 1140*053f45beSAndroid Build Coastguard Worker return $ksft_skip 1141*053f45beSAndroid Build Coastguard Worker fi 1142*053f45beSAndroid Build Coastguard Worker 1143*053f45beSAndroid Build Coastguard Worker # ipv4 1144*053f45beSAndroid Build Coastguard Worker ip neigh add $dstip lladdr $dstmac dev "$devdummy" > /dev/null 1145*053f45beSAndroid Build Coastguard Worker check_err $? 1146*053f45beSAndroid Build Coastguard Worker ip neigh get $dstip dev "$devdummy" 2> /dev/null | grep -q "$dstmac" 1147*053f45beSAndroid Build Coastguard Worker check_err $? 1148*053f45beSAndroid Build Coastguard Worker ip neigh del $dstip lladdr $dstmac dev "$devdummy" > /dev/null 1149*053f45beSAndroid Build Coastguard Worker check_err $? 1150*053f45beSAndroid Build Coastguard Worker 1151*053f45beSAndroid Build Coastguard Worker # ipv4 proxy 1152*053f45beSAndroid Build Coastguard Worker ip neigh add proxy $dstip dev "$devdummy" > /dev/null 1153*053f45beSAndroid Build Coastguard Worker check_err $? 1154*053f45beSAndroid Build Coastguard Worker ip neigh get proxy $dstip dev "$devdummy" 2>/dev/null | grep -q "$dstip" 1155*053f45beSAndroid Build Coastguard Worker check_err $? 1156*053f45beSAndroid Build Coastguard Worker ip neigh del proxy $dstip dev "$devdummy" > /dev/null 1157*053f45beSAndroid Build Coastguard Worker check_err $? 1158*053f45beSAndroid Build Coastguard Worker 1159*053f45beSAndroid Build Coastguard Worker # ipv6 1160*053f45beSAndroid Build Coastguard Worker ip neigh add $dstip6 lladdr $dstmac dev "$devdummy" > /dev/null 1161*053f45beSAndroid Build Coastguard Worker check_err $? 1162*053f45beSAndroid Build Coastguard Worker ip neigh get $dstip6 dev "$devdummy" 2> /dev/null | grep -q "$dstmac" 1163*053f45beSAndroid Build Coastguard Worker check_err $? 1164*053f45beSAndroid Build Coastguard Worker ip neigh del $dstip6 lladdr $dstmac dev "$devdummy" > /dev/null 1165*053f45beSAndroid Build Coastguard Worker check_err $? 1166*053f45beSAndroid Build Coastguard Worker 1167*053f45beSAndroid Build Coastguard Worker # ipv6 proxy 1168*053f45beSAndroid Build Coastguard Worker ip neigh add proxy $dstip6 dev "$devdummy" > /dev/null 1169*053f45beSAndroid Build Coastguard Worker check_err $? 1170*053f45beSAndroid Build Coastguard Worker ip neigh get proxy $dstip6 dev "$devdummy" 2>/dev/null | grep -q "$dstip6" 1171*053f45beSAndroid Build Coastguard Worker check_err $? 1172*053f45beSAndroid Build Coastguard Worker ip neigh del proxy $dstip6 dev "$devdummy" > /dev/null 1173*053f45beSAndroid Build Coastguard Worker check_err $? 1174*053f45beSAndroid Build Coastguard Worker 1175*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ];then 1176*053f45beSAndroid Build Coastguard Worker echo "FAIL: neigh get" 1177*053f45beSAndroid Build Coastguard Worker return 1 1178*053f45beSAndroid Build Coastguard Worker fi 1179*053f45beSAndroid Build Coastguard Worker 1180*053f45beSAndroid Build Coastguard Worker echo "PASS: neigh get" 1181*053f45beSAndroid Build Coastguard Worker} 1182*053f45beSAndroid Build Coastguard Worker 1183*053f45beSAndroid Build Coastguard Workerkci_test_bridge_parent_id() 1184*053f45beSAndroid Build Coastguard Worker{ 1185*053f45beSAndroid Build Coastguard Worker local ret=0 1186*053f45beSAndroid Build Coastguard Worker sysfsnet=/sys/bus/netdevsim/devices/netdevsim 1187*053f45beSAndroid Build Coastguard Worker probed=false 1188*053f45beSAndroid Build Coastguard Worker 1189*053f45beSAndroid Build Coastguard Worker if [ ! -w /sys/bus/netdevsim/new_device ] ; then 1190*053f45beSAndroid Build Coastguard Worker modprobe -q netdevsim 1191*053f45beSAndroid Build Coastguard Worker check_err $? 1192*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ]; then 1193*053f45beSAndroid Build Coastguard Worker echo "SKIP: bridge_parent_id can't load netdevsim" 1194*053f45beSAndroid Build Coastguard Worker return $ksft_skip 1195*053f45beSAndroid Build Coastguard Worker fi 1196*053f45beSAndroid Build Coastguard Worker probed=true 1197*053f45beSAndroid Build Coastguard Worker fi 1198*053f45beSAndroid Build Coastguard Worker 1199*053f45beSAndroid Build Coastguard Worker echo "10 1" > /sys/bus/netdevsim/new_device 1200*053f45beSAndroid Build Coastguard Worker while [ ! -d ${sysfsnet}10 ] ; do :; done 1201*053f45beSAndroid Build Coastguard Worker echo "20 1" > /sys/bus/netdevsim/new_device 1202*053f45beSAndroid Build Coastguard Worker while [ ! -d ${sysfsnet}20 ] ; do :; done 1203*053f45beSAndroid Build Coastguard Worker udevadm settle 1204*053f45beSAndroid Build Coastguard Worker dev10=`ls ${sysfsnet}10/net/` 1205*053f45beSAndroid Build Coastguard Worker dev20=`ls ${sysfsnet}20/net/` 1206*053f45beSAndroid Build Coastguard Worker 1207*053f45beSAndroid Build Coastguard Worker ip link add name test-bond0 type bond mode 802.3ad 1208*053f45beSAndroid Build Coastguard Worker ip link set dev $dev10 master test-bond0 1209*053f45beSAndroid Build Coastguard Worker ip link set dev $dev20 master test-bond0 1210*053f45beSAndroid Build Coastguard Worker ip link add name test-br0 type bridge 1211*053f45beSAndroid Build Coastguard Worker ip link set dev test-bond0 master test-br0 1212*053f45beSAndroid Build Coastguard Worker check_err $? 1213*053f45beSAndroid Build Coastguard Worker 1214*053f45beSAndroid Build Coastguard Worker # clean up any leftovers 1215*053f45beSAndroid Build Coastguard Worker ip link del dev test-br0 1216*053f45beSAndroid Build Coastguard Worker ip link del dev test-bond0 1217*053f45beSAndroid Build Coastguard Worker echo 20 > /sys/bus/netdevsim/del_device 1218*053f45beSAndroid Build Coastguard Worker echo 10 > /sys/bus/netdevsim/del_device 1219*053f45beSAndroid Build Coastguard Worker $probed && rmmod netdevsim 1220*053f45beSAndroid Build Coastguard Worker 1221*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ]; then 1222*053f45beSAndroid Build Coastguard Worker echo "FAIL: bridge_parent_id" 1223*053f45beSAndroid Build Coastguard Worker return 1 1224*053f45beSAndroid Build Coastguard Worker fi 1225*053f45beSAndroid Build Coastguard Worker echo "PASS: bridge_parent_id" 1226*053f45beSAndroid Build Coastguard Worker} 1227*053f45beSAndroid Build Coastguard Worker 1228*053f45beSAndroid Build Coastguard Workerkci_test_rtnl() 1229*053f45beSAndroid Build Coastguard Worker{ 1230*053f45beSAndroid Build Coastguard Worker local ret=0 1231*053f45beSAndroid Build Coastguard Worker kci_add_dummy 1232*053f45beSAndroid Build Coastguard Worker if [ $ret -ne 0 ];then 1233*053f45beSAndroid Build Coastguard Worker echo "FAIL: cannot add dummy interface" 1234*053f45beSAndroid Build Coastguard Worker return 1 1235*053f45beSAndroid Build Coastguard Worker fi 1236*053f45beSAndroid Build Coastguard Worker 1237*053f45beSAndroid Build Coastguard Worker kci_test_polrouting 1238*053f45beSAndroid Build Coastguard Worker check_err $? 1239*053f45beSAndroid Build Coastguard Worker kci_test_route_get 1240*053f45beSAndroid Build Coastguard Worker check_err $? 1241*053f45beSAndroid Build Coastguard Worker kci_test_addrlft 1242*053f45beSAndroid Build Coastguard Worker check_err $? 1243*053f45beSAndroid Build Coastguard Worker kci_test_promote_secondaries 1244*053f45beSAndroid Build Coastguard Worker check_err $? 1245*053f45beSAndroid Build Coastguard Worker kci_test_tc 1246*053f45beSAndroid Build Coastguard Worker check_err $? 1247*053f45beSAndroid Build Coastguard Worker kci_test_gre 1248*053f45beSAndroid Build Coastguard Worker check_err $? 1249*053f45beSAndroid Build Coastguard Worker kci_test_gretap 1250*053f45beSAndroid Build Coastguard Worker check_err $? 1251*053f45beSAndroid Build Coastguard Worker kci_test_ip6gretap 1252*053f45beSAndroid Build Coastguard Worker check_err $? 1253*053f45beSAndroid Build Coastguard Worker kci_test_erspan 1254*053f45beSAndroid Build Coastguard Worker check_err $? 1255*053f45beSAndroid Build Coastguard Worker kci_test_ip6erspan 1256*053f45beSAndroid Build Coastguard Worker check_err $? 1257*053f45beSAndroid Build Coastguard Worker kci_test_bridge 1258*053f45beSAndroid Build Coastguard Worker check_err $? 1259*053f45beSAndroid Build Coastguard Worker kci_test_addrlabel 1260*053f45beSAndroid Build Coastguard Worker check_err $? 1261*053f45beSAndroid Build Coastguard Worker kci_test_ifalias 1262*053f45beSAndroid Build Coastguard Worker check_err $? 1263*053f45beSAndroid Build Coastguard Worker kci_test_vrf 1264*053f45beSAndroid Build Coastguard Worker check_err $? 1265*053f45beSAndroid Build Coastguard Worker kci_test_encap 1266*053f45beSAndroid Build Coastguard Worker check_err $? 1267*053f45beSAndroid Build Coastguard Worker kci_test_macsec 1268*053f45beSAndroid Build Coastguard Worker check_err $? 1269*053f45beSAndroid Build Coastguard Worker kci_test_ipsec 1270*053f45beSAndroid Build Coastguard Worker check_err $? 1271*053f45beSAndroid Build Coastguard Worker kci_test_ipsec_offload 1272*053f45beSAndroid Build Coastguard Worker check_err $? 1273*053f45beSAndroid Build Coastguard Worker kci_test_fdb_get 1274*053f45beSAndroid Build Coastguard Worker check_err $? 1275*053f45beSAndroid Build Coastguard Worker kci_test_neigh_get 1276*053f45beSAndroid Build Coastguard Worker check_err $? 1277*053f45beSAndroid Build Coastguard Worker kci_test_bridge_parent_id 1278*053f45beSAndroid Build Coastguard Worker check_err $? 1279*053f45beSAndroid Build Coastguard Worker 1280*053f45beSAndroid Build Coastguard Worker kci_del_dummy 1281*053f45beSAndroid Build Coastguard Worker return $ret 1282*053f45beSAndroid Build Coastguard Worker} 1283*053f45beSAndroid Build Coastguard Worker 1284*053f45beSAndroid Build Coastguard Worker#check for needed privileges 1285*053f45beSAndroid Build Coastguard Workerif [ "$(id -u)" -ne 0 ];then 1286*053f45beSAndroid Build Coastguard Worker echo "SKIP: Need root privileges" 1287*053f45beSAndroid Build Coastguard Worker exit $ksft_skip 1288*053f45beSAndroid Build Coastguard Workerfi 1289*053f45beSAndroid Build Coastguard Worker 1290*053f45beSAndroid Build Coastguard Workerfor x in ip tc;do 1291*053f45beSAndroid Build Coastguard Worker $x -Version 2>/dev/null >/dev/null 1292*053f45beSAndroid Build Coastguard Worker if [ $? -ne 0 ];then 1293*053f45beSAndroid Build Coastguard Worker echo "SKIP: Could not run test without the $x tool" 1294*053f45beSAndroid Build Coastguard Worker exit $ksft_skip 1295*053f45beSAndroid Build Coastguard Worker fi 1296*053f45beSAndroid Build Coastguard Workerdone 1297*053f45beSAndroid Build Coastguard Worker 1298*053f45beSAndroid Build Coastguard Workerkci_test_rtnl 1299*053f45beSAndroid Build Coastguard Worker 1300*053f45beSAndroid Build Coastguard Workerexit $? 1301