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 new=$(ls /sys/class/net) 237 238 for netdev in $new; do 239 for check in $old; do 240 [ $netdev == $check ] && break 241 done 242 243 if [ $netdev != $check ]; then 244 echo $netdev 245 break 246 fi 247 done 248} 249 250### 251### Code start 252### 253 254# Probe ethtool support 255ethtool -h | grep show-tunnels 2>&1 >/dev/null && HAS_ETHTOOL=y 256 257modprobe netdevsim 258 259# Basic test 260pfx="basic" 261 262for port in 0 1; do 263 old_netdevs=$(ls /sys/class/net) 264 if [ $port -eq 0 ]; then 265 echo $NSIM_ID > /sys/bus/netdevsim/new_device 266 else 267 echo 1 > $NSIM_DEV_DFS/udp_ports_open_only 268 echo 1 > $NSIM_DEV_DFS/udp_ports_sleep 269 echo 1 > $NSIM_DEV_SYS/new_port 270 fi 271 NSIM_NETDEV=`get_netdev_name old_netdevs` 272 273 msg="new NIC device created" 274 exp0=( 0 0 0 0 ) 275 exp1=( 0 0 0 0 ) 276 check_tables 277 278 msg="VxLAN v4 devices" 279 exp0=( `mke 4789 1` 0 0 0 ) 280 new_vxlan vxlan0 4789 $NSIM_NETDEV 281 new_vxlan vxlan1 4789 $NSIM_NETDEV 282 283 msg="VxLAN v4 devices go down" 284 exp0=( 0 0 0 0 ) 285 ifconfig vxlan1 down 286 ifconfig vxlan0 down 287 check_tables 288 289 msg="VxLAN v6 devices" 290 exp0=( `mke 4789 1` 0 0 0 ) 291 new_vxlan vxlanA 4789 $NSIM_NETDEV 6 292 293 for ifc in vxlan0 vxlan1; do 294 ifconfig $ifc up 295 done 296 297 new_vxlan vxlanB 4789 $NSIM_NETDEV 6 298 299 msg="another VxLAN v6 devices" 300 exp0=( `mke 4789 1` `mke 4790 1` 0 0 ) 301 new_vxlan vxlanC 4790 $NSIM_NETDEV 6 302 303 msg="Geneve device" 304 exp1=( `mke 6081 2` 0 0 0 ) 305 new_geneve gnv0 6081 306 307 msg="NIC device goes down" 308 ifconfig $NSIM_NETDEV down 309 if [ $port -eq 1 ]; then 310 exp0=( 0 0 0 0 ) 311 exp1=( 0 0 0 0 ) 312 fi 313 check_tables 314 msg="NIC device goes up again" 315 ifconfig $NSIM_NETDEV up 316 exp0=( `mke 4789 1` `mke 4790 1` 0 0 ) 317 exp1=( `mke 6081 2` 0 0 0 ) 318 check_tables 319 320 cleanup_tuns 321 322 msg="tunnels destroyed" 323 exp0=( 0 0 0 0 ) 324 exp1=( 0 0 0 0 ) 325 check_tables 326 327 modprobe -r geneve 328 modprobe -r vxlan 329 modprobe -r udp_tunnel 330 331 check_tables 332done 333 334modprobe -r netdevsim 335 336# Module tests 337pfx="module tests" 338 339if modinfo netdevsim | grep udp_tunnel >/dev/null; then 340 err_cnt "netdevsim depends on udp_tunnel" 341else 342 pass_cnt 343fi 344 345modprobe netdevsim 346 347old_netdevs=$(ls /sys/class/net) 348port=0 349echo $NSIM_ID > /sys/bus/netdevsim/new_device 350echo 0 > $NSIM_DEV_SYS/del_port 351echo 1000 > $NSIM_DEV_DFS/udp_ports_sleep 352echo 0 > $NSIM_DEV_SYS/new_port 353NSIM_NETDEV=`get_netdev_name old_netdevs` 354 355msg="create VxLANs" 356exp0=( 0 0 0 0 ) # sleep is longer than out wait 357new_vxlan vxlan0 10000 $NSIM_NETDEV 358 359modprobe -r vxlan 360modprobe -r udp_tunnel 361 362msg="remove tunnels" 363exp0=( 0 0 0 0 ) 364check_tables 365 366msg="create VxLANs" 367exp0=( 0 0 0 0 ) # sleep is longer than out wait 368new_vxlan vxlan0 10000 $NSIM_NETDEV 369 370exp0=( 0 0 0 0 ) 371 372modprobe -r netdevsim 373modprobe netdevsim 374 375# Overflow the table 376 377function overflow_table0 { 378 local pfx=$1 379 380 msg="create VxLANs 1/5" 381 exp0=( `mke 10000 1` 0 0 0 ) 382 new_vxlan vxlan0 10000 $NSIM_NETDEV 383 384 msg="create VxLANs 2/5" 385 exp0=( `mke 10000 1` `mke 10001 1` 0 0 ) 386 new_vxlan vxlan1 10001 $NSIM_NETDEV 387 388 msg="create VxLANs 3/5" 389 exp0=( `mke 10000 1` `mke 10001 1` `mke 10002 1` 0 ) 390 new_vxlan vxlan2 10002 $NSIM_NETDEV 391 392 msg="create VxLANs 4/5" 393 exp0=( `mke 10000 1` `mke 10001 1` `mke 10002 1` `mke 10003 1` ) 394 new_vxlan vxlan3 10003 $NSIM_NETDEV 395 396 msg="create VxLANs 5/5" 397 new_vxlan vxlan4 10004 $NSIM_NETDEV 398} 399 400function overflow_table1 { 401 local pfx=$1 402 403 msg="create GENEVE 1/5" 404 exp1=( `mke 20000 2` 0 0 0 ) 405 new_geneve gnv0 20000 406 407 msg="create GENEVE 2/5" 408 exp1=( `mke 20000 2` `mke 20001 2` 0 0 ) 409 new_geneve gnv1 20001 410 411 msg="create GENEVE 3/5" 412 exp1=( `mke 20000 2` `mke 20001 2` `mke 20002 2` 0 ) 413 new_geneve gnv2 20002 414 415 msg="create GENEVE 4/5" 416 exp1=( `mke 20000 2` `mke 20001 2` `mke 20002 2` `mke 20003 2` ) 417 new_geneve gnv3 20003 418 419 msg="create GENEVE 5/5" 420 new_geneve gnv4 20004 421} 422 423echo $NSIM_ID > /sys/bus/netdevsim/new_device 424echo 0 > $NSIM_DEV_SYS/del_port 425 426for port in 0 1; do 427 if [ $port -ne 0 ]; then 428 echo 1 > $NSIM_DEV_DFS/udp_ports_open_only 429 echo 1 > $NSIM_DEV_DFS/udp_ports_sleep 430 fi 431 432 echo $port > $NSIM_DEV_SYS/new_port 433 ifconfig $NSIM_NETDEV up 434 435 overflow_table0 "overflow NIC table" 436 overflow_table1 "overflow NIC table" 437 438 msg="replace VxLAN in overflow table" 439 exp0=( `mke 10000 1` `mke 10004 1` `mke 10002 1` `mke 10003 1` ) 440 del_dev vxlan1 441 442 msg="vacate VxLAN in overflow table" 443 exp0=( `mke 10000 1` `mke 10004 1` 0 `mke 10003 1` ) 444 del_dev vxlan2 445 446 msg="replace GENEVE in overflow table" 447 exp1=( `mke 20000 2` `mke 20004 2` `mke 20002 2` `mke 20003 2` ) 448 del_dev gnv1 449 450 msg="vacate GENEVE in overflow table" 451 exp1=( `mke 20000 2` `mke 20004 2` 0 `mke 20003 2` ) 452 del_dev gnv2 453 454 msg="table sharing - share" 455 exp1=( `mke 20000 2` `mke 20004 2` `mke 30001 4` `mke 20003 2` ) 456 new_vxlan vxlanG0 30001 $NSIM_NETDEV 4 "gpe external" 457 458 msg="table sharing - overflow" 459 new_vxlan vxlanG1 30002 $NSIM_NETDEV 4 "gpe external" 460 msg="table sharing - overflow v6" 461 new_vxlan vxlanG2 30002 $NSIM_NETDEV 6 "gpe external" 462 463 exp1=( `mke 20000 2` `mke 30002 4` `mke 30001 4` `mke 20003 2` ) 464 del_dev gnv4 465 466 msg="destroy NIC" 467 echo $port > $NSIM_DEV_SYS/del_port 468 469 cleanup_tuns 470 exp0=( 0 0 0 0 ) 471 exp1=( 0 0 0 0 ) 472done 473 474cleanup_nsim 475 476# Sync all 477pfx="sync all" 478 479echo $NSIM_ID > /sys/bus/netdevsim/new_device 480echo 0 > $NSIM_DEV_SYS/del_port 481echo 1 > $NSIM_DEV_DFS/udp_ports_sync_all 482 483for port in 0 1; do 484 if [ $port -ne 0 ]; then 485 echo 1 > $NSIM_DEV_DFS/udp_ports_open_only 486 echo 1 > $NSIM_DEV_DFS/udp_ports_sleep 487 fi 488 489 echo $port > $NSIM_DEV_SYS/new_port 490 ifconfig $NSIM_NETDEV up 491 492 overflow_table0 "overflow NIC table" 493 overflow_table1 "overflow NIC table" 494 495 msg="replace VxLAN in overflow table" 496 exp0=( `mke 10000 1` `mke 10004 1` `mke 10002 1` `mke 10003 1` ) 497 del_dev vxlan1 498 499 msg="vacate VxLAN in overflow table" 500 exp0=( `mke 10000 1` `mke 10004 1` 0 `mke 10003 1` ) 501 del_dev vxlan2 502 503 msg="replace GENEVE in overflow table" 504 exp1=( `mke 20000 2` `mke 20004 2` `mke 20002 2` `mke 20003 2` ) 505 del_dev gnv1 506 507 msg="vacate GENEVE in overflow table" 508 exp1=( `mke 20000 2` `mke 20004 2` 0 `mke 20003 2` ) 509 del_dev gnv2 510 511 msg="table sharing - share" 512 exp1=( `mke 20000 2` `mke 20004 2` `mke 30001 4` `mke 20003 2` ) 513 new_vxlan vxlanG0 30001 $NSIM_NETDEV 4 "gpe external" 514 515 msg="table sharing - overflow" 516 new_vxlan vxlanG1 30002 $NSIM_NETDEV 4 "gpe external" 517 msg="table sharing - overflow v6" 518 new_vxlan vxlanG2 30002 $NSIM_NETDEV 6 "gpe external" 519 520 exp1=( `mke 20000 2` `mke 30002 4` `mke 30001 4` `mke 20003 2` ) 521 del_dev gnv4 522 523 msg="destroy NIC" 524 echo $port > $NSIM_DEV_SYS/del_port 525 526 cleanup_tuns 527 exp0=( 0 0 0 0 ) 528 exp1=( 0 0 0 0 ) 529done 530 531cleanup_nsim 532 533# Destroy full NIC 534pfx="destroy full" 535 536echo $NSIM_ID > /sys/bus/netdevsim/new_device 537echo 0 > $NSIM_DEV_SYS/del_port 538 539for port in 0 1; do 540 if [ $port -ne 0 ]; then 541 echo 1 > $NSIM_DEV_DFS/udp_ports_open_only 542 echo 1 > $NSIM_DEV_DFS/udp_ports_sleep 543 fi 544 545 echo $port > $NSIM_DEV_SYS/new_port 546 ifconfig $NSIM_NETDEV up 547 548 overflow_table0 "destroy NIC" 549 overflow_table1 "destroy NIC" 550 551 msg="destroy NIC" 552 echo $port > $NSIM_DEV_SYS/del_port 553 554 cleanup_tuns 555 exp0=( 0 0 0 0 ) 556 exp1=( 0 0 0 0 ) 557done 558 559cleanup_nsim 560 561# IPv4 only 562pfx="IPv4 only" 563 564echo $NSIM_ID > /sys/bus/netdevsim/new_device 565echo 0 > $NSIM_DEV_SYS/del_port 566echo 1 > $NSIM_DEV_DFS/udp_ports_ipv4_only 567 568for port in 0 1; do 569 if [ $port -ne 0 ]; then 570 echo 1 > $NSIM_DEV_DFS/udp_ports_open_only 571 echo 1 > $NSIM_DEV_DFS/udp_ports_sleep 572 fi 573 574 echo $port > $NSIM_DEV_SYS/new_port 575 ifconfig $NSIM_NETDEV up 576 577 msg="create VxLANs v6" 578 new_vxlan vxlanA0 10000 $NSIM_NETDEV 6 579 580 msg="create VxLANs v6" 581 new_vxlan vxlanA1 10000 $NSIM_NETDEV 6 582 583 ip link set dev vxlanA0 down 584 ip link set dev vxlanA0 up 585 check_tables 586 587 msg="create VxLANs v4" 588 exp0=( `mke 10000 1` 0 0 0 ) 589 new_vxlan vxlan0 10000 $NSIM_NETDEV 590 591 msg="down VxLANs v4" 592 exp0=( 0 0 0 0 ) 593 ip link set dev vxlan0 down 594 check_tables 595 596 msg="up VxLANs v4" 597 exp0=( `mke 10000 1` 0 0 0 ) 598 ip link set dev vxlan0 up 599 check_tables 600 601 msg="destroy VxLANs v4" 602 exp0=( 0 0 0 0 ) 603 del_dev vxlan0 604 605 msg="recreate VxLANs v4" 606 exp0=( `mke 10000 1` 0 0 0 ) 607 new_vxlan vxlan0 10000 $NSIM_NETDEV 608 609 del_dev vxlanA0 610 del_dev vxlanA1 611 612 msg="destroy NIC" 613 echo $port > $NSIM_DEV_SYS/del_port 614 615 cleanup_tuns 616 exp0=( 0 0 0 0 ) 617 exp1=( 0 0 0 0 ) 618done 619 620cleanup_nsim 621 622# Failures 623pfx="error injection" 624 625echo $NSIM_ID > /sys/bus/netdevsim/new_device 626echo 0 > $NSIM_DEV_SYS/del_port 627 628for port in 0 1; do 629 if [ $port -ne 0 ]; then 630 echo 1 > $NSIM_DEV_DFS/udp_ports_open_only 631 echo 1 > $NSIM_DEV_DFS/udp_ports_sleep 632 fi 633 634 echo $port > $NSIM_DEV_SYS/new_port 635 ifconfig $NSIM_NETDEV up 636 637 echo 110 > $NSIM_DEV_DFS/ports/$port/udp_ports_inject_error 638 639 msg="1 - create VxLANs v6" 640 exp0=( 0 0 0 0 ) 641 new_vxlan vxlanA0 10000 $NSIM_NETDEV 6 642 643 msg="1 - create VxLANs v4" 644 exp0=( `mke 10000 1` 0 0 0 ) 645 new_vxlan vxlan0 10000 $NSIM_NETDEV 646 647 msg="1 - remove VxLANs v4" 648 del_dev vxlan0 649 650 msg="1 - remove VxLANs v6" 651 exp0=( 0 0 0 0 ) 652 del_dev vxlanA0 653 654 msg="2 - create GENEVE" 655 exp1=( `mke 20000 2` 0 0 0 ) 656 new_geneve gnv0 20000 657 658 msg="2 - destroy GENEVE" 659 echo 2 > $NSIM_DEV_DFS/ports/$port/udp_ports_inject_error 660 exp1=( `mke 20000 2` 0 0 0 ) 661 del_dev gnv0 662 663 msg="2 - create second GENEVE" 664 exp1=( 0 `mke 20001 2` 0 0 ) 665 new_geneve gnv0 20001 666 667 msg="destroy NIC" 668 echo $port > $NSIM_DEV_SYS/del_port 669 670 cleanup_tuns 671 exp0=( 0 0 0 0 ) 672 exp1=( 0 0 0 0 ) 673done 674 675cleanup_nsim 676 677# netdev flags 678pfx="netdev flags" 679 680echo $NSIM_ID > /sys/bus/netdevsim/new_device 681echo 0 > $NSIM_DEV_SYS/del_port 682 683for port in 0 1; do 684 if [ $port -ne 0 ]; then 685 echo 1 > $NSIM_DEV_DFS/udp_ports_open_only 686 echo 1 > $NSIM_DEV_DFS/udp_ports_sleep 687 fi 688 689 echo $port > $NSIM_DEV_SYS/new_port 690 ifconfig $NSIM_NETDEV up 691 692 msg="create VxLANs v6" 693 exp0=( `mke 10000 1` 0 0 0 ) 694 new_vxlan vxlanA0 10000 $NSIM_NETDEV 6 695 696 msg="create VxLANs v4" 697 new_vxlan vxlan0 10000 $NSIM_NETDEV 698 699 msg="turn off" 700 exp0=( 0 0 0 0 ) 701 ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload off 702 check_tables 703 704 msg="turn on" 705 exp0=( `mke 10000 1` 0 0 0 ) 706 ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload on 707 check_tables 708 709 msg="remove both" 710 del_dev vxlanA0 711 exp0=( 0 0 0 0 ) 712 del_dev vxlan0 713 check_tables 714 715 ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload off 716 717 msg="create VxLANs v4 - off" 718 exp0=( 0 0 0 0 ) 719 new_vxlan vxlan0 10000 $NSIM_NETDEV 720 721 msg="created off - turn on" 722 exp0=( `mke 10000 1` 0 0 0 ) 723 ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload on 724 check_tables 725 726 msg="destroy NIC" 727 echo $port > $NSIM_DEV_SYS/del_port 728 729 cleanup_tuns 730 exp0=( 0 0 0 0 ) 731 exp1=( 0 0 0 0 ) 732done 733 734cleanup_nsim 735 736# device initiated reset 737pfx="reset notification" 738 739echo $NSIM_ID > /sys/bus/netdevsim/new_device 740echo 0 > $NSIM_DEV_SYS/del_port 741 742for port in 0 1; do 743 if [ $port -ne 0 ]; then 744 echo 1 > $NSIM_DEV_DFS/udp_ports_open_only 745 echo 1 > $NSIM_DEV_DFS/udp_ports_sleep 746 fi 747 748 echo $port > $NSIM_DEV_SYS/new_port 749 ifconfig $NSIM_NETDEV up 750 751 msg="create VxLANs v6" 752 exp0=( `mke 10000 1` 0 0 0 ) 753 new_vxlan vxlanA0 10000 $NSIM_NETDEV 6 754 755 msg="create VxLANs v4" 756 new_vxlan vxlan0 10000 $NSIM_NETDEV 757 758 echo 1 > $NSIM_DEV_DFS/ports/$port/udp_ports_reset 759 check_tables 760 761 msg="NIC device goes down" 762 ifconfig $NSIM_NETDEV down 763 if [ $port -eq 1 ]; then 764 exp0=( 0 0 0 0 ) 765 exp1=( 0 0 0 0 ) 766 fi 767 check_tables 768 769 echo 1 > $NSIM_DEV_DFS/ports/$port/udp_ports_reset 770 check_tables 771 772 msg="NIC device goes up again" 773 ifconfig $NSIM_NETDEV up 774 exp0=( `mke 10000 1` 0 0 0 ) 775 check_tables 776 777 msg="remove both" 778 del_dev vxlanA0 779 exp0=( 0 0 0 0 ) 780 del_dev vxlan0 781 check_tables 782 783 echo 1 > $NSIM_DEV_DFS/ports/$port/udp_ports_reset 784 check_tables 785 786 msg="destroy NIC" 787 echo $port > $NSIM_DEV_SYS/del_port 788 789 cleanup_tuns 790 exp0=( 0 0 0 0 ) 791 exp1=( 0 0 0 0 ) 792done 793 794cleanup_nsim 795 796# shared port tables 797pfx="table sharing" 798 799echo $NSIM_ID > /sys/bus/netdevsim/new_device 800echo 0 > $NSIM_DEV_SYS/del_port 801 802echo 0 > $NSIM_DEV_DFS/udp_ports_open_only 803echo 1 > $NSIM_DEV_DFS/udp_ports_sleep 804echo 1 > $NSIM_DEV_DFS/udp_ports_shared 805 806old_netdevs=$(ls /sys/class/net) 807echo 1 > $NSIM_DEV_SYS/new_port 808NSIM_NETDEV=`get_netdev_name old_netdevs` 809old_netdevs=$(ls /sys/class/net) 810echo 2 > $NSIM_DEV_SYS/new_port 811NSIM_NETDEV2=`get_netdev_name old_netdevs` 812 813msg="VxLAN v4 devices" 814exp0=( `mke 4789 1` 0 0 0 ) 815exp1=( 0 0 0 0 ) 816new_vxlan vxlan0 4789 $NSIM_NETDEV 817new_vxlan vxlan1 4789 $NSIM_NETDEV2 818 819msg="VxLAN v4 devices go down" 820exp0=( 0 0 0 0 ) 821ifconfig vxlan1 down 822ifconfig vxlan0 down 823check_tables 824 825for ifc in vxlan0 vxlan1; do 826 ifconfig $ifc up 827done 828 829msg="VxLAN v6 device" 830exp0=( `mke 4789 1` `mke 4790 1` 0 0 ) 831new_vxlan vxlanC 4790 $NSIM_NETDEV 6 832 833msg="Geneve device" 834exp1=( `mke 6081 2` 0 0 0 ) 835new_geneve gnv0 6081 836 837msg="NIC device goes down" 838ifconfig $NSIM_NETDEV down 839check_tables 840 841msg="NIC device goes up again" 842ifconfig $NSIM_NETDEV up 843check_tables 844 845for i in `seq 2`; do 846 msg="turn feature off - 1, rep $i" 847 ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload off 848 check_tables 849 850 msg="turn feature off - 2, rep $i" 851 exp0=( 0 0 0 0 ) 852 exp1=( 0 0 0 0 ) 853 ethtool -K $NSIM_NETDEV2 rx-udp_tunnel-port-offload off 854 check_tables 855 856 msg="turn feature on - 1, rep $i" 857 exp0=( `mke 4789 1` `mke 4790 1` 0 0 ) 858 exp1=( `mke 6081 2` 0 0 0 ) 859 ethtool -K $NSIM_NETDEV rx-udp_tunnel-port-offload on 860 check_tables 861 862 msg="turn feature on - 2, rep $i" 863 ethtool -K $NSIM_NETDEV2 rx-udp_tunnel-port-offload on 864 check_tables 865done 866 867msg="tunnels destroyed 1" 868cleanup_tuns 869exp0=( 0 0 0 0 ) 870exp1=( 0 0 0 0 ) 871check_tables 872 873overflow_table0 "overflow NIC table" 874 875msg="re-add a port" 876 877echo 2 > $NSIM_DEV_SYS/del_port 878echo 2 > $NSIM_DEV_SYS/new_port 879check_tables 880 881msg="replace VxLAN in overflow table" 882exp0=( `mke 10000 1` `mke 10004 1` `mke 10002 1` `mke 10003 1` ) 883del_dev vxlan1 884 885msg="vacate VxLAN in overflow table" 886exp0=( `mke 10000 1` `mke 10004 1` 0 `mke 10003 1` ) 887del_dev vxlan2 888 889echo 1 > $NSIM_DEV_DFS/ports/$port/udp_ports_reset 890check_tables 891 892msg="tunnels destroyed 2" 893cleanup_tuns 894exp0=( 0 0 0 0 ) 895exp1=( 0 0 0 0 ) 896check_tables 897 898echo 1 > $NSIM_DEV_SYS/del_port 899echo 2 > $NSIM_DEV_SYS/del_port 900 901cleanup_nsim 902 903# Static IANA port 904pfx="static IANA vxlan" 905 906echo $NSIM_ID > /sys/bus/netdevsim/new_device 907echo 0 > $NSIM_DEV_SYS/del_port 908 909echo 1 > $NSIM_DEV_DFS/udp_ports_static_iana_vxlan 910STATIC_ENTRIES=( `mke 4789 1` ) 911 912port=1 913old_netdevs=$(ls /sys/class/net) 914echo $port > $NSIM_DEV_SYS/new_port 915NSIM_NETDEV=`get_netdev_name old_netdevs` 916 917msg="check empty" 918exp0=( 0 0 0 0 ) 919exp1=( 0 0 0 0 ) 920check_tables 921 922msg="add on static port" 923new_vxlan vxlan0 4789 $NSIM_NETDEV 924new_vxlan vxlan1 4789 $NSIM_NETDEV 925 926msg="add on different port" 927exp0=( `mke 4790 1` 0 0 0 ) 928new_vxlan vxlan2 4790 $NSIM_NETDEV 929 930cleanup_tuns 931 932msg="tunnels destroyed" 933exp0=( 0 0 0 0 ) 934exp1=( 0 0 0 0 ) 935check_tables 936 937msg="different type" 938new_geneve gnv0 4789 939 940cleanup_tuns 941cleanup_nsim 942 943# END 944 945modprobe -r netdevsim 946 947if [ $num_errors -eq 0 ]; then 948 echo "PASSED all $num_cases checks" 949else 950 echo "FAILED $num_errors/$num_cases checks" 951fi 952 953exit $EXIT_STATUS 954