1176730Sjeff#!/bin/bash 2176730Sjeff# SPDX-License-Identifier: GPL-2.0 3176730Sjeff 4176730Sjeff# +------------------------------------------------+ +----------------------+ 5176730Sjeff# | H1 (vrf) | | H2 (vrf) | 6176730Sjeff# | + $h1.555 + $h1.777 | | + $h2 | 7176730Sjeff# | | 192.0.2.1/28 | 192.0.2.17/28 | | | 192.0.2.130/28 | 8176730Sjeff# | | 2001:db8:1::1/64 | 2001:db8:3::1/64 | | | 192.0.2.146/28 | 9176730Sjeff# | | .-----------------' | | | 2001:db8:2::2/64 | 10176730Sjeff# | |/ | | | 2001:db8:4::2/64 | 11176730Sjeff# | + $h1 | | | | 12176730Sjeff# +----|-------------------------------------------+ +--|-------------------+ 13176730Sjeff# | | 14176730Sjeff# +----|--------------------------------------------------|-------------------+ 15176730Sjeff# | SW | | | 16176730Sjeff# | +--|-------------------------------+ + $swp2 | 17176730Sjeff# | | + $swp1 | 192.0.2.129/28 | 18176730Sjeff# | | vid 555 777 | 192.0.2.145/28 | 19176730Sjeff# | | | 2001:db8:2::1/64 | 20176730Sjeff# | | + BR1 (802.1q) | 2001:db8:4::1/64 | 21176730Sjeff# | | vid 555 pvid untagged | | 22176730Sjeff# | | 192.0.2.2/28 | | 23176730Sjeff# | | 192.0.2.18/28 | | 24176730Sjeff# | | 2001:db8:1::2/64 | | 25176730Sjeff# | | 2001:db8:3::2/64 | | 26176730Sjeff# | +----------------------------------+ | 27176730Sjeff# +---------------------------------------------------------------------------+ 28176730Sjeff 29176730SjeffALL_TESTS=" 30176730Sjeff ping_ipv4 31176730Sjeff ping_ipv6 32176730Sjeff vlan 33176730Sjeff config_777 34176730Sjeff ping_ipv4_fails 35176730Sjeff ping_ipv6_fails 36176730Sjeff ping_ipv4_777 37176730Sjeff ping_ipv6_777 38176730Sjeff config_555 39176730Sjeff ping_ipv4 40176730Sjeff ping_ipv6 41176730Sjeff" 42176730SjeffNUM_NETIFS=4 43176730Sjeffsource lib.sh 44176730Sjeff 45176730Sjeffh1_create() 46176730Sjeff{ 47176730Sjeff simple_if_init $h1 48176730Sjeff 49177738Sjeff vlan_create $h1 555 v$h1 192.0.2.1/28 2001:db8:1::1/64 50177738Sjeff ip -4 route add 192.0.2.128/28 vrf v$h1 nexthop via 192.0.2.2 51176730Sjeff ip -6 route add 2001:db8:2::/64 vrf v$h1 nexthop via 2001:db8:1::2 52176730Sjeff 53176730Sjeff vlan_create $h1 777 v$h1 192.0.2.17/28 2001:db8:3::1/64 54176730Sjeff ip -4 route add 192.0.2.144/28 vrf v$h1 nexthop via 192.0.2.18 55176730Sjeff ip -6 route add 2001:db8:4::/64 vrf v$h1 nexthop via 2001:db8:3::2 56176730Sjeff} 57176730Sjeff 58176730Sjeffh1_destroy() 59176730Sjeff{ 60176730Sjeff ip -6 route del 2001:db8:4::/64 vrf v$h1 61176730Sjeff ip -4 route del 192.0.2.144/28 vrf v$h1 62176730Sjeff vlan_destroy $h1 777 63176730Sjeff 64176730Sjeff ip -6 route del 2001:db8:2::/64 vrf v$h1 65176730Sjeff ip -4 route del 192.0.2.128/28 vrf v$h1 66176730Sjeff vlan_destroy $h1 555 67176730Sjeff 68176730Sjeff simple_if_fini $h1 69176730Sjeff} 70176730Sjeff 71176730Sjeffh2_create() 72176730Sjeff{ 73176730Sjeff simple_if_init $h2 192.0.2.130/28 2001:db8:2::2/64 \ 74176730Sjeff 192.0.2.146/28 2001:db8:4::2/64 75176730Sjeff ip -4 route add 192.0.2.0/28 vrf v$h2 nexthop via 192.0.2.129 76176730Sjeff ip -4 route add 192.0.2.16/28 vrf v$h2 nexthop via 192.0.2.145 77176730Sjeff ip -6 route add 2001:db8:1::/64 vrf v$h2 nexthop via 2001:db8:2::1 78176730Sjeff ip -6 route add 2001:db8:3::/64 vrf v$h2 nexthop via 2001:db8:4::1 79176730Sjeff} 80176730Sjeff 81176730Sjeffh2_destroy() 82176730Sjeff{ 83176730Sjeff ip -6 route del 2001:db8:3::/64 vrf v$h2 84176730Sjeff ip -6 route del 2001:db8:1::/64 vrf v$h2 85176730Sjeff ip -4 route del 192.0.2.16/28 vrf v$h2 86176730Sjeff ip -4 route del 192.0.2.0/28 vrf v$h2 87176730Sjeff simple_if_fini $h2 192.0.2.146/28 2001:db8:4::2/64 \ 88176730Sjeff 192.0.2.130/28 2001:db8:2::2/64 89176730Sjeff} 90176730Sjeff 91176730Sjeffrouter_create() 92176730Sjeff{ 93176730Sjeff ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 94176730Sjeff ip link set dev br1 up 95176730Sjeff 96176730Sjeff ip link set dev $swp1 master br1 97176730Sjeff ip link set dev $swp1 up 98176730Sjeff 99177738Sjeff bridge vlan add dev br1 vid 555 self pvid untagged 100176730Sjeff bridge vlan add dev $swp1 vid 555 101177738Sjeff bridge vlan add dev $swp1 vid 777 102177738Sjeff 103176730Sjeff __addr_add_del br1 add 192.0.2.2/28 2001:db8:1::2/64 104176730Sjeff __addr_add_del br1 add 192.0.2.18/28 2001:db8:3::2/64 105176730Sjeff 106176730Sjeff ip link set dev $swp2 up 107176730Sjeff __addr_add_del $swp2 add 192.0.2.129/28 2001:db8:2::1/64 108176730Sjeff __addr_add_del $swp2 add 192.0.2.145/28 2001:db8:4::1/64 109176730Sjeff} 110176730Sjeff 111176730Sjeffrouter_destroy() 112176730Sjeff{ 113176730Sjeff __addr_add_del $swp2 del 192.0.2.145/28 2001:db8:4::1/64 114176730Sjeff __addr_add_del $swp2 del 192.0.2.129/28 2001:db8:2::1/64 115176730Sjeff ip link set dev $swp2 down 116176730Sjeff 117176730Sjeff __addr_add_del br1 del 192.0.2.18/28 2001:db8:3::2/64 118176730Sjeff __addr_add_del br1 del 192.0.2.2/28 2001:db8:1::2/64 119176730Sjeff ip link set dev $swp1 down 120176730Sjeff ip link set dev $swp1 nomaster 121176730Sjeff 122176730Sjeff ip link del dev br1 123176730Sjeff} 124176730Sjeff 125176730Sjeffsetup_prepare() 126176730Sjeff{ 127176730Sjeff h1=${NETIFS[p1]} 128176730Sjeff swp1=${NETIFS[p2]} 129176730Sjeff 130176730Sjeff swp2=${NETIFS[p3]} 131176730Sjeff h2=${NETIFS[p4]} 132176730Sjeff 133176730Sjeff vrf_prepare 134176730Sjeff 135176730Sjeff h1_create 136176730Sjeff h2_create 137176730Sjeff 138176730Sjeff router_create 139176730Sjeff 140176730Sjeff forwarding_enable 141176730Sjeff} 142176730Sjeff 143176730Sjeffconfig_555() 144176730Sjeff{ 145176730Sjeff log_info "Configure VLAN 555 as PVID" 146176730Sjeff 147176730Sjeff bridge vlan add dev br1 vid 555 self pvid untagged 148176730Sjeff bridge vlan del dev br1 vid 777 self 149176730Sjeff sleep 2 150176730Sjeff} 151176730Sjeff 152176730Sjeffconfig_777() 153176730Sjeff{ 154176730Sjeff log_info "Configure VLAN 777 as PVID" 155176730Sjeff 156176730Sjeff bridge vlan add dev br1 vid 777 self pvid untagged 157176730Sjeff bridge vlan del dev br1 vid 555 self 158176730Sjeff sleep 2 159176730Sjeff} 160176730Sjeff 161176730Sjeffcleanup() 162176730Sjeff{ 163176730Sjeff pre_cleanup 164176730Sjeff 165176730Sjeff forwarding_restore 166176730Sjeff 167176730Sjeff router_destroy 168176730Sjeff 169176730Sjeff h2_destroy 170176730Sjeff h1_destroy 171176730Sjeff 172176730Sjeff vrf_cleanup 173176730Sjeff} 174176730Sjeff 175176730Sjeffvlan() 176176730Sjeff{ 177176730Sjeff RET=0 178176730Sjeff 179176730Sjeff bridge vlan add dev br1 vid 333 self 180176730Sjeff check_err $? "Can't add a non-PVID VLAN" 181176730Sjeff bridge vlan del dev br1 vid 333 self 182176730Sjeff check_err $? "Can't remove a non-PVID VLAN" 183176730Sjeff 184176730Sjeff log_test "vlan" 185176730Sjeff} 186176730Sjeff 187176730Sjeffping_ipv4() 188176730Sjeff{ 189176730Sjeff ping_test $h1.555 192.0.2.130 190176730Sjeff} 191176730Sjeff 192176730Sjeffping_ipv6() 193176730Sjeff{ 194176730Sjeff ping6_test $h1.555 2001:db8:2::2 195176730Sjeff} 196176811Sjeff 197176811Sjeffping_ipv4_fails() 198176730Sjeff{ 199176730Sjeff ping_test_fails $h1.555 192.0.2.130 ": via 555" 200176730Sjeff} 201176730Sjeff 202176730Sjeffping_ipv6_fails() 203176730Sjeff{ 204176811Sjeff ping6_test_fails $h1.555 2001:db8:2::2 ": via 555" 205176811Sjeff} 206176811Sjeff 207176811Sjeffping_ipv4_777() 208176811Sjeff{ 209176730Sjeff ping_test $h1.777 192.0.2.146 ": via 777" 210176730Sjeff} 211176811Sjeff 212176730Sjeffping_ipv6_777() 213176730Sjeff{ 214176730Sjeff ping6_test $h1.777 2001:db8:4::2 ": via 777" 215176730Sjeff} 216176730Sjeff 217176730Sjefftrap cleanup EXIT 218176730Sjeff 219176730Sjeffsetup_prepare 220176730Sjeffsetup_wait 221176730Sjeff 222176730Sjefftests_run 223176730Sjeff 224176730Sjeffexit $EXIT_STATUS 225176730Sjeff