225 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4# +------------------------------------------------+ +----------------------+5# | H1 (vrf) | | H2 (vrf) |6# | + $h1.555 + $h1.777 | | + $h2 |7# | | 192.0.2.1/28 | 192.0.2.17/28 | | | 192.0.2.130/28 |8# | | 2001:db8:1::1/64 | 2001:db8:3::1/64 | | | 192.0.2.146/28 |9# | | .-----------------' | | | 2001:db8:2::2/64 |10# | |/ | | | 2001:db8:4::2/64 |11# | + $h1 | | | |12# +----|-------------------------------------------+ +--|-------------------+13# | |14# +----|--------------------------------------------------|-------------------+15# | SW | | |16# | +--|-------------------------------+ + $swp2 |17# | | + $swp1 | 192.0.2.129/28 |18# | | vid 555 777 | 192.0.2.145/28 |19# | | | 2001:db8:2::1/64 |20# | | + BR1 (802.1q) | 2001:db8:4::1/64 |21# | | vid 555 pvid untagged | |22# | | 192.0.2.2/28 | |23# | | 192.0.2.18/28 | |24# | | 2001:db8:1::2/64 | |25# | | 2001:db8:3::2/64 | |26# | +----------------------------------+ |27# +---------------------------------------------------------------------------+28 29ALL_TESTS="30 ping_ipv431 ping_ipv632 vlan33 config_77734 ping_ipv4_fails35 ping_ipv6_fails36 ping_ipv4_77737 ping_ipv6_77738 config_55539 ping_ipv440 ping_ipv641"42NUM_NETIFS=443source lib.sh44 45h1_create()46{47 simple_if_init $h148 49 vlan_create $h1 555 v$h1 192.0.2.1/28 2001:db8:1::1/6450 ip -4 route add 192.0.2.128/28 vrf v$h1 nexthop via 192.0.2.251 ip -6 route add 2001:db8:2::/64 vrf v$h1 nexthop via 2001:db8:1::252 53 vlan_create $h1 777 v$h1 192.0.2.17/28 2001:db8:3::1/6454 ip -4 route add 192.0.2.144/28 vrf v$h1 nexthop via 192.0.2.1855 ip -6 route add 2001:db8:4::/64 vrf v$h1 nexthop via 2001:db8:3::256}57 58h1_destroy()59{60 ip -6 route del 2001:db8:4::/64 vrf v$h161 ip -4 route del 192.0.2.144/28 vrf v$h162 vlan_destroy $h1 77763 64 ip -6 route del 2001:db8:2::/64 vrf v$h165 ip -4 route del 192.0.2.128/28 vrf v$h166 vlan_destroy $h1 55567 68 simple_if_fini $h169}70 71h2_create()72{73 simple_if_init $h2 192.0.2.130/28 2001:db8:2::2/64 \74 192.0.2.146/28 2001:db8:4::2/6475 ip -4 route add 192.0.2.0/28 vrf v$h2 nexthop via 192.0.2.12976 ip -4 route add 192.0.2.16/28 vrf v$h2 nexthop via 192.0.2.14577 ip -6 route add 2001:db8:1::/64 vrf v$h2 nexthop via 2001:db8:2::178 ip -6 route add 2001:db8:3::/64 vrf v$h2 nexthop via 2001:db8:4::179}80 81h2_destroy()82{83 ip -6 route del 2001:db8:3::/64 vrf v$h284 ip -6 route del 2001:db8:1::/64 vrf v$h285 ip -4 route del 192.0.2.16/28 vrf v$h286 ip -4 route del 192.0.2.0/28 vrf v$h287 simple_if_fini $h2 192.0.2.146/28 2001:db8:4::2/64 \88 192.0.2.130/28 2001:db8:2::2/6489}90 91router_create()92{93 ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 094 ip link set dev br1 up95 96 ip link set dev $swp1 master br197 ip link set dev $swp1 up98 99 bridge vlan add dev br1 vid 555 self pvid untagged100 bridge vlan add dev $swp1 vid 555101 bridge vlan add dev $swp1 vid 777102 103 __addr_add_del br1 add 192.0.2.2/28 2001:db8:1::2/64104 __addr_add_del br1 add 192.0.2.18/28 2001:db8:3::2/64105 106 ip link set dev $swp2 up107 __addr_add_del $swp2 add 192.0.2.129/28 2001:db8:2::1/64108 __addr_add_del $swp2 add 192.0.2.145/28 2001:db8:4::1/64109}110 111router_destroy()112{113 __addr_add_del $swp2 del 192.0.2.145/28 2001:db8:4::1/64114 __addr_add_del $swp2 del 192.0.2.129/28 2001:db8:2::1/64115 ip link set dev $swp2 down116 117 __addr_add_del br1 del 192.0.2.18/28 2001:db8:3::2/64118 __addr_add_del br1 del 192.0.2.2/28 2001:db8:1::2/64119 ip link set dev $swp1 down120 ip link set dev $swp1 nomaster121 122 ip link del dev br1123}124 125setup_prepare()126{127 h1=${NETIFS[p1]}128 swp1=${NETIFS[p2]}129 130 swp2=${NETIFS[p3]}131 h2=${NETIFS[p4]}132 133 vrf_prepare134 135 h1_create136 h2_create137 138 router_create139 140 forwarding_enable141}142 143config_555()144{145 log_info "Configure VLAN 555 as PVID"146 147 bridge vlan add dev br1 vid 555 self pvid untagged148 bridge vlan del dev br1 vid 777 self149 sleep 2150}151 152config_777()153{154 log_info "Configure VLAN 777 as PVID"155 156 bridge vlan add dev br1 vid 777 self pvid untagged157 bridge vlan del dev br1 vid 555 self158 sleep 2159}160 161cleanup()162{163 pre_cleanup164 165 forwarding_restore166 167 router_destroy168 169 h2_destroy170 h1_destroy171 172 vrf_cleanup173}174 175vlan()176{177 RET=0178 179 bridge vlan add dev br1 vid 333 self180 check_err $? "Can't add a non-PVID VLAN"181 bridge vlan del dev br1 vid 333 self182 check_err $? "Can't remove a non-PVID VLAN"183 184 log_test "vlan"185}186 187ping_ipv4()188{189 ping_test $h1.555 192.0.2.130190}191 192ping_ipv6()193{194 ping6_test $h1.555 2001:db8:2::2195}196 197ping_ipv4_fails()198{199 ping_test_fails $h1.555 192.0.2.130 ": via 555"200}201 202ping_ipv6_fails()203{204 ping6_test_fails $h1.555 2001:db8:2::2 ": via 555"205}206 207ping_ipv4_777()208{209 ping_test $h1.777 192.0.2.146 ": via 777"210}211 212ping_ipv6_777()213{214 ping6_test $h1.777 2001:db8:4::2 ": via 777"215}216 217trap cleanup EXIT218 219setup_prepare220setup_wait221 222tests_run223 224exit $EXIT_STATUS225