#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# Test devlink-trap control trap functionality over mlxsw. Each registered
# control packet trap is tested to make sure it is triggered under the right
# conditions.
#
# +---------------------------------+
# | H1 (vrf)                        |
# |    + $h1                        |
# |    | 192.0.2.1/24               |
# |    | 2001:db8:1::1/64           |
# |    |                            |
# |    |  default via 192.0.2.2     |
# |    |  default via 2001:db8:1::2 |
# +----|----------------------------+
#      |
# +----|----------------------------------------------------------------------+
# | SW |                                                                      |
# |    + $rp1                                                                 |
# |        192.0.2.2/24                                                       |
# |        2001:db8:1::2/64                                                   |
# |                                                                           |
# |        2001:db8:2::2/64                                                   |
# |        198.51.100.2/24                                                    |
# |    + $rp2                                                                 |
# |    |                                                                      |
# +----|----------------------------------------------------------------------+
#      |
# +----|----------------------------+
# |    |  default via 198.51.100.2  |
# |    |  default via 2001:db8:2::2 |
# |    |                            |
# |    | 2001:db8:2::1/64           |
# |    | 198.51.100.1/24            |
# |    + $h2                        |
# | H2 (vrf)                        |
# +---------------------------------+

lib_dir=$(dirname $0)/../../../net/forwarding

ALL_TESTS="
	stp_test
	lacp_test
	lldp_test
	igmp_query_test
	igmp_v1_report_test
	igmp_v2_report_test
	igmp_v3_report_test
	igmp_v2_leave_test
	mld_query_test
	mld_v1_report_test
	mld_v2_report_test
	mld_v1_done_test
	ipv4_dhcp_test
	ipv6_dhcp_test
	arp_request_test
	arp_response_test
	ipv6_neigh_solicit_test
	ipv6_neigh_advert_test
	ipv4_bfd_test
	ipv6_bfd_test
	ipv4_ospf_test
	ipv6_ospf_test
	ipv4_bgp_test
	ipv6_bgp_test
	ipv4_vrrp_test
	ipv6_vrrp_test
	ipv4_pim_test
	ipv6_pim_test
	uc_loopback_test
	local_route_test
	external_route_test
	ipv6_uc_dip_link_local_scope_test
	ipv4_router_alert_test
	ipv6_router_alert_test
	ipv6_dip_all_nodes_test
	ipv6_dip_all_routers_test
	ipv6_router_solicit_test
	ipv6_router_advert_test
	ipv6_redirect_test
	ptp_event_test
	ptp_general_test
	flow_action_sample_test
	flow_action_trap_test
"
NUM_NETIFS=4
source $lib_dir/lib.sh
source $lib_dir/devlink_lib.sh

h1_create()
{
	simple_if_init $h1 192.0.2.1/24 2001:db8:1::1/64

	ip -4 route add default vrf v$h1 nexthop via 192.0.2.2
	ip -6 route add default vrf v$h1 nexthop via 2001:db8:1::2
}

h1_destroy()
{
	ip -6 route del default vrf v$h1 nexthop via 2001:db8:1::2
	ip -4 route del default vrf v$h1 nexthop via 192.0.2.2

	simple_if_fini $h1 192.0.2.1/24 2001:db8:1::1/64
}

h2_create()
{
	simple_if_init $h2 198.51.100.1/24 2001:db8:2::1/64

	ip -4 route add default vrf v$h2 nexthop via 198.51.100.2
	ip -6 route add default vrf v$h2 nexthop via 2001:db8:2::2
}

h2_destroy()
{
	ip -6 route del default vrf v$h2 nexthop via 2001:db8:2::2
	ip -4 route del default vrf v$h2 nexthop via 198.51.100.2

	simple_if_fini $h2 198.51.100.1/24 2001:db8:2::1/64
}

router_create()
{
	ip link set dev $rp1 up
	ip link set dev $rp2 up

	__addr_add_del $rp1 add 192.0.2.2/24 2001:db8:1::2/64
	__addr_add_del $rp2 add 198.51.100.2/24 2001:db8:2::2/64
}

router_destroy()
{
	__addr_add_del $rp2 del 198.51.100.2/24 2001:db8:2::2/64
	__addr_add_del $rp1 del 192.0.2.2/24 2001:db8:1::2/64

	ip link set dev $rp2 down
	ip link set dev $rp1 down
}

setup_prepare()
{
	h1=${NETIFS[p1]}
	rp1=${NETIFS[p2]}

	rp2=${NETIFS[p3]}
	h2=${NETIFS[p4]}

	vrf_prepare
	forwarding_enable

	h1_create
	h2_create
	router_create
}

cleanup()
{
	pre_cleanup

	router_destroy
	h2_destroy
	h1_destroy

	forwarding_restore
	vrf_cleanup
}

stp_test()
{
	devlink_trap_stats_test "STP" "stp" $MZ $h1 -c 1 -t bpdu -q
}

lacp_payload_get()
{
	local source_mac=$1; shift
	local p

	p=$(:
		)"01:80:C2:00:00:02:"$(       : ETH daddr
		)"$source_mac:"$(             : ETH saddr
		)"88:09:"$(                   : ETH type
		)
	echo $p
}

lacp_test()
{
	local h1mac=$(mac_get $h1)

	devlink_trap_stats_test "LACP" "lacp" $MZ $h1 -c 1 \
		$(lacp_payload_get $h1mac) -p 100 -q
}

lldp_payload_get()
{
	local source_mac=$1; shift
	local p

	p=$(:
		)"01:80:C2:00:00:0E:"$(       : ETH daddr
		)"$source_mac:"$(             : ETH saddr
		)"88:CC:"$(                   : ETH type
		)
	echo $p
}

lldp_test()
{
	local h1mac=$(mac_get $h1)

	devlink_trap_stats_test "LLDP" "lldp" $MZ $h1 -c 1 \
		$(lldp_payload_get $h1mac) -p 100 -q
}

igmp_query_test()
{
	# IGMP (IP Protocol 2) Membership Query (Type 0x11)
	devlink_trap_stats_test "IGMP Membership Query" "igmp_query" \
		$MZ $h1 -c 1 -a own -b 01:00:5E:00:00:01 \
		-A 192.0.2.1 -B 224.0.0.1 -t ip proto=2,p=11 -p 100 -q
}

igmp_v1_report_test()
{
	# IGMP (IP Protocol 2) Version 1 Membership Report (Type 0x12)
	devlink_trap_stats_test "IGMP Version 1 Membership Report" \
		"igmp_v1_report" $MZ $h1 -c 1 -a own -b 01:00:5E:00:00:01 \
		-A 192.0.2.1 -B 244.0.0.1 -t ip proto=2,p=12 -p 100 -q
}

igmp_v2_report_test()
{
	# IGMP (IP Protocol 2) Version 2 Membership Report (Type 0x16)
	devlink_trap_stats_test "IGMP Version 2 Membership Report" \
		"igmp_v2_report" $MZ $h1 -c 1 -a own -b 01:00:5E:00:00:01 \
		-A 192.0.2.1 -B 244.0.0.1 -t ip proto=2,p=16 -p 100 -q
}

igmp_v3_report_test()
{
	# IGMP (IP Protocol 2) Version 3 Membership Report (Type 0x22)
	devlink_trap_stats_test "IGMP Version 3 Membership Report" \
		"igmp_v3_report" $MZ $h1 -c 1 -a own -b 01:00:5E:00:00:01 \
		-A 192.0.2.1 -B 244.0.0.1 -t ip proto=2,p=22 -p 100 -q
}

igmp_v2_leave_test()
{
	# IGMP (IP Protocol 2) Version 2 Leave Group (Type 0x17)
	devlink_trap_stats_test "IGMP Version 2 Leave Group" \
		"igmp_v2_leave" $MZ $h1 -c 1 -a own -b 01:00:5E:00:00:02 \
		-A 192.0.2.1 -B 224.0.0.2 -t ip proto=2,p=17 -p 100 -q
}

mld_payload_get()
{
	local type=$1; shift
	local p

	type=$(printf "%x" $type)
	p=$(:
		)"3A:"$(			: Next Header - ICMPv6
		)"00:"$(			: Hdr Ext Len
		)"00:00:00:00:00:00:"$(		: Options and Padding
		)"$type:"$(			: ICMPv6.type
		)"00:"$(			: ICMPv6.code
		)"00:"$(			: ICMPv6.checksum
		)
	echo $p
}

mld_query_test()
{
	# MLD Multicast Listener Query (Type 130)
	devlink_trap_stats_test "MLD Multicast Listener Query" "mld_query" \
		$MZ $h1 -6 -c 1 -A fe80::1 -B ff02::1 \
		-t ip hop=1,next=0,payload=$(mld_payload_get 130) -p 100 -q
}

mld_v1_report_test()
{
	# MLD Version 1 Multicast Listener Report (Type 131)
	devlink_trap_stats_test "MLD Version 1 Multicast Listener Report" \
		"mld_v1_report" $MZ $h1 -6 -c 1 -A fe80::1 -B ff02::16 \
		-t ip hop=1,next=0,payload=$(mld_payload_get 131) -p 100 -q
}

mld_v2_report_test()
{
	# MLD Version 2 Multicast Listener Report (Type 143)
	devlink_trap_stats_test "MLD Version 2 Multicast Listener Report" \
		"mld_v2_report" $MZ $h1 -6 -c 1 -A fe80::1 -B ff02::16 \
		-t ip hop=1,next=0,payload=$(mld_payload_get 143) -p 100 -q
}

mld_v1_done_test()
{
	# MLD Version 1 Multicast Listener Done (Type 132)
	devlink_trap_stats_test "MLD Version 1 Multicast Listener Done" \
		"mld_v1_done" $MZ $h1 -6 -c 1 -A fe80::1 -B ff02::16 \
		-t ip hop=1,next=0,payload=$(mld_payload_get 132) -p 100 -q
}

ipv4_dhcp_test()
{
	devlink_trap_stats_test "IPv4 DHCP Port 67" "ipv4_dhcp" \
		$MZ $h1 -c 1 -a own -b bcast -A 0.0.0.0 -B 255.255.255.255 \
		-t udp sp=68,dp=67 -p 100 -q

	devlink_trap_stats_test "IPv4 DHCP Port 68" "ipv4_dhcp" \
		$MZ $h1 -c 1 -a own -b $(mac_get $rp1) -A 192.0.2.1 \
		-B 255.255.255.255 -t udp sp=67,dp=68 -p 100 -q
}

ipv6_dhcp_test()
{
	devlink_trap_stats_test "IPv6 DHCP Port 547" "ipv6_dhcp" \
		$MZ $h1 -6 -c 1 -A fe80::1 -B ff02::1:2 -t udp sp=546,dp=547 \
		-p 100 -q

	devlink_trap_stats_test "IPv6 DHCP Port 546" "ipv6_dhcp" \
		$MZ $h1 -6 -c 1 -A fe80::1 -B ff02::1:2 -t udp sp=547,dp=546 \
		-p 100 -q
}

arp_request_test()
{
	devlink_trap_stats_test "ARP Request" "arp_request" \
		$MZ $h1 -c 1 -a own -b bcast -t arp request -p 100 -q
}

arp_response_test()
{
	devlink_trap_stats_test "ARP Response" "arp_response" \
		$MZ $h1 -c 1 -a own -b $(mac_get $rp1) -t arp reply -p 100 -q
}

icmpv6_header_get()
{
	local type=$1; shift
	local p

	type=$(printf "%x" $type)
	p=$(:
		)"$type:"$(			: ICMPv6.type
		)"00:"$(			: ICMPv6.code
		)"00:"$(			: ICMPv6.checksum
		)
	echo $p
}

ipv6_neigh_solicit_test()
{
	devlink_trap_stats_test "IPv6 Neighbour Solicitation" \
		"ipv6_neigh_solicit" $MZ $h1 -6 -c 1 \
		-A fe80::1 -B ff02::1:ff00:02 \
		-t ip hop=1,next=58,payload=$(icmpv6_header_get 135) -p 100 -q
}

ipv6_neigh_advert_test()
{
	devlink_trap_stats_test "IPv6 Neighbour Advertisement" \
		"ipv6_neigh_advert" $MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
		-A fe80::1 -B 2001:db8:1::2 \
		-t ip hop=1,next=58,payload=$(icmpv6_header_get 136) -p 100 -q
}

ipv4_bfd_test()
{
	devlink_trap_stats_test "IPv4 BFD Control - Port 3784" "ipv4_bfd" \
		$MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
		-A 192.0.2.1 -B 192.0.2.2 -t udp sp=49153,dp=3784 -p 100 -q

	devlink_trap_stats_test "IPv4 BFD Echo - Port 3785" "ipv4_bfd" \
		$MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
		-A 192.0.2.1 -B 192.0.2.2 -t udp sp=49153,dp=3785 -p 100 -q
}

ipv6_bfd_test()
{
	devlink_trap_stats_test "IPv6 BFD Control - Port 3784" "ipv6_bfd" \
		$MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
		-A 2001:db8:1::1 -B 2001:db8:1::2 \
		-t udp sp=49153,dp=3784 -p 100 -q

	devlink_trap_stats_test "IPv6 BFD Echo - Port 3785" "ipv6_bfd" \
		$MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
		-A 2001:db8:1::1 -B 2001:db8:1::2 \
		-t udp sp=49153,dp=3785 -p 100 -q
}

ipv4_ospf_test()
{
	devlink_trap_stats_test "IPv4 OSPF - Multicast" "ipv4_ospf" \
		$MZ $h1 -c 1 -a own -b 01:00:5e:00:00:05 \
		-A 192.0.2.1 -B 224.0.0.5 -t ip proto=89 -p 100 -q

	devlink_trap_stats_test "IPv4 OSPF - Unicast" "ipv4_ospf" \
		$MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
		-A 192.0.2.1 -B 192.0.2.2 -t ip proto=89 -p 100 -q
}

ipv6_ospf_test()
{
	devlink_trap_stats_test "IPv6 OSPF - Multicast" "ipv6_ospf" \
		$MZ $h1 -6 -c 1 -a own -b 33:33:00:00:00:05 \
		-A fe80::1 -B ff02::5 -t ip next=89 -p 100 -q

	devlink_trap_stats_test "IPv6 OSPF - Unicast" "ipv6_ospf" \
		$MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
		-A 2001:db8:1::1 -B 2001:db8:1::2 -t ip next=89 -p 100 -q
}

ipv4_bgp_test()
{
	devlink_trap_stats_test "IPv4 BGP" "ipv4_bgp" \
		$MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
		-A 192.0.2.1 -B 192.0.2.2 -t tcp sp=54321,dp=179,flags=rst \
		-p 100 -q
}

ipv6_bgp_test()
{
	devlink_trap_stats_test "IPv6 BGP" "ipv6_bgp" \
		$MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
		-A 2001:db8:1::1 -B 2001:db8:1::2 \
		-t tcp sp=54321,dp=179,flags=rst -p 100 -q
}

ipv4_vrrp_test()
{
	devlink_trap_stats_test "IPv4 VRRP" "ipv4_vrrp" \
		$MZ $h1 -c 1 -a own -b 01:00:5e:00:00:12 \
		-A 192.0.2.1 -B 224.0.0.18 -t ip proto=112 -p 100 -q
}

ipv6_vrrp_test()
{
	devlink_trap_stats_test "IPv6 VRRP" "ipv6_vrrp" \
		$MZ $h1 -6 -c 1 -a own -b 33:33:00:00:00:12 \
		-A fe80::1 -B ff02::12 -t ip next=112 -p 100 -q
}

ipv4_pim_test()
{
	devlink_trap_stats_test "IPv4 PIM - Multicast" "ipv4_pim" \
		$MZ $h1 -c 1 -a own -b 01:00:5e:00:00:0d \
		-A 192.0.2.1 -B 224.0.0.13 -t ip proto=103 -p 100 -q

	devlink_trap_stats_test "IPv4 PIM - Unicast" "ipv4_pim" \
		$MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
		-A 192.0.2.1 -B 192.0.2.2 -t ip proto=103 -p 100 -q
}

ipv6_pim_test()
{
	devlink_trap_stats_test "IPv6 PIM - Multicast" "ipv6_pim" \
		$MZ $h1 -6 -c 1 -a own -b 33:33:00:00:00:0d \
		-A fe80::1 -B ff02::d -t ip next=103 -p 100 -q

	devlink_trap_stats_test "IPv6 PIM - Unicast" "ipv6_pim" \
		$MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
		-A fe80::1 -B 2001:db8:1::2 -t ip next=103 -p 100 -q
}

uc_loopback_test()
{
	# Add neighbours to the fake destination IPs, so that the packets are
	# routed in the device and not trapped due to an unresolved neighbour
	# exception.
	ip -4 neigh add 192.0.2.3 lladdr 00:11:22:33:44:55 nud permanent \
		dev $rp1
	ip -6 neigh add 2001:db8:1::3 lladdr 00:11:22:33:44:55 nud permanent \
		dev $rp1

	devlink_trap_stats_test "IPv4 Unicast Loopback" "uc_loopback" \
		$MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
		-A 192.0.2.1 -B 192.0.2.3 -t udp sp=54321,dp=12345 -p 100 -q

	devlink_trap_stats_test "IPv6 Unicast Loopback" "uc_loopback" \
		$MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
		-A 2001:db8:1::1 -B 2001:db8:1::3 -t udp sp=54321,dp=12345 \
		-p 100 -q

	ip -6 neigh del 2001:db8:1::3 dev $rp1
	ip -4 neigh del 192.0.2.3 dev $rp1
}

local_route_test()
{
	# Use a fake source IP to prevent the trap from being triggered twice
	# when the router sends back a port unreachable message.
	devlink_trap_stats_test "IPv4 Local Route" "local_route" \
		$MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
		-A 192.0.2.3 -B 192.0.2.2 -t udp sp=54321,dp=12345 -p 100 -q

	devlink_trap_stats_test "IPv6 Local Route" "local_route" \
		$MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
		-A 2001:db8:1::3 -B 2001:db8:1::2 -t udp sp=54321,sp=12345 \
		-p 100 -q
}

external_route_test()
{
	# Add a dummy device through which the incoming packets should be
	# routed.
	ip link add name dummy10 up type dummy
	ip address add 203.0.113.1/24 dev dummy10
	ip -6 address add 2001:db8:10::1/64 dev dummy10

	devlink_trap_stats_test "IPv4 External Route" "external_route" \
		$MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
		-A 192.0.2.1 -B 203.0.113.2 -t udp sp=54321,dp=12345 -p 100 -q

	devlink_trap_stats_test "IPv6 External Route" "external_route" \
		$MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
		-A 2001:db8:1::1 -B 2001:db8:10::2 -t udp sp=54321,sp=12345 \
		-p 100 -q

	ip -6 address del 2001:db8:10::1/64 dev dummy10
	ip address del 203.0.113.1/24 dev dummy10
	ip link del dev dummy10
}

ipv6_uc_dip_link_local_scope_test()
{
	# Add a dummy link-local prefix route to allow the packet to be routed.
	ip -6 route add fe80:1::/64 dev $rp2

	devlink_trap_stats_test \
		"IPv6 Unicast Destination IP With Link-Local Scope" \
		"ipv6_uc_dip_link_local_scope" \
		$MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
		-A fe80::1 -B fe80:1::2 -t udp sp=54321,sp=12345 \
		-p 100 -q

	ip -6 route del fe80:1::/64 dev $rp2
}

ipv4_router_alert_get()
{
	local p

	# https://en.wikipedia.org/wiki/IPv4#Options
	p=$(:
		)"94:"$(			: Option Number
		)"04:"$(			: Option Length
		)"00:00:"$(			: Option Data
		)
	echo $p
}

ipv4_router_alert_test()
{
	devlink_trap_stats_test "IPv4 Router Alert" "ipv4_router_alert" \
		$MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
		-A 192.0.2.1 -B 198.51.100.3 \
		-t ip option=$(ipv4_router_alert_get) -p 100 -q
}

ipv6_router_alert_get()
{
	local p

	# https://en.wikipedia.org/wiki/IPv6_packet#Hop-by-hop_options_and_destination_options
	# https://tools.ietf.org/html/rfc2711#section-2.1
	p=$(:
		)"11:"$(			: Next Header - UDP
		)"00:"$(			: Hdr Ext Len
		)"05:02:00:00:00:00:"$(		: Option Data
		)
	echo $p
}

ipv6_router_alert_test()
{
	devlink_trap_stats_test "IPv6 Router Alert" "ipv6_router_alert" \
		$MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
		-A 2001:db8:1::1 -B 2001:db8:1::3 \
		-t ip next=0,payload=$(ipv6_router_alert_get) -p 100 -q
}

ipv6_dip_all_nodes_test()
{
	devlink_trap_stats_test "IPv6 Destination IP \"All Nodes Address\"" \
		"ipv6_dip_all_nodes" \
		$MZ $h1 -6 -c 1 -a own -b 33:33:00:00:00:01 \
		-A 2001:db8:1::1 -B ff02::1 -t udp sp=12345,dp=54321 -p 100 -q
}

ipv6_dip_all_routers_test()
{
	devlink_trap_stats_test "IPv6 Destination IP \"All Routers Address\"" \
		"ipv6_dip_all_routers" \
		$MZ $h1 -6 -c 1 -a own -b 33:33:00:00:00:02 \
		-A 2001:db8:1::1 -B ff02::2 -t udp sp=12345,dp=54321 -p 100 -q
}

ipv6_router_solicit_test()
{
	devlink_trap_stats_test "IPv6 Router Solicitation" \
		"ipv6_router_solicit" \
		$MZ $h1 -6 -c 1 -a own -b 33:33:00:00:00:02 \
		-A fe80::1 -B ff02::2 \
		-t ip hop=1,next=58,payload=$(icmpv6_header_get 133) -p 100 -q
}

ipv6_router_advert_test()
{
	devlink_trap_stats_test "IPv6 Router Advertisement" \
		"ipv6_router_advert" \
		$MZ $h1 -6 -c 1 -a own -b 33:33:00:00:00:01 \
		-A fe80::1 -B ff02::1 \
		-t ip hop=1,next=58,payload=$(icmpv6_header_get 134) -p 100 -q
}

ipv6_redirect_test()
{
	devlink_trap_stats_test "IPv6 Redirect Message" \
		"ipv6_redirect" \
		$MZ $h1 -6 -c 1 -a own -b $(mac_get $rp1) \
		-A fe80::1 -B 2001:db8:1::2 \
		-t ip hop=1,next=58,payload=$(icmpv6_header_get 137) -p 100 -q
}

ptp_event_test()
{
	# PTP is only supported on Spectrum-1, for now.
	[[ "$DEVLINK_VIDDID" != "15b3:cb84" ]] && return

	# PTP Sync (0)
	devlink_trap_stats_test "PTP Time-Critical Event Message" "ptp_event" \
		$MZ $h1 -c 1 -a own -b 01:00:5e:00:01:81 \
		-A 192.0.2.1 -B 224.0.1.129 \
		-t udp sp=12345,dp=319,payload=10 -p 100 -q
}

ptp_general_test()
{
	# PTP is only supported on Spectrum-1, for now.
	[[ "$DEVLINK_VIDDID" != "15b3:cb84" ]] && return

	# PTP Announce (b)
	devlink_trap_stats_test "PTP General Message" "ptp_general" \
		$MZ $h1 -c 1 -a own -b 01:00:5e:00:01:81 \
		-A 192.0.2.1 -B 224.0.1.129 \
		-t udp sp=12345,dp=320,payload=1b -p 100 -q
}

flow_action_sample_test()
{
	# Install a filter that samples every incoming packet.
	tc qdisc add dev $rp1 clsact
	tc filter add dev $rp1 ingress proto all pref 1 handle 101 matchall \
		skip_sw action sample rate 1 group 1

	devlink_trap_stats_test "Flow Sampling" "flow_action_sample" \
		$MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
		-A 192.0.2.1 -B 198.51.100.1 -t udp sp=12345,dp=54321 -p 100 -q

	tc filter del dev $rp1 ingress proto all pref 1 handle 101 matchall
	tc qdisc del dev $rp1 clsact
}

flow_action_trap_test()
{
	# Install a filter that traps a specific flow.
	tc qdisc add dev $rp1 clsact
	tc filter add dev $rp1 ingress proto ip pref 1 handle 101 flower \
		skip_sw ip_proto udp src_port 12345 dst_port 54321 action trap

	devlink_trap_stats_test "Flow Trapping (Logging)" "flow_action_trap" \
		$MZ $h1 -c 1 -a own -b $(mac_get $rp1) \
		-A 192.0.2.1 -B 198.51.100.1 -t udp sp=12345,dp=54321 -p 100 -q

	tc filter del dev $rp1 ingress proto ip pref 1 handle 101 flower
	tc qdisc del dev $rp1 clsact
}

trap cleanup EXIT

setup_prepare
setup_wait

tests_run

exit $EXIT_STATUS
