xref: /openbmc/linux/tools/testing/selftests/net/forwarding/vxlan_asymmetric.sh (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
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