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 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