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