#!/bin/bash
# SPDX-License-Identifier: GPL-2.0

ALL_TESTS="gact_drop_and_ok_test mirred_egress_redirect_test \
	mirred_egress_mirror_test matchall_mirred_egress_mirror_test \
	gact_trap_test mirred_egress_to_ingress_test \
	mirred_egress_to_ingress_tcp_test \
	ingress_2nd_vlan_push egress_2nd_vlan_push"
NUM_NETIFS=4
source tc_common.sh
source lib.sh

require_command ncat

tcflags="skip_hw"

h1_create()
{
	simple_if_init $h1 192.0.2.1/24
	tc qdisc add dev $h1 clsact
}

h1_destroy()
{
	tc qdisc del dev $h1 clsact
	simple_if_fini $h1 192.0.2.1/24
}

h2_create()
{
	simple_if_init $h2 192.0.2.2/24
	tc qdisc add dev $h2 clsact
}

h2_destroy()
{
	tc qdisc del dev $h2 clsact
	simple_if_fini $h2 192.0.2.2/24
}

switch_create()
{
	simple_if_init $swp1 192.0.2.2/24
	tc qdisc add dev $swp1 clsact

	simple_if_init $swp2 192.0.2.1/24
}

switch_destroy()
{
	simple_if_fini $swp2 192.0.2.1/24

	tc qdisc del dev $swp1 clsact
	simple_if_fini $swp1 192.0.2.2/24
}

mirred_egress_test()
{
	local action=$1
	local protocol=$2
	local classifier=$3
	local classifier_args=$4

	RET=0

	tc filter add dev $h2 ingress protocol ip pref 1 handle 101 flower \
		dst_ip 192.0.2.2 action drop

	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac -A 192.0.2.1 -B 192.0.2.2 \
		-t ip -q

	tc_check_packets "dev $h2 ingress" 101 1
	check_fail $? "Matched without redirect rule inserted"

	tc filter add dev $swp1 ingress protocol $protocol pref 1 handle 101 \
		$classifier $tcflags $classifier_args \
		action mirred egress $action dev $swp2

	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac -A 192.0.2.1 -B 192.0.2.2 \
		-t ip -q

	tc_check_packets "dev $h2 ingress" 101 1
	check_err $? "Did not match incoming $action packet"

	tc filter del dev $swp1 ingress protocol $protocol pref 1 handle 101 \
		$classifier
	tc filter del dev $h2 ingress protocol ip pref 1 handle 101 flower

	log_test "mirred egress $classifier $action ($tcflags)"
}

gact_drop_and_ok_test()
{
	RET=0

	tc filter add dev $swp1 ingress protocol ip pref 2 handle 102 flower \
		$tcflags dst_ip 192.0.2.2 action drop

	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac -A 192.0.2.1 -B 192.0.2.2 \
		-t ip -q

	tc_check_packets "dev $swp1 ingress" 102 1
	check_err $? "Packet was not dropped"

	tc filter add dev $swp1 ingress protocol ip pref 1 handle 101 flower \
		$tcflags dst_ip 192.0.2.2 action ok

	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac -A 192.0.2.1 -B 192.0.2.2 \
		-t ip -q

	tc_check_packets "dev $swp1 ingress" 101 1
	check_err $? "Did not see passed packet"

	tc_check_packets "dev $swp1 ingress" 102 2
	check_fail $? "Packet was dropped and it should not reach here"

	tc filter del dev $swp1 ingress protocol ip pref 2 handle 102 flower
	tc filter del dev $swp1 ingress protocol ip pref 1 handle 101 flower

	log_test "gact drop and ok ($tcflags)"
}

gact_trap_test()
{
	RET=0

	if [[ "$tcflags" != "skip_sw" ]]; then
		return 0;
	fi

	tc filter add dev $swp1 ingress protocol ip pref 1 handle 101 flower \
		skip_hw dst_ip 192.0.2.2 action drop
	tc filter add dev $swp1 ingress protocol ip pref 3 handle 103 flower \
		$tcflags dst_ip 192.0.2.2 action mirred egress redirect \
		dev $swp2

	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac -A 192.0.2.1 -B 192.0.2.2 \
		-t ip -q

	tc_check_packets "dev $swp1 ingress" 101 1
	check_fail $? "Saw packet without trap rule inserted"

	tc filter add dev $swp1 ingress protocol ip pref 2 handle 102 flower \
		$tcflags dst_ip 192.0.2.2 action trap

	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac -A 192.0.2.1 -B 192.0.2.2 \
		-t ip -q

	tc_check_packets "dev $swp1 ingress" 102 1
	check_err $? "Packet was not trapped"

	tc_check_packets "dev $swp1 ingress" 101 1
	check_err $? "Did not see trapped packet"

	tc filter del dev $swp1 ingress protocol ip pref 3 handle 103 flower
	tc filter del dev $swp1 ingress protocol ip pref 2 handle 102 flower
	tc filter del dev $swp1 ingress protocol ip pref 1 handle 101 flower

	log_test "trap ($tcflags)"
}

mirred_egress_to_ingress_test()
{
	RET=0

	tc filter add dev $h1 protocol ip pref 100 handle 100 egress flower \
		ip_proto icmp src_ip 192.0.2.1 dst_ip 192.0.2.2 type 8 action \
			ct commit nat src addr 192.0.2.2 pipe \
			ct clear pipe \
			ct commit nat dst addr 192.0.2.1 pipe \
			mirred ingress redirect dev $h1

	tc filter add dev $swp1 protocol ip pref 11 handle 111 ingress flower \
		ip_proto icmp src_ip 192.0.2.1 dst_ip 192.0.2.2 type 8 action drop
	tc filter add dev $swp1 protocol ip pref 12 handle 112 ingress flower \
		ip_proto icmp src_ip 192.0.2.1 dst_ip 192.0.2.2 type 0 action pass

	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac -A 192.0.2.1 -B 192.0.2.2 \
		-t icmp "ping,id=42,seq=10" -q

	tc_check_packets "dev $h1 egress" 100 1
	check_err $? "didn't mirror first packet"

	tc_check_packets "dev $swp1 ingress" 111 1
	check_fail $? "didn't redirect first packet"
	tc_check_packets "dev $swp1 ingress" 112 1
	check_err $? "didn't receive reply to first packet"

	ping 192.0.2.2 -I$h1 -c1 -w1 -q 1>/dev/null 2>&1

	tc_check_packets "dev $h1 egress" 100 2
	check_err $? "didn't mirror second packet"
	tc_check_packets "dev $swp1 ingress" 111 1
	check_fail $? "didn't redirect second packet"
	tc_check_packets "dev $swp1 ingress" 112 2
	check_err $? "didn't receive reply to second packet"

	tc filter del dev $h1 egress protocol ip pref 100 handle 100 flower
	tc filter del dev $swp1 ingress protocol ip pref 11 handle 111 flower
	tc filter del dev $swp1 ingress protocol ip pref 12 handle 112 flower

	log_test "mirred_egress_to_ingress ($tcflags)"
}

mirred_egress_to_ingress_tcp_test()
{
	mirred_e2i_tf1=$(mktemp) mirred_e2i_tf2=$(mktemp)

	RET=0
	dd conv=sparse status=none if=/dev/zero bs=1M count=2 of=$mirred_e2i_tf1
	tc filter add dev $h1 protocol ip pref 100 handle 100 egress flower \
		$tcflags ip_proto tcp src_ip 192.0.2.1 dst_ip 192.0.2.2 \
			action ct commit nat src addr 192.0.2.2 pipe \
			action ct clear pipe \
			action ct commit nat dst addr 192.0.2.1 pipe \
			action ct clear pipe \
			action skbedit ptype host pipe \
			action mirred ingress redirect dev $h1
	tc filter add dev $h1 protocol ip pref 101 handle 101 egress flower \
		$tcflags ip_proto icmp \
			action mirred ingress redirect dev $h1
	tc filter add dev $h1 protocol ip pref 102 handle 102 ingress flower \
		ip_proto icmp \
			action drop

	ip vrf exec v$h1 ncat --recv-only -w10 -l -p 12345 -o $mirred_e2i_tf2 &
	local rpid=$!
	ip vrf exec v$h1 ncat -w1 --send-only 192.0.2.2 12345 <$mirred_e2i_tf1
	wait -n $rpid
	cmp -s $mirred_e2i_tf1 $mirred_e2i_tf2
	check_err $? "server output check failed"

	$MZ $h1 -c 10 -p 64 -a $h1mac -b $h1mac -A 192.0.2.1 -B 192.0.2.1 \
		-t icmp "ping,id=42,seq=5" -q
	tc_check_packets "dev $h1 egress" 101 10
	check_err $? "didn't mirred redirect ICMP"
	tc_check_packets "dev $h1 ingress" 102 10
	check_err $? "didn't drop mirred ICMP"

	tc filter del dev $h1 egress protocol ip pref 100 handle 100 flower
	tc filter del dev $h1 egress protocol ip pref 101 handle 101 flower
	tc filter del dev $h1 ingress protocol ip pref 102 handle 102 flower

	rm -f $mirred_e2i_tf1 $mirred_e2i_tf2
	log_test "mirred_egress_to_ingress_tcp ($tcflags)"
}

ingress_2nd_vlan_push()
{
	tc filter add dev $swp1 ingress pref 20 chain 0 handle 20 flower \
		$tcflags num_of_vlans 1 \
		action vlan push id 100 protocol 0x8100 action goto chain 5
	tc filter add dev $swp1 ingress pref 30 chain 5 handle 30 flower \
		$tcflags num_of_vlans 2 \
		cvlan_ethtype 0x800 action pass

	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac -A 192.0.2.1 -B 192.0.2.2 \
		-t ip -Q 10 -q

	tc_check_packets "dev $swp1 ingress" 30 1
	check_err $? "No double-vlan packets received"

	tc filter del dev $swp1 ingress pref 20 chain 0 handle 20 flower
	tc filter del dev $swp1 ingress pref 30 chain 5 handle 30 flower

	log_test "ingress_2nd_vlan_push ($tcflags)"
}

egress_2nd_vlan_push()
{
	tc filter add dev $h1 egress pref 20 chain 0 handle 20 flower \
		$tcflags num_of_vlans 0 \
		action vlan push id 10 protocol 0x8100 \
		pipe action vlan push id 100 protocol 0x8100 action goto chain 5
	tc filter add dev $h1 egress pref 30 chain 5 handle 30 flower \
		$tcflags num_of_vlans 2 \
		cvlan_ethtype 0x800 action pass

	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac -A 192.0.2.1 -B 192.0.2.2 \
		-t ip -q

	tc_check_packets "dev $h1 egress" 30 1
	check_err $? "No double-vlan packets received"

	tc filter del dev $h1 egress pref 20 chain 0 handle 20 flower
	tc filter del dev $h1 egress pref 30 chain 5 handle 30 flower

	log_test "egress_2nd_vlan_push ($tcflags)"
}

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

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

	h1mac=$(mac_get $h1)
	h2mac=$(mac_get $h2)

	swp1origmac=$(mac_get $swp1)
	swp2origmac=$(mac_get $swp2)
	ip link set $swp1 address $h2mac
	ip link set $swp2 address $h1mac

	vrf_prepare

	h1_create
	h2_create
	switch_create
}

cleanup()
{
	local tf

	pre_cleanup

	switch_destroy
	h2_destroy
	h1_destroy

	vrf_cleanup

	ip link set $swp2 address $swp2origmac
	ip link set $swp1 address $swp1origmac

	for tf in $mirred_e2i_tf1 $mirred_e2i_tf2; do rm -f $tf; done
}

mirred_egress_redirect_test()
{
	mirred_egress_test "redirect" "ip" "flower" "dst_ip 192.0.2.2"
}

mirred_egress_mirror_test()
{
	mirred_egress_test "mirror" "ip" "flower" "dst_ip 192.0.2.2"
}

matchall_mirred_egress_mirror_test()
{
	mirred_egress_test "mirror" "all" "matchall" ""
}

trap cleanup EXIT

setup_prepare
setup_wait

tests_run

tc_offload_check
if [[ $? -ne 0 ]]; then
	log_info "Could not test offloaded functionality"
else
	tcflags="skip_sw"
	tests_run
fi

exit $EXIT_STATUS
