| #!/bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| # |
| # Test operations that we expect to report extended ack. |
| |
| lib_dir=$(dirname $0)/../../../net/forwarding |
| |
| ALL_TESTS=" |
| netdev_pre_up_test |
| vxlan_vlan_add_test |
| vxlan_bridge_create_test |
| bridge_create_test |
| " |
| NUM_NETIFS=2 |
| source $lib_dir/lib.sh |
| |
| setup_prepare() |
| { |
| swp1=${NETIFS[p1]} |
| swp2=${NETIFS[p2]} |
| |
| ip link set dev $swp1 up |
| ip link set dev $swp2 up |
| } |
| |
| cleanup() |
| { |
| pre_cleanup |
| |
| ip link set dev $swp2 down |
| ip link set dev $swp1 down |
| } |
| |
| netdev_pre_up_test() |
| { |
| RET=0 |
| |
| ip link add name br1 up type bridge vlan_filtering 0 mcast_snooping 0 |
| ip link add name vx1 up type vxlan id 1000 \ |
| local 192.0.2.17 remote 192.0.2.18 \ |
| dstport 4789 nolearning noudpcsum tos inherit ttl 100 |
| |
| ip link set dev vx1 master br1 |
| check_err $? |
| |
| ip link set dev $swp1 master br1 |
| check_err $? |
| |
| ip link add name br2 up type bridge vlan_filtering 0 mcast_snooping 0 |
| ip link add name vx2 up type vxlan id 2000 \ |
| local 192.0.2.17 remote 192.0.2.18 \ |
| dstport 4789 nolearning noudpcsum tos inherit ttl 100 |
| |
| ip link set dev vx2 master br2 |
| check_err $? |
| |
| ip link set dev $swp2 master br2 |
| check_err $? |
| |
| # Unsupported configuration: mlxsw demands that all offloaded VXLAN |
| # devices have the same TTL. |
| ip link set dev vx2 down |
| ip link set dev vx2 type vxlan ttl 200 |
| |
| ip link set dev vx2 up &>/dev/null |
| check_fail $? |
| |
| ip link set dev vx2 up 2>&1 >/dev/null | grep -q mlxsw_spectrum |
| check_err $? |
| |
| log_test "extack - NETDEV_PRE_UP" |
| |
| ip link del dev vx2 |
| ip link del dev br2 |
| |
| ip link del dev vx1 |
| ip link del dev br1 |
| } |
| |
| vxlan_vlan_add_test() |
| { |
| RET=0 |
| |
| ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 0 |
| |
| # Unsupported configuration: mlxsw demands VXLAN with "noudpcsum". |
| ip link add name vx1 up type vxlan id 1000 \ |
| local 192.0.2.17 remote 192.0.2.18 \ |
| dstport 4789 tos inherit ttl 100 |
| |
| ip link set dev vx1 master br1 |
| check_err $? |
| |
| bridge vlan add dev vx1 vid 1 |
| check_err $? |
| |
| ip link set dev $swp1 master br1 |
| check_err $? |
| |
| bridge vlan add dev vx1 vid 1 pvid untagged 2>&1 >/dev/null \ |
| | grep -q mlxsw_spectrum |
| check_err $? |
| |
| log_test "extack - map VLAN at VXLAN device" |
| |
| ip link del dev vx1 |
| ip link del dev br1 |
| } |
| |
| vxlan_bridge_create_test() |
| { |
| RET=0 |
| |
| # Unsupported configuration: mlxsw demands VXLAN with "noudpcsum". |
| ip link add name vx1 up type vxlan id 1000 \ |
| local 192.0.2.17 remote 192.0.2.18 \ |
| dstport 4789 tos inherit ttl 100 |
| |
| # Test with VLAN-aware bridge. |
| ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 0 |
| |
| ip link set dev vx1 master br1 |
| |
| ip link set dev $swp1 master br1 2>&1 > /dev/null \ |
| | grep -q mlxsw_spectrum |
| check_err $? |
| |
| # Test with VLAN-unaware bridge. |
| ip link set dev br1 type bridge vlan_filtering 0 |
| |
| ip link set dev $swp1 master br1 2>&1 > /dev/null \ |
| | grep -q mlxsw_spectrum |
| check_err $? |
| |
| log_test "extack - bridge creation with VXLAN" |
| |
| ip link del dev br1 |
| ip link del dev vx1 |
| } |
| |
| bridge_create_test() |
| { |
| RET=0 |
| |
| ip link add name br1 up type bridge vlan_filtering 1 |
| ip link add name br2 up type bridge vlan_filtering 1 |
| |
| ip link set dev $swp1 master br1 |
| check_err $? |
| |
| # Only one VLAN-aware bridge is supported, so this should fail with |
| # an extack. |
| ip link set dev $swp2 master br2 2>&1 > /dev/null \ |
| | grep -q mlxsw_spectrum |
| check_err $? |
| |
| log_test "extack - multiple VLAN-aware bridges creation" |
| |
| ip link del dev br2 |
| ip link del dev br1 |
| } |
| |
| trap cleanup EXIT |
| |
| setup_prepare |
| setup_wait |
| |
| tests_run |
| |
| exit $EXIT_STATUS |