forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-10 cde9070d9970eef1f7ec2360586c802a16230ad8
kernel/tools/testing/selftests/drivers/net/mlxsw/qos_dscp_router.sh
....@@ -31,6 +31,8 @@
3131 ping_ipv4
3232 test_update
3333 test_no_update
34
+ test_pedit_norewrite
35
+ test_dscp_leftover
3436 "
3537
3638 lib_dir=$(dirname $0)/../../../net/forwarding
....@@ -50,10 +52,18 @@
5052 echo ${reprio[$in]}
5153 }
5254
55
+zero()
56
+{
57
+ echo 0
58
+}
59
+
60
+three()
61
+{
62
+ echo 3
63
+}
64
+
5365 h1_create()
5466 {
55
- local dscp;
56
-
5767 simple_if_init $h1 192.0.2.1/28
5868 tc qdisc add dev $h1 clsact
5969 dscp_capture_install $h1 0
....@@ -87,6 +97,7 @@
8797 dscp_map()
8898 {
8999 local base=$1; shift
100
+ local prio
90101
91102 for prio in {0..7}; do
92103 echo app=$prio,5,$((base + prio))
....@@ -97,6 +108,9 @@
97108 {
98109 simple_if_init $swp1 192.0.2.2/28
99110 __simple_if_init $swp2 v$swp1 192.0.2.17/28
111
+
112
+ tc qdisc add dev $swp1 clsact
113
+ tc qdisc add dev $swp2 clsact
100114
101115 lldptool -T -i $swp1 -V APP $(dscp_map 0) >/dev/null
102116 lldptool -T -i $swp2 -V APP $(dscp_map 0) >/dev/null
....@@ -109,6 +123,9 @@
109123 lldptool -T -i $swp2 -V APP -d $(dscp_map 0) >/dev/null
110124 lldptool -T -i $swp1 -V APP -d $(dscp_map 0) >/dev/null
111125 lldpad_app_wait_del
126
+
127
+ tc qdisc del dev $swp2 clsact
128
+ tc qdisc del dev $swp1 clsact
112129
113130 __simple_if_fini $swp2 192.0.2.17/28
114131 simple_if_fini $swp1 192.0.2.2/28
....@@ -156,6 +173,7 @@
156173 local reprio=$1; shift
157174 local dev1=$1; shift
158175 local dev2=$1; shift
176
+ local i
159177
160178 local prio2=$($reprio $prio) # ICMP Request egress prio
161179 local prio3=$($reprio $prio2) # ICMP Response egress prio
....@@ -169,9 +187,10 @@
169187 eval "local -A dev1_t0s=($(dscp_fetch_stats $dev1 0))"
170188 eval "local -A dev2_t0s=($(dscp_fetch_stats $dev2 0))"
171189
190
+ local ping_timeout=$((PING_TIMEOUT * 5))
172191 ip vrf exec $vrf_name \
173192 ${PING} -Q $dscp ${sip:+-I $sip} $dip \
174
- -c 10 -i 0.1 -w 2 &> /dev/null
193
+ -c 10 -i 0.5 -w $ping_timeout &> /dev/null
175194
176195 eval "local -A dev1_t1s=($(dscp_fetch_stats $dev1 0))"
177196 eval "local -A dev2_t1s=($(dscp_fetch_stats $dev2 0))"
....@@ -204,6 +223,7 @@
204223 {
205224 local update=$1; shift
206225 local reprio=$1; shift
226
+ local prio
207227
208228 sysctl_restore net.ipv4.ip_forward_update_priority
209229 sysctl_set net.ipv4.ip_forward_update_priority $update
....@@ -215,14 +235,45 @@
215235
216236 test_update()
217237 {
238
+ echo "Test net.ipv4.ip_forward_update_priority=1"
218239 __test_update 1 reprioritize
219240 }
220241
221242 test_no_update()
222243 {
244
+ echo "Test net.ipv4.ip_forward_update_priority=0"
223245 __test_update 0 echo
224246 }
225247
248
+# Test that when DSCP is updated in pedit, the DSCP rewrite is turned off.
249
+test_pedit_norewrite()
250
+{
251
+ echo "Test no DSCP rewrite after DSCP is updated by pedit"
252
+
253
+ tc filter add dev $swp1 ingress handle 101 pref 1 prot ip flower \
254
+ action pedit ex munge ip dsfield set $((3 << 2)) retain 0xfc \
255
+ action skbedit priority 3
256
+
257
+ __test_update 0 three
258
+
259
+ tc filter del dev $swp1 ingress pref 1
260
+}
261
+
262
+# Test that when the last APP rule is removed, the prio->DSCP map is properly
263
+# set to zeroes, and that the last APP rule does not stay active in the ASIC.
264
+test_dscp_leftover()
265
+{
266
+ echo "Test that last removed DSCP rule is deconfigured correctly"
267
+
268
+ lldptool -T -i $swp2 -V APP -d $(dscp_map 0) >/dev/null
269
+ lldpad_app_wait_del
270
+
271
+ __test_update 0 zero
272
+
273
+ lldptool -T -i $swp2 -V APP $(dscp_map 0) >/dev/null
274
+ lldpad_app_wait_set $swp2
275
+}
276
+
226277 trap cleanup EXIT
227278
228279 setup_prepare