OSDN Git Service

selftests: forwarding: vxlan_bridge_1d: Add unicast test
authorPetr Machata <petrm@mellanox.com>
Mon, 19 Nov 2018 16:11:18 +0000 (16:11 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 20 Nov 2018 01:59:44 +0000 (17:59 -0800)
Test that when sending traffic to a learned MAC address, the traffic is
forwarded accurately only to the right endpoint.

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

index 1edd518..1a3486e 100755 (executable)
@@ -67,6 +67,7 @@ export VXPORT
 : ${ALL_TESTS:="
        ping_ipv4
        test_flood
+       test_unicast
     "}
 
 NUM_NETIFS=6
@@ -263,6 +264,10 @@ setup_prepare()
        vrp2_create
        ns1_create
        ns2_create
+
+       r1_mac=$(in_ns ns1 mac_get w2)
+       r2_mac=$(in_ns ns2 mac_get w2)
+       h2_mac=$(mac_get $h2)
 }
 
 cleanup()
@@ -394,6 +399,55 @@ test_flood()
        __test_flood de:ad:be:ef:13:37 192.0.2.100 "flood"
 }
 
+vxlan_fdb_add_del()
+{
+       local add_del=$1; shift
+       local mac=$1; shift
+       local dev=$1; shift
+       local dst=$1; shift
+
+       bridge fdb $add_del dev $dev $mac self static permanent \
+               ${dst:+dst} $dst 2>/dev/null
+       bridge fdb $add_del dev $dev $mac master static 2>/dev/null
+}
+
+__test_unicast()
+{
+       local mac=$1; shift
+       local dst=$1; shift
+       local hit_idx=$1; shift
+       local what=$1; shift
+
+       RET=0
+
+       local -a expects=(0 0 0)
+       expects[$hit_idx]=10
+
+       vxlan_flood_test $mac $dst "${expects[@]}"
+
+       log_test "VXLAN: $what"
+}
+
+test_unicast()
+{
+       local -a targets=("$h2_mac $h2"
+                         "$r1_mac vx1 192.0.2.34"
+                         "$r2_mac vx1 192.0.2.50")
+       local target
+
+       for target in "${targets[@]}"; do
+               vxlan_fdb_add_del add $target
+       done
+
+       __test_unicast $h2_mac 192.0.2.2 0 "local MAC unicast"
+       __test_unicast $r1_mac 192.0.2.3 1 "remote MAC 1 unicast"
+       __test_unicast $r2_mac 192.0.2.4 2 "remote MAC 2 unicast"
+
+       for target in "${targets[@]}"; do
+               vxlan_fdb_add_del del $target
+       done
+}
+
 test_all()
 {
        echo "Running tests with UDP port $VXPORT"