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

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/net/forwarding/tc_flower_cfm.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 ALL_TESTS="match_cfm_opcode match_cfm_level match_cfm_level_and_opcode"
  5 NUM_NETIFS=2
  6 source tc_common.sh
  7 source lib.sh
  8 
  9 h1_create()
 10 {
 11         simple_if_init $h1
 12 }
 13 
 14 h1_destroy()
 15 {
 16         simple_if_fini $h1
 17 }
 18 
 19 h2_create()
 20 {
 21         simple_if_init $h2
 22         tc qdisc add dev $h2 clsact
 23 }
 24 
 25 h2_destroy()
 26 {
 27         tc qdisc del dev $h2 clsact
 28         simple_if_fini $h2
 29 }
 30 
 31 u8_to_hex()
 32 {
 33         local u8=$1; shift
 34 
 35         printf "%02x" $u8
 36 }
 37 
 38 generate_cfm_hdr()
 39 {
 40         local mdl=$1; shift
 41         local op=$1; shift
 42         local flags=$1; shift
 43         local tlv_offset=$1; shift
 44 
 45         local cfm_hdr=$(:
 46                        )"$(u8_to_hex $((mdl << 5))):"$(         : MD level and Version
 47                        )"$(u8_to_hex $op):"$(                   : OpCode
 48                        )"$(u8_to_hex $flags):"$(                : Flags
 49                        )"$(u8_to_hex $tlv_offset)"$(            : TLV offset
 50                        )
 51 
 52         echo $cfm_hdr
 53 }
 54 
 55 match_cfm_opcode()
 56 {
 57         local ethtype="89 02"; readonly ethtype
 58         RET=0
 59 
 60         tc filter add dev $h2 ingress protocol cfm pref 1 handle 101 \
 61            flower cfm op 47 action drop
 62         tc filter add dev $h2 ingress protocol cfm pref 1 handle 102 \
 63            flower cfm op 43 action drop
 64 
 65         pkt="$ethtype $(generate_cfm_hdr 7 47 0 32)"
 66         $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
 67         pkt="$ethtype $(generate_cfm_hdr 6 5 0 4)"
 68         $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
 69 
 70         tc_check_packets "dev $h2 ingress" 101 1
 71         check_err $? "Did not match on correct opcode"
 72 
 73         tc_check_packets "dev $h2 ingress" 102 0
 74         check_err $? "Matched on the wrong opcode"
 75 
 76         pkt="$ethtype $(generate_cfm_hdr 0 43 0 12)"
 77         $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
 78 
 79         tc_check_packets "dev $h2 ingress" 101 1
 80         check_err $? "Matched on the wrong opcode"
 81 
 82         tc_check_packets "dev $h2 ingress" 102 1
 83         check_err $? "Did not match on correct opcode"
 84 
 85         tc filter del dev $h2 ingress protocol cfm pref 1 handle 101 flower
 86         tc filter del dev $h2 ingress protocol cfm pref 1 handle 102 flower
 87 
 88         log_test "CFM opcode match test"
 89 }
 90 
 91 match_cfm_level()
 92 {
 93         local ethtype="89 02"; readonly ethtype
 94         RET=0
 95 
 96         tc filter add dev $h2 ingress protocol cfm pref 1 handle 101 \
 97            flower cfm mdl 5 action drop
 98         tc filter add dev $h2 ingress protocol cfm pref 1 handle 102 \
 99            flower cfm mdl 3 action drop
100         tc filter add dev $h2 ingress protocol cfm pref 1 handle 103 \
101            flower cfm mdl 0 action drop
102 
103         pkt="$ethtype $(generate_cfm_hdr 5 42 0 12)"
104         $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
105         pkt="$ethtype $(generate_cfm_hdr 6 1 0 70)"
106         $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
107         pkt="$ethtype $(generate_cfm_hdr 0 1 0 70)"
108         $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
109 
110         tc_check_packets "dev $h2 ingress" 101 1
111         check_err $? "Did not match on correct level"
112 
113         tc_check_packets "dev $h2 ingress" 102 0
114         check_err $? "Matched on the wrong level"
115 
116         tc_check_packets "dev $h2 ingress" 103 1
117         check_err $? "Did not match on correct level"
118 
119         pkt="$ethtype $(generate_cfm_hdr 3 0 0 4)"
120         $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
121 
122         tc_check_packets "dev $h2 ingress" 101 1
123         check_err $? "Matched on the wrong level"
124 
125         tc_check_packets "dev $h2 ingress" 102 1
126         check_err $? "Did not match on correct level"
127 
128         tc_check_packets "dev $h2 ingress" 103 1
129         check_err $? "Matched on the wrong level"
130 
131         tc filter del dev $h2 ingress protocol cfm pref 1 handle 101 flower
132         tc filter del dev $h2 ingress protocol cfm pref 1 handle 102 flower
133         tc filter del dev $h2 ingress protocol cfm pref 1 handle 103 flower
134 
135         log_test "CFM level match test"
136 }
137 
138 match_cfm_level_and_opcode()
139 {
140         local ethtype="89 02"; readonly ethtype
141         RET=0
142 
143         tc filter add dev $h2 ingress protocol cfm pref 1 handle 101 \
144            flower cfm mdl 5 op 41 action drop
145         tc filter add dev $h2 ingress protocol cfm pref 1 handle 102 \
146            flower cfm mdl 7 op 42 action drop
147 
148         pkt="$ethtype $(generate_cfm_hdr 5 41 0 4)"
149         $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
150         pkt="$ethtype $(generate_cfm_hdr 7 3 0 4)"
151         $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
152         pkt="$ethtype $(generate_cfm_hdr 3 42 0 12)"
153         $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
154 
155         tc_check_packets "dev $h2 ingress" 101 1
156         check_err $? "Did not match on correct level and opcode"
157 
158         tc_check_packets "dev $h2 ingress" 102 0
159         check_err $? "Matched on the wrong level and opcode"
160 
161         pkt="$ethtype $(generate_cfm_hdr 7 42 0 12)"
162         $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
163 
164         tc_check_packets "dev $h2 ingress" 101 1
165         check_err $? "Matched on the wrong level and opcode"
166 
167         tc_check_packets "dev $h2 ingress" 102 1
168         check_err $? "Did not match on correct level and opcode"
169 
170         tc filter del dev $h2 ingress protocol cfm pref 1 handle 101 flower
171         tc filter del dev $h2 ingress protocol cfm pref 1 handle 102 flower
172 
173         log_test "CFM opcode and level match test"
174 }
175 
176 setup_prepare()
177 {
178         h1=${NETIFS[p1]}
179         h2=${NETIFS[p2]}
180         h1mac=$(mac_get $h1)
181         h2mac=$(mac_get $h2)
182 
183         vrf_prepare
184 
185         h1_create
186         h2_create
187 }
188 
189 cleanup()
190 {
191         pre_cleanup
192 
193         h2_destroy
194         h1_destroy
195 
196         vrf_cleanup
197 }
198 
199 trap cleanup EXIT
200 
201 setup_prepare
202 setup_wait
203 
204 tests_run
205 
206 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