Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
fork
Configure Feed
Select the types of activity you want to include in your feed.
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 $tcflags 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
110__mirror_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 dip=$(mirror_gre_ipv6_addr 1 $i)::2
124 local htun=h3-gt6-$i
125 local message
126
127 icmp6_capture_install $htun
128 mirror_test v$h1 "" $dip $htun 100 10
129 icmp6_capture_uninstall $htun
130 done
131}
132
133mirror_gre_test()
134{
135 local count=$1; shift
136 local should_fail=$1; shift
137
138 if ! tc_offload_check $TC_FLOWER_NUM_NETIFS; then
139 check_err 1 "Could not test offloaded functionality"
140 return
141 fi
142
143 tcflags="skip_sw"
144 __mirror_gre_test $count $should_fail
145}
146
147mirror_gre_setup_prepare()
148{
149 h1=${NETIFS[p1]}
150 swp1=${NETIFS[p2]}
151
152 swp2=${NETIFS[p3]}
153 h2=${NETIFS[p4]}
154
155 swp3=${NETIFS[p5]}
156 h3=${NETIFS[p6]}
157
158 mirror_gre_tunnels=0
159
160 vrf_prepare
161
162 simple_if_init $h1
163 simple_if_init $h2
164 simple_if_init $h3
165
166 ip link add name br1 type bridge vlan_filtering 1
167 ip link set dev br1 up
168
169 ip link set dev $swp1 master br1
170 ip link set dev $swp1 up
171 tc qdisc add dev $swp1 clsact
172
173 ip link set dev $swp2 master br1
174 ip link set dev $swp2 up
175
176 ip link set dev $swp3 up
177}
178
179mirror_gre_cleanup()
180{
181 mirror_gre_tunnels_destroy $mirror_gre_tunnels
182
183 ip link set dev $swp3 down
184
185 ip link set dev $swp2 down
186
187 tc qdisc del dev $swp1 clsact
188 ip link set dev $swp1 down
189
190 ip link del dev br1
191
192 simple_if_fini $h3
193 simple_if_fini $h2
194 simple_if_fini $h1
195
196 vrf_cleanup
197}