0001
0002
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
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 [ ${
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
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
0252
0253
0254
0255 ethtool -h | grep show-tunnels 2>&1 >/dev/null && HAS_ETHTOOL=y
0256
0257 modprobe netdevsim
0258
0259
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
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 )
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 )
0368 new_vxlan vxlan0 10000 $NSIM_NETDEV
0369
0370 exp0=( 0 0 0 0 )
0371
0372 modprobe -r netdevsim
0373 modprobe netdevsim
0374
0375
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
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
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
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
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
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
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
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
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
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