1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0-only 3 4VNI_GEN=$RANDOM 5NSIM_ID=$((RANDOM % 1024)) 6NSIM_DEV_SYS=/sys/bus/netdevsim/devices/netdevsim$NSIM_ID 7NSIM_DEV_DFS=/sys/kernel/debug/netdevsim/netdevsim$NSIM_ID 8NSIM_NETDEV= 9HAS_ETHTOOL= 10STATIC_ENTRIES= 11EXIT_STATUS=0 12num_cases=0 13num_errors=0 14 15clean_up_devs=( ) 16 17function err_cnt { 18 echo "ERROR:" $@ 19 EXIT_STATUS=1 20 ((num_errors++)) 21 ((num_cases++)) 22} 23 24function pass_cnt { 25 ((num_cases++)) 26} 27 28function cleanup_tuns { 29 for dev in "${clean_up_devs[@]}"; do 30 [ -e /sys/class/net/$dev ] && ip link del dev $dev 31 done 32 clean_up_devs=( ) 33} 34 35function cleanup_nsim { 36 if [ -e $NSIM_DEV_SYS ]; then 37 echo $NSIM_ID > /sys/bus/netdevsim/del_device 38 fi 39} 40 41function cleanup { 42 cleanup_tuns 43 cleanup_nsim 44} 45 46trap cleanup EXIT 47 48function new_vxlan { 49 local dev=$1 50 local dstport=$2 51 local lower=$3 52 local ipver=$4 53 local flags=$5 54 55 local group ipfl 56 57 [ "$ipver" != '6' ] && group=239.1.1.1 || group=fff1::1 58 [ "$ipver" != '6' ] || ipfl="-6" 59 60 [[ ! "$flags" =~ "external" ]] && flags="$flags id $((VNI_GEN++))" 61 62 ip $ipfl link add $dev type vxlan \ 63 group $group \ 64 dev $lower \ 65 dstport $dstport \ 66 $flags 67 68 ip link set dev $dev up 69 70 clean_up_devs=("${clean_up_devs[@]}" $dev) 71 72 check_tables 73} 74 75function new_geneve { 76 local dev=$1 77 local dstport=$2 78 local ipver=$3 79 local flags=$4 80 81 local group ipfl 82 83 [ "$ipver" != '6' ] && remote=1.1.1.2 || group=::2 84 [ "$ipver" != '6' ] || ipfl="-6" 85 86 [[ ! "$flags" =~ "external" ]] && flags="$flags vni $((VNI_GEN++))" 87 88 ip $ipfl link add $dev type geneve \ 89 remote $remote \ 90 dstport $dstport \ 91 $flags 92 93 ip link set dev $dev up 94 95 clean_up_devs=("${clean_up_devs[@]}" $dev) 96 97 check_tables 98} 99 100function del_dev { 101 local dev=$1 102 103 ip link del dev $dev 104 check_tables 105} 106 107# Helpers for netdevsim port/type encoding 108function mke { 109 local port=$1 110 local type=$2 111 112 echo $((port << 16 | type)) 113} 114 115function pre { 116 local val=$1 117 118 echo -e "port: $((val >> 16))\ttype: $((val & 0xffff))" 119} 120 121function pre_ethtool { 122 local val=$1 123 local port=$((val >> 16)) 124 local type=$((val & 0xffff)) 125 126 case $type in 127 1) 128 type_name="vxlan" 129 ;; 130 2) 131 type_name="geneve" 132 ;; 133 4) 134 type_name="vxlan-gpe" 135 ;; 136 *) 137 type_name="bit X" 138 ;; 139 esac 140 141 echo "port $port, $type_name" 142} 143 144function check_table { 145 local path=$NSIM_DEV_DFS/ports/$port/udp_ports/table$1 146 local -n expected=$2 147 local last=$3 148 149 read -a have < $path 150 151 if [ ${#expected[@]} -ne ${#have[@]} ]; then 152 echo "check_table: BAD NUMBER OF ITEMS" 153 return 0 154 fi 155 156 for i in "${!expected[@]}"; do 157 if [ -n "$HAS_ETHTOOL" -a ${expected[i]} -ne 0 ]; then 158 pp_expected=`pre_ethtool ${expected[i]}` 159 ethtool --show-tunnels $NSIM_NETDEV | grep "$pp_expected" >/dev/null 160 if [ $? -ne 0 -a $last -ne 0 ]; then 161 err_cnt "ethtool table $1 on port $port: $pfx - $msg" 162 echo " check_table: ethtool does not contain '$pp_expected'" 163 ethtool --show-tunnels $NSIM_NETDEV 164 return 0 165 166 fi 167 fi 168 169 if [ ${expected[i]} != ${have[i]} ]; then 170 if [ $last -ne 0 ]; then 171 err_cnt "table $1 on port $port: $pfx - $msg" 172 echo " check_table: wrong entry $i" 173 echo " expected: `pre ${expected[i]}`" 174 echo " have: `pre ${have[i]}`" 175 return 0 176 fi 177 return 1 178 fi 179 done 180 181 pass_cnt 182 return 0 183} 184 185function check_tables { 186 # Need retries in case we have workqueue making the changes 187 local retries=10 188 189 while ! check_table 0 exp0 $((retries == 0)); do 190 sleep 0.02 191 ((retries--)) 192 done 193 while ! check_table 1 exp1 $((retries == 0)); do 194 sleep 0.02 195 ((retries--)) 196 done 197 198 if [ -n "$HAS_ETHTOOL" -a -n "${STATIC_ENTRIES[0]}" ]; then 199 fail=0 200 for i in "${!STATIC_ENTRIES[@]}"; do 201 pp_expected=`pre_ethtool ${STATIC_ENTRIES[i]}` 202 cnt=$(ethtool --show-tunnels $NSIM_NETDEV | grep -c "$pp_expected") 203 if [ $cnt -ne 1 ]; then 204 err_cnt "ethtool static entry: $pfx - $msg" 205 echo " check_table: ethtool does not contain '$pp_expected'" 206 ethtool --show-tunnels $NSIM_NETDEV 207 fail=1 208 fi 209 done 210 [ $fail == 0 ] && pass_cnt 211 fi 212} 213 214function print_table { 215 local path=$NSIM_DEV_DFS/ports/$port/udp_ports/table$1 216 read -a have < $path 217 218 tree $NSIM_DEV_DFS/ 219 220 echo "Port $port table $1:" 221 222 for i in "${!have[@]}"; do 223 echo " `pre ${have[i]}`" 224 done 225 226} 227 228function print_tables { 229 print_table 0 230 print_table 1 231} 232 233function get_netdev_name { 234 local -n old=$1 235 236 udevadm settle 237 new=$(ls /sys/class/net) 238 239 for netdev in $new; do 240 for check in $old; do 241 [ $netdev == $check ] && break 242 done 243 244 if [ $netdev != $check ]; then 245 echo $netdev 246 break 247 fi 248 done 249} 250 251### 252### Code start 253### 254 255# Probe ethtool support 256ethtool -h | grep show-tunnels 2>&1 >/dev/null && HAS_ETHTOOL=y 257 258modprobe netdevsim 259 260# Basic test 261pfx="basic" 262 263for port in 0 1; do 264 old_netdevs=$(ls /sys/class/net) 265 if [ $port -eq 0 ]; then 266 echo $NSIM_ID > /sys/bus/netdevsim/new_device 267 else 268 echo 1 > $NSIM_DEV_DFS/udp_ports_open_only 269 echo 1 > $NSIM_DEV_SYS/new_port 270 fi 271 NSIM_NETDEV=`get_netdev_name old_netdevs` 272 ip link set dev $NSIM_NETDEV up 273 274 msg="new NIC device created" 275 exp0=( 0 0 0 0 ) 276 exp1=( 0 0 0 0 ) 277 check_tables 278 279 msg="VxLAN v4 devices" 280 exp0=( `mke 4789 1` 0 0 0 ) 281 new_vxlan vxlan0 4789 $NSIM_NETDEV 282 new_vxlan vxlan1 4789 $NSIM_NETDEV 283 284 msg="VxLAN v4 devices go down" 285 exp0=( 0 0 0 0 ) 286 ip link set dev vxlan1 down 287 ip link set dev vxlan0 down 288 check_tables 289 290 msg="VxLAN v6 devices" 291 exp0=( `mke 4789 1` 0 0 0 ) 292 new_vxlan vxlanA 4789 $NSIM_NETDEV 6 293 294 for ifc in vxlan0 vxlan1; do 295 ip link set dev $ifc up 296 done 297 298 new_vxlan vxlanB 4789 $NSIM_NETDEV 6 299 300 msg="another VxLAN v6 devices" 301 exp0=( `mke 4789 1` `mke 4790 1` 0 0 ) 302 new_vxlan vxlanC 4790 $NSIM_NETDEV 6 303 304 msg="Geneve device" 305 exp1=( `mke 6081 2` 0 0 0 ) 306 new_geneve gnv0 6081 307 308 msg="NIC device goes down" 309 ip link set dev $NSIM_NETDEV down 310 if [ $port -eq 1 ]; then 311 exp0=( 0 0 0 0 ) 312 exp1=( 0 0 0 0 ) 313 fi 314 check_tables 315 msg="NIC device goes up again" 316 ip link set dev $NSIM_NETDEV up 317 exp0=( `mke 4789 1` `mke 4790 1` 0 0 ) 318 exp1=( `mke 6081 2` 0 0 0 ) 319 check_tables 320 321 cleanup_tuns 322 323 msg="tunnels destroyed" 324 exp0=( 0 0 0 0 ) 325 exp1=( 0 0 0 0 ) 326 check_tables 327 328 modprobe -r geneve 329 modprobe -r vxlan 330 modprobe -r udp_tunnel 331 332 check_tables 333done 334 335modprobe -r netdevsim 336 337# Module tests 338pfx="module tests" 339 340if modinfo netdevsim | grep udp_tunnel >/dev/null; then 341 err_cnt "netdevsim depends on udp_tunnel" 342else 343 pass_cnt 344fi 345 346modprobe netdevsim 347 348old_netdevs=$(ls /sys/class/net) 349port=0 350echo $NSIM_ID > /sys/bus/netdevsim/new_device 351echo 0 > $NSIM_DEV_SYS/del_port 352echo 0 > $NSIM_DEV_SYS/new_port 353NSIM_NETDEV=`get_netdev_name old_netdevs` 354 355msg="create VxLANs" 356exp0=( `mke 10000 1` 0 0 0 ) 357new_vxlan vxlan0 10000 $NSIM_NETDEV 358 359exp0=( 0 0 0 0 ) 360 361modprobe -r netdevsim 362modprobe netdevsim 363 364# Overflow the table 365 366function overflow_table0 { 367 local pfx=$1 368 369 msg="create VxLANs 1/5" 370 exp0=( `mke 10000 1` 0 0 0 ) 371 new_vxlan vxlan0 10000 $NSIM_NETDEV 372 373 msg="create VxLANs 2/5" 374 exp0=( `mke 10000 1` `mke 10001 1` 0 0 ) 375 new_vxlan vxlan1 10001 $NSIM_NETDEV 376 377 msg="create VxLANs 3/5" 378 exp0=( `mke 10000 1` `mke 10001 1` `mke 10002 1` 0 ) 379 new_vxlan vxlan2 10002 $NSIM_NETDEV 380 381 msg="create VxLANs 4/5" 382 exp0=( `mke 10000 1` `mke 10001 1` `mke 10002 1` `mke 10003 1` ) 383 new_vxlan vxlan3 10003 $NSIM_NETDEV 384 385 msg="create VxLANs 5/5" 386 new_vxlan vxlan4 10004 $NSIM_NETDEV 387} 388 389function overflow_table1 { 390 local pfx=$1 391 392 msg="create GENEVE 1/5" 393 exp1=( `mke 20000 2` 0 0 0 ) 394 new_geneve gnv0 20000 395 396 msg="create GENEVE 2/5" 397 exp1=( `mke 20000 2` `mke 20001 2` 0 0 ) 398 new_geneve gnv1 20001 399 400 msg="create GENEVE 3/5" 401 exp1=( `mke 20000 2` `mke 20001 2` `mke 20002 2` 0 ) 402 new_geneve gnv2 20002 403 404 msg="create GENEVE 4/5" 405 exp1=( `mke 20000 2` `mke 20001 2` `mke 20002 2` `mke 20003 2` ) 406 new_geneve gnv3 20003 407 408 msg="create GENEVE 5/5" 409 new_geneve gnv4 20004 410} 411 412echo $NSIM_ID > /sys/bus/netdevsim/new_device 413echo 0 > $NSIM_DEV_SYS/del_port 414 415for port in 0 1; do 416 if [ $port -ne 0 ]; then 417 echo 1 > $NSIM_DEV_DFS/udp_ports_open_only 418 fi 419 420 echo $port > $NSIM_DEV_SYS/new_port 421 NSIM_NETDEV=`get_netdev_name old_netdevs` 422 ip link set dev $NSIM_NETDEV up 423 424 overflow_table0 "overflow NIC table" 425 overflow_table1 "overflow NIC table" 426 427 msg="replace VxLAN in overflow table" 428 exp0=( `mke 10000 1` `mke 10004 1` `mke 10002 1` `mke 10003 1` ) 429 del_dev vxlan1 430 431 msg="vacate VxLAN in overflow table" 432 exp0=( `mke 10000 1` `mke 10004 1` 0 `mke 10003 1` ) 433 del_dev vxlan2 434 435 msg="replace GENEVE in overflow table" 436 exp1=( `mke 20000 2` `mke 20004 2` `mke 20002 2` `mke 20003 2` ) 437 del_dev gnv1 438 439 msg="vacate GENEVE in overflow table" 440 exp1=( `mke 20000 2` `mke 20004 2` 0 `mke 20003 2` ) 441 del_dev gnv2 442 443 msg="table sharing - share" 444 exp1=( `mke 20000 2` `mke 20004 2` `mke 30001 4` `mke 20003 2` ) 445 new_vxlan vxlanG0 30001 $NSIM_NETDEV 4 "gpe external" 446 447 msg="table sharing - overflow" 448 new_vxlan vxlanG1 30002 $NSIM_NETDEV 4 "gpe external" 449 msg="table sharing - overflow v6" 450 new_vxlan vxlanG2 30002 $NSIM_NETDEV 6 "gpe external" 451 452 exp1=( `mke 20000 2` `mke 30002 4` `mke 30001 4` `mke 20003 2` ) 453 del_dev gnv4 454 455 msg="destroy NIC" 456 echo $port > $NSIM_DEV_SYS/del_port 457 458 cleanup_tuns 459 exp0=( 0 0 0 0 ) 460 exp1=( 0 0 0 0 ) 461done 462 463cleanup_nsim 464 465# Sync all 466pfx="sync all" 467 468echo $NSIM_ID > /sys/bus/netdevsim/new_device 469echo 0 > $NSIM_DEV_SYS/del_port 470echo 1 > $NSIM_DEV_DFS/udp_ports_sync_all 471 472for port in 0 1; do 473 if [ $port -ne 0 ]; then 474 echo 1 > $NSIM_DEV_DFS/udp_ports_open_only 475 fi 476 477 echo $port > $NSIM_DEV_SYS/new_port 478 NSIM_NETDEV=`get_netdev_name old_netdevs` 479 ip link set dev $NSIM_NETDEV up 480 481 overflow_table0 "overflow NIC table" 482 overflow_table1 "overflow NIC table" 483 484 msg="replace VxLAN in overflow table" 485 exp0=( `mke 10000 1` `mke 10004 1` `mke 10002 1` `mke 10003 1` ) 486 del_dev vxlan1 487 488 msg="vacate VxLAN in overflow table" 489 exp0=( `mke 10000 1` `mke 10004 1` 0 `mke 10003 1` ) 490 del_dev vxlan2 491 492 msg="replace GENEVE in overflow table" 493 exp1=( `mke 20000 2` `mke 20004 2` `mke 20002 2` `mke 20003 2` ) 494 del_dev gnv1 495 496 msg="vacate GENEVE in overflow table" 497 exp1=( `mke 20000 2` `mke 20004 2` 0 `mke 20003 2` ) 498 del_dev gnv2 499 500 msg="table sharing - share" 501 exp1=( `mke 20000 2` `mke 20004 2` `mke 30001 4` `mke 20003 2` ) 502 new_vxlan vxlanG0 30001 $NSIM_NETDEV 4 "gpe external" 503 504 msg="table sharing - overflow" 505 new_vxlan vxlanG1 30002 $NSIM_NETDEV 4 "gpe external" 506 msg="table sharing - overflow v6" 507 new_vxlan vxlanG2 30002 $NSIM_NETDEV 6 "gpe external" 508 509 exp1=( `mke 20000 2` `mke 30002 4` `mke 30001 4` `mke 20003 2` ) 510 del_dev gnv4 511 512 msg="destroy NIC" 513 echo $port > $NSIM_DEV_SYS/del_port 514 515 cleanup_tuns 516 exp0=( 0 0 0 0 ) 517 exp1=( 0 0 0 0 ) 518done 519 520cleanup_nsim 521 522# Destroy full NIC 523pfx="destroy full" 524 525echo $NSIM_ID > /sys/bus/netdevsim/new_device 526echo 0 > $NSIM_DEV_SYS/del_port 527 528for port in 0 1; do 529 if [ $port -ne 0 ]; then 530 echo 1 > $NSIM_DEV_DFS/udp_ports_open_only 531 fi 532 533 echo $port > $NSIM_DEV_SYS/new_port 534 NSIM_NETDEV=`get_netdev_name old_netdevs` 535 ip link set dev $NSIM_NETDEV up 536 537 overflow_table0 "destroy NIC" 538 overflow_table1 "destroy NIC" 539 540 msg="destroy NIC" 541 echo $port > $NSIM_DEV_SYS/del_port 542 543 cleanup_tuns 544 exp0=( 0 0 0 0 ) 545 exp1=( 0 0 0 0 ) 546done 547 548cleanup_nsim 549 550# IPv4 only 551pfx="IPv4 only" 552 553echo $NSIM_ID > /sys/bus/netdevsim/new_device 554echo 0 > $NSIM_DEV_SYS/del_port 555echo 1 > $NSIM_DEV_DFS/udp_ports_ipv4_only 556 557for port in 0 1; do 558 if [ $port -ne 0 ]; then 559 echo 1 > $NSIM_DEV_DFS/udp_ports_open_only 560 fi 561 562 echo $port > $NSIM_DEV_SYS/new_port 563 NSIM_NETDEV=`get_netdev_name old_netdevs` 564 ip link set dev $NSIM_NETDEV up 565 566 msg="create VxLANs v6" 567 new_vxlan vxlanA0 10000 $NSIM_NETDEV 6 568 569 msg="create VxLANs v6" 570 new_vxlan vxlanA1 10000 $NSIM_NETDEV 6 571 572 ip link set dev vxlanA0 down 573 ip link set dev vxlanA0 up 574 check_tables 575 576 msg="create VxLANs v4" 577 exp0=( `mke 10000 1` 0 0 0 ) 578 new_vxlan vxlan0 10000 $NSIM_NETDEV 579 580 msg="down VxLANs v4" 581 exp0=( 0 0 0 0 ) 582 ip link set dev vxlan0 down 583 check_tables 584 585 msg="up VxLANs v4" 586 exp0=( `mke 10000 1` 0 0 0 ) 587 ip link set dev vxlan0 up 588 check_tables 589 590 msg="destroy VxLANs v4" 591 exp0=( 0 0 0 0 ) 592 del_dev vxlan0 593 594 msg="recreate VxLANs v4" 595 exp0=( `mke 10000 1` 0 0 0 ) 596 new_vxlan vxlan0 10000 $NSIM_NETDEV 597 598 del_dev vxlanA0 599 del_dev vxlanA1 600 601 msg="destroy NIC" 602 echo $port > $NSIM_DEV_SYS/del_port 603 604 cleanup_tuns 605 exp0=( 0 0 0 0 ) 606 exp1=( 0 0 0 0 ) 607done 608 609cleanup_nsim 610 611# Failures 612pfx="error injection" 613 614echo $NSIM_ID > /sys/bus/netdevsim/new_device 615echo 0 > $NSIM_DEV_SYS/del_port 616 617for port in 0 1; do 618 if [ $port -ne 0 ]; then 619 echo 1 > $NSIM_DEV_DFS/udp_ports_open_only 620 fi 621 622 echo $port > $NSIM_DEV_SYS/new_port 623 NSIM_NETDEV=`get_netdev_name old_netdevs` 624 ip link set dev $NSIM_NETDEV up 625 626 echo 110 > $NSIM_DEV_DFS/ports/$port/udp_ports/inject_error 627 628 msg="1 - create VxLANs v6" 629 exp0=( 0 0 0 0 ) 630 new_vxlan vxlanA0 10000 $NSIM_NETDEV 6 631 632 msg="1 - create VxLANs v4" 633 exp0=( `mke 10000 1` 0 0 0 ) 634 new_vxlan vxlan0 10000 $NSIM_NETDEV 635 636 msg="1 - remove VxLANs v4" 637 del_dev vxlan0 638 639 msg="1 - remove VxLANs v6" 640 exp0=( 0 0 0 0 ) 641 del_dev vxlanA0 642 643 msg="2 - create GENEVE" 644 exp1=( `mke 20000 2` 0 0 0 ) 645 new_geneve gnv0 20000 646 647 msg="2 - destroy GENEVE" 648 echo 2 > $NSIM_DEV_DFS/ports/$port/udp_ports/inject_error 649 exp1=( `mke 20000 2` 0 0 0 ) 650 del_dev gnv0 651 652 msg="2 - create second GENEVE" 653 exp1=( 0 `mke 20001 2` 0 0 ) 654 new_geneve gnv0 20001 655 656 msg="destroy NIC" 657 echo $port > $NSIM_DEV_SYS/del_port 658 659 cleanup_tuns 660 exp0=( 0 0 0 0 ) 661 exp1=( 0 0 0 0 ) 662done 663 664cleanup_nsim 665 666# netdev flags 667pfx="netdev flags" 668 669echo $NSIM_ID > /sys/bus/netdevsim/new_device 670echo 0 > $NSIM_DEV_SYS/del_port 671 672for port in 0 1; do 673 if [ $port -ne 0 ]; then 674 echo 1 > $NSIM_DEV_DFS/udp_ports_open_only 675 fi 676 677 echo $port > $NSIM_DEV_SYS/new_port 678 NSIM_NETDEV=`get_netdev_name old_netdevs` 679 ip link set dev $NSIM_NETDEV up 680 681 msg="create VxLANs v6" 682 exp0=( `mke 10000 1` 0 0 0 ) 683 new_vxlan vxlanA0 10000 $NSIM_NETDEV 6 684 685 msg="create VxLANs v4" 686 new_vxlan vxlan0 10000 $NSIM_NETDEV 687 688 msg="turn off" 689 exp0=( 0 0 0 0 ) 690 ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload off 691 check_tables 692 693 msg="turn on" 694 exp0=( `mke 10000 1` 0 0 0 ) 695 ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload on 696 check_tables 697 698 msg="remove both" 699 del_dev vxlanA0 700 exp0=( 0 0 0 0 ) 701 del_dev vxlan0 702 check_tables 703 704 ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload off 705 706 msg="create VxLANs v4 - off" 707 exp0=( 0 0 0 0 ) 708 new_vxlan vxlan0 10000 $NSIM_NETDEV 709 710 msg="created off - turn on" 711 exp0=( `mke 10000 1` 0 0 0 ) 712 ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload on 713 check_tables 714 715 msg="destroy NIC" 716 echo $port > $NSIM_DEV_SYS/del_port 717 718 cleanup_tuns 719 exp0=( 0 0 0 0 ) 720 exp1=( 0 0 0 0 ) 721done 722 723cleanup_nsim 724 725# device initiated reset 726pfx="reset notification" 727 728echo $NSIM_ID > /sys/bus/netdevsim/new_device 729echo 0 > $NSIM_DEV_SYS/del_port 730 731for port in 0 1; do 732 if [ $port -ne 0 ]; then 733 echo 1 > $NSIM_DEV_DFS/udp_ports_open_only 734 fi 735 736 echo $port > $NSIM_DEV_SYS/new_port 737 NSIM_NETDEV=`get_netdev_name old_netdevs` 738 ip link set dev $NSIM_NETDEV up 739 740 msg="create VxLANs v6" 741 exp0=( `mke 10000 1` 0 0 0 ) 742 new_vxlan vxlanA0 10000 $NSIM_NETDEV 6 743 744 msg="create VxLANs v4" 745 new_vxlan vxlan0 10000 $NSIM_NETDEV 746 747 echo 1 > $NSIM_DEV_DFS/ports/$port/udp_ports/reset 748 check_tables 749 750 msg="NIC device goes down" 751 ip link set dev $NSIM_NETDEV down 752 if [ $port -eq 1 ]; then 753 exp0=( 0 0 0 0 ) 754 exp1=( 0 0 0 0 ) 755 fi 756 check_tables 757 758 echo 1 > $NSIM_DEV_DFS/ports/$port/udp_ports/reset 759 check_tables 760 761 msg="NIC device goes up again" 762 ip link set dev $NSIM_NETDEV up 763 exp0=( `mke 10000 1` 0 0 0 ) 764 check_tables 765 766 msg="remove both" 767 del_dev vxlanA0 768 exp0=( 0 0 0 0 ) 769 del_dev vxlan0 770 check_tables 771 772 echo 1 > $NSIM_DEV_DFS/ports/$port/udp_ports/reset 773 check_tables 774 775 msg="destroy NIC" 776 echo $port > $NSIM_DEV_SYS/del_port 777 778 cleanup_tuns 779 exp0=( 0 0 0 0 ) 780 exp1=( 0 0 0 0 ) 781done 782 783cleanup_nsim 784 785# shared port tables 786pfx="table sharing" 787 788echo $NSIM_ID > /sys/bus/netdevsim/new_device 789echo 0 > $NSIM_DEV_SYS/del_port 790 791echo 0 > $NSIM_DEV_DFS/udp_ports_open_only 792echo 1 > $NSIM_DEV_DFS/udp_ports_shared 793 794old_netdevs=$(ls /sys/class/net) 795echo 1 > $NSIM_DEV_SYS/new_port 796NSIM_NETDEV=`get_netdev_name old_netdevs` 797old_netdevs=$(ls /sys/class/net) 798echo 2 > $NSIM_DEV_SYS/new_port 799NSIM_NETDEV2=`get_netdev_name old_netdevs` 800 801msg="VxLAN v4 devices" 802exp0=( `mke 4789 1` 0 0 0 ) 803exp1=( 0 0 0 0 ) 804new_vxlan vxlan0 4789 $NSIM_NETDEV 805new_vxlan vxlan1 4789 $NSIM_NETDEV2 806 807msg="VxLAN v4 devices go down" 808exp0=( 0 0 0 0 ) 809ip link set dev vxlan1 down 810ip link set dev vxlan0 down 811check_tables 812 813for ifc in vxlan0 vxlan1; do 814 ip link set dev $ifc up 815done 816 817msg="VxLAN v6 device" 818exp0=( `mke 4789 1` `mke 4790 1` 0 0 ) 819new_vxlan vxlanC 4790 $NSIM_NETDEV 6 820 821msg="Geneve device" 822exp1=( `mke 6081 2` 0 0 0 ) 823new_geneve gnv0 6081 824 825msg="NIC device goes down" 826ip link set dev $NSIM_NETDEV down 827check_tables 828 829msg="NIC device goes up again" 830ip link set dev $NSIM_NETDEV up 831check_tables 832 833for i in `seq 2`; do 834 msg="turn feature off - 1, rep $i" 835 ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload off 836 check_tables 837 838 msg="turn feature off - 2, rep $i" 839 exp0=( 0 0 0 0 ) 840 exp1=( 0 0 0 0 ) 841 ethtool -K $NSIM_NETDEV2 rx-udp_tunnel-port-offload off 842 check_tables 843 844 msg="turn feature on - 1, rep $i" 845 exp0=( `mke 4789 1` `mke 4790 1` 0 0 ) 846 exp1=( `mke 6081 2` 0 0 0 ) 847 ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload on 848 check_tables 849 850 msg="turn feature on - 2, rep $i" 851 ethtool -K $NSIM_NETDEV2 rx-udp_tunnel-port-offload on 852 check_tables 853done 854 855msg="tunnels destroyed 1" 856cleanup_tuns 857exp0=( 0 0 0 0 ) 858exp1=( 0 0 0 0 ) 859check_tables 860 861overflow_table0 "overflow NIC table" 862 863msg="re-add a port" 864 865echo 2 > $NSIM_DEV_SYS/del_port 866echo 2 > $NSIM_DEV_SYS/new_port 867NSIM_NETDEV=`get_netdev_name old_netdevs` 868check_tables 869 870msg="replace VxLAN in overflow table" 871exp0=( `mke 10000 1` `mke 10004 1` `mke 10002 1` `mke 10003 1` ) 872del_dev vxlan1 873 874msg="vacate VxLAN in overflow table" 875exp0=( `mke 10000 1` `mke 10004 1` 0 `mke 10003 1` ) 876del_dev vxlan2 877 878echo 1 > $NSIM_DEV_DFS/ports/$port/udp_ports/reset 879check_tables 880 881msg="tunnels destroyed 2" 882cleanup_tuns 883exp0=( 0 0 0 0 ) 884exp1=( 0 0 0 0 ) 885check_tables 886 887echo 1 > $NSIM_DEV_SYS/del_port 888echo 2 > $NSIM_DEV_SYS/del_port 889 890cleanup_nsim 891 892# Static IANA port 893pfx="static IANA vxlan" 894 895echo $NSIM_ID > /sys/bus/netdevsim/new_device 896echo 0 > $NSIM_DEV_SYS/del_port 897 898echo 1 > $NSIM_DEV_DFS/udp_ports_static_iana_vxlan 899STATIC_ENTRIES=( `mke 4789 1` ) 900 901port=1 902old_netdevs=$(ls /sys/class/net) 903echo $port > $NSIM_DEV_SYS/new_port 904NSIM_NETDEV=`get_netdev_name old_netdevs` 905 906msg="check empty" 907exp0=( 0 0 0 0 ) 908exp1=( 0 0 0 0 ) 909check_tables 910 911msg="add on static port" 912new_vxlan vxlan0 4789 $NSIM_NETDEV 913new_vxlan vxlan1 4789 $NSIM_NETDEV 914 915msg="add on different port" 916exp0=( `mke 4790 1` 0 0 0 ) 917new_vxlan vxlan2 4790 $NSIM_NETDEV 918 919cleanup_tuns 920 921msg="tunnels destroyed" 922exp0=( 0 0 0 0 ) 923exp1=( 0 0 0 0 ) 924check_tables 925 926msg="different type" 927new_geneve gnv0 4789 928 929cleanup_tuns 930cleanup_nsim 931 932# END 933 934modprobe -r netdevsim 935 936if [ $num_errors -eq 0 ]; then 937 echo "PASSED all $num_cases checks" 938else 939 echo "FAILED $num_errors/$num_cases checks" 940fi 941 942exit $EXIT_STATUS 943