1*67d5ffb9SPetr Machata#!/bin/bash 2*67d5ffb9SPetr Machata# SPDX-License-Identifier: GPL-2.0 3*67d5ffb9SPetr Machata 4*67d5ffb9SPetr Machatalib_dir=$(dirname $0)/../../../net/forwarding 5*67d5ffb9SPetr Machata 6*67d5ffb9SPetr MachataALL_TESTS=" 7*67d5ffb9SPetr Machata bridge_rif_add 8*67d5ffb9SPetr Machata bridge_rif_nomaster 9*67d5ffb9SPetr Machata bridge_rif_remaster 10*67d5ffb9SPetr Machata bridge_rif_nomaster_addr 11*67d5ffb9SPetr Machata bridge_rif_nomaster_port 12*67d5ffb9SPetr Machata bridge_rif_remaster_port 13*67d5ffb9SPetr Machata" 14*67d5ffb9SPetr Machata 15*67d5ffb9SPetr MachataNUM_NETIFS=2 16*67d5ffb9SPetr Machatasource $lib_dir/lib.sh 17*67d5ffb9SPetr Machatasource $lib_dir/devlink_lib.sh 18*67d5ffb9SPetr Machata 19*67d5ffb9SPetr Machatasetup_prepare() 20*67d5ffb9SPetr Machata{ 21*67d5ffb9SPetr Machata swp1=${NETIFS[p1]} 22*67d5ffb9SPetr Machata swp2=${NETIFS[p2]} 23*67d5ffb9SPetr Machata 24*67d5ffb9SPetr Machata team_create lag1 lacp 25*67d5ffb9SPetr Machata ip link set dev lag1 addrgenmode none 26*67d5ffb9SPetr Machata ip link set dev lag1 address $(mac_get $swp1) 27*67d5ffb9SPetr Machata 28*67d5ffb9SPetr Machata team_create lag2 lacp 29*67d5ffb9SPetr Machata ip link set dev lag2 addrgenmode none 30*67d5ffb9SPetr Machata ip link set dev lag2 address $(mac_get $swp2) 31*67d5ffb9SPetr Machata 32*67d5ffb9SPetr Machata ip link add name br1 type bridge vlan_filtering 1 33*67d5ffb9SPetr Machata ip link set dev br1 addrgenmode none 34*67d5ffb9SPetr Machata ip link set dev br1 address $(mac_get lag1) 35*67d5ffb9SPetr Machata ip link set dev br1 up 36*67d5ffb9SPetr Machata 37*67d5ffb9SPetr Machata ip link set dev lag1 master br1 38*67d5ffb9SPetr Machata 39*67d5ffb9SPetr Machata ip link set dev $swp1 master lag1 40*67d5ffb9SPetr Machata ip link set dev $swp1 up 41*67d5ffb9SPetr Machata 42*67d5ffb9SPetr Machata ip link set dev $swp2 master lag2 43*67d5ffb9SPetr Machata ip link set dev $swp2 up 44*67d5ffb9SPetr Machata} 45*67d5ffb9SPetr Machata 46*67d5ffb9SPetr Machatacleanup() 47*67d5ffb9SPetr Machata{ 48*67d5ffb9SPetr Machata pre_cleanup 49*67d5ffb9SPetr Machata 50*67d5ffb9SPetr Machata ip link set dev $swp2 nomaster 51*67d5ffb9SPetr Machata ip link set dev $swp2 down 52*67d5ffb9SPetr Machata 53*67d5ffb9SPetr Machata ip link set dev $swp1 nomaster 54*67d5ffb9SPetr Machata ip link set dev $swp1 down 55*67d5ffb9SPetr Machata 56*67d5ffb9SPetr Machata ip link del dev lag2 57*67d5ffb9SPetr Machata ip link set dev lag1 nomaster 58*67d5ffb9SPetr Machata ip link del dev lag1 59*67d5ffb9SPetr Machata 60*67d5ffb9SPetr Machata ip link del dev br1 61*67d5ffb9SPetr Machata} 62*67d5ffb9SPetr Machata 63*67d5ffb9SPetr Machatabridge_rif_add() 64*67d5ffb9SPetr Machata{ 65*67d5ffb9SPetr Machata RET=0 66*67d5ffb9SPetr Machata 67*67d5ffb9SPetr Machata local rifs_occ_t0=$(devlink_resource_occ_get rifs) 68*67d5ffb9SPetr Machata __addr_add_del br1 add 192.0.2.2/28 69*67d5ffb9SPetr Machata sleep 1 70*67d5ffb9SPetr Machata local rifs_occ_t1=$(devlink_resource_occ_get rifs) 71*67d5ffb9SPetr Machata local expected_rifs=$((rifs_occ_t0 + 1)) 72*67d5ffb9SPetr Machata 73*67d5ffb9SPetr Machata ((expected_rifs == rifs_occ_t1)) 74*67d5ffb9SPetr Machata check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used" 75*67d5ffb9SPetr Machata 76*67d5ffb9SPetr Machata log_test "Add RIF for bridge on address addition" 77*67d5ffb9SPetr Machata} 78*67d5ffb9SPetr Machata 79*67d5ffb9SPetr Machatabridge_rif_nomaster() 80*67d5ffb9SPetr Machata{ 81*67d5ffb9SPetr Machata RET=0 82*67d5ffb9SPetr Machata 83*67d5ffb9SPetr Machata local rifs_occ_t0=$(devlink_resource_occ_get rifs) 84*67d5ffb9SPetr Machata ip link set dev lag1 nomaster 85*67d5ffb9SPetr Machata sleep 1 86*67d5ffb9SPetr Machata local rifs_occ_t1=$(devlink_resource_occ_get rifs) 87*67d5ffb9SPetr Machata local expected_rifs=$((rifs_occ_t0 - 1)) 88*67d5ffb9SPetr Machata 89*67d5ffb9SPetr Machata ((expected_rifs == rifs_occ_t1)) 90*67d5ffb9SPetr Machata check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used" 91*67d5ffb9SPetr Machata 92*67d5ffb9SPetr Machata log_test "Drop RIF for bridge on LAG deslavement" 93*67d5ffb9SPetr Machata} 94*67d5ffb9SPetr Machata 95*67d5ffb9SPetr Machatabridge_rif_remaster() 96*67d5ffb9SPetr Machata{ 97*67d5ffb9SPetr Machata RET=0 98*67d5ffb9SPetr Machata 99*67d5ffb9SPetr Machata local rifs_occ_t0=$(devlink_resource_occ_get rifs) 100*67d5ffb9SPetr Machata ip link set dev lag1 master br1 101*67d5ffb9SPetr Machata sleep 1 102*67d5ffb9SPetr Machata local rifs_occ_t1=$(devlink_resource_occ_get rifs) 103*67d5ffb9SPetr Machata local expected_rifs=$((rifs_occ_t0 + 1)) 104*67d5ffb9SPetr Machata 105*67d5ffb9SPetr Machata ((expected_rifs == rifs_occ_t1)) 106*67d5ffb9SPetr Machata check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used" 107*67d5ffb9SPetr Machata 108*67d5ffb9SPetr Machata log_test "Add RIF for bridge on LAG reenslavement" 109*67d5ffb9SPetr Machata} 110*67d5ffb9SPetr Machata 111*67d5ffb9SPetr Machatabridge_rif_nomaster_addr() 112*67d5ffb9SPetr Machata{ 113*67d5ffb9SPetr Machata local rifs_occ_t0=$(devlink_resource_occ_get rifs) 114*67d5ffb9SPetr Machata 115*67d5ffb9SPetr Machata # Adding an address while the LAG is enslaved shouldn't generate a RIF. 116*67d5ffb9SPetr Machata __addr_add_del lag1 add 192.0.2.65/28 117*67d5ffb9SPetr Machata sleep 1 118*67d5ffb9SPetr Machata local rifs_occ_t1=$(devlink_resource_occ_get rifs) 119*67d5ffb9SPetr Machata local expected_rifs=$((rifs_occ_t0)) 120*67d5ffb9SPetr Machata 121*67d5ffb9SPetr Machata ((expected_rifs == rifs_occ_t1)) 122*67d5ffb9SPetr Machata check_err $? "After adding IP: Expected $expected_rifs RIFs, $rifs_occ_t1 are used" 123*67d5ffb9SPetr Machata 124*67d5ffb9SPetr Machata # Removing the LAG from the bridge should drop RIF for the bridge (as 125*67d5ffb9SPetr Machata # tested in bridge_rif_lag_nomaster), but since the LAG now has an 126*67d5ffb9SPetr Machata # address, it should gain a RIF. 127*67d5ffb9SPetr Machata ip link set dev lag1 nomaster 128*67d5ffb9SPetr Machata sleep 1 129*67d5ffb9SPetr Machata local rifs_occ_t2=$(devlink_resource_occ_get rifs) 130*67d5ffb9SPetr Machata local expected_rifs=$((rifs_occ_t0)) 131*67d5ffb9SPetr Machata 132*67d5ffb9SPetr Machata ((expected_rifs == rifs_occ_t2)) 133*67d5ffb9SPetr Machata check_err $? "After deslaving: Expected $expected_rifs RIFs, $rifs_occ_t2 are used" 134*67d5ffb9SPetr Machata 135*67d5ffb9SPetr Machata log_test "Add RIF for LAG on deslavement from bridge" 136*67d5ffb9SPetr Machata 137*67d5ffb9SPetr Machata __addr_add_del lag1 del 192.0.2.65/28 138*67d5ffb9SPetr Machata ip link set dev lag1 master br1 139*67d5ffb9SPetr Machata sleep 1 140*67d5ffb9SPetr Machata} 141*67d5ffb9SPetr Machata 142*67d5ffb9SPetr Machatabridge_rif_nomaster_port() 143*67d5ffb9SPetr Machata{ 144*67d5ffb9SPetr Machata RET=0 145*67d5ffb9SPetr Machata 146*67d5ffb9SPetr Machata local rifs_occ_t0=$(devlink_resource_occ_get rifs) 147*67d5ffb9SPetr Machata ip link set dev $swp1 nomaster 148*67d5ffb9SPetr Machata sleep 1 149*67d5ffb9SPetr Machata local rifs_occ_t1=$(devlink_resource_occ_get rifs) 150*67d5ffb9SPetr Machata local expected_rifs=$((rifs_occ_t0 - 1)) 151*67d5ffb9SPetr Machata 152*67d5ffb9SPetr Machata ((expected_rifs == rifs_occ_t1)) 153*67d5ffb9SPetr Machata check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used" 154*67d5ffb9SPetr Machata 155*67d5ffb9SPetr Machata log_test "Drop RIF for bridge on deslavement of port from LAG" 156*67d5ffb9SPetr Machata} 157*67d5ffb9SPetr Machata 158*67d5ffb9SPetr Machatabridge_rif_remaster_port() 159*67d5ffb9SPetr Machata{ 160*67d5ffb9SPetr Machata RET=0 161*67d5ffb9SPetr Machata 162*67d5ffb9SPetr Machata local rifs_occ_t0=$(devlink_resource_occ_get rifs) 163*67d5ffb9SPetr Machata ip link set dev $swp1 down 164*67d5ffb9SPetr Machata ip link set dev $swp1 master lag1 165*67d5ffb9SPetr Machata ip link set dev $swp1 up 166*67d5ffb9SPetr Machata setup_wait_dev $swp1 167*67d5ffb9SPetr Machata local rifs_occ_t1=$(devlink_resource_occ_get rifs) 168*67d5ffb9SPetr Machata local expected_rifs=$((rifs_occ_t0 + 1)) 169*67d5ffb9SPetr Machata 170*67d5ffb9SPetr Machata ((expected_rifs == rifs_occ_t1)) 171*67d5ffb9SPetr Machata check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used" 172*67d5ffb9SPetr Machata 173*67d5ffb9SPetr Machata log_test "Add RIF for bridge on reenslavement of port to LAG" 174*67d5ffb9SPetr Machata} 175*67d5ffb9SPetr Machata 176*67d5ffb9SPetr Machatatrap cleanup EXIT 177*67d5ffb9SPetr Machata 178*67d5ffb9SPetr Machatasetup_prepare 179*67d5ffb9SPetr Machatasetup_wait 180*67d5ffb9SPetr Machata 181*67d5ffb9SPetr Machatatests_run 182*67d5ffb9SPetr Machata 183*67d5ffb9SPetr Machataexit $EXIT_STATUS 184