1438a4f56SIdo Schimmel#!/bin/bash 2438a4f56SIdo Schimmel# SPDX-License-Identifier: GPL-2.0 3438a4f56SIdo Schimmel 4438a4f56SIdo Schimmel# +---------------------------+ +------------------------------+ 5438a4f56SIdo Schimmel# | vrf-h1 | | vrf-h2 | 6438a4f56SIdo Schimmel# | + $h1 | | + $h2 | 7438a4f56SIdo Schimmel# | | 10.1.1.101/24 | | | 10.1.2.101/24 | 8438a4f56SIdo Schimmel# | | default via 10.1.1.1 | | | default via 10.1.2.1 | 9438a4f56SIdo Schimmel# +----|----------------------+ +----|-------------------------+ 10438a4f56SIdo Schimmel# | | 11438a4f56SIdo Schimmel# +----|--------------------------------------------|-------------------------+ 12438a4f56SIdo Schimmel# | SW | | | 13438a4f56SIdo Schimmel# | +--|--------------------------------------------|-----------------------+ | 14438a4f56SIdo Schimmel# | | + $swp1 br1 + $swp2 | | 15438a4f56SIdo Schimmel# | | vid 10 pvid untagged vid 20 pvid untagged | | 16438a4f56SIdo Schimmel# | | | | 17438a4f56SIdo Schimmel# | | + vx10 + vx20 | | 18438a4f56SIdo Schimmel# | | local 10.0.0.1 local 10.0.0.1 | | 19438a4f56SIdo Schimmel# | | remote 10.0.0.2 remote 10.0.0.2 | | 20438a4f56SIdo Schimmel# | | id 1010 id 1020 | | 21438a4f56SIdo Schimmel# | | dstport 4789 dstport 4789 | | 22438a4f56SIdo Schimmel# | | vid 10 pvid untagged vid 20 pvid untagged | | 23438a4f56SIdo Schimmel# | | | | 24438a4f56SIdo Schimmel# | | + vx4001 | | 25438a4f56SIdo Schimmel# | | local 10.0.0.1 | | 26438a4f56SIdo Schimmel# | | remote 10.0.0.2 | | 27438a4f56SIdo Schimmel# | | id 104001 | | 28438a4f56SIdo Schimmel# | | dstport 4789 | | 29438a4f56SIdo Schimmel# | | vid 4001 pvid untagged | | 30438a4f56SIdo Schimmel# | | | | 31438a4f56SIdo Schimmel# | +-----------------------------------+-----------------------------------+ | 32438a4f56SIdo Schimmel# | | | 33438a4f56SIdo Schimmel# | +-----------------------------------|-----------------------------------+ | 34438a4f56SIdo Schimmel# | | | | | 35438a4f56SIdo Schimmel# | | +--------------------------------+--------------------------------+ | | 36438a4f56SIdo Schimmel# | | | | | | | 37438a4f56SIdo Schimmel# | | + vlan10 | vlan20 + | | 38438a4f56SIdo Schimmel# | | | 10.1.1.11/24 | 10.1.2.11/24 | | | 39438a4f56SIdo Schimmel# | | | | | | | 40438a4f56SIdo Schimmel# | | + vlan10-v (macvlan) + vlan20-v (macvlan) + | | 41438a4f56SIdo Schimmel# | | 10.1.1.1/24 vlan4001 10.1.2.1/24 | | 42438a4f56SIdo Schimmel# | | 00:00:5e:00:01:01 00:00:5e:00:01:01 | | 43438a4f56SIdo Schimmel# | | vrf-green | | 44438a4f56SIdo Schimmel# | +-----------------------------------------------------------------------+ | 45438a4f56SIdo Schimmel# | | 46438a4f56SIdo Schimmel# | + $rp1 +lo | 47438a4f56SIdo Schimmel# | | 192.0.2.1/24 10.0.0.1/32 | 48438a4f56SIdo Schimmel# +----|----------------------------------------------------------------------+ 49438a4f56SIdo Schimmel# | 50438a4f56SIdo Schimmel# +----|--------------------------------------------------------+ 51438a4f56SIdo Schimmel# | | vrf-spine | 52438a4f56SIdo Schimmel# | + $rp2 | 53438a4f56SIdo Schimmel# | 192.0.2.2/24 | 54438a4f56SIdo Schimmel# | | (maybe) HW 55438a4f56SIdo Schimmel# ============================================================================= 56438a4f56SIdo Schimmel# | | (likely) SW 57438a4f56SIdo Schimmel# | | 58438a4f56SIdo Schimmel# | + v1 (veth) | 59438a4f56SIdo Schimmel# | | 192.0.3.2/24 | 60438a4f56SIdo Schimmel# +----|--------------------------------------------------------+ 61438a4f56SIdo Schimmel# | 62438a4f56SIdo Schimmel# +----|----------------------------------------------------------------------+ 63438a4f56SIdo Schimmel# | + v2 (veth) +lo NS1 (netns) | 64438a4f56SIdo Schimmel# | 192.0.3.1/24 10.0.0.2/32 | 65438a4f56SIdo Schimmel# | | 66438a4f56SIdo Schimmel# | +-----------------------------------------------------------------------+ | 67438a4f56SIdo Schimmel# | | vrf-green | | 68438a4f56SIdo Schimmel# | | + vlan10-v (macvlan) vlan20-v (macvlan) + | | 69438a4f56SIdo Schimmel# | | | 10.1.1.1/24 10.1.2.1/24 | | | 70438a4f56SIdo Schimmel# | | | 00:00:5e:00:01:01 00:00:5e:00:01:01 | | | 71438a4f56SIdo Schimmel# | | | vlan4001 | | | 72438a4f56SIdo Schimmel# | | + vlan10 + vlan20 + | | 73438a4f56SIdo Schimmel# | | | 10.1.1.12/24 | 10.1.2.12/24 | | | 74438a4f56SIdo Schimmel# | | | | | | | 75438a4f56SIdo Schimmel# | | +--------------------------------+--------------------------------+ | | 76438a4f56SIdo Schimmel# | | | | | 77438a4f56SIdo Schimmel# | +-----------------------------------|-----------------------------------+ | 78438a4f56SIdo Schimmel# | | | 79438a4f56SIdo Schimmel# | +-----------------------------------+-----------------------------------+ | 80438a4f56SIdo Schimmel# | | | | 81438a4f56SIdo Schimmel# | | + vx10 + vx20 | | 82438a4f56SIdo Schimmel# | | local 10.0.0.2 local 10.0.0.2 | | 83438a4f56SIdo Schimmel# | | remote 10.0.0.1 remote 10.0.0.1 | | 84438a4f56SIdo Schimmel# | | id 1010 id 1020 | | 85438a4f56SIdo Schimmel# | | dstport 4789 dstport 4789 | | 86438a4f56SIdo Schimmel# | | vid 10 pvid untagged vid 20 pvid untagged | | 87438a4f56SIdo Schimmel# | | | | 88438a4f56SIdo Schimmel# | | + vx4001 | | 89438a4f56SIdo Schimmel# | | local 10.0.0.2 | | 90438a4f56SIdo Schimmel# | | remote 10.0.0.1 | | 91438a4f56SIdo Schimmel# | | id 104001 | | 92438a4f56SIdo Schimmel# | | dstport 4789 | | 93438a4f56SIdo Schimmel# | | vid 4001 pvid untagged | | 94438a4f56SIdo Schimmel# | | | | 95438a4f56SIdo Schimmel# | | + w1 (veth) + w3 (veth) | | 96438a4f56SIdo Schimmel# | | | vid 10 pvid untagged br1 | vid 20 pvid untagged | | 97438a4f56SIdo Schimmel# | +--|------------------------------------------|-------------------------+ | 98438a4f56SIdo Schimmel# | | | | 99438a4f56SIdo Schimmel# | | | | 100438a4f56SIdo Schimmel# | +--|----------------------+ +--|-------------------------+ | 101438a4f56SIdo Schimmel# | | | vrf-h1 | | | vrf-h2 | | 102438a4f56SIdo Schimmel# | | + w2 (veth) | | + w4 (veth) | | 103438a4f56SIdo Schimmel# | | 10.1.1.102/24 | | 10.1.2.102/24 | | 104438a4f56SIdo Schimmel# | | default via 10.1.1.1 | | default via 10.1.2.1 | | 105438a4f56SIdo Schimmel# | +-------------------------+ +----------------------------+ | 106438a4f56SIdo Schimmel# +---------------------------------------------------------------------------+ 107438a4f56SIdo Schimmel 108438a4f56SIdo SchimmelALL_TESTS=" 109438a4f56SIdo Schimmel ping_ipv4 110438a4f56SIdo Schimmel" 111438a4f56SIdo SchimmelNUM_NETIFS=6 112438a4f56SIdo Schimmelsource lib.sh 113438a4f56SIdo Schimmel 114438a4f56SIdo Schimmelhx_create() 115438a4f56SIdo Schimmel{ 116438a4f56SIdo Schimmel local vrf_name=$1; shift 117438a4f56SIdo Schimmel local if_name=$1; shift 118438a4f56SIdo Schimmel local ip_addr=$1; shift 119438a4f56SIdo Schimmel local gw_ip=$1; shift 120438a4f56SIdo Schimmel 121438a4f56SIdo Schimmel vrf_create $vrf_name 122438a4f56SIdo Schimmel ip link set dev $if_name master $vrf_name 123438a4f56SIdo Schimmel ip link set dev $vrf_name up 124438a4f56SIdo Schimmel ip link set dev $if_name up 125438a4f56SIdo Schimmel 126438a4f56SIdo Schimmel ip address add $ip_addr/24 dev $if_name 127438a4f56SIdo Schimmel ip neigh replace $gw_ip lladdr 00:00:5e:00:01:01 nud permanent \ 128438a4f56SIdo Schimmel dev $if_name 129438a4f56SIdo Schimmel ip route add default vrf $vrf_name nexthop via $gw_ip 130438a4f56SIdo Schimmel} 131438a4f56SIdo Schimmelexport -f hx_create 132438a4f56SIdo Schimmel 133438a4f56SIdo Schimmelhx_destroy() 134438a4f56SIdo Schimmel{ 135438a4f56SIdo Schimmel local vrf_name=$1; shift 136438a4f56SIdo Schimmel local if_name=$1; shift 137438a4f56SIdo Schimmel local ip_addr=$1; shift 138438a4f56SIdo Schimmel local gw_ip=$1; shift 139438a4f56SIdo Schimmel 140438a4f56SIdo Schimmel ip route del default vrf $vrf_name nexthop via $gw_ip 141438a4f56SIdo Schimmel ip neigh del $gw_ip dev $if_name 142438a4f56SIdo Schimmel ip address del $ip_addr/24 dev $if_name 143438a4f56SIdo Schimmel 144438a4f56SIdo Schimmel ip link set dev $if_name down 145438a4f56SIdo Schimmel vrf_destroy $vrf_name 146438a4f56SIdo Schimmel} 147438a4f56SIdo Schimmel 148438a4f56SIdo Schimmelh1_create() 149438a4f56SIdo Schimmel{ 150438a4f56SIdo Schimmel hx_create "vrf-h1" $h1 10.1.1.101 10.1.1.1 151438a4f56SIdo Schimmel} 152438a4f56SIdo Schimmel 153438a4f56SIdo Schimmelh1_destroy() 154438a4f56SIdo Schimmel{ 155438a4f56SIdo Schimmel hx_destroy "vrf-h1" $h1 10.1.1.101 10.1.1.1 156438a4f56SIdo Schimmel} 157438a4f56SIdo Schimmel 158438a4f56SIdo Schimmelh2_create() 159438a4f56SIdo Schimmel{ 160438a4f56SIdo Schimmel hx_create "vrf-h2" $h2 10.1.2.101 10.1.2.1 161438a4f56SIdo Schimmel} 162438a4f56SIdo Schimmel 163438a4f56SIdo Schimmelh2_destroy() 164438a4f56SIdo Schimmel{ 165438a4f56SIdo Schimmel hx_destroy "vrf-h2" $h2 10.1.2.101 10.1.2.1 166438a4f56SIdo Schimmel} 167438a4f56SIdo Schimmel 168438a4f56SIdo Schimmelswitch_create() 169438a4f56SIdo Schimmel{ 170438a4f56SIdo Schimmel ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 \ 171438a4f56SIdo Schimmel mcast_snooping 0 172438a4f56SIdo Schimmel # Make sure the bridge uses the MAC address of the local port and not 173438a4f56SIdo Schimmel # that of the VxLAN's device. 174438a4f56SIdo Schimmel ip link set dev br1 address $(mac_get $swp1) 175438a4f56SIdo Schimmel ip link set dev br1 up 176438a4f56SIdo Schimmel 177438a4f56SIdo Schimmel ip link set dev $rp1 up 178438a4f56SIdo Schimmel ip address add dev $rp1 192.0.2.1/24 179438a4f56SIdo Schimmel ip route add 10.0.0.2/32 nexthop via 192.0.2.2 180438a4f56SIdo Schimmel 181438a4f56SIdo Schimmel ip link add name vx10 type vxlan id 1010 \ 182438a4f56SIdo Schimmel local 10.0.0.1 remote 10.0.0.2 dstport 4789 \ 183438a4f56SIdo Schimmel nolearning noudpcsum tos inherit ttl 100 184438a4f56SIdo Schimmel ip link set dev vx10 up 185438a4f56SIdo Schimmel 186438a4f56SIdo Schimmel ip link set dev vx10 master br1 187438a4f56SIdo Schimmel bridge vlan add vid 10 dev vx10 pvid untagged 188438a4f56SIdo Schimmel 189438a4f56SIdo Schimmel ip link add name vx20 type vxlan id 1020 \ 190438a4f56SIdo Schimmel local 10.0.0.1 remote 10.0.0.2 dstport 4789 \ 191438a4f56SIdo Schimmel nolearning noudpcsum tos inherit ttl 100 192438a4f56SIdo Schimmel ip link set dev vx20 up 193438a4f56SIdo Schimmel 194438a4f56SIdo Schimmel ip link set dev vx20 master br1 195438a4f56SIdo Schimmel bridge vlan add vid 20 dev vx20 pvid untagged 196438a4f56SIdo Schimmel 197438a4f56SIdo Schimmel ip link set dev $swp1 master br1 198438a4f56SIdo Schimmel ip link set dev $swp1 up 199438a4f56SIdo Schimmel bridge vlan add vid 10 dev $swp1 pvid untagged 200438a4f56SIdo Schimmel 201438a4f56SIdo Schimmel ip link set dev $swp2 master br1 202438a4f56SIdo Schimmel ip link set dev $swp2 up 203438a4f56SIdo Schimmel bridge vlan add vid 20 dev $swp2 pvid untagged 204438a4f56SIdo Schimmel 205438a4f56SIdo Schimmel ip link add name vx4001 type vxlan id 104001 \ 206438a4f56SIdo Schimmel local 10.0.0.1 dstport 4789 \ 207438a4f56SIdo Schimmel nolearning noudpcsum tos inherit ttl 100 208438a4f56SIdo Schimmel ip link set dev vx4001 up 209438a4f56SIdo Schimmel 210438a4f56SIdo Schimmel ip link set dev vx4001 master br1 211438a4f56SIdo Schimmel bridge vlan add vid 4001 dev vx4001 pvid untagged 212438a4f56SIdo Schimmel 213438a4f56SIdo Schimmel ip address add 10.0.0.1/32 dev lo 214438a4f56SIdo Schimmel 215438a4f56SIdo Schimmel # Create SVIs 216438a4f56SIdo Schimmel vrf_create "vrf-green" 217438a4f56SIdo Schimmel ip link set dev vrf-green up 218438a4f56SIdo Schimmel 219438a4f56SIdo Schimmel ip link add link br1 name vlan10 up master vrf-green type vlan id 10 220438a4f56SIdo Schimmel ip address add 10.1.1.11/24 dev vlan10 221438a4f56SIdo Schimmel ip link add link vlan10 name vlan10-v up master vrf-green \ 222438a4f56SIdo Schimmel address 00:00:5e:00:01:01 type macvlan mode private 223438a4f56SIdo Schimmel ip address add 10.1.1.1/24 dev vlan10-v 224438a4f56SIdo Schimmel 225438a4f56SIdo Schimmel ip link add link br1 name vlan20 up master vrf-green type vlan id 20 226438a4f56SIdo Schimmel ip address add 10.1.2.11/24 dev vlan20 227438a4f56SIdo Schimmel ip link add link vlan20 name vlan20-v up master vrf-green \ 228438a4f56SIdo Schimmel address 00:00:5e:00:01:01 type macvlan mode private 229438a4f56SIdo Schimmel ip address add 10.1.2.1/24 dev vlan20-v 230438a4f56SIdo Schimmel 231438a4f56SIdo Schimmel ip link add link br1 name vlan4001 up master vrf-green \ 232438a4f56SIdo Schimmel type vlan id 4001 233438a4f56SIdo Schimmel 234438a4f56SIdo Schimmel bridge vlan add vid 10 dev br1 self 235438a4f56SIdo Schimmel bridge vlan add vid 20 dev br1 self 236438a4f56SIdo Schimmel bridge vlan add vid 4001 dev br1 self 237438a4f56SIdo Schimmel 238438a4f56SIdo Schimmel bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 10 239438a4f56SIdo Schimmel bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 20 240*71a0e29eSIdo Schimmel 241*71a0e29eSIdo Schimmel sysctl_set net.ipv4.conf.all.rp_filter 0 242*71a0e29eSIdo Schimmel sysctl_set net.ipv4.conf.vlan10-v.rp_filter 0 243*71a0e29eSIdo Schimmel sysctl_set net.ipv4.conf.vlan20-v.rp_filter 0 244438a4f56SIdo Schimmel} 245438a4f56SIdo Schimmel 246438a4f56SIdo Schimmelswitch_destroy() 247438a4f56SIdo Schimmel{ 248*71a0e29eSIdo Schimmel sysctl_restore net.ipv4.conf.all.rp_filter 249*71a0e29eSIdo Schimmel 250438a4f56SIdo Schimmel bridge fdb del 00:00:5e:00:01:01 dev br1 self local vlan 20 251438a4f56SIdo Schimmel bridge fdb del 00:00:5e:00:01:01 dev br1 self local vlan 10 252438a4f56SIdo Schimmel 253438a4f56SIdo Schimmel bridge vlan del vid 4001 dev br1 self 254438a4f56SIdo Schimmel bridge vlan del vid 20 dev br1 self 255438a4f56SIdo Schimmel bridge vlan del vid 10 dev br1 self 256438a4f56SIdo Schimmel 257438a4f56SIdo Schimmel ip link del dev vlan4001 258438a4f56SIdo Schimmel 259438a4f56SIdo Schimmel ip link del dev vlan20 260438a4f56SIdo Schimmel 261438a4f56SIdo Schimmel ip link del dev vlan10 262438a4f56SIdo Schimmel 263438a4f56SIdo Schimmel vrf_destroy "vrf-green" 264438a4f56SIdo Schimmel 265438a4f56SIdo Schimmel ip address del 10.0.0.1/32 dev lo 266438a4f56SIdo Schimmel 267438a4f56SIdo Schimmel bridge vlan del vid 20 dev $swp2 268438a4f56SIdo Schimmel ip link set dev $swp2 down 269438a4f56SIdo Schimmel ip link set dev $swp2 nomaster 270438a4f56SIdo Schimmel 271438a4f56SIdo Schimmel bridge vlan del vid 10 dev $swp1 272438a4f56SIdo Schimmel ip link set dev $swp1 down 273438a4f56SIdo Schimmel ip link set dev $swp1 nomaster 274438a4f56SIdo Schimmel 275438a4f56SIdo Schimmel bridge vlan del vid 4001 dev vx4001 276438a4f56SIdo Schimmel ip link set dev vx4001 nomaster 277438a4f56SIdo Schimmel 278438a4f56SIdo Schimmel ip link set dev vx4001 down 279438a4f56SIdo Schimmel ip link del dev vx4001 280438a4f56SIdo Schimmel 281438a4f56SIdo Schimmel bridge vlan del vid 20 dev vx20 282438a4f56SIdo Schimmel ip link set dev vx20 nomaster 283438a4f56SIdo Schimmel 284438a4f56SIdo Schimmel ip link set dev vx20 down 285438a4f56SIdo Schimmel ip link del dev vx20 286438a4f56SIdo Schimmel 287438a4f56SIdo Schimmel bridge vlan del vid 10 dev vx10 288438a4f56SIdo Schimmel ip link set dev vx10 nomaster 289438a4f56SIdo Schimmel 290438a4f56SIdo Schimmel ip link set dev vx10 down 291438a4f56SIdo Schimmel ip link del dev vx10 292438a4f56SIdo Schimmel 293438a4f56SIdo Schimmel ip route del 10.0.0.2/32 nexthop via 192.0.2.2 294438a4f56SIdo Schimmel ip address del dev $rp1 192.0.2.1/24 295438a4f56SIdo Schimmel ip link set dev $rp1 down 296438a4f56SIdo Schimmel 297438a4f56SIdo Schimmel ip link set dev br1 down 298438a4f56SIdo Schimmel ip link del dev br1 299438a4f56SIdo Schimmel} 300438a4f56SIdo Schimmel 301438a4f56SIdo Schimmelspine_create() 302438a4f56SIdo Schimmel{ 303438a4f56SIdo Schimmel vrf_create "vrf-spine" 304438a4f56SIdo Schimmel ip link set dev $rp2 master vrf-spine 305438a4f56SIdo Schimmel ip link set dev v1 master vrf-spine 306438a4f56SIdo Schimmel ip link set dev vrf-spine up 307438a4f56SIdo Schimmel ip link set dev $rp2 up 308438a4f56SIdo Schimmel ip link set dev v1 up 309438a4f56SIdo Schimmel 310438a4f56SIdo Schimmel ip address add 192.0.2.2/24 dev $rp2 311438a4f56SIdo Schimmel ip address add 192.0.3.2/24 dev v1 312438a4f56SIdo Schimmel 313438a4f56SIdo Schimmel ip route add 10.0.0.1/32 vrf vrf-spine nexthop via 192.0.2.1 314438a4f56SIdo Schimmel ip route add 10.0.0.2/32 vrf vrf-spine nexthop via 192.0.3.1 315438a4f56SIdo Schimmel} 316438a4f56SIdo Schimmel 317438a4f56SIdo Schimmelspine_destroy() 318438a4f56SIdo Schimmel{ 319438a4f56SIdo Schimmel ip route del 10.0.0.2/32 vrf vrf-spine nexthop via 192.0.3.1 320438a4f56SIdo Schimmel ip route del 10.0.0.1/32 vrf vrf-spine nexthop via 192.0.2.1 321438a4f56SIdo Schimmel 322438a4f56SIdo Schimmel ip address del 192.0.3.2/24 dev v1 323438a4f56SIdo Schimmel ip address del 192.0.2.2/24 dev $rp2 324438a4f56SIdo Schimmel 325438a4f56SIdo Schimmel ip link set dev v1 down 326438a4f56SIdo Schimmel ip link set dev $rp2 down 327438a4f56SIdo Schimmel vrf_destroy "vrf-spine" 328438a4f56SIdo Schimmel} 329438a4f56SIdo Schimmel 330438a4f56SIdo Schimmelns_h1_create() 331438a4f56SIdo Schimmel{ 332438a4f56SIdo Schimmel hx_create "vrf-h1" w2 10.1.1.102 10.1.1.1 333438a4f56SIdo Schimmel} 334438a4f56SIdo Schimmelexport -f ns_h1_create 335438a4f56SIdo Schimmel 336438a4f56SIdo Schimmelns_h2_create() 337438a4f56SIdo Schimmel{ 338438a4f56SIdo Schimmel hx_create "vrf-h2" w4 10.1.2.102 10.1.2.1 339438a4f56SIdo Schimmel} 340438a4f56SIdo Schimmelexport -f ns_h2_create 341438a4f56SIdo Schimmel 342438a4f56SIdo Schimmelns_switch_create() 343438a4f56SIdo Schimmel{ 344438a4f56SIdo Schimmel ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 \ 345438a4f56SIdo Schimmel mcast_snooping 0 346438a4f56SIdo Schimmel ip link set dev br1 up 347438a4f56SIdo Schimmel 348438a4f56SIdo Schimmel ip link set dev v2 up 349438a4f56SIdo Schimmel ip address add dev v2 192.0.3.1/24 350438a4f56SIdo Schimmel ip route add 10.0.0.1/32 nexthop via 192.0.3.2 351438a4f56SIdo Schimmel 352438a4f56SIdo Schimmel ip link add name vx10 type vxlan id 1010 \ 353438a4f56SIdo Schimmel local 10.0.0.2 remote 10.0.0.1 dstport 4789 \ 354438a4f56SIdo Schimmel nolearning noudpcsum tos inherit ttl 100 355438a4f56SIdo Schimmel ip link set dev vx10 up 356438a4f56SIdo Schimmel 357438a4f56SIdo Schimmel ip link set dev vx10 master br1 358438a4f56SIdo Schimmel bridge vlan add vid 10 dev vx10 pvid untagged 359438a4f56SIdo Schimmel 360438a4f56SIdo Schimmel ip link add name vx20 type vxlan id 1020 \ 361438a4f56SIdo Schimmel local 10.0.0.2 remote 10.0.0.1 dstport 4789 \ 362438a4f56SIdo Schimmel nolearning noudpcsum tos inherit ttl 100 363438a4f56SIdo Schimmel ip link set dev vx20 up 364438a4f56SIdo Schimmel 365438a4f56SIdo Schimmel ip link set dev vx20 master br1 366438a4f56SIdo Schimmel bridge vlan add vid 20 dev vx20 pvid untagged 367438a4f56SIdo Schimmel 368438a4f56SIdo Schimmel ip link add name vx4001 type vxlan id 104001 \ 369438a4f56SIdo Schimmel local 10.0.0.2 dstport 4789 \ 370438a4f56SIdo Schimmel nolearning noudpcsum tos inherit ttl 100 371438a4f56SIdo Schimmel ip link set dev vx4001 up 372438a4f56SIdo Schimmel 373438a4f56SIdo Schimmel ip link set dev vx4001 master br1 374438a4f56SIdo Schimmel bridge vlan add vid 4001 dev vx4001 pvid untagged 375438a4f56SIdo Schimmel 376438a4f56SIdo Schimmel ip link set dev w1 master br1 377438a4f56SIdo Schimmel ip link set dev w1 up 378438a4f56SIdo Schimmel bridge vlan add vid 10 dev w1 pvid untagged 379438a4f56SIdo Schimmel 380438a4f56SIdo Schimmel ip link set dev w3 master br1 381438a4f56SIdo Schimmel ip link set dev w3 up 382438a4f56SIdo Schimmel bridge vlan add vid 20 dev w3 pvid untagged 383438a4f56SIdo Schimmel 384438a4f56SIdo Schimmel ip address add 10.0.0.2/32 dev lo 385438a4f56SIdo Schimmel 386438a4f56SIdo Schimmel # Create SVIs 387438a4f56SIdo Schimmel vrf_create "vrf-green" 388438a4f56SIdo Schimmel ip link set dev vrf-green up 389438a4f56SIdo Schimmel 390438a4f56SIdo Schimmel ip link add link br1 name vlan10 up master vrf-green type vlan id 10 391438a4f56SIdo Schimmel ip address add 10.1.1.12/24 dev vlan10 392438a4f56SIdo Schimmel ip link add link vlan10 name vlan10-v up master vrf-green \ 393438a4f56SIdo Schimmel address 00:00:5e:00:01:01 type macvlan mode private 394438a4f56SIdo Schimmel ip address add 10.1.1.1/24 dev vlan10-v 395438a4f56SIdo Schimmel 396438a4f56SIdo Schimmel ip link add link br1 name vlan20 up master vrf-green type vlan id 20 397438a4f56SIdo Schimmel ip address add 10.1.2.12/24 dev vlan20 398438a4f56SIdo Schimmel ip link add link vlan20 name vlan20-v up master vrf-green \ 399438a4f56SIdo Schimmel address 00:00:5e:00:01:01 type macvlan mode private 400438a4f56SIdo Schimmel ip address add 10.1.2.1/24 dev vlan20-v 401438a4f56SIdo Schimmel 402438a4f56SIdo Schimmel ip link add link br1 name vlan4001 up master vrf-green \ 403438a4f56SIdo Schimmel type vlan id 4001 404438a4f56SIdo Schimmel 405438a4f56SIdo Schimmel bridge vlan add vid 10 dev br1 self 406438a4f56SIdo Schimmel bridge vlan add vid 20 dev br1 self 407438a4f56SIdo Schimmel bridge vlan add vid 4001 dev br1 self 408438a4f56SIdo Schimmel 409438a4f56SIdo Schimmel bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 10 410438a4f56SIdo Schimmel bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 20 411*71a0e29eSIdo Schimmel 412*71a0e29eSIdo Schimmel sysctl_set net.ipv4.conf.all.rp_filter 0 413*71a0e29eSIdo Schimmel sysctl_set net.ipv4.conf.vlan10-v.rp_filter 0 414*71a0e29eSIdo Schimmel sysctl_set net.ipv4.conf.vlan20-v.rp_filter 0 415438a4f56SIdo Schimmel} 416438a4f56SIdo Schimmelexport -f ns_switch_create 417438a4f56SIdo Schimmel 418438a4f56SIdo Schimmelns_init() 419438a4f56SIdo Schimmel{ 420438a4f56SIdo Schimmel ip link add name w1 type veth peer name w2 421438a4f56SIdo Schimmel ip link add name w3 type veth peer name w4 422438a4f56SIdo Schimmel 423438a4f56SIdo Schimmel ip link set dev lo up 424438a4f56SIdo Schimmel 425438a4f56SIdo Schimmel ns_h1_create 426438a4f56SIdo Schimmel ns_h2_create 427438a4f56SIdo Schimmel ns_switch_create 428438a4f56SIdo Schimmel} 429438a4f56SIdo Schimmelexport -f ns_init 430438a4f56SIdo Schimmel 431438a4f56SIdo Schimmelns1_create() 432438a4f56SIdo Schimmel{ 433438a4f56SIdo Schimmel ip netns add ns1 434438a4f56SIdo Schimmel ip link set dev v2 netns ns1 435438a4f56SIdo Schimmel in_ns ns1 ns_init 436438a4f56SIdo Schimmel} 437438a4f56SIdo Schimmel 438438a4f56SIdo Schimmelns1_destroy() 439438a4f56SIdo Schimmel{ 440438a4f56SIdo Schimmel ip netns exec ns1 ip link set dev v2 netns 1 441438a4f56SIdo Schimmel ip netns del ns1 442438a4f56SIdo Schimmel} 443438a4f56SIdo Schimmel 444438a4f56SIdo Schimmel__l2_vni_init() 445438a4f56SIdo Schimmel{ 446438a4f56SIdo Schimmel local mac1=$1; shift 447438a4f56SIdo Schimmel local mac2=$1; shift 448438a4f56SIdo Schimmel local ip1=$1; shift 449438a4f56SIdo Schimmel local ip2=$1; shift 450438a4f56SIdo Schimmel local dst=$1; shift 451438a4f56SIdo Schimmel 452438a4f56SIdo Schimmel bridge fdb add $mac1 dev vx10 self master extern_learn static \ 453438a4f56SIdo Schimmel dst $dst vlan 10 454438a4f56SIdo Schimmel bridge fdb add $mac2 dev vx20 self master extern_learn static \ 455438a4f56SIdo Schimmel dst $dst vlan 20 456438a4f56SIdo Schimmel 457438a4f56SIdo Schimmel ip neigh add $ip1 lladdr $mac1 nud noarp dev vlan10 \ 458438a4f56SIdo Schimmel extern_learn 459438a4f56SIdo Schimmel ip neigh add $ip2 lladdr $mac2 nud noarp dev vlan20 \ 460438a4f56SIdo Schimmel extern_learn 461438a4f56SIdo Schimmel} 462438a4f56SIdo Schimmelexport -f __l2_vni_init 463438a4f56SIdo Schimmel 464438a4f56SIdo Schimmell2_vni_init() 465438a4f56SIdo Schimmel{ 466438a4f56SIdo Schimmel local h1_ns_mac=$(in_ns ns1 mac_get w2) 467438a4f56SIdo Schimmel local h2_ns_mac=$(in_ns ns1 mac_get w4) 468438a4f56SIdo Schimmel local h1_mac=$(mac_get $h1) 469438a4f56SIdo Schimmel local h2_mac=$(mac_get $h2) 470438a4f56SIdo Schimmel 471438a4f56SIdo Schimmel __l2_vni_init $h1_ns_mac $h2_ns_mac 10.1.1.102 10.1.2.102 10.0.0.2 472438a4f56SIdo Schimmel in_ns ns1 __l2_vni_init $h1_mac $h2_mac 10.1.1.101 10.1.2.101 10.0.0.1 473438a4f56SIdo Schimmel} 474438a4f56SIdo Schimmel 475438a4f56SIdo Schimmel__l3_vni_init() 476438a4f56SIdo Schimmel{ 477438a4f56SIdo Schimmel local mac=$1; shift 478438a4f56SIdo Schimmel local vtep_ip=$1; shift 479438a4f56SIdo Schimmel local host1_ip=$1; shift 480438a4f56SIdo Schimmel local host2_ip=$1; shift 481438a4f56SIdo Schimmel 482438a4f56SIdo Schimmel bridge fdb add $mac dev vx4001 self master extern_learn static \ 483438a4f56SIdo Schimmel dst $vtep_ip vlan 4001 484438a4f56SIdo Schimmel 485438a4f56SIdo Schimmel ip neigh add $vtep_ip lladdr $mac nud noarp dev vlan4001 extern_learn 486438a4f56SIdo Schimmel 487438a4f56SIdo Schimmel ip route add $host1_ip/32 vrf vrf-green nexthop via $vtep_ip \ 488438a4f56SIdo Schimmel dev vlan4001 onlink 489438a4f56SIdo Schimmel ip route add $host2_ip/32 vrf vrf-green nexthop via $vtep_ip \ 490438a4f56SIdo Schimmel dev vlan4001 onlink 491438a4f56SIdo Schimmel} 492438a4f56SIdo Schimmelexport -f __l3_vni_init 493438a4f56SIdo Schimmel 494438a4f56SIdo Schimmell3_vni_init() 495438a4f56SIdo Schimmel{ 496438a4f56SIdo Schimmel local vlan4001_ns_mac=$(in_ns ns1 mac_get vlan4001) 497438a4f56SIdo Schimmel local vlan4001_mac=$(mac_get vlan4001) 498438a4f56SIdo Schimmel 499438a4f56SIdo Schimmel __l3_vni_init $vlan4001_ns_mac 10.0.0.2 10.1.1.102 10.1.2.102 500438a4f56SIdo Schimmel in_ns ns1 __l3_vni_init $vlan4001_mac 10.0.0.1 10.1.1.101 10.1.2.101 501438a4f56SIdo Schimmel} 502438a4f56SIdo Schimmel 503438a4f56SIdo Schimmelsetup_prepare() 504438a4f56SIdo Schimmel{ 505438a4f56SIdo Schimmel h1=${NETIFS[p1]} 506438a4f56SIdo Schimmel swp1=${NETIFS[p2]} 507438a4f56SIdo Schimmel 508438a4f56SIdo Schimmel swp2=${NETIFS[p3]} 509438a4f56SIdo Schimmel h2=${NETIFS[p4]} 510438a4f56SIdo Schimmel 511438a4f56SIdo Schimmel rp1=${NETIFS[p5]} 512438a4f56SIdo Schimmel rp2=${NETIFS[p6]} 513438a4f56SIdo Schimmel 514438a4f56SIdo Schimmel vrf_prepare 515438a4f56SIdo Schimmel forwarding_enable 516438a4f56SIdo Schimmel 517438a4f56SIdo Schimmel h1_create 518438a4f56SIdo Schimmel h2_create 519438a4f56SIdo Schimmel switch_create 520438a4f56SIdo Schimmel 521438a4f56SIdo Schimmel ip link add name v1 type veth peer name v2 522438a4f56SIdo Schimmel spine_create 523438a4f56SIdo Schimmel ns1_create 524438a4f56SIdo Schimmel 525438a4f56SIdo Schimmel l2_vni_init 526438a4f56SIdo Schimmel l3_vni_init 527438a4f56SIdo Schimmel} 528438a4f56SIdo Schimmel 529438a4f56SIdo Schimmelcleanup() 530438a4f56SIdo Schimmel{ 531438a4f56SIdo Schimmel pre_cleanup 532438a4f56SIdo Schimmel 533438a4f56SIdo Schimmel ns1_destroy 534438a4f56SIdo Schimmel spine_destroy 535438a4f56SIdo Schimmel ip link del dev v1 536438a4f56SIdo Schimmel 537438a4f56SIdo Schimmel switch_destroy 538438a4f56SIdo Schimmel h2_destroy 539438a4f56SIdo Schimmel h1_destroy 540438a4f56SIdo Schimmel 541438a4f56SIdo Schimmel forwarding_restore 542438a4f56SIdo Schimmel vrf_cleanup 543438a4f56SIdo Schimmel} 544438a4f56SIdo Schimmel 545438a4f56SIdo Schimmelping_ipv4() 546438a4f56SIdo Schimmel{ 547438a4f56SIdo Schimmel ping_test $h1 10.1.2.101 ": local->local vid 10->vid 20" 548438a4f56SIdo Schimmel ping_test $h1 10.1.1.102 ": local->remote vid 10->vid 10" 549438a4f56SIdo Schimmel ping_test $h2 10.1.2.102 ": local->remote vid 20->vid 20" 550438a4f56SIdo Schimmel ping_test $h1 10.1.2.102 ": local->remote vid 10->vid 20" 551438a4f56SIdo Schimmel ping_test $h2 10.1.1.102 ": local->remote vid 20->vid 10" 552438a4f56SIdo Schimmel} 553438a4f56SIdo Schimmel 554438a4f56SIdo Schimmeltrap cleanup EXIT 555438a4f56SIdo Schimmel 556438a4f56SIdo Schimmelsetup_prepare 557438a4f56SIdo Schimmelsetup_wait 558438a4f56SIdo Schimmel 559438a4f56SIdo Schimmeltests_run 560438a4f56SIdo Schimmel 561438a4f56SIdo Schimmelexit $EXIT_STATUS 562