#!/bin/bash## This test is for checking rtnetlink callpaths, and get as much coverage as possible.## set -e ALL_TESTS=" kci_test_polrouting kci_test_route_get kci_test_addrlft kci_test_addrlft_route_cleanup kci_test_promote_secondaries kci_test_tc kci_test_gre kci_test_gretap kci_test_ip6gretap kci_test_erspan kci_test_ip6erspan kci_test_bridge kci_test_addrlabel kci_test_ifalias kci_test_vrf kci_test_encap kci_test_macsec kci_test_macsec_vlan kci_test_team_bridge_macvlan kci_test_bridge_promisc_netlink kci_test_bridge_promisc_sysfs kci_test_ipsec kci_test_ipsec_offload kci_test_fdb_get kci_test_fdb_del kci_test_neigh_get kci_test_neigh_update kci_test_bridge_parent_id kci_test_address_proto kci_test_enslave_bonding kci_test_mngtmpaddr kci_test_operstate" devdummy="test-dummy0"VERBOSE=0PAUSE=noPAUSE_ON_FAIL=no source lib.sh # set global exit status, but never reset nonzero one.check_err(){ if [ $ret -eq 0 ]; then ret=$1 fi [ -n "$2" ] && echo "$2"} # same but inverted -- used when command must fail for test to passcheck_fail(){ if [ $1 -eq 0 ]; then ret=1 fi} sysfs_write(){ local val="$1" local path="$2" echo "$val" > "$path"} run_cmd_common(){ local cmd="$*" local out if [ "$VERBOSE" = "1" ]; then echo "COMMAND: ${cmd}" fi out=$($cmd 2>&1) rc=$? if [ "$VERBOSE" = "1" -a -n "$out" ]; then echo " $out" fi return $rc} run_cmd() { run_cmd_common "$@" rc=$? check_err $rc return $rc}run_cmd_fail(){ run_cmd_common "$@" rc=$? check_fail $rc return $rc} run_cmd_grep_common(){ local find="$1"; shift local cmd="$*" local out if [ "$VERBOSE" = "1" ]; then echo "COMMAND: ${cmd} 2>&1 | grep -q '${find}'" fi out=$($cmd 2>&1 | grep -q "${find}" 2>&1) return $?} run_cmd_grep() { run_cmd_grep_common "$@" rc=$? check_err $rc return $rc} run_cmd_grep_fail(){ run_cmd_grep_common "$@" rc=$? check_fail $rc return $rc} end_test(){ echo "$*" [ "${VERBOSE}" = "1" ] && echo if [[ $ret -ne 0 ]] && [[ "${PAUSE_ON_FAIL}" = "yes" ]]; then echo "Hit enter to continue" read a fi; if [ "${PAUSE}" = "yes" ]; then echo "Hit enter to continue" read a fi } kci_add_dummy(){ run_cmd ip link add name "$devdummy" type dummy run_cmd ip link set "$devdummy" up} kci_del_dummy(){ run_cmd ip link del dev "$devdummy"} kci_test_netconf(){ dev="$1" r=$ret run_cmd ip netconf show dev "$dev" for f in 4 6; do run_cmd ip -$f netconf show dev "$dev" done if [ $ret -ne 0 ] ;then end_test "FAIL: ip netconf show $dev" test $r -eq 0 && ret=0 return 1 fi} # add a bridge with vlans on topkci_test_bridge(){ devbr="test-br0" vlandev="testbr-vlan1" local ret=0 run_cmd ip link add name "$devbr" type bridge run_cmd ip link set dev "$devdummy" master "$devbr" run_cmd ip link set "$devbr" up run_cmd ip link add link "$devbr" name "$vlandev" type vlan id 1 run_cmd ip addr add dev "$vlandev" 10.200.7.23/30 run_cmd ip -6 addr add dev "$vlandev" dead:42::1234/64 run_cmd ip -d link run_cmd ip r s t all for name in "$devbr" "$vlandev" "$devdummy" ; do kci_test_netconf "$name" done run_cmd ip -6 addr del dev "$vlandev" dead:42::1234/64 run_cmd ip link del dev "$vlandev" run_cmd ip link del dev "$devbr" if [ $ret -ne 0 ];then end_test "FAIL: bridge setup" return 1 fi end_test "PASS: bridge setup" } kci_test_gre(){ gredev=neta rem=10.42.42.1 loc=10.0.0.1 local ret=0 run_cmd ip tunnel add $gredev mode gre remote $rem local $loc ttl 1 run_cmd ip link set $gredev up run_cmd ip addr add 10.23.7.10 dev $gredev run_cmd ip route add 10.23.8.0/30 dev $gredev run_cmd ip addr add dev "$devdummy" 10.23.7.11/24 run_cmd ip link run_cmd ip addr kci_test_netconf "$gredev" run_cmd ip addr del dev "$devdummy" 10.23.7.11/24 run_cmd ip link del $gredev if [ $ret -ne 0 ];then end_test "FAIL: gre tunnel endpoint" return 1 fi end_test "PASS: gre tunnel endpoint"} # tc uses rtnetlink too, for full tc testing# please see tools/testing/selftests/tc-testing.kci_test_tc(){ dev=lo local ret=0 run_cmd tc qdisc add dev "$dev" root handle 1: htb run_cmd tc class add dev "$dev" parent 1: classid 1:10 htb rate 1mbit run_cmd tc filter add dev "$dev" parent 1:0 prio 5 handle ffe: protocol ip u32 divisor 256 run_cmd tc filter add dev "$dev" parent 1:0 prio 5 handle ffd: protocol ip u32 divisor 256 run_cmd tc filter add dev "$dev" parent 1:0 prio 5 handle ffc: protocol ip u32 divisor 256 run_cmd 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 run_cmd 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 run_cmd tc filter show dev "$dev" parent 1:0 run_cmd tc filter del dev "$dev" protocol ip parent 1: prio 5 handle ffe:2:3 u32 run_cmd tc filter show dev "$dev" parent 1:0 run_cmd tc qdisc del dev "$dev" root handle 1: htb if [ $ret -ne 0 ];then end_test "FAIL: tc htb hierarchy" return 1 fi end_test "PASS: tc htb hierarchy" } kci_test_polrouting(){ local ret=0 run_cmd ip rule add fwmark 1 lookup 100 run_cmd ip route add local 0.0.0.0/0 dev lo table 100 run_cmd ip r s t all run_cmd ip rule del fwmark 1 lookup 100 run_cmd ip route del local 0.0.0.0/0 dev lo table 100 if [ $ret -ne 0 ];then end_test "FAIL: policy route test" return 1 fi end_test "PASS: policy routing"} kci_test_route_get(){ local hash_policy=$(sysctl -n net.ipv4.fib_multipath_hash_policy) local ret=0 run_cmd ip route get 127.0.0.1 run_cmd ip route get 127.0.0.1 dev "$devdummy" run_cmd ip route get ::1 run_cmd ip route get fe80::1 dev "$devdummy" run_cmd ip route get 127.0.0.1 from 127.0.0.1 oif lo tos 0x10 mark 0x1 run_cmd ip route get ::1 from ::1 iif lo oif lo tos 0x10 mark 0x1 run_cmd ip addr add dev "$devdummy" 10.23.7.11/24 run_cmd ip route get 10.23.7.11 from 10.23.7.12 iif "$devdummy" run_cmd ip route add 10.23.8.0/24 \ nexthop via 10.23.7.13 dev "$devdummy" \ nexthop via 10.23.7.14 dev "$devdummy" sysctl -wq net.ipv4.fib_multipath_hash_policy=0 run_cmd ip route get 10.23.8.11 sysctl -wq net.ipv4.fib_multipath_hash_policy=1 run_cmd ip route get 10.23.8.11 sysctl -wq net.ipv4.fib_multipath_hash_policy="$hash_policy" run_cmd ip route del 10.23.8.0/24 run_cmd ip addr del dev "$devdummy" 10.23.7.11/24 if [ $ret -ne 0 ];then end_test "FAIL: route get" return 1 fi end_test "PASS: route get"} check_addr_not_exist(){ dev=$1 addr=$2 if ip addr show dev $dev | grep -q $addr; then return 1 else return 0 fi} kci_test_addrlft(){ for i in $(seq 10 100) ;do lft=$(((RANDOM%3) + 1)) run_cmd ip addr add 10.23.11.$i/32 dev "$devdummy" preferred_lft $lft valid_lft $((lft+1)) done slowwait 5 check_addr_not_exist "$devdummy" "10.23.11." if [ $? -eq 1 ]; then # troubleshoot the reason for our failure run_cmd ip addr show dev "$devdummy" check_err 1 end_test "FAIL: preferred_lft addresses remaining" return fi end_test "PASS: preferred_lft addresses have expired"} kci_test_addrlft_route_cleanup(){ local ret=0 local test_addr="2001:db8:99::1/64" local test_prefix="2001:db8:99::/64" run_cmd ip -6 addr add $test_addr dev "$devdummy" valid_lft 300 preferred_lft 300 run_cmd_grep "$test_prefix proto kernel" ip -6 route show dev "$devdummy" run_cmd ip -6 addr del $test_addr dev "$devdummy" run_cmd_grep_fail "$test_prefix" ip -6 route show dev "$devdummy" if [ $ret -ne 0 ]; then end_test "FAIL: route not cleaned up when address with valid_lft deleted" return 1 fi end_test "PASS: route cleaned up when address with valid_lft deleted"} kci_test_promote_secondaries(){ run_cmd ifconfig "$devdummy" if [ $ret -ne 0 ]; then end_test "SKIP: ifconfig not installed" return $ksft_skip fi promote=$(sysctl -n net.ipv4.conf.$devdummy.promote_secondaries) sysctl -q net.ipv4.conf.$devdummy.promote_secondaries=1 for i in $(seq 2 254);do IP="10.23.11.$i" ip -f inet addr add $IP/16 brd + dev "$devdummy" ifconfig "$devdummy" $IP netmask 255.255.0.0 done ip addr flush dev "$devdummy" [ $promote -eq 0 ] && sysctl -q net.ipv4.conf.$devdummy.promote_secondaries=0 end_test "PASS: promote_secondaries complete"} kci_test_addrlabel(){ local ret=0 run_cmd ip addrlabel add prefix dead::/64 dev lo label 1 run_cmd_grep "prefix dead::/64 dev lo label 1" ip addrlabel list run_cmd ip addrlabel del prefix dead::/64 dev lo label 1 run_cmd ip addrlabel add prefix dead::/64 label 1 run_cmd ip addrlabel del prefix dead::/64 label 1 # concurrent add/delete for i in $(seq 1 1000); do ip addrlabel add prefix 1c3::/64 label 12345 2>/dev/null done & for i in $(seq 1 1000); do ip addrlabel del prefix 1c3::/64 label 12345 2>/dev/null done wait ip addrlabel del prefix 1c3::/64 label 12345 2>/dev/null if [ $ret -ne 0 ];then end_test "FAIL: ipv6 addrlabel" return 1 fi end_test "PASS: ipv6 addrlabel"} kci_test_ifalias(){ local ret=0 namewant=$(uuidgen) syspathname="/sys/class/net/$devdummy/ifalias" run_cmd ip link set dev "$devdummy" alias "$namewant" if [ $ret -ne 0 ]; then end_test "FAIL: cannot set interface alias of $devdummy to $namewant" return 1 fi run_cmd_grep "alias $namewant" ip link show "$devdummy" if [ -r "$syspathname" ] ; then read namehave < "$syspathname" if [ "$namewant" != "$namehave" ]; then end_test "FAIL: did set ifalias $namewant but got $namehave" return 1 fi namewant=$(uuidgen) echo "$namewant" > "$syspathname" run_cmd_grep "alias $namewant" ip link show "$devdummy" # sysfs interface allows to delete alias again echo "" > "$syspathname" run_cmd_grep_fail "alias $namewant" ip link show "$devdummy" for i in $(seq 1 100); do uuidgen > "$syspathname" & done wait # re-add the alias -- kernel should free mem when dummy dev is removed run_cmd ip link set dev "$devdummy" alias "$namewant" fi if [ $ret -ne 0 ]; then end_test "FAIL: set interface alias $devdummy to $namewant" return 1 fi end_test "PASS: set ifalias $namewant for $devdummy"} kci_test_vrf(){ vrfname="test-vrf" local ret=0 run_cmd ip link show type vrf if [ $? -ne 0 ]; then end_test "SKIP: vrf: iproute2 too old" return $ksft_skip fi run_cmd ip link add "$vrfname" type vrf table 10 if [ $ret -ne 0 ];then end_test "FAIL: can't add vrf interface, skipping test" return 0 fi run_cmd_grep "$vrfname" ip -br link show type vrf if [ $ret -ne 0 ];then end_test "FAIL: created vrf device not found" return 1 fi run_cmd ip link set dev "$vrfname" up run_cmd ip link set dev "$devdummy" master "$vrfname" run_cmd ip link del dev "$vrfname" if [ $ret -ne 0 ];then end_test "FAIL: vrf" return 1 fi end_test "PASS: vrf"} kci_test_encap_vxlan(){ local ret=0 vxlan="test-vxlan0" vlan="test-vlan0" run_cmd ip -netns "$testns" link add "$vxlan" type vxlan id 42 group 239.1.1.1 \ dev "$devdummy" dstport 4789 if [ $? -ne 0 ]; then end_test "FAIL: can't add vxlan interface, skipping test" return 0Lines 1–500 of 1682. Load more
#!/bin/bash # # This test is for checking rtnetlink callpaths, and get as much coverage as possible. # # set -e ALL_TESTS=" kci_test_polrouting kci_test_route_get kci_test_addrlft kci_test_addrlft_route_cleanup kci_test_promote_secondaries kci_test_tc kci_test_gre kci_test_gretap kci_test_ip6gretap kci_test_erspan kci_test_ip6erspan kci_test_bridge kci_test_addrlabel kci_test_ifalias kci_test_vrf kci_test_encap kci_test_macsec kci_test_macsec_vlan kci_test_team_bridge_macvlan kci_test_bridge_promisc_netlink kci_test_bridge_promisc_sysfs kci_test_ipsec kci_test_ipsec_offload kci_test_fdb_get kci_test_fdb_del kci_test_neigh_get kci_test_neigh_update kci_test_bridge_parent_id kci_test_address_proto kci_test_enslave_bonding kci_test_mngtmpaddr kci_test_operstate " devdummy="test-dummy0" VERBOSE=0 PAUSE=no PAUSE_ON_FAIL=no source lib.sh # set global exit status, but never reset nonzero one. check_err() { if [ $ret -eq 0 ]; then ret=$1 fi [ -n "$2" ] && echo "$2" } # same but inverted -- used when command must fail for test to pass check_fail() { if [ $1 -eq 0 ]; then ret=1 fi } sysfs_write() { local val="$1" local path="$2" echo "$val" > "$path" } run_cmd_common() { local cmd="$*" local out if [ "$VERBOSE" = "1" ]; then echo "COMMAND: ${cmd}" fi out=$($cmd 2>&1) rc=$? if [ "$VERBOSE" = "1" -a -n "$out" ]; then echo " $out" fi return $rc } run_cmd() { run_cmd_common "$@" rc=$? check_err $rc return $rc } run_cmd_fail() { run_cmd_common "$@" rc=$? check_fail $rc return $rc } run_cmd_grep_common() { local find="$1"; shift local cmd="$*" local out if [ "$VERBOSE" = "1" ]; then echo "COMMAND: ${cmd} 2>&1 | grep -q '${find}'" fi out=$($cmd 2>&1 | grep -q "${find}" 2>&1) return $? } run_cmd_grep() { run_cmd_grep_common "$@" rc=$? check_err $rc return $rc } run_cmd_grep_fail() { run_cmd_grep_common "$@" rc=$? check_fail $rc return $rc } end_test() { echo "$*" [ "${VERBOSE}" = "1" ] && echo if [[ $ret -ne 0 ]] && [[ "${PAUSE_ON_FAIL}" = "yes" ]]; then echo "Hit enter to continue" read a fi; if [ "${PAUSE}" = "yes" ]; then echo "Hit enter to continue" read a fi } kci_add_dummy() { run_cmd ip link add name "$devdummy" type dummy run_cmd ip link set "$devdummy" up } kci_del_dummy() { run_cmd ip link del dev "$devdummy" } kci_test_netconf() { dev="$1" r=$ret run_cmd ip netconf show dev "$dev" for f in 4 6; do run_cmd ip -$f netconf show dev "$dev" done if [ $ret -ne 0 ] ;then end_test "FAIL: ip netconf show $dev" test $r -eq 0 && ret=0 return 1 fi } # add a bridge with vlans on top kci_test_bridge() { devbr="test-br0" vlandev="testbr-vlan1" local ret=0 run_cmd ip link add name "$devbr" type bridge run_cmd ip link set dev "$devdummy" master "$devbr" run_cmd ip link set "$devbr" up run_cmd ip link add link "$devbr" name "$vlandev" type vlan id 1 run_cmd ip addr add dev "$vlandev" 10.200.7.23/30 run_cmd ip -6 addr add dev "$vlandev" dead:42::1234/64 run_cmd ip -d link run_cmd ip r s t all for name in "$devbr" "$vlandev" "$devdummy" ; do kci_test_netconf "$name" done run_cmd ip -6 addr del dev "$vlandev" dead:42::1234/64 run_cmd ip link del dev "$vlandev" run_cmd ip link del dev "$devbr" if [ $ret -ne 0 ];then end_test "FAIL: bridge setup" return 1 fi end_test "PASS: bridge setup" } kci_test_gre() { gredev=neta rem=10.42.42.1 loc=10.0.0.1 local ret=0 run_cmd ip tunnel add $gredev mode gre remote $rem local $loc ttl 1 run_cmd ip link set $gredev up run_cmd ip addr add 10.23.7.10 dev $gredev run_cmd ip route add 10.23.8.0/30 dev $gredev run_cmd ip addr add dev "$devdummy" 10.23.7.11/24 run_cmd ip link run_cmd ip addr kci_test_netconf "$gredev" run_cmd ip addr del dev "$devdummy" 10.23.7.11/24 run_cmd ip link del $gredev if [ $ret -ne 0 ];then end_test "FAIL: gre tunnel endpoint" return 1 fi end_test "PASS: gre tunnel endpoint" } # tc uses rtnetlink too, for full tc testing # please see tools/testing/selftests/tc-testing. kci_test_tc() { dev=lo local ret=0 run_cmd tc qdisc add dev "$dev" root handle 1: htb run_cmd tc class add dev "$dev" parent 1: classid 1:10 htb rate 1mbit run_cmd tc filter add dev "$dev" parent 1:0 prio 5 handle ffe: protocol ip u32 divisor 256 run_cmd tc filter add dev "$dev" parent 1:0 prio 5 handle ffd: protocol ip u32 divisor 256 run_cmd tc filter add dev "$dev" parent 1:0 prio 5 handle ffc: protocol ip u32 divisor 256 run_cmd 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 run_cmd 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 run_cmd tc filter show dev "$dev" parent 1:0 run_cmd tc filter del dev "$dev" protocol ip parent 1: prio 5 handle ffe:2:3 u32 run_cmd tc filter show dev "$dev" parent 1:0 run_cmd tc qdisc del dev "$dev" root handle 1: htb if [ $ret -ne 0 ];then end_test "FAIL: tc htb hierarchy" return 1 fi end_test "PASS: tc htb hierarchy" } kci_test_polrouting() { local ret=0 run_cmd ip rule add fwmark 1 lookup 100 run_cmd ip route add local 0.0.0.0/0 dev lo table 100 run_cmd ip r s t all run_cmd ip rule del fwmark 1 lookup 100 run_cmd ip route del local 0.0.0.0/0 dev lo table 100 if [ $ret -ne 0 ];then end_test "FAIL: policy route test" return 1 fi end_test "PASS: policy routing" } kci_test_route_get() { local hash_policy=$(sysctl -n net.ipv4.fib_multipath_hash_policy) local ret=0 run_cmd ip route get 127.0.0.1 run_cmd ip route get 127.0.0.1 dev "$devdummy" run_cmd ip route get ::1 run_cmd ip route get fe80::1 dev "$devdummy" run_cmd ip route get 127.0.0.1 from 127.0.0.1 oif lo tos 0x10 mark 0x1 run_cmd ip route get ::1 from ::1 iif lo oif lo tos 0x10 mark 0x1 run_cmd ip addr add dev "$devdummy" 10.23.7.11/24 run_cmd ip route get 10.23.7.11 from 10.23.7.12 iif "$devdummy" run_cmd ip route add 10.23.8.0/24 \ nexthop via 10.23.7.13 dev "$devdummy" \ nexthop via 10.23.7.14 dev "$devdummy" sysctl -wq net.ipv4.fib_multipath_hash_policy=0 run_cmd ip route get 10.23.8.11 sysctl -wq net.ipv4.fib_multipath_hash_policy=1 run_cmd ip route get 10.23.8.11 sysctl -wq net.ipv4.fib_multipath_hash_policy="$hash_policy" run_cmd ip route del 10.23.8.0/24 run_cmd ip addr del dev "$devdummy" 10.23.7.11/24 if [ $ret -ne 0 ];then end_test "FAIL: route get" return 1 fi end_test "PASS: route get" } check_addr_not_exist() { dev=$1 addr=$2 if ip addr show dev $dev | grep -q $addr; then return 1 else return 0 fi } kci_test_addrlft() { for i in $(seq 10 100) ;do lft=$(((RANDOM%3) + 1)) run_cmd ip addr add 10.23.11.$i/32 dev "$devdummy" preferred_lft $lft valid_lft $((lft+1)) done slowwait 5 check_addr_not_exist "$devdummy" "10.23.11." if [ $? -eq 1 ]; then # troubleshoot the reason for our failure run_cmd ip addr show dev "$devdummy" check_err 1 end_test "FAIL: preferred_lft addresses remaining" return fi end_test "PASS: preferred_lft addresses have expired" } kci_test_addrlft_route_cleanup() { local ret=0 local test_addr="2001:db8:99::1/64" local test_prefix="2001:db8:99::/64" run_cmd ip -6 addr add $test_addr dev "$devdummy" valid_lft 300 preferred_lft 300 run_cmd_grep "$test_prefix proto kernel" ip -6 route show dev "$devdummy" run_cmd ip -6 addr del $test_addr dev "$devdummy" run_cmd_grep_fail "$test_prefix" ip -6 route show dev "$devdummy" if [ $ret -ne 0 ]; then end_test "FAIL: route not cleaned up when address with valid_lft deleted" return 1 fi end_test "PASS: route cleaned up when address with valid_lft deleted" } kci_test_promote_secondaries() { run_cmd ifconfig "$devdummy" if [ $ret -ne 0 ]; then end_test "SKIP: ifconfig not installed" return $ksft_skip fi promote=$(sysctl -n net.ipv4.conf.$devdummy.promote_secondaries) sysctl -q net.ipv4.conf.$devdummy.promote_secondaries=1 for i in $(seq 2 254);do IP="10.23.11.$i" ip -f inet addr add $IP/16 brd + dev "$devdummy" ifconfig "$devdummy" $IP netmask 255.255.0.0 done ip addr flush dev "$devdummy" [ $promote -eq 0 ] && sysctl -q net.ipv4.conf.$devdummy.promote_secondaries=0 end_test "PASS: promote_secondaries complete" } kci_test_addrlabel() { local ret=0 run_cmd ip addrlabel add prefix dead::/64 dev lo label 1 run_cmd_grep "prefix dead::/64 dev lo label 1" ip addrlabel list run_cmd ip addrlabel del prefix dead::/64 dev lo label 1 run_cmd ip addrlabel add prefix dead::/64 label 1 run_cmd ip addrlabel del prefix dead::/64 label 1 # concurrent add/delete for i in $(seq 1 1000); do ip addrlabel add prefix 1c3::/64 label 12345 2>/dev/null done & for i in $(seq 1 1000); do ip addrlabel del prefix 1c3::/64 label 12345 2>/dev/null done wait ip addrlabel del prefix 1c3::/64 label 12345 2>/dev/null if [ $ret -ne 0 ];then end_test "FAIL: ipv6 addrlabel" return 1 fi end_test "PASS: ipv6 addrlabel" } kci_test_ifalias() { local ret=0 namewant=$(uuidgen) syspathname="/sys/class/net/$devdummy/ifalias" run_cmd ip link set dev "$devdummy" alias "$namewant" if [ $ret -ne 0 ]; then end_test "FAIL: cannot set interface alias of $devdummy to $namewant" return 1 fi run_cmd_grep "alias $namewant" ip link show "$devdummy" if [ -r "$syspathname" ] ; then read namehave < "$syspathname" if [ "$namewant" != "$namehave" ]; then end_test "FAIL: did set ifalias $namewant but got $namehave" return 1 fi namewant=$(uuidgen) echo "$namewant" > "$syspathname" run_cmd_grep "alias $namewant" ip link show "$devdummy" # sysfs interface allows to delete alias again echo "" > "$syspathname" run_cmd_grep_fail "alias $namewant" ip link show "$devdummy" for i in $(seq 1 100); do uuidgen > "$syspathname" & done wait # re-add the alias -- kernel should free mem when dummy dev is removed run_cmd ip link set dev "$devdummy" alias "$namewant" fi if [ $ret -ne 0 ]; then end_test "FAIL: set interface alias $devdummy to $namewant" return 1 fi end_test "PASS: set ifalias $namewant for $devdummy" } kci_test_vrf() { vrfname="test-vrf" local ret=0 run_cmd ip link show type vrf if [ $? -ne 0 ]; then end_test "SKIP: vrf: iproute2 too old" return $ksft_skip fi run_cmd ip link add "$vrfname" type vrf table 10 if [ $ret -ne 0 ];then end_test "FAIL: can't add vrf interface, skipping test" return 0 fi run_cmd_grep "$vrfname" ip -br link show type vrf if [ $ret -ne 0 ];then end_test "FAIL: created vrf device not found" return 1 fi run_cmd ip link set dev "$vrfname" up run_cmd ip link set dev "$devdummy" master "$vrfname" run_cmd ip link del dev "$vrfname" if [ $ret -ne 0 ];then end_test "FAIL: vrf" return 1 fi end_test "PASS: vrf" } kci_test_encap_vxlan() { local ret=0 vxlan="test-vxlan0" vlan="test-vlan0" run_cmd ip -netns "$testns" link add "$vxlan" type vxlan id 42 group 239.1.1.1 \ dev "$devdummy" dstport 4789 if [ $? -ne 0 ]; then end_test "FAIL: can't add vxlan interface, skipping test" return 0