1*4882a593Smuzhiyun#!/bin/bash 2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 3*4882a593Smuzhiyun# 4*4882a593Smuzhiyun# Test operations that we expect to report extended ack. 5*4882a593Smuzhiyun 6*4882a593Smuzhiyunlib_dir=$(dirname $0)/../../../net/forwarding 7*4882a593Smuzhiyun 8*4882a593SmuzhiyunALL_TESTS=" 9*4882a593Smuzhiyun netdev_pre_up_test 10*4882a593Smuzhiyun vxlan_vlan_add_test 11*4882a593Smuzhiyun vxlan_bridge_create_test 12*4882a593Smuzhiyun bridge_create_test 13*4882a593Smuzhiyun" 14*4882a593SmuzhiyunNUM_NETIFS=2 15*4882a593Smuzhiyunsource $lib_dir/lib.sh 16*4882a593Smuzhiyun 17*4882a593Smuzhiyunsetup_prepare() 18*4882a593Smuzhiyun{ 19*4882a593Smuzhiyun swp1=${NETIFS[p1]} 20*4882a593Smuzhiyun swp2=${NETIFS[p2]} 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun ip link set dev $swp1 up 23*4882a593Smuzhiyun ip link set dev $swp2 up 24*4882a593Smuzhiyun} 25*4882a593Smuzhiyun 26*4882a593Smuzhiyuncleanup() 27*4882a593Smuzhiyun{ 28*4882a593Smuzhiyun pre_cleanup 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun ip link set dev $swp2 down 31*4882a593Smuzhiyun ip link set dev $swp1 down 32*4882a593Smuzhiyun} 33*4882a593Smuzhiyun 34*4882a593Smuzhiyunnetdev_pre_up_test() 35*4882a593Smuzhiyun{ 36*4882a593Smuzhiyun RET=0 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun ip link add name br1 up type bridge vlan_filtering 0 mcast_snooping 0 39*4882a593Smuzhiyun ip link add name vx1 up type vxlan id 1000 \ 40*4882a593Smuzhiyun local 192.0.2.17 remote 192.0.2.18 \ 41*4882a593Smuzhiyun dstport 4789 nolearning noudpcsum tos inherit ttl 100 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun ip link set dev vx1 master br1 44*4882a593Smuzhiyun check_err $? 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun ip link set dev $swp1 master br1 47*4882a593Smuzhiyun check_err $? 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun ip link add name br2 up type bridge vlan_filtering 0 mcast_snooping 0 50*4882a593Smuzhiyun ip link add name vx2 up type vxlan id 2000 \ 51*4882a593Smuzhiyun local 192.0.2.17 remote 192.0.2.18 \ 52*4882a593Smuzhiyun dstport 4789 nolearning noudpcsum tos inherit ttl 100 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun ip link set dev vx2 master br2 55*4882a593Smuzhiyun check_err $? 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun ip link set dev $swp2 master br2 58*4882a593Smuzhiyun check_err $? 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun # Unsupported configuration: mlxsw demands that all offloaded VXLAN 61*4882a593Smuzhiyun # devices have the same TTL. 62*4882a593Smuzhiyun ip link set dev vx2 down 63*4882a593Smuzhiyun ip link set dev vx2 type vxlan ttl 200 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun ip link set dev vx2 up &>/dev/null 66*4882a593Smuzhiyun check_fail $? 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun ip link set dev vx2 up 2>&1 >/dev/null | grep -q mlxsw_spectrum 69*4882a593Smuzhiyun check_err $? 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun log_test "extack - NETDEV_PRE_UP" 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun ip link del dev vx2 74*4882a593Smuzhiyun ip link del dev br2 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun ip link del dev vx1 77*4882a593Smuzhiyun ip link del dev br1 78*4882a593Smuzhiyun} 79*4882a593Smuzhiyun 80*4882a593Smuzhiyunvxlan_vlan_add_test() 81*4882a593Smuzhiyun{ 82*4882a593Smuzhiyun RET=0 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 0 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun # Unsupported configuration: mlxsw demands VXLAN with "noudpcsum". 87*4882a593Smuzhiyun ip link add name vx1 up type vxlan id 1000 \ 88*4882a593Smuzhiyun local 192.0.2.17 remote 192.0.2.18 \ 89*4882a593Smuzhiyun dstport 4789 tos inherit ttl 100 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun ip link set dev vx1 master br1 92*4882a593Smuzhiyun check_err $? 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun bridge vlan add dev vx1 vid 1 95*4882a593Smuzhiyun check_err $? 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun ip link set dev $swp1 master br1 98*4882a593Smuzhiyun check_err $? 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun bridge vlan add dev vx1 vid 1 pvid untagged 2>&1 >/dev/null \ 101*4882a593Smuzhiyun | grep -q mlxsw_spectrum 102*4882a593Smuzhiyun check_err $? 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun log_test "extack - map VLAN at VXLAN device" 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun ip link del dev vx1 107*4882a593Smuzhiyun ip link del dev br1 108*4882a593Smuzhiyun} 109*4882a593Smuzhiyun 110*4882a593Smuzhiyunvxlan_bridge_create_test() 111*4882a593Smuzhiyun{ 112*4882a593Smuzhiyun RET=0 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun # Unsupported configuration: mlxsw demands VXLAN with "noudpcsum". 115*4882a593Smuzhiyun ip link add name vx1 up type vxlan id 1000 \ 116*4882a593Smuzhiyun local 192.0.2.17 remote 192.0.2.18 \ 117*4882a593Smuzhiyun dstport 4789 tos inherit ttl 100 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun # Test with VLAN-aware bridge. 120*4882a593Smuzhiyun ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 0 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun ip link set dev vx1 master br1 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun ip link set dev $swp1 master br1 2>&1 > /dev/null \ 125*4882a593Smuzhiyun | grep -q mlxsw_spectrum 126*4882a593Smuzhiyun check_err $? 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun # Test with VLAN-unaware bridge. 129*4882a593Smuzhiyun ip link set dev br1 type bridge vlan_filtering 0 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun ip link set dev $swp1 master br1 2>&1 > /dev/null \ 132*4882a593Smuzhiyun | grep -q mlxsw_spectrum 133*4882a593Smuzhiyun check_err $? 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun log_test "extack - bridge creation with VXLAN" 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun ip link del dev br1 138*4882a593Smuzhiyun ip link del dev vx1 139*4882a593Smuzhiyun} 140*4882a593Smuzhiyun 141*4882a593Smuzhiyunbridge_create_test() 142*4882a593Smuzhiyun{ 143*4882a593Smuzhiyun RET=0 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun ip link add name br1 up type bridge vlan_filtering 1 146*4882a593Smuzhiyun ip link add name br2 up type bridge vlan_filtering 1 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun ip link set dev $swp1 master br1 149*4882a593Smuzhiyun check_err $? 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun # Only one VLAN-aware bridge is supported, so this should fail with 152*4882a593Smuzhiyun # an extack. 153*4882a593Smuzhiyun ip link set dev $swp2 master br2 2>&1 > /dev/null \ 154*4882a593Smuzhiyun | grep -q mlxsw_spectrum 155*4882a593Smuzhiyun check_err $? 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun log_test "extack - multiple VLAN-aware bridges creation" 158*4882a593Smuzhiyun 159*4882a593Smuzhiyun ip link del dev br2 160*4882a593Smuzhiyun ip link del dev br1 161*4882a593Smuzhiyun} 162*4882a593Smuzhiyun 163*4882a593Smuzhiyuntrap cleanup EXIT 164*4882a593Smuzhiyun 165*4882a593Smuzhiyunsetup_prepare 166*4882a593Smuzhiyunsetup_wait 167*4882a593Smuzhiyun 168*4882a593Smuzhiyuntests_run 169*4882a593Smuzhiyun 170*4882a593Smuzhiyunexit $EXIT_STATUS 171