File Index
Files and directories
Sign in
FILE

mirror_gre_scale.sh

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/drivers/net/mlxsw/mirror_gre_scale.sh BASH
  1# SPDX-License-Identifier: GPL-2.0
  2
  3# Test offloading a number of mirrors-to-gretap. The test creates a number of
  4# tunnels. Then it adds one flower mirror for each of the tunnels, matching a
  5# given host IP. Then it generates traffic at each of the host IPs and checks
  6# that the traffic has been mirrored at the appropriate tunnel.
  7#
  8#   +--------------------------+                   +--------------------------+
  9#   | H1                       |                   |                       H2 |
 10#   |     + $h1                |                   |                $h2 +     |
 11#   |     | 2001:db8:1:X::1/64 |                   | 2001:db8:1:X::2/64 |     |
 12#   +-----|--------------------+                   +--------------------|-----+
 13#         |                                                             |
 14#   +-----|-------------------------------------------------------------|-----+
 15#   | SW  o--> mirrors                                                  |     |
 16#   | +---|-------------------------------------------------------------|---+ |
 17#   | |   + $swp1                    BR                           $swp2 +   | |
 18#   | +---------------------------------------------------------------------+ |
 19#   |                                                                         |
 20#   |     + $swp3                          + gt6-<X> (ip6gretap)              |
 21#   |     | 2001:db8:2:X::1/64             : loc=2001:db8:2:X::1              |
 22#   |     |                                : rem=2001:db8:2:X::2              |
 23#   |     |                                : ttl=100                          |
 24#   |     |                                : tos=inherit                      |
 25#   |     |                                :                                  |
 26#   +-----|--------------------------------:----------------------------------+
 27#         |                                :
 28#   +-----|--------------------------------:----------------------------------+
 29#   | H3  + $h3                            + h3-gt6-<X> (ip6gretap)           |
 30#   |       2001:db8:2:X::2/64               loc=2001:db8:2:X::2              |
 31#   |                                        rem=2001:db8:2:X::1              |
 32#   |                                        ttl=100                          |
 33#   |                                        tos=inherit                      |
 34#   |                                                                         |
 35#   +-------------------------------------------------------------------------+
 36
 37source ../../../../net/forwarding/mirror_lib.sh
 38
 39MIRROR_NUM_NETIFS=6
 40
 41mirror_gre_ipv6_addr()
 42{
 43	local net=$1; shift
 44	local num=$1; shift
 45
 46	printf "2001:db8:%x:%x" $net $num
 47}
 48
 49mirror_gre_tunnels_create()
 50{
 51	local count=$1; shift
 52	local should_fail=$1; shift
 53
 54	MIRROR_GRE_BATCH_FILE="$(mktemp)"
 55	for ((i=0; i < count; ++i)); do
 56		local match_dip=$(mirror_gre_ipv6_addr 1 $i)::2
 57		local htun=h3-gt6-$i
 58		local tun=gt6-$i
 59
 60		((mirror_gre_tunnels++))
 61
 62		ip address add dev $h1 $(mirror_gre_ipv6_addr 1 $i)::1/64
 63		ip address add dev $h2 $(mirror_gre_ipv6_addr 1 $i)::2/64
 64
 65		ip address add dev $swp3 $(mirror_gre_ipv6_addr 2 $i)::1/64
 66		ip address add dev $h3 $(mirror_gre_ipv6_addr 2 $i)::2/64
 67
 68		tunnel_create $tun ip6gretap \
 69			      $(mirror_gre_ipv6_addr 2 $i)::1 \
 70			      $(mirror_gre_ipv6_addr 2 $i)::2 \
 71			      ttl 100 tos inherit allow-localremote
 72
 73		tunnel_create $htun ip6gretap \
 74			      $(mirror_gre_ipv6_addr 2 $i)::2 \
 75			      $(mirror_gre_ipv6_addr 2 $i)::1
 76		ip link set $htun vrf v$h3
 77		matchall_sink_create $htun
 78
 79		cat >> $MIRROR_GRE_BATCH_FILE <<-EOF
 80			filter add dev $swp1 ingress pref 1000 \
 81				protocol ipv6 \
 82				flower skip_sw dst_ip $match_dip \
 83				action mirred egress mirror dev $tun
 84		EOF
 85	done
 86
 87	tc -b $MIRROR_GRE_BATCH_FILE
 88	check_err_fail $should_fail $? "Mirror rule insertion"
 89}
 90
 91mirror_gre_tunnels_destroy()
 92{
 93	local count=$1; shift
 94
 95	for ((i=0; i < count; ++i)); do
 96		local htun=h3-gt6-$i
 97		local tun=gt6-$i
 98
 99		ip address del dev $h3 $(mirror_gre_ipv6_addr 2 $i)::2/64
100		ip address del dev $swp3 $(mirror_gre_ipv6_addr 2 $i)::1/64
101
102		ip address del dev $h2 $(mirror_gre_ipv6_addr 1 $i)::2/64
103		ip address del dev $h1 $(mirror_gre_ipv6_addr 1 $i)::1/64
104
105		tunnel_destroy $htun
106		tunnel_destroy $tun
107	done
108}
109
110mirror_gre_test()
111{
112	local count=$1; shift
113	local should_fail=$1; shift
114
115	mirror_gre_tunnels_create $count $should_fail
116	if ((should_fail)); then
117	    return
118	fi
119
120	sleep 5
121
122	for ((i = 0; i < count; ++i)); do
123		local sip=$(mirror_gre_ipv6_addr 1 $i)::1
124		local dip=$(mirror_gre_ipv6_addr 1 $i)::2
125		local htun=h3-gt6-$i
126		local message
127
128		icmp6_capture_install $htun
129		mirror_test v$h1 $sip $dip $htun 100 10
130		icmp6_capture_uninstall $htun
131	done
132}
133
134mirror_gre_setup_prepare()
135{
136	h1=${NETIFS[p1]}
137	swp1=${NETIFS[p2]}
138
139	swp2=${NETIFS[p3]}
140	h2=${NETIFS[p4]}
141
142	swp3=${NETIFS[p5]}
143	h3=${NETIFS[p6]}
144
145	mirror_gre_tunnels=0
146
147	vrf_prepare
148
149	simple_if_init $h1
150	simple_if_init $h2
151	simple_if_init $h3
152
153	ip link add name br1 type bridge vlan_filtering 1
154	ip link set dev br1 addrgenmode none
155	ip link set dev br1 up
156
157	ip link set dev $swp1 master br1
158	ip link set dev $swp1 up
159	tc qdisc add dev $swp1 clsact
160
161	ip link set dev $swp2 master br1
162	ip link set dev $swp2 up
163
164	ip link set dev $swp3 up
165}
166
167mirror_gre_cleanup()
168{
169	mirror_gre_tunnels_destroy $mirror_gre_tunnels
170
171	ip link set dev $swp3 down
172
173	ip link set dev $swp2 down
174
175	tc qdisc del dev $swp1 clsact
176	ip link set dev $swp1 down
177
178	ip link del dev br1
179
180	simple_if_fini $h3
181	simple_if_fini $h2
182	simple_if_fini $h1
183
184	vrf_cleanup
185}
~/ Read-only file preview.