Add a test case to check connectivity over an OVS bond, using a Linux bond over veth interfaces.
Also added a new macro "ADD_VETH_BOND", modeled after "ADD_VETH", in anticipation of future additional bonding test cases. Signed-off-by: Lance Richardson <lrich...@redhat.com> --- tests/system-common-macros.at | 37 +++++++++++++++++++++++++++++++++++++ tests/system-traffic.at | 27 +++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/tests/system-common-macros.at b/tests/system-common-macros.at index 27a9652..252ec89 100644 --- a/tests/system-common-macros.at +++ b/tests/system-common-macros.at @@ -88,6 +88,43 @@ m4_define([ADD_VETH], ] ) +# ADD_VETH_BOND([ports], [namespace], [ovs-br], [bond], [mode], [ip_addr]) +# +# Add a set of veth port pairs. Ports named in the list 'ports' will be added to +# name space 'namespace', and the corresponding port names, prefixed by 'ovs-' +# will be included in an OVS bond 'bond' which is added to bridge 'ovs-br'. +# +# The 'bond' in 'namespace' will be brought up with static IP address +# with 'ip_addr' in CIDR notation. +# +m4_define([ADD_VETH_BOND], + [ + BONDPORTS="" + for port in $1; do + AT_CHECK([ip link add $port type veth peer name ovs-$port]) + CONFIGURE_VETH_OFFLOADS([$port]) + AT_CHECK([ip link set $port netns $2]) + AT_CHECK([ip link set dev ovs-$port up]) + BONDPORTS="$BONDPORTS ovs-$port" + on_exit 'ip link del ovs-$port' + done + NS_CHECK_EXEC([$2], [ip link add name $4 type bond]) + case "$(echo $5 | sed 's/.*lacp=//' | sed 's/ .*//')" in + active|passive) + NS_CHECK_EXEC([$2], [sh -c "echo 802.3ad > /sys/class/net/$4/bonding/mode"]) + NS_CHECK_EXEC([$2], [sh -c "echo 100 > /sys/class/net/$4/bonding/miimon"]) + ;; + esac + for port in $1; do + NS_CHECK_EXEC([$2], [ip link set dev $port master $4]) + done + NS_CHECK_EXEC([$2], [ip addr add $6 dev $4]) + NS_CHECK_EXEC([$2], [ip link set dev $4 up]) + AT_CHECK([ovs-vsctl add-bond $3 ovs-$4 $BONDPORTS $5]) + on_exit 'ip link del ovs-$4' + ] +) + # ADD_VLAN([port], [namespace], [vlan-id], [ip-addr]) # # Add a VLAN device named 'port' within 'namespace'. It will be configured diff --git a/tests/system-traffic.at b/tests/system-traffic.at index 10b2647..aec5999 100644 --- a/tests/system-traffic.at +++ b/tests/system-traffic.at @@ -128,6 +128,33 @@ NS_CHECK_EXEC([at_ns0], [ping6 -s 3200 -q -c 3 -i 0.3 -w 2 fc00:1::2 | FORMAT_PI OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP +AT_SETUP([datapath - ping over bond]) +OVS_TRAFFIC_VSWITCHD_START() + +AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"]) + +ADD_NAMESPACES(at_ns0, at_ns1) + +ADD_VETH(p0, at_ns0, br0, "10.1.1.1/24") +ADD_VETH_BOND(p1 p2, at_ns1, br0, bond0, lacp=active bond_mode=balance-tcp, "10.1.1.2/24") + +OVS_WAIT_UNTIL([ip netns exec at_ns0 ping -c 1 10.1.1.2]) + +NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 10.1.1.2 | FORMAT_PING], [0], [dnl +3 packets transmitted, 3 received, 0% packet loss, time 0ms +]) +NS_CHECK_EXEC([at_ns0], [ping -s 1600 -q -c 3 -i 0.3 -w 2 10.1.1.2 | FORMAT_PING], [0], [dnl +3 packets transmitted, 3 received, 0% packet loss, time 0ms +]) +NS_CHECK_EXEC([at_ns0], [ping -s 3200 -q -c 3 -i 0.3 -w 2 10.1.1.2 | FORMAT_PING], [0], [dnl +3 packets transmitted, 3 received, 0% packet loss, time 0ms +]) + +ovs-appctl dpif/dump-flows br0 + +OVS_TRAFFIC_VSWITCHD_STOP +AT_CLEANUP + AT_SETUP([datapath - ping over vxlan tunnel]) OVS_CHECK_VXLAN() -- 2.5.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev