brintos

brintos / linux-shallow public Read only

0
0
Text · 5.4 KiB · d430933 Raw
186 lines · bash
1# SPDX-License-Identifier: GPL-2.02 3# Test offloading a number of mirrors-to-gretap. The test creates a number of4# tunnels. Then it adds one flower mirror for each of the tunnels, matching a5# given host IP. Then it generates traffic at each of the host IPs and checks6# 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.sh38 39MIRROR_NUM_NETIFS=640 41mirror_gre_ipv6_addr()42{43	local net=$1; shift44	local num=$1; shift45 46	printf "2001:db8:%x:%x" $net $num47}48 49mirror_gre_tunnels_create()50{51	local count=$1; shift52	local should_fail=$1; shift53 54	MIRROR_GRE_BATCH_FILE="$(mktemp)"55	for ((i=0; i < count; ++i)); do56		local match_dip=$(mirror_gre_ipv6_addr 1 $i)::257		local htun=h3-gt6-$i58		local tun=gt6-$i59 60		((mirror_gre_tunnels++))61 62		ip address add dev $h1 $(mirror_gre_ipv6_addr 1 $i)::1/6463		ip address add dev $h2 $(mirror_gre_ipv6_addr 1 $i)::2/6464 65		ip address add dev $swp3 $(mirror_gre_ipv6_addr 2 $i)::1/6466		ip address add dev $h3 $(mirror_gre_ipv6_addr 2 $i)::2/6467 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-localremote72 73		tunnel_create $htun ip6gretap \74			      $(mirror_gre_ipv6_addr 2 $i)::2 \75			      $(mirror_gre_ipv6_addr 2 $i)::176		ip link set $htun vrf v$h377		matchall_sink_create $htun78 79		cat >> $MIRROR_GRE_BATCH_FILE <<-EOF80			filter add dev $swp1 ingress pref 1000 \81				protocol ipv6 \82				flower skip_sw dst_ip $match_dip \83				action mirred egress mirror dev $tun84		EOF85	done86 87	tc -b $MIRROR_GRE_BATCH_FILE88	check_err_fail $should_fail $? "Mirror rule insertion"89}90 91mirror_gre_tunnels_destroy()92{93	local count=$1; shift94 95	for ((i=0; i < count; ++i)); do96		local htun=h3-gt6-$i97		local tun=gt6-$i98 99		ip address del dev $h3 $(mirror_gre_ipv6_addr 2 $i)::2/64100		ip address del dev $swp3 $(mirror_gre_ipv6_addr 2 $i)::1/64101 102		ip address del dev $h2 $(mirror_gre_ipv6_addr 1 $i)::2/64103		ip address del dev $h1 $(mirror_gre_ipv6_addr 1 $i)::1/64104 105		tunnel_destroy $htun106		tunnel_destroy $tun107	done108}109 110mirror_gre_test()111{112	local count=$1; shift113	local should_fail=$1; shift114 115	mirror_gre_tunnels_create $count $should_fail116	if ((should_fail)); then117	    return118	fi119 120	sleep 5121 122	for ((i = 0; i < count; ++i)); do123		local sip=$(mirror_gre_ipv6_addr 1 $i)::1124		local dip=$(mirror_gre_ipv6_addr 1 $i)::2125		local htun=h3-gt6-$i126		local message127 128		icmp6_capture_install $htun129		mirror_test v$h1 $sip $dip $htun 100 10130		icmp6_capture_uninstall $htun131	done132}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=0146 147	vrf_prepare148 149	simple_if_init $h1150	simple_if_init $h2151	simple_if_init $h3152 153	ip link add name br1 type bridge vlan_filtering 1154	ip link set dev br1 addrgenmode none155	ip link set dev br1 up156 157	ip link set dev $swp1 master br1158	ip link set dev $swp1 up159	tc qdisc add dev $swp1 clsact160 161	ip link set dev $swp2 master br1162	ip link set dev $swp2 up163 164	ip link set dev $swp3 up165}166 167mirror_gre_cleanup()168{169	mirror_gre_tunnels_destroy $mirror_gre_tunnels170 171	ip link set dev $swp3 down172 173	ip link set dev $swp2 down174 175	tc qdisc del dev $swp1 clsact176	ip link set dev $swp1 down177 178	ip link del dev br1179 180	simple_if_fini $h3181	simple_if_fini $h2182	simple_if_fini $h1183 184	vrf_cleanup185}186