Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/tools/testing/selftests/drivers/net/mlxsw/rif_lag.sh
26292 views
1
#!/bin/bash
2
# SPDX-License-Identifier: GPL-2.0
3
4
lib_dir=$(dirname $0)/../../../net/forwarding
5
6
ALL_TESTS="
7
lag_rif_add
8
lag_rif_nomaster
9
lag_rif_remaster
10
lag_rif_nomaster_addr
11
"
12
13
REQUIRE_TEAMD="yes"
14
NUM_NETIFS=2
15
source $lib_dir/lib.sh
16
source $lib_dir/devlink_lib.sh
17
18
setup_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
38
cleanup()
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
52
lag_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
68
lag_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
84
lag_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
102
lag_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
130
trap cleanup EXIT
131
132
setup_prepare
133
setup_wait
134
135
tests_run
136
137
exit $EXIT_STATUS
138
139