~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/net/forwarding/q_in_vni.sh

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #!/bin/bash
  2 # SPDX-License-Identifier: GPL-2.0
  3 
  4 # +-----------------------+                          +------------------------+
  5 # | H1 (vrf)              |                          | H2 (vrf)               |
  6 # |  + $h1.10             |                          |  + $h2.10              |
  7 # |  | 192.0.2.1/28       |                          |  | 192.0.2.2/28        |
  8 # |  |                    |                          |  |                     |
  9 # |  | + $h1.20           |                          |  | + $h2.20            |
 10 # |  \ | 198.51.100.1/24  |                          |  \ | 198.51.100.2/24   |
 11 # |   \|                  |                          |   \|                   |
 12 # |    + $h1              |                          |    + $h2               |
 13 # +----|------------------+                          +----|-------------------+
 14 #      |                                                  |
 15 # +----|--------------------------------------------------|-------------------+
 16 # | SW |                                                  |                   |
 17 # | +--|--------------------------------------------------|-----------------+ |
 18 # | |  + $swp1                   BR1 (802.1ad)            + $swp2           | |
 19 # | |    vid 100 pvid untagged                              vid 100 pvid    | |
 20 # | |                                                           untagged    | |
 21 # | |  + vx100 (vxlan)                                                      | |
 22 # | |    local 192.0.2.17                                                   | |
 23 # | |    remote 192.0.2.34 192.0.2.50                                       | |
 24 # | |    id 1000 dstport $VXPORT                                            | |
 25 # | |    vid 100 pvid untagged                                              | |
 26 # | +-----------------------------------------------------------------------+ |
 27 # |                                                                           |
 28 # |  192.0.2.32/28 via 192.0.2.18                                             |
 29 # |  192.0.2.48/28 via 192.0.2.18                                             |
 30 # |                                                                           |
 31 # |    + $rp1                                                                 |
 32 # |    | 192.0.2.17/28                                                        |
 33 # +----|----------------------------------------------------------------------+
 34 #      |
 35 # +----|--------------------------------------------------------+
 36 # |    |                                             VRP2 (vrf) |
 37 # |    + $rp2                                                   |
 38 # |      192.0.2.18/28                                          |
 39 # |                                                             |   (maybe) HW
 40 # =============================================================================
 41 # |                                                             |  (likely) SW
 42 # |    + v1 (veth)                             + v3 (veth)      |
 43 # |    | 192.0.2.33/28                         | 192.0.2.49/28  |
 44 # +----|---------------------------------------|----------------+
 45 #      |                                       |
 46 # +----|------------------------------+   +----|------------------------------+
 47 # |    + v2 (veth)        NS1 (netns) |   |    + v4 (veth)        NS2 (netns) |
 48 # |      192.0.2.34/28                |   |      192.0.2.50/28                |
 49 # |                                   |   |                                   |
 50 # |   192.0.2.16/28 via 192.0.2.33    |   |   192.0.2.16/28 via 192.0.2.49    |
 51 # |   192.0.2.50/32 via 192.0.2.33    |   |   192.0.2.34/32 via 192.0.2.49    |
 52 # |                                   |   |                                   |
 53 # | +-------------------------------+ |   | +-------------------------------+ |
 54 # | |                 BR2 (802.1ad) | |   | |                 BR2 (802.1ad) | |
 55 # | |  + vx100 (vxlan)              | |   | |  + vx100 (vxlan)              | |
 56 # | |    local 192.0.2.34           | |   | |    local 192.0.2.50           | |
 57 # | |    remote 192.0.2.17          | |   | |    remote 192.0.2.17          | |
 58 # | |    remote 192.0.2.50          | |   | |    remote 192.0.2.34          | |
 59 # | |    id 1000 dstport $VXPORT    | |   | |    id 1000 dstport $VXPORT    | |
 60 # | |    vid 100 pvid untagged      | |   | |    vid 100 pvid untagged      | |
 61 # | |                               | |   | |                               | |
 62 # | |  + w1 (veth)                  | |   | |  + w1 (veth)                  | |
 63 # | |  | vid 100 pvid untagged      | |   | |  | vid 100 pvid untagged      | |
 64 # | +--|----------------------------+ |   | +--|----------------------------+ |
 65 # |    |                              |   |    |                              |
 66 # | +--|----------------------------+ |   | +--|----------------------------+ |
 67 # | |  |                  VW2 (vrf) | |   | |  |                  VW2 (vrf) | |
 68 # | |  + w2 (veth)                  | |   | |  + w2 (veth)                  | |
 69 # | |  |\                           | |   | |  |\                           | |
 70 # | |  | + w2.10                    | |   | |  | + w2.10                    | |
 71 # | |  |   192.0.2.3/28             | |   | |  |   192.0.2.4/28             | |
 72 # | |  |                            | |   | |  |                            | |
 73 # | |  + w2.20                      | |   | |  + w2.20                      | |
 74 # | |    198.51.100.3/24            | |   | |    198.51.100.4/24            | |
 75 # | +-------------------------------+ |   | +-------------------------------+ |
 76 # +-----------------------------------+   +-----------------------------------+
 77 
 78 : ${VXPORT:=4789}
 79 export VXPORT
 80 
 81 : ${ALL_TESTS:="
 82         ping_ipv4
 83     "}
 84 
 85 NUM_NETIFS=6
 86 source lib.sh
 87 
 88 h1_create()
 89 {
 90         simple_if_init $h1
 91         tc qdisc add dev $h1 clsact
 92         vlan_create $h1 10 v$h1 192.0.2.1/28
 93         vlan_create $h1 20 v$h1 198.51.100.1/24
 94 }
 95 
 96 h1_destroy()
 97 {
 98         vlan_destroy $h1 20
 99         vlan_destroy $h1 10
100         tc qdisc del dev $h1 clsact
101         simple_if_fini $h1
102 }
103 
104 h2_create()
105 {
106         simple_if_init $h2
107         tc qdisc add dev $h2 clsact
108         vlan_create $h2 10 v$h2 192.0.2.2/28
109         vlan_create $h2 20 v$h2 198.51.100.2/24
110 }
111 
112 h2_destroy()
113 {
114         vlan_destroy $h2 20
115         vlan_destroy $h2 10
116         tc qdisc del dev $h2 clsact
117         simple_if_fini $h2
118 }
119 
120 rp1_set_addr()
121 {
122         ip address add dev $rp1 192.0.2.17/28
123 
124         ip route add 192.0.2.32/28 nexthop via 192.0.2.18
125         ip route add 192.0.2.48/28 nexthop via 192.0.2.18
126 }
127 
128 rp1_unset_addr()
129 {
130         ip route del 192.0.2.48/28 nexthop via 192.0.2.18
131         ip route del 192.0.2.32/28 nexthop via 192.0.2.18
132 
133         ip address del dev $rp1 192.0.2.17/28
134 }
135 
136 switch_create()
137 {
138         ip link add name br1 type bridge vlan_filtering 1 vlan_protocol 802.1ad \
139                 vlan_default_pvid 0 mcast_snooping 0
140         ip link set dev br1 addrgenmode none
141         # Make sure the bridge uses the MAC address of the local port and not
142         # that of the VxLAN's device.
143         ip link set dev br1 address $(mac_get $swp1)
144         ip link set dev br1 up
145 
146         ip link set dev $rp1 up
147         rp1_set_addr
148 
149         ip link add name vx100 type vxlan id 1000               \
150                 local 192.0.2.17 dstport "$VXPORT"      \
151                 nolearning noudpcsum tos inherit ttl 100
152         ip link set dev vx100 up
153 
154         ip link set dev vx100 master br1
155         bridge vlan add vid 100 dev vx100 pvid untagged
156 
157         ip link set dev $swp1 master br1
158         ip link set dev $swp1 up
159         bridge vlan add vid 100 dev $swp1 pvid untagged
160 
161         ip link set dev $swp2 master br1
162         ip link set dev $swp2 up
163         bridge vlan add vid 100 dev $swp2 pvid untagged
164 
165         bridge fdb append dev vx100 00:00:00:00:00:00 dst 192.0.2.34 self
166         bridge fdb append dev vx100 00:00:00:00:00:00 dst 192.0.2.50 self
167 }
168 
169 switch_destroy()
170 {
171         bridge fdb del dev vx100 00:00:00:00:00:00 dst 192.0.2.50 self
172         bridge fdb del dev vx100 00:00:00:00:00:00 dst 192.0.2.34 self
173 
174         bridge vlan del vid 100 dev $swp2
175         ip link set dev $swp2 down
176         ip link set dev $swp2 nomaster
177 
178         bridge vlan del vid 100 dev $swp1
179         ip link set dev $swp1 down
180         ip link set dev $swp1 nomaster
181 
182         ip link set dev vx100 nomaster
183         ip link set dev vx100 down
184         ip link del dev vx100
185 
186         rp1_unset_addr
187         ip link set dev $rp1 down
188 
189         ip link set dev br1 down
190         ip link del dev br1
191 }
192 
193 vrp2_create()
194 {
195         simple_if_init $rp2 192.0.2.18/28
196         __simple_if_init v1 v$rp2 192.0.2.33/28
197         __simple_if_init v3 v$rp2 192.0.2.49/28
198         tc qdisc add dev v1 clsact
199 }
200 
201 vrp2_destroy()
202 {
203         tc qdisc del dev v1 clsact
204         __simple_if_fini v3 192.0.2.49/28
205         __simple_if_fini v1 192.0.2.33/28
206         simple_if_fini $rp2 192.0.2.18/28
207 }
208 
209 ns_init_common()
210 {
211         local in_if=$1; shift
212         local in_addr=$1; shift
213         local other_in_addr=$1; shift
214         local nh_addr=$1; shift
215         local host_addr1=$1; shift
216         local host_addr2=$1; shift
217 
218         ip link set dev $in_if up
219         ip address add dev $in_if $in_addr/28
220         tc qdisc add dev $in_if clsact
221 
222         ip link add name br2 type bridge vlan_filtering 1 vlan_protocol 802.1ad \
223                 vlan_default_pvid 0
224         ip link set dev br2 up
225 
226         ip link add name w1 type veth peer name w2
227 
228         ip link set dev w1 master br2
229         ip link set dev w1 up
230         bridge vlan add vid 100 dev w1 pvid untagged
231 
232         ip link add name vx100 type vxlan id 1000 local $in_addr \
233                 dstport "$VXPORT"
234         ip link set dev vx100 up
235         bridge fdb append dev vx100 00:00:00:00:00:00 dst 192.0.2.17 self
236         bridge fdb append dev vx100 00:00:00:00:00:00 dst $other_in_addr self
237 
238         ip link set dev vx100 master br2
239         tc qdisc add dev vx100 clsact
240 
241         bridge vlan add vid 100 dev vx100 pvid untagged
242 
243         simple_if_init w2
244         vlan_create w2 10 vw2 $host_addr1/28
245         vlan_create w2 20 vw2 $host_addr2/24
246 
247         ip route add 192.0.2.16/28 nexthop via $nh_addr
248         ip route add $other_in_addr/32 nexthop via $nh_addr
249 }
250 export -f ns_init_common
251 
252 ns1_create()
253 {
254         ip netns add ns1
255         ip link set dev v2 netns ns1
256         in_ns ns1 \
257               ns_init_common v2 192.0.2.34 192.0.2.50 192.0.2.33 \
258                              192.0.2.3 198.51.100.3
259 }
260 
261 ns1_destroy()
262 {
263         ip netns exec ns1 ip link set dev v2 netns 1
264         ip netns del ns1
265 }
266 
267 ns2_create()
268 {
269         ip netns add ns2
270         ip link set dev v4 netns ns2
271         in_ns ns2 \
272               ns_init_common v4 192.0.2.50 192.0.2.34 192.0.2.49 \
273                              192.0.2.4 198.51.100.4
274 }
275 
276 ns2_destroy()
277 {
278         ip netns exec ns2 ip link set dev v4 netns 1
279         ip netns del ns2
280 }
281 
282 setup_prepare()
283 {
284         h1=${NETIFS[p1]}
285         swp1=${NETIFS[p2]}
286 
287         swp2=${NETIFS[p3]}
288         h2=${NETIFS[p4]}
289 
290         rp1=${NETIFS[p5]}
291         rp2=${NETIFS[p6]}
292 
293         vrf_prepare
294         forwarding_enable
295 
296         h1_create
297         h2_create
298         switch_create
299 
300         ip link add name v1 type veth peer name v2
301         ip link add name v3 type veth peer name v4
302         vrp2_create
303         ns1_create
304         ns2_create
305 
306         r1_mac=$(in_ns ns1 mac_get w2)
307         r2_mac=$(in_ns ns2 mac_get w2)
308         h2_mac=$(mac_get $h2)
309 }
310 
311 cleanup()
312 {
313         pre_cleanup
314 
315         ns2_destroy
316         ns1_destroy
317         vrp2_destroy
318         ip link del dev v3
319         ip link del dev v1
320 
321         switch_destroy
322         h2_destroy
323         h1_destroy
324 
325         forwarding_restore
326         vrf_cleanup
327 }
328 
329 ping_ipv4()
330 {
331         ping_test $h1 192.0.2.2 ": local->local"
332         ping_test $h1 192.0.2.3 ": local->remote 1"
333         ping_test $h1 192.0.2.4 ": local->remote 2"
334 }
335 
336 test_all()
337 {
338         echo "Running tests with UDP port $VXPORT"
339         tests_run
340 }
341 
342 trap cleanup EXIT
343 
344 setup_prepare
345 setup_wait
346 test_all
347 
348 exit $EXIT_STATUS

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php