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

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/drivers/net/mlxsw/devlink_trap_control.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 # Test devlink-trap control trap functionality over mlxsw. Each registered
  5 # control packet trap is tested to make sure it is triggered under the right
  6 # conditions.
  7 #
  8 # +---------------------------------+
  9 # | H1 (vrf)                        |
 10 # |    + $h1                        |
 11 # |    | 192.0.2.1/24               |
 12 # |    | 2001:db8:1::1/64           |
 13 # |    |                            |
 14 # |    |  default via 192.0.2.2     |
 15 # |    |  default via 2001:db8:1::2 |
 16 # +----|----------------------------+
 17 #      |
 18 # +----|----------------------------------------------------------------------+
 19 # | SW |                                                                      |
 20 # |    + $rp1                                                                 |
 21 # |        192.0.2.2/24                                                       |
 22 # |        2001:db8:1::2/64                                                   |
 23 # |                                                                           |
 24 # |        2001:db8:2::2/64                                                   |
 25 # |        198.51.100.2/24                                                    |
 26 # |    + $rp2                                                                 |
 27 # |    |                                                                      |
 28 # +----|----------------------------------------------------------------------+
 29 #      |
 30 # +----|----------------------------+
 31 # |    |  default via 198.51.100.2  |
 32 # |    |  default via 2001:db8:2::2 |
 33 # |    |                            |
 34 # |    | 2001:db8:2::1/64           |
 35 # |    | 198.51.100.1/24            |
 36 # |    + $h2                        |
 37 # | H2 (vrf)                        |
 38 # +---------------------------------+
 39 
 40 lib_dir=$(dirname $0)/../../../net/forwarding
 41 
 42 ALL_TESTS="
 43         stp_test
 44         lacp_test
 45         lldp_test
 46         igmp_query_test
 47         igmp_v1_report_test
 48         igmp_v2_report_test
 49         igmp_v3_report_test
 50         igmp_v2_leave_test
 51         mld_query_test
 52         mld_v1_report_test
 53         mld_v2_report_test
 54         mld_v1_done_test
 55         ipv4_dhcp_test
 56         ipv6_dhcp_test
 57         arp_request_test
 58         arp_response_test
 59         ipv6_neigh_solicit_test
 60         ipv6_neigh_advert_test
 61         ipv4_bfd_test
 62         ipv6_bfd_test
 63         ipv4_ospf_test
 64         ipv6_ospf_test
 65         ipv4_bgp_test
 66         ipv6_bgp_test
 67         ipv4_vrrp_test
 68         ipv6_vrrp_test
 69         ipv4_pim_test
 70         ipv6_pim_test
 71         uc_loopback_test
 72         local_route_test
 73         external_route_test
 74         ipv6_uc_dip_link_local_scope_test
 75         ipv4_router_alert_test
 76         ipv6_router_alert_test
 77         ipv6_dip_all_nodes_test
 78         ipv6_dip_all_routers_test
 79         ipv6_router_solicit_test
 80         ipv6_router_advert_test
 81         ipv6_redirect_test
 82         ptp_event_test
 83         ptp_general_test
 84         flow_action_sample_test
 85         flow_action_trap_test
 86         eapol_test
 87 "
 88 NUM_NETIFS=4
 89 source $lib_dir/lib.sh
 90 source $lib_dir/devlink_lib.sh
 91 source mlxsw_lib.sh
 92 
 93 h1_create()
 94 {
 95         simple_if_init $h1 192.0.2.1/24 2001:db8:1::1/64
 96 
 97         ip -4 route add default vrf v$h1 nexthop via 192.0.2.2
 98         ip -6 route add default vrf v$h1 nexthop via 2001:db8:1::2
 99 }
100 
101 h1_destroy()
102 {
103         ip -6 route del default vrf v$h1 nexthop via 2001:db8:1::2
104         ip -4 route del default vrf v$h1 nexthop via 192.0.2.2
105 
106         simple_if_fini $h1 192.0.2.1/24 2001:db8:1::1/64
107 }
108 
109 h2_create()
110 {
111         simple_if_init $h2 198.51.100.1/24 2001:db8:2::1/64
112 
113         ip -4 route add default vrf v$h2 nexthop via 198.51.100.2
114         ip -6 route add default vrf v$h2 nexthop via 2001:db8:2::2
115 }
116 
117 h2_destroy()
118 {
119         ip -6 route del default vrf v$h2 nexthop via 2001:db8:2::2
120         ip -4 route del default vrf v$h2 nexthop via 198.51.100.2
121 
122         simple_if_fini $h2 198.51.100.1/24 2001:db8:2::1/64
123 }
124 
125 router_create()
126 {
127         ip link set dev $rp1 up
128         ip link set dev $rp2 up
129 
130         __addr_add_del $rp1 add 192.0.2.2/24 2001:db8:1::2/64
131         __addr_add_del $rp2 add 198.51.100.2/24 2001:db8:2::2/64
132 }
133 
134 router_destroy()
135 {
136         __addr_add_del $rp2 del 198.51.100.2/24 2001:db8:2::2/64
137         __addr_add_del $rp1 del 192.0.2.2/24 2001:db8:1::2/64
138 
139         ip link set dev $rp2 down
140         ip link set dev $rp1 down
141 }
142 
143 setup_prepare()
144 {
145         h1=${NETIFS[p1]}
146         rp1=${NETIFS[p2]}
147 
148         rp2=${NETIFS[p3]}
149         h2=${NETIFS[p4]}
150 
151         vrf_prepare
152         forwarding_enable
153 
154         h1_create
155         h2_create
156         router_create
157 }
158 
159 cleanup()
160 {
161         pre_cleanup
162 
163         router_destroy
164         h2_destroy
165         h1_destroy
166 
167         forwarding_restore
168         vrf_cleanup
169 }
170 
171 stp_test()
172 {
173         devlink_trap_stats_test "STP" "stp" $MZ $h1 -c 1 -t bpdu -q
174 }
175 
176 lacp_payload_get()
177 {
178         local source_mac=$1; shift
179         local p
180 
181         p=$(:
182                 )"01:80:C2:00:00:02:"$(       : ETH daddr
183                 )"$source_mac:"$(             : ETH saddr
184                 )"88:09:"$(                   : ETH type
185                 )
186         echo $p
187 }
188 
189 lacp_test()
190 {
191         local h1mac=$(mac_get $h1)
192 
193         devlink_trap_stats_test "LACP" "lacp" $MZ $h1 -c 1 \
194                 $(lacp_payload_get $h1mac) -p 100 -q
195 }
196 
197 lldp_payload_get()
198 {
199         local source_mac=$1; shift
200         local p
201 
202         p=$(:
203                 )"01:80:C2:00:00:0E:"$(       : ETH daddr
204                 )"$source_mac:"$(             : ETH saddr
205                 )"88:CC:"$(                   : ETH type
206                 )
207         echo $p
208 }
209 
210 lldp_test()
211 {
212         local h1mac=$(mac_get $h1)
213 
214         devlink_trap_stats_test "LLDP" "lldp" $MZ $h1 -c 1 \
215                 $(lldp_payload_get $h1mac) -p 100 -q
216 }
217 
218 igmp_query_test()
219 {
220         # IGMP (IP Protocol 2) Membership Query (Type 0x11)
221         devlink_trap_stats_test "IGMP Membership Query" "igmp_query" \
222                 $MZ $h1 -c 1 -a own -b 01:00:5E:00:00:01 \
223                 -A 192.0.2.1 -B 224.0.0.1 -t ip proto=2,p=11 -p 100 -q
224 }
225 
226 igmp_v1_report_test()
227 {
228         # IGMP (IP Protocol 2) Version 1 Membership Report (Type 0x12)
229         devlink_trap_stats_test "IGMP Version 1 Membership Report" \
230                 "igmp_v1_report" $MZ $h1 -c 1 -a own -b 01:00:5E:00:00:01 \
231                 -A 192.0.2.1 -B 244.0.0.1 -t ip proto=2,p=12 -p 100 -q
232 }
233 
234 igmp_v2_report_test()
235 {
236         # IGMP (IP Protocol 2) Version 2 Membership Report (Type 0x16)
237         devlink_trap_stats_test "IGMP Version 2 Membership Report" \
238                 "igmp_v2_report" $MZ $h1 -c 1 -a own -b 01:00:5E:00:00:01 \
239                 -A 192.0.2.1 -B 244.0.0.1 -t ip proto=2,p=16 -p 100 -q
240 }
241 
242 igmp_v3_report_test()
243 {
244         # IGMP (IP Protocol 2) Version 3 Membership Report (Type 0x22)
245         devlink_trap_stats_test "IGMP Version 3 Membership Report" \
246                 "igmp_v3_report" $MZ $h1 -c 1 -a own -b 01:00:5E:00:00:01 \
247                 -A 192.0.2.1 -B 244.0.0.1 -t ip proto=2,p=22 -p 100 -q
248 }
249 
250 igmp_v2_leave_test()
251 {
252         # IGMP (IP Protocol 2) Version 2 Leave Group (Type 0x17)
253         devlink_trap_stats_test "IGMP Version 2 Leave Group" \
254                 "igmp_v2_leave" $MZ $h1 -c 1 -a own -b 01:00:5E:00:00:02 \
255                 -A 192.0.2.1 -B 224.0.0.2 -t ip proto=2,p=17 -p 100 -q
256 }
257 
258 mld_payload_get()
259 {
260         local type=$1; shift
261         local p
262 
263         type=$(printf "%x" $type)
264         p=$(:
265                 )"3A:"$(                        : Next Header - ICMPv6
266                 )"00:"$(                        : Hdr Ext Len
267                 )"00:00:00:00:00:00:"$(         : Options and Padding
268                 )"$type:"$(                     : ICMPv6.type
269                 )"00:"$(                        : ICMPv6.code
270                 )"00:"$(                        : ICMPv6.checksum
271                 )
272         echo $p
273 }
274 
275 mld_query_test()
276 {
277         # MLD Multicast Listener Query (Type 130)
278         devlink_trap_stats_test "MLD Multicast Listener Query" "mld_query" \
279                 $MZ $h1 -6 -c 1 -A fe80::1 -B ff02::1 \
280                 -t ip hop=1,next=0,payload=$(mld_payload_get 130) -p 100 -q
281 }
282 
283 mld_v1_report_test()
284 {
285         # MLD Version 1 Multicast Listener Report (Type 131)
286         devlink_trap_stats_test "MLD Version 1 Multicast Listener Report" \
287                 "mld_v1_report" $MZ $h1 -6 -c 1 -A fe80::1 -B ff02::16 \
288                 -t ip hop=1,next=0,payload=$(mld_payload_get 131) -p 100 -q
289 }
290 
291 mld_v2_report_test()
292 {
293         # MLD Version 2 Multicast Listener Report (Type 143)
294         devlink_trap_stats_test "MLD Version 2 Multicast Listener Report" \
295                 "mld_v2_report" $MZ $h1 -6 -c 1 -A fe80::1 -B ff02::16 \
296                 -t ip hop=1,next=0,payload=$(mld_payload_get 143) -p 100 -q
297 }
298 
299 mld_v1_done_test()
300 {
301         # MLD Version 1 Multicast Listener Done (Type 132)
302         devlink_trap_stats_test "MLD Version 1 Multicast Listener Done" \
303                 "mld_v1_done" $MZ $h1 -6 -c 1 -A fe80::1 -B ff02::16 \
304                 -t ip hop=1,next=0,payload=$(mld_payload_get 132) -p 100 -q
305 }
306 
307 ipv4_dhcp_test()
308 {
309         devlink_trap_stats_test "IPv4 DHCP Port 67" "ipv4_dhcp" \
310                 $MZ $h1 -c 1 -a own -b bcast -A 0.0.0.0 -B 255.255.255.255 \
311                 -t udp sp=68,dp=67 -p 100 -q
312 
313         devlink_trap_stats_test "IPv4 DHCP Port 68" "ipv4_dhcp" \
314                 $MZ $h1 -c 1 -a own -b $(mac_get $rp1) -A 192.0.2.1 \
315                 -B 255.255.255.255 -t udp sp=67,dp=68 -p 100 -q
316 }
317 
318 ipv6_dhcp_test()
319 {
320         devlink_trap_stats_test "IPv6 DHCP Port 547" "ipv6_dhcp" \
321                 $MZ $h1 -6 -c 1 -A fe80::1 -B ff02::1:2 -t udp sp=546,dp=547 \
322                 -p 100 -q
323 
324         devlink_trap_stats_test "IPv6 DHCP Port 546" "ipv6_dhcp" \
325                 $MZ $h1 -6 -c 1 -A fe80::1 -B ff02::1:2 -t udp sp=547,dp=546 \
326                 -p 100 -q
327 }
328 
329 arp_request_test()
330 {
331         devlink_trap_stats_test "ARP Request" "arp_request" \
332                 $MZ $h1 -c 1 -a own -b bcast -t arp request -p 100 -q
333 }
334 
335 arp_response_test()
336 {
337         devlink_trap_stats_test "ARP Response" "arp_response" \
338                 $MZ $h1 -c 1 -a own -b $(mac_get $rp1) -t arp reply -p 100 -q
339 }
340 
341 icmpv6_header_get()
342 {
343         local type=$1; shift
344         local p
345 
346         type=$(printf "%x" $type)
347         p=$(:
348                 )"$type:"$(                     : ICMPv6.type
349                 )"00:"$(                        : ICMPv6.code
350                 )"00:"$(                        : ICMPv6.checksum
351                 )
352         echo $p
353 }
354 
355 ipv6_neigh_solicit_test()
356 {
357         devlink_trap_stats_test "IPv6 Neighbour Solicitation" \
358                 "ipv6_neigh_solicit" $MZ $h1 -6 -c 1 \
359                 -A fe80::1 -B ff02::1:ff00:02 \
360                 -t ip hop=1,next=58,payload=$(icmpv6_header_get 135) -p 100 -q
361 }
362 
363 ipv6_neigh_advert_test()
364 {
365         devlink_trap_stats_test "IPv6 Neighbour Advertisement" \
366                 "ipv6_neigh_advert" $MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
367                 -A fe80::1 -B 2001:db8:1::2 \
368                 -t ip hop=1,next=58,payload=$(icmpv6_header_get 136) -p 100 -q
369 }
370 
371 ipv4_bfd_test()
372 {
373         devlink_trap_stats_test "IPv4 BFD Control - Port 3784" "ipv4_bfd" \
374                 $MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
375                 -A 192.0.2.1 -B 192.0.2.2 -t udp sp=49153,dp=3784 -p 100 -q
376 
377         devlink_trap_stats_test "IPv4 BFD Echo - Port 3785" "ipv4_bfd" \
378                 $MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
379                 -A 192.0.2.1 -B 192.0.2.2 -t udp sp=49153,dp=3785 -p 100 -q
380 }
381 
382 ipv6_bfd_test()
383 {
384         devlink_trap_stats_test "IPv6 BFD Control - Port 3784" "ipv6_bfd" \
385                 $MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
386                 -A 2001:db8:1::1 -B 2001:db8:1::2 \
387                 -t udp sp=49153,dp=3784 -p 100 -q
388 
389         devlink_trap_stats_test "IPv6 BFD Echo - Port 3785" "ipv6_bfd" \
390                 $MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
391                 -A 2001:db8:1::1 -B 2001:db8:1::2 \
392                 -t udp sp=49153,dp=3785 -p 100 -q
393 }
394 
395 ipv4_ospf_test()
396 {
397         devlink_trap_stats_test "IPv4 OSPF - Multicast" "ipv4_ospf" \
398                 $MZ $h1 -c 1 -a own -b 01:00:5e:00:00:05 \
399                 -A 192.0.2.1 -B 224.0.0.5 -t ip proto=89 -p 100 -q
400 
401         devlink_trap_stats_test "IPv4 OSPF - Unicast" "ipv4_ospf" \
402                 $MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
403                 -A 192.0.2.1 -B 192.0.2.2 -t ip proto=89 -p 100 -q
404 }
405 
406 ipv6_ospf_test()
407 {
408         devlink_trap_stats_test "IPv6 OSPF - Multicast" "ipv6_ospf" \
409                 $MZ $h1 -6 -c 1 -a own -b 33:33:00:00:00:05 \
410                 -A fe80::1 -B ff02::5 -t ip next=89 -p 100 -q
411 
412         devlink_trap_stats_test "IPv6 OSPF - Unicast" "ipv6_ospf" \
413                 $MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
414                 -A 2001:db8:1::1 -B 2001:db8:1::2 -t ip next=89 -p 100 -q
415 }
416 
417 ipv4_bgp_test()
418 {
419         devlink_trap_stats_test "IPv4 BGP" "ipv4_bgp" \
420                 $MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
421                 -A 192.0.2.1 -B 192.0.2.2 -t tcp sp=54321,dp=179,flags=rst \
422                 -p 100 -q
423 }
424 
425 ipv6_bgp_test()
426 {
427         devlink_trap_stats_test "IPv6 BGP" "ipv6_bgp" \
428                 $MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
429                 -A 2001:db8:1::1 -B 2001:db8:1::2 \
430                 -t tcp sp=54321,dp=179,flags=rst -p 100 -q
431 }
432 
433 ipv4_vrrp_test()
434 {
435         devlink_trap_stats_test "IPv4 VRRP" "ipv4_vrrp" \
436                 $MZ $h1 -c 1 -a own -b 01:00:5e:00:00:12 \
437                 -A 192.0.2.1 -B 224.0.0.18 -t ip proto=112 -p 100 -q
438 }
439 
440 ipv6_vrrp_test()
441 {
442         devlink_trap_stats_test "IPv6 VRRP" "ipv6_vrrp" \
443                 $MZ $h1 -6 -c 1 -a own -b 33:33:00:00:00:12 \
444                 -A fe80::1 -B ff02::12 -t ip next=112 -p 100 -q
445 }
446 
447 ipv4_pim_test()
448 {
449         devlink_trap_stats_test "IPv4 PIM - Multicast" "ipv4_pim" \
450                 $MZ $h1 -c 1 -a own -b 01:00:5e:00:00:0d \
451                 -A 192.0.2.1 -B 224.0.0.13 -t ip proto=103 -p 100 -q
452 
453         devlink_trap_stats_test "IPv4 PIM - Unicast" "ipv4_pim" \
454                 $MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
455                 -A 192.0.2.1 -B 192.0.2.2 -t ip proto=103 -p 100 -q
456 }
457 
458 ipv6_pim_test()
459 {
460         devlink_trap_stats_test "IPv6 PIM - Multicast" "ipv6_pim" \
461                 $MZ $h1 -6 -c 1 -a own -b 33:33:00:00:00:0d \
462                 -A fe80::1 -B ff02::d -t ip next=103 -p 100 -q
463 
464         devlink_trap_stats_test "IPv6 PIM - Unicast" "ipv6_pim" \
465                 $MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
466                 -A fe80::1 -B 2001:db8:1::2 -t ip next=103 -p 100 -q
467 }
468 
469 uc_loopback_test()
470 {
471         # Add neighbours to the fake destination IPs, so that the packets are
472         # routed in the device and not trapped due to an unresolved neighbour
473         # exception.
474         ip -4 neigh add 192.0.2.3 lladdr 00:11:22:33:44:55 nud permanent \
475                 dev $rp1
476         ip -6 neigh add 2001:db8:1::3 lladdr 00:11:22:33:44:55 nud permanent \
477                 dev $rp1
478 
479         devlink_trap_stats_test "IPv4 Unicast Loopback" "uc_loopback" \
480                 $MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
481                 -A 192.0.2.1 -B 192.0.2.3 -t udp sp=54321,dp=12345 -p 100 -q
482 
483         devlink_trap_stats_test "IPv6 Unicast Loopback" "uc_loopback" \
484                 $MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
485                 -A 2001:db8:1::1 -B 2001:db8:1::3 -t udp sp=54321,dp=12345 \
486                 -p 100 -q
487 
488         ip -6 neigh del 2001:db8:1::3 dev $rp1
489         ip -4 neigh del 192.0.2.3 dev $rp1
490 }
491 
492 local_route_test()
493 {
494         # Use a fake source IP to prevent the trap from being triggered twice
495         # when the router sends back a port unreachable message.
496         devlink_trap_stats_test "IPv4 Local Route" "local_route" \
497                 $MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
498                 -A 192.0.2.3 -B 192.0.2.2 -t udp sp=54321,dp=12345 -p 100 -q
499 
500         devlink_trap_stats_test "IPv6 Local Route" "local_route" \
501                 $MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
502                 -A 2001:db8:1::3 -B 2001:db8:1::2 -t udp sp=54321,sp=12345 \
503                 -p 100 -q
504 }
505 
506 external_route_test()
507 {
508         # Add a dummy device through which the incoming packets should be
509         # routed.
510         ip link add name dummy10 up type dummy
511         ip address add 203.0.113.1/24 dev dummy10
512         ip -6 address add 2001:db8:10::1/64 dev dummy10
513 
514         devlink_trap_stats_test "IPv4 External Route" "external_route" \
515                 $MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
516                 -A 192.0.2.1 -B 203.0.113.2 -t udp sp=54321,dp=12345 -p 100 -q
517 
518         devlink_trap_stats_test "IPv6 External Route" "external_route" \
519                 $MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
520                 -A 2001:db8:1::1 -B 2001:db8:10::2 -t udp sp=54321,sp=12345 \
521                 -p 100 -q
522 
523         ip -6 address del 2001:db8:10::1/64 dev dummy10
524         ip address del 203.0.113.1/24 dev dummy10
525         ip link del dev dummy10
526 }
527 
528 ipv6_uc_dip_link_local_scope_test()
529 {
530         # Add a dummy link-local prefix route to allow the packet to be routed.
531         ip -6 route add fe80:1::/64 dev $rp2
532 
533         devlink_trap_stats_test \
534                 "IPv6 Unicast Destination IP With Link-Local Scope" \
535                 "ipv6_uc_dip_link_local_scope" \
536                 $MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
537                 -A fe80::1 -B fe80:1::2 -t udp sp=54321,sp=12345 \
538                 -p 100 -q
539 
540         ip -6 route del fe80:1::/64 dev $rp2
541 }
542 
543 ipv4_router_alert_get()
544 {
545         local p
546 
547         # https://en.wikipedia.org/wiki/IPv4#Options
548         p=$(:
549                 )"94:"$(                        : Option Number
550                 )"04:"$(                        : Option Length
551                 )"00:00:"$(                     : Option Data
552                 )
553         echo $p
554 }
555 
556 ipv4_router_alert_test()
557 {
558         devlink_trap_stats_test "IPv4 Router Alert" "ipv4_router_alert" \
559                 $MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
560                 -A 192.0.2.1 -B 198.51.100.3 \
561                 -t ip option=$(ipv4_router_alert_get) -p 100 -q
562 }
563 
564 ipv6_router_alert_get()
565 {
566         local p
567 
568         # https://en.wikipedia.org/wiki/IPv6_packet#Hop-by-hop_options_and_destination_options
569         # https://tools.ietf.org/html/rfc2711#section-2.1
570         p=$(:
571                 )"11:"$(                        : Next Header - UDP
572                 )"00:"$(                        : Hdr Ext Len
573                 )"05:02:00:00:00:00:"$(         : Option Data
574                 )
575         echo $p
576 }
577 
578 ipv6_router_alert_test()
579 {
580         devlink_trap_stats_test "IPv6 Router Alert" "ipv6_router_alert" \
581                 $MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
582                 -A 2001:db8:1::1 -B 2001:db8:1::3 \
583                 -t ip next=0,payload=$(ipv6_router_alert_get) -p 100 -q
584 }
585 
586 ipv6_dip_all_nodes_test()
587 {
588         devlink_trap_stats_test "IPv6 Destination IP \"All Nodes Address\"" \
589                 "ipv6_dip_all_nodes" \
590                 $MZ $h1 -6 -c 1 -a own -b 33:33:00:00:00:01 \
591                 -A 2001:db8:1::1 -B ff02::1 -t udp sp=12345,dp=54321 -p 100 -q
592 }
593 
594 ipv6_dip_all_routers_test()
595 {
596         devlink_trap_stats_test "IPv6 Destination IP \"All Routers Address\"" \
597                 "ipv6_dip_all_routers" \
598                 $MZ $h1 -6 -c 1 -a own -b 33:33:00:00:00:02 \
599                 -A 2001:db8:1::1 -B ff02::2 -t udp sp=12345,dp=54321 -p 100 -q
600 }
601 
602 ipv6_router_solicit_test()
603 {
604         devlink_trap_stats_test "IPv6 Router Solicitation" \
605                 "ipv6_router_solicit" \
606                 $MZ $h1 -6 -c 1 -a own -b 33:33:00:00:00:02 \
607                 -A fe80::1 -B ff02::2 \
608                 -t ip hop=1,next=58,payload=$(icmpv6_header_get 133) -p 100 -q
609 }
610 
611 ipv6_router_advert_test()
612 {
613         devlink_trap_stats_test "IPv6 Router Advertisement" \
614                 "ipv6_router_advert" \
615                 $MZ $h1 -6 -c 1 -a own -b 33:33:00:00:00:01 \
616                 -A fe80::1 -B ff02::1 \
617                 -t ip hop=1,next=58,payload=$(icmpv6_header_get 134) -p 100 -q
618 }
619 
620 ipv6_redirect_test()
621 {
622         devlink_trap_stats_test "IPv6 Redirect Message" \
623                 "ipv6_redirect" \
624                 $MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
625                 -A fe80::1 -B 2001:db8:1::2 \
626                 -t ip hop=1,next=58,payload=$(icmpv6_header_get 137) -p 100 -q
627 }
628 
629 ptp_event_test()
630 {
631         mlxsw_only_on_spectrum 1 || return
632 
633         # PTP Sync (0)
634         devlink_trap_stats_test "PTP Time-Critical Event Message" "ptp_event" \
635                 $MZ $h1 -c 1 -a own -b 01:00:5e:00:01:81 \
636                 -A 192.0.2.1 -B 224.0.1.129 \
637                 -t udp sp=12345,dp=319,payload=10 -p 100 -q
638 }
639 
640 ptp_general_test()
641 {
642         mlxsw_only_on_spectrum 1 || return
643 
644         # PTP Announce (b)
645         devlink_trap_stats_test "PTP General Message" "ptp_general" \
646                 $MZ $h1 -c 1 -a own -b 01:00:5e:00:01:81 \
647                 -A 192.0.2.1 -B 224.0.1.129 \
648                 -t udp sp=12345,dp=320,payload=1b -p 100 -q
649 }
650 
651 flow_action_sample_test()
652 {
653         # Install a filter that samples every incoming packet.
654         tc qdisc add dev $rp1 clsact
655         tc filter add dev $rp1 ingress proto all pref 1 handle 101 matchall \
656                 skip_sw action sample rate 1 group 1
657 
658         devlink_trap_stats_test "Flow Sampling" "flow_action_sample" \
659                 $MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
660                 -A 192.0.2.1 -B 198.51.100.1 -t udp sp=12345,dp=54321 -p 100 -q
661 
662         tc filter del dev $rp1 ingress proto all pref 1 handle 101 matchall
663         tc qdisc del dev $rp1 clsact
664 }
665 
666 flow_action_trap_test()
667 {
668         # Install a filter that traps a specific flow.
669         tc qdisc add dev $rp1 clsact
670         tc filter add dev $rp1 ingress proto ip pref 1 handle 101 flower \
671                 skip_sw ip_proto udp src_port 12345 dst_port 54321 action trap
672 
673         devlink_trap_stats_test "Flow Trapping (Logging)" "flow_action_trap" \
674                 $MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
675                 -A 192.0.2.1 -B 198.51.100.1 -t udp sp=12345,dp=54321 -p 100 -q
676 
677         tc filter del dev $rp1 ingress proto ip pref 1 handle 101 flower
678         tc qdisc del dev $rp1 clsact
679 }
680 
681 eapol_payload_get()
682 {
683         local source_mac=$1; shift
684         local p
685 
686         p=$(:
687                 )"01:80:C2:00:00:03:"$(       : ETH daddr
688                 )"$source_mac:"$(             : ETH saddr
689                 )"88:8E:"$(                   : ETH type
690                 )
691         echo $p
692 }
693 
694 eapol_test()
695 {
696         local h1mac=$(mac_get $h1)
697 
698         devlink_trap_stats_test "EAPOL" "eapol" $MZ $h1 -c 1 \
699                 $(eapol_payload_get $h1mac) -p 100 -q
700 }
701 
702 trap cleanup EXIT
703 
704 setup_prepare
705 setup_wait
706 
707 tests_run
708 
709 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