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