@@ -73,122 +73,114 @@ source qos_lib.sh
73
73
h1_create ()
74
74
{
75
75
simple_if_init $h1 192.0.2.65/28
76
- mtu_set $h1 10000
77
- }
76
+ defer simple_if_fini $h1 192.0.2.65/28
78
77
79
- h1_destroy ()
80
- {
81
- mtu_restore $h1
82
- simple_if_fini $h1 192.0.2.65/28
78
+ mtu_set $h1 10000
79
+ defer mtu_restore $h1
83
80
}
84
81
85
82
h2_create ()
86
83
{
87
84
simple_if_init $h2
85
+ defer simple_if_fini $h2
86
+
88
87
mtu_set $h2 10000
88
+ defer mtu_restore $h2
89
89
90
90
vlan_create $h2 111 v$h2 192.0.2.129/28
91
+ defer vlan_destroy $h2 111
91
92
ip link set dev $h2 .111 type vlan egress-qos-map 0:1
92
93
}
93
94
94
- h2_destroy ()
95
- {
96
- vlan_destroy $h2 111
97
-
98
- mtu_restore $h2
99
- simple_if_fini $h2
100
- }
101
-
102
95
h3_create ()
103
96
{
104
97
simple_if_init $h3 192.0.2.66/28
98
+ defer simple_if_fini $h3 192.0.2.66/28
99
+
105
100
mtu_set $h3 10000
101
+ defer mtu_restore $h3
106
102
107
103
vlan_create $h3 111 v$h3 192.0.2.130/28
108
- }
109
-
110
- h3_destroy ()
111
- {
112
- vlan_destroy $h3 111
113
-
114
- mtu_restore $h3
115
- simple_if_fini $h3 192.0.2.66/28
104
+ defer vlan_destroy $h3 111
116
105
}
117
106
118
107
switch_create ()
119
108
{
120
109
ip link set dev $swp1 up
110
+ defer ip link set dev $swp1 down
111
+
121
112
mtu_set $swp1 10000
113
+ defer mtu_restore $swp1
122
114
123
115
ip link set dev $swp2 up
116
+ defer ip link set dev $swp2 down
117
+
124
118
mtu_set $swp2 10000
119
+ defer mtu_restore $swp2
125
120
126
121
ip link set dev $swp3 up
122
+ defer ip link set dev $swp3 down
123
+
127
124
mtu_set $swp3 10000
125
+ defer mtu_restore $swp3
128
126
129
127
vlan_create $swp2 111
128
+ defer vlan_destroy $swp2 111
129
+
130
130
vlan_create $swp3 111
131
+ defer vlan_destroy $swp3 111
131
132
132
133
tc qdisc replace dev $swp3 root handle 3: tbf rate 1gbit \
133
134
burst 128K limit 1G
135
+ defer tc qdisc del dev $swp3 root handle 3:
136
+
134
137
tc qdisc replace dev $swp3 parent 3:3 handle 33: \
135
138
prio bands 8 priomap 7 7 7 7 7 7 7 7
139
+ defer tc qdisc del dev $swp3 parent 3:3 handle 33:
136
140
137
141
ip link add name br1 type bridge vlan_filtering 0
142
+ defer ip link del dev br1
138
143
ip link set dev br1 addrgenmode none
139
144
ip link set dev br1 up
145
+
140
146
ip link set dev $swp1 master br1
147
+ defer ip link set dev $swp1 nomaster
148
+
141
149
ip link set dev $swp3 master br1
150
+ defer ip link set dev $swp3 nomaster
142
151
143
152
ip link add name br111 type bridge vlan_filtering 0
153
+ defer ip link del dev br111
144
154
ip link set dev br111 addrgenmode none
145
155
ip link set dev br111 up
156
+
146
157
ip link set dev $swp2 .111 master br111
158
+ defer ip link set dev $swp2 .111 nomaster
159
+
147
160
ip link set dev $swp3 .111 master br111
161
+ defer ip link set dev $swp3 .111 nomaster
148
162
149
163
# Make sure that ingress quotas are smaller than egress so that there is
150
164
# room for both streams of traffic to be admitted to shared buffer.
151
165
devlink_port_pool_th_save $swp1 0
152
166
devlink_port_pool_th_set $swp1 0 5
167
+ defer devlink_port_pool_th_restore $swp1 0
168
+
153
169
devlink_tc_bind_pool_th_save $swp1 0 ingress
154
170
devlink_tc_bind_pool_th_set $swp1 0 ingress 0 5
171
+ defer devlink_tc_bind_pool_th_restore $swp1 0 ingress
155
172
156
173
devlink_port_pool_th_save $swp2 0
157
174
devlink_port_pool_th_set $swp2 0 5
175
+ defer devlink_port_pool_th_restore $swp2 0
176
+
158
177
devlink_tc_bind_pool_th_save $swp2 1 ingress
159
178
devlink_tc_bind_pool_th_set $swp2 1 ingress 0 5
179
+ defer devlink_tc_bind_pool_th_restore $swp2 1 ingress
160
180
161
181
devlink_port_pool_th_save $swp3 4
162
182
devlink_port_pool_th_set $swp3 4 12
163
- }
164
-
165
- switch_destroy ()
166
- {
167
- devlink_port_pool_th_restore $swp3 4
168
-
169
- devlink_tc_bind_pool_th_restore $swp2 1 ingress
170
- devlink_port_pool_th_restore $swp2 0
171
-
172
- devlink_tc_bind_pool_th_restore $swp1 0 ingress
173
- devlink_port_pool_th_restore $swp1 0
174
-
175
- ip link del dev br111
176
- ip link del dev br1
177
-
178
- tc qdisc del dev $swp3 parent 3:3 handle 33:
179
- tc qdisc del dev $swp3 root handle 3:
180
-
181
- vlan_destroy $swp3 111
182
- vlan_destroy $swp2 111
183
-
184
- mtu_restore $swp3
185
- ip link set dev $swp3 down
186
-
187
- mtu_restore $swp2
188
- ip link set dev $swp2 down
189
-
190
- mtu_restore $swp1
191
- ip link set dev $swp1 down
183
+ defer devlink_port_pool_th_restore $swp3 4
192
184
}
193
185
194
186
setup_prepare ()
@@ -205,52 +197,53 @@ setup_prepare()
205
197
h3mac=$( mac_get $h3 )
206
198
207
199
vrf_prepare
200
+ defer vrf_cleanup
208
201
209
202
h1_create
210
203
h2_create
211
204
h3_create
212
205
switch_create
213
206
}
214
207
215
- cleanup ()
208
+ ping_ipv4 ()
216
209
{
217
- pre_cleanup
210
+ ping_test $h2 192.0.2.130
211
+ }
218
212
219
- switch_destroy
220
- h3_destroy
221
- h2_destroy
222
- h1_destroy
213
+ __run_uc_measure_rate ()
214
+ {
215
+ local what=$1 ; shift
216
+ local -a uc_rate
217
+
218
+ start_traffic $h2 .111 192.0.2.129 192.0.2.130 $h3mac
219
+ defer stop_traffic $!
220
+
221
+ uc_rate=($( measure_rate $swp2 $h3 rx_octets_prio_1 " $what " ) )
222
+ check_err $? " Could not get high enough $what ingress rate"
223
223
224
- vrf_cleanup
224
+ echo ${uc_rate[@]}
225
225
}
226
226
227
- ping_ipv4 ()
227
+ run_uc_measure_rate ()
228
228
{
229
- ping_test $h2 192.0.2.130
229
+ in_defer_scope __run_uc_measure_rate " $@ "
230
230
}
231
231
232
232
test_mc_aware ()
233
233
{
234
234
RET=0
235
235
236
- local -a uc_rate
237
- start_traffic $h2 .111 192.0.2.129 192.0.2.130 $h3mac
238
- uc_rate=($( measure_rate $swp2 $h3 rx_octets_prio_1 " UC-only" ) )
239
- check_err $? " Could not get high enough UC-only ingress rate"
240
- stop_traffic
236
+ local -a uc_rate=($( run_uc_measure_rate " UC-only" ) )
241
237
local ucth1=${uc_rate[1]}
242
238
243
239
start_traffic $h1 192.0.2.65 bc bc
240
+ defer stop_traffic $!
244
241
245
242
local d0=$( date +%s)
246
243
local t0=$( ethtool_stats_get $h3 rx_octets_prio_0)
247
244
local u0=$( ethtool_stats_get $swp1 rx_octets_prio_0)
248
245
249
- local -a uc_rate_2
250
- start_traffic $h2 .111 192.0.2.129 192.0.2.130 $h3mac
251
- uc_rate_2=($( measure_rate $swp2 $h3 rx_octets_prio_1 " UC+MC" ) )
252
- check_err $? " Could not get high enough UC+MC ingress rate"
253
- stop_traffic
246
+ local -a uc_rate_2=($( run_uc_measure_rate " UC+MC" ) )
254
247
local ucth2=${uc_rate_2[1]}
255
248
256
249
local d1=$( date +%s)
@@ -272,8 +265,6 @@ test_mc_aware()
272
265
local mc_ir=$( rate $u0 $u1 $interval )
273
266
local mc_er=$( rate $t0 $t1 $interval )
274
267
275
- stop_traffic
276
-
277
268
log_test " UC performance under MC overload"
278
269
279
270
echo " UC-only throughput $( humanize $ucth1 ) "
@@ -297,6 +288,7 @@ test_uc_aware()
297
288
RET=0
298
289
299
290
start_traffic $h2 .111 192.0.2.129 192.0.2.130 $h3mac
291
+ defer stop_traffic $!
300
292
301
293
local d0=$( date +%s)
302
294
local t0=$( ethtool_stats_get $h3 rx_octets_prio_1)
@@ -326,8 +318,6 @@ test_uc_aware()
326
318
(( attempts == passes))
327
319
check_err $?
328
320
329
- stop_traffic
330
-
331
321
log_test " MC performance under UC overload"
332
322
echo " ingress UC throughput $( humanize ${uc_ir} ) "
333
323
echo " egress UC throughput $( humanize ${uc_er} ) "
0 commit comments