Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/bash
0002 # SPDX-License-Identifier: GPL-2.0-only
0003 
0004 VNI_GEN=$RANDOM
0005 NSIM_ID=$((RANDOM % 1024))
0006 NSIM_DEV_SYS=/sys/bus/netdevsim/devices/netdevsim$NSIM_ID
0007 NSIM_DEV_DFS=/sys/kernel/debug/netdevsim/netdevsim$NSIM_ID
0008 NSIM_NETDEV=
0009 HAS_ETHTOOL=
0010 STATIC_ENTRIES=
0011 EXIT_STATUS=0
0012 num_cases=0
0013 num_errors=0
0014 
0015 clean_up_devs=( )
0016 
0017 function err_cnt {
0018     echo "ERROR:" $@
0019     EXIT_STATUS=1
0020     ((num_errors++))
0021     ((num_cases++))
0022 }
0023 
0024 function pass_cnt {
0025     ((num_cases++))
0026 }
0027 
0028 function cleanup_tuns {
0029     for dev in "${clean_up_devs[@]}"; do
0030         [ -e /sys/class/net/$dev ] && ip link del dev $dev
0031     done
0032     clean_up_devs=( )
0033 }
0034 
0035 function cleanup_nsim {
0036     if [ -e $NSIM_DEV_SYS ]; then
0037         echo $NSIM_ID > /sys/bus/netdevsim/del_device
0038     fi
0039 }
0040 
0041 function cleanup {
0042     cleanup_tuns
0043     cleanup_nsim
0044 }
0045 
0046 trap cleanup EXIT
0047 
0048 function new_vxlan {
0049     local dev=$1
0050     local dstport=$2
0051     local lower=$3
0052     local ipver=$4
0053     local flags=$5
0054 
0055     local group ipfl
0056 
0057     [ "$ipver" != '6' ] && group=239.1.1.1 || group=fff1::1
0058     [ "$ipver" != '6' ] || ipfl="-6"
0059 
0060     [[ ! "$flags" =~ "external" ]] && flags="$flags id $((VNI_GEN++))"
0061 
0062     ip $ipfl link add $dev type vxlan \
0063        group $group \
0064        dev $lower \
0065        dstport $dstport \
0066        $flags
0067 
0068     ip link set dev $dev up
0069 
0070     clean_up_devs=("${clean_up_devs[@]}" $dev)
0071 
0072     check_tables
0073 }
0074 
0075 function new_geneve {
0076     local dev=$1
0077     local dstport=$2
0078     local ipver=$3
0079     local flags=$4
0080 
0081     local group ipfl
0082 
0083     [ "$ipver" != '6' ] && remote=1.1.1.2 || group=::2
0084     [ "$ipver" != '6' ] || ipfl="-6"
0085 
0086     [[ ! "$flags" =~ "external" ]] && flags="$flags vni $((VNI_GEN++))"
0087 
0088     ip $ipfl link add $dev type geneve \
0089        remote $remote  \
0090        dstport $dstport \
0091        $flags
0092 
0093     ip link set dev $dev up
0094 
0095     clean_up_devs=("${clean_up_devs[@]}" $dev)
0096 
0097     check_tables
0098 }
0099 
0100 function del_dev {
0101     local dev=$1
0102 
0103     ip link del dev $dev
0104     check_tables
0105 }
0106 
0107 # Helpers for netdevsim port/type encoding
0108 function mke {
0109     local port=$1
0110     local type=$2
0111 
0112     echo $((port << 16 | type))
0113 }
0114 
0115 function pre {
0116     local val=$1
0117 
0118     echo -e "port: $((val >> 16))\ttype: $((val & 0xffff))"
0119 }
0120 
0121 function pre_ethtool {
0122     local val=$1
0123     local port=$((val >> 16))
0124     local type=$((val & 0xffff))
0125 
0126     case $type in
0127         1)
0128             type_name="vxlan"
0129             ;;
0130         2)
0131             type_name="geneve"
0132             ;;
0133         4)
0134             type_name="vxlan-gpe"
0135             ;;
0136         *)
0137             type_name="bit X"
0138             ;;
0139     esac
0140 
0141     echo "port $port, $type_name"
0142 }
0143 
0144 function check_table {
0145     local path=$NSIM_DEV_DFS/ports/$port/udp_ports_table$1
0146     local -n expected=$2
0147     local last=$3
0148 
0149     read -a have < $path
0150 
0151     if [ ${#expected[@]} -ne ${#have[@]} ]; then
0152         echo "check_table: BAD NUMBER OF ITEMS"
0153         return 0
0154     fi
0155 
0156     for i in "${!expected[@]}"; do
0157         if [ -n "$HAS_ETHTOOL" -a ${expected[i]} -ne 0 ]; then
0158             pp_expected=`pre_ethtool ${expected[i]}`
0159             ethtool --show-tunnels $NSIM_NETDEV | grep "$pp_expected" >/dev/null
0160             if [ $? -ne 0 -a $last -ne 0 ]; then
0161                 err_cnt "ethtool table $1 on port $port: $pfx - $msg"
0162                 echo "       check_table: ethtool does not contain '$pp_expected'"
0163                 ethtool --show-tunnels $NSIM_NETDEV
0164                 return 0
0165 
0166             fi
0167         fi
0168 
0169         if [ ${expected[i]} != ${have[i]} ]; then
0170             if [ $last -ne 0 ]; then
0171                 err_cnt "table $1 on port $port: $pfx - $msg"
0172                 echo "       check_table: wrong entry $i"
0173                 echo "       expected: `pre ${expected[i]}`"
0174                 echo "       have:     `pre ${have[i]}`"
0175                 return 0
0176             fi
0177             return 1
0178         fi
0179     done
0180 
0181     pass_cnt
0182     return 0
0183 }
0184 
0185 function check_tables {
0186     # Need retries in case we have workqueue making the changes
0187     local retries=10
0188 
0189     while ! check_table 0 exp0 $((retries == 0)); do
0190         sleep 0.02
0191         ((retries--))
0192     done
0193     while ! check_table 1 exp1 $((retries == 0)); do
0194         sleep 0.02
0195         ((retries--))
0196     done
0197 
0198     if [ -n "$HAS_ETHTOOL" -a -n "${STATIC_ENTRIES[0]}" ]; then
0199         fail=0
0200         for i in "${!STATIC_ENTRIES[@]}"; do
0201             pp_expected=`pre_ethtool ${STATIC_ENTRIES[i]}`
0202             cnt=$(ethtool --show-tunnels $NSIM_NETDEV | grep -c "$pp_expected")
0203             if [ $cnt -ne 1 ]; then
0204                 err_cnt "ethtool static entry: $pfx - $msg"
0205                 echo "       check_table: ethtool does not contain '$pp_expected'"
0206                 ethtool --show-tunnels $NSIM_NETDEV
0207                 fail=1
0208             fi
0209         done
0210         [ $fail == 0 ] && pass_cnt
0211     fi
0212 }
0213 
0214 function print_table {
0215     local path=$NSIM_DEV_DFS/ports/$port/udp_ports_table$1
0216     read -a have < $path
0217 
0218     tree $NSIM_DEV_DFS/
0219 
0220     echo "Port $port table $1:"
0221 
0222     for i in "${!have[@]}"; do
0223         echo "    `pre ${have[i]}`"
0224     done
0225 
0226 }
0227 
0228 function print_tables {
0229     print_table 0
0230     print_table 1
0231 }
0232 
0233 function get_netdev_name {
0234     local -n old=$1
0235 
0236     new=$(ls /sys/class/net)
0237 
0238     for netdev in $new; do
0239         for check in $old; do
0240             [ $netdev == $check ] && break
0241         done
0242 
0243         if [ $netdev != $check ]; then
0244             echo $netdev
0245             break
0246         fi
0247     done
0248 }
0249 
0250 ###
0251 ### Code start
0252 ###
0253 
0254 # Probe ethtool support
0255 ethtool -h | grep show-tunnels 2>&1 >/dev/null && HAS_ETHTOOL=y
0256 
0257 modprobe netdevsim
0258 
0259 # Basic test
0260 pfx="basic"
0261 
0262 for port in 0 1; do
0263     old_netdevs=$(ls /sys/class/net)
0264     if [ $port -eq 0 ]; then
0265         echo $NSIM_ID > /sys/bus/netdevsim/new_device
0266     else
0267         echo 1 > $NSIM_DEV_DFS/udp_ports_open_only
0268         echo 1 > $NSIM_DEV_DFS/udp_ports_sleep
0269         echo 1 > $NSIM_DEV_SYS/new_port
0270     fi
0271     NSIM_NETDEV=`get_netdev_name old_netdevs`
0272 
0273     msg="new NIC device created"
0274     exp0=( 0 0 0 0 )
0275     exp1=( 0 0 0 0 )
0276     check_tables
0277 
0278     msg="VxLAN v4 devices"
0279     exp0=( `mke 4789 1` 0 0 0 )
0280     new_vxlan vxlan0 4789 $NSIM_NETDEV
0281     new_vxlan vxlan1 4789 $NSIM_NETDEV
0282 
0283     msg="VxLAN v4 devices go down"
0284     exp0=( 0 0 0 0 )
0285     ifconfig vxlan1 down
0286     ifconfig vxlan0 down
0287     check_tables
0288 
0289     msg="VxLAN v6 devices"
0290     exp0=( `mke 4789 1` 0 0 0 )
0291     new_vxlan vxlanA 4789 $NSIM_NETDEV 6
0292 
0293     for ifc in vxlan0 vxlan1; do
0294         ifconfig $ifc up
0295     done
0296 
0297     new_vxlan vxlanB 4789 $NSIM_NETDEV 6
0298 
0299     msg="another VxLAN v6 devices"
0300     exp0=( `mke 4789 1` `mke 4790 1` 0 0 )
0301     new_vxlan vxlanC 4790 $NSIM_NETDEV 6
0302 
0303     msg="Geneve device"
0304     exp1=( `mke 6081 2` 0 0 0 )
0305     new_geneve gnv0 6081
0306 
0307     msg="NIC device goes down"
0308     ifconfig $NSIM_NETDEV down
0309     if [ $port -eq 1 ]; then
0310         exp0=( 0 0 0 0 )
0311         exp1=( 0 0 0 0 )
0312     fi
0313     check_tables
0314     msg="NIC device goes up again"
0315     ifconfig $NSIM_NETDEV up
0316     exp0=( `mke 4789 1` `mke 4790 1` 0 0 )
0317     exp1=( `mke 6081 2` 0 0 0 )
0318     check_tables
0319 
0320     cleanup_tuns
0321 
0322     msg="tunnels destroyed"
0323     exp0=( 0 0 0 0 )
0324     exp1=( 0 0 0 0 )
0325     check_tables
0326 
0327     modprobe -r geneve
0328     modprobe -r vxlan
0329     modprobe -r udp_tunnel
0330 
0331     check_tables
0332 done
0333 
0334 modprobe -r netdevsim
0335 
0336 # Module tests
0337 pfx="module tests"
0338 
0339 if modinfo netdevsim | grep udp_tunnel >/dev/null; then
0340     err_cnt "netdevsim depends on udp_tunnel"
0341 else
0342     pass_cnt
0343 fi
0344 
0345 modprobe netdevsim
0346 
0347 old_netdevs=$(ls /sys/class/net)
0348 port=0
0349 echo $NSIM_ID > /sys/bus/netdevsim/new_device
0350 echo 0 > $NSIM_DEV_SYS/del_port
0351 echo 1000 > $NSIM_DEV_DFS/udp_ports_sleep
0352 echo 0 > $NSIM_DEV_SYS/new_port
0353 NSIM_NETDEV=`get_netdev_name old_netdevs`
0354 
0355 msg="create VxLANs"
0356 exp0=( 0 0 0 0 ) # sleep is longer than out wait
0357 new_vxlan vxlan0 10000 $NSIM_NETDEV
0358 
0359 modprobe -r vxlan
0360 modprobe -r udp_tunnel
0361 
0362 msg="remove tunnels"
0363 exp0=( 0 0 0 0 )
0364 check_tables
0365 
0366 msg="create VxLANs"
0367 exp0=( 0 0 0 0 ) # sleep is longer than out wait
0368 new_vxlan vxlan0 10000 $NSIM_NETDEV
0369 
0370 exp0=( 0 0 0 0 )
0371 
0372 modprobe -r netdevsim
0373 modprobe netdevsim
0374 
0375 # Overflow the table
0376 
0377 function overflow_table0 {
0378     local pfx=$1
0379 
0380     msg="create VxLANs 1/5"
0381     exp0=( `mke 10000 1` 0 0 0 )
0382     new_vxlan vxlan0 10000 $NSIM_NETDEV
0383 
0384     msg="create VxLANs 2/5"
0385     exp0=( `mke 10000 1` `mke 10001 1` 0 0 )
0386     new_vxlan vxlan1 10001 $NSIM_NETDEV
0387 
0388     msg="create VxLANs 3/5"
0389     exp0=( `mke 10000 1` `mke 10001 1` `mke 10002 1` 0 )
0390     new_vxlan vxlan2 10002 $NSIM_NETDEV
0391 
0392     msg="create VxLANs 4/5"
0393     exp0=( `mke 10000 1` `mke 10001 1` `mke 10002 1` `mke 10003 1` )
0394     new_vxlan vxlan3 10003 $NSIM_NETDEV
0395 
0396     msg="create VxLANs 5/5"
0397     new_vxlan vxlan4 10004 $NSIM_NETDEV
0398 }
0399 
0400 function overflow_table1 {
0401     local pfx=$1
0402 
0403     msg="create GENEVE 1/5"
0404     exp1=( `mke 20000 2` 0 0 0 )
0405     new_geneve gnv0 20000
0406 
0407     msg="create GENEVE 2/5"
0408     exp1=( `mke 20000 2` `mke 20001 2` 0 0 )
0409     new_geneve gnv1 20001
0410 
0411     msg="create GENEVE 3/5"
0412     exp1=( `mke 20000 2` `mke 20001 2` `mke 20002 2` 0 )
0413     new_geneve gnv2 20002
0414 
0415     msg="create GENEVE 4/5"
0416     exp1=( `mke 20000 2` `mke 20001 2` `mke 20002 2` `mke 20003 2` )
0417     new_geneve gnv3 20003
0418 
0419     msg="create GENEVE 5/5"
0420     new_geneve gnv4 20004
0421 }
0422 
0423 echo $NSIM_ID > /sys/bus/netdevsim/new_device
0424 echo 0 > $NSIM_DEV_SYS/del_port
0425 
0426 for port in 0 1; do
0427     if [ $port -ne 0 ]; then
0428         echo 1 > $NSIM_DEV_DFS/udp_ports_open_only
0429         echo 1 > $NSIM_DEV_DFS/udp_ports_sleep
0430     fi
0431 
0432     echo $port > $NSIM_DEV_SYS/new_port
0433     ifconfig $NSIM_NETDEV up
0434 
0435     overflow_table0 "overflow NIC table"
0436     overflow_table1 "overflow NIC table"
0437 
0438     msg="replace VxLAN in overflow table"
0439     exp0=( `mke 10000 1` `mke 10004 1` `mke 10002 1` `mke 10003 1` )
0440     del_dev vxlan1
0441 
0442     msg="vacate VxLAN in overflow table"
0443     exp0=( `mke 10000 1` `mke 10004 1` 0 `mke 10003 1` )
0444     del_dev vxlan2
0445 
0446     msg="replace GENEVE in overflow table"
0447     exp1=( `mke 20000 2` `mke 20004 2` `mke 20002 2` `mke 20003 2` )
0448     del_dev gnv1
0449 
0450     msg="vacate GENEVE in overflow table"
0451     exp1=( `mke 20000 2` `mke 20004 2` 0 `mke 20003 2` )
0452     del_dev gnv2
0453 
0454     msg="table sharing - share"
0455     exp1=( `mke 20000 2` `mke 20004 2` `mke 30001 4` `mke 20003 2` )
0456     new_vxlan vxlanG0 30001 $NSIM_NETDEV 4 "gpe external"
0457 
0458     msg="table sharing - overflow"
0459     new_vxlan vxlanG1 30002 $NSIM_NETDEV 4 "gpe external"
0460     msg="table sharing - overflow v6"
0461     new_vxlan vxlanG2 30002 $NSIM_NETDEV 6 "gpe external"
0462 
0463     exp1=( `mke 20000 2` `mke 30002 4` `mke 30001 4` `mke 20003 2` )
0464     del_dev gnv4
0465 
0466     msg="destroy NIC"
0467     echo $port > $NSIM_DEV_SYS/del_port
0468 
0469     cleanup_tuns
0470     exp0=( 0 0 0 0 )
0471     exp1=( 0 0 0 0 )
0472 done
0473 
0474 cleanup_nsim
0475 
0476 # Sync all
0477 pfx="sync all"
0478 
0479 echo $NSIM_ID > /sys/bus/netdevsim/new_device
0480 echo 0 > $NSIM_DEV_SYS/del_port
0481 echo 1 > $NSIM_DEV_DFS/udp_ports_sync_all
0482 
0483 for port in 0 1; do
0484     if [ $port -ne 0 ]; then
0485         echo 1 > $NSIM_DEV_DFS/udp_ports_open_only
0486         echo 1 > $NSIM_DEV_DFS/udp_ports_sleep
0487     fi
0488 
0489     echo $port > $NSIM_DEV_SYS/new_port
0490     ifconfig $NSIM_NETDEV up
0491 
0492     overflow_table0 "overflow NIC table"
0493     overflow_table1 "overflow NIC table"
0494 
0495     msg="replace VxLAN in overflow table"
0496     exp0=( `mke 10000 1` `mke 10004 1` `mke 10002 1` `mke 10003 1` )
0497     del_dev vxlan1
0498 
0499     msg="vacate VxLAN in overflow table"
0500     exp0=( `mke 10000 1` `mke 10004 1` 0 `mke 10003 1` )
0501     del_dev vxlan2
0502 
0503     msg="replace GENEVE in overflow table"
0504     exp1=( `mke 20000 2` `mke 20004 2` `mke 20002 2` `mke 20003 2` )
0505     del_dev gnv1
0506 
0507     msg="vacate GENEVE in overflow table"
0508     exp1=( `mke 20000 2` `mke 20004 2` 0 `mke 20003 2` )
0509     del_dev gnv2
0510 
0511     msg="table sharing - share"
0512     exp1=( `mke 20000 2` `mke 20004 2` `mke 30001 4` `mke 20003 2` )
0513     new_vxlan vxlanG0 30001 $NSIM_NETDEV 4 "gpe external"
0514 
0515     msg="table sharing - overflow"
0516     new_vxlan vxlanG1 30002 $NSIM_NETDEV 4 "gpe external"
0517     msg="table sharing - overflow v6"
0518     new_vxlan vxlanG2 30002 $NSIM_NETDEV 6 "gpe external"
0519 
0520     exp1=( `mke 20000 2` `mke 30002 4` `mke 30001 4` `mke 20003 2` )
0521     del_dev gnv4
0522 
0523     msg="destroy NIC"
0524     echo $port > $NSIM_DEV_SYS/del_port
0525 
0526     cleanup_tuns
0527     exp0=( 0 0 0 0 )
0528     exp1=( 0 0 0 0 )
0529 done
0530 
0531 cleanup_nsim
0532 
0533 # Destroy full NIC
0534 pfx="destroy full"
0535 
0536 echo $NSIM_ID > /sys/bus/netdevsim/new_device
0537 echo 0 > $NSIM_DEV_SYS/del_port
0538 
0539 for port in 0 1; do
0540     if [ $port -ne 0 ]; then
0541         echo 1 > $NSIM_DEV_DFS/udp_ports_open_only
0542         echo 1 > $NSIM_DEV_DFS/udp_ports_sleep
0543     fi
0544 
0545     echo $port > $NSIM_DEV_SYS/new_port
0546     ifconfig $NSIM_NETDEV up
0547 
0548     overflow_table0 "destroy NIC"
0549     overflow_table1 "destroy NIC"
0550 
0551     msg="destroy NIC"
0552     echo $port > $NSIM_DEV_SYS/del_port
0553 
0554     cleanup_tuns
0555     exp0=( 0 0 0 0 )
0556     exp1=( 0 0 0 0 )
0557 done
0558 
0559 cleanup_nsim
0560 
0561 # IPv4 only
0562 pfx="IPv4 only"
0563 
0564 echo $NSIM_ID > /sys/bus/netdevsim/new_device
0565 echo 0 > $NSIM_DEV_SYS/del_port
0566 echo 1 > $NSIM_DEV_DFS/udp_ports_ipv4_only
0567 
0568 for port in 0 1; do
0569     if [ $port -ne 0 ]; then
0570         echo 1 > $NSIM_DEV_DFS/udp_ports_open_only
0571         echo 1 > $NSIM_DEV_DFS/udp_ports_sleep
0572     fi
0573 
0574     echo $port > $NSIM_DEV_SYS/new_port
0575     ifconfig $NSIM_NETDEV up
0576 
0577     msg="create VxLANs v6"
0578     new_vxlan vxlanA0 10000 $NSIM_NETDEV 6
0579 
0580     msg="create VxLANs v6"
0581     new_vxlan vxlanA1 10000 $NSIM_NETDEV 6
0582 
0583     ip link set dev vxlanA0 down
0584     ip link set dev vxlanA0 up
0585     check_tables
0586 
0587     msg="create VxLANs v4"
0588     exp0=( `mke 10000 1` 0 0 0 )
0589     new_vxlan vxlan0 10000 $NSIM_NETDEV
0590 
0591     msg="down VxLANs v4"
0592     exp0=( 0 0 0 0 )
0593     ip link set dev vxlan0 down
0594     check_tables
0595 
0596     msg="up VxLANs v4"
0597     exp0=( `mke 10000 1` 0 0 0 )
0598     ip link set dev vxlan0 up
0599     check_tables
0600 
0601     msg="destroy VxLANs v4"
0602     exp0=( 0 0 0 0 )
0603     del_dev vxlan0
0604 
0605     msg="recreate VxLANs v4"
0606     exp0=( `mke 10000 1` 0 0 0 )
0607     new_vxlan vxlan0 10000 $NSIM_NETDEV
0608 
0609     del_dev vxlanA0
0610     del_dev vxlanA1
0611 
0612     msg="destroy NIC"
0613     echo $port > $NSIM_DEV_SYS/del_port
0614 
0615     cleanup_tuns
0616     exp0=( 0 0 0 0 )
0617     exp1=( 0 0 0 0 )
0618 done
0619 
0620 cleanup_nsim
0621 
0622 # Failures
0623 pfx="error injection"
0624 
0625 echo $NSIM_ID > /sys/bus/netdevsim/new_device
0626 echo 0 > $NSIM_DEV_SYS/del_port
0627 
0628 for port in 0 1; do
0629     if [ $port -ne 0 ]; then
0630         echo 1 > $NSIM_DEV_DFS/udp_ports_open_only
0631         echo 1 > $NSIM_DEV_DFS/udp_ports_sleep
0632     fi
0633 
0634     echo $port > $NSIM_DEV_SYS/new_port
0635     ifconfig $NSIM_NETDEV up
0636 
0637     echo 110 > $NSIM_DEV_DFS/ports/$port/udp_ports_inject_error
0638 
0639     msg="1 - create VxLANs v6"
0640     exp0=( 0 0 0 0 )
0641     new_vxlan vxlanA0 10000 $NSIM_NETDEV 6
0642 
0643     msg="1 - create VxLANs v4"
0644     exp0=( `mke 10000 1` 0 0 0 )
0645     new_vxlan vxlan0 10000 $NSIM_NETDEV
0646 
0647     msg="1 - remove VxLANs v4"
0648     del_dev vxlan0
0649 
0650     msg="1 - remove VxLANs v6"
0651     exp0=( 0 0 0 0 )
0652     del_dev vxlanA0
0653 
0654     msg="2 - create GENEVE"
0655     exp1=( `mke 20000 2` 0 0 0 )
0656     new_geneve gnv0 20000
0657 
0658     msg="2 - destroy GENEVE"
0659     echo 2 > $NSIM_DEV_DFS/ports/$port/udp_ports_inject_error
0660     exp1=( `mke 20000 2` 0 0 0 )
0661     del_dev gnv0
0662 
0663     msg="2 - create second GENEVE"
0664     exp1=( 0 `mke 20001 2` 0 0 )
0665     new_geneve gnv0 20001
0666 
0667     msg="destroy NIC"
0668     echo $port > $NSIM_DEV_SYS/del_port
0669 
0670     cleanup_tuns
0671     exp0=( 0 0 0 0 )
0672     exp1=( 0 0 0 0 )
0673 done
0674 
0675 cleanup_nsim
0676 
0677 # netdev flags
0678 pfx="netdev flags"
0679 
0680 echo $NSIM_ID > /sys/bus/netdevsim/new_device
0681 echo 0 > $NSIM_DEV_SYS/del_port
0682 
0683 for port in 0 1; do
0684     if [ $port -ne 0 ]; then
0685         echo 1 > $NSIM_DEV_DFS/udp_ports_open_only
0686         echo 1 > $NSIM_DEV_DFS/udp_ports_sleep
0687     fi
0688 
0689     echo $port > $NSIM_DEV_SYS/new_port
0690     ifconfig $NSIM_NETDEV up
0691 
0692     msg="create VxLANs v6"
0693     exp0=( `mke 10000 1` 0 0 0 )
0694     new_vxlan vxlanA0 10000 $NSIM_NETDEV 6
0695 
0696     msg="create VxLANs v4"
0697     new_vxlan vxlan0 10000 $NSIM_NETDEV
0698 
0699     msg="turn off"
0700     exp0=( 0 0 0 0 )
0701     ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload off
0702     check_tables
0703 
0704     msg="turn on"
0705     exp0=( `mke 10000 1` 0 0 0 )
0706     ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload on
0707     check_tables
0708 
0709     msg="remove both"
0710     del_dev vxlanA0
0711     exp0=( 0 0 0 0 )
0712     del_dev vxlan0
0713     check_tables
0714 
0715     ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload off
0716 
0717     msg="create VxLANs v4 - off"
0718     exp0=( 0 0 0 0 )
0719     new_vxlan vxlan0 10000 $NSIM_NETDEV
0720 
0721     msg="created off - turn on"
0722     exp0=( `mke 10000 1` 0 0 0 )
0723     ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload on
0724     check_tables
0725 
0726     msg="destroy NIC"
0727     echo $port > $NSIM_DEV_SYS/del_port
0728 
0729     cleanup_tuns
0730     exp0=( 0 0 0 0 )
0731     exp1=( 0 0 0 0 )
0732 done
0733 
0734 cleanup_nsim
0735 
0736 # device initiated reset
0737 pfx="reset notification"
0738 
0739 echo $NSIM_ID > /sys/bus/netdevsim/new_device
0740 echo 0 > $NSIM_DEV_SYS/del_port
0741 
0742 for port in 0 1; do
0743     if [ $port -ne 0 ]; then
0744         echo 1 > $NSIM_DEV_DFS/udp_ports_open_only
0745         echo 1 > $NSIM_DEV_DFS/udp_ports_sleep
0746     fi
0747 
0748     echo $port > $NSIM_DEV_SYS/new_port
0749     ifconfig $NSIM_NETDEV up
0750 
0751     msg="create VxLANs v6"
0752     exp0=( `mke 10000 1` 0 0 0 )
0753     new_vxlan vxlanA0 10000 $NSIM_NETDEV 6
0754 
0755     msg="create VxLANs v4"
0756     new_vxlan vxlan0 10000 $NSIM_NETDEV
0757 
0758     echo 1 > $NSIM_DEV_DFS/ports/$port/udp_ports_reset
0759     check_tables
0760 
0761     msg="NIC device goes down"
0762     ifconfig $NSIM_NETDEV down
0763     if [ $port -eq 1 ]; then
0764         exp0=( 0 0 0 0 )
0765         exp1=( 0 0 0 0 )
0766     fi
0767     check_tables
0768 
0769     echo 1 > $NSIM_DEV_DFS/ports/$port/udp_ports_reset
0770     check_tables
0771 
0772     msg="NIC device goes up again"
0773     ifconfig $NSIM_NETDEV up
0774     exp0=( `mke 10000 1` 0 0 0 )
0775     check_tables
0776 
0777     msg="remove both"
0778     del_dev vxlanA0
0779     exp0=( 0 0 0 0 )
0780     del_dev vxlan0
0781     check_tables
0782 
0783     echo 1 > $NSIM_DEV_DFS/ports/$port/udp_ports_reset
0784     check_tables
0785 
0786     msg="destroy NIC"
0787     echo $port > $NSIM_DEV_SYS/del_port
0788 
0789     cleanup_tuns
0790     exp0=( 0 0 0 0 )
0791     exp1=( 0 0 0 0 )
0792 done
0793 
0794 cleanup_nsim
0795 
0796 # shared port tables
0797 pfx="table sharing"
0798 
0799 echo $NSIM_ID > /sys/bus/netdevsim/new_device
0800 echo 0 > $NSIM_DEV_SYS/del_port
0801 
0802 echo 0 > $NSIM_DEV_DFS/udp_ports_open_only
0803 echo 1 > $NSIM_DEV_DFS/udp_ports_sleep
0804 echo 1 > $NSIM_DEV_DFS/udp_ports_shared
0805 
0806 old_netdevs=$(ls /sys/class/net)
0807 echo 1 > $NSIM_DEV_SYS/new_port
0808 NSIM_NETDEV=`get_netdev_name old_netdevs`
0809 old_netdevs=$(ls /sys/class/net)
0810 echo 2 > $NSIM_DEV_SYS/new_port
0811 NSIM_NETDEV2=`get_netdev_name old_netdevs`
0812 
0813 msg="VxLAN v4 devices"
0814 exp0=( `mke 4789 1` 0 0 0 )
0815 exp1=( 0 0 0 0 )
0816 new_vxlan vxlan0 4789 $NSIM_NETDEV
0817 new_vxlan vxlan1 4789 $NSIM_NETDEV2
0818 
0819 msg="VxLAN v4 devices go down"
0820 exp0=( 0 0 0 0 )
0821 ifconfig vxlan1 down
0822 ifconfig vxlan0 down
0823 check_tables
0824 
0825 for ifc in vxlan0 vxlan1; do
0826     ifconfig $ifc up
0827 done
0828 
0829 msg="VxLAN v6 device"
0830 exp0=( `mke 4789 1` `mke 4790 1` 0 0 )
0831 new_vxlan vxlanC 4790 $NSIM_NETDEV 6
0832 
0833 msg="Geneve device"
0834 exp1=( `mke 6081 2` 0 0 0 )
0835 new_geneve gnv0 6081
0836 
0837 msg="NIC device goes down"
0838 ifconfig $NSIM_NETDEV down
0839 check_tables
0840 
0841 msg="NIC device goes up again"
0842 ifconfig $NSIM_NETDEV up
0843 check_tables
0844 
0845 for i in `seq 2`; do
0846     msg="turn feature off - 1, rep $i"
0847     ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload off
0848     check_tables
0849 
0850     msg="turn feature off - 2, rep $i"
0851     exp0=( 0 0 0 0 )
0852     exp1=( 0 0 0 0 )
0853     ethtool -K $NSIM_NETDEV2 rx-udp_tunnel-port-offload off
0854     check_tables
0855 
0856     msg="turn feature on - 1, rep $i"
0857     exp0=( `mke 4789 1` `mke 4790 1` 0 0 )
0858     exp1=( `mke 6081 2` 0 0 0 )
0859     ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload on
0860     check_tables
0861 
0862     msg="turn feature on - 2, rep $i"
0863     ethtool -K $NSIM_NETDEV2 rx-udp_tunnel-port-offload on
0864     check_tables
0865 done
0866 
0867 msg="tunnels destroyed 1"
0868 cleanup_tuns
0869 exp0=( 0 0 0 0 )
0870 exp1=( 0 0 0 0 )
0871 check_tables
0872 
0873 overflow_table0 "overflow NIC table"
0874 
0875 msg="re-add a port"
0876 
0877 echo 2 > $NSIM_DEV_SYS/del_port
0878 echo 2 > $NSIM_DEV_SYS/new_port
0879 check_tables
0880 
0881 msg="replace VxLAN in overflow table"
0882 exp0=( `mke 10000 1` `mke 10004 1` `mke 10002 1` `mke 10003 1` )
0883 del_dev vxlan1
0884 
0885 msg="vacate VxLAN in overflow table"
0886 exp0=( `mke 10000 1` `mke 10004 1` 0 `mke 10003 1` )
0887 del_dev vxlan2
0888 
0889 echo 1 > $NSIM_DEV_DFS/ports/$port/udp_ports_reset
0890 check_tables
0891 
0892 msg="tunnels destroyed 2"
0893 cleanup_tuns
0894 exp0=( 0 0 0 0 )
0895 exp1=( 0 0 0 0 )
0896 check_tables
0897 
0898 echo 1 > $NSIM_DEV_SYS/del_port
0899 echo 2 > $NSIM_DEV_SYS/del_port
0900 
0901 cleanup_nsim
0902 
0903 # Static IANA port
0904 pfx="static IANA vxlan"
0905 
0906 echo $NSIM_ID > /sys/bus/netdevsim/new_device
0907 echo 0 > $NSIM_DEV_SYS/del_port
0908 
0909 echo 1 > $NSIM_DEV_DFS/udp_ports_static_iana_vxlan
0910 STATIC_ENTRIES=( `mke 4789 1` )
0911 
0912 port=1
0913 old_netdevs=$(ls /sys/class/net)
0914 echo $port > $NSIM_DEV_SYS/new_port
0915 NSIM_NETDEV=`get_netdev_name old_netdevs`
0916 
0917 msg="check empty"
0918 exp0=( 0 0 0 0 )
0919 exp1=( 0 0 0 0 )
0920 check_tables
0921 
0922 msg="add on static port"
0923 new_vxlan vxlan0 4789 $NSIM_NETDEV
0924 new_vxlan vxlan1 4789 $NSIM_NETDEV
0925 
0926 msg="add on different port"
0927 exp0=( `mke 4790 1` 0 0 0 )
0928 new_vxlan vxlan2 4790 $NSIM_NETDEV
0929 
0930 cleanup_tuns
0931 
0932 msg="tunnels destroyed"
0933 exp0=( 0 0 0 0 )
0934 exp1=( 0 0 0 0 )
0935 check_tables
0936 
0937 msg="different type"
0938 new_geneve gnv0 4789
0939 
0940 cleanup_tuns
0941 cleanup_nsim
0942 
0943 # END
0944 
0945 modprobe -r netdevsim
0946 
0947 if [ $num_errors -eq 0 ]; then
0948     echo "PASSED all $num_cases checks"
0949 else
0950     echo "FAILED $num_errors/$num_cases checks"
0951 fi
0952 
0953 exit $EXIT_STATUS