selftests: forwarding: devlink_lib: Split devlink_..._set() into save & set
[linux-2.6-microblaze.git] / tools / testing / selftests / drivers / net / mlxsw / sch_ets.sh
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3
4 # A driver for the ETS selftest that implements testing in offloaded datapath.
5 lib_dir=$(dirname $0)/../../../net/forwarding
6 source $lib_dir/sch_ets_core.sh
7 source $lib_dir/devlink_lib.sh
8 source qos_lib.sh
9
10 ALL_TESTS="
11         ping_ipv4
12         priomap_mode
13         ets_test_strict
14         ets_test_mixed
15         ets_test_dwrr
16 "
17
18 switch_create()
19 {
20         ets_switch_create
21
22         # Create a bottleneck so that the DWRR process can kick in.
23         ethtool -s $h2 speed 1000 autoneg off
24         ethtool -s $swp2 speed 1000 autoneg off
25
26         # Set the ingress quota high and use the three egress TCs to limit the
27         # amount of traffic that is admitted to the shared buffers. This makes
28         # sure that there is always enough traffic of all types to select from
29         # for the DWRR process.
30         devlink_port_pool_th_save $swp1 0
31         devlink_port_pool_th_set $swp1 0 12
32         devlink_tc_bind_pool_th_save $swp1 0 ingress
33         devlink_tc_bind_pool_th_set $swp1 0 ingress 0 12
34         devlink_port_pool_th_save $swp2 4
35         devlink_port_pool_th_set $swp2 4 12
36         devlink_tc_bind_pool_th_save $swp2 7 egress
37         devlink_tc_bind_pool_th_set $swp2 7 egress 4 5
38         devlink_tc_bind_pool_th_save $swp2 6 egress
39         devlink_tc_bind_pool_th_set $swp2 6 egress 4 5
40         devlink_tc_bind_pool_th_save $swp2 5 egress
41         devlink_tc_bind_pool_th_set $swp2 5 egress 4 5
42
43         # Note: sch_ets_core.sh uses VLAN ingress-qos-map to assign packet
44         # priorities at $swp1 based on their 802.1p headers. ingress-qos-map is
45         # not offloaded by mlxsw as of this writing, but the mapping used is
46         # 1:1, which is the mapping currently hard-coded by the driver.
47 }
48
49 switch_destroy()
50 {
51         devlink_tc_bind_pool_th_restore $swp2 5 egress
52         devlink_tc_bind_pool_th_restore $swp2 6 egress
53         devlink_tc_bind_pool_th_restore $swp2 7 egress
54         devlink_port_pool_th_restore $swp2 4
55         devlink_tc_bind_pool_th_restore $swp1 0 ingress
56         devlink_port_pool_th_restore $swp1 0
57
58         ethtool -s $swp2 autoneg on
59         ethtool -s $h2 autoneg on
60
61         ets_switch_destroy
62 }
63
64 # Callback from sch_ets_tests.sh
65 collect_stats()
66 {
67         local -a streams=("$@")
68         local stream
69
70         # Wait for qdisc counter update so that we don't get it mid-way through.
71         busywait_for_counter 1000 +1 \
72                 qdisc_parent_stats_get $swp2 10:$((${streams[0]} + 1)) .bytes \
73                 > /dev/null
74
75         for stream in ${streams[@]}; do
76                 qdisc_parent_stats_get $swp2 10:$((stream + 1)) .bytes
77         done
78 }
79
80 bail_on_lldpad
81 ets_run