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