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