Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests: mlxsw: Add a test for VxLAN configuration with a VLAN-aware bridge

Extend the existing VLAN-unaware tests with their VLAN-aware
counterparts. This includes sanitization of invalid configuration and
offload indication on the local route performing decapsulation and the
FDB entries perform encapsulation.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Reviewed-by: Petr Machata <petrm@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Ido Schimmel and committed by
David S. Miller
f0723237 bbe21061

+203 -1
+203 -1
tools/testing/selftests/drivers/net/mlxsw/vxlan.sh
··· 6 6 7 7 lib_dir=$(dirname $0)/../../../net/forwarding 8 8 9 - ALL_TESTS="sanitization_test offload_indication_test" 9 + ALL_TESTS="sanitization_test offload_indication_test \ 10 + sanitization_vlan_aware_test offload_indication_vlan_aware_test" 10 11 NUM_NETIFS=2 11 12 source $lib_dir/lib.sh 12 13 ··· 653 652 offload_indication_fdb_test 654 653 offload_indication_decap_route_test 655 654 offload_indication_setup_destroy 655 + } 656 + 657 + sanitization_vlan_aware_test() 658 + { 659 + RET=0 660 + 661 + ip link add dev br0 type bridge mcast_snooping 0 vlan_filtering 1 662 + 663 + ip link add name vxlan10 up master br0 type vxlan id 10 nolearning \ 664 + noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789 665 + 666 + ip link add name vxlan20 up master br0 type vxlan id 20 nolearning \ 667 + noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789 668 + 669 + # Test that when each VNI is mapped to a different VLAN we can enslave 670 + # a port to the bridge 671 + bridge vlan add vid 10 dev vxlan10 pvid untagged 672 + bridge vlan add vid 20 dev vxlan20 pvid untagged 673 + 674 + ip link set dev $swp1 master br0 675 + check_err $? 676 + 677 + log_test "vlan-aware - enslavement to vlan-aware bridge" 678 + 679 + # Try to map both VNIs to the same VLAN and make sure configuration 680 + # fails 681 + RET=0 682 + 683 + bridge vlan add vid 10 dev vxlan20 pvid untagged &> /dev/null 684 + check_fail $? 685 + 686 + log_test "vlan-aware - two vnis mapped to the same vlan" 687 + 688 + # Test that enslavement of a port to a bridge fails when two VNIs 689 + # are mapped to the same VLAN 690 + RET=0 691 + 692 + ip link set dev $swp1 nomaster 693 + 694 + bridge vlan del vid 20 dev vxlan20 pvid untagged 695 + bridge vlan add vid 10 dev vxlan20 pvid untagged 696 + 697 + ip link set dev $swp1 master br0 &> /dev/null 698 + check_fail $? 699 + 700 + log_test "vlan-aware - failed enslavement to vlan-aware bridge" 701 + 702 + ip link del dev vxlan20 703 + ip link del dev vxlan10 704 + ip link del dev br0 705 + } 706 + 707 + offload_indication_vlan_aware_setup_create() 708 + { 709 + # Create a simple setup with two VxLAN devices and a single VLAN-aware 710 + # bridge 711 + ip link add name br0 up type bridge mcast_snooping 0 vlan_filtering 1 \ 712 + vlan_default_pvid 0 713 + 714 + ip link set dev $swp1 master br0 715 + 716 + bridge vlan add vid 10 dev $swp1 717 + bridge vlan add vid 20 dev $swp1 718 + 719 + ip address add 198.51.100.1/32 dev lo 720 + 721 + ip link add name vxlan10 up master br0 type vxlan id 10 nolearning \ 722 + noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789 723 + ip link add name vxlan20 up master br0 type vxlan id 20 nolearning \ 724 + noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789 725 + 726 + bridge vlan add vid 10 dev vxlan10 pvid untagged 727 + bridge vlan add vid 20 dev vxlan20 pvid untagged 728 + } 729 + 730 + offload_indication_vlan_aware_setup_destroy() 731 + { 732 + bridge vlan del vid 20 dev vxlan20 733 + bridge vlan del vid 10 dev vxlan10 734 + 735 + ip link del dev vxlan20 736 + ip link del dev vxlan10 737 + 738 + ip address del 198.51.100.1/32 dev lo 739 + 740 + bridge vlan del vid 20 dev $swp1 741 + bridge vlan del vid 10 dev $swp1 742 + 743 + ip link set dev $swp1 nomaster 744 + 745 + ip link del dev br0 746 + } 747 + 748 + offload_indication_vlan_aware_fdb_test() 749 + { 750 + RET=0 751 + 752 + log_info "vxlan entry offload indication - vlan-aware" 753 + 754 + bridge fdb add de:ad:be:ef:13:37 dev vxlan10 self master static \ 755 + dst 198.51.100.2 vlan 10 756 + 757 + bridge fdb show brport vxlan10 | grep de:ad:be:ef:13:37 | grep self \ 758 + | grep -q offload 759 + check_err $? 760 + bridge fdb show brport vxlan10 | grep de:ad:be:ef:13:37 | grep -v self \ 761 + | grep -q offload 762 + check_err $? 763 + 764 + log_test "vxlan entry offload indication - initial state" 765 + 766 + # Remove FDB entry from the bridge driver and check that corresponding 767 + # entry in the VxLAN driver is not marked as offloaded 768 + RET=0 769 + 770 + bridge fdb del de:ad:be:ef:13:37 dev vxlan10 master vlan 10 771 + bridge fdb show brport vxlan10 | grep de:ad:be:ef:13:37 | grep self \ 772 + | grep -q offload 773 + check_fail $? 774 + 775 + log_test "vxlan entry offload indication - after removal from bridge" 776 + 777 + # Add the FDB entry back to the bridge driver and make sure it is 778 + # marked as offloaded in both drivers 779 + RET=0 780 + 781 + bridge fdb add de:ad:be:ef:13:37 dev vxlan10 master static vlan 10 782 + bridge fdb show brport vxlan10 | grep de:ad:be:ef:13:37 | grep self \ 783 + | grep -q offload 784 + check_err $? 785 + bridge fdb show brport vxlan10 | grep de:ad:be:ef:13:37 | grep -v self \ 786 + | grep -q offload 787 + check_err $? 788 + 789 + log_test "vxlan entry offload indication - after re-add to bridge" 790 + 791 + # Remove FDB entry from the VxLAN driver and check that corresponding 792 + # entry in the bridge driver is not marked as offloaded 793 + RET=0 794 + 795 + bridge fdb del de:ad:be:ef:13:37 dev vxlan10 self 796 + bridge fdb show brport vxlan10 | grep de:ad:be:ef:13:37 | grep -v self \ 797 + | grep -q offload 798 + check_fail $? 799 + 800 + log_test "vxlan entry offload indication - after removal from vxlan" 801 + 802 + # Add the FDB entry back to the VxLAN driver and make sure it is 803 + # marked as offloaded in both drivers 804 + RET=0 805 + 806 + bridge fdb add de:ad:be:ef:13:37 dev vxlan10 self dst 198.51.100.2 807 + bridge fdb show brport vxlan10 | grep de:ad:be:ef:13:37 | grep self \ 808 + | grep -q offload 809 + check_err $? 810 + bridge fdb show brport vxlan10 | grep de:ad:be:ef:13:37 | grep -v self \ 811 + | grep -q offload 812 + check_err $? 813 + 814 + log_test "vxlan entry offload indication - after re-add to vxlan" 815 + 816 + bridge fdb del de:ad:be:ef:13:37 dev vxlan10 self master vlan 10 817 + } 818 + 819 + offload_indication_vlan_aware_decap_route_test() 820 + { 821 + RET=0 822 + 823 + ip route show table local | grep 198.51.100.1 | grep -q offload 824 + check_err $? 825 + 826 + # Toggle PVID flag on one VxLAN device and make sure route is still 827 + # marked as offloaded 828 + bridge vlan add vid 10 dev vxlan10 untagged 829 + 830 + ip route show table local | grep 198.51.100.1 | grep -q offload 831 + check_err $? 832 + 833 + # Toggle PVID flag on second VxLAN device and make sure route is no 834 + # longer marked as offloaded 835 + bridge vlan add vid 20 dev vxlan20 untagged 836 + 837 + ip route show table local | grep 198.51.100.1 | grep -q offload 838 + check_fail $? 839 + 840 + # Toggle PVID flag back and make sure route is marked as offloaded 841 + bridge vlan add vid 10 dev vxlan10 pvid untagged 842 + bridge vlan add vid 20 dev vxlan20 pvid untagged 843 + 844 + ip route show table local | grep 198.51.100.1 | grep -q offload 845 + check_err $? 846 + 847 + log_test "vxlan decap route - vni map/unmap" 848 + } 849 + 850 + offload_indication_vlan_aware_test() 851 + { 852 + offload_indication_vlan_aware_setup_create 853 + offload_indication_vlan_aware_fdb_test 854 + offload_indication_vlan_aware_decap_route_test 855 + offload_indication_vlan_aware_setup_destroy 656 856 } 657 857 658 858 trap cleanup EXIT