11538812eSIdo Schimmel#!/bin/bash 21538812eSIdo Schimmel# SPDX-License-Identifier: GPL-2.0 31538812eSIdo Schimmel 41538812eSIdo Schimmel# +---------------------------+ +------------------------------+ 51538812eSIdo Schimmel# | vrf-h1 | | vrf-h2 | 61538812eSIdo Schimmel# | + $h1 | | + $h2 | 71538812eSIdo Schimmel# | | 10.1.1.101/24 | | | 10.1.2.101/24 | 81538812eSIdo Schimmel# | | default via 10.1.1.1 | | | default via 10.1.2.1 | 91538812eSIdo Schimmel# +----|----------------------+ +----|-------------------------+ 101538812eSIdo Schimmel# | | 111538812eSIdo Schimmel# +----|--------------------------------------------|-------------------------+ 121538812eSIdo Schimmel# | SW | | | 131538812eSIdo Schimmel# | +--|--------------------------------------------|-----------------------+ | 141538812eSIdo Schimmel# | | + $swp1 br1 + $swp2 | | 151538812eSIdo Schimmel# | | vid 10 pvid untagged vid 20 pvid untagged | | 161538812eSIdo Schimmel# | | | | 171538812eSIdo Schimmel# | | + vx10 + vx20 | | 181538812eSIdo Schimmel# | | local 10.0.0.1 local 10.0.0.1 | | 191538812eSIdo Schimmel# | | remote 10.0.0.2 remote 10.0.0.2 | | 201538812eSIdo Schimmel# | | id 1000 id 2000 | | 211538812eSIdo Schimmel# | | dstport 4789 dstport 4789 | | 221538812eSIdo Schimmel# | | vid 10 pvid untagged vid 20 pvid untagged | | 231538812eSIdo Schimmel# | | | | 241538812eSIdo Schimmel# | +-----------------------------------+-----------------------------------+ | 251538812eSIdo Schimmel# | | | 261538812eSIdo Schimmel# | +-----------------------------------|-----------------------------------+ | 271538812eSIdo Schimmel# | | | | | 281538812eSIdo Schimmel# | | +--------------------------------+--------------------------------+ | | 291538812eSIdo Schimmel# | | | | | | 301538812eSIdo Schimmel# | | + vlan10 vlan20 + | | 311538812eSIdo Schimmel# | | | 10.1.1.11/24 10.1.2.11/24 | | | 321538812eSIdo Schimmel# | | | | | | 331538812eSIdo Schimmel# | | + vlan10-v (macvlan) vlan20-v (macvlan) + | | 341538812eSIdo Schimmel# | | 10.1.1.1/24 10.1.2.1/24 | | 351538812eSIdo Schimmel# | | 00:00:5e:00:01:01 00:00:5e:00:01:01 | | 361538812eSIdo Schimmel# | | vrf-green | | 371538812eSIdo Schimmel# | +-----------------------------------------------------------------------+ | 381538812eSIdo Schimmel# | | 391538812eSIdo Schimmel# | + $rp1 +lo | 401538812eSIdo Schimmel# | | 192.0.2.1/24 10.0.0.1/32 | 411538812eSIdo Schimmel# +----|----------------------------------------------------------------------+ 421538812eSIdo Schimmel# | 431538812eSIdo Schimmel# +----|--------------------------------------------------------+ 441538812eSIdo Schimmel# | | vrf-spine | 451538812eSIdo Schimmel# | + $rp2 | 461538812eSIdo Schimmel# | 192.0.2.2/24 | 471538812eSIdo Schimmel# | | (maybe) HW 481538812eSIdo Schimmel# ============================================================================= 491538812eSIdo Schimmel# | | (likely) SW 501538812eSIdo Schimmel# | | 511538812eSIdo Schimmel# | + v1 (veth) | 521538812eSIdo Schimmel# | | 192.0.3.2/24 | 531538812eSIdo Schimmel# +----|--------------------------------------------------------+ 541538812eSIdo Schimmel# | 551538812eSIdo Schimmel# +----|----------------------------------------------------------------------+ 561538812eSIdo Schimmel# | + v2 (veth) +lo NS1 (netns) | 571538812eSIdo Schimmel# | 192.0.3.1/24 10.0.0.2/32 | 581538812eSIdo Schimmel# | | 591538812eSIdo Schimmel# | +-----------------------------------------------------------------------+ | 601538812eSIdo Schimmel# | | vrf-green | | 611538812eSIdo Schimmel# | | + vlan10-v (macvlan) vlan20-v (macvlan) + | | 621538812eSIdo Schimmel# | | | 10.1.1.1/24 10.1.2.1/24 | | | 631538812eSIdo Schimmel# | | | 00:00:5e:00:01:01 00:00:5e:00:01:01 | | | 641538812eSIdo Schimmel# | | | | | | 651538812eSIdo Schimmel# | | + vlan10 vlan20 + | | 661538812eSIdo Schimmel# | | | 10.1.1.12/24 10.1.2.12/24 | | | 671538812eSIdo Schimmel# | | | | | | 681538812eSIdo Schimmel# | | +--------------------------------+--------------------------------+ | | 691538812eSIdo Schimmel# | | | | | 701538812eSIdo Schimmel# | +-----------------------------------|-----------------------------------+ | 711538812eSIdo Schimmel# | | | 721538812eSIdo Schimmel# | +-----------------------------------+-----------------------------------+ | 731538812eSIdo Schimmel# | | | | 741538812eSIdo Schimmel# | | + vx10 + vx20 | | 751538812eSIdo Schimmel# | | local 10.0.0.2 local 10.0.0.2 | | 761538812eSIdo Schimmel# | | remote 10.0.0.1 remote 10.0.0.1 | | 771538812eSIdo Schimmel# | | id 1000 id 2000 | | 781538812eSIdo Schimmel# | | dstport 4789 dstport 4789 | | 791538812eSIdo Schimmel# | | vid 10 pvid untagged vid 20 pvid untagged | | 801538812eSIdo Schimmel# | | | | 811538812eSIdo Schimmel# | | + w1 (veth) + w3 (veth) | | 821538812eSIdo Schimmel# | | | vid 10 pvid untagged br1 | vid 20 pvid untagged | | 831538812eSIdo Schimmel# | +--|------------------------------------------|-------------------------+ | 841538812eSIdo Schimmel# | | | | 851538812eSIdo Schimmel# | | | | 861538812eSIdo Schimmel# | +--|----------------------+ +--|-------------------------+ | 871538812eSIdo Schimmel# | | | vrf-h1 | | | vrf-h2 | | 881538812eSIdo Schimmel# | | + w2 (veth) | | + w4 (veth) | | 891538812eSIdo Schimmel# | | 10.1.1.102/24 | | 10.1.2.102/24 | | 901538812eSIdo Schimmel# | | default via 10.1.1.1 | | default via 10.1.2.1 | | 911538812eSIdo Schimmel# | +-------------------------+ +----------------------------+ | 921538812eSIdo Schimmel# +---------------------------------------------------------------------------+ 931538812eSIdo Schimmel 941538812eSIdo SchimmelALL_TESTS=" 951538812eSIdo Schimmel ping_ipv4 96ca5ba1cbSIdo Schimmel arp_decap 974dba72fdSIdo Schimmel arp_suppression 981538812eSIdo Schimmel" 991538812eSIdo SchimmelNUM_NETIFS=6 1001538812eSIdo Schimmelsource lib.sh 1011538812eSIdo Schimmel 1024dba72fdSIdo Schimmelrequire_command $ARPING 1034dba72fdSIdo Schimmel 1041538812eSIdo Schimmelhx_create() 1051538812eSIdo Schimmel{ 1061538812eSIdo Schimmel local vrf_name=$1; shift 1071538812eSIdo Schimmel local if_name=$1; shift 1081538812eSIdo Schimmel local ip_addr=$1; shift 1091538812eSIdo Schimmel local gw_ip=$1; shift 1101538812eSIdo Schimmel 1111538812eSIdo Schimmel vrf_create $vrf_name 1121538812eSIdo Schimmel ip link set dev $if_name master $vrf_name 1131538812eSIdo Schimmel ip link set dev $vrf_name up 1141538812eSIdo Schimmel ip link set dev $if_name up 1151538812eSIdo Schimmel 1161538812eSIdo Schimmel ip address add $ip_addr/24 dev $if_name 1171538812eSIdo Schimmel ip neigh replace $gw_ip lladdr 00:00:5e:00:01:01 nud permanent \ 1181538812eSIdo Schimmel dev $if_name 1191538812eSIdo Schimmel ip route add default vrf $vrf_name nexthop via $gw_ip 1201538812eSIdo Schimmel} 1211538812eSIdo Schimmelexport -f hx_create 1221538812eSIdo Schimmel 1231538812eSIdo Schimmelhx_destroy() 1241538812eSIdo Schimmel{ 1251538812eSIdo Schimmel local vrf_name=$1; shift 1261538812eSIdo Schimmel local if_name=$1; shift 1271538812eSIdo Schimmel local ip_addr=$1; shift 1281538812eSIdo Schimmel local gw_ip=$1; shift 1291538812eSIdo Schimmel 1301538812eSIdo Schimmel ip route del default vrf $vrf_name nexthop via $gw_ip 1311538812eSIdo Schimmel ip neigh del $gw_ip dev $if_name 1321538812eSIdo Schimmel ip address del $ip_addr/24 dev $if_name 1331538812eSIdo Schimmel 1341538812eSIdo Schimmel ip link set dev $if_name down 1351538812eSIdo Schimmel vrf_destroy $vrf_name 1361538812eSIdo Schimmel} 1371538812eSIdo Schimmel 1381538812eSIdo Schimmelh1_create() 1391538812eSIdo Schimmel{ 1401538812eSIdo Schimmel hx_create "vrf-h1" $h1 10.1.1.101 10.1.1.1 1411538812eSIdo Schimmel} 1421538812eSIdo Schimmel 1431538812eSIdo Schimmelh1_destroy() 1441538812eSIdo Schimmel{ 1451538812eSIdo Schimmel hx_destroy "vrf-h1" $h1 10.1.1.101 10.1.1.1 1461538812eSIdo Schimmel} 1471538812eSIdo Schimmel 1481538812eSIdo Schimmelh2_create() 1491538812eSIdo Schimmel{ 1501538812eSIdo Schimmel hx_create "vrf-h2" $h2 10.1.2.101 10.1.2.1 1511538812eSIdo Schimmel} 1521538812eSIdo Schimmel 1531538812eSIdo Schimmelh2_destroy() 1541538812eSIdo Schimmel{ 1551538812eSIdo Schimmel hx_destroy "vrf-h2" $h2 10.1.2.101 10.1.2.1 1561538812eSIdo Schimmel} 1571538812eSIdo Schimmel 1581538812eSIdo Schimmelswitch_create() 1591538812eSIdo Schimmel{ 1601538812eSIdo Schimmel ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 \ 1611538812eSIdo Schimmel mcast_snooping 0 1621538812eSIdo Schimmel # Make sure the bridge uses the MAC address of the local port and not 1631538812eSIdo Schimmel # that of the VxLAN's device. 1641538812eSIdo Schimmel ip link set dev br1 address $(mac_get $swp1) 1651538812eSIdo Schimmel ip link set dev br1 up 1661538812eSIdo Schimmel 1671538812eSIdo Schimmel ip link set dev $rp1 up 1681538812eSIdo Schimmel ip address add dev $rp1 192.0.2.1/24 1691538812eSIdo Schimmel ip route add 10.0.0.2/32 nexthop via 192.0.2.2 1701538812eSIdo Schimmel 1711538812eSIdo Schimmel ip link add name vx10 type vxlan id 1000 \ 1721538812eSIdo Schimmel local 10.0.0.1 remote 10.0.0.2 dstport 4789 \ 1731538812eSIdo Schimmel nolearning noudpcsum tos inherit ttl 100 1741538812eSIdo Schimmel ip link set dev vx10 up 1751538812eSIdo Schimmel 1761538812eSIdo Schimmel ip link set dev vx10 master br1 1771538812eSIdo Schimmel bridge vlan add vid 10 dev vx10 pvid untagged 1781538812eSIdo Schimmel 1791538812eSIdo Schimmel ip link add name vx20 type vxlan id 2000 \ 1801538812eSIdo Schimmel local 10.0.0.1 remote 10.0.0.2 dstport 4789 \ 1811538812eSIdo Schimmel nolearning noudpcsum tos inherit ttl 100 1821538812eSIdo Schimmel ip link set dev vx20 up 1831538812eSIdo Schimmel 1841538812eSIdo Schimmel ip link set dev vx20 master br1 1851538812eSIdo Schimmel bridge vlan add vid 20 dev vx20 pvid untagged 1861538812eSIdo Schimmel 1871538812eSIdo Schimmel ip link set dev $swp1 master br1 1881538812eSIdo Schimmel ip link set dev $swp1 up 1891538812eSIdo Schimmel bridge vlan add vid 10 dev $swp1 pvid untagged 1901538812eSIdo Schimmel 1911538812eSIdo Schimmel ip link set dev $swp2 master br1 1921538812eSIdo Schimmel ip link set dev $swp2 up 1931538812eSIdo Schimmel bridge vlan add vid 20 dev $swp2 pvid untagged 1941538812eSIdo Schimmel 1951538812eSIdo Schimmel ip address add 10.0.0.1/32 dev lo 1961538812eSIdo Schimmel 1971538812eSIdo Schimmel # Create SVIs 1981538812eSIdo Schimmel vrf_create "vrf-green" 1991538812eSIdo Schimmel ip link set dev vrf-green up 2001538812eSIdo Schimmel 2011538812eSIdo Schimmel ip link add link br1 name vlan10 up master vrf-green type vlan id 10 2021538812eSIdo Schimmel ip address add 10.1.1.11/24 dev vlan10 2031538812eSIdo Schimmel ip link add link vlan10 name vlan10-v up master vrf-green \ 2041538812eSIdo Schimmel address 00:00:5e:00:01:01 type macvlan mode private 2051538812eSIdo Schimmel ip address add 10.1.1.1/24 dev vlan10-v 2061538812eSIdo Schimmel 2071538812eSIdo Schimmel ip link add link br1 name vlan20 up master vrf-green type vlan id 20 2081538812eSIdo Schimmel ip address add 10.1.2.11/24 dev vlan20 2091538812eSIdo Schimmel ip link add link vlan20 name vlan20-v up master vrf-green \ 2101538812eSIdo Schimmel address 00:00:5e:00:01:01 type macvlan mode private 2111538812eSIdo Schimmel ip address add 10.1.2.1/24 dev vlan20-v 2121538812eSIdo Schimmel 2131538812eSIdo Schimmel bridge vlan add vid 10 dev br1 self 2141538812eSIdo Schimmel bridge vlan add vid 20 dev br1 self 2151538812eSIdo Schimmel 2161538812eSIdo Schimmel bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 10 2171538812eSIdo Schimmel bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 20 21871a0e29eSIdo Schimmel 21971a0e29eSIdo Schimmel sysctl_set net.ipv4.conf.all.rp_filter 0 22071a0e29eSIdo Schimmel sysctl_set net.ipv4.conf.vlan10-v.rp_filter 0 22171a0e29eSIdo Schimmel sysctl_set net.ipv4.conf.vlan20-v.rp_filter 0 2221538812eSIdo Schimmel} 2231538812eSIdo Schimmel 2241538812eSIdo Schimmelswitch_destroy() 2251538812eSIdo Schimmel{ 22671a0e29eSIdo Schimmel sysctl_restore net.ipv4.conf.all.rp_filter 22771a0e29eSIdo Schimmel 2281538812eSIdo Schimmel bridge fdb del 00:00:5e:00:01:01 dev br1 self local vlan 20 2291538812eSIdo Schimmel bridge fdb del 00:00:5e:00:01:01 dev br1 self local vlan 10 2301538812eSIdo Schimmel 2311538812eSIdo Schimmel bridge vlan del vid 20 dev br1 self 2321538812eSIdo Schimmel bridge vlan del vid 10 dev br1 self 2331538812eSIdo Schimmel 2341538812eSIdo Schimmel ip link del dev vlan20 2351538812eSIdo Schimmel 2361538812eSIdo Schimmel ip link del dev vlan10 2371538812eSIdo Schimmel 2381538812eSIdo Schimmel vrf_destroy "vrf-green" 2391538812eSIdo Schimmel 2401538812eSIdo Schimmel ip address del 10.0.0.1/32 dev lo 2411538812eSIdo Schimmel 2421538812eSIdo Schimmel bridge vlan del vid 20 dev $swp2 2431538812eSIdo Schimmel ip link set dev $swp2 down 2441538812eSIdo Schimmel ip link set dev $swp2 nomaster 2451538812eSIdo Schimmel 2461538812eSIdo Schimmel bridge vlan del vid 10 dev $swp1 2471538812eSIdo Schimmel ip link set dev $swp1 down 2481538812eSIdo Schimmel ip link set dev $swp1 nomaster 2491538812eSIdo Schimmel 2501538812eSIdo Schimmel bridge vlan del vid 20 dev vx20 2511538812eSIdo Schimmel ip link set dev vx20 nomaster 2521538812eSIdo Schimmel 2531538812eSIdo Schimmel ip link set dev vx20 down 2541538812eSIdo Schimmel ip link del dev vx20 2551538812eSIdo Schimmel 2561538812eSIdo Schimmel bridge vlan del vid 10 dev vx10 2571538812eSIdo Schimmel ip link set dev vx10 nomaster 2581538812eSIdo Schimmel 2591538812eSIdo Schimmel ip link set dev vx10 down 2601538812eSIdo Schimmel ip link del dev vx10 2611538812eSIdo Schimmel 2621538812eSIdo Schimmel ip route del 10.0.0.2/32 nexthop via 192.0.2.2 2631538812eSIdo Schimmel ip address del dev $rp1 192.0.2.1/24 2641538812eSIdo Schimmel ip link set dev $rp1 down 2651538812eSIdo Schimmel 2661538812eSIdo Schimmel ip link set dev br1 down 2671538812eSIdo Schimmel ip link del dev br1 2681538812eSIdo Schimmel} 2691538812eSIdo Schimmel 2701538812eSIdo Schimmelspine_create() 2711538812eSIdo Schimmel{ 2721538812eSIdo Schimmel vrf_create "vrf-spine" 2731538812eSIdo Schimmel ip link set dev $rp2 master vrf-spine 2741538812eSIdo Schimmel ip link set dev v1 master vrf-spine 2751538812eSIdo Schimmel ip link set dev vrf-spine up 2761538812eSIdo Schimmel ip link set dev $rp2 up 2771538812eSIdo Schimmel ip link set dev v1 up 2781538812eSIdo Schimmel 2791538812eSIdo Schimmel ip address add 192.0.2.2/24 dev $rp2 2801538812eSIdo Schimmel ip address add 192.0.3.2/24 dev v1 2811538812eSIdo Schimmel 2821538812eSIdo Schimmel ip route add 10.0.0.1/32 vrf vrf-spine nexthop via 192.0.2.1 2831538812eSIdo Schimmel ip route add 10.0.0.2/32 vrf vrf-spine nexthop via 192.0.3.1 2841538812eSIdo Schimmel} 2851538812eSIdo Schimmel 2861538812eSIdo Schimmelspine_destroy() 2871538812eSIdo Schimmel{ 2881538812eSIdo Schimmel ip route del 10.0.0.2/32 vrf vrf-spine nexthop via 192.0.3.1 2891538812eSIdo Schimmel ip route del 10.0.0.1/32 vrf vrf-spine nexthop via 192.0.2.1 2901538812eSIdo Schimmel 2911538812eSIdo Schimmel ip address del 192.0.3.2/24 dev v1 2921538812eSIdo Schimmel ip address del 192.0.2.2/24 dev $rp2 2931538812eSIdo Schimmel 2941538812eSIdo Schimmel ip link set dev v1 down 2951538812eSIdo Schimmel ip link set dev $rp2 down 2961538812eSIdo Schimmel vrf_destroy "vrf-spine" 2971538812eSIdo Schimmel} 2981538812eSIdo Schimmel 2991538812eSIdo Schimmelns_h1_create() 3001538812eSIdo Schimmel{ 3011538812eSIdo Schimmel hx_create "vrf-h1" w2 10.1.1.102 10.1.1.1 3021538812eSIdo Schimmel} 3031538812eSIdo Schimmelexport -f ns_h1_create 3041538812eSIdo Schimmel 3051538812eSIdo Schimmelns_h2_create() 3061538812eSIdo Schimmel{ 3071538812eSIdo Schimmel hx_create "vrf-h2" w4 10.1.2.102 10.1.2.1 3081538812eSIdo Schimmel} 3091538812eSIdo Schimmelexport -f ns_h2_create 3101538812eSIdo Schimmel 3111538812eSIdo Schimmelns_switch_create() 3121538812eSIdo Schimmel{ 3131538812eSIdo Schimmel ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 \ 3141538812eSIdo Schimmel mcast_snooping 0 3151538812eSIdo Schimmel ip link set dev br1 up 3161538812eSIdo Schimmel 3171538812eSIdo Schimmel ip link set dev v2 up 3181538812eSIdo Schimmel ip address add dev v2 192.0.3.1/24 3191538812eSIdo Schimmel ip route add 10.0.0.1/32 nexthop via 192.0.3.2 3201538812eSIdo Schimmel 3211538812eSIdo Schimmel ip link add name vx10 type vxlan id 1000 \ 3221538812eSIdo Schimmel local 10.0.0.2 remote 10.0.0.1 dstport 4789 \ 3231538812eSIdo Schimmel nolearning noudpcsum tos inherit ttl 100 3241538812eSIdo Schimmel ip link set dev vx10 up 3251538812eSIdo Schimmel 3261538812eSIdo Schimmel ip link set dev vx10 master br1 3271538812eSIdo Schimmel bridge vlan add vid 10 dev vx10 pvid untagged 3281538812eSIdo Schimmel 3291538812eSIdo Schimmel ip link add name vx20 type vxlan id 2000 \ 3301538812eSIdo Schimmel local 10.0.0.2 remote 10.0.0.1 dstport 4789 \ 3311538812eSIdo Schimmel nolearning noudpcsum tos inherit ttl 100 3321538812eSIdo Schimmel ip link set dev vx20 up 3331538812eSIdo Schimmel 3341538812eSIdo Schimmel ip link set dev vx20 master br1 3351538812eSIdo Schimmel bridge vlan add vid 20 dev vx20 pvid untagged 3361538812eSIdo Schimmel 3371538812eSIdo Schimmel ip link set dev w1 master br1 3381538812eSIdo Schimmel ip link set dev w1 up 3391538812eSIdo Schimmel bridge vlan add vid 10 dev w1 pvid untagged 3401538812eSIdo Schimmel 3411538812eSIdo Schimmel ip link set dev w3 master br1 3421538812eSIdo Schimmel ip link set dev w3 up 3431538812eSIdo Schimmel bridge vlan add vid 20 dev w3 pvid untagged 3441538812eSIdo Schimmel 3451538812eSIdo Schimmel ip address add 10.0.0.2/32 dev lo 3461538812eSIdo Schimmel 3471538812eSIdo Schimmel # Create SVIs 3481538812eSIdo Schimmel vrf_create "vrf-green" 3491538812eSIdo Schimmel ip link set dev vrf-green up 3501538812eSIdo Schimmel 3511538812eSIdo Schimmel ip link add link br1 name vlan10 up master vrf-green type vlan id 10 3521538812eSIdo Schimmel ip address add 10.1.1.12/24 dev vlan10 3531538812eSIdo Schimmel ip link add link vlan10 name vlan10-v up master vrf-green \ 3541538812eSIdo Schimmel address 00:00:5e:00:01:01 type macvlan mode private 3551538812eSIdo Schimmel ip address add 10.1.1.1/24 dev vlan10-v 3561538812eSIdo Schimmel 3571538812eSIdo Schimmel ip link add link br1 name vlan20 up master vrf-green type vlan id 20 3581538812eSIdo Schimmel ip address add 10.1.2.12/24 dev vlan20 3591538812eSIdo Schimmel ip link add link vlan20 name vlan20-v up master vrf-green \ 3601538812eSIdo Schimmel address 00:00:5e:00:01:01 type macvlan mode private 3611538812eSIdo Schimmel ip address add 10.1.2.1/24 dev vlan20-v 3621538812eSIdo Schimmel 3631538812eSIdo Schimmel bridge vlan add vid 10 dev br1 self 3641538812eSIdo Schimmel bridge vlan add vid 20 dev br1 self 3651538812eSIdo Schimmel 3661538812eSIdo Schimmel bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 10 3671538812eSIdo Schimmel bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 20 36871a0e29eSIdo Schimmel 36971a0e29eSIdo Schimmel sysctl_set net.ipv4.conf.all.rp_filter 0 37071a0e29eSIdo Schimmel sysctl_set net.ipv4.conf.vlan10-v.rp_filter 0 37171a0e29eSIdo Schimmel sysctl_set net.ipv4.conf.vlan20-v.rp_filter 0 3721538812eSIdo Schimmel} 3731538812eSIdo Schimmelexport -f ns_switch_create 3741538812eSIdo Schimmel 3751538812eSIdo Schimmelns_init() 3761538812eSIdo Schimmel{ 3771538812eSIdo Schimmel ip link add name w1 type veth peer name w2 3781538812eSIdo Schimmel ip link add name w3 type veth peer name w4 3791538812eSIdo Schimmel 3801538812eSIdo Schimmel ip link set dev lo up 3811538812eSIdo Schimmel 3821538812eSIdo Schimmel ns_h1_create 3831538812eSIdo Schimmel ns_h2_create 3841538812eSIdo Schimmel ns_switch_create 3851538812eSIdo Schimmel} 3861538812eSIdo Schimmelexport -f ns_init 3871538812eSIdo Schimmel 3881538812eSIdo Schimmelns1_create() 3891538812eSIdo Schimmel{ 3901538812eSIdo Schimmel ip netns add ns1 3911538812eSIdo Schimmel ip link set dev v2 netns ns1 3921538812eSIdo Schimmel in_ns ns1 ns_init 3931538812eSIdo Schimmel} 3941538812eSIdo Schimmel 3951538812eSIdo Schimmelns1_destroy() 3961538812eSIdo Schimmel{ 3971538812eSIdo Schimmel ip netns exec ns1 ip link set dev v2 netns 1 3981538812eSIdo Schimmel ip netns del ns1 3991538812eSIdo Schimmel} 4001538812eSIdo Schimmel 4011538812eSIdo Schimmelmacs_populate() 4021538812eSIdo Schimmel{ 4031538812eSIdo Schimmel local mac1=$1; shift 4041538812eSIdo Schimmel local mac2=$1; shift 4051538812eSIdo Schimmel local ip1=$1; shift 4061538812eSIdo Schimmel local ip2=$1; shift 4071538812eSIdo Schimmel local dst=$1; shift 4081538812eSIdo Schimmel 4091538812eSIdo Schimmel bridge fdb add $mac1 dev vx10 self master extern_learn static \ 4101538812eSIdo Schimmel dst $dst vlan 10 4111538812eSIdo Schimmel bridge fdb add $mac2 dev vx20 self master extern_learn static \ 4121538812eSIdo Schimmel dst $dst vlan 20 4131538812eSIdo Schimmel 4141538812eSIdo Schimmel ip neigh add $ip1 lladdr $mac1 nud noarp dev vlan10 \ 4151538812eSIdo Schimmel extern_learn 4161538812eSIdo Schimmel ip neigh add $ip2 lladdr $mac2 nud noarp dev vlan20 \ 4171538812eSIdo Schimmel extern_learn 4181538812eSIdo Schimmel} 4191538812eSIdo Schimmelexport -f macs_populate 4201538812eSIdo Schimmel 4211538812eSIdo Schimmelmacs_initialize() 4221538812eSIdo Schimmel{ 4231538812eSIdo Schimmel local h1_ns_mac=$(in_ns ns1 mac_get w2) 4241538812eSIdo Schimmel local h2_ns_mac=$(in_ns ns1 mac_get w4) 4251538812eSIdo Schimmel local h1_mac=$(mac_get $h1) 4261538812eSIdo Schimmel local h2_mac=$(mac_get $h2) 4271538812eSIdo Schimmel 4281538812eSIdo Schimmel macs_populate $h1_ns_mac $h2_ns_mac 10.1.1.102 10.1.2.102 10.0.0.2 4291538812eSIdo Schimmel in_ns ns1 macs_populate $h1_mac $h2_mac 10.1.1.101 10.1.2.101 10.0.0.1 4301538812eSIdo Schimmel} 4311538812eSIdo Schimmel 4321538812eSIdo Schimmelsetup_prepare() 4331538812eSIdo Schimmel{ 4341538812eSIdo Schimmel h1=${NETIFS[p1]} 4351538812eSIdo Schimmel swp1=${NETIFS[p2]} 4361538812eSIdo Schimmel 4371538812eSIdo Schimmel swp2=${NETIFS[p3]} 4381538812eSIdo Schimmel h2=${NETIFS[p4]} 4391538812eSIdo Schimmel 4401538812eSIdo Schimmel rp1=${NETIFS[p5]} 4411538812eSIdo Schimmel rp2=${NETIFS[p6]} 4421538812eSIdo Schimmel 4431538812eSIdo Schimmel vrf_prepare 4441538812eSIdo Schimmel forwarding_enable 4451538812eSIdo Schimmel 4461538812eSIdo Schimmel h1_create 4471538812eSIdo Schimmel h2_create 4481538812eSIdo Schimmel switch_create 4491538812eSIdo Schimmel 4501538812eSIdo Schimmel ip link add name v1 type veth peer name v2 4511538812eSIdo Schimmel spine_create 4521538812eSIdo Schimmel ns1_create 4531538812eSIdo Schimmel 4541538812eSIdo Schimmel macs_initialize 4551538812eSIdo Schimmel} 4561538812eSIdo Schimmel 4571538812eSIdo Schimmelcleanup() 4581538812eSIdo Schimmel{ 4591538812eSIdo Schimmel pre_cleanup 4601538812eSIdo Schimmel 4611538812eSIdo Schimmel ns1_destroy 4621538812eSIdo Schimmel spine_destroy 4631538812eSIdo Schimmel ip link del dev v1 4641538812eSIdo Schimmel 4651538812eSIdo Schimmel switch_destroy 4661538812eSIdo Schimmel h2_destroy 4671538812eSIdo Schimmel h1_destroy 4681538812eSIdo Schimmel 4691538812eSIdo Schimmel forwarding_restore 4701538812eSIdo Schimmel vrf_cleanup 4711538812eSIdo Schimmel} 4721538812eSIdo Schimmel 4731538812eSIdo Schimmelping_ipv4() 4741538812eSIdo Schimmel{ 4751538812eSIdo Schimmel ping_test $h1 10.1.2.101 ": local->local vid 10->vid 20" 4761538812eSIdo Schimmel ping_test $h1 10.1.1.102 ": local->remote vid 10->vid 10" 4771538812eSIdo Schimmel ping_test $h2 10.1.2.102 ": local->remote vid 20->vid 20" 4781538812eSIdo Schimmel ping_test $h1 10.1.2.102 ": local->remote vid 10->vid 20" 4791538812eSIdo Schimmel ping_test $h2 10.1.1.102 ": local->remote vid 20->vid 10" 4801538812eSIdo Schimmel} 4811538812eSIdo Schimmel 482ca5ba1cbSIdo Schimmelarp_decap() 483ca5ba1cbSIdo Schimmel{ 484ca5ba1cbSIdo Schimmel # Repeat the ping tests, but without populating the neighbours. This 485ca5ba1cbSIdo Schimmel # makes sure we correctly decapsulate ARP packets 486ca5ba1cbSIdo Schimmel log_info "deleting neighbours from vlan interfaces" 487ca5ba1cbSIdo Schimmel 488ca5ba1cbSIdo Schimmel ip neigh del 10.1.1.102 dev vlan10 489ca5ba1cbSIdo Schimmel ip neigh del 10.1.2.102 dev vlan20 490ca5ba1cbSIdo Schimmel 491ca5ba1cbSIdo Schimmel ping_ipv4 492ca5ba1cbSIdo Schimmel 493ca5ba1cbSIdo Schimmel ip neigh replace 10.1.1.102 lladdr $(in_ns ns1 mac_get w2) nud noarp \ 494ca5ba1cbSIdo Schimmel dev vlan10 extern_learn 495ca5ba1cbSIdo Schimmel ip neigh replace 10.1.2.102 lladdr $(in_ns ns1 mac_get w4) nud noarp \ 496ca5ba1cbSIdo Schimmel dev vlan20 extern_learn 497ca5ba1cbSIdo Schimmel} 498ca5ba1cbSIdo Schimmel 4994dba72fdSIdo Schimmelarp_suppression_compare() 5004dba72fdSIdo Schimmel{ 5014dba72fdSIdo Schimmel local expect=$1; shift 5024dba72fdSIdo Schimmel local actual=$(in_ns ns1 tc_rule_stats_get vx10 1 ingress) 5034dba72fdSIdo Schimmel 5044dba72fdSIdo Schimmel (( expect == actual )) 5054dba72fdSIdo Schimmel check_err $? "expected $expect arps got $actual" 5064dba72fdSIdo Schimmel} 5074dba72fdSIdo Schimmel 5084dba72fdSIdo Schimmelarp_suppression() 5094dba72fdSIdo Schimmel{ 5104dba72fdSIdo Schimmel ip link set dev vx10 type bridge_slave neigh_suppress on 5114dba72fdSIdo Schimmel 5124dba72fdSIdo Schimmel in_ns ns1 tc qdisc add dev vx10 clsact 5134dba72fdSIdo Schimmel in_ns ns1 tc filter add dev vx10 ingress proto arp pref 1 handle 101 \ 5144dba72fdSIdo Schimmel flower dst_mac ff:ff:ff:ff:ff:ff arp_tip 10.1.1.102 arp_op \ 5154dba72fdSIdo Schimmel request action pass 5164dba72fdSIdo Schimmel 5174dba72fdSIdo Schimmel # The neighbour is configured on the SVI and ARP suppression is on, so 5184dba72fdSIdo Schimmel # the ARP request should be suppressed 5194dba72fdSIdo Schimmel RET=0 5204dba72fdSIdo Schimmel 5214dba72fdSIdo Schimmel $ARPING -I $h1 -fqb -c 1 -w 1 10.1.1.102 5224dba72fdSIdo Schimmel check_err $? "arping failed" 5234dba72fdSIdo Schimmel 5244dba72fdSIdo Schimmel arp_suppression_compare 0 5254dba72fdSIdo Schimmel 5264dba72fdSIdo Schimmel log_test "neigh_suppress: on / neigh exists: yes" 5274dba72fdSIdo Schimmel 528*060468f0SSlark Xiao # Delete the neighbour from the SVI. A single ARP request should be 5294dba72fdSIdo Schimmel # received by the remote VTEP 5304dba72fdSIdo Schimmel RET=0 5314dba72fdSIdo Schimmel 5324dba72fdSIdo Schimmel ip neigh del 10.1.1.102 dev vlan10 5334dba72fdSIdo Schimmel 5344dba72fdSIdo Schimmel $ARPING -I $h1 -fqb -c 1 -w 1 10.1.1.102 5354dba72fdSIdo Schimmel check_err $? "arping failed" 5364dba72fdSIdo Schimmel 5374dba72fdSIdo Schimmel arp_suppression_compare 1 5384dba72fdSIdo Schimmel 5394dba72fdSIdo Schimmel log_test "neigh_suppress: on / neigh exists: no" 5404dba72fdSIdo Schimmel 5414dba72fdSIdo Schimmel # Turn off ARP suppression and make sure ARP is not suppressed, 5424dba72fdSIdo Schimmel # regardless of neighbour existence on the SVI 5434dba72fdSIdo Schimmel RET=0 5444dba72fdSIdo Schimmel 5454dba72fdSIdo Schimmel ip neigh del 10.1.1.102 dev vlan10 &> /dev/null 5464dba72fdSIdo Schimmel ip link set dev vx10 type bridge_slave neigh_suppress off 5474dba72fdSIdo Schimmel 5484dba72fdSIdo Schimmel $ARPING -I $h1 -fqb -c 1 -w 1 10.1.1.102 5494dba72fdSIdo Schimmel check_err $? "arping failed" 5504dba72fdSIdo Schimmel 5514dba72fdSIdo Schimmel arp_suppression_compare 2 5524dba72fdSIdo Schimmel 5534dba72fdSIdo Schimmel log_test "neigh_suppress: off / neigh exists: no" 5544dba72fdSIdo Schimmel 5554dba72fdSIdo Schimmel RET=0 5564dba72fdSIdo Schimmel 5574dba72fdSIdo Schimmel ip neigh add 10.1.1.102 lladdr $(in_ns ns1 mac_get w2) nud noarp \ 5584dba72fdSIdo Schimmel dev vlan10 extern_learn 5594dba72fdSIdo Schimmel 5604dba72fdSIdo Schimmel $ARPING -I $h1 -fqb -c 1 -w 1 10.1.1.102 5614dba72fdSIdo Schimmel check_err $? "arping failed" 5624dba72fdSIdo Schimmel 5634dba72fdSIdo Schimmel arp_suppression_compare 3 5644dba72fdSIdo Schimmel 5654dba72fdSIdo Schimmel log_test "neigh_suppress: off / neigh exists: yes" 5664dba72fdSIdo Schimmel 5674dba72fdSIdo Schimmel in_ns ns1 tc qdisc del dev vx10 clsact 5684dba72fdSIdo Schimmel} 5694dba72fdSIdo Schimmel 5701538812eSIdo Schimmeltrap cleanup EXIT 5711538812eSIdo Schimmel 5721538812eSIdo Schimmelsetup_prepare 5731538812eSIdo Schimmelsetup_wait 5741538812eSIdo Schimmel 5751538812eSIdo Schimmeltests_run 5761538812eSIdo Schimmel 5771538812eSIdo Schimmelexit $EXIT_STATUS 578