# SPDX-License-Identifier: GPL-2.0

# This is the standard topology for testing mirroring to gretap and ip6gretap
# netdevices. The tests that use it tweak it in one way or another--importantly,
# $swp3 and $h3 need to have addresses set up.
#
#   +---------------------+                             +---------------------+
#   | H1                  |                             |                  H2 |
#   |     + $h1           |                             |           $h2 +     |
#   |     | 192.0.2.1/28  |                             |  192.0.2.2/28 |     |
#   +-----|---------------+                             +---------------|-----+
#         |                                                             |
#   +-----|-------------------------------------------------------------|-----+
#   | SW  o--> mirror                                                   |     |
#   | +---|-------------------------------------------------------------|---+ |
#   | |   + $swp1                    BR                           $swp2 +   | |
#   | +---------------------------------------------------------------------+ |
#   |                                                                         |
#   |     + $swp3               + gt6 (ip6gretap)      + gt4 (gretap)         |
#   |     |                     : loc=2001:db8:2::1    : loc=192.0.2.129      |
#   |     |                     : rem=2001:db8:2::2    : rem=192.0.2.130      |
#   |     |                     : ttl=100              : ttl=100              |
#   |     |                     : tos=inherit          : tos=inherit          |
#   |     |                     :                      :                      |
#   +-----|---------------------:----------------------:----------------------+
#         |                     :                      :
#   +-----|---------------------:----------------------:----------------------+
#   | H3  + $h3                 + h3-gt6 (ip6gretap)   + h3-gt4 (gretap)      |
#   |                             loc=2001:db8:2::2      loc=192.0.2.130      |
#   |                             rem=2001:db8:2::1      rem=192.0.2.129      |
#   |                             ttl=100                ttl=100              |
#   |                             tos=inherit            tos=inherit          |
#   |                                                                         |
#   +-------------------------------------------------------------------------+

source "$relative_path/mirror_topo_lib.sh"

mirror_gre_topo_h3_create()
{
	mirror_topo_h3_create

	tunnel_create h3-gt4 gretap 192.0.2.130 192.0.2.129
	ip link set h3-gt4 vrf v$h3
	matchall_sink_create h3-gt4

	tunnel_create h3-gt6 ip6gretap 2001:db8:2::2 2001:db8:2::1
	ip link set h3-gt6 vrf v$h3
	matchall_sink_create h3-gt6
}

mirror_gre_topo_h3_destroy()
{
	tunnel_destroy h3-gt6
	tunnel_destroy h3-gt4

	mirror_topo_h3_destroy
}

mirror_gre_topo_switch_create()
{
	mirror_topo_switch_create

	tunnel_create gt4 gretap 192.0.2.129 192.0.2.130 \
		      ttl 100 tos inherit

	tunnel_create gt6 ip6gretap 2001:db8:2::1 2001:db8:2::2 \
		      ttl 100 tos inherit allow-localremote
}

mirror_gre_topo_switch_destroy()
{
	tunnel_destroy gt6
	tunnel_destroy gt4

	mirror_topo_switch_destroy
}

mirror_gre_topo_create()
{
	mirror_topo_h1_create
	mirror_topo_h2_create
	mirror_gre_topo_h3_create

	mirror_gre_topo_switch_create
}

mirror_gre_topo_destroy()
{
	mirror_gre_topo_switch_destroy

	mirror_gre_topo_h3_destroy
	mirror_topo_h2_destroy
	mirror_topo_h1_destroy
}
