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