~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/net/forwarding/skbedit_priority.sh

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #!/bin/bash
  2 # SPDX-License-Identifier: GPL-2.0
  3 
  4 # This test sends traffic from H1 to H2. Either on ingress of $swp1, or on
  5 # egress of $swp2, the traffic is acted upon by an action skbedit priority. The
  6 # new priority should be taken into account when classifying traffic on the PRIO
  7 # qdisc at $swp2. The test verifies that for different priority values, the
  8 # traffic ends up in expected PRIO band.
  9 #
 10 # +----------------------+                             +----------------------+
 11 # | H1                   |                             |                   H2 |
 12 # |    + $h1             |                             |            $h2 +     |
 13 # |    | 192.0.2.1/28    |                             |   192.0.2.2/28 |     |
 14 # +----|-----------------+                             +----------------|-----+
 15 #      |                                                                |
 16 # +----|----------------------------------------------------------------|-----+
 17 # | SW |                                                                |     |
 18 # |  +-|----------------------------------------------------------------|-+   |
 19 # |  | + $swp1                       BR                           $swp2 + |   |
 20 # |  |                                                             PRIO   |   |
 21 # |  +--------------------------------------------------------------------+   |
 22 # +---------------------------------------------------------------------------+
 23 
 24 ALL_TESTS="
 25         ping_ipv4
 26         test_ingress
 27         test_egress
 28 "
 29 
 30 NUM_NETIFS=4
 31 source lib.sh
 32 
 33 : ${HIT_TIMEOUT:=2000} # ms
 34 
 35 h1_create()
 36 {
 37         simple_if_init $h1 192.0.2.1/28
 38 }
 39 
 40 h1_destroy()
 41 {
 42         simple_if_fini $h1 192.0.2.1/28
 43 }
 44 
 45 h2_create()
 46 {
 47         simple_if_init $h2 192.0.2.2/28
 48 }
 49 
 50 h2_destroy()
 51 {
 52         simple_if_fini $h2 192.0.2.2/28
 53 }
 54 
 55 switch_create()
 56 {
 57         ip link add name br1 type bridge vlan_filtering 1
 58         ip link set dev br1 addrgenmode none
 59         ip link set dev br1 up
 60         ip link set dev $swp1 master br1
 61         ip link set dev $swp1 up
 62         ip link set dev $swp2 master br1
 63         ip link set dev $swp2 up
 64 
 65         tc qdisc add dev $swp1 clsact
 66         tc qdisc add dev $swp2 clsact
 67         tc qdisc add dev $swp2 root handle 10: \
 68            prio bands 8 priomap 7 6 5 4 3 2 1 0
 69 }
 70 
 71 switch_destroy()
 72 {
 73         tc qdisc del dev $swp2 root
 74         tc qdisc del dev $swp2 clsact
 75         tc qdisc del dev $swp1 clsact
 76 
 77         ip link set dev $swp2 down
 78         ip link set dev $swp2 nomaster
 79         ip link set dev $swp1 down
 80         ip link set dev $swp1 nomaster
 81         ip link del dev br1
 82 }
 83 
 84 setup_prepare()
 85 {
 86         h1=${NETIFS[p1]}
 87         swp1=${NETIFS[p2]}
 88 
 89         swp2=${NETIFS[p3]}
 90         h2=${NETIFS[p4]}
 91 
 92         h2mac=$(mac_get $h2)
 93 
 94         vrf_prepare
 95         h1_create
 96         h2_create
 97         switch_create
 98 }
 99 
100 cleanup()
101 {
102         pre_cleanup
103 
104         switch_destroy
105         h2_destroy
106         h1_destroy
107         vrf_cleanup
108 }
109 
110 ping_ipv4()
111 {
112         ping_test $h1 192.0.2.2
113 }
114 
115 test_skbedit_priority_one()
116 {
117         local locus=$1; shift
118         local prio=$1; shift
119         local classid=$1; shift
120 
121         RET=0
122 
123         tc filter add $locus handle 101 pref 1 \
124            flower action skbedit priority $prio
125 
126         local pkt0=$(qdisc_parent_stats_get $swp2 $classid .packets)
127         local pkt2=$(tc_rule_handle_stats_get "$locus" 101)
128         $MZ $h1 -t udp "sp=54321,dp=12345" -c 10 -d 20msec -p 100 \
129             -a own -b $h2mac -A 192.0.2.1 -B 192.0.2.2 -q
130 
131         local pkt1
132         pkt1=$(busywait "$HIT_TIMEOUT" until_counter_is ">= $((pkt0 + 10))" \
133                         qdisc_parent_stats_get $swp2 $classid .packets)
134         check_err $? "Expected to get 10 packets on class $classid, but got $((pkt1 - pkt0))."
135 
136         local pkt3=$(tc_rule_handle_stats_get "$locus" 101)
137         ((pkt3 >= pkt2 + 10))
138         check_err $? "Expected to get 10 packets on skbedit rule but got $((pkt3 - pkt2))."
139 
140         log_test "$locus skbedit priority $prio -> classid $classid"
141 
142         tc filter del $locus pref 1
143 }
144 
145 test_ingress()
146 {
147         local prio
148 
149         for prio in {0..7}; do
150                 test_skbedit_priority_one "dev $swp1 ingress" \
151                                           $prio 10:$((8 - prio))
152         done
153 }
154 
155 test_egress()
156 {
157         local prio
158 
159         for prio in {0..7}; do
160                 test_skbedit_priority_one "dev $swp2 egress" \
161                                           $prio 10:$((8 - prio))
162         done
163 }
164 
165 trap cleanup EXIT
166 
167 setup_prepare
168 setup_wait
169 
170 tests_run
171 
172 exit $EXIT_STATUS

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php