Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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