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