1438a4f56SIdo Schimmel#!/bin/bash
2438a4f56SIdo Schimmel# SPDX-License-Identifier: GPL-2.0
3438a4f56SIdo Schimmel
4438a4f56SIdo Schimmel# +---------------------------+                +------------------------------+
5438a4f56SIdo Schimmel# |                    vrf-h1 |                |                       vrf-h2 |
6438a4f56SIdo Schimmel# |    + $h1                  |                |    + $h2                     |
7438a4f56SIdo Schimmel# |    | 10.1.1.101/24        |                |    | 10.1.2.101/24           |
8438a4f56SIdo Schimmel# |    | default via 10.1.1.1 |                |    | default via 10.1.2.1    |
9438a4f56SIdo Schimmel# +----|----------------------+                +----|-------------------------+
10438a4f56SIdo Schimmel#      |                                            |
11438a4f56SIdo Schimmel# +----|--------------------------------------------|-------------------------+
12438a4f56SIdo Schimmel# | SW |                                            |                         |
13438a4f56SIdo Schimmel# | +--|--------------------------------------------|-----------------------+ |
14438a4f56SIdo Schimmel# | |  + $swp1                         br1          + $swp2                 | |
15438a4f56SIdo Schimmel# | |     vid 10 pvid untagged                         vid 20 pvid untagged | |
16438a4f56SIdo Schimmel# | |                                                                       | |
17438a4f56SIdo Schimmel# | |  + vx10                                       + vx20                  | |
18438a4f56SIdo Schimmel# | |    local 10.0.0.1                               local 10.0.0.1        | |
19438a4f56SIdo Schimmel# | |    remote 10.0.0.2                              remote 10.0.0.2       | |
20438a4f56SIdo Schimmel# | |    id 1010                                      id 1020               | |
21438a4f56SIdo Schimmel# | |    dstport 4789                                 dstport 4789          | |
22438a4f56SIdo Schimmel# | |    vid 10 pvid untagged                         vid 20 pvid untagged  | |
23438a4f56SIdo Schimmel# | |                                                                       | |
24438a4f56SIdo Schimmel# | |                             + vx4001                                  | |
25438a4f56SIdo Schimmel# | |                               local 10.0.0.1                          | |
26438a4f56SIdo Schimmel# | |                               remote 10.0.0.2                         | |
27438a4f56SIdo Schimmel# | |                               id 104001                               | |
28438a4f56SIdo Schimmel# | |                               dstport 4789                            | |
29438a4f56SIdo Schimmel# | |                               vid 4001 pvid untagged                  | |
30438a4f56SIdo Schimmel# | |                                                                       | |
31438a4f56SIdo Schimmel# | +-----------------------------------+-----------------------------------+ |
32438a4f56SIdo Schimmel# |                                     |                                     |
33438a4f56SIdo Schimmel# | +-----------------------------------|-----------------------------------+ |
34438a4f56SIdo Schimmel# | |                                   |                                   | |
35438a4f56SIdo Schimmel# | |  +--------------------------------+--------------------------------+  | |
36438a4f56SIdo Schimmel# | |  |                                |                                |  | |
37438a4f56SIdo Schimmel# | |  + vlan10                         |                         vlan20 +  | |
38438a4f56SIdo Schimmel# | |  | 10.1.1.11/24                   |                   10.1.2.11/24 |  | |
39438a4f56SIdo Schimmel# | |  |                                |                                |  | |
40438a4f56SIdo Schimmel# | |  + vlan10-v (macvlan)             +             vlan20-v (macvlan) +  | |
41438a4f56SIdo Schimmel# | |    10.1.1.1/24                vlan4001                 10.1.2.1/24    | |
42438a4f56SIdo Schimmel# | |    00:00:5e:00:01:01                             00:00:5e:00:01:01    | |
43438a4f56SIdo Schimmel# | |                               vrf-green                               | |
44438a4f56SIdo Schimmel# | +-----------------------------------------------------------------------+ |
45438a4f56SIdo Schimmel# |                                                                           |
46438a4f56SIdo Schimmel# |    + $rp1                                       +lo                       |
47438a4f56SIdo Schimmel# |    | 192.0.2.1/24                                10.0.0.1/32              |
48438a4f56SIdo Schimmel# +----|----------------------------------------------------------------------+
49438a4f56SIdo Schimmel#      |
50438a4f56SIdo Schimmel# +----|--------------------------------------------------------+
51438a4f56SIdo Schimmel# |    |                            vrf-spine                   |
52438a4f56SIdo Schimmel# |    + $rp2                                                   |
53438a4f56SIdo Schimmel# |      192.0.2.2/24                                           |
54438a4f56SIdo Schimmel# |                                                             |   (maybe) HW
55438a4f56SIdo Schimmel# =============================================================================
56438a4f56SIdo Schimmel# |                                                             |  (likely) SW
57438a4f56SIdo Schimmel# |                                                             |
58438a4f56SIdo Schimmel# |    + v1 (veth)                                              |
59438a4f56SIdo Schimmel# |    | 192.0.3.2/24                                           |
60438a4f56SIdo Schimmel# +----|--------------------------------------------------------+
61438a4f56SIdo Schimmel#      |
62438a4f56SIdo Schimmel# +----|----------------------------------------------------------------------+
63438a4f56SIdo Schimmel# |    + v2 (veth)                                  +lo           NS1 (netns) |
64438a4f56SIdo Schimmel# |      192.0.3.1/24                                10.0.0.2/32              |
65438a4f56SIdo Schimmel# |                                                                           |
66438a4f56SIdo Schimmel# | +-----------------------------------------------------------------------+ |
67438a4f56SIdo Schimmel# | |                               vrf-green                               | |
68438a4f56SIdo Schimmel# | |  + vlan10-v (macvlan)                           vlan20-v (macvlan) +  | |
69438a4f56SIdo Schimmel# | |  | 10.1.1.1/24                                         10.1.2.1/24 |  | |
70438a4f56SIdo Schimmel# | |  | 00:00:5e:00:01:01                             00:00:5e:00:01:01 |  | |
71438a4f56SIdo Schimmel# | |  |                            vlan4001                             |  | |
72438a4f56SIdo Schimmel# | |  + vlan10                         +                         vlan20 +  | |
73438a4f56SIdo Schimmel# | |  | 10.1.1.12/24                   |                   10.1.2.12/24 |  | |
74438a4f56SIdo Schimmel# | |  |                                |                                |  | |
75438a4f56SIdo Schimmel# | |  +--------------------------------+--------------------------------+  | |
76438a4f56SIdo Schimmel# | |                                   |                                   | |
77438a4f56SIdo Schimmel# | +-----------------------------------|-----------------------------------+ |
78438a4f56SIdo Schimmel# |                                     |                                     |
79438a4f56SIdo Schimmel# | +-----------------------------------+-----------------------------------+ |
80438a4f56SIdo Schimmel# | |                                                                       | |
81438a4f56SIdo Schimmel# | |  + vx10                                     + vx20                    | |
82438a4f56SIdo Schimmel# | |    local 10.0.0.2                             local 10.0.0.2          | |
83438a4f56SIdo Schimmel# | |    remote 10.0.0.1                            remote 10.0.0.1         | |
84438a4f56SIdo Schimmel# | |    id 1010                                    id 1020                 | |
85438a4f56SIdo Schimmel# | |    dstport 4789                               dstport 4789            | |
86438a4f56SIdo Schimmel# | |    vid 10 pvid untagged                       vid 20 pvid untagged    | |
87438a4f56SIdo Schimmel# | |                                                                       | |
88438a4f56SIdo Schimmel# | |                             + vx4001                                  | |
89438a4f56SIdo Schimmel# | |                               local 10.0.0.2                          | |
90438a4f56SIdo Schimmel# | |                               remote 10.0.0.1                         | |
91438a4f56SIdo Schimmel# | |                               id 104001                               | |
92438a4f56SIdo Schimmel# | |                               dstport 4789                            | |
93438a4f56SIdo Schimmel# | |                               vid 4001 pvid untagged                  | |
94438a4f56SIdo Schimmel# | |                                                                       | |
95438a4f56SIdo Schimmel# | |  + w1 (veth)                                + w3 (veth)               | |
96438a4f56SIdo Schimmel# | |  | vid 10 pvid untagged          br1        | vid 20 pvid untagged    | |
97438a4f56SIdo Schimmel# | +--|------------------------------------------|-------------------------+ |
98438a4f56SIdo Schimmel# |    |                                          |                           |
99438a4f56SIdo Schimmel# |    |                                          |                           |
100438a4f56SIdo Schimmel# | +--|----------------------+                +--|-------------------------+ |
101438a4f56SIdo Schimmel# | |  |               vrf-h1 |                |  |                  vrf-h2 | |
102438a4f56SIdo Schimmel# | |  + w2 (veth)            |                |  + w4 (veth)               | |
103438a4f56SIdo Schimmel# | |    10.1.1.102/24        |                |    10.1.2.102/24           | |
104438a4f56SIdo Schimmel# | |    default via 10.1.1.1 |                |    default via 10.1.2.1    | |
105438a4f56SIdo Schimmel# | +-------------------------+                +----------------------------+ |
106438a4f56SIdo Schimmel# +---------------------------------------------------------------------------+
107438a4f56SIdo Schimmel
108438a4f56SIdo SchimmelALL_TESTS="
109438a4f56SIdo Schimmel	ping_ipv4
110438a4f56SIdo Schimmel"
111438a4f56SIdo SchimmelNUM_NETIFS=6
112438a4f56SIdo Schimmelsource lib.sh
113438a4f56SIdo Schimmel
114438a4f56SIdo Schimmelhx_create()
115438a4f56SIdo Schimmel{
116438a4f56SIdo Schimmel	local vrf_name=$1; shift
117438a4f56SIdo Schimmel	local if_name=$1; shift
118438a4f56SIdo Schimmel	local ip_addr=$1; shift
119438a4f56SIdo Schimmel	local gw_ip=$1; shift
120438a4f56SIdo Schimmel
121438a4f56SIdo Schimmel	vrf_create $vrf_name
122438a4f56SIdo Schimmel	ip link set dev $if_name master $vrf_name
123438a4f56SIdo Schimmel	ip link set dev $vrf_name up
124438a4f56SIdo Schimmel	ip link set dev $if_name up
125438a4f56SIdo Schimmel
126438a4f56SIdo Schimmel	ip address add $ip_addr/24 dev $if_name
127438a4f56SIdo Schimmel	ip neigh replace $gw_ip lladdr 00:00:5e:00:01:01 nud permanent \
128438a4f56SIdo Schimmel		dev $if_name
129438a4f56SIdo Schimmel	ip route add default vrf $vrf_name nexthop via $gw_ip
130438a4f56SIdo Schimmel}
131438a4f56SIdo Schimmelexport -f hx_create
132438a4f56SIdo Schimmel
133438a4f56SIdo Schimmelhx_destroy()
134438a4f56SIdo Schimmel{
135438a4f56SIdo Schimmel	local vrf_name=$1; shift
136438a4f56SIdo Schimmel	local if_name=$1; shift
137438a4f56SIdo Schimmel	local ip_addr=$1; shift
138438a4f56SIdo Schimmel	local gw_ip=$1; shift
139438a4f56SIdo Schimmel
140438a4f56SIdo Schimmel	ip route del default vrf $vrf_name nexthop via $gw_ip
141438a4f56SIdo Schimmel	ip neigh del $gw_ip dev $if_name
142438a4f56SIdo Schimmel	ip address del $ip_addr/24 dev $if_name
143438a4f56SIdo Schimmel
144438a4f56SIdo Schimmel	ip link set dev $if_name down
145438a4f56SIdo Schimmel	vrf_destroy $vrf_name
146438a4f56SIdo Schimmel}
147438a4f56SIdo Schimmel
148438a4f56SIdo Schimmelh1_create()
149438a4f56SIdo Schimmel{
150438a4f56SIdo Schimmel	hx_create "vrf-h1" $h1 10.1.1.101 10.1.1.1
151438a4f56SIdo Schimmel}
152438a4f56SIdo Schimmel
153438a4f56SIdo Schimmelh1_destroy()
154438a4f56SIdo Schimmel{
155438a4f56SIdo Schimmel	hx_destroy "vrf-h1" $h1 10.1.1.101 10.1.1.1
156438a4f56SIdo Schimmel}
157438a4f56SIdo Schimmel
158438a4f56SIdo Schimmelh2_create()
159438a4f56SIdo Schimmel{
160438a4f56SIdo Schimmel	hx_create "vrf-h2" $h2 10.1.2.101 10.1.2.1
161438a4f56SIdo Schimmel}
162438a4f56SIdo Schimmel
163438a4f56SIdo Schimmelh2_destroy()
164438a4f56SIdo Schimmel{
165438a4f56SIdo Schimmel	hx_destroy "vrf-h2" $h2 10.1.2.101 10.1.2.1
166438a4f56SIdo Schimmel}
167438a4f56SIdo Schimmel
168438a4f56SIdo Schimmelswitch_create()
169438a4f56SIdo Schimmel{
170438a4f56SIdo Schimmel	ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 \
171438a4f56SIdo Schimmel		mcast_snooping 0
172438a4f56SIdo Schimmel	# Make sure the bridge uses the MAC address of the local port and not
173438a4f56SIdo Schimmel	# that of the VxLAN's device.
174438a4f56SIdo Schimmel	ip link set dev br1 address $(mac_get $swp1)
175438a4f56SIdo Schimmel	ip link set dev br1 up
176438a4f56SIdo Schimmel
177438a4f56SIdo Schimmel	ip link set dev $rp1 up
178438a4f56SIdo Schimmel	ip address add dev $rp1 192.0.2.1/24
179438a4f56SIdo Schimmel	ip route add 10.0.0.2/32 nexthop via 192.0.2.2
180438a4f56SIdo Schimmel
181438a4f56SIdo Schimmel	ip link add name vx10 type vxlan id 1010		\
182438a4f56SIdo Schimmel		local 10.0.0.1 remote 10.0.0.2 dstport 4789	\
183438a4f56SIdo Schimmel		nolearning noudpcsum tos inherit ttl 100
184438a4f56SIdo Schimmel	ip link set dev vx10 up
185438a4f56SIdo Schimmel
186438a4f56SIdo Schimmel	ip link set dev vx10 master br1
187438a4f56SIdo Schimmel	bridge vlan add vid 10 dev vx10 pvid untagged
188438a4f56SIdo Schimmel
189438a4f56SIdo Schimmel	ip link add name vx20 type vxlan id 1020		\
190438a4f56SIdo Schimmel		local 10.0.0.1 remote 10.0.0.2 dstport 4789	\
191438a4f56SIdo Schimmel		nolearning noudpcsum tos inherit ttl 100
192438a4f56SIdo Schimmel	ip link set dev vx20 up
193438a4f56SIdo Schimmel
194438a4f56SIdo Schimmel	ip link set dev vx20 master br1
195438a4f56SIdo Schimmel	bridge vlan add vid 20 dev vx20 pvid untagged
196438a4f56SIdo Schimmel
197438a4f56SIdo Schimmel	ip link set dev $swp1 master br1
198438a4f56SIdo Schimmel	ip link set dev $swp1 up
199438a4f56SIdo Schimmel	bridge vlan add vid 10 dev $swp1 pvid untagged
200438a4f56SIdo Schimmel
201438a4f56SIdo Schimmel	ip link set dev $swp2 master br1
202438a4f56SIdo Schimmel	ip link set dev $swp2 up
203438a4f56SIdo Schimmel	bridge vlan add vid 20 dev $swp2 pvid untagged
204438a4f56SIdo Schimmel
205438a4f56SIdo Schimmel	ip link add name vx4001 type vxlan id 104001		\
206438a4f56SIdo Schimmel		local 10.0.0.1 dstport 4789			\
207438a4f56SIdo Schimmel		nolearning noudpcsum tos inherit ttl 100
208438a4f56SIdo Schimmel	ip link set dev vx4001 up
209438a4f56SIdo Schimmel
210438a4f56SIdo Schimmel	ip link set dev vx4001 master br1
211438a4f56SIdo Schimmel	bridge vlan add vid 4001 dev vx4001 pvid untagged
212438a4f56SIdo Schimmel
213438a4f56SIdo Schimmel	ip address add 10.0.0.1/32 dev lo
214438a4f56SIdo Schimmel
215438a4f56SIdo Schimmel	# Create SVIs
216438a4f56SIdo Schimmel	vrf_create "vrf-green"
217438a4f56SIdo Schimmel	ip link set dev vrf-green up
218438a4f56SIdo Schimmel
219438a4f56SIdo Schimmel	ip link add link br1 name vlan10 up master vrf-green type vlan id 10
220438a4f56SIdo Schimmel	ip address add 10.1.1.11/24 dev vlan10
221438a4f56SIdo Schimmel	ip link add link vlan10 name vlan10-v up master vrf-green \
222438a4f56SIdo Schimmel		address 00:00:5e:00:01:01 type macvlan mode private
223438a4f56SIdo Schimmel	ip address add 10.1.1.1/24 dev vlan10-v
224438a4f56SIdo Schimmel
225438a4f56SIdo Schimmel	ip link add link br1 name vlan20 up master vrf-green type vlan id 20
226438a4f56SIdo Schimmel	ip address add 10.1.2.11/24 dev vlan20
227438a4f56SIdo Schimmel	ip link add link vlan20 name vlan20-v up master vrf-green \
228438a4f56SIdo Schimmel		address 00:00:5e:00:01:01 type macvlan mode private
229438a4f56SIdo Schimmel	ip address add 10.1.2.1/24 dev vlan20-v
230438a4f56SIdo Schimmel
231438a4f56SIdo Schimmel	ip link add link br1 name vlan4001 up master vrf-green \
232438a4f56SIdo Schimmel		type vlan id 4001
233438a4f56SIdo Schimmel
234438a4f56SIdo Schimmel	bridge vlan add vid 10 dev br1 self
235438a4f56SIdo Schimmel	bridge vlan add vid 20 dev br1 self
236438a4f56SIdo Schimmel	bridge vlan add vid 4001 dev br1 self
237438a4f56SIdo Schimmel
238438a4f56SIdo Schimmel	bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 10
239438a4f56SIdo Schimmel	bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 20
240*71a0e29eSIdo Schimmel
241*71a0e29eSIdo Schimmel	sysctl_set net.ipv4.conf.all.rp_filter 0
242*71a0e29eSIdo Schimmel	sysctl_set net.ipv4.conf.vlan10-v.rp_filter 0
243*71a0e29eSIdo Schimmel	sysctl_set net.ipv4.conf.vlan20-v.rp_filter 0
244438a4f56SIdo Schimmel}
245438a4f56SIdo Schimmel
246438a4f56SIdo Schimmelswitch_destroy()
247438a4f56SIdo Schimmel{
248*71a0e29eSIdo Schimmel	sysctl_restore net.ipv4.conf.all.rp_filter
249*71a0e29eSIdo Schimmel
250438a4f56SIdo Schimmel	bridge fdb del 00:00:5e:00:01:01 dev br1 self local vlan 20
251438a4f56SIdo Schimmel	bridge fdb del 00:00:5e:00:01:01 dev br1 self local vlan 10
252438a4f56SIdo Schimmel
253438a4f56SIdo Schimmel	bridge vlan del vid 4001 dev br1 self
254438a4f56SIdo Schimmel	bridge vlan del vid 20 dev br1 self
255438a4f56SIdo Schimmel	bridge vlan del vid 10 dev br1 self
256438a4f56SIdo Schimmel
257438a4f56SIdo Schimmel	ip link del dev vlan4001
258438a4f56SIdo Schimmel
259438a4f56SIdo Schimmel	ip link del dev vlan20
260438a4f56SIdo Schimmel
261438a4f56SIdo Schimmel	ip link del dev vlan10
262438a4f56SIdo Schimmel
263438a4f56SIdo Schimmel	vrf_destroy "vrf-green"
264438a4f56SIdo Schimmel
265438a4f56SIdo Schimmel	ip address del 10.0.0.1/32 dev lo
266438a4f56SIdo Schimmel
267438a4f56SIdo Schimmel	bridge vlan del vid 20 dev $swp2
268438a4f56SIdo Schimmel	ip link set dev $swp2 down
269438a4f56SIdo Schimmel	ip link set dev $swp2 nomaster
270438a4f56SIdo Schimmel
271438a4f56SIdo Schimmel	bridge vlan del vid 10 dev $swp1
272438a4f56SIdo Schimmel	ip link set dev $swp1 down
273438a4f56SIdo Schimmel	ip link set dev $swp1 nomaster
274438a4f56SIdo Schimmel
275438a4f56SIdo Schimmel	bridge vlan del vid 4001 dev vx4001
276438a4f56SIdo Schimmel	ip link set dev vx4001 nomaster
277438a4f56SIdo Schimmel
278438a4f56SIdo Schimmel	ip link set dev vx4001 down
279438a4f56SIdo Schimmel	ip link del dev vx4001
280438a4f56SIdo Schimmel
281438a4f56SIdo Schimmel	bridge vlan del vid 20 dev vx20
282438a4f56SIdo Schimmel	ip link set dev vx20 nomaster
283438a4f56SIdo Schimmel
284438a4f56SIdo Schimmel	ip link set dev vx20 down
285438a4f56SIdo Schimmel	ip link del dev vx20
286438a4f56SIdo Schimmel
287438a4f56SIdo Schimmel	bridge vlan del vid 10 dev vx10
288438a4f56SIdo Schimmel	ip link set dev vx10 nomaster
289438a4f56SIdo Schimmel
290438a4f56SIdo Schimmel	ip link set dev vx10 down
291438a4f56SIdo Schimmel	ip link del dev vx10
292438a4f56SIdo Schimmel
293438a4f56SIdo Schimmel	ip route del 10.0.0.2/32 nexthop via 192.0.2.2
294438a4f56SIdo Schimmel	ip address del dev $rp1 192.0.2.1/24
295438a4f56SIdo Schimmel	ip link set dev $rp1 down
296438a4f56SIdo Schimmel
297438a4f56SIdo Schimmel	ip link set dev br1 down
298438a4f56SIdo Schimmel	ip link del dev br1
299438a4f56SIdo Schimmel}
300438a4f56SIdo Schimmel
301438a4f56SIdo Schimmelspine_create()
302438a4f56SIdo Schimmel{
303438a4f56SIdo Schimmel	vrf_create "vrf-spine"
304438a4f56SIdo Schimmel	ip link set dev $rp2 master vrf-spine
305438a4f56SIdo Schimmel	ip link set dev v1 master vrf-spine
306438a4f56SIdo Schimmel	ip link set dev vrf-spine up
307438a4f56SIdo Schimmel	ip link set dev $rp2 up
308438a4f56SIdo Schimmel	ip link set dev v1 up
309438a4f56SIdo Schimmel
310438a4f56SIdo Schimmel	ip address add 192.0.2.2/24 dev $rp2
311438a4f56SIdo Schimmel	ip address add 192.0.3.2/24 dev v1
312438a4f56SIdo Schimmel
313438a4f56SIdo Schimmel	ip route add 10.0.0.1/32 vrf vrf-spine nexthop via 192.0.2.1
314438a4f56SIdo Schimmel	ip route add 10.0.0.2/32 vrf vrf-spine nexthop via 192.0.3.1
315438a4f56SIdo Schimmel}
316438a4f56SIdo Schimmel
317438a4f56SIdo Schimmelspine_destroy()
318438a4f56SIdo Schimmel{
319438a4f56SIdo Schimmel	ip route del 10.0.0.2/32 vrf vrf-spine nexthop via 192.0.3.1
320438a4f56SIdo Schimmel	ip route del 10.0.0.1/32 vrf vrf-spine nexthop via 192.0.2.1
321438a4f56SIdo Schimmel
322438a4f56SIdo Schimmel	ip address del 192.0.3.2/24 dev v1
323438a4f56SIdo Schimmel	ip address del 192.0.2.2/24 dev $rp2
324438a4f56SIdo Schimmel
325438a4f56SIdo Schimmel	ip link set dev v1 down
326438a4f56SIdo Schimmel	ip link set dev $rp2 down
327438a4f56SIdo Schimmel	vrf_destroy "vrf-spine"
328438a4f56SIdo Schimmel}
329438a4f56SIdo Schimmel
330438a4f56SIdo Schimmelns_h1_create()
331438a4f56SIdo Schimmel{
332438a4f56SIdo Schimmel	hx_create "vrf-h1" w2 10.1.1.102 10.1.1.1
333438a4f56SIdo Schimmel}
334438a4f56SIdo Schimmelexport -f ns_h1_create
335438a4f56SIdo Schimmel
336438a4f56SIdo Schimmelns_h2_create()
337438a4f56SIdo Schimmel{
338438a4f56SIdo Schimmel	hx_create "vrf-h2" w4 10.1.2.102 10.1.2.1
339438a4f56SIdo Schimmel}
340438a4f56SIdo Schimmelexport -f ns_h2_create
341438a4f56SIdo Schimmel
342438a4f56SIdo Schimmelns_switch_create()
343438a4f56SIdo Schimmel{
344438a4f56SIdo Schimmel	ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 \
345438a4f56SIdo Schimmel		mcast_snooping 0
346438a4f56SIdo Schimmel	ip link set dev br1 up
347438a4f56SIdo Schimmel
348438a4f56SIdo Schimmel	ip link set dev v2 up
349438a4f56SIdo Schimmel	ip address add dev v2 192.0.3.1/24
350438a4f56SIdo Schimmel	ip route add 10.0.0.1/32 nexthop via 192.0.3.2
351438a4f56SIdo Schimmel
352438a4f56SIdo Schimmel	ip link add name vx10 type vxlan id 1010		\
353438a4f56SIdo Schimmel		local 10.0.0.2 remote 10.0.0.1 dstport 4789	\
354438a4f56SIdo Schimmel		nolearning noudpcsum tos inherit ttl 100
355438a4f56SIdo Schimmel	ip link set dev vx10 up
356438a4f56SIdo Schimmel
357438a4f56SIdo Schimmel	ip link set dev vx10 master br1
358438a4f56SIdo Schimmel	bridge vlan add vid 10 dev vx10 pvid untagged
359438a4f56SIdo Schimmel
360438a4f56SIdo Schimmel	ip link add name vx20 type vxlan id 1020		\
361438a4f56SIdo Schimmel		local 10.0.0.2 remote 10.0.0.1 dstport 4789	\
362438a4f56SIdo Schimmel		nolearning noudpcsum tos inherit ttl 100
363438a4f56SIdo Schimmel	ip link set dev vx20 up
364438a4f56SIdo Schimmel
365438a4f56SIdo Schimmel	ip link set dev vx20 master br1
366438a4f56SIdo Schimmel	bridge vlan add vid 20 dev vx20 pvid untagged
367438a4f56SIdo Schimmel
368438a4f56SIdo Schimmel	ip link add name vx4001 type vxlan id 104001		\
369438a4f56SIdo Schimmel		local 10.0.0.2 dstport 4789			\
370438a4f56SIdo Schimmel		nolearning noudpcsum tos inherit ttl 100
371438a4f56SIdo Schimmel	ip link set dev vx4001 up
372438a4f56SIdo Schimmel
373438a4f56SIdo Schimmel	ip link set dev vx4001 master br1
374438a4f56SIdo Schimmel	bridge vlan add vid 4001 dev vx4001 pvid untagged
375438a4f56SIdo Schimmel
376438a4f56SIdo Schimmel	ip link set dev w1 master br1
377438a4f56SIdo Schimmel	ip link set dev w1 up
378438a4f56SIdo Schimmel	bridge vlan add vid 10 dev w1 pvid untagged
379438a4f56SIdo Schimmel
380438a4f56SIdo Schimmel	ip link set dev w3 master br1
381438a4f56SIdo Schimmel	ip link set dev w3 up
382438a4f56SIdo Schimmel	bridge vlan add vid 20 dev w3 pvid untagged
383438a4f56SIdo Schimmel
384438a4f56SIdo Schimmel	ip address add 10.0.0.2/32 dev lo
385438a4f56SIdo Schimmel
386438a4f56SIdo Schimmel	# Create SVIs
387438a4f56SIdo Schimmel	vrf_create "vrf-green"
388438a4f56SIdo Schimmel	ip link set dev vrf-green up
389438a4f56SIdo Schimmel
390438a4f56SIdo Schimmel	ip link add link br1 name vlan10 up master vrf-green type vlan id 10
391438a4f56SIdo Schimmel	ip address add 10.1.1.12/24 dev vlan10
392438a4f56SIdo Schimmel	ip link add link vlan10 name vlan10-v up master vrf-green \
393438a4f56SIdo Schimmel		address 00:00:5e:00:01:01 type macvlan mode private
394438a4f56SIdo Schimmel	ip address add 10.1.1.1/24 dev vlan10-v
395438a4f56SIdo Schimmel
396438a4f56SIdo Schimmel	ip link add link br1 name vlan20 up master vrf-green type vlan id 20
397438a4f56SIdo Schimmel	ip address add 10.1.2.12/24 dev vlan20
398438a4f56SIdo Schimmel	ip link add link vlan20 name vlan20-v up master vrf-green \
399438a4f56SIdo Schimmel		address 00:00:5e:00:01:01 type macvlan mode private
400438a4f56SIdo Schimmel	ip address add 10.1.2.1/24 dev vlan20-v
401438a4f56SIdo Schimmel
402438a4f56SIdo Schimmel	ip link add link br1 name vlan4001 up master vrf-green \
403438a4f56SIdo Schimmel		type vlan id 4001
404438a4f56SIdo Schimmel
405438a4f56SIdo Schimmel	bridge vlan add vid 10 dev br1 self
406438a4f56SIdo Schimmel	bridge vlan add vid 20 dev br1 self
407438a4f56SIdo Schimmel	bridge vlan add vid 4001 dev br1 self
408438a4f56SIdo Schimmel
409438a4f56SIdo Schimmel	bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 10
410438a4f56SIdo Schimmel	bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 20
411*71a0e29eSIdo Schimmel
412*71a0e29eSIdo Schimmel	sysctl_set net.ipv4.conf.all.rp_filter 0
413*71a0e29eSIdo Schimmel	sysctl_set net.ipv4.conf.vlan10-v.rp_filter 0
414*71a0e29eSIdo Schimmel	sysctl_set net.ipv4.conf.vlan20-v.rp_filter 0
415438a4f56SIdo Schimmel}
416438a4f56SIdo Schimmelexport -f ns_switch_create
417438a4f56SIdo Schimmel
418438a4f56SIdo Schimmelns_init()
419438a4f56SIdo Schimmel{
420438a4f56SIdo Schimmel	ip link add name w1 type veth peer name w2
421438a4f56SIdo Schimmel	ip link add name w3 type veth peer name w4
422438a4f56SIdo Schimmel
423438a4f56SIdo Schimmel	ip link set dev lo up
424438a4f56SIdo Schimmel
425438a4f56SIdo Schimmel	ns_h1_create
426438a4f56SIdo Schimmel	ns_h2_create
427438a4f56SIdo Schimmel	ns_switch_create
428438a4f56SIdo Schimmel}
429438a4f56SIdo Schimmelexport -f ns_init
430438a4f56SIdo Schimmel
431438a4f56SIdo Schimmelns1_create()
432438a4f56SIdo Schimmel{
433438a4f56SIdo Schimmel	ip netns add ns1
434438a4f56SIdo Schimmel	ip link set dev v2 netns ns1
435438a4f56SIdo Schimmel	in_ns ns1 ns_init
436438a4f56SIdo Schimmel}
437438a4f56SIdo Schimmel
438438a4f56SIdo Schimmelns1_destroy()
439438a4f56SIdo Schimmel{
440438a4f56SIdo Schimmel	ip netns exec ns1 ip link set dev v2 netns 1
441438a4f56SIdo Schimmel	ip netns del ns1
442438a4f56SIdo Schimmel}
443438a4f56SIdo Schimmel
444438a4f56SIdo Schimmel__l2_vni_init()
445438a4f56SIdo Schimmel{
446438a4f56SIdo Schimmel	local mac1=$1; shift
447438a4f56SIdo Schimmel	local mac2=$1; shift
448438a4f56SIdo Schimmel	local ip1=$1; shift
449438a4f56SIdo Schimmel	local ip2=$1; shift
450438a4f56SIdo Schimmel	local dst=$1; shift
451438a4f56SIdo Schimmel
452438a4f56SIdo Schimmel	bridge fdb add $mac1 dev vx10 self master extern_learn static \
453438a4f56SIdo Schimmel		dst $dst vlan 10
454438a4f56SIdo Schimmel	bridge fdb add $mac2 dev vx20 self master extern_learn static \
455438a4f56SIdo Schimmel		dst $dst vlan 20
456438a4f56SIdo Schimmel
457438a4f56SIdo Schimmel	ip neigh add $ip1 lladdr $mac1 nud noarp dev vlan10 \
458438a4f56SIdo Schimmel		extern_learn
459438a4f56SIdo Schimmel	ip neigh add $ip2 lladdr $mac2 nud noarp dev vlan20 \
460438a4f56SIdo Schimmel		extern_learn
461438a4f56SIdo Schimmel}
462438a4f56SIdo Schimmelexport -f __l2_vni_init
463438a4f56SIdo Schimmel
464438a4f56SIdo Schimmell2_vni_init()
465438a4f56SIdo Schimmel{
466438a4f56SIdo Schimmel	local h1_ns_mac=$(in_ns ns1 mac_get w2)
467438a4f56SIdo Schimmel	local h2_ns_mac=$(in_ns ns1 mac_get w4)
468438a4f56SIdo Schimmel	local h1_mac=$(mac_get $h1)
469438a4f56SIdo Schimmel	local h2_mac=$(mac_get $h2)
470438a4f56SIdo Schimmel
471438a4f56SIdo Schimmel	__l2_vni_init $h1_ns_mac $h2_ns_mac 10.1.1.102 10.1.2.102 10.0.0.2
472438a4f56SIdo Schimmel	in_ns ns1 __l2_vni_init $h1_mac $h2_mac 10.1.1.101 10.1.2.101 10.0.0.1
473438a4f56SIdo Schimmel}
474438a4f56SIdo Schimmel
475438a4f56SIdo Schimmel__l3_vni_init()
476438a4f56SIdo Schimmel{
477438a4f56SIdo Schimmel	local mac=$1; shift
478438a4f56SIdo Schimmel	local vtep_ip=$1; shift
479438a4f56SIdo Schimmel	local host1_ip=$1; shift
480438a4f56SIdo Schimmel	local host2_ip=$1; shift
481438a4f56SIdo Schimmel
482438a4f56SIdo Schimmel	bridge fdb add $mac dev vx4001 self master extern_learn static \
483438a4f56SIdo Schimmel		dst $vtep_ip vlan 4001
484438a4f56SIdo Schimmel
485438a4f56SIdo Schimmel	ip neigh add $vtep_ip lladdr $mac nud noarp dev vlan4001 extern_learn
486438a4f56SIdo Schimmel
487438a4f56SIdo Schimmel	ip route add $host1_ip/32 vrf vrf-green nexthop via $vtep_ip \
488438a4f56SIdo Schimmel		dev vlan4001 onlink
489438a4f56SIdo Schimmel	ip route add $host2_ip/32 vrf vrf-green nexthop via $vtep_ip \
490438a4f56SIdo Schimmel		dev vlan4001 onlink
491438a4f56SIdo Schimmel}
492438a4f56SIdo Schimmelexport -f __l3_vni_init
493438a4f56SIdo Schimmel
494438a4f56SIdo Schimmell3_vni_init()
495438a4f56SIdo Schimmel{
496438a4f56SIdo Schimmel	local vlan4001_ns_mac=$(in_ns ns1 mac_get vlan4001)
497438a4f56SIdo Schimmel	local vlan4001_mac=$(mac_get vlan4001)
498438a4f56SIdo Schimmel
499438a4f56SIdo Schimmel	__l3_vni_init $vlan4001_ns_mac 10.0.0.2 10.1.1.102 10.1.2.102
500438a4f56SIdo Schimmel	in_ns ns1 __l3_vni_init $vlan4001_mac 10.0.0.1 10.1.1.101 10.1.2.101
501438a4f56SIdo Schimmel}
502438a4f56SIdo Schimmel
503438a4f56SIdo Schimmelsetup_prepare()
504438a4f56SIdo Schimmel{
505438a4f56SIdo Schimmel	h1=${NETIFS[p1]}
506438a4f56SIdo Schimmel	swp1=${NETIFS[p2]}
507438a4f56SIdo Schimmel
508438a4f56SIdo Schimmel	swp2=${NETIFS[p3]}
509438a4f56SIdo Schimmel	h2=${NETIFS[p4]}
510438a4f56SIdo Schimmel
511438a4f56SIdo Schimmel	rp1=${NETIFS[p5]}
512438a4f56SIdo Schimmel	rp2=${NETIFS[p6]}
513438a4f56SIdo Schimmel
514438a4f56SIdo Schimmel	vrf_prepare
515438a4f56SIdo Schimmel	forwarding_enable
516438a4f56SIdo Schimmel
517438a4f56SIdo Schimmel	h1_create
518438a4f56SIdo Schimmel	h2_create
519438a4f56SIdo Schimmel	switch_create
520438a4f56SIdo Schimmel
521438a4f56SIdo Schimmel	ip link add name v1 type veth peer name v2
522438a4f56SIdo Schimmel	spine_create
523438a4f56SIdo Schimmel	ns1_create
524438a4f56SIdo Schimmel
525438a4f56SIdo Schimmel	l2_vni_init
526438a4f56SIdo Schimmel	l3_vni_init
527438a4f56SIdo Schimmel}
528438a4f56SIdo Schimmel
529438a4f56SIdo Schimmelcleanup()
530438a4f56SIdo Schimmel{
531438a4f56SIdo Schimmel	pre_cleanup
532438a4f56SIdo Schimmel
533438a4f56SIdo Schimmel	ns1_destroy
534438a4f56SIdo Schimmel	spine_destroy
535438a4f56SIdo Schimmel	ip link del dev v1
536438a4f56SIdo Schimmel
537438a4f56SIdo Schimmel	switch_destroy
538438a4f56SIdo Schimmel	h2_destroy
539438a4f56SIdo Schimmel	h1_destroy
540438a4f56SIdo Schimmel
541438a4f56SIdo Schimmel	forwarding_restore
542438a4f56SIdo Schimmel	vrf_cleanup
543438a4f56SIdo Schimmel}
544438a4f56SIdo Schimmel
545438a4f56SIdo Schimmelping_ipv4()
546438a4f56SIdo Schimmel{
547438a4f56SIdo Schimmel	ping_test $h1 10.1.2.101 ": local->local vid 10->vid 20"
548438a4f56SIdo Schimmel	ping_test $h1 10.1.1.102 ": local->remote vid 10->vid 10"
549438a4f56SIdo Schimmel	ping_test $h2 10.1.2.102 ": local->remote vid 20->vid 20"
550438a4f56SIdo Schimmel	ping_test $h1 10.1.2.102 ": local->remote vid 10->vid 20"
551438a4f56SIdo Schimmel	ping_test $h2 10.1.1.102 ": local->remote vid 20->vid 10"
552438a4f56SIdo Schimmel}
553438a4f56SIdo Schimmel
554438a4f56SIdo Schimmeltrap cleanup EXIT
555438a4f56SIdo Schimmel
556438a4f56SIdo Schimmelsetup_prepare
557438a4f56SIdo Schimmelsetup_wait
558438a4f56SIdo Schimmel
559438a4f56SIdo Schimmeltests_run
560438a4f56SIdo Schimmel
561438a4f56SIdo Schimmelexit $EXIT_STATUS
562