0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064 ALL_TESTS="
0065 ping_ipv4
0066 test_8K
0067 test_800
0068 "
0069
0070 lib_dir=$(dirname $0)/../../../net/forwarding
0071
0072 NUM_NETIFS=8
0073 source $lib_dir/lib.sh
0074 source $lib_dir/devlink_lib.sh
0075 source qos_lib.sh
0076 source mlxsw_lib.sh
0077
0078 _1KB=1000
0079 _500KB=$((500 * _1KB))
0080 _1MB=$((1000 * _1KB))
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094 mlxsw_only_on_spectrum 3+ || exit
0095
0096 BURST_SIZE=$((50000000))
0097 POOL_SIZE=$BURST_SIZE
0098
0099 h1_create()
0100 {
0101 simple_if_init $h1
0102 mtu_set $h1 10000
0103
0104 vlan_create $h1 111 v$h1 192.0.2.33/28
0105 ip link set dev $h1.111 type vlan egress-qos-map 0:1
0106 }
0107
0108 h1_destroy()
0109 {
0110 vlan_destroy $h1 111
0111
0112 mtu_restore $h1
0113 simple_if_fini $h1
0114 }
0115
0116 h2_create()
0117 {
0118 simple_if_init $h2
0119 mtu_set $h2 10000
0120 ethtool -s $h2 speed 1000 autoneg off
0121
0122 vlan_create $h2 111 v$h2 192.0.2.34/28
0123 }
0124
0125 h2_destroy()
0126 {
0127 vlan_destroy $h2 111
0128
0129 ethtool -s $h2 autoneg on
0130 mtu_restore $h2
0131 simple_if_fini $h2
0132 }
0133
0134 h3_create()
0135 {
0136 simple_if_init $h3
0137 mtu_set $h3 10000
0138
0139 vlan_create $h3 111 v$h3 192.0.2.35/28
0140 }
0141
0142 h3_destroy()
0143 {
0144 vlan_destroy $h3 111
0145
0146 mtu_restore $h3
0147 simple_if_fini $h3
0148 }
0149
0150 switch_create()
0151 {
0152
0153
0154
0155 devlink_pool_size_thtype_save 0
0156 devlink_pool_size_thtype_save 4
0157 devlink_pool_size_thtype_save 1
0158 devlink_pool_size_thtype_save 5
0159 devlink_pool_size_thtype_save 2
0160 devlink_pool_size_thtype_save 6
0161
0162 devlink_port_pool_th_save $swp1 1
0163 devlink_port_pool_th_save $swp2 6
0164 devlink_port_pool_th_save $swp3 5
0165 devlink_port_pool_th_save $swp4 2
0166 devlink_port_pool_th_save $swp5 2
0167
0168 devlink_tc_bind_pool_th_save $swp1 1 ingress
0169 devlink_tc_bind_pool_th_save $swp2 1 egress
0170 devlink_tc_bind_pool_th_save $swp3 1 egress
0171 devlink_tc_bind_pool_th_save $swp4 1 ingress
0172 devlink_tc_bind_pool_th_save $swp5 1 ingress
0173
0174
0175 devlink_pool_size_thtype_set 0 dynamic $_500KB
0176 devlink_pool_size_thtype_set 4 dynamic $_500KB
0177
0178
0179 devlink_pool_size_thtype_set 1 dynamic $_500KB
0180 devlink_pool_size_thtype_set 5 dynamic $_500KB
0181
0182
0183 devlink_pool_size_thtype_set 2 static $POOL_SIZE
0184 devlink_pool_size_thtype_set 6 static $POOL_SIZE
0185
0186
0187
0188
0189 ip link set dev $swp1 up
0190 mtu_set $swp1 10000
0191 vlan_create $swp1 111
0192 ip link set dev $swp1.111 type vlan ingress-qos-map 0:0 1:1
0193
0194 devlink_port_pool_th_set $swp1 1 16
0195 devlink_tc_bind_pool_th_set $swp1 1 ingress 1 16
0196
0197
0198 tc qdisc replace dev $swp1 root handle 1: \
0199 ets bands 8 strict 8 priomap 7 6
0200
0201 dcb buffer set dev $swp1 prio-buffer all:0 1:1
0202
0203
0204
0205
0206 ip link set dev $swp2 up
0207 mtu_set $swp2 10000
0208 ethtool -s $swp2 speed 1000 autoneg off
0209 vlan_create $swp2 111
0210 ip link set dev $swp2.111 type vlan egress-qos-map 0:0 1:1
0211
0212 devlink_port_pool_th_set $swp2 6 $POOL_SIZE
0213 devlink_tc_bind_pool_th_set $swp2 1 egress 6 $POOL_SIZE
0214
0215
0216 tc qdisc replace dev $swp2 root handle 1: \
0217 ets bands 8 strict 8 priomap 7 6
0218
0219
0220
0221
0222 ip link set dev $swp3 up
0223 mtu_set $swp3 10000
0224 ethtool -s $swp3 speed 1000 autoneg off
0225 vlan_create $swp3 111
0226 ip link set dev $swp3.111 type vlan egress-qos-map 0:0 1:1
0227
0228 devlink_port_pool_th_set $swp3 5 16
0229 devlink_tc_bind_pool_th_set $swp3 1 egress 5 16
0230
0231
0232 tc qdisc replace dev $swp3 root handle 1: \
0233 ets bands 8 strict 8 priomap 7 6
0234
0235
0236
0237
0238 ip link set dev $swp4 up
0239 mtu_set $swp4 10000
0240 ethtool -s $swp4 speed 1000 autoneg off
0241 vlan_create $swp4 111
0242 ip link set dev $swp4.111 type vlan ingress-qos-map 0:0 1:1
0243
0244 devlink_port_pool_th_set $swp4 2 $POOL_SIZE
0245 devlink_tc_bind_pool_th_set $swp4 1 ingress 2 $POOL_SIZE
0246
0247
0248 tc qdisc replace dev $swp4 root handle 1: \
0249 ets bands 8 strict 8 priomap 7 6
0250
0251 dcb buffer set dev $swp4 prio-buffer all:0 1:1
0252
0253
0254
0255
0256 ip link set dev $swp5 up
0257 mtu_set $swp5 10000
0258 vlan_create $swp5 111
0259 ip link set dev $swp5.111 type vlan ingress-qos-map 0:0 1:1
0260
0261 devlink_port_pool_th_set $swp5 2 $POOL_SIZE
0262 devlink_tc_bind_pool_th_set $swp5 1 ingress 2 $POOL_SIZE
0263
0264
0265 tc qdisc replace dev $swp5 root handle 1: \
0266 ets bands 8 strict 8 priomap 7 6
0267
0268 dcb buffer set dev $swp5 prio-buffer all:0 1:1
0269
0270
0271
0272
0273 ip link add name br1 type bridge vlan_filtering 0
0274 ip link set dev $swp1.111 master br1
0275 ip link set dev $swp3.111 master br1
0276 ip link set dev br1 up
0277
0278 ip link add name br2 type bridge vlan_filtering 0
0279 ip link set dev $swp2.111 master br2
0280 ip link set dev $swp4.111 master br2
0281 ip link set dev $swp5.111 master br2
0282 ip link set dev br2 up
0283 }
0284
0285 switch_destroy()
0286 {
0287
0288
0289 devlink_pool_size_thtype_restore 6
0290 devlink_pool_size_thtype_restore 5
0291 devlink_pool_size_thtype_restore 4
0292 devlink_pool_size_thtype_restore 2
0293 devlink_pool_size_thtype_restore 1
0294 devlink_pool_size_thtype_restore 0
0295
0296
0297
0298
0299 ip link set dev br2 down
0300 ip link set dev $swp5.111 nomaster
0301 ip link set dev $swp4.111 nomaster
0302 ip link set dev $swp2.111 nomaster
0303 ip link del dev br2
0304
0305 ip link set dev br1 down
0306 ip link set dev $swp3.111 nomaster
0307 ip link set dev $swp1.111 nomaster
0308 ip link del dev br1
0309
0310
0311
0312
0313 dcb buffer set dev $swp5 prio-buffer all:0
0314 tc qdisc del dev $swp5 root
0315
0316 devlink_tc_bind_pool_th_restore $swp5 1 ingress
0317 devlink_port_pool_th_restore $swp5 2
0318
0319 vlan_destroy $swp5 111
0320 mtu_restore $swp5
0321 ip link set dev $swp5 down
0322
0323
0324
0325
0326 dcb buffer set dev $swp4 prio-buffer all:0
0327 tc qdisc del dev $swp4 root
0328
0329 devlink_tc_bind_pool_th_restore $swp4 1 ingress
0330 devlink_port_pool_th_restore $swp4 2
0331
0332 vlan_destroy $swp4 111
0333 ethtool -s $swp4 autoneg on
0334 mtu_restore $swp4
0335 ip link set dev $swp4 down
0336
0337
0338
0339
0340 tc qdisc del dev $swp3 root
0341
0342 devlink_tc_bind_pool_th_restore $swp3 1 egress
0343 devlink_port_pool_th_restore $swp3 5
0344
0345 vlan_destroy $swp3 111
0346 ethtool -s $swp3 autoneg on
0347 mtu_restore $swp3
0348 ip link set dev $swp3 down
0349
0350
0351
0352
0353 tc qdisc del dev $swp2 root
0354
0355 devlink_tc_bind_pool_th_restore $swp2 1 egress
0356 devlink_port_pool_th_restore $swp2 6
0357
0358 vlan_destroy $swp2 111
0359 ethtool -s $swp2 autoneg on
0360 mtu_restore $swp2
0361 ip link set dev $swp2 down
0362
0363
0364
0365
0366 dcb buffer set dev $swp1 prio-buffer all:0
0367 tc qdisc del dev $swp1 root
0368
0369 devlink_tc_bind_pool_th_restore $swp1 1 ingress
0370 devlink_port_pool_th_restore $swp1 1
0371
0372 vlan_destroy $swp1 111
0373 mtu_restore $swp1
0374 ip link set dev $swp1 down
0375 }
0376
0377 setup_prepare()
0378 {
0379 h1=${NETIFS[p1]}
0380 swp1=${NETIFS[p2]}
0381
0382 swp2=${NETIFS[p3]}
0383 h2=${NETIFS[p4]}
0384
0385 swp3=${NETIFS[p5]}
0386 swp4=${NETIFS[p6]}
0387
0388 swp5=${NETIFS[p7]}
0389 h3=${NETIFS[p8]}
0390
0391 h2mac=$(mac_get $h2)
0392
0393 vrf_prepare
0394
0395 h1_create
0396 h2_create
0397 h3_create
0398 switch_create
0399 }
0400
0401 cleanup()
0402 {
0403 pre_cleanup
0404
0405 switch_destroy
0406 h3_destroy
0407 h2_destroy
0408 h1_destroy
0409
0410 vrf_cleanup
0411 }
0412
0413 ping_ipv4()
0414 {
0415 ping_test $h1 192.0.2.34 " h1->h2"
0416 ping_test $h3 192.0.2.34 " h3->h2"
0417 }
0418
0419 __test_qos_burst()
0420 {
0421 local pktsize=$1; shift
0422
0423 RET=0
0424
0425 start_traffic_pktsize $pktsize $h1.111 192.0.2.33 192.0.2.34 $h2mac
0426 sleep 1
0427
0428 local q0=$(ethtool_stats_get $swp2 tc_transmit_queue_tc_1)
0429 ((q0 == 0))
0430 check_err $? "Transmit queue non-zero?"
0431
0432 local d0=$(ethtool_stats_get $swp2 tc_no_buffer_discard_uc_tc_1)
0433
0434 local cell_size=$(devlink_cell_size_get)
0435 local cells=$((BURST_SIZE / cell_size))
0436
0437 local pkt_cells=$(((pktsize + 50 + cell_size - 1) / cell_size))
0438
0439 local pkts=$((cells / pkt_cells))
0440
0441 $MZ $h3 -p $pktsize -Q 1:111 -A 192.0.2.35 -B 192.0.2.34 \
0442 -a own -b $h2mac -c $pkts -t udp -q
0443 sleep 1
0444
0445 local d1=$(ethtool_stats_get $swp2 tc_no_buffer_discard_uc_tc_1)
0446 ((d1 == d0))
0447 check_err $? "Drops seen on egress port: $d0 -> $d1 ($((d1 - d0)))"
0448
0449
0450
0451
0452 local q0=$(ethtool_stats_get $swp2 tc_transmit_queue_tc_1)
0453 local qe=$((90 * BURST_SIZE / 100))
0454 ((q0 > qe))
0455 check_err $? "Queue size expected >$qe, got $q0"
0456
0457 stop_traffic
0458 sleep 2
0459
0460 log_test "Burst: absorb $pkts ${pktsize}-B packets"
0461 }
0462
0463 test_8K()
0464 {
0465 __test_qos_burst 8000
0466 }
0467
0468 test_800()
0469 {
0470 __test_qos_burst 800
0471 }
0472
0473 bail_on_lldpad
0474
0475 trap cleanup EXIT
0476 setup_prepare
0477 setup_wait
0478 tests_run
0479
0480 exit $EXIT_STATUS