@@ -58,65 +58,62 @@ source qos_lib.sh
58
58
h1_create ()
59
59
{
60
60
simple_if_init $h1
61
+ defer simple_if_fini $h1
62
+
61
63
mtu_set $h1 10000
64
+ defer mtu_restore $h1
62
65
63
66
vlan_create $h1 111 v$h1 192.0.2.33/28
67
+ defer vlan_destroy $h1 111
64
68
ip link set dev $h1 .111 type vlan egress-qos-map 0:1
65
69
}
66
70
67
- h1_destroy ()
68
- {
69
- vlan_destroy $h1 111
70
-
71
- mtu_restore $h1
72
- simple_if_fini $h1
73
- }
74
-
75
71
h2_create ()
76
72
{
77
73
simple_if_init $h2
74
+ defer simple_if_fini $h2
75
+
78
76
mtu_set $h2 10000
77
+ defer mtu_restore $h2
79
78
80
79
vlan_create $h2 222 v$h2 192.0.2.65/28
80
+ defer vlan_destroy $h2 222
81
81
ip link set dev $h2 .222 type vlan egress-qos-map 0:2
82
82
}
83
83
84
- h2_destroy ()
85
- {
86
- vlan_destroy $h2 222
87
-
88
- mtu_restore $h2
89
- simple_if_fini $h2
90
- }
91
-
92
84
h3_create ()
93
85
{
94
86
simple_if_init $h3
87
+ defer simple_if_fini $h3
88
+
95
89
mtu_set $h3 10000
90
+ defer mtu_restore $h3
96
91
97
92
vlan_create $h3 111 v$h3 192.0.2.34/28
98
- vlan_create $h3 222 v$h3 192.0.2.66/28
99
- }
100
-
101
- h3_destroy ()
102
- {
103
- vlan_destroy $h3 222
104
- vlan_destroy $h3 111
93
+ defer vlan_destroy $h3 111
105
94
106
- mtu_restore $h3
107
- simple_if_fini $h3
95
+ vlan_create $h3 222 v $h3 192.0.2.66/28
96
+ defer vlan_destroy $h3 222
108
97
}
109
98
110
99
switch_create ()
111
100
{
112
101
ip link set dev $swp1 up
102
+ defer ip link set dev $swp1 down
103
+
113
104
mtu_set $swp1 10000
105
+ defer mtu_restore $swp1
114
106
115
107
ip link set dev $swp2 up
108
+ defer ip link set dev $swp2 down
109
+
116
110
mtu_set $swp2 10000
111
+ defer mtu_restore $swp2
117
112
118
113
# prio n -> TC n, strict scheduling
119
114
lldptool -T -i $swp3 -V ETS-CFG up2tc=0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7
115
+ defer lldptool -T -i $swp3 -V ETS-CFG up2tc=0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0
116
+
120
117
lldptool -T -i $swp3 -V ETS-CFG tsa=$(
121
118
) " 0:strict," $(
122
119
) " 1:strict," $(
@@ -129,85 +126,90 @@ switch_create()
129
126
sleep 1
130
127
131
128
ip link set dev $swp3 up
129
+ defer ip link set dev $swp3 down
130
+
132
131
mtu_set $swp3 10000
132
+ defer mtu_restore $swp3
133
+
133
134
tc qdisc replace dev $swp3 root handle 101: tbf rate 1gbit \
134
135
burst 128K limit 1G
136
+ defer tc qdisc del dev $swp3 root handle 101:
135
137
136
138
vlan_create $swp1 111
139
+ defer vlan_destroy $swp1 111
140
+
137
141
vlan_create $swp2 222
142
+ defer vlan_destroy $swp2 222
143
+
138
144
vlan_create $swp3 111
145
+ defer vlan_destroy $swp3 111
146
+
139
147
vlan_create $swp3 222
148
+ defer vlan_destroy $swp3 222
140
149
141
150
ip link add name br111 type bridge vlan_filtering 0
151
+ defer ip link del dev br111
142
152
ip link set dev br111 addrgenmode none
153
+
143
154
ip link set dev br111 up
155
+ defer ip link set dev br111 down
156
+
144
157
ip link set dev $swp1 .111 master br111
158
+ defer ip link set dev $swp1 .111 nomaster
159
+
145
160
ip link set dev $swp3 .111 master br111
161
+ defer ip link set dev $swp3 .111 nomaster
146
162
147
163
ip link add name br222 type bridge vlan_filtering 0
164
+ defer ip link del dev br222
148
165
ip link set dev br222 addrgenmode none
166
+
149
167
ip link set dev br222 up
168
+ defer ip link set dev br222 down
169
+
150
170
ip link set dev $swp2 .222 master br222
171
+ defer ip link set dev $swp2 .222 nomaster
172
+
151
173
ip link set dev $swp3 .222 master br222
174
+ defer ip link set dev $swp3 .222 nomaster
152
175
153
176
# Make sure that ingress quotas are smaller than egress so that there is
154
177
# room for both streams of traffic to be admitted to shared buffer.
155
178
devlink_pool_size_thtype_save 0
156
179
devlink_pool_size_thtype_set 0 dynamic 10000000
180
+ defer devlink_pool_size_thtype_restore 0
181
+
157
182
devlink_pool_size_thtype_save 4
158
183
devlink_pool_size_thtype_set 4 dynamic 10000000
184
+ defer devlink_pool_size_thtype_restore 4
159
185
160
186
devlink_port_pool_th_save $swp1 0
161
187
devlink_port_pool_th_set $swp1 0 6
188
+ defer devlink_port_pool_th_restore $swp1 0
189
+
162
190
devlink_tc_bind_pool_th_save $swp1 1 ingress
163
191
devlink_tc_bind_pool_th_set $swp1 1 ingress 0 6
192
+ defer devlink_tc_bind_pool_th_restore $swp1 1 ingress
164
193
165
194
devlink_port_pool_th_save $swp2 0
166
195
devlink_port_pool_th_set $swp2 0 6
196
+ defer devlink_port_pool_th_restore $swp2 0
197
+
167
198
devlink_tc_bind_pool_th_save $swp2 2 ingress
168
199
devlink_tc_bind_pool_th_set $swp2 2 ingress 0 6
200
+ defer devlink_tc_bind_pool_th_restore $swp2 2 ingress
169
201
170
202
devlink_tc_bind_pool_th_save $swp3 1 egress
171
203
devlink_tc_bind_pool_th_set $swp3 1 egress 4 7
204
+ defer devlink_tc_bind_pool_th_restore $swp3 1 egress
205
+
172
206
devlink_tc_bind_pool_th_save $swp3 2 egress
173
207
devlink_tc_bind_pool_th_set $swp3 2 egress 4 7
208
+ defer devlink_tc_bind_pool_th_restore $swp3 2 egress
209
+
174
210
devlink_port_pool_th_save $swp3 4
175
211
devlink_port_pool_th_set $swp3 4 7
176
- }
177
-
178
- switch_destroy ()
179
- {
180
- devlink_port_pool_th_restore $swp3 4
181
- devlink_tc_bind_pool_th_restore $swp3 2 egress
182
- devlink_tc_bind_pool_th_restore $swp3 1 egress
183
-
184
- devlink_tc_bind_pool_th_restore $swp2 2 ingress
185
- devlink_port_pool_th_restore $swp2 0
186
-
187
- devlink_tc_bind_pool_th_restore $swp1 1 ingress
188
- devlink_port_pool_th_restore $swp1 0
189
-
190
- devlink_pool_size_thtype_restore 4
191
- devlink_pool_size_thtype_restore 0
192
-
193
- ip link del dev br222
194
- ip link del dev br111
195
-
196
- vlan_destroy $swp3 222
197
- vlan_destroy $swp3 111
198
- vlan_destroy $swp2 222
199
- vlan_destroy $swp1 111
200
-
201
- tc qdisc del dev $swp3 root handle 101:
202
- mtu_restore $swp3
203
- ip link set dev $swp3 down
204
- lldptool -T -i $swp3 -V ETS-CFG up2tc=0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0
205
-
206
- mtu_restore $swp2
207
- ip link set dev $swp2 down
208
-
209
- mtu_restore $swp1
210
- ip link set dev $swp1 down
212
+ defer devlink_port_pool_th_restore $swp3 4
211
213
}
212
214
213
215
setup_prepare ()
@@ -224,25 +226,14 @@ setup_prepare()
224
226
h3mac=$( mac_get $h3 )
225
227
226
228
vrf_prepare
229
+ defer vrf_cleanup
227
230
228
231
h1_create
229
232
h2_create
230
233
h3_create
231
234
switch_create
232
235
}
233
236
234
- cleanup ()
235
- {
236
- pre_cleanup
237
-
238
- switch_destroy
239
- h3_destroy
240
- h2_destroy
241
- h1_destroy
242
-
243
- vrf_cleanup
244
- }
245
-
246
237
ping_ipv4 ()
247
238
{
248
239
ping_test $h1 192.0.2.34 " from H1"
@@ -261,21 +252,38 @@ rel()
261
252
"
262
253
}
263
254
255
+ __run_hi_measure_rate ()
256
+ {
257
+ local what=$1 ; shift
258
+ local -a uc_rate
259
+
260
+ start_traffic $h2 .222 192.0.2.65 192.0.2.66 $h3mac
261
+ defer stop_traffic $!
262
+
263
+ uc_rate=($( measure_rate $swp2 $h3 rx_octets_prio_2 " $what " ) )
264
+ check_err $? " Could not get high enough $what ingress rate"
265
+
266
+ echo ${uc_rate[@]}
267
+ }
268
+
269
+ run_hi_measure_rate ()
270
+ {
271
+ in_defer_scope __run_hi_measure_rate " $@ "
272
+ }
273
+
264
274
test_ets_strict ()
265
275
{
266
276
RET=0
267
277
268
278
# Run high-prio traffic on its own.
269
- start_traffic $h2 .222 192.0.2.65 192.0.2.66 $h3mac
270
279
local -a rate_2
271
- rate_2=($( measure_rate $swp2 $h3 rx_octets_prio_2 " prio 2" ) )
272
- check_err $? " Could not get high enough prio-2 ingress rate"
280
+ rate_2=($( run_hi_measure_rate " prio 2" ) )
273
281
local rate_2_in=${rate_2[0]}
274
282
local rate_2_eg=${rate_2[1]}
275
- stop_traffic # $h2.222
276
283
277
284
# Start low-prio stream.
278
285
start_traffic $h1 .111 192.0.2.33 192.0.2.34 $h3mac
286
+ defer stop_traffic $!
279
287
280
288
local -a rate_1
281
289
rate_1=($( measure_rate $swp1 $h3 rx_octets_prio_1 " prio 1" ) )
@@ -290,14 +298,9 @@ test_ets_strict()
290
298
check_err $( bc <<< " $rel21 > 105" )
291
299
292
300
# Start the high-prio stream--now both streams run.
293
- start_traffic $h2 .222 192.0.2.65 192.0.2.66 $h3mac
294
- rate_3=($( measure_rate $swp2 $h3 rx_octets_prio_2 " prio 2 w/ 1" ) )
295
- check_err $? " Could not get high enough prio-2 ingress rate with prio-1"
301
+ rate_3=($( run_hi_measure_rate " prio 2+1" ) )
296
302
local rate_3_in=${rate_3[0]}
297
303
local rate_3_eg=${rate_3[1]}
298
- stop_traffic # $h2.222
299
-
300
- stop_traffic # $h1.111
301
304
302
305
# High-prio should have about the same throughput whether or not
303
306
# low-prio is in the system.
0 commit comments