954 lines
20 KiB
Bash
Executable File
954 lines
20 KiB
Bash
Executable File
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
VNI_GEN=$RANDOM
|
|
NSIM_ID=$((RANDOM % 1024))
|
|
NSIM_DEV_SYS=/sys/bus/netdevsim/devices/netdevsim$NSIM_ID
|
|
NSIM_DEV_DFS=/sys/kernel/debug/netdevsim/netdevsim$NSIM_ID
|
|
NSIM_NETDEV=
|
|
HAS_ETHTOOL=
|
|
STATIC_ENTRIES=
|
|
EXIT_STATUS=0
|
|
num_cases=0
|
|
num_errors=0
|
|
|
|
clean_up_devs=( )
|
|
|
|
function err_cnt {
|
|
echo "ERROR:" $@
|
|
EXIT_STATUS=1
|
|
((num_errors++))
|
|
((num_cases++))
|
|
}
|
|
|
|
function pass_cnt {
|
|
((num_cases++))
|
|
}
|
|
|
|
function cleanup_tuns {
|
|
for dev in "${clean_up_devs[@]}"; do
|
|
[ -e /sys/class/net/$dev ] && ip link del dev $dev
|
|
done
|
|
clean_up_devs=( )
|
|
}
|
|
|
|
function cleanup_nsim {
|
|
if [ -e $NSIM_DEV_SYS ]; then
|
|
echo $NSIM_ID > /sys/bus/netdevsim/del_device
|
|
fi
|
|
}
|
|
|
|
function cleanup {
|
|
cleanup_tuns
|
|
cleanup_nsim
|
|
}
|
|
|
|
trap cleanup EXIT
|
|
|
|
function new_vxlan {
|
|
local dev=$1
|
|
local dstport=$2
|
|
local lower=$3
|
|
local ipver=$4
|
|
local flags=$5
|
|
|
|
local group ipfl
|
|
|
|
[ "$ipver" != '6' ] && group=239.1.1.1 || group=fff1::1
|
|
[ "$ipver" != '6' ] || ipfl="-6"
|
|
|
|
[[ ! "$flags" =~ "external" ]] && flags="$flags id $((VNI_GEN++))"
|
|
|
|
ip $ipfl link add $dev type vxlan \
|
|
group $group \
|
|
dev $lower \
|
|
dstport $dstport \
|
|
$flags
|
|
|
|
ip link set dev $dev up
|
|
|
|
clean_up_devs=("${clean_up_devs[@]}" $dev)
|
|
|
|
check_tables
|
|
}
|
|
|
|
function new_geneve {
|
|
local dev=$1
|
|
local dstport=$2
|
|
local ipver=$3
|
|
local flags=$4
|
|
|
|
local group ipfl
|
|
|
|
[ "$ipver" != '6' ] && remote=1.1.1.2 || group=::2
|
|
[ "$ipver" != '6' ] || ipfl="-6"
|
|
|
|
[[ ! "$flags" =~ "external" ]] && flags="$flags vni $((VNI_GEN++))"
|
|
|
|
ip $ipfl link add $dev type geneve \
|
|
remote $remote \
|
|
dstport $dstport \
|
|
$flags
|
|
|
|
ip link set dev $dev up
|
|
|
|
clean_up_devs=("${clean_up_devs[@]}" $dev)
|
|
|
|
check_tables
|
|
}
|
|
|
|
function del_dev {
|
|
local dev=$1
|
|
|
|
ip link del dev $dev
|
|
check_tables
|
|
}
|
|
|
|
# Helpers for netdevsim port/type encoding
|
|
function mke {
|
|
local port=$1
|
|
local type=$2
|
|
|
|
echo $((port << 16 | type))
|
|
}
|
|
|
|
function pre {
|
|
local val=$1
|
|
|
|
echo -e "port: $((val >> 16))\ttype: $((val & 0xffff))"
|
|
}
|
|
|
|
function pre_ethtool {
|
|
local val=$1
|
|
local port=$((val >> 16))
|
|
local type=$((val & 0xffff))
|
|
|
|
case $type in
|
|
1)
|
|
type_name="vxlan"
|
|
;;
|
|
2)
|
|
type_name="geneve"
|
|
;;
|
|
4)
|
|
type_name="vxlan-gpe"
|
|
;;
|
|
*)
|
|
type_name="bit X"
|
|
;;
|
|
esac
|
|
|
|
echo "port $port, $type_name"
|
|
}
|
|
|
|
function check_table {
|
|
local path=$NSIM_DEV_DFS/ports/$port/udp_ports_table$1
|
|
local -n expected=$2
|
|
local last=$3
|
|
|
|
read -a have < $path
|
|
|
|
if [ ${#expected[@]} -ne ${#have[@]} ]; then
|
|
echo "check_table: BAD NUMBER OF ITEMS"
|
|
return 0
|
|
fi
|
|
|
|
for i in "${!expected[@]}"; do
|
|
if [ -n "$HAS_ETHTOOL" -a ${expected[i]} -ne 0 ]; then
|
|
pp_expected=`pre_ethtool ${expected[i]}`
|
|
ethtool --show-tunnels $NSIM_NETDEV | grep "$pp_expected" >/dev/null
|
|
if [ $? -ne 0 -a $last -ne 0 ]; then
|
|
err_cnt "ethtool table $1 on port $port: $pfx - $msg"
|
|
echo " check_table: ethtool does not contain '$pp_expected'"
|
|
ethtool --show-tunnels $NSIM_NETDEV
|
|
return 0
|
|
|
|
fi
|
|
fi
|
|
|
|
if [ ${expected[i]} != ${have[i]} ]; then
|
|
if [ $last -ne 0 ]; then
|
|
err_cnt "table $1 on port $port: $pfx - $msg"
|
|
echo " check_table: wrong entry $i"
|
|
echo " expected: `pre ${expected[i]}`"
|
|
echo " have: `pre ${have[i]}`"
|
|
return 0
|
|
fi
|
|
return 1
|
|
fi
|
|
done
|
|
|
|
pass_cnt
|
|
return 0
|
|
}
|
|
|
|
function check_tables {
|
|
# Need retries in case we have workqueue making the changes
|
|
local retries=10
|
|
|
|
while ! check_table 0 exp0 $((retries == 0)); do
|
|
sleep 0.02
|
|
((retries--))
|
|
done
|
|
while ! check_table 1 exp1 $((retries == 0)); do
|
|
sleep 0.02
|
|
((retries--))
|
|
done
|
|
|
|
if [ -n "$HAS_ETHTOOL" -a -n "${STATIC_ENTRIES[0]}" ]; then
|
|
fail=0
|
|
for i in "${!STATIC_ENTRIES[@]}"; do
|
|
pp_expected=`pre_ethtool ${STATIC_ENTRIES[i]}`
|
|
cnt=$(ethtool --show-tunnels $NSIM_NETDEV | grep -c "$pp_expected")
|
|
if [ $cnt -ne 1 ]; then
|
|
err_cnt "ethtool static entry: $pfx - $msg"
|
|
echo " check_table: ethtool does not contain '$pp_expected'"
|
|
ethtool --show-tunnels $NSIM_NETDEV
|
|
fail=1
|
|
fi
|
|
done
|
|
[ $fail == 0 ] && pass_cnt
|
|
fi
|
|
}
|
|
|
|
function print_table {
|
|
local path=$NSIM_DEV_DFS/ports/$port/udp_ports_table$1
|
|
read -a have < $path
|
|
|
|
tree $NSIM_DEV_DFS/
|
|
|
|
echo "Port $port table $1:"
|
|
|
|
for i in "${!have[@]}"; do
|
|
echo " `pre ${have[i]}`"
|
|
done
|
|
|
|
}
|
|
|
|
function print_tables {
|
|
print_table 0
|
|
print_table 1
|
|
}
|
|
|
|
function get_netdev_name {
|
|
local -n old=$1
|
|
|
|
new=$(ls /sys/class/net)
|
|
|
|
for netdev in $new; do
|
|
for check in $old; do
|
|
[ $netdev == $check ] && break
|
|
done
|
|
|
|
if [ $netdev != $check ]; then
|
|
echo $netdev
|
|
break
|
|
fi
|
|
done
|
|
}
|
|
|
|
###
|
|
### Code start
|
|
###
|
|
|
|
# Probe ethtool support
|
|
ethtool -h | grep show-tunnels 2>&1 >/dev/null && HAS_ETHTOOL=y
|
|
|
|
modprobe netdevsim
|
|
|
|
# Basic test
|
|
pfx="basic"
|
|
|
|
for port in 0 1; do
|
|
old_netdevs=$(ls /sys/class/net)
|
|
if [ $port -eq 0 ]; then
|
|
echo $NSIM_ID > /sys/bus/netdevsim/new_device
|
|
else
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_open_only
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_sleep
|
|
echo 1 > $NSIM_DEV_SYS/new_port
|
|
fi
|
|
NSIM_NETDEV=`get_netdev_name old_netdevs`
|
|
|
|
msg="new NIC device created"
|
|
exp0=( 0 0 0 0 )
|
|
exp1=( 0 0 0 0 )
|
|
check_tables
|
|
|
|
msg="VxLAN v4 devices"
|
|
exp0=( `mke 4789 1` 0 0 0 )
|
|
new_vxlan vxlan0 4789 $NSIM_NETDEV
|
|
new_vxlan vxlan1 4789 $NSIM_NETDEV
|
|
|
|
msg="VxLAN v4 devices go down"
|
|
exp0=( 0 0 0 0 )
|
|
ifconfig vxlan1 down
|
|
ifconfig vxlan0 down
|
|
check_tables
|
|
|
|
msg="VxLAN v6 devices"
|
|
exp0=( `mke 4789 1` 0 0 0 )
|
|
new_vxlan vxlanA 4789 $NSIM_NETDEV 6
|
|
|
|
for ifc in vxlan0 vxlan1; do
|
|
ifconfig $ifc up
|
|
done
|
|
|
|
new_vxlan vxlanB 4789 $NSIM_NETDEV 6
|
|
|
|
msg="another VxLAN v6 devices"
|
|
exp0=( `mke 4789 1` `mke 4790 1` 0 0 )
|
|
new_vxlan vxlanC 4790 $NSIM_NETDEV 6
|
|
|
|
msg="Geneve device"
|
|
exp1=( `mke 6081 2` 0 0 0 )
|
|
new_geneve gnv0 6081
|
|
|
|
msg="NIC device goes down"
|
|
ifconfig $NSIM_NETDEV down
|
|
if [ $port -eq 1 ]; then
|
|
exp0=( 0 0 0 0 )
|
|
exp1=( 0 0 0 0 )
|
|
fi
|
|
check_tables
|
|
msg="NIC device goes up again"
|
|
ifconfig $NSIM_NETDEV up
|
|
exp0=( `mke 4789 1` `mke 4790 1` 0 0 )
|
|
exp1=( `mke 6081 2` 0 0 0 )
|
|
check_tables
|
|
|
|
cleanup_tuns
|
|
|
|
msg="tunnels destroyed"
|
|
exp0=( 0 0 0 0 )
|
|
exp1=( 0 0 0 0 )
|
|
check_tables
|
|
|
|
modprobe -r geneve
|
|
modprobe -r vxlan
|
|
modprobe -r udp_tunnel
|
|
|
|
check_tables
|
|
done
|
|
|
|
modprobe -r netdevsim
|
|
|
|
# Module tests
|
|
pfx="module tests"
|
|
|
|
if modinfo netdevsim | grep udp_tunnel >/dev/null; then
|
|
err_cnt "netdevsim depends on udp_tunnel"
|
|
else
|
|
pass_cnt
|
|
fi
|
|
|
|
modprobe netdevsim
|
|
|
|
old_netdevs=$(ls /sys/class/net)
|
|
port=0
|
|
echo $NSIM_ID > /sys/bus/netdevsim/new_device
|
|
echo 0 > $NSIM_DEV_SYS/del_port
|
|
echo 1000 > $NSIM_DEV_DFS/udp_ports_sleep
|
|
echo 0 > $NSIM_DEV_SYS/new_port
|
|
NSIM_NETDEV=`get_netdev_name old_netdevs`
|
|
|
|
msg="create VxLANs"
|
|
exp0=( 0 0 0 0 ) # sleep is longer than out wait
|
|
new_vxlan vxlan0 10000 $NSIM_NETDEV
|
|
|
|
modprobe -r vxlan
|
|
modprobe -r udp_tunnel
|
|
|
|
msg="remove tunnels"
|
|
exp0=( 0 0 0 0 )
|
|
check_tables
|
|
|
|
msg="create VxLANs"
|
|
exp0=( 0 0 0 0 ) # sleep is longer than out wait
|
|
new_vxlan vxlan0 10000 $NSIM_NETDEV
|
|
|
|
exp0=( 0 0 0 0 )
|
|
|
|
modprobe -r netdevsim
|
|
modprobe netdevsim
|
|
|
|
# Overflow the table
|
|
|
|
function overflow_table0 {
|
|
local pfx=$1
|
|
|
|
msg="create VxLANs 1/5"
|
|
exp0=( `mke 10000 1` 0 0 0 )
|
|
new_vxlan vxlan0 10000 $NSIM_NETDEV
|
|
|
|
msg="create VxLANs 2/5"
|
|
exp0=( `mke 10000 1` `mke 10001 1` 0 0 )
|
|
new_vxlan vxlan1 10001 $NSIM_NETDEV
|
|
|
|
msg="create VxLANs 3/5"
|
|
exp0=( `mke 10000 1` `mke 10001 1` `mke 10002 1` 0 )
|
|
new_vxlan vxlan2 10002 $NSIM_NETDEV
|
|
|
|
msg="create VxLANs 4/5"
|
|
exp0=( `mke 10000 1` `mke 10001 1` `mke 10002 1` `mke 10003 1` )
|
|
new_vxlan vxlan3 10003 $NSIM_NETDEV
|
|
|
|
msg="create VxLANs 5/5"
|
|
new_vxlan vxlan4 10004 $NSIM_NETDEV
|
|
}
|
|
|
|
function overflow_table1 {
|
|
local pfx=$1
|
|
|
|
msg="create GENEVE 1/5"
|
|
exp1=( `mke 20000 2` 0 0 0 )
|
|
new_geneve gnv0 20000
|
|
|
|
msg="create GENEVE 2/5"
|
|
exp1=( `mke 20000 2` `mke 20001 2` 0 0 )
|
|
new_geneve gnv1 20001
|
|
|
|
msg="create GENEVE 3/5"
|
|
exp1=( `mke 20000 2` `mke 20001 2` `mke 20002 2` 0 )
|
|
new_geneve gnv2 20002
|
|
|
|
msg="create GENEVE 4/5"
|
|
exp1=( `mke 20000 2` `mke 20001 2` `mke 20002 2` `mke 20003 2` )
|
|
new_geneve gnv3 20003
|
|
|
|
msg="create GENEVE 5/5"
|
|
new_geneve gnv4 20004
|
|
}
|
|
|
|
echo $NSIM_ID > /sys/bus/netdevsim/new_device
|
|
echo 0 > $NSIM_DEV_SYS/del_port
|
|
|
|
for port in 0 1; do
|
|
if [ $port -ne 0 ]; then
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_open_only
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_sleep
|
|
fi
|
|
|
|
echo $port > $NSIM_DEV_SYS/new_port
|
|
ifconfig $NSIM_NETDEV up
|
|
|
|
overflow_table0 "overflow NIC table"
|
|
overflow_table1 "overflow NIC table"
|
|
|
|
msg="replace VxLAN in overflow table"
|
|
exp0=( `mke 10000 1` `mke 10004 1` `mke 10002 1` `mke 10003 1` )
|
|
del_dev vxlan1
|
|
|
|
msg="vacate VxLAN in overflow table"
|
|
exp0=( `mke 10000 1` `mke 10004 1` 0 `mke 10003 1` )
|
|
del_dev vxlan2
|
|
|
|
msg="replace GENEVE in overflow table"
|
|
exp1=( `mke 20000 2` `mke 20004 2` `mke 20002 2` `mke 20003 2` )
|
|
del_dev gnv1
|
|
|
|
msg="vacate GENEVE in overflow table"
|
|
exp1=( `mke 20000 2` `mke 20004 2` 0 `mke 20003 2` )
|
|
del_dev gnv2
|
|
|
|
msg="table sharing - share"
|
|
exp1=( `mke 20000 2` `mke 20004 2` `mke 30001 4` `mke 20003 2` )
|
|
new_vxlan vxlanG0 30001 $NSIM_NETDEV 4 "gpe external"
|
|
|
|
msg="table sharing - overflow"
|
|
new_vxlan vxlanG1 30002 $NSIM_NETDEV 4 "gpe external"
|
|
msg="table sharing - overflow v6"
|
|
new_vxlan vxlanG2 30002 $NSIM_NETDEV 6 "gpe external"
|
|
|
|
exp1=( `mke 20000 2` `mke 30002 4` `mke 30001 4` `mke 20003 2` )
|
|
del_dev gnv4
|
|
|
|
msg="destroy NIC"
|
|
echo $port > $NSIM_DEV_SYS/del_port
|
|
|
|
cleanup_tuns
|
|
exp0=( 0 0 0 0 )
|
|
exp1=( 0 0 0 0 )
|
|
done
|
|
|
|
cleanup_nsim
|
|
|
|
# Sync all
|
|
pfx="sync all"
|
|
|
|
echo $NSIM_ID > /sys/bus/netdevsim/new_device
|
|
echo 0 > $NSIM_DEV_SYS/del_port
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_sync_all
|
|
|
|
for port in 0 1; do
|
|
if [ $port -ne 0 ]; then
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_open_only
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_sleep
|
|
fi
|
|
|
|
echo $port > $NSIM_DEV_SYS/new_port
|
|
ifconfig $NSIM_NETDEV up
|
|
|
|
overflow_table0 "overflow NIC table"
|
|
overflow_table1 "overflow NIC table"
|
|
|
|
msg="replace VxLAN in overflow table"
|
|
exp0=( `mke 10000 1` `mke 10004 1` `mke 10002 1` `mke 10003 1` )
|
|
del_dev vxlan1
|
|
|
|
msg="vacate VxLAN in overflow table"
|
|
exp0=( `mke 10000 1` `mke 10004 1` 0 `mke 10003 1` )
|
|
del_dev vxlan2
|
|
|
|
msg="replace GENEVE in overflow table"
|
|
exp1=( `mke 20000 2` `mke 20004 2` `mke 20002 2` `mke 20003 2` )
|
|
del_dev gnv1
|
|
|
|
msg="vacate GENEVE in overflow table"
|
|
exp1=( `mke 20000 2` `mke 20004 2` 0 `mke 20003 2` )
|
|
del_dev gnv2
|
|
|
|
msg="table sharing - share"
|
|
exp1=( `mke 20000 2` `mke 20004 2` `mke 30001 4` `mke 20003 2` )
|
|
new_vxlan vxlanG0 30001 $NSIM_NETDEV 4 "gpe external"
|
|
|
|
msg="table sharing - overflow"
|
|
new_vxlan vxlanG1 30002 $NSIM_NETDEV 4 "gpe external"
|
|
msg="table sharing - overflow v6"
|
|
new_vxlan vxlanG2 30002 $NSIM_NETDEV 6 "gpe external"
|
|
|
|
exp1=( `mke 20000 2` `mke 30002 4` `mke 30001 4` `mke 20003 2` )
|
|
del_dev gnv4
|
|
|
|
msg="destroy NIC"
|
|
echo $port > $NSIM_DEV_SYS/del_port
|
|
|
|
cleanup_tuns
|
|
exp0=( 0 0 0 0 )
|
|
exp1=( 0 0 0 0 )
|
|
done
|
|
|
|
cleanup_nsim
|
|
|
|
# Destroy full NIC
|
|
pfx="destroy full"
|
|
|
|
echo $NSIM_ID > /sys/bus/netdevsim/new_device
|
|
echo 0 > $NSIM_DEV_SYS/del_port
|
|
|
|
for port in 0 1; do
|
|
if [ $port -ne 0 ]; then
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_open_only
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_sleep
|
|
fi
|
|
|
|
echo $port > $NSIM_DEV_SYS/new_port
|
|
ifconfig $NSIM_NETDEV up
|
|
|
|
overflow_table0 "destroy NIC"
|
|
overflow_table1 "destroy NIC"
|
|
|
|
msg="destroy NIC"
|
|
echo $port > $NSIM_DEV_SYS/del_port
|
|
|
|
cleanup_tuns
|
|
exp0=( 0 0 0 0 )
|
|
exp1=( 0 0 0 0 )
|
|
done
|
|
|
|
cleanup_nsim
|
|
|
|
# IPv4 only
|
|
pfx="IPv4 only"
|
|
|
|
echo $NSIM_ID > /sys/bus/netdevsim/new_device
|
|
echo 0 > $NSIM_DEV_SYS/del_port
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_ipv4_only
|
|
|
|
for port in 0 1; do
|
|
if [ $port -ne 0 ]; then
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_open_only
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_sleep
|
|
fi
|
|
|
|
echo $port > $NSIM_DEV_SYS/new_port
|
|
ifconfig $NSIM_NETDEV up
|
|
|
|
msg="create VxLANs v6"
|
|
new_vxlan vxlanA0 10000 $NSIM_NETDEV 6
|
|
|
|
msg="create VxLANs v6"
|
|
new_vxlan vxlanA1 10000 $NSIM_NETDEV 6
|
|
|
|
ip link set dev vxlanA0 down
|
|
ip link set dev vxlanA0 up
|
|
check_tables
|
|
|
|
msg="create VxLANs v4"
|
|
exp0=( `mke 10000 1` 0 0 0 )
|
|
new_vxlan vxlan0 10000 $NSIM_NETDEV
|
|
|
|
msg="down VxLANs v4"
|
|
exp0=( 0 0 0 0 )
|
|
ip link set dev vxlan0 down
|
|
check_tables
|
|
|
|
msg="up VxLANs v4"
|
|
exp0=( `mke 10000 1` 0 0 0 )
|
|
ip link set dev vxlan0 up
|
|
check_tables
|
|
|
|
msg="destroy VxLANs v4"
|
|
exp0=( 0 0 0 0 )
|
|
del_dev vxlan0
|
|
|
|
msg="recreate VxLANs v4"
|
|
exp0=( `mke 10000 1` 0 0 0 )
|
|
new_vxlan vxlan0 10000 $NSIM_NETDEV
|
|
|
|
del_dev vxlanA0
|
|
del_dev vxlanA1
|
|
|
|
msg="destroy NIC"
|
|
echo $port > $NSIM_DEV_SYS/del_port
|
|
|
|
cleanup_tuns
|
|
exp0=( 0 0 0 0 )
|
|
exp1=( 0 0 0 0 )
|
|
done
|
|
|
|
cleanup_nsim
|
|
|
|
# Failures
|
|
pfx="error injection"
|
|
|
|
echo $NSIM_ID > /sys/bus/netdevsim/new_device
|
|
echo 0 > $NSIM_DEV_SYS/del_port
|
|
|
|
for port in 0 1; do
|
|
if [ $port -ne 0 ]; then
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_open_only
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_sleep
|
|
fi
|
|
|
|
echo $port > $NSIM_DEV_SYS/new_port
|
|
ifconfig $NSIM_NETDEV up
|
|
|
|
echo 110 > $NSIM_DEV_DFS/ports/$port/udp_ports_inject_error
|
|
|
|
msg="1 - create VxLANs v6"
|
|
exp0=( 0 0 0 0 )
|
|
new_vxlan vxlanA0 10000 $NSIM_NETDEV 6
|
|
|
|
msg="1 - create VxLANs v4"
|
|
exp0=( `mke 10000 1` 0 0 0 )
|
|
new_vxlan vxlan0 10000 $NSIM_NETDEV
|
|
|
|
msg="1 - remove VxLANs v4"
|
|
del_dev vxlan0
|
|
|
|
msg="1 - remove VxLANs v6"
|
|
exp0=( 0 0 0 0 )
|
|
del_dev vxlanA0
|
|
|
|
msg="2 - create GENEVE"
|
|
exp1=( `mke 20000 2` 0 0 0 )
|
|
new_geneve gnv0 20000
|
|
|
|
msg="2 - destroy GENEVE"
|
|
echo 2 > $NSIM_DEV_DFS/ports/$port/udp_ports_inject_error
|
|
exp1=( `mke 20000 2` 0 0 0 )
|
|
del_dev gnv0
|
|
|
|
msg="2 - create second GENEVE"
|
|
exp1=( 0 `mke 20001 2` 0 0 )
|
|
new_geneve gnv0 20001
|
|
|
|
msg="destroy NIC"
|
|
echo $port > $NSIM_DEV_SYS/del_port
|
|
|
|
cleanup_tuns
|
|
exp0=( 0 0 0 0 )
|
|
exp1=( 0 0 0 0 )
|
|
done
|
|
|
|
cleanup_nsim
|
|
|
|
# netdev flags
|
|
pfx="netdev flags"
|
|
|
|
echo $NSIM_ID > /sys/bus/netdevsim/new_device
|
|
echo 0 > $NSIM_DEV_SYS/del_port
|
|
|
|
for port in 0 1; do
|
|
if [ $port -ne 0 ]; then
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_open_only
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_sleep
|
|
fi
|
|
|
|
echo $port > $NSIM_DEV_SYS/new_port
|
|
ifconfig $NSIM_NETDEV up
|
|
|
|
msg="create VxLANs v6"
|
|
exp0=( `mke 10000 1` 0 0 0 )
|
|
new_vxlan vxlanA0 10000 $NSIM_NETDEV 6
|
|
|
|
msg="create VxLANs v4"
|
|
new_vxlan vxlan0 10000 $NSIM_NETDEV
|
|
|
|
msg="turn off"
|
|
exp0=( 0 0 0 0 )
|
|
ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload off
|
|
check_tables
|
|
|
|
msg="turn on"
|
|
exp0=( `mke 10000 1` 0 0 0 )
|
|
ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload on
|
|
check_tables
|
|
|
|
msg="remove both"
|
|
del_dev vxlanA0
|
|
exp0=( 0 0 0 0 )
|
|
del_dev vxlan0
|
|
check_tables
|
|
|
|
ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload off
|
|
|
|
msg="create VxLANs v4 - off"
|
|
exp0=( 0 0 0 0 )
|
|
new_vxlan vxlan0 10000 $NSIM_NETDEV
|
|
|
|
msg="created off - turn on"
|
|
exp0=( `mke 10000 1` 0 0 0 )
|
|
ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload on
|
|
check_tables
|
|
|
|
msg="destroy NIC"
|
|
echo $port > $NSIM_DEV_SYS/del_port
|
|
|
|
cleanup_tuns
|
|
exp0=( 0 0 0 0 )
|
|
exp1=( 0 0 0 0 )
|
|
done
|
|
|
|
cleanup_nsim
|
|
|
|
# device initiated reset
|
|
pfx="reset notification"
|
|
|
|
echo $NSIM_ID > /sys/bus/netdevsim/new_device
|
|
echo 0 > $NSIM_DEV_SYS/del_port
|
|
|
|
for port in 0 1; do
|
|
if [ $port -ne 0 ]; then
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_open_only
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_sleep
|
|
fi
|
|
|
|
echo $port > $NSIM_DEV_SYS/new_port
|
|
ifconfig $NSIM_NETDEV up
|
|
|
|
msg="create VxLANs v6"
|
|
exp0=( `mke 10000 1` 0 0 0 )
|
|
new_vxlan vxlanA0 10000 $NSIM_NETDEV 6
|
|
|
|
msg="create VxLANs v4"
|
|
new_vxlan vxlan0 10000 $NSIM_NETDEV
|
|
|
|
echo 1 > $NSIM_DEV_DFS/ports/$port/udp_ports_reset
|
|
check_tables
|
|
|
|
msg="NIC device goes down"
|
|
ifconfig $NSIM_NETDEV down
|
|
if [ $port -eq 1 ]; then
|
|
exp0=( 0 0 0 0 )
|
|
exp1=( 0 0 0 0 )
|
|
fi
|
|
check_tables
|
|
|
|
echo 1 > $NSIM_DEV_DFS/ports/$port/udp_ports_reset
|
|
check_tables
|
|
|
|
msg="NIC device goes up again"
|
|
ifconfig $NSIM_NETDEV up
|
|
exp0=( `mke 10000 1` 0 0 0 )
|
|
check_tables
|
|
|
|
msg="remove both"
|
|
del_dev vxlanA0
|
|
exp0=( 0 0 0 0 )
|
|
del_dev vxlan0
|
|
check_tables
|
|
|
|
echo 1 > $NSIM_DEV_DFS/ports/$port/udp_ports_reset
|
|
check_tables
|
|
|
|
msg="destroy NIC"
|
|
echo $port > $NSIM_DEV_SYS/del_port
|
|
|
|
cleanup_tuns
|
|
exp0=( 0 0 0 0 )
|
|
exp1=( 0 0 0 0 )
|
|
done
|
|
|
|
cleanup_nsim
|
|
|
|
# shared port tables
|
|
pfx="table sharing"
|
|
|
|
echo $NSIM_ID > /sys/bus/netdevsim/new_device
|
|
echo 0 > $NSIM_DEV_SYS/del_port
|
|
|
|
echo 0 > $NSIM_DEV_DFS/udp_ports_open_only
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_sleep
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_shared
|
|
|
|
old_netdevs=$(ls /sys/class/net)
|
|
echo 1 > $NSIM_DEV_SYS/new_port
|
|
NSIM_NETDEV=`get_netdev_name old_netdevs`
|
|
old_netdevs=$(ls /sys/class/net)
|
|
echo 2 > $NSIM_DEV_SYS/new_port
|
|
NSIM_NETDEV2=`get_netdev_name old_netdevs`
|
|
|
|
msg="VxLAN v4 devices"
|
|
exp0=( `mke 4789 1` 0 0 0 )
|
|
exp1=( 0 0 0 0 )
|
|
new_vxlan vxlan0 4789 $NSIM_NETDEV
|
|
new_vxlan vxlan1 4789 $NSIM_NETDEV2
|
|
|
|
msg="VxLAN v4 devices go down"
|
|
exp0=( 0 0 0 0 )
|
|
ifconfig vxlan1 down
|
|
ifconfig vxlan0 down
|
|
check_tables
|
|
|
|
for ifc in vxlan0 vxlan1; do
|
|
ifconfig $ifc up
|
|
done
|
|
|
|
msg="VxLAN v6 device"
|
|
exp0=( `mke 4789 1` `mke 4790 1` 0 0 )
|
|
new_vxlan vxlanC 4790 $NSIM_NETDEV 6
|
|
|
|
msg="Geneve device"
|
|
exp1=( `mke 6081 2` 0 0 0 )
|
|
new_geneve gnv0 6081
|
|
|
|
msg="NIC device goes down"
|
|
ifconfig $NSIM_NETDEV down
|
|
check_tables
|
|
|
|
msg="NIC device goes up again"
|
|
ifconfig $NSIM_NETDEV up
|
|
check_tables
|
|
|
|
for i in `seq 2`; do
|
|
msg="turn feature off - 1, rep $i"
|
|
ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload off
|
|
check_tables
|
|
|
|
msg="turn feature off - 2, rep $i"
|
|
exp0=( 0 0 0 0 )
|
|
exp1=( 0 0 0 0 )
|
|
ethtool -K $NSIM_NETDEV2 rx-udp_tunnel-port-offload off
|
|
check_tables
|
|
|
|
msg="turn feature on - 1, rep $i"
|
|
exp0=( `mke 4789 1` `mke 4790 1` 0 0 )
|
|
exp1=( `mke 6081 2` 0 0 0 )
|
|
ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload on
|
|
check_tables
|
|
|
|
msg="turn feature on - 2, rep $i"
|
|
ethtool -K $NSIM_NETDEV2 rx-udp_tunnel-port-offload on
|
|
check_tables
|
|
done
|
|
|
|
msg="tunnels destroyed 1"
|
|
cleanup_tuns
|
|
exp0=( 0 0 0 0 )
|
|
exp1=( 0 0 0 0 )
|
|
check_tables
|
|
|
|
overflow_table0 "overflow NIC table"
|
|
|
|
msg="re-add a port"
|
|
|
|
echo 2 > $NSIM_DEV_SYS/del_port
|
|
echo 2 > $NSIM_DEV_SYS/new_port
|
|
check_tables
|
|
|
|
msg="replace VxLAN in overflow table"
|
|
exp0=( `mke 10000 1` `mke 10004 1` `mke 10002 1` `mke 10003 1` )
|
|
del_dev vxlan1
|
|
|
|
msg="vacate VxLAN in overflow table"
|
|
exp0=( `mke 10000 1` `mke 10004 1` 0 `mke 10003 1` )
|
|
del_dev vxlan2
|
|
|
|
echo 1 > $NSIM_DEV_DFS/ports/$port/udp_ports_reset
|
|
check_tables
|
|
|
|
msg="tunnels destroyed 2"
|
|
cleanup_tuns
|
|
exp0=( 0 0 0 0 )
|
|
exp1=( 0 0 0 0 )
|
|
check_tables
|
|
|
|
echo 1 > $NSIM_DEV_SYS/del_port
|
|
echo 2 > $NSIM_DEV_SYS/del_port
|
|
|
|
cleanup_nsim
|
|
|
|
# Static IANA port
|
|
pfx="static IANA vxlan"
|
|
|
|
echo $NSIM_ID > /sys/bus/netdevsim/new_device
|
|
echo 0 > $NSIM_DEV_SYS/del_port
|
|
|
|
echo 1 > $NSIM_DEV_DFS/udp_ports_static_iana_vxlan
|
|
STATIC_ENTRIES=( `mke 4789 1` )
|
|
|
|
port=1
|
|
old_netdevs=$(ls /sys/class/net)
|
|
echo $port > $NSIM_DEV_SYS/new_port
|
|
NSIM_NETDEV=`get_netdev_name old_netdevs`
|
|
|
|
msg="check empty"
|
|
exp0=( 0 0 0 0 )
|
|
exp1=( 0 0 0 0 )
|
|
check_tables
|
|
|
|
msg="add on static port"
|
|
new_vxlan vxlan0 4789 $NSIM_NETDEV
|
|
new_vxlan vxlan1 4789 $NSIM_NETDEV
|
|
|
|
msg="add on different port"
|
|
exp0=( `mke 4790 1` 0 0 0 )
|
|
new_vxlan vxlan2 4790 $NSIM_NETDEV
|
|
|
|
cleanup_tuns
|
|
|
|
msg="tunnels destroyed"
|
|
exp0=( 0 0 0 0 )
|
|
exp1=( 0 0 0 0 )
|
|
check_tables
|
|
|
|
msg="different type"
|
|
new_geneve gnv0 4789
|
|
|
|
cleanup_tuns
|
|
cleanup_nsim
|
|
|
|
# END
|
|
|
|
modprobe -r netdevsim
|
|
|
|
if [ $num_errors -eq 0 ]; then
|
|
echo "PASSED all $num_cases checks"
|
|
else
|
|
echo "FAILED $num_errors/$num_cases checks"
|
|
fi
|
|
|
|
exit $EXIT_STATUS
|