1*9cbb3da4SPetr Machata#!/bin/bash 2*9cbb3da4SPetr Machata# SPDX-License-Identifier: GPL-2.0 3*9cbb3da4SPetr Machata 4*9cbb3da4SPetr Machata# +----------------------------+ 5*9cbb3da4SPetr Machata# | H1 (vrf) | 6*9cbb3da4SPetr Machata# | + $h1.10 | +----------------------+ 7*9cbb3da4SPetr Machata# | | 192.0.2.1/28 | | H2 (vrf) | 8*9cbb3da4SPetr Machata# | | 2001:db8:1::1/64 | | + $h2 | 9*9cbb3da4SPetr Machata# | | | | | 192.0.2.130/28 | 10*9cbb3da4SPetr Machata# | + $h1 | | | 2001:db8:2::2/64 | 11*9cbb3da4SPetr Machata# +---|------------------------+ +--|-------------------+ 12*9cbb3da4SPetr Machata# | | 13*9cbb3da4SPetr Machata# +---|--------------------------------------------------|-------------------+ 14*9cbb3da4SPetr Machata# | | router (main VRF) | | 15*9cbb3da4SPetr Machata# | +-|----------------------------------+ + $swp2 | 16*9cbb3da4SPetr Machata# | | + $swp1 BR1 (802.1q, pvid=10) | 192.0.2.129/28 | 17*9cbb3da4SPetr Machata# | | 192.0.2.2/28 | 2001:db8:2::1/64 | 18*9cbb3da4SPetr Machata# | | 2001:db8:1::2/64 | | 19*9cbb3da4SPetr Machata# | +------------------------------------+ | 20*9cbb3da4SPetr Machata# +--------------------------------------------------------------------------+ 21*9cbb3da4SPetr Machata 22*9cbb3da4SPetr MachataALL_TESTS=" 23*9cbb3da4SPetr Machata ping_ipv4 24*9cbb3da4SPetr Machata ping_ipv6 25*9cbb3da4SPetr Machata shuffle_pvid 26*9cbb3da4SPetr Machata ping_ipv4 27*9cbb3da4SPetr Machata ping_ipv6 28*9cbb3da4SPetr Machata" 29*9cbb3da4SPetr MachataNUM_NETIFS=4 30*9cbb3da4SPetr Machatasource lib.sh 31*9cbb3da4SPetr Machata 32*9cbb3da4SPetr Machatah1_create() 33*9cbb3da4SPetr Machata{ 34*9cbb3da4SPetr Machata simple_if_init $h1 35*9cbb3da4SPetr Machata vlan_create $h1 10 v$h1 192.0.2.1/28 2001:db8:1::1/64 36*9cbb3da4SPetr Machata ip -4 route add 192.0.2.128/28 vrf v$h1 nexthop via 192.0.2.2 37*9cbb3da4SPetr Machata ip -6 route add 2001:db8:2::/64 vrf v$h1 nexthop via 2001:db8:1::2 38*9cbb3da4SPetr Machata} 39*9cbb3da4SPetr Machata 40*9cbb3da4SPetr Machatah1_destroy() 41*9cbb3da4SPetr Machata{ 42*9cbb3da4SPetr Machata ip -6 route del 2001:db8:2::/64 vrf v$h1 43*9cbb3da4SPetr Machata ip -4 route del 192.0.2.128/28 vrf v$h1 44*9cbb3da4SPetr Machata vlan_destroy $h1 10 45*9cbb3da4SPetr Machata simple_if_fini $h1 46*9cbb3da4SPetr Machata} 47*9cbb3da4SPetr Machata 48*9cbb3da4SPetr Machatah2_create() 49*9cbb3da4SPetr Machata{ 50*9cbb3da4SPetr Machata simple_if_init $h2 192.0.2.130/28 2001:db8:2::2/64 51*9cbb3da4SPetr Machata ip -4 route add 192.0.2.0/28 vrf v$h2 nexthop via 192.0.2.129 52*9cbb3da4SPetr Machata ip -6 route add 2001:db8:1::/64 vrf v$h2 nexthop via 2001:db8:2::1 53*9cbb3da4SPetr Machata} 54*9cbb3da4SPetr Machata 55*9cbb3da4SPetr Machatah2_destroy() 56*9cbb3da4SPetr Machata{ 57*9cbb3da4SPetr Machata ip -6 route del 2001:db8:1::/64 vrf v$h2 58*9cbb3da4SPetr Machata ip -4 route del 192.0.2.0/28 vrf v$h2 59*9cbb3da4SPetr Machata simple_if_fini $h2 192.0.2.130/28 2001:db8:2::2/64 60*9cbb3da4SPetr Machata} 61*9cbb3da4SPetr Machata 62*9cbb3da4SPetr Machatarouter_create() 63*9cbb3da4SPetr Machata{ 64*9cbb3da4SPetr Machata ip link add name br1 address $(mac_get $swp1) \ 65*9cbb3da4SPetr Machata type bridge vlan_filtering 1 vlan_default_pvid 0 66*9cbb3da4SPetr Machata ip link set dev br1 up 67*9cbb3da4SPetr Machata __addr_add_del br1 add 192.0.2.2/28 2001:db8:1::2/64 68*9cbb3da4SPetr Machata 69*9cbb3da4SPetr Machata ip link set dev $swp1 master br1 70*9cbb3da4SPetr Machata ip link set dev $swp1 up 71*9cbb3da4SPetr Machata 72*9cbb3da4SPetr Machata ip link set dev $swp2 up 73*9cbb3da4SPetr Machata __addr_add_del $swp2 add 192.0.2.129/28 2001:db8:2::1/64 74*9cbb3da4SPetr Machata 75*9cbb3da4SPetr Machata bridge vlan add dev br1 vid 10 pvid untagged self 76*9cbb3da4SPetr Machata bridge vlan add dev $swp1 vid 10 77*9cbb3da4SPetr Machata} 78*9cbb3da4SPetr Machata 79*9cbb3da4SPetr Machatarouter_destroy() 80*9cbb3da4SPetr Machata{ 81*9cbb3da4SPetr Machata bridge vlan del dev $swp1 vid 10 82*9cbb3da4SPetr Machata bridge vlan del dev br1 vid 10 self 83*9cbb3da4SPetr Machata 84*9cbb3da4SPetr Machata __addr_add_del $swp2 del 192.0.2.129/28 2001:db8:2::1/64 85*9cbb3da4SPetr Machata ip link set dev $swp2 down 86*9cbb3da4SPetr Machata 87*9cbb3da4SPetr Machata ip link set dev $swp1 down 88*9cbb3da4SPetr Machata ip link set dev $swp1 nomaster 89*9cbb3da4SPetr Machata 90*9cbb3da4SPetr Machata __addr_add_del br1 del 192.0.2.2/28 2001:db8:1::2/64 91*9cbb3da4SPetr Machata ip link del dev br1 92*9cbb3da4SPetr Machata} 93*9cbb3da4SPetr Machata 94*9cbb3da4SPetr Machatasetup_prepare() 95*9cbb3da4SPetr Machata{ 96*9cbb3da4SPetr Machata h1=${NETIFS[p1]} 97*9cbb3da4SPetr Machata swp1=${NETIFS[p2]} 98*9cbb3da4SPetr Machata 99*9cbb3da4SPetr Machata swp2=${NETIFS[p3]} 100*9cbb3da4SPetr Machata h2=${NETIFS[p4]} 101*9cbb3da4SPetr Machata 102*9cbb3da4SPetr Machata vrf_prepare 103*9cbb3da4SPetr Machata 104*9cbb3da4SPetr Machata h1_create 105*9cbb3da4SPetr Machata h2_create 106*9cbb3da4SPetr Machata 107*9cbb3da4SPetr Machata router_create 108*9cbb3da4SPetr Machata 109*9cbb3da4SPetr Machata forwarding_enable 110*9cbb3da4SPetr Machata} 111*9cbb3da4SPetr Machata 112*9cbb3da4SPetr Machatashuffle_pvid() 113*9cbb3da4SPetr Machata{ 114*9cbb3da4SPetr Machata log_info "Add and remove VLAN upper for PVID VLAN" 115*9cbb3da4SPetr Machata 116*9cbb3da4SPetr Machata # Adding and removing a VLAN upper for the PVID VLAN shouldn't change 117*9cbb3da4SPetr Machata # anything. The address is arbitrary, just to make sure it will be an L3 118*9cbb3da4SPetr Machata # netdevice. 119*9cbb3da4SPetr Machata vlan_create br1 10 "" 192.0.2.33/28 120*9cbb3da4SPetr Machata sleep 1 121*9cbb3da4SPetr Machata vlan_destroy br1 10 122*9cbb3da4SPetr Machata} 123*9cbb3da4SPetr Machata 124*9cbb3da4SPetr Machatacleanup() 125*9cbb3da4SPetr Machata{ 126*9cbb3da4SPetr Machata pre_cleanup 127*9cbb3da4SPetr Machata 128*9cbb3da4SPetr Machata forwarding_restore 129*9cbb3da4SPetr Machata 130*9cbb3da4SPetr Machata router_destroy 131*9cbb3da4SPetr Machata 132*9cbb3da4SPetr Machata h2_destroy 133*9cbb3da4SPetr Machata h1_destroy 134*9cbb3da4SPetr Machata 135*9cbb3da4SPetr Machata vrf_cleanup 136*9cbb3da4SPetr Machata} 137*9cbb3da4SPetr Machata 138*9cbb3da4SPetr Machataping_ipv4() 139*9cbb3da4SPetr Machata{ 140*9cbb3da4SPetr Machata ping_test $h1 192.0.2.130 141*9cbb3da4SPetr Machata} 142*9cbb3da4SPetr Machata 143*9cbb3da4SPetr Machataping_ipv6() 144*9cbb3da4SPetr Machata{ 145*9cbb3da4SPetr Machata ping6_test $h1 2001:db8:2::2 146*9cbb3da4SPetr Machata} 147*9cbb3da4SPetr Machata 148*9cbb3da4SPetr Machatatrap cleanup EXIT 149*9cbb3da4SPetr Machata 150*9cbb3da4SPetr Machatasetup_prepare 151*9cbb3da4SPetr Machatasetup_wait 152*9cbb3da4SPetr Machata 153*9cbb3da4SPetr Machatatests_run 154*9cbb3da4SPetr Machata 155*9cbb3da4SPetr Machataexit $EXIT_STATUS 156