1b5166d7aSIdo Schimmel#!/bin/bash 2b5166d7aSIdo Schimmel# SPDX-License-Identifier: GPL-2.0 3b5166d7aSIdo Schimmel 4b5166d7aSIdo Schimmel# +-----------------------+ +------------------------+ 5b5166d7aSIdo Schimmel# | H1 (vrf) | | H2 (vrf) | 6b5166d7aSIdo Schimmel# | + $h1.10 | | + $h2.10 | 7b5166d7aSIdo Schimmel# | | 192.0.2.1/28 | | | 192.0.2.2/28 | 8b5166d7aSIdo Schimmel# | | | | | | 9b5166d7aSIdo Schimmel# | | + $h1.20 | | | + $h2.20 | 10b5166d7aSIdo Schimmel# | \ | 198.51.100.1/24 | | \ | 198.51.100.2/24 | 11b5166d7aSIdo Schimmel# | \| | | \| | 12b5166d7aSIdo Schimmel# | + $h1 | | + $h2 | 13b5166d7aSIdo Schimmel# +----|------------------+ +----|-------------------+ 14b5166d7aSIdo Schimmel# | | 15b5166d7aSIdo Schimmel# +----|--------------------------------------------------|-------------------+ 16b5166d7aSIdo Schimmel# | SW | | | 17b5166d7aSIdo Schimmel# | +--|--------------------------------------------------|-----------------+ | 18b5166d7aSIdo Schimmel# | | + $swp1 BR1 (802.1q) + $swp2 | | 19b5166d7aSIdo Schimmel# | | vid 10 vid 10 | | 20b5166d7aSIdo Schimmel# | | vid 20 vid 20 | | 21b5166d7aSIdo Schimmel# | | | | 22b5166d7aSIdo Schimmel# | | + vx10 (vxlan) + vx20 (vxlan) | | 23b5166d7aSIdo Schimmel# | | local 192.0.2.17 local 192.0.2.17 | | 24b5166d7aSIdo Schimmel# | | remote 192.0.2.34 192.0.2.50 remote 192.0.2.34 192.0.2.50 | | 25b5166d7aSIdo Schimmel# | | id 1000 dstport $VXPORT id 2000 dstport $VXPORT | | 26b5166d7aSIdo Schimmel# | | vid 10 pvid untagged vid 20 pvid untagged | | 27b5166d7aSIdo Schimmel# | +-----------------------------------------------------------------------+ | 28b5166d7aSIdo Schimmel# | | 29b5166d7aSIdo Schimmel# | 192.0.2.32/28 via 192.0.2.18 | 30b5166d7aSIdo Schimmel# | 192.0.2.48/28 via 192.0.2.18 | 31b5166d7aSIdo Schimmel# | | 32b5166d7aSIdo Schimmel# | + $rp1 | 33b5166d7aSIdo Schimmel# | | 192.0.2.17/28 | 34b5166d7aSIdo Schimmel# +----|----------------------------------------------------------------------+ 35b5166d7aSIdo Schimmel# | 36b5166d7aSIdo Schimmel# +----|--------------------------------------------------------+ 37b5166d7aSIdo Schimmel# | | VRP2 (vrf) | 38b5166d7aSIdo Schimmel# | + $rp2 | 39b5166d7aSIdo Schimmel# | 192.0.2.18/28 | 40b5166d7aSIdo Schimmel# | | (maybe) HW 41b5166d7aSIdo Schimmel# ============================================================================= 42b5166d7aSIdo Schimmel# | | (likely) SW 43b5166d7aSIdo Schimmel# | + v1 (veth) + v3 (veth) | 44b5166d7aSIdo Schimmel# | | 192.0.2.33/28 | 192.0.2.49/28 | 45b5166d7aSIdo Schimmel# +----|---------------------------------------|----------------+ 46b5166d7aSIdo Schimmel# | | 47b5166d7aSIdo Schimmel# +----|------------------------------+ +----|------------------------------+ 48b5166d7aSIdo Schimmel# | + v2 (veth) NS1 (netns) | | + v4 (veth) NS2 (netns) | 49b5166d7aSIdo Schimmel# | 192.0.2.34/28 | | 192.0.2.50/28 | 50b5166d7aSIdo Schimmel# | | | | 51b5166d7aSIdo Schimmel# | 192.0.2.16/28 via 192.0.2.33 | | 192.0.2.16/28 via 192.0.2.49 | 52b5166d7aSIdo Schimmel# | 192.0.2.50/32 via 192.0.2.33 | | 192.0.2.34/32 via 192.0.2.49 | 53b5166d7aSIdo Schimmel# | | | | 54b5166d7aSIdo Schimmel# | +-------------------------------+ | | +-------------------------------+ | 55b5166d7aSIdo Schimmel# | | BR2 (802.1q) | | | | BR2 (802.1q) | | 56b5166d7aSIdo Schimmel# | | + vx10 (vxlan) | | | | + vx10 (vxlan) | | 57b5166d7aSIdo Schimmel# | | local 192.0.2.34 | | | | local 192.0.2.50 | | 58b5166d7aSIdo Schimmel# | | remote 192.0.2.17 | | | | remote 192.0.2.17 | | 59b5166d7aSIdo Schimmel# | | remote 192.0.2.50 | | | | remote 192.0.2.34 | | 60b5166d7aSIdo Schimmel# | | id 1000 dstport $VXPORT | | | | id 1000 dstport $VXPORT | | 61b5166d7aSIdo Schimmel# | | vid 10 pvid untagged | | | | vid 10 pvid untagged | | 62b5166d7aSIdo Schimmel# | | | | | | | | 63b5166d7aSIdo Schimmel# | | + vx20 (vxlan) | | | | + vx20 (vxlan) | | 64b5166d7aSIdo Schimmel# | | local 192.0.2.34 | | | | local 192.0.2.50 | | 65b5166d7aSIdo Schimmel# | | remote 192.0.2.17 | | | | remote 192.0.2.17 | | 66b5166d7aSIdo Schimmel# | | remote 192.0.2.50 | | | | remote 192.0.2.34 | | 67b5166d7aSIdo Schimmel# | | id 2000 dstport $VXPORT | | | | id 2000 dstport $VXPORT | | 68b5166d7aSIdo Schimmel# | | vid 20 pvid untagged | | | | vid 20 pvid untagged | | 69b5166d7aSIdo Schimmel# | | | | | | | | 70b5166d7aSIdo Schimmel# | | + w1 (veth) | | | | + w1 (veth) | | 71b5166d7aSIdo Schimmel# | | | vid 10 | | | | | vid 10 | | 72b5166d7aSIdo Schimmel# | | | vid 20 | | | | | vid 20 | | 73b5166d7aSIdo Schimmel# | +--|----------------------------+ | | +--|----------------------------+ | 74b5166d7aSIdo Schimmel# | | | | | | 75b5166d7aSIdo Schimmel# | +--|----------------------------+ | | +--|----------------------------+ | 76b5166d7aSIdo Schimmel# | | + w2 (veth) VW2 (vrf) | | | | + w2 (veth) VW2 (vrf) | | 77b5166d7aSIdo Schimmel# | | |\ | | | | |\ | | 78b5166d7aSIdo Schimmel# | | | + w2.10 | | | | | + w2.10 | | 79b5166d7aSIdo Schimmel# | | | 192.0.2.3/28 | | | | | 192.0.2.4/28 | | 80b5166d7aSIdo Schimmel# | | | | | | | | | | 81b5166d7aSIdo Schimmel# | | + w2.20 | | | | + w2.20 | | 82b5166d7aSIdo Schimmel# | | 198.51.100.3/24 | | | | 198.51.100.4/24 | | 83b5166d7aSIdo Schimmel# | +-------------------------------+ | | +-------------------------------+ | 84b5166d7aSIdo Schimmel# +-----------------------------------+ +-----------------------------------+ 85b5166d7aSIdo Schimmel 86b5166d7aSIdo Schimmel: ${VXPORT:=4789} 87b5166d7aSIdo Schimmelexport VXPORT 88b5166d7aSIdo Schimmel 89b5166d7aSIdo Schimmel: ${ALL_TESTS:=" 90b5166d7aSIdo Schimmel ping_ipv4 91b5166d7aSIdo Schimmel test_flood 92b5166d7aSIdo Schimmel test_unicast 93b5166d7aSIdo Schimmel reapply_config 94b5166d7aSIdo Schimmel ping_ipv4 95b5166d7aSIdo Schimmel test_flood 96b5166d7aSIdo Schimmel test_unicast 97b5166d7aSIdo Schimmel test_learning 9855939b26SIdo Schimmel test_pvid 99b5166d7aSIdo Schimmel "} 100b5166d7aSIdo Schimmel 101b5166d7aSIdo SchimmelNUM_NETIFS=6 102b5166d7aSIdo Schimmelsource lib.sh 103b5166d7aSIdo Schimmel 104b5166d7aSIdo Schimmelh1_create() 105b5166d7aSIdo Schimmel{ 106b5166d7aSIdo Schimmel simple_if_init $h1 107b5166d7aSIdo Schimmel tc qdisc add dev $h1 clsact 108b5166d7aSIdo Schimmel vlan_create $h1 10 v$h1 192.0.2.1/28 109b5166d7aSIdo Schimmel vlan_create $h1 20 v$h1 198.51.100.1/24 110b5166d7aSIdo Schimmel} 111b5166d7aSIdo Schimmel 112b5166d7aSIdo Schimmelh1_destroy() 113b5166d7aSIdo Schimmel{ 114b5166d7aSIdo Schimmel vlan_destroy $h1 20 115b5166d7aSIdo Schimmel vlan_destroy $h1 10 116b5166d7aSIdo Schimmel tc qdisc del dev $h1 clsact 117b5166d7aSIdo Schimmel simple_if_fini $h1 118b5166d7aSIdo Schimmel} 119b5166d7aSIdo Schimmel 120b5166d7aSIdo Schimmelh2_create() 121b5166d7aSIdo Schimmel{ 122b5166d7aSIdo Schimmel simple_if_init $h2 123b5166d7aSIdo Schimmel tc qdisc add dev $h2 clsact 124b5166d7aSIdo Schimmel vlan_create $h2 10 v$h2 192.0.2.2/28 125b5166d7aSIdo Schimmel vlan_create $h2 20 v$h2 198.51.100.2/24 126b5166d7aSIdo Schimmel} 127b5166d7aSIdo Schimmel 128b5166d7aSIdo Schimmelh2_destroy() 129b5166d7aSIdo Schimmel{ 130b5166d7aSIdo Schimmel vlan_destroy $h2 20 131b5166d7aSIdo Schimmel vlan_destroy $h2 10 132b5166d7aSIdo Schimmel tc qdisc del dev $h2 clsact 133b5166d7aSIdo Schimmel simple_if_fini $h2 134b5166d7aSIdo Schimmel} 135b5166d7aSIdo Schimmel 136b5166d7aSIdo Schimmelrp1_set_addr() 137b5166d7aSIdo Schimmel{ 138b5166d7aSIdo Schimmel ip address add dev $rp1 192.0.2.17/28 139b5166d7aSIdo Schimmel 140b5166d7aSIdo Schimmel ip route add 192.0.2.32/28 nexthop via 192.0.2.18 141b5166d7aSIdo Schimmel ip route add 192.0.2.48/28 nexthop via 192.0.2.18 142b5166d7aSIdo Schimmel} 143b5166d7aSIdo Schimmel 144b5166d7aSIdo Schimmelrp1_unset_addr() 145b5166d7aSIdo Schimmel{ 146b5166d7aSIdo Schimmel ip route del 192.0.2.48/28 nexthop via 192.0.2.18 147b5166d7aSIdo Schimmel ip route del 192.0.2.32/28 nexthop via 192.0.2.18 148b5166d7aSIdo Schimmel 149b5166d7aSIdo Schimmel ip address del dev $rp1 192.0.2.17/28 150b5166d7aSIdo Schimmel} 151b5166d7aSIdo Schimmel 152b5166d7aSIdo Schimmelswitch_create() 153b5166d7aSIdo Schimmel{ 154b5166d7aSIdo Schimmel ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 \ 155b5166d7aSIdo Schimmel mcast_snooping 0 156b5166d7aSIdo Schimmel # Make sure the bridge uses the MAC address of the local port and not 157b5166d7aSIdo Schimmel # that of the VxLAN's device. 158b5166d7aSIdo Schimmel ip link set dev br1 address $(mac_get $swp1) 159b5166d7aSIdo Schimmel ip link set dev br1 up 160b5166d7aSIdo Schimmel 161b5166d7aSIdo Schimmel ip link set dev $rp1 up 162b5166d7aSIdo Schimmel rp1_set_addr 163b5166d7aSIdo Schimmel 164b5166d7aSIdo Schimmel ip link add name vx10 type vxlan id 1000 \ 165b5166d7aSIdo Schimmel local 192.0.2.17 dstport "$VXPORT" \ 166b5166d7aSIdo Schimmel nolearning noudpcsum tos inherit ttl 100 167b5166d7aSIdo Schimmel ip link set dev vx10 up 168b5166d7aSIdo Schimmel 169b5166d7aSIdo Schimmel ip link set dev vx10 master br1 170b5166d7aSIdo Schimmel bridge vlan add vid 10 dev vx10 pvid untagged 171b5166d7aSIdo Schimmel 172b5166d7aSIdo Schimmel ip link add name vx20 type vxlan id 2000 \ 173b5166d7aSIdo Schimmel local 192.0.2.17 dstport "$VXPORT" \ 174b5166d7aSIdo Schimmel nolearning noudpcsum tos inherit ttl 100 175b5166d7aSIdo Schimmel ip link set dev vx20 up 176b5166d7aSIdo Schimmel 177b5166d7aSIdo Schimmel ip link set dev vx20 master br1 178b5166d7aSIdo Schimmel bridge vlan add vid 20 dev vx20 pvid untagged 179b5166d7aSIdo Schimmel 180b5166d7aSIdo Schimmel ip link set dev $swp1 master br1 181b5166d7aSIdo Schimmel ip link set dev $swp1 up 182b5166d7aSIdo Schimmel bridge vlan add vid 10 dev $swp1 183b5166d7aSIdo Schimmel bridge vlan add vid 20 dev $swp1 184b5166d7aSIdo Schimmel 185b5166d7aSIdo Schimmel ip link set dev $swp2 master br1 186b5166d7aSIdo Schimmel ip link set dev $swp2 up 187b5166d7aSIdo Schimmel bridge vlan add vid 10 dev $swp2 188b5166d7aSIdo Schimmel bridge vlan add vid 20 dev $swp2 189b5166d7aSIdo Schimmel 190b5166d7aSIdo Schimmel bridge fdb append dev vx10 00:00:00:00:00:00 dst 192.0.2.34 self 191b5166d7aSIdo Schimmel bridge fdb append dev vx10 00:00:00:00:00:00 dst 192.0.2.50 self 192b5166d7aSIdo Schimmel 193b5166d7aSIdo Schimmel bridge fdb append dev vx20 00:00:00:00:00:00 dst 192.0.2.34 self 194b5166d7aSIdo Schimmel bridge fdb append dev vx20 00:00:00:00:00:00 dst 192.0.2.50 self 195b5166d7aSIdo Schimmel} 196b5166d7aSIdo Schimmel 197b5166d7aSIdo Schimmelswitch_destroy() 198b5166d7aSIdo Schimmel{ 199b5166d7aSIdo Schimmel bridge fdb del dev vx20 00:00:00:00:00:00 dst 192.0.2.50 self 200b5166d7aSIdo Schimmel bridge fdb del dev vx20 00:00:00:00:00:00 dst 192.0.2.34 self 201b5166d7aSIdo Schimmel 202b5166d7aSIdo Schimmel bridge fdb del dev vx10 00:00:00:00:00:00 dst 192.0.2.50 self 203b5166d7aSIdo Schimmel bridge fdb del dev vx10 00:00:00:00:00:00 dst 192.0.2.34 self 204b5166d7aSIdo Schimmel 205b5166d7aSIdo Schimmel bridge vlan del vid 20 dev $swp2 206b5166d7aSIdo Schimmel bridge vlan del vid 10 dev $swp2 207b5166d7aSIdo Schimmel ip link set dev $swp2 down 208b5166d7aSIdo Schimmel ip link set dev $swp2 nomaster 209b5166d7aSIdo Schimmel 210b5166d7aSIdo Schimmel bridge vlan del vid 20 dev $swp1 211b5166d7aSIdo Schimmel bridge vlan del vid 10 dev $swp1 212b5166d7aSIdo Schimmel ip link set dev $swp1 down 213b5166d7aSIdo Schimmel ip link set dev $swp1 nomaster 214b5166d7aSIdo Schimmel 215b5166d7aSIdo Schimmel bridge vlan del vid 20 dev vx20 216b5166d7aSIdo Schimmel ip link set dev vx20 nomaster 217b5166d7aSIdo Schimmel 218b5166d7aSIdo Schimmel ip link set dev vx20 down 219b5166d7aSIdo Schimmel ip link del dev vx20 220b5166d7aSIdo Schimmel 221b5166d7aSIdo Schimmel bridge vlan del vid 10 dev vx10 222b5166d7aSIdo Schimmel ip link set dev vx10 nomaster 223b5166d7aSIdo Schimmel 224b5166d7aSIdo Schimmel ip link set dev vx10 down 225b5166d7aSIdo Schimmel ip link del dev vx10 226b5166d7aSIdo Schimmel 227b5166d7aSIdo Schimmel rp1_unset_addr 228b5166d7aSIdo Schimmel ip link set dev $rp1 down 229b5166d7aSIdo Schimmel 230b5166d7aSIdo Schimmel ip link set dev br1 down 231b5166d7aSIdo Schimmel ip link del dev br1 232b5166d7aSIdo Schimmel} 233b5166d7aSIdo Schimmel 234b5166d7aSIdo Schimmelvrp2_create() 235b5166d7aSIdo Schimmel{ 236b5166d7aSIdo Schimmel simple_if_init $rp2 192.0.2.18/28 237b5166d7aSIdo Schimmel __simple_if_init v1 v$rp2 192.0.2.33/28 238b5166d7aSIdo Schimmel __simple_if_init v3 v$rp2 192.0.2.49/28 239b5166d7aSIdo Schimmel tc qdisc add dev v1 clsact 240b5166d7aSIdo Schimmel} 241b5166d7aSIdo Schimmel 242b5166d7aSIdo Schimmelvrp2_destroy() 243b5166d7aSIdo Schimmel{ 244b5166d7aSIdo Schimmel tc qdisc del dev v1 clsact 245b5166d7aSIdo Schimmel __simple_if_fini v3 192.0.2.49/28 246b5166d7aSIdo Schimmel __simple_if_fini v1 192.0.2.33/28 247b5166d7aSIdo Schimmel simple_if_fini $rp2 192.0.2.18/28 248b5166d7aSIdo Schimmel} 249b5166d7aSIdo Schimmel 250b5166d7aSIdo Schimmelns_init_common() 251b5166d7aSIdo Schimmel{ 252b5166d7aSIdo Schimmel local in_if=$1; shift 253b5166d7aSIdo Schimmel local in_addr=$1; shift 254b5166d7aSIdo Schimmel local other_in_addr=$1; shift 255b5166d7aSIdo Schimmel local nh_addr=$1; shift 256b5166d7aSIdo Schimmel local host_addr1=$1; shift 257b5166d7aSIdo Schimmel local host_addr2=$1; shift 258b5166d7aSIdo Schimmel 259b5166d7aSIdo Schimmel ip link set dev $in_if up 260b5166d7aSIdo Schimmel ip address add dev $in_if $in_addr/28 261b5166d7aSIdo Schimmel tc qdisc add dev $in_if clsact 262b5166d7aSIdo Schimmel 263b5166d7aSIdo Schimmel ip link add name br2 type bridge vlan_filtering 1 vlan_default_pvid 0 264b5166d7aSIdo Schimmel ip link set dev br2 up 265b5166d7aSIdo Schimmel 266b5166d7aSIdo Schimmel ip link add name w1 type veth peer name w2 267b5166d7aSIdo Schimmel 268b5166d7aSIdo Schimmel ip link set dev w1 master br2 269b5166d7aSIdo Schimmel ip link set dev w1 up 270b5166d7aSIdo Schimmel 271b5166d7aSIdo Schimmel bridge vlan add vid 10 dev w1 272b5166d7aSIdo Schimmel bridge vlan add vid 20 dev w1 273b5166d7aSIdo Schimmel 274b5166d7aSIdo Schimmel ip link add name vx10 type vxlan id 1000 local $in_addr \ 275b5166d7aSIdo Schimmel dstport "$VXPORT" 276b5166d7aSIdo Schimmel ip link set dev vx10 up 277b5166d7aSIdo Schimmel bridge fdb append dev vx10 00:00:00:00:00:00 dst 192.0.2.17 self 278b5166d7aSIdo Schimmel bridge fdb append dev vx10 00:00:00:00:00:00 dst $other_in_addr self 279b5166d7aSIdo Schimmel 280b5166d7aSIdo Schimmel ip link set dev vx10 master br2 281b5166d7aSIdo Schimmel tc qdisc add dev vx10 clsact 282b5166d7aSIdo Schimmel 283b5166d7aSIdo Schimmel bridge vlan add vid 10 dev vx10 pvid untagged 284b5166d7aSIdo Schimmel 285b5166d7aSIdo Schimmel ip link add name vx20 type vxlan id 2000 local $in_addr \ 286b5166d7aSIdo Schimmel dstport "$VXPORT" 287b5166d7aSIdo Schimmel ip link set dev vx20 up 288b5166d7aSIdo Schimmel bridge fdb append dev vx20 00:00:00:00:00:00 dst 192.0.2.17 self 289b5166d7aSIdo Schimmel bridge fdb append dev vx20 00:00:00:00:00:00 dst $other_in_addr self 290b5166d7aSIdo Schimmel 291b5166d7aSIdo Schimmel ip link set dev vx20 master br2 292b5166d7aSIdo Schimmel tc qdisc add dev vx20 clsact 293b5166d7aSIdo Schimmel 294b5166d7aSIdo Schimmel bridge vlan add vid 20 dev vx20 pvid untagged 295b5166d7aSIdo Schimmel 296b5166d7aSIdo Schimmel simple_if_init w2 297b5166d7aSIdo Schimmel vlan_create w2 10 vw2 $host_addr1/28 298b5166d7aSIdo Schimmel vlan_create w2 20 vw2 $host_addr2/24 299b5166d7aSIdo Schimmel 300b5166d7aSIdo Schimmel ip route add 192.0.2.16/28 nexthop via $nh_addr 301b5166d7aSIdo Schimmel ip route add $other_in_addr/32 nexthop via $nh_addr 302b5166d7aSIdo Schimmel} 303b5166d7aSIdo Schimmelexport -f ns_init_common 304b5166d7aSIdo Schimmel 305b5166d7aSIdo Schimmelns1_create() 306b5166d7aSIdo Schimmel{ 307b5166d7aSIdo Schimmel ip netns add ns1 308b5166d7aSIdo Schimmel ip link set dev v2 netns ns1 309b5166d7aSIdo Schimmel in_ns ns1 \ 310b5166d7aSIdo Schimmel ns_init_common v2 192.0.2.34 192.0.2.50 192.0.2.33 192.0.2.3 \ 311b5166d7aSIdo Schimmel 198.51.100.3 312b5166d7aSIdo Schimmel} 313b5166d7aSIdo Schimmel 314b5166d7aSIdo Schimmelns1_destroy() 315b5166d7aSIdo Schimmel{ 316b5166d7aSIdo Schimmel ip netns exec ns1 ip link set dev v2 netns 1 317b5166d7aSIdo Schimmel ip netns del ns1 318b5166d7aSIdo Schimmel} 319b5166d7aSIdo Schimmel 320b5166d7aSIdo Schimmelns2_create() 321b5166d7aSIdo Schimmel{ 322b5166d7aSIdo Schimmel ip netns add ns2 323b5166d7aSIdo Schimmel ip link set dev v4 netns ns2 324b5166d7aSIdo Schimmel in_ns ns2 \ 325b5166d7aSIdo Schimmel ns_init_common v4 192.0.2.50 192.0.2.34 192.0.2.49 192.0.2.4 \ 326b5166d7aSIdo Schimmel 198.51.100.4 327b5166d7aSIdo Schimmel} 328b5166d7aSIdo Schimmel 329b5166d7aSIdo Schimmelns2_destroy() 330b5166d7aSIdo Schimmel{ 331b5166d7aSIdo Schimmel ip netns exec ns2 ip link set dev v4 netns 1 332b5166d7aSIdo Schimmel ip netns del ns2 333b5166d7aSIdo Schimmel} 334b5166d7aSIdo Schimmel 335b5166d7aSIdo Schimmelsetup_prepare() 336b5166d7aSIdo Schimmel{ 337b5166d7aSIdo Schimmel h1=${NETIFS[p1]} 338b5166d7aSIdo Schimmel swp1=${NETIFS[p2]} 339b5166d7aSIdo Schimmel 340b5166d7aSIdo Schimmel swp2=${NETIFS[p3]} 341b5166d7aSIdo Schimmel h2=${NETIFS[p4]} 342b5166d7aSIdo Schimmel 343b5166d7aSIdo Schimmel rp1=${NETIFS[p5]} 344b5166d7aSIdo Schimmel rp2=${NETIFS[p6]} 345b5166d7aSIdo Schimmel 346b5166d7aSIdo Schimmel vrf_prepare 347b5166d7aSIdo Schimmel forwarding_enable 348b5166d7aSIdo Schimmel 349b5166d7aSIdo Schimmel h1_create 350b5166d7aSIdo Schimmel h2_create 351b5166d7aSIdo Schimmel switch_create 352b5166d7aSIdo Schimmel 353b5166d7aSIdo Schimmel ip link add name v1 type veth peer name v2 354b5166d7aSIdo Schimmel ip link add name v3 type veth peer name v4 355b5166d7aSIdo Schimmel vrp2_create 356b5166d7aSIdo Schimmel ns1_create 357b5166d7aSIdo Schimmel ns2_create 358b5166d7aSIdo Schimmel 359b5166d7aSIdo Schimmel r1_mac=$(in_ns ns1 mac_get w2) 360b5166d7aSIdo Schimmel r2_mac=$(in_ns ns2 mac_get w2) 361b5166d7aSIdo Schimmel h2_mac=$(mac_get $h2) 362b5166d7aSIdo Schimmel} 363b5166d7aSIdo Schimmel 364b5166d7aSIdo Schimmelcleanup() 365b5166d7aSIdo Schimmel{ 366b5166d7aSIdo Schimmel pre_cleanup 367b5166d7aSIdo Schimmel 368b5166d7aSIdo Schimmel ns2_destroy 369b5166d7aSIdo Schimmel ns1_destroy 370b5166d7aSIdo Schimmel vrp2_destroy 371b5166d7aSIdo Schimmel ip link del dev v3 372b5166d7aSIdo Schimmel ip link del dev v1 373b5166d7aSIdo Schimmel 374b5166d7aSIdo Schimmel switch_destroy 375b5166d7aSIdo Schimmel h2_destroy 376b5166d7aSIdo Schimmel h1_destroy 377b5166d7aSIdo Schimmel 378b5166d7aSIdo Schimmel forwarding_restore 379b5166d7aSIdo Schimmel vrf_cleanup 380b5166d7aSIdo Schimmel} 381b5166d7aSIdo Schimmel 382b5166d7aSIdo Schimmel# For the first round of tests, vx10 and vx20 were the first devices to get 383b5166d7aSIdo Schimmel# attached to the bridge, and that at the point that the local IP is already 384b5166d7aSIdo Schimmel# configured. Try the other scenario of attaching these devices to a bridge 385b5166d7aSIdo Schimmel# that already has local ports members, and only then assign the local IP. 386b5166d7aSIdo Schimmelreapply_config() 387b5166d7aSIdo Schimmel{ 388b5166d7aSIdo Schimmel log_info "Reapplying configuration" 389b5166d7aSIdo Schimmel 390b5166d7aSIdo Schimmel bridge fdb del dev vx20 00:00:00:00:00:00 dst 192.0.2.50 self 391b5166d7aSIdo Schimmel bridge fdb del dev vx20 00:00:00:00:00:00 dst 192.0.2.34 self 392b5166d7aSIdo Schimmel 393b5166d7aSIdo Schimmel bridge fdb del dev vx10 00:00:00:00:00:00 dst 192.0.2.50 self 394b5166d7aSIdo Schimmel bridge fdb del dev vx10 00:00:00:00:00:00 dst 192.0.2.34 self 395b5166d7aSIdo Schimmel 396b5166d7aSIdo Schimmel ip link set dev vx20 nomaster 397b5166d7aSIdo Schimmel ip link set dev vx10 nomaster 398b5166d7aSIdo Schimmel 399b5166d7aSIdo Schimmel rp1_unset_addr 400b5166d7aSIdo Schimmel sleep 5 401b5166d7aSIdo Schimmel 402b5166d7aSIdo Schimmel ip link set dev vx10 master br1 403b5166d7aSIdo Schimmel bridge vlan add vid 10 dev vx10 pvid untagged 404b5166d7aSIdo Schimmel 405b5166d7aSIdo Schimmel ip link set dev vx20 master br1 406b5166d7aSIdo Schimmel bridge vlan add vid 20 dev vx20 pvid untagged 407b5166d7aSIdo Schimmel 408b5166d7aSIdo Schimmel bridge fdb append dev vx10 00:00:00:00:00:00 dst 192.0.2.34 self 409b5166d7aSIdo Schimmel bridge fdb append dev vx10 00:00:00:00:00:00 dst 192.0.2.50 self 410b5166d7aSIdo Schimmel 411b5166d7aSIdo Schimmel bridge fdb append dev vx20 00:00:00:00:00:00 dst 192.0.2.34 self 412b5166d7aSIdo Schimmel bridge fdb append dev vx20 00:00:00:00:00:00 dst 192.0.2.50 self 413b5166d7aSIdo Schimmel 414b5166d7aSIdo Schimmel rp1_set_addr 415b5166d7aSIdo Schimmel sleep 5 416b5166d7aSIdo Schimmel} 417b5166d7aSIdo Schimmel 418b5166d7aSIdo Schimmelping_ipv4() 419b5166d7aSIdo Schimmel{ 420b5166d7aSIdo Schimmel ping_test $h1.10 192.0.2.2 ": local->local vid 10" 421b5166d7aSIdo Schimmel ping_test $h1.20 198.51.100.2 ": local->local vid 20" 422b5166d7aSIdo Schimmel ping_test $h1.10 192.0.2.3 ": local->remote 1 vid 10" 423b5166d7aSIdo Schimmel ping_test $h1.10 192.0.2.4 ": local->remote 2 vid 10" 424b5166d7aSIdo Schimmel ping_test $h1.20 198.51.100.3 ": local->remote 1 vid 20" 425b5166d7aSIdo Schimmel ping_test $h1.20 198.51.100.4 ": local->remote 2 vid 20" 426b5166d7aSIdo Schimmel} 427b5166d7aSIdo Schimmel 428b5166d7aSIdo Schimmelmaybe_in_ns() 429b5166d7aSIdo Schimmel{ 430b5166d7aSIdo Schimmel echo ${1:+in_ns} $1 431b5166d7aSIdo Schimmel} 432b5166d7aSIdo Schimmel 433b5166d7aSIdo Schimmel__flood_counter_add_del() 434b5166d7aSIdo Schimmel{ 435b5166d7aSIdo Schimmel local add_del=$1; shift 436b5166d7aSIdo Schimmel local dev=$1; shift 437b5166d7aSIdo Schimmel local ns=$1; shift 438b5166d7aSIdo Schimmel 439b5166d7aSIdo Schimmel # Putting the ICMP capture both to HW and to SW will end up 440b5166d7aSIdo Schimmel # double-counting the packets that are trapped to slow path, such as for 441b5166d7aSIdo Schimmel # the unicast test. Adding either skip_hw or skip_sw fixes this problem, 442b5166d7aSIdo Schimmel # but with skip_hw, the flooded packets are not counted at all, because 443b5166d7aSIdo Schimmel # those are dropped due to MAC address mismatch; and skip_sw is a no-go 444b5166d7aSIdo Schimmel # for veth-based topologies. 445b5166d7aSIdo Schimmel # 446b5166d7aSIdo Schimmel # So try to install with skip_sw and fall back to skip_sw if that fails. 447b5166d7aSIdo Schimmel 448b5166d7aSIdo Schimmel $(maybe_in_ns $ns) __icmp_capture_add_del \ 449b5166d7aSIdo Schimmel $add_del 100 "" $dev skip_sw 2>/dev/null || \ 450b5166d7aSIdo Schimmel $(maybe_in_ns $ns) __icmp_capture_add_del \ 451b5166d7aSIdo Schimmel $add_del 100 "" $dev skip_hw 452b5166d7aSIdo Schimmel} 453b5166d7aSIdo Schimmel 454b5166d7aSIdo Schimmelflood_counter_install() 455b5166d7aSIdo Schimmel{ 456b5166d7aSIdo Schimmel __flood_counter_add_del add "$@" 457b5166d7aSIdo Schimmel} 458b5166d7aSIdo Schimmel 459b5166d7aSIdo Schimmelflood_counter_uninstall() 460b5166d7aSIdo Schimmel{ 461b5166d7aSIdo Schimmel __flood_counter_add_del del "$@" 462b5166d7aSIdo Schimmel} 463b5166d7aSIdo Schimmel 464b5166d7aSIdo Schimmelflood_fetch_stat() 465b5166d7aSIdo Schimmel{ 466b5166d7aSIdo Schimmel local dev=$1; shift 467b5166d7aSIdo Schimmel local ns=$1; shift 468b5166d7aSIdo Schimmel 469b5166d7aSIdo Schimmel $(maybe_in_ns $ns) tc_rule_stats_get $dev 100 ingress 470b5166d7aSIdo Schimmel} 471b5166d7aSIdo Schimmel 472b5166d7aSIdo Schimmelflood_fetch_stats() 473b5166d7aSIdo Schimmel{ 474b5166d7aSIdo Schimmel local counters=("${@}") 475b5166d7aSIdo Schimmel local counter 476b5166d7aSIdo Schimmel 477b5166d7aSIdo Schimmel for counter in "${counters[@]}"; do 478b5166d7aSIdo Schimmel flood_fetch_stat $counter 479b5166d7aSIdo Schimmel done 480b5166d7aSIdo Schimmel} 481b5166d7aSIdo Schimmel 482b5166d7aSIdo Schimmelvxlan_flood_test() 483b5166d7aSIdo Schimmel{ 484b5166d7aSIdo Schimmel local mac=$1; shift 485b5166d7aSIdo Schimmel local dst=$1; shift 486b5166d7aSIdo Schimmel local vid=$1; shift 487b5166d7aSIdo Schimmel local -a expects=("${@}") 488b5166d7aSIdo Schimmel 489b5166d7aSIdo Schimmel local -a counters=($h2 "vx10 ns1" "vx20 ns1" "vx10 ns2" "vx20 ns2") 490b5166d7aSIdo Schimmel local counter 491b5166d7aSIdo Schimmel local key 492b5166d7aSIdo Schimmel 493b5166d7aSIdo Schimmel # Packets reach the local host tagged whereas they reach the VxLAN 494b5166d7aSIdo Schimmel # devices untagged. In order to be able to use the same filter for 495b5166d7aSIdo Schimmel # all counters, make sure the packets also reach the local host 496b5166d7aSIdo Schimmel # untagged 497b5166d7aSIdo Schimmel bridge vlan add vid $vid dev $swp2 untagged 498b5166d7aSIdo Schimmel for counter in "${counters[@]}"; do 499b5166d7aSIdo Schimmel flood_counter_install $counter 500b5166d7aSIdo Schimmel done 501b5166d7aSIdo Schimmel 502b5166d7aSIdo Schimmel local -a t0s=($(flood_fetch_stats "${counters[@]}")) 503b5166d7aSIdo Schimmel $MZ $h1 -Q $vid -c 10 -d 100msec -p 64 -b $mac -B $dst -t icmp -q 504b5166d7aSIdo Schimmel sleep 1 505b5166d7aSIdo Schimmel local -a t1s=($(flood_fetch_stats "${counters[@]}")) 506b5166d7aSIdo Schimmel 507b5166d7aSIdo Schimmel for key in ${!t0s[@]}; do 508b5166d7aSIdo Schimmel local delta=$((t1s[$key] - t0s[$key])) 509b5166d7aSIdo Schimmel local expect=${expects[$key]} 510b5166d7aSIdo Schimmel 511b5166d7aSIdo Schimmel ((expect == delta)) 512b5166d7aSIdo Schimmel check_err $? "${counters[$key]}: Expected to capture $expect packets, got $delta." 513b5166d7aSIdo Schimmel done 514b5166d7aSIdo Schimmel 515b5166d7aSIdo Schimmel for counter in "${counters[@]}"; do 516b5166d7aSIdo Schimmel flood_counter_uninstall $counter 517b5166d7aSIdo Schimmel done 518b5166d7aSIdo Schimmel bridge vlan add vid $vid dev $swp2 519b5166d7aSIdo Schimmel} 520b5166d7aSIdo Schimmel 521b5166d7aSIdo Schimmel__test_flood() 522b5166d7aSIdo Schimmel{ 523b5166d7aSIdo Schimmel local mac=$1; shift 524b5166d7aSIdo Schimmel local dst=$1; shift 525b5166d7aSIdo Schimmel local vid=$1; shift 526b5166d7aSIdo Schimmel local what=$1; shift 527b5166d7aSIdo Schimmel local -a expects=("${@}") 528b5166d7aSIdo Schimmel 529b5166d7aSIdo Schimmel RET=0 530b5166d7aSIdo Schimmel 531b5166d7aSIdo Schimmel vxlan_flood_test $mac $dst $vid "${expects[@]}" 532b5166d7aSIdo Schimmel 533b5166d7aSIdo Schimmel log_test "VXLAN: $what" 534b5166d7aSIdo Schimmel} 535b5166d7aSIdo Schimmel 536b5166d7aSIdo Schimmeltest_flood() 537b5166d7aSIdo Schimmel{ 538b5166d7aSIdo Schimmel __test_flood de:ad:be:ef:13:37 192.0.2.100 10 "flood vlan 10" \ 539b5166d7aSIdo Schimmel 10 10 0 10 0 540b5166d7aSIdo Schimmel __test_flood ca:fe:be:ef:13:37 198.51.100.100 20 "flood vlan 20" \ 541b5166d7aSIdo Schimmel 10 0 10 0 10 542b5166d7aSIdo Schimmel} 543b5166d7aSIdo Schimmel 544b5166d7aSIdo Schimmelvxlan_fdb_add_del() 545b5166d7aSIdo Schimmel{ 546b5166d7aSIdo Schimmel local add_del=$1; shift 547b5166d7aSIdo Schimmel local vid=$1; shift 548b5166d7aSIdo Schimmel local mac=$1; shift 549b5166d7aSIdo Schimmel local dev=$1; shift 550b5166d7aSIdo Schimmel local dst=$1; shift 551b5166d7aSIdo Schimmel 552b5166d7aSIdo Schimmel bridge fdb $add_del dev $dev $mac self static permanent \ 553b5166d7aSIdo Schimmel ${dst:+dst} $dst 2>/dev/null 554b5166d7aSIdo Schimmel bridge fdb $add_del dev $dev $mac master static vlan $vid 2>/dev/null 555b5166d7aSIdo Schimmel} 556b5166d7aSIdo Schimmel 557b5166d7aSIdo Schimmel__test_unicast() 558b5166d7aSIdo Schimmel{ 559b5166d7aSIdo Schimmel local mac=$1; shift 560b5166d7aSIdo Schimmel local dst=$1; shift 561b5166d7aSIdo Schimmel local hit_idx=$1; shift 562b5166d7aSIdo Schimmel local vid=$1; shift 563b5166d7aSIdo Schimmel local what=$1; shift 564b5166d7aSIdo Schimmel 565b5166d7aSIdo Schimmel RET=0 566b5166d7aSIdo Schimmel 567b5166d7aSIdo Schimmel local -a expects=(0 0 0 0 0) 568b5166d7aSIdo Schimmel expects[$hit_idx]=10 569b5166d7aSIdo Schimmel 570b5166d7aSIdo Schimmel vxlan_flood_test $mac $dst $vid "${expects[@]}" 571b5166d7aSIdo Schimmel 572b5166d7aSIdo Schimmel log_test "VXLAN: $what" 573b5166d7aSIdo Schimmel} 574b5166d7aSIdo Schimmel 575b5166d7aSIdo Schimmeltest_unicast() 576b5166d7aSIdo Schimmel{ 577b5166d7aSIdo Schimmel local -a targets=("$h2_mac $h2" 578b5166d7aSIdo Schimmel "$r1_mac vx10 192.0.2.34" 579b5166d7aSIdo Schimmel "$r2_mac vx10 192.0.2.50") 580b5166d7aSIdo Schimmel local target 581b5166d7aSIdo Schimmel 582b5166d7aSIdo Schimmel log_info "unicast vlan 10" 583b5166d7aSIdo Schimmel 584b5166d7aSIdo Schimmel for target in "${targets[@]}"; do 585b5166d7aSIdo Schimmel vxlan_fdb_add_del add 10 $target 586b5166d7aSIdo Schimmel done 587b5166d7aSIdo Schimmel 588b5166d7aSIdo Schimmel __test_unicast $h2_mac 192.0.2.2 0 10 "local MAC unicast" 589b5166d7aSIdo Schimmel __test_unicast $r1_mac 192.0.2.3 1 10 "remote MAC 1 unicast" 590b5166d7aSIdo Schimmel __test_unicast $r2_mac 192.0.2.4 3 10 "remote MAC 2 unicast" 591b5166d7aSIdo Schimmel 592b5166d7aSIdo Schimmel for target in "${targets[@]}"; do 593b5166d7aSIdo Schimmel vxlan_fdb_add_del del 10 $target 594b5166d7aSIdo Schimmel done 595b5166d7aSIdo Schimmel 596b5166d7aSIdo Schimmel log_info "unicast vlan 20" 597b5166d7aSIdo Schimmel 598b5166d7aSIdo Schimmel targets=("$h2_mac $h2" "$r1_mac vx20 192.0.2.34" \ 599b5166d7aSIdo Schimmel "$r2_mac vx20 192.0.2.50") 600b5166d7aSIdo Schimmel 601b5166d7aSIdo Schimmel for target in "${targets[@]}"; do 602b5166d7aSIdo Schimmel vxlan_fdb_add_del add 20 $target 603b5166d7aSIdo Schimmel done 604b5166d7aSIdo Schimmel 605b5166d7aSIdo Schimmel __test_unicast $h2_mac 198.51.100.2 0 20 "local MAC unicast" 606b5166d7aSIdo Schimmel __test_unicast $r1_mac 198.51.100.3 2 20 "remote MAC 1 unicast" 607b5166d7aSIdo Schimmel __test_unicast $r2_mac 198.51.100.4 4 20 "remote MAC 2 unicast" 608b5166d7aSIdo Schimmel 609b5166d7aSIdo Schimmel for target in "${targets[@]}"; do 610b5166d7aSIdo Schimmel vxlan_fdb_add_del del 20 $target 611b5166d7aSIdo Schimmel done 612b5166d7aSIdo Schimmel} 613b5166d7aSIdo Schimmel 61455939b26SIdo Schimmeltest_pvid() 61555939b26SIdo Schimmel{ 61655939b26SIdo Schimmel local -a expects=(0 0 0 0 0) 61755939b26SIdo Schimmel local mac=de:ad:be:ef:13:37 61855939b26SIdo Schimmel local dst=192.0.2.100 61955939b26SIdo Schimmel local vid=10 62055939b26SIdo Schimmel 62155939b26SIdo Schimmel # Check that flooding works 62255939b26SIdo Schimmel RET=0 62355939b26SIdo Schimmel 62455939b26SIdo Schimmel expects[0]=10; expects[1]=10; expects[3]=10 62555939b26SIdo Schimmel vxlan_flood_test $mac $dst $vid "${expects[@]}" 62655939b26SIdo Schimmel 62755939b26SIdo Schimmel log_test "VXLAN: flood before pvid off" 62855939b26SIdo Schimmel 62955939b26SIdo Schimmel # Toggle PVID off and test that flood to remote hosts does not work 63055939b26SIdo Schimmel RET=0 63155939b26SIdo Schimmel 63255939b26SIdo Schimmel bridge vlan add vid 10 dev vx10 63355939b26SIdo Schimmel 63455939b26SIdo Schimmel expects[0]=10; expects[1]=0; expects[3]=0 63555939b26SIdo Schimmel vxlan_flood_test $mac $dst $vid "${expects[@]}" 63655939b26SIdo Schimmel 63755939b26SIdo Schimmel log_test "VXLAN: flood after pvid off" 63855939b26SIdo Schimmel 63955939b26SIdo Schimmel # Toggle PVID on and test that flood to remote hosts does work 64055939b26SIdo Schimmel RET=0 64155939b26SIdo Schimmel 64255939b26SIdo Schimmel bridge vlan add vid 10 dev vx10 pvid untagged 64355939b26SIdo Schimmel 64455939b26SIdo Schimmel expects[0]=10; expects[1]=10; expects[3]=10 64555939b26SIdo Schimmel vxlan_flood_test $mac $dst $vid "${expects[@]}" 64655939b26SIdo Schimmel 64755939b26SIdo Schimmel log_test "VXLAN: flood after pvid on" 64855939b26SIdo Schimmel 64955939b26SIdo Schimmel # Add a new VLAN and test that it does not affect flooding 65055939b26SIdo Schimmel RET=0 65155939b26SIdo Schimmel 65255939b26SIdo Schimmel bridge vlan add vid 30 dev vx10 65355939b26SIdo Schimmel 65455939b26SIdo Schimmel expects[0]=10; expects[1]=10; expects[3]=10 65555939b26SIdo Schimmel vxlan_flood_test $mac $dst $vid "${expects[@]}" 65655939b26SIdo Schimmel 65755939b26SIdo Schimmel bridge vlan del vid 30 dev vx10 65855939b26SIdo Schimmel 65955939b26SIdo Schimmel log_test "VXLAN: flood after vlan add" 66055939b26SIdo Schimmel 66155939b26SIdo Schimmel # Remove currently mapped VLAN and test that flood to remote hosts does 66255939b26SIdo Schimmel # not work 66355939b26SIdo Schimmel RET=0 66455939b26SIdo Schimmel 66555939b26SIdo Schimmel bridge vlan del vid 10 dev vx10 66655939b26SIdo Schimmel 66755939b26SIdo Schimmel expects[0]=10; expects[1]=0; expects[3]=0 66855939b26SIdo Schimmel vxlan_flood_test $mac $dst $vid "${expects[@]}" 66955939b26SIdo Schimmel 67055939b26SIdo Schimmel log_test "VXLAN: flood after vlan delete" 67155939b26SIdo Schimmel 67255939b26SIdo Schimmel # Re-add the VLAN and test that flood to remote hosts does work 67355939b26SIdo Schimmel RET=0 67455939b26SIdo Schimmel 67555939b26SIdo Schimmel bridge vlan add vid 10 dev vx10 pvid untagged 67655939b26SIdo Schimmel 67755939b26SIdo Schimmel expects[0]=10; expects[1]=10; expects[3]=10 67855939b26SIdo Schimmel vxlan_flood_test $mac $dst $vid "${expects[@]}" 67955939b26SIdo Schimmel 68055939b26SIdo Schimmel log_test "VXLAN: flood after vlan re-add" 68155939b26SIdo Schimmel} 68255939b26SIdo Schimmel 683b5166d7aSIdo Schimmel__test_learning() 684b5166d7aSIdo Schimmel{ 685b5166d7aSIdo Schimmel local -a expects=(0 0 0 0 0) 686b5166d7aSIdo Schimmel local mac=$1; shift 687b5166d7aSIdo Schimmel local dst=$1; shift 688b5166d7aSIdo Schimmel local vid=$1; shift 689b5166d7aSIdo Schimmel local idx1=$1; shift 690b5166d7aSIdo Schimmel local idx2=$1; shift 691b5166d7aSIdo Schimmel local vx=vx$vid 692b5166d7aSIdo Schimmel 693b5166d7aSIdo Schimmel # Check that flooding works 694b5166d7aSIdo Schimmel RET=0 695b5166d7aSIdo Schimmel 696b5166d7aSIdo Schimmel expects[0]=10; expects[$idx1]=10; expects[$idx2]=10 697b5166d7aSIdo Schimmel vxlan_flood_test $mac $dst $vid "${expects[@]}" 698b5166d7aSIdo Schimmel 699b5166d7aSIdo Schimmel log_test "VXLAN: flood before learning" 700b5166d7aSIdo Schimmel 701b5166d7aSIdo Schimmel # Send a packet with source mac set to $mac from host w2 and check that 702b5166d7aSIdo Schimmel # a corresponding entry is created in the VxLAN device 703b5166d7aSIdo Schimmel RET=0 704b5166d7aSIdo Schimmel 705b5166d7aSIdo Schimmel in_ns ns1 $MZ w2 -Q $vid -c 1 -p 64 -a $mac -b ff:ff:ff:ff:ff:ff \ 706b5166d7aSIdo Schimmel -B $dst -t icmp -q 707b5166d7aSIdo Schimmel sleep 1 708b5166d7aSIdo Schimmel 709b5166d7aSIdo Schimmel bridge fdb show brport $vx | grep $mac | grep -q self 710b5166d7aSIdo Schimmel check_err $? 711b5166d7aSIdo Schimmel bridge fdb show brport $vx | grep $mac | grep "vlan $vid" \ 712b5166d7aSIdo Schimmel | grep -q -v self 713b5166d7aSIdo Schimmel check_err $? 714b5166d7aSIdo Schimmel 715b5166d7aSIdo Schimmel log_test "VXLAN: show learned FDB entry" 716b5166d7aSIdo Schimmel 717b5166d7aSIdo Schimmel # Repeat first test and check that packets only reach host w2 in ns1 718b5166d7aSIdo Schimmel RET=0 719b5166d7aSIdo Schimmel 720b5166d7aSIdo Schimmel expects[0]=0; expects[$idx1]=10; expects[$idx2]=0 721b5166d7aSIdo Schimmel vxlan_flood_test $mac $dst $vid "${expects[@]}" 722b5166d7aSIdo Schimmel 723b5166d7aSIdo Schimmel log_test "VXLAN: learned FDB entry" 724b5166d7aSIdo Schimmel 725b5166d7aSIdo Schimmel # Delete the learned FDB entry from the VxLAN and bridge devices and 726b5166d7aSIdo Schimmel # check that packets are flooded 727b5166d7aSIdo Schimmel RET=0 728b5166d7aSIdo Schimmel 729b5166d7aSIdo Schimmel bridge fdb del dev $vx $mac master self vlan $vid 730b5166d7aSIdo Schimmel sleep 1 731b5166d7aSIdo Schimmel 732b5166d7aSIdo Schimmel expects[0]=10; expects[$idx1]=10; expects[$idx2]=10 733b5166d7aSIdo Schimmel vxlan_flood_test $mac $dst $vid "${expects[@]}" 734b5166d7aSIdo Schimmel 735b5166d7aSIdo Schimmel log_test "VXLAN: deletion of learned FDB entry" 736b5166d7aSIdo Schimmel 737b5166d7aSIdo Schimmel # Re-learn the first FDB entry and check that it is correctly aged-out 738b5166d7aSIdo Schimmel RET=0 739b5166d7aSIdo Schimmel 740b5166d7aSIdo Schimmel in_ns ns1 $MZ w2 -Q $vid -c 1 -p 64 -a $mac -b ff:ff:ff:ff:ff:ff \ 741b5166d7aSIdo Schimmel -B $dst -t icmp -q 742b5166d7aSIdo Schimmel sleep 1 743b5166d7aSIdo Schimmel 744b5166d7aSIdo Schimmel bridge fdb show brport $vx | grep $mac | grep -q self 745b5166d7aSIdo Schimmel check_err $? 746b5166d7aSIdo Schimmel bridge fdb show brport $vx | grep $mac | grep "vlan $vid" \ 747b5166d7aSIdo Schimmel | grep -q -v self 748b5166d7aSIdo Schimmel check_err $? 749b5166d7aSIdo Schimmel 750b5166d7aSIdo Schimmel expects[0]=0; expects[$idx1]=10; expects[$idx2]=0 751b5166d7aSIdo Schimmel vxlan_flood_test $mac $dst $vid "${expects[@]}" 752b5166d7aSIdo Schimmel 753b5166d7aSIdo Schimmel sleep 20 754b5166d7aSIdo Schimmel 755b5166d7aSIdo Schimmel bridge fdb show brport $vx | grep $mac | grep -q self 756b5166d7aSIdo Schimmel check_fail $? 757b5166d7aSIdo Schimmel bridge fdb show brport $vx | grep $mac | grep "vlan $vid" \ 758b5166d7aSIdo Schimmel | grep -q -v self 759b5166d7aSIdo Schimmel check_fail $? 760b5166d7aSIdo Schimmel 761b5166d7aSIdo Schimmel expects[0]=10; expects[$idx1]=10; expects[$idx2]=10 762b5166d7aSIdo Schimmel vxlan_flood_test $mac $dst $vid "${expects[@]}" 763b5166d7aSIdo Schimmel 764b5166d7aSIdo Schimmel log_test "VXLAN: Ageing of learned FDB entry" 765b5166d7aSIdo Schimmel 766b5166d7aSIdo Schimmel # Toggle learning on the bridge port and check that the bridge's FDB 767b5166d7aSIdo Schimmel # is populated only when it should 768b5166d7aSIdo Schimmel RET=0 769b5166d7aSIdo Schimmel 770b5166d7aSIdo Schimmel ip link set dev $vx type bridge_slave learning off 771b5166d7aSIdo Schimmel 772b5166d7aSIdo Schimmel in_ns ns1 $MZ w2 -Q $vid -c 1 -p 64 -a $mac -b ff:ff:ff:ff:ff:ff \ 773b5166d7aSIdo Schimmel -B $dst -t icmp -q 774b5166d7aSIdo Schimmel sleep 1 775b5166d7aSIdo Schimmel 776b5166d7aSIdo Schimmel bridge fdb show brport $vx | grep $mac | grep "vlan $vid" \ 777b5166d7aSIdo Schimmel | grep -q -v self 778b5166d7aSIdo Schimmel check_fail $? 779b5166d7aSIdo Schimmel 780b5166d7aSIdo Schimmel ip link set dev $vx type bridge_slave learning on 781b5166d7aSIdo Schimmel 782b5166d7aSIdo Schimmel in_ns ns1 $MZ w2 -Q $vid -c 1 -p 64 -a $mac -b ff:ff:ff:ff:ff:ff \ 783b5166d7aSIdo Schimmel -B $dst -t icmp -q 784b5166d7aSIdo Schimmel sleep 1 785b5166d7aSIdo Schimmel 786b5166d7aSIdo Schimmel bridge fdb show brport $vx | grep $mac | grep "vlan $vid" \ 787b5166d7aSIdo Schimmel | grep -q -v self 788b5166d7aSIdo Schimmel check_err $? 789b5166d7aSIdo Schimmel 790b5166d7aSIdo Schimmel log_test "VXLAN: learning toggling on bridge port" 791b5166d7aSIdo Schimmel} 792b5166d7aSIdo Schimmel 793b5166d7aSIdo Schimmeltest_learning() 794b5166d7aSIdo Schimmel{ 795b5166d7aSIdo Schimmel local mac=de:ad:be:ef:13:37 796b5166d7aSIdo Schimmel local dst=192.0.2.100 797b5166d7aSIdo Schimmel local vid=10 798b5166d7aSIdo Schimmel 799b5166d7aSIdo Schimmel # Enable learning on the VxLAN devices and set ageing time to 10 seconds 800b5166d7aSIdo Schimmel ip link set dev br1 type bridge ageing_time 1000 801b5166d7aSIdo Schimmel ip link set dev vx10 type vxlan ageing 10 802b5166d7aSIdo Schimmel ip link set dev vx10 type vxlan learning 803b5166d7aSIdo Schimmel ip link set dev vx20 type vxlan ageing 10 804b5166d7aSIdo Schimmel ip link set dev vx20 type vxlan learning 805b5166d7aSIdo Schimmel reapply_config 806b5166d7aSIdo Schimmel 807b5166d7aSIdo Schimmel log_info "learning vlan 10" 808b5166d7aSIdo Schimmel 809b5166d7aSIdo Schimmel __test_learning $mac $dst $vid 1 3 810b5166d7aSIdo Schimmel 811b5166d7aSIdo Schimmel log_info "learning vlan 20" 812b5166d7aSIdo Schimmel 813b5166d7aSIdo Schimmel mac=ca:fe:be:ef:13:37 814b5166d7aSIdo Schimmel dst=198.51.100.100 815b5166d7aSIdo Schimmel vid=20 816b5166d7aSIdo Schimmel 817b5166d7aSIdo Schimmel __test_learning $mac $dst $vid 2 4 818b5166d7aSIdo Schimmel 819b5166d7aSIdo Schimmel # Restore previous settings 820b5166d7aSIdo Schimmel ip link set dev vx20 type vxlan nolearning 821b5166d7aSIdo Schimmel ip link set dev vx20 type vxlan ageing 300 822b5166d7aSIdo Schimmel ip link set dev vx10 type vxlan nolearning 823b5166d7aSIdo Schimmel ip link set dev vx10 type vxlan ageing 300 824b5166d7aSIdo Schimmel ip link set dev br1 type bridge ageing_time 30000 825b5166d7aSIdo Schimmel reapply_config 826b5166d7aSIdo Schimmel} 827b5166d7aSIdo Schimmel 828b5166d7aSIdo Schimmeltest_all() 829b5166d7aSIdo Schimmel{ 830b5166d7aSIdo Schimmel log_info "Running tests with UDP port $VXPORT" 831b5166d7aSIdo Schimmel tests_run 832b5166d7aSIdo Schimmel} 833b5166d7aSIdo Schimmel 834b5166d7aSIdo Schimmeltrap cleanup EXIT 835b5166d7aSIdo Schimmel 836b5166d7aSIdo Schimmelsetup_prepare 837b5166d7aSIdo Schimmelsetup_wait 838b5166d7aSIdo Schimmeltest_all 839b5166d7aSIdo Schimmel 840b5166d7aSIdo Schimmelexit $EXIT_STATUS 841