1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3
4# +------------------------+                           +----------------------+
5# | H1 (vrf)               |                           |             H2 (vrf) |
6# |    + $h1               |                           |  + $h2               |
7# |    | 192.0.2.1/28      |                           |  | 192.0.2.130/28    |
8# |    | 2001:db8:1::1/64  |                           |  | 2001:db8:2::2/64  |
9# |    |                   |                           |  |                   |
10# +----|-------------------+                           +--|-------------------+
11#      |                                                  |
12# +----|--------------------------------------------------|-------------------+
13# | SW |                                                  |                   |
14# | +--|-----------------------------+                    + $swp2             |
15# | |  + $swp1      BR1 (802.1q)     |                      192.0.2.129/28    |
16# | |               192.0.2.2/28     |                      2001:db8:2::1/64  |
17# | |               2001:db8:1::1/64 |                                        |
18# | |                                |                                        |
19# | +--------------------------------+                                        |
20# +---------------------------------------------------------------------------+
21
22ALL_TESTS="
23	ping_ipv4
24	ping_ipv6
25	config_remove_pvid
26	ping_ipv4_fails
27	ping_ipv6_fails
28	config_add_pvid
29	ping_ipv4
30	ping_ipv6
31"
32NUM_NETIFS=4
33source lib.sh
34
35h1_create()
36{
37	simple_if_init $h1 192.0.2.1/28 2001:db8:1::1/64
38	ip -4 route add 192.0.2.128/28 vrf v$h1 nexthop via 192.0.2.2
39	ip -6 route add 2001:db8:2::/64 vrf v$h1 nexthop via 2001:db8:1::2
40}
41
42h1_destroy()
43{
44	ip -6 route del 2001:db8:2::/64 vrf v$h1
45	ip -4 route del 192.0.2.128/28 vrf v$h1
46	simple_if_fini $h1 192.0.2.1/28 2001:db8:1::1/64
47}
48
49h2_create()
50{
51	simple_if_init $h2 192.0.2.130/28 2001:db8:2::2/64
52	ip -4 route add 192.0.2.0/28 vrf v$h2 nexthop via 192.0.2.129
53	ip -6 route add 2001:db8:1::/64 vrf v$h2 nexthop via 2001:db8:2::1
54}
55
56h2_destroy()
57{
58	ip -6 route del 2001:db8:1::/64 vrf v$h2
59	ip -4 route del 192.0.2.0/28 vrf v$h2
60	simple_if_fini $h2 192.0.2.130/28 2001:db8:2::2/64
61}
62
63router_create()
64{
65	ip link add name br1 address $(mac_get $swp1) \
66		type bridge vlan_filtering 1
67	ip link set dev br1 up
68
69	ip link set dev $swp1 master br1
70	ip link set dev $swp1 up
71	__addr_add_del br1 add 192.0.2.2/28 2001:db8:1::2/64
72
73	ip link set dev $swp2 up
74	__addr_add_del $swp2 add 192.0.2.129/28 2001:db8:2::1/64
75}
76
77router_destroy()
78{
79	__addr_add_del $swp2 del 192.0.2.129/28 2001:db8:2::1/64
80	ip link set dev $swp2 down
81
82	__addr_add_del br1 del 192.0.2.2/28 2001:db8:1::2/64
83	ip link set dev $swp1 down
84	ip link set dev $swp1 nomaster
85
86	ip link del dev br1
87}
88
89config_remove_pvid()
90{
91	log_info "Remove PVID from the bridge"
92
93	bridge vlan add dev br1 vid 1 self
94	sleep 2
95}
96
97config_add_pvid()
98{
99	log_info "Add PVID to the bridge"
100
101	bridge vlan add dev br1 vid 1 self pvid untagged
102	sleep 2
103}
104
105setup_prepare()
106{
107	h1=${NETIFS[p1]}
108	swp1=${NETIFS[p2]}
109
110	swp2=${NETIFS[p3]}
111	h2=${NETIFS[p4]}
112
113	vrf_prepare
114
115	h1_create
116	h2_create
117
118	router_create
119
120	forwarding_enable
121}
122
123cleanup()
124{
125	pre_cleanup
126
127	forwarding_restore
128
129	router_destroy
130
131	h2_destroy
132	h1_destroy
133
134	vrf_cleanup
135}
136
137ping_ipv4()
138{
139	ping_test $h1 192.0.2.130
140}
141
142ping_ipv6()
143{
144	ping6_test $h1 2001:db8:2::2
145}
146
147ping_ipv4_fails()
148{
149	ping_test_fails $h1 192.0.2.130
150}
151
152ping_ipv6_fails()
153{
154	ping6_test_fails $h1 2001:db8:2::2
155}
156
157trap cleanup EXIT
158
159setup_prepare
160setup_wait
161
162tests_run
163
164exit $EXIT_STATUS
165