1*6b3f4683SPetr Machata#!/bin/bash
2*6b3f4683SPetr Machata# SPDX-License-Identifier: GPL-2.0
3*6b3f4683SPetr Machata
4*6b3f4683SPetr Machatalib_dir=$(dirname $0)/../../../net/forwarding
5*6b3f4683SPetr Machata
6*6b3f4683SPetr MachataALL_TESTS="
7*6b3f4683SPetr Machata	lag_rif_add
8*6b3f4683SPetr Machata	lag_rif_nomaster
9*6b3f4683SPetr Machata	lag_rif_remaster
10*6b3f4683SPetr Machata	lag_rif_nomaster_addr
11*6b3f4683SPetr Machata"
12*6b3f4683SPetr Machata
13*6b3f4683SPetr MachataNUM_NETIFS=2
14*6b3f4683SPetr Machatasource $lib_dir/lib.sh
15*6b3f4683SPetr Machatasource $lib_dir/devlink_lib.sh
16*6b3f4683SPetr Machata
17*6b3f4683SPetr Machatasetup_prepare()
18*6b3f4683SPetr Machata{
19*6b3f4683SPetr Machata	swp1=${NETIFS[p1]}
20*6b3f4683SPetr Machata	swp2=${NETIFS[p2]}
21*6b3f4683SPetr Machata
22*6b3f4683SPetr Machata	team_create lag1 lacp
23*6b3f4683SPetr Machata	ip link set dev lag1 addrgenmode none
24*6b3f4683SPetr Machata	ip link set dev lag1 address $(mac_get $swp1)
25*6b3f4683SPetr Machata
26*6b3f4683SPetr Machata	team_create lag2 lacp
27*6b3f4683SPetr Machata	ip link set dev lag2 addrgenmode none
28*6b3f4683SPetr Machata	ip link set dev lag2 address $(mac_get $swp2)
29*6b3f4683SPetr Machata
30*6b3f4683SPetr Machata	ip link set dev $swp1 master lag1
31*6b3f4683SPetr Machata	ip link set dev $swp1 up
32*6b3f4683SPetr Machata
33*6b3f4683SPetr Machata	ip link set dev $swp2 master lag2
34*6b3f4683SPetr Machata	ip link set dev $swp2 up
35*6b3f4683SPetr Machata
36*6b3f4683SPetr Machata	vlan_create lag1 100
37*6b3f4683SPetr Machata	ip link set dev lag1.100 addrgenmode none
38*6b3f4683SPetr Machata
39*6b3f4683SPetr Machata	vlan_create lag1 200
40*6b3f4683SPetr Machata	ip link set dev lag1.200 addrgenmode none
41*6b3f4683SPetr Machata}
42*6b3f4683SPetr Machata
43*6b3f4683SPetr Machatacleanup()
44*6b3f4683SPetr Machata{
45*6b3f4683SPetr Machata	pre_cleanup
46*6b3f4683SPetr Machata
47*6b3f4683SPetr Machata	ip link del dev lag1.200
48*6b3f4683SPetr Machata	ip link del dev lag1.100
49*6b3f4683SPetr Machata
50*6b3f4683SPetr Machata	ip link set dev $swp2 nomaster
51*6b3f4683SPetr Machata	ip link set dev $swp2 down
52*6b3f4683SPetr Machata
53*6b3f4683SPetr Machata	ip link set dev $swp1 nomaster
54*6b3f4683SPetr Machata	ip link set dev $swp1 down
55*6b3f4683SPetr Machata
56*6b3f4683SPetr Machata	ip link del dev lag2
57*6b3f4683SPetr Machata	ip link del dev lag1
58*6b3f4683SPetr Machata}
59*6b3f4683SPetr Machata
60*6b3f4683SPetr Machatalag_rif_add()
61*6b3f4683SPetr Machata{
62*6b3f4683SPetr Machata	RET=0
63*6b3f4683SPetr Machata
64*6b3f4683SPetr Machata	local rifs_occ_t0=$(devlink_resource_occ_get rifs)
65*6b3f4683SPetr Machata	__addr_add_del lag1.100 add 192.0.2.2/28
66*6b3f4683SPetr Machata	__addr_add_del lag1.200 add 192.0.2.18/28
67*6b3f4683SPetr Machata	sleep 1
68*6b3f4683SPetr Machata	local rifs_occ_t1=$(devlink_resource_occ_get rifs)
69*6b3f4683SPetr Machata	local expected_rifs=$((rifs_occ_t0 + 2))
70*6b3f4683SPetr Machata
71*6b3f4683SPetr Machata	((expected_rifs == rifs_occ_t1))
72*6b3f4683SPetr Machata	check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used"
73*6b3f4683SPetr Machata
74*6b3f4683SPetr Machata	log_test "Add RIFs for LAG VLANs on address addition"
75*6b3f4683SPetr Machata}
76*6b3f4683SPetr Machata
77*6b3f4683SPetr Machatalag_rif_nomaster()
78*6b3f4683SPetr Machata{
79*6b3f4683SPetr Machata	RET=0
80*6b3f4683SPetr Machata
81*6b3f4683SPetr Machata	local rifs_occ_t0=$(devlink_resource_occ_get rifs)
82*6b3f4683SPetr Machata	ip link set dev $swp1 nomaster
83*6b3f4683SPetr Machata	sleep 1
84*6b3f4683SPetr Machata	local rifs_occ_t1=$(devlink_resource_occ_get rifs)
85*6b3f4683SPetr Machata	local expected_rifs=$((rifs_occ_t0 - 2))
86*6b3f4683SPetr Machata
87*6b3f4683SPetr Machata	((expected_rifs == rifs_occ_t1))
88*6b3f4683SPetr Machata	check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used"
89*6b3f4683SPetr Machata
90*6b3f4683SPetr Machata	log_test "Drop RIFs for LAG VLANs on port deslavement"
91*6b3f4683SPetr Machata}
92*6b3f4683SPetr Machata
93*6b3f4683SPetr Machatalag_rif_remaster()
94*6b3f4683SPetr Machata{
95*6b3f4683SPetr Machata	RET=0
96*6b3f4683SPetr Machata
97*6b3f4683SPetr Machata	local rifs_occ_t0=$(devlink_resource_occ_get rifs)
98*6b3f4683SPetr Machata	ip link set dev $swp1 down
99*6b3f4683SPetr Machata	ip link set dev $swp1 master lag1
100*6b3f4683SPetr Machata	ip link set dev $swp1 up
101*6b3f4683SPetr Machata	setup_wait_dev $swp1
102*6b3f4683SPetr Machata	local rifs_occ_t1=$(devlink_resource_occ_get rifs)
103*6b3f4683SPetr Machata	local expected_rifs=$((rifs_occ_t0 + 2))
104*6b3f4683SPetr Machata
105*6b3f4683SPetr Machata	((expected_rifs == rifs_occ_t1))
106*6b3f4683SPetr Machata	check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used"
107*6b3f4683SPetr Machata
108*6b3f4683SPetr Machata	log_test "Add RIFs for LAG VLANs on port reenslavement"
109*6b3f4683SPetr Machata}
110*6b3f4683SPetr Machata
111*6b3f4683SPetr Machatalag_rif_nomaster_addr()
112*6b3f4683SPetr Machata{
113*6b3f4683SPetr Machata	local rifs_occ_t0=$(devlink_resource_occ_get rifs)
114*6b3f4683SPetr Machata
115*6b3f4683SPetr Machata	# Adding an address while the port is LAG'd shouldn't generate a RIF.
116*6b3f4683SPetr Machata	__addr_add_del $swp1 add 192.0.2.65/28
117*6b3f4683SPetr Machata	sleep 1
118*6b3f4683SPetr Machata	local rifs_occ_t1=$(devlink_resource_occ_get rifs)
119*6b3f4683SPetr Machata	local expected_rifs=$((rifs_occ_t0))
120*6b3f4683SPetr Machata
121*6b3f4683SPetr Machata	((expected_rifs == rifs_occ_t1))
122*6b3f4683SPetr Machata	check_err $? "After adding IP: Expected $expected_rifs RIFs, $rifs_occ_t1 are used"
123*6b3f4683SPetr Machata
124*6b3f4683SPetr Machata	# Removing the port from LAG should drop two RIFs for the LAG VLANs (as
125*6b3f4683SPetr Machata	# tested in lag_rif_nomaster), but since the port now has an address, it
126*6b3f4683SPetr Machata	# should gain a RIF.
127*6b3f4683SPetr Machata	ip link set dev $swp1 nomaster
128*6b3f4683SPetr Machata	sleep 1
129*6b3f4683SPetr Machata	local rifs_occ_t2=$(devlink_resource_occ_get rifs)
130*6b3f4683SPetr Machata	local expected_rifs=$((rifs_occ_t0 - 1))
131*6b3f4683SPetr Machata
132*6b3f4683SPetr Machata	((expected_rifs == rifs_occ_t2))
133*6b3f4683SPetr Machata	check_err $? "After deslaving: Expected $expected_rifs RIFs, $rifs_occ_t2 are used"
134*6b3f4683SPetr Machata
135*6b3f4683SPetr Machata	__addr_add_del $swp1 del 192.0.2.65/28
136*6b3f4683SPetr Machata	log_test "Add RIF for port on deslavement from LAG"
137*6b3f4683SPetr Machata}
138*6b3f4683SPetr Machata
139*6b3f4683SPetr Machatatrap cleanup EXIT
140*6b3f4683SPetr Machata
141*6b3f4683SPetr Machatasetup_prepare
142*6b3f4683SPetr Machatasetup_wait
143*6b3f4683SPetr Machata
144*6b3f4683SPetr Machatatests_run
145*6b3f4683SPetr Machata
146*6b3f4683SPetr Machataexit $EXIT_STATUS
147