selftests: forwarding: vxlan_bridge_1d: Add learning test
authorIdo Schimmel <idosch@mellanox.com>
Wed, 21 Nov 2018 08:02:52 +0000 (08:02 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 22 Nov 2018 01:10:31 +0000 (17:10 -0800)
Add a test which checks that the VxLAN driver can learn FDB entries and
that these entries are correctly deleted and aged-out.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Reviewed-by: Petr Machata <petrm@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/net/forwarding/vxlan_bridge_1d.sh

index 5cc6ac7..56cef3b 100755 (executable)
@@ -76,6 +76,7 @@ export VXPORT
        ping_ipv4
        test_flood
        test_unicast
+       test_learning
     "}
 
 NUM_NETIFS=6
@@ -663,6 +664,113 @@ test_ecn_decap()
        test_ecn_decap_error
 }
 
+test_learning()
+{
+       local mac=de:ad:be:ef:13:37
+       local dst=192.0.2.100
+
+       # Enable learning on the VxLAN device and set ageing time to 10 seconds
+       ip link set dev br1 type bridge ageing_time 1000
+       ip link set dev vx1 type vxlan ageing 10
+       ip link set dev vx1 type vxlan learning
+       reapply_config
+
+       # Check that flooding works
+       RET=0
+
+       vxlan_flood_test $mac $dst 10 10 10
+
+       log_test "VXLAN: flood before learning"
+
+       # Send a packet with source mac set to $mac from host w2 and check that
+       # a corresponding entry is created in VxLAN device vx1
+       RET=0
+
+       in_ns ns1 $MZ w2 -c 1 -p 64 -a $mac -b ff:ff:ff:ff:ff:ff -B $dst \
+               -t icmp -q
+       sleep 1
+
+       bridge fdb show brport vx1 | grep $mac | grep -q self
+       check_err $?
+       bridge fdb show brport vx1 | grep $mac | grep -q -v self
+       check_err $?
+
+       log_test "VXLAN: show learned FDB entry"
+
+       # Repeat first test and check that packets only reach host w2 in ns1
+       RET=0
+
+       vxlan_flood_test $mac $dst 0 10 0
+
+       log_test "VXLAN: learned FDB entry"
+
+       # Delete the learned FDB entry from the VxLAN and bridge devices and
+       # check that packets are flooded
+       RET=0
+
+       bridge fdb del dev vx1 $mac master self
+       sleep 1
+
+       vxlan_flood_test $mac $dst 10 10 10
+
+       log_test "VXLAN: deletion of learned FDB entry"
+
+       # Re-learn the first FDB entry and check that it is correctly aged-out
+       RET=0
+
+       in_ns ns1 $MZ w2 -c 1 -p 64 -a $mac -b ff:ff:ff:ff:ff:ff -B $dst \
+               -t icmp -q
+       sleep 1
+
+       bridge fdb show brport vx1 | grep $mac | grep -q self
+       check_err $?
+       bridge fdb show brport vx1 | grep $mac | grep -q -v self
+       check_err $?
+
+       vxlan_flood_test $mac $dst 0 10 0
+
+       sleep 20
+
+       bridge fdb show brport vx1 | grep $mac | grep -q self
+       check_fail $?
+       bridge fdb show brport vx1 | grep $mac | grep -q -v self
+       check_fail $?
+
+       vxlan_flood_test $mac $dst 10 10 10
+
+       log_test "VXLAN: Ageing of learned FDB entry"
+
+       # Toggle learning on the bridge port and check that the bridge's FDB
+       # is populated only when it should
+       RET=0
+
+       ip link set dev vx1 type bridge_slave learning off
+
+       in_ns ns1 $MZ w2 -c 1 -p 64 -a $mac -b ff:ff:ff:ff:ff:ff -B $dst \
+               -t icmp -q
+       sleep 1
+
+       bridge fdb show brport vx1 | grep $mac | grep -q -v self
+       check_fail $?
+
+       ip link set dev vx1 type bridge_slave learning on
+
+       in_ns ns1 $MZ w2 -c 1 -p 64 -a $mac -b ff:ff:ff:ff:ff:ff -B $dst \
+               -t icmp -q
+       sleep 1
+
+       bridge fdb show brport vx1 | grep $mac | grep -q -v self
+       check_err $?
+
+       log_test "VXLAN: learning toggling on bridge port"
+
+       # Restore previous settings
+       ip link set dev vx1 type vxlan nolearning
+       ip link set dev vx1 type vxlan ageing 300
+       ip link set dev br1 type bridge ageing_time 30000
+       reapply_config
+}
+
 test_all()
 {
        echo "Running tests with UDP port $VXPORT"