Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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