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