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