0001
0002
0003
0004
0005
0006
0007 : ${ADDR_FAMILY:=ipv4}
0008 export ADDR_FAMILY
0009
0010 : ${LOCAL_IP_1:=198.51.100.1}
0011 export LOCAL_IP_1
0012
0013 : ${LOCAL_IP_2:=198.51.100.2}
0014 export LOCAL_IP_2
0015
0016 : ${PREFIX_LEN:=32}
0017 export PREFIX_LEN
0018
0019 : ${UDPCSUM_FLAFS:=noudpcsum}
0020 export UDPCSUM_FLAFS
0021
0022 : ${MC_IP:=239.0.0.1}
0023 export MC_IP
0024
0025 : ${IP_FLAG:=""}
0026 export IP_FLAG
0027
0028 : ${ALL_TESTS:="
0029 sanitization_test
0030 offload_indication_test
0031 sanitization_vlan_aware_test
0032 offload_indication_vlan_aware_test
0033 "}
0034
0035 lib_dir=$(dirname $0)/../../../net/forwarding
0036 NUM_NETIFS=2
0037 : ${TIMEOUT:=20000}
0038 source $lib_dir/lib.sh
0039
0040 setup_prepare()
0041 {
0042 swp1=${NETIFS[p1]}
0043 swp2=${NETIFS[p2]}
0044
0045 ip link set dev $swp1 up
0046 ip link set dev $swp2 up
0047 }
0048
0049 cleanup()
0050 {
0051 pre_cleanup
0052
0053 ip link set dev $swp2 down
0054 ip link set dev $swp1 down
0055 }
0056
0057 sanitization_single_dev_test_pass()
0058 {
0059 ip link set dev $swp1 master br0
0060 check_err $?
0061 ip link set dev vxlan0 master br0
0062 check_err $?
0063
0064 ip link set dev $swp1 nomaster
0065
0066 ip link set dev $swp1 master br0
0067 check_err $?
0068 }
0069
0070 sanitization_single_dev_test_fail()
0071 {
0072 ip link set dev $swp1 master br0
0073 check_err $?
0074 ip link set dev vxlan0 master br0 &> /dev/null
0075 check_fail $?
0076
0077 ip link set dev $swp1 nomaster
0078
0079 ip link set dev vxlan0 master br0
0080 check_err $?
0081 ip link set dev $swp1 master br0 &> /dev/null
0082 check_fail $?
0083 }
0084
0085 sanitization_single_dev_valid_test()
0086 {
0087 RET=0
0088
0089 ip link add dev br0 type bridge mcast_snooping 0
0090
0091 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
0092 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0093
0094 sanitization_single_dev_test_pass
0095
0096 ip link del dev vxlan0
0097 ip link del dev br0
0098
0099 log_test "vxlan device - valid configuration"
0100 }
0101
0102 sanitization_single_dev_vlan_aware_test()
0103 {
0104 RET=0
0105
0106 ip link add dev br0 type bridge mcast_snooping 0 vlan_filtering 1
0107
0108 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
0109 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0110
0111 sanitization_single_dev_test_pass
0112
0113 ip link del dev vxlan0
0114 ip link del dev br0
0115
0116 log_test "vxlan device with a vlan-aware bridge"
0117 }
0118
0119 sanitization_single_dev_mcast_enabled_test()
0120 {
0121 RET=0
0122
0123 ip link add dev br0 type bridge
0124
0125 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
0126 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0127
0128 sanitization_single_dev_test_fail
0129
0130 ip link del dev vxlan0
0131 ip link del dev br0
0132
0133 log_test "vxlan device with a multicast enabled bridge"
0134 }
0135
0136 sanitization_single_dev_mcast_group_test()
0137 {
0138 RET=0
0139
0140 ip link add dev br0 type bridge mcast_snooping 0
0141 ip link add name dummy1 up type dummy
0142
0143 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
0144 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789 \
0145 dev dummy1 group $MC_IP
0146
0147 sanitization_single_dev_test_fail
0148
0149 ip link del dev vxlan0
0150 ip link del dev dummy1
0151 ip link del dev br0
0152
0153 log_test "vxlan device with a multicast group"
0154 }
0155
0156 sanitization_single_dev_no_local_ip_test()
0157 {
0158 RET=0
0159
0160 ip link add dev br0 type bridge mcast_snooping 0
0161
0162 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
0163 ttl 20 tos inherit dstport 4789
0164
0165 sanitization_single_dev_test_fail
0166
0167 ip link del dev vxlan0
0168 ip link del dev br0
0169
0170 log_test "vxlan device with no local ip"
0171 }
0172
0173 sanitization_single_dev_learning_enabled_ipv4_test()
0174 {
0175 RET=0
0176
0177 ip link add dev br0 type bridge mcast_snooping 0
0178
0179 ip link add name vxlan0 up type vxlan id 10 learning $UDPCSUM_FLAFS \
0180 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0181
0182 sanitization_single_dev_test_pass
0183
0184 ip link del dev vxlan0
0185 ip link del dev br0
0186
0187 log_test "vxlan device with learning enabled"
0188 }
0189
0190 sanitization_single_dev_local_interface_test()
0191 {
0192 RET=0
0193
0194 ip link add dev br0 type bridge mcast_snooping 0
0195 ip link add name dummy1 up type dummy
0196
0197 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
0198 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789 dev dummy1
0199
0200 sanitization_single_dev_test_fail
0201
0202 ip link del dev vxlan0
0203 ip link del dev dummy1
0204 ip link del dev br0
0205
0206 log_test "vxlan device with local interface"
0207 }
0208
0209 sanitization_single_dev_port_range_test()
0210 {
0211 RET=0
0212
0213 ip link add dev br0 type bridge mcast_snooping 0
0214
0215 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
0216 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789 \
0217 srcport 4000 5000
0218
0219 sanitization_single_dev_test_fail
0220
0221 ip link del dev vxlan0
0222 ip link del dev br0
0223
0224 log_test "vxlan device with udp source port range"
0225 }
0226
0227 sanitization_single_dev_tos_static_test()
0228 {
0229 RET=0
0230
0231 ip link add dev br0 type bridge mcast_snooping 0
0232
0233 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
0234 ttl 20 tos 20 local $LOCAL_IP_1 dstport 4789
0235
0236 sanitization_single_dev_test_fail
0237
0238 ip link del dev vxlan0
0239 ip link del dev br0
0240
0241 log_test "vxlan device with static tos"
0242 }
0243
0244 sanitization_single_dev_ttl_inherit_test()
0245 {
0246 RET=0
0247
0248 ip link add dev br0 type bridge mcast_snooping 0
0249
0250 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
0251 ttl inherit tos inherit local $LOCAL_IP_1 dstport 4789
0252
0253 sanitization_single_dev_test_fail
0254
0255 ip link del dev vxlan0
0256 ip link del dev br0
0257
0258 log_test "vxlan device with inherit ttl"
0259 }
0260
0261 sanitization_single_dev_udp_checksum_ipv4_test()
0262 {
0263 RET=0
0264
0265 ip link add dev br0 type bridge mcast_snooping 0
0266
0267 ip link add name vxlan0 up type vxlan id 10 nolearning udpcsum \
0268 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0269
0270 sanitization_single_dev_test_fail
0271
0272 ip link del dev vxlan0
0273 ip link del dev br0
0274
0275 log_test "vxlan device with udp checksum"
0276 }
0277
0278 sanitization_single_dev_test()
0279 {
0280
0281
0282 sanitization_single_dev_valid_test
0283 sanitization_single_dev_vlan_aware_test
0284 sanitization_single_dev_mcast_enabled_test
0285 sanitization_single_dev_mcast_group_test
0286 sanitization_single_dev_no_local_ip_test
0287 sanitization_single_dev_learning_enabled_"$ADDR_FAMILY"_test
0288 sanitization_single_dev_local_interface_test
0289 sanitization_single_dev_port_range_test
0290 sanitization_single_dev_tos_static_test
0291 sanitization_single_dev_ttl_inherit_test
0292 sanitization_single_dev_udp_checksum_"$ADDR_FAMILY"_test
0293 }
0294
0295 sanitization_multi_devs_test_pass()
0296 {
0297 ip link set dev $swp1 master br0
0298 check_err $?
0299 ip link set dev vxlan0 master br0
0300 check_err $?
0301 ip link set dev $swp2 master br1
0302 check_err $?
0303 ip link set dev vxlan1 master br1
0304 check_err $?
0305
0306 ip link set dev $swp2 nomaster
0307 ip link set dev $swp1 nomaster
0308
0309 ip link set dev $swp1 master br0
0310 check_err $?
0311 ip link set dev $swp2 master br1
0312 check_err $?
0313 }
0314
0315 sanitization_multi_devs_test_fail()
0316 {
0317 ip link set dev $swp1 master br0
0318 check_err $?
0319 ip link set dev vxlan0 master br0
0320 check_err $?
0321 ip link set dev $swp2 master br1
0322 check_err $?
0323 ip link set dev vxlan1 master br1 &> /dev/null
0324 check_fail $?
0325
0326 ip link set dev $swp2 nomaster
0327 ip link set dev $swp1 nomaster
0328
0329 ip link set dev vxlan1 master br1
0330 check_err $?
0331 ip link set dev $swp1 master br0
0332 check_err $?
0333 ip link set dev $swp2 master br1 &> /dev/null
0334 check_fail $?
0335 }
0336
0337 sanitization_multi_devs_valid_test()
0338 {
0339 RET=0
0340
0341 ip link add dev br0 type bridge mcast_snooping 0
0342 ip link add dev br1 type bridge mcast_snooping 0
0343
0344 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
0345 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0346 ip link add name vxlan1 up type vxlan id 20 nolearning $UDPCSUM_FLAFS \
0347 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0348
0349 sanitization_multi_devs_test_pass
0350
0351 ip link del dev vxlan1
0352 ip link del dev vxlan0
0353 ip link del dev br1
0354 ip link del dev br0
0355
0356 log_test "multiple vxlan devices - valid configuration"
0357 }
0358
0359 sanitization_multi_devs_ttl_test()
0360 {
0361 RET=0
0362
0363 ip link add dev br0 type bridge mcast_snooping 0
0364 ip link add dev br1 type bridge mcast_snooping 0
0365
0366 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
0367 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0368 ip link add name vxlan1 up type vxlan id 20 nolearning $UDPCSUM_FLAFS \
0369 ttl 40 tos inherit local $LOCAL_IP_1 dstport 4789
0370
0371 sanitization_multi_devs_test_fail
0372
0373 ip link del dev vxlan1
0374 ip link del dev vxlan0
0375 ip link del dev br1
0376 ip link del dev br0
0377
0378 log_test "multiple vxlan devices with different ttl"
0379 }
0380
0381 sanitization_multi_devs_udp_dstport_test()
0382 {
0383 RET=0
0384
0385 ip link add dev br0 type bridge mcast_snooping 0
0386 ip link add dev br1 type bridge mcast_snooping 0
0387
0388 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
0389 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0390 ip link add name vxlan1 up type vxlan id 20 nolearning $UDPCSUM_FLAFS \
0391 ttl 20 tos inherit local $LOCAL_IP_1 dstport 5789
0392
0393 sanitization_multi_devs_test_fail
0394
0395 ip link del dev vxlan1
0396 ip link del dev vxlan0
0397 ip link del dev br1
0398 ip link del dev br0
0399
0400 log_test "multiple vxlan devices with different udp destination port"
0401 }
0402
0403 sanitization_multi_devs_local_ip_test()
0404 {
0405 RET=0
0406
0407 ip link add dev br0 type bridge mcast_snooping 0
0408 ip link add dev br1 type bridge mcast_snooping 0
0409
0410 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
0411 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0412 ip link add name vxlan1 up type vxlan id 20 nolearning $UDPCSUM_FLAFS \
0413 ttl 20 tos inherit local $LOCAL_IP_2 dstport 4789
0414
0415 sanitization_multi_devs_test_fail
0416
0417 ip link del dev vxlan1
0418 ip link del dev vxlan0
0419 ip link del dev br1
0420 ip link del dev br0
0421
0422 log_test "multiple vxlan devices with different local ip"
0423 }
0424
0425 sanitization_multi_devs_test()
0426 {
0427
0428
0429
0430
0431 sanitization_multi_devs_valid_test
0432 sanitization_multi_devs_ttl_test
0433 sanitization_multi_devs_udp_dstport_test
0434 sanitization_multi_devs_local_ip_test
0435 }
0436
0437 sanitization_test()
0438 {
0439 sanitization_single_dev_test
0440 sanitization_multi_devs_test
0441 }
0442
0443 offload_indication_setup_create()
0444 {
0445
0446
0447 ip link add name br0 up type bridge mcast_snooping 0
0448 ip link add name br1 up type bridge mcast_snooping 0
0449
0450 ip link set dev $swp1 master br0
0451 ip link set dev $swp2 master br1
0452
0453 ip address add $LOCAL_IP_1/$PREFIX_LEN dev lo
0454
0455 ip link add name vxlan0 up master br0 type vxlan id 10 nolearning \
0456 $UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0457 ip link add name vxlan1 up master br1 type vxlan id 20 nolearning \
0458 $UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0459 }
0460
0461 offload_indication_setup_destroy()
0462 {
0463 ip link del dev vxlan1
0464 ip link del dev vxlan0
0465
0466 ip address del $LOCAL_IP_1/$PREFIX_LEN dev lo
0467
0468 ip link set dev $swp2 nomaster
0469 ip link set dev $swp1 nomaster
0470
0471 ip link del dev br1
0472 ip link del dev br0
0473 }
0474
0475 offload_indication_fdb_flood_test()
0476 {
0477 RET=0
0478
0479 bridge fdb append 00:00:00:00:00:00 dev vxlan0 self dst $LOCAL_IP_2
0480
0481 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb 00:00:00:00:00:00 \
0482 bridge fdb show brport vxlan0
0483 check_err $?
0484
0485 bridge fdb del 00:00:00:00:00:00 dev vxlan0 self
0486
0487 log_test "vxlan flood entry offload indication"
0488 }
0489
0490 offload_indication_fdb_bridge_test()
0491 {
0492 RET=0
0493
0494 bridge fdb add de:ad:be:ef:13:37 dev vxlan0 self master static \
0495 dst $LOCAL_IP_2
0496
0497 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
0498 de:ad:be:ef:13:37 self bridge fdb show brport vxlan0
0499 check_err $?
0500 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
0501 de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0
0502 check_err $?
0503
0504 log_test "vxlan entry offload indication - initial state"
0505
0506
0507
0508 RET=0
0509
0510 bridge fdb del de:ad:be:ef:13:37 dev vxlan0 master
0511 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \
0512 de:ad:be:ef:13:37 self bridge fdb show brport vxlan0
0513 check_err $?
0514
0515 log_test "vxlan entry offload indication - after removal from bridge"
0516
0517
0518
0519 RET=0
0520
0521 bridge fdb add de:ad:be:ef:13:37 dev vxlan0 master static
0522 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
0523 de:ad:be:ef:13:37 self bridge fdb show brport vxlan0
0524 check_err $?
0525 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
0526 de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0
0527 check_err $?
0528
0529 log_test "vxlan entry offload indication - after re-add to bridge"
0530
0531
0532
0533 RET=0
0534
0535 bridge fdb del de:ad:be:ef:13:37 dev vxlan0 self
0536 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \
0537 de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0
0538 check_err $?
0539
0540 log_test "vxlan entry offload indication - after removal from vxlan"
0541
0542
0543
0544 RET=0
0545
0546 bridge fdb add de:ad:be:ef:13:37 dev vxlan0 self dst $LOCAL_IP_2
0547 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
0548 de:ad:be:ef:13:37 self bridge fdb show brport vxlan0
0549 check_err $?
0550 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
0551 de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0
0552 check_err $?
0553
0554 log_test "vxlan entry offload indication - after re-add to vxlan"
0555
0556 bridge fdb del de:ad:be:ef:13:37 dev vxlan0 self master
0557 }
0558
0559 offload_indication_fdb_test()
0560 {
0561 offload_indication_fdb_flood_test
0562 offload_indication_fdb_bridge_test
0563 }
0564
0565 offload_indication_decap_route_test()
0566 {
0567 RET=0
0568
0569 busywait "$TIMEOUT" wait_for_offload \
0570 ip $IP_FLAG route show table local $LOCAL_IP_1
0571 check_err $?
0572
0573 ip link set dev vxlan0 down
0574 busywait "$TIMEOUT" wait_for_offload \
0575 ip $IP_FLAG route show table local $LOCAL_IP_1
0576 check_err $?
0577
0578 ip link set dev vxlan1 down
0579 busywait "$TIMEOUT" not wait_for_offload \
0580 ip $IP_FLAG route show table local $LOCAL_IP_1
0581 check_err $?
0582
0583 log_test "vxlan decap route - vxlan device down"
0584
0585 RET=0
0586
0587 ip link set dev vxlan1 up
0588 busywait "$TIMEOUT" wait_for_offload \
0589 ip $IP_FLAG route show table local $LOCAL_IP_1
0590 check_err $?
0591
0592 ip link set dev vxlan0 up
0593 busywait "$TIMEOUT" wait_for_offload \
0594 ip $IP_FLAG route show table local $LOCAL_IP_1
0595 check_err $?
0596
0597 log_test "vxlan decap route - vxlan device up"
0598
0599 RET=0
0600
0601 ip address delete $LOCAL_IP_1/$PREFIX_LEN dev lo
0602 busywait "$TIMEOUT" not wait_for_offload \
0603 ip $IP_FLAG route show table local $LOCAL_IP_1
0604 check_err $?
0605
0606 ip address add $LOCAL_IP_1/$PREFIX_LEN dev lo
0607 busywait "$TIMEOUT" wait_for_offload \
0608 ip $IP_FLAG route show table local $LOCAL_IP_1
0609 check_err $?
0610
0611 log_test "vxlan decap route - add local route"
0612
0613 RET=0
0614
0615 ip link set dev $swp1 nomaster
0616 busywait "$TIMEOUT" wait_for_offload \
0617 ip $IP_FLAG route show table local $LOCAL_IP_1
0618 check_err $?
0619
0620 ip link set dev $swp2 nomaster
0621 busywait "$TIMEOUT" not wait_for_offload \
0622 ip $IP_FLAG route show table local $LOCAL_IP_1
0623 check_err $?
0624
0625 ip link set dev $swp1 master br0
0626 ip link set dev $swp2 master br1
0627 busywait "$TIMEOUT" wait_for_offload \
0628 ip $IP_FLAG route show table local $LOCAL_IP_1
0629 check_err $?
0630
0631 log_test "vxlan decap route - local ports enslavement"
0632
0633 RET=0
0634
0635 ip link del dev br0
0636 busywait "$TIMEOUT" wait_for_offload \
0637 ip $IP_FLAG route show table local $LOCAL_IP_1
0638 check_err $?
0639
0640 ip link del dev br1
0641 busywait "$TIMEOUT" not wait_for_offload \
0642 ip $IP_FLAG route show table local $LOCAL_IP_1
0643 check_err $?
0644
0645 log_test "vxlan decap route - bridge device deletion"
0646
0647 RET=0
0648
0649 ip link add name br0 up type bridge mcast_snooping 0
0650 ip link add name br1 up type bridge mcast_snooping 0
0651 ip link set dev $swp1 master br0
0652 ip link set dev $swp2 master br1
0653 ip link set dev vxlan0 master br0
0654 ip link set dev vxlan1 master br1
0655 busywait "$TIMEOUT" wait_for_offload \
0656 ip $IP_FLAG route show table local $LOCAL_IP_1
0657 check_err $?
0658
0659 ip link del dev vxlan0
0660 busywait "$TIMEOUT" wait_for_offload \
0661 ip $IP_FLAG route show table local $LOCAL_IP_1
0662 check_err $?
0663
0664 ip link del dev vxlan1
0665 busywait "$TIMEOUT" not wait_for_offload \
0666 ip $IP_FLAG route show table local $LOCAL_IP_1
0667 check_err $?
0668
0669 log_test "vxlan decap route - vxlan device deletion"
0670
0671 ip link add name vxlan0 up master br0 type vxlan id 10 nolearning \
0672 $UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0673 ip link add name vxlan1 up master br1 type vxlan id 20 nolearning \
0674 $UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0675 }
0676
0677 check_fdb_offloaded()
0678 {
0679 local mac=00:11:22:33:44:55
0680 local zmac=00:00:00:00:00:00
0681
0682 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $mac self \
0683 bridge fdb show dev vxlan0
0684 check_err $?
0685 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $mac master \
0686 bridge fdb show dev vxlan0
0687 check_err $?
0688
0689 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
0690 bridge fdb show dev vxlan0
0691 check_err $?
0692 }
0693
0694 check_vxlan_fdb_not_offloaded()
0695 {
0696 local mac=00:11:22:33:44:55
0697 local zmac=00:00:00:00:00:00
0698
0699 bridge fdb show dev vxlan0 | grep $mac | grep -q self
0700 check_err $?
0701 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $mac self \
0702 bridge fdb show dev vxlan0
0703 check_err $?
0704
0705 bridge fdb show dev vxlan0 | grep $zmac | grep -q self
0706 check_err $?
0707 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \
0708 bridge fdb show dev vxlan0
0709 check_err $?
0710 }
0711
0712 check_bridge_fdb_not_offloaded()
0713 {
0714 local mac=00:11:22:33:44:55
0715 local zmac=00:00:00:00:00:00
0716
0717 bridge fdb show dev vxlan0 | grep $mac | grep -q master
0718 check_err $?
0719 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $mac master \
0720 bridge fdb show dev vxlan0
0721 check_err $?
0722 }
0723
0724 __offload_indication_join_vxlan_first()
0725 {
0726 local vid=$1; shift
0727
0728 local mac=00:11:22:33:44:55
0729 local zmac=00:00:00:00:00:00
0730
0731 bridge fdb append $zmac dev vxlan0 self dst $LOCAL_IP_2
0732
0733 ip link set dev vxlan0 master br0
0734 bridge fdb add dev vxlan0 $mac self master static dst $LOCAL_IP_2
0735
0736 RET=0
0737 check_vxlan_fdb_not_offloaded
0738 ip link set dev $swp1 master br0
0739 sleep .1
0740 check_fdb_offloaded
0741 log_test "offload indication - attach vxlan first"
0742
0743 RET=0
0744 ip link set dev vxlan0 down
0745 check_vxlan_fdb_not_offloaded
0746 check_bridge_fdb_not_offloaded
0747 log_test "offload indication - set vxlan down"
0748
0749 RET=0
0750 ip link set dev vxlan0 up
0751 sleep .1
0752 check_fdb_offloaded
0753 log_test "offload indication - set vxlan up"
0754
0755 if [[ ! -z $vid ]]; then
0756 RET=0
0757 bridge vlan del dev vxlan0 vid $vid
0758 check_vxlan_fdb_not_offloaded
0759 check_bridge_fdb_not_offloaded
0760 log_test "offload indication - delete VLAN"
0761
0762 RET=0
0763 bridge vlan add dev vxlan0 vid $vid
0764 check_vxlan_fdb_not_offloaded
0765 check_bridge_fdb_not_offloaded
0766 log_test "offload indication - add tagged VLAN"
0767
0768 RET=0
0769 bridge vlan add dev vxlan0 vid $vid pvid untagged
0770 sleep .1
0771 check_fdb_offloaded
0772 log_test "offload indication - add pvid/untagged VLAN"
0773 fi
0774
0775 RET=0
0776 ip link set dev $swp1 nomaster
0777 check_vxlan_fdb_not_offloaded
0778 log_test "offload indication - detach port"
0779 }
0780
0781 offload_indication_join_vxlan_first()
0782 {
0783 ip link add dev br0 up type bridge mcast_snooping 0
0784 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
0785 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0786
0787 __offload_indication_join_vxlan_first
0788
0789 ip link del dev vxlan0
0790 ip link del dev br0
0791 }
0792
0793 __offload_indication_join_vxlan_last()
0794 {
0795 local zmac=00:00:00:00:00:00
0796
0797 RET=0
0798
0799 bridge fdb append $zmac dev vxlan0 self dst $LOCAL_IP_2
0800
0801 ip link set dev $swp1 master br0
0802
0803 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \
0804 bridge fdb show dev vxlan0
0805 check_err $?
0806
0807 ip link set dev vxlan0 master br0
0808
0809 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
0810 bridge fdb show dev vxlan0
0811 check_err $?
0812
0813 log_test "offload indication - attach vxlan last"
0814 }
0815
0816 offload_indication_join_vxlan_last()
0817 {
0818 ip link add dev br0 up type bridge mcast_snooping 0
0819 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
0820 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0821
0822 __offload_indication_join_vxlan_last
0823
0824 ip link del dev vxlan0
0825 ip link del dev br0
0826 }
0827
0828 offload_indication_test()
0829 {
0830 offload_indication_setup_create
0831 offload_indication_fdb_test
0832 offload_indication_decap_route_test
0833 offload_indication_setup_destroy
0834
0835 log_info "offload indication - replay & cleanup"
0836 offload_indication_join_vxlan_first
0837 offload_indication_join_vxlan_last
0838 }
0839
0840 sanitization_vlan_aware_test()
0841 {
0842 RET=0
0843
0844 ip link add dev br0 type bridge mcast_snooping 0 vlan_filtering 1
0845
0846 ip link add name vxlan10 up master br0 type vxlan id 10 nolearning \
0847 $UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0848
0849 ip link add name vxlan20 up master br0 type vxlan id 20 nolearning \
0850 $UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0851
0852
0853
0854 bridge vlan add vid 10 dev vxlan10 pvid untagged
0855 bridge vlan add vid 20 dev vxlan20 pvid untagged
0856
0857 ip link set dev $swp1 master br0
0858 check_err $?
0859
0860 log_test "vlan-aware - enslavement to vlan-aware bridge"
0861
0862
0863
0864 RET=0
0865
0866 bridge vlan add vid 10 dev vxlan20 pvid untagged &> /dev/null
0867 check_fail $?
0868
0869 log_test "vlan-aware - two vnis mapped to the same vlan"
0870
0871
0872
0873 RET=0
0874
0875 ip link set dev $swp1 nomaster
0876
0877 bridge vlan del vid 20 dev vxlan20 pvid untagged
0878 bridge vlan add vid 10 dev vxlan20 pvid untagged
0879
0880 ip link set dev $swp1 master br0 &> /dev/null
0881 check_fail $?
0882
0883 log_test "vlan-aware - failed enslavement to vlan-aware bridge"
0884
0885 bridge vlan del vid 10 dev vxlan20
0886 bridge vlan add vid 20 dev vxlan20 pvid untagged
0887
0888
0889
0890
0891
0892
0893
0894 ip address add $LOCAL_IP_1/$PREFIX_LEN dev lo
0895
0896 ip link set dev vxlan10 type vxlan ttl 10
0897 ip link set dev $swp1 master br0 &> /dev/null
0898 check_fail $?
0899
0900 busywait "$TIMEOUT" not wait_for_offload \
0901 ip $IP_FLAG route show table local $LOCAL_IP_1
0902 check_err $?
0903
0904 log_test "vlan-aware - failed enslavement to bridge due to conflict"
0905
0906 ip link set dev vxlan10 type vxlan ttl 20
0907 ip address del $LOCAL_IP_1/$PREFIX_LEN dev lo
0908
0909 ip link del dev vxlan20
0910 ip link del dev vxlan10
0911 ip link del dev br0
0912 }
0913
0914 offload_indication_vlan_aware_setup_create()
0915 {
0916
0917
0918 ip link add name br0 up type bridge mcast_snooping 0 vlan_filtering 1 \
0919 vlan_default_pvid 0
0920
0921 ip link set dev $swp1 master br0
0922
0923 bridge vlan add vid 10 dev $swp1
0924 bridge vlan add vid 20 dev $swp1
0925
0926 ip address add $LOCAL_IP_1/$PREFIX_LEN dev lo
0927
0928 ip link add name vxlan10 up master br0 type vxlan id 10 nolearning \
0929 $UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0930 ip link add name vxlan20 up master br0 type vxlan id 20 nolearning \
0931 $UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
0932
0933 bridge vlan add vid 10 dev vxlan10 pvid untagged
0934 bridge vlan add vid 20 dev vxlan20 pvid untagged
0935 }
0936
0937 offload_indication_vlan_aware_setup_destroy()
0938 {
0939 bridge vlan del vid 20 dev vxlan20
0940 bridge vlan del vid 10 dev vxlan10
0941
0942 ip link del dev vxlan20
0943 ip link del dev vxlan10
0944
0945 ip address del $LOCAL_IP_1/$PREFIX_LEN dev lo
0946
0947 bridge vlan del vid 20 dev $swp1
0948 bridge vlan del vid 10 dev $swp1
0949
0950 ip link set dev $swp1 nomaster
0951
0952 ip link del dev br0
0953 }
0954
0955 offload_indication_vlan_aware_fdb_test()
0956 {
0957 RET=0
0958
0959 log_info "vxlan entry offload indication - vlan-aware"
0960
0961 bridge fdb add de:ad:be:ef:13:37 dev vxlan10 self master static \
0962 dst $LOCAL_IP_2 vlan 10
0963
0964 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
0965 de:ad:be:ef:13:37 self bridge fdb show brport vxlan10
0966 check_err $?
0967 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
0968 de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan10
0969 check_err $?
0970
0971 log_test "vxlan entry offload indication - initial state"
0972
0973
0974
0975 RET=0
0976
0977 bridge fdb del de:ad:be:ef:13:37 dev vxlan10 master vlan 10
0978 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \
0979 de:ad:be:ef:13:37 self bridge fdb show brport vxlan10
0980 check_err $?
0981
0982 log_test "vxlan entry offload indication - after removal from bridge"
0983
0984
0985
0986 RET=0
0987
0988 bridge fdb add de:ad:be:ef:13:37 dev vxlan10 master static vlan 10
0989 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
0990 de:ad:be:ef:13:37 self bridge fdb show brport vxlan10
0991 check_err $?
0992 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
0993 de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan10
0994 check_err $?
0995
0996 log_test "vxlan entry offload indication - after re-add to bridge"
0997
0998
0999
1000 RET=0
1001
1002 bridge fdb del de:ad:be:ef:13:37 dev vxlan10 self
1003 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \
1004 de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan10
1005 check_err $?
1006
1007 log_test "vxlan entry offload indication - after removal from vxlan"
1008
1009
1010
1011 RET=0
1012
1013 bridge fdb add de:ad:be:ef:13:37 dev vxlan10 self dst $LOCAL_IP_2
1014 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
1015 de:ad:be:ef:13:37 self bridge fdb show brport vxlan10
1016 check_err $?
1017 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
1018 de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan10
1019 check_err $?
1020
1021 log_test "vxlan entry offload indication - after re-add to vxlan"
1022
1023 bridge fdb del de:ad:be:ef:13:37 dev vxlan10 self master vlan 10
1024 }
1025
1026 offload_indication_vlan_aware_decap_route_test()
1027 {
1028 RET=0
1029
1030 busywait "$TIMEOUT" wait_for_offload \
1031 ip $IP_FLAG route show table local $LOCAL_IP_1
1032 check_err $?
1033
1034
1035
1036 bridge vlan add vid 10 dev vxlan10 untagged
1037
1038 busywait "$TIMEOUT" wait_for_offload \
1039 ip $IP_FLAG route show table local $LOCAL_IP_1
1040 check_err $?
1041
1042
1043
1044 bridge vlan add vid 20 dev vxlan20 untagged
1045
1046 busywait "$TIMEOUT" not wait_for_offload \
1047 ip $IP_FLAG route show table local $LOCAL_IP_1
1048 check_err $?
1049
1050
1051 bridge vlan add vid 10 dev vxlan10 pvid untagged
1052 bridge vlan add vid 20 dev vxlan20 pvid untagged
1053
1054 busywait "$TIMEOUT" wait_for_offload ip $IP_FLAG route show table local \
1055 $LOCAL_IP_1
1056 check_err $?
1057
1058 log_test "vxlan decap route - vni map/unmap"
1059 }
1060
1061 offload_indication_vlan_aware_join_vxlan_first()
1062 {
1063 ip link add dev br0 up type bridge mcast_snooping 0 \
1064 vlan_filtering 1 vlan_default_pvid 1
1065 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
1066 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
1067
1068 __offload_indication_join_vxlan_first 1
1069
1070 ip link del dev vxlan0
1071 ip link del dev br0
1072 }
1073
1074 offload_indication_vlan_aware_join_vxlan_last()
1075 {
1076 ip link add dev br0 up type bridge mcast_snooping 0 \
1077 vlan_filtering 1 vlan_default_pvid 1
1078 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
1079 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
1080
1081 __offload_indication_join_vxlan_last
1082
1083 ip link del dev vxlan0
1084 ip link del dev br0
1085 }
1086
1087 offload_indication_vlan_aware_l3vni_test()
1088 {
1089 local zmac=00:00:00:00:00:00
1090
1091 RET=0
1092
1093 sysctl_set net.ipv6.conf.default.disable_ipv6 1
1094 ip link add dev br0 up type bridge mcast_snooping 0 \
1095 vlan_filtering 1 vlan_default_pvid 0
1096 ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
1097 ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
1098
1099 ip link set dev $swp1 master br0
1100
1101
1102
1103 bridge fdb append $zmac dev vxlan0 self dst $LOCAL_IP_2
1104
1105 ip link set dev vxlan0 master br0
1106 bridge vlan add dev vxlan0 vid 10 pvid untagged
1107
1108 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
1109 bridge fdb show brport vxlan0
1110 check_err $? "vxlan tunnel not offloaded when should"
1111
1112
1113 ip link add link br0 name br10 up type vlan id 10
1114 sysctl_set net.ipv6.conf.br10.disable_ipv6 0
1115 ip -6 address add 2001:db8:1::1/64 dev br10
1116 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
1117 bridge fdb show brport vxlan0
1118 check_err $? "vxlan tunnel not offloaded when should"
1119
1120
1121
1122 ip link set dev vxlan0 nomaster
1123 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \
1124 bridge fdb show brport vxlan0
1125 check_err $? "vxlan tunnel offloaded after unlinked from bridge"
1126
1127 ip link set dev vxlan0 master br0
1128 busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \
1129 bridge fdb show brport vxlan0
1130 check_err $? "vxlan tunnel offloaded despite no matching vid"
1131
1132 bridge vlan add dev vxlan0 vid 10 pvid untagged
1133 busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
1134 bridge fdb show brport vxlan0
1135 check_err $? "vxlan tunnel not offloaded after adding vid"
1136
1137 log_test "vxlan - l3 vni"
1138
1139 ip link del dev vxlan0
1140 ip link del dev br0
1141 sysctl_restore net.ipv6.conf.default.disable_ipv6
1142 }
1143
1144 offload_indication_vlan_aware_test()
1145 {
1146 offload_indication_vlan_aware_setup_create
1147 offload_indication_vlan_aware_fdb_test
1148 offload_indication_vlan_aware_decap_route_test
1149 offload_indication_vlan_aware_setup_destroy
1150
1151 log_info "offload indication - replay & cleanup - vlan aware"
1152 offload_indication_vlan_aware_join_vxlan_first
1153 offload_indication_vlan_aware_join_vxlan_last
1154 offload_indication_vlan_aware_l3vni_test
1155 }
1156
1157 trap cleanup EXIT
1158
1159 setup_prepare
1160 setup_wait
1161
1162 tests_run
1163
1164 exit $EXIT_STATUS