15b1e7f9eSPetr Machata#!/bin/bash
25b1e7f9eSPetr Machata# SPDX-License-Identifier: GPL-2.0
35b1e7f9eSPetr Machata
4c7203a29SPetr Machata# +------------------------+                           +----------------------+
5c7203a29SPetr Machata# | H1 (vrf)               |                           |             H2 (vrf) |
6c7203a29SPetr Machata# |    + $h1               |                           |  + $h2               |
7c7203a29SPetr Machata# |    | 192.0.2.1/28      |                           |  | 192.0.2.130/28    |
8c7203a29SPetr Machata# |    | 2001:db8:1::1/64  |                           |  | 2001:db8:2::2/64  |
9c7203a29SPetr Machata# |    |                   |                           |  |                   |
10c7203a29SPetr Machata# +----|-------------------+                           +--|-------------------+
11c7203a29SPetr Machata#      |                                                  |
12c7203a29SPetr Machata# +----|--------------------------------------------------|-------------------+
13c7203a29SPetr Machata# | SW |                                                  |                   |
14c7203a29SPetr Machata# | +--|-----------------------------+                    + $swp2             |
15c7203a29SPetr Machata# | |  + $swp1      BR1 (802.1q)     |                      192.0.2.129/28    |
16c7203a29SPetr Machata# | |               192.0.2.2/28     |                      2001:db8:2::1/64  |
17c7203a29SPetr Machata# | |               2001:db8:1::1/64 |                                        |
18c7203a29SPetr Machata# | |                                |                                        |
19c7203a29SPetr Machata# | +--------------------------------+                                        |
20c7203a29SPetr Machata# +---------------------------------------------------------------------------+
21c7203a29SPetr Machata
225b1e7f9eSPetr MachataALL_TESTS="
235b1e7f9eSPetr Machata	ping_ipv4
245b1e7f9eSPetr Machata	ping_ipv6
25*eb138855SPetr Machata	config_remaster
26*eb138855SPetr Machata	ping_ipv4
27*eb138855SPetr Machata	ping_ipv6
28c7203a29SPetr Machata	config_remove_pvid
29c7203a29SPetr Machata	ping_ipv4_fails
30c7203a29SPetr Machata	ping_ipv6_fails
31c7203a29SPetr Machata	config_add_pvid
32c7203a29SPetr Machata	ping_ipv4
33c7203a29SPetr Machata	ping_ipv6
34*eb138855SPetr Machata	config_late_pvid
35*eb138855SPetr Machata	ping_ipv4
36*eb138855SPetr Machata	ping_ipv6
375b1e7f9eSPetr Machata"
385b1e7f9eSPetr MachataNUM_NETIFS=4
395b1e7f9eSPetr Machatasource lib.sh
405b1e7f9eSPetr Machata
415b1e7f9eSPetr Machatah1_create()
425b1e7f9eSPetr Machata{
435b1e7f9eSPetr Machata	simple_if_init $h1 192.0.2.1/28 2001:db8:1::1/64
445b1e7f9eSPetr Machata	ip -4 route add 192.0.2.128/28 vrf v$h1 nexthop via 192.0.2.2
455b1e7f9eSPetr Machata	ip -6 route add 2001:db8:2::/64 vrf v$h1 nexthop via 2001:db8:1::2
465b1e7f9eSPetr Machata}
475b1e7f9eSPetr Machata
485b1e7f9eSPetr Machatah1_destroy()
495b1e7f9eSPetr Machata{
505b1e7f9eSPetr Machata	ip -6 route del 2001:db8:2::/64 vrf v$h1
515b1e7f9eSPetr Machata	ip -4 route del 192.0.2.128/28 vrf v$h1
525b1e7f9eSPetr Machata	simple_if_fini $h1 192.0.2.1/28 2001:db8:1::1/64
535b1e7f9eSPetr Machata}
545b1e7f9eSPetr Machata
555b1e7f9eSPetr Machatah2_create()
565b1e7f9eSPetr Machata{
575b1e7f9eSPetr Machata	simple_if_init $h2 192.0.2.130/28 2001:db8:2::2/64
585b1e7f9eSPetr Machata	ip -4 route add 192.0.2.0/28 vrf v$h2 nexthop via 192.0.2.129
595b1e7f9eSPetr Machata	ip -6 route add 2001:db8:1::/64 vrf v$h2 nexthop via 2001:db8:2::1
605b1e7f9eSPetr Machata}
615b1e7f9eSPetr Machata
625b1e7f9eSPetr Machatah2_destroy()
635b1e7f9eSPetr Machata{
645b1e7f9eSPetr Machata	ip -6 route del 2001:db8:1::/64 vrf v$h2
655b1e7f9eSPetr Machata	ip -4 route del 192.0.2.0/28 vrf v$h2
665b1e7f9eSPetr Machata	simple_if_fini $h2 192.0.2.130/28 2001:db8:2::2/64
675b1e7f9eSPetr Machata}
685b1e7f9eSPetr Machata
695b1e7f9eSPetr Machatarouter_create()
705b1e7f9eSPetr Machata{
715e71bf50SPetr Machata	ip link add name br1 address $(mac_get $swp1) \
725e71bf50SPetr Machata		type bridge vlan_filtering 1
735b1e7f9eSPetr Machata	ip link set dev br1 up
745b1e7f9eSPetr Machata
755b1e7f9eSPetr Machata	ip link set dev $swp1 master br1
765b1e7f9eSPetr Machata	ip link set dev $swp1 up
775b1e7f9eSPetr Machata	__addr_add_del br1 add 192.0.2.2/28 2001:db8:1::2/64
785b1e7f9eSPetr Machata
795b1e7f9eSPetr Machata	ip link set dev $swp2 up
805b1e7f9eSPetr Machata	__addr_add_del $swp2 add 192.0.2.129/28 2001:db8:2::1/64
815b1e7f9eSPetr Machata}
825b1e7f9eSPetr Machata
835b1e7f9eSPetr Machatarouter_destroy()
845b1e7f9eSPetr Machata{
855b1e7f9eSPetr Machata	__addr_add_del $swp2 del 192.0.2.129/28 2001:db8:2::1/64
865b1e7f9eSPetr Machata	ip link set dev $swp2 down
875b1e7f9eSPetr Machata
885b1e7f9eSPetr Machata	__addr_add_del br1 del 192.0.2.2/28 2001:db8:1::2/64
895b1e7f9eSPetr Machata	ip link set dev $swp1 down
905b1e7f9eSPetr Machata	ip link set dev $swp1 nomaster
915b1e7f9eSPetr Machata
925b1e7f9eSPetr Machata	ip link del dev br1
935b1e7f9eSPetr Machata}
945b1e7f9eSPetr Machata
95*eb138855SPetr Machataconfig_remaster()
96*eb138855SPetr Machata{
97*eb138855SPetr Machata	log_info "Remaster bridge slave"
98*eb138855SPetr Machata
99*eb138855SPetr Machata	ip link set dev $swp1 nomaster
100*eb138855SPetr Machata	sleep 2
101*eb138855SPetr Machata	ip link set dev $swp1 master br1
102*eb138855SPetr Machata}
103*eb138855SPetr Machata
104c7203a29SPetr Machataconfig_remove_pvid()
105c7203a29SPetr Machata{
106c7203a29SPetr Machata	log_info "Remove PVID from the bridge"
107c7203a29SPetr Machata
108c7203a29SPetr Machata	bridge vlan add dev br1 vid 1 self
109c7203a29SPetr Machata	sleep 2
110c7203a29SPetr Machata}
111c7203a29SPetr Machata
112c7203a29SPetr Machataconfig_add_pvid()
113c7203a29SPetr Machata{
114c7203a29SPetr Machata	log_info "Add PVID to the bridge"
115c7203a29SPetr Machata
116c7203a29SPetr Machata	bridge vlan add dev br1 vid 1 self pvid untagged
117c7203a29SPetr Machata	sleep 2
118c7203a29SPetr Machata}
119c7203a29SPetr Machata
120*eb138855SPetr Machataconfig_late_pvid()
121*eb138855SPetr Machata{
122*eb138855SPetr Machata	log_info "Add bridge PVID after enslaving port"
123*eb138855SPetr Machata
124*eb138855SPetr Machata	ip link set dev $swp1 nomaster
125*eb138855SPetr Machata	ip link set dev br1 type bridge vlan_default_pvid 0
126*eb138855SPetr Machata	sleep 2
127*eb138855SPetr Machata	ip link set dev $swp1 master br1
128*eb138855SPetr Machata	ip link set dev br1 type bridge vlan_default_pvid 1
129*eb138855SPetr Machata}
130*eb138855SPetr Machata
1315b1e7f9eSPetr Machatasetup_prepare()
1325b1e7f9eSPetr Machata{
1335b1e7f9eSPetr Machata	h1=${NETIFS[p1]}
1345b1e7f9eSPetr Machata	swp1=${NETIFS[p2]}
1355b1e7f9eSPetr Machata
1365b1e7f9eSPetr Machata	swp2=${NETIFS[p3]}
1375b1e7f9eSPetr Machata	h2=${NETIFS[p4]}
1385b1e7f9eSPetr Machata
1395b1e7f9eSPetr Machata	vrf_prepare
1405b1e7f9eSPetr Machata
1415b1e7f9eSPetr Machata	h1_create
1425b1e7f9eSPetr Machata	h2_create
1435b1e7f9eSPetr Machata
1445b1e7f9eSPetr Machata	router_create
1455b1e7f9eSPetr Machata
1465b1e7f9eSPetr Machata	forwarding_enable
1475b1e7f9eSPetr Machata}
1485b1e7f9eSPetr Machata
1495b1e7f9eSPetr Machatacleanup()
1505b1e7f9eSPetr Machata{
1515b1e7f9eSPetr Machata	pre_cleanup
1525b1e7f9eSPetr Machata
1535b1e7f9eSPetr Machata	forwarding_restore
1545b1e7f9eSPetr Machata
1555b1e7f9eSPetr Machata	router_destroy
1565b1e7f9eSPetr Machata
1575b1e7f9eSPetr Machata	h2_destroy
1585b1e7f9eSPetr Machata	h1_destroy
1595b1e7f9eSPetr Machata
1605b1e7f9eSPetr Machata	vrf_cleanup
1615b1e7f9eSPetr Machata}
1625b1e7f9eSPetr Machata
1635b1e7f9eSPetr Machataping_ipv4()
1645b1e7f9eSPetr Machata{
1655b1e7f9eSPetr Machata	ping_test $h1 192.0.2.130
1665b1e7f9eSPetr Machata}
1675b1e7f9eSPetr Machata
1685b1e7f9eSPetr Machataping_ipv6()
1695b1e7f9eSPetr Machata{
1705b1e7f9eSPetr Machata	ping6_test $h1 2001:db8:2::2
1715b1e7f9eSPetr Machata}
1725b1e7f9eSPetr Machata
173c7203a29SPetr Machataping_ipv4_fails()
174c7203a29SPetr Machata{
175c7203a29SPetr Machata	ping_test_fails $h1 192.0.2.130
176c7203a29SPetr Machata}
177c7203a29SPetr Machata
178c7203a29SPetr Machataping_ipv6_fails()
179c7203a29SPetr Machata{
180c7203a29SPetr Machata	ping6_test_fails $h1 2001:db8:2::2
181c7203a29SPetr Machata}
182c7203a29SPetr Machata
1835b1e7f9eSPetr Machatatrap cleanup EXIT
1845b1e7f9eSPetr Machata
1855b1e7f9eSPetr Machatasetup_prepare
1865b1e7f9eSPetr Machatasetup_wait
1875b1e7f9eSPetr Machata
1885b1e7f9eSPetr Machatatests_run
1895b1e7f9eSPetr Machata
1905b1e7f9eSPetr Machataexit $EXIT_STATUS
191