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