116608bfeSPetr Machata#!/bin/bash
216608bfeSPetr Machata# SPDX-License-Identifier: GPL-2.0
316608bfeSPetr Machata
416608bfeSPetr Machata# This test uses standard topology for testing gretap. See
516608bfeSPetr Machata# mirror_gre_topo_lib.sh for more details.
616608bfeSPetr Machata#
716608bfeSPetr Machata# This tests flower-triggered mirroring to gretap and ip6gretap netdevices. The
816608bfeSPetr Machata# interfaces on H1 and H2 have two addresses each. Flower match on one of the
916608bfeSPetr Machata# addresses is configured with mirror action. It is expected that when pinging
1016608bfeSPetr Machata# this address, mirroring takes place, whereas when pinging the other one,
1116608bfeSPetr Machata# there's no mirroring.
1216608bfeSPetr Machata
130eb8053cSIdo SchimmelALL_TESTS="
140eb8053cSIdo Schimmel	test_gretap
150eb8053cSIdo Schimmel	test_ip6gretap
160eb8053cSIdo Schimmel"
170eb8053cSIdo Schimmel
1816608bfeSPetr MachataNUM_NETIFS=6
1916608bfeSPetr Machatasource lib.sh
2016608bfeSPetr Machatasource mirror_lib.sh
2116608bfeSPetr Machatasource mirror_gre_lib.sh
2216608bfeSPetr Machatasource mirror_gre_topo_lib.sh
2316608bfeSPetr Machata
2416608bfeSPetr Machatasetup_prepare()
2516608bfeSPetr Machata{
2616608bfeSPetr Machata	h1=${NETIFS[p1]}
2716608bfeSPetr Machata	swp1=${NETIFS[p2]}
2816608bfeSPetr Machata
2916608bfeSPetr Machata	swp2=${NETIFS[p3]}
3016608bfeSPetr Machata	h2=${NETIFS[p4]}
3116608bfeSPetr Machata
3216608bfeSPetr Machata	swp3=${NETIFS[p5]}
3316608bfeSPetr Machata	h3=${NETIFS[p6]}
3416608bfeSPetr Machata
3516608bfeSPetr Machata	vrf_prepare
3616608bfeSPetr Machata	mirror_gre_topo_create
3716608bfeSPetr Machata
3816608bfeSPetr Machata	ip address add dev $swp3 192.0.2.129/28
3916608bfeSPetr Machata	ip address add dev $h3 192.0.2.130/28
4016608bfeSPetr Machata
4116608bfeSPetr Machata	ip address add dev $swp3 2001:db8:2::1/64
4216608bfeSPetr Machata	ip address add dev $h3 2001:db8:2::2/64
4316608bfeSPetr Machata
4416608bfeSPetr Machata	ip address add dev $h1 192.0.2.3/28
4516608bfeSPetr Machata	ip address add dev $h2 192.0.2.4/28
4616608bfeSPetr Machata}
4716608bfeSPetr Machata
4816608bfeSPetr Machatacleanup()
4916608bfeSPetr Machata{
5016608bfeSPetr Machata	pre_cleanup
5116608bfeSPetr Machata
5216608bfeSPetr Machata	ip address del dev $h2 192.0.2.4/28
5316608bfeSPetr Machata	ip address del dev $h1 192.0.2.3/28
5416608bfeSPetr Machata
5516608bfeSPetr Machata	ip address del dev $h3 2001:db8:2::2/64
5616608bfeSPetr Machata	ip address del dev $swp3 2001:db8:2::1/64
5716608bfeSPetr Machata
5816608bfeSPetr Machata	ip address del dev $h3 192.0.2.130/28
5916608bfeSPetr Machata	ip address del dev $swp3 192.0.2.129/28
6016608bfeSPetr Machata
6116608bfeSPetr Machata	mirror_gre_topo_destroy
6216608bfeSPetr Machata	vrf_cleanup
6316608bfeSPetr Machata}
6416608bfeSPetr Machata
6516608bfeSPetr Machatatest_span_gre_dir_acl()
6616608bfeSPetr Machata{
6716608bfeSPetr Machata	test_span_gre_dir_ips "$@" 192.0.2.3 192.0.2.4
6816608bfeSPetr Machata}
6916608bfeSPetr Machata
70a96d81a2SPetr Machatafail_test_span_gre_dir_acl()
71a96d81a2SPetr Machata{
72a96d81a2SPetr Machata	fail_test_span_gre_dir_ips "$@" 192.0.2.3 192.0.2.4
73a96d81a2SPetr Machata}
74a96d81a2SPetr Machata
7516608bfeSPetr Machatafull_test_span_gre_dir_acl()
7616608bfeSPetr Machata{
7716608bfeSPetr Machata	local tundev=$1; shift
7816608bfeSPetr Machata	local direction=$1; shift
7916608bfeSPetr Machata	local forward_type=$1; shift
8016608bfeSPetr Machata	local backward_type=$1; shift
8116608bfeSPetr Machata	local match_dip=$1; shift
8216608bfeSPetr Machata	local what=$1; shift
8316608bfeSPetr Machata
84084fafe9SPetr Machata	RET=0
85084fafe9SPetr Machata
8616608bfeSPetr Machata	mirror_install $swp1 $direction $tundev \
8716608bfeSPetr Machata		       "protocol ip flower $tcflags dst_ip $match_dip"
8816608bfeSPetr Machata	fail_test_span_gre_dir $tundev $direction
8916608bfeSPetr Machata	test_span_gre_dir_acl "$tundev" "$direction" \
9016608bfeSPetr Machata			  "$forward_type" "$backward_type"
9116608bfeSPetr Machata	mirror_uninstall $swp1 $direction
9216608bfeSPetr Machata
93a96d81a2SPetr Machata	# Test lack of mirroring after ACL mirror is uninstalled.
94a96d81a2SPetr Machata	fail_test_span_gre_dir_acl "$tundev" "$direction"
95a96d81a2SPetr Machata
9616608bfeSPetr Machata	log_test "$direction $what ($tcflags)"
9716608bfeSPetr Machata}
9816608bfeSPetr Machata
990eb8053cSIdo Schimmeltest_gretap()
1000eb8053cSIdo Schimmel{
1010eb8053cSIdo Schimmel	full_test_span_gre_dir_acl gt4 ingress 8 0 192.0.2.4 "ACL mirror to gretap"
1020eb8053cSIdo Schimmel	full_test_span_gre_dir_acl gt4 egress 0 8 192.0.2.3 "ACL mirror to gretap"
1030eb8053cSIdo Schimmel}
1040eb8053cSIdo Schimmel
1050eb8053cSIdo Schimmeltest_ip6gretap()
1060eb8053cSIdo Schimmel{
1070eb8053cSIdo Schimmel	full_test_span_gre_dir_acl gt6 ingress 8 0 192.0.2.4 "ACL mirror to ip6gretap"
1080eb8053cSIdo Schimmel	full_test_span_gre_dir_acl gt6 egress 0 8 192.0.2.3 "ACL mirror to ip6gretap"
1090eb8053cSIdo Schimmel}
1100eb8053cSIdo Schimmel
11116608bfeSPetr Machatatest_all()
11216608bfeSPetr Machata{
11316608bfeSPetr Machata	slow_path_trap_install $swp1 ingress
11416608bfeSPetr Machata	slow_path_trap_install $swp1 egress
11516608bfeSPetr Machata
1160eb8053cSIdo Schimmel	tests_run
11716608bfeSPetr Machata
11816608bfeSPetr Machata	slow_path_trap_uninstall $swp1 egress
11916608bfeSPetr Machata	slow_path_trap_uninstall $swp1 ingress
12016608bfeSPetr Machata}
12116608bfeSPetr Machata
12216608bfeSPetr Machatatrap cleanup EXIT
12316608bfeSPetr Machata
12416608bfeSPetr Machatasetup_prepare
12516608bfeSPetr Machatasetup_wait
12616608bfeSPetr Machata
12716608bfeSPetr Machatatcflags="skip_hw"
12816608bfeSPetr Machatatest_all
12916608bfeSPetr Machata
13016608bfeSPetr Machataif ! tc_offload_check; then
13116608bfeSPetr Machata	echo "WARN: Could not test offloaded functionality"
13216608bfeSPetr Machataelse
13316608bfeSPetr Machata	tcflags="skip_sw"
13416608bfeSPetr Machata	test_all
13516608bfeSPetr Machatafi
13616608bfeSPetr Machata
13716608bfeSPetr Machataexit $EXIT_STATUS
138