ovsdb-server: Refactoring and clean up remote status reporting.
[cascardo/ovs.git] / tests / lacp.at
index 543aa25..2394a95 100644 (file)
@@ -1,11 +1,24 @@
 AT_BANNER([lacp])
 
+# Strips out Reciulation ID information since it may change over time.
+m4_define([STRIP_RECIRC_ID], [[sed '
+    s/Recirc-ID.*$/<del>/
+' ]])
+
+# Strips out active slave mac address since it may change over time.
+m4_define([STRIP_ACTIVE_SLAVE_MAC], [[sed '
+    s/active slave mac.*$/<active slave mac del>/
+' ]])
+
 AT_SETUP([lacp - config])
 OVS_VSWITCHD_START([\
         add-port br0 p1 --\
         set Port p1 lacp=active --\
         set Interface p1 type=dummy ])
 
+ovs-appctl time/stop
+ovs-appctl time/warp 300 100
+
 AT_CHECK([ovs-appctl lacp/show], [0], [dnl
 ---- p1 ----
        status: active negotiated
@@ -17,6 +30,7 @@ AT_CHECK([ovs-appctl lacp/show], [0], [dnl
 slave: p1: expired attached
        port_id: 1
        port_priority: 65535
+       may_enable: false
 
        actor sys_id: aa:55:aa:55:00:00
        actor sys_priority: 65535
@@ -39,7 +53,7 @@ AT_CLEANUP
 AT_SETUP([lacp - multi port config])
 OVS_VSWITCHD_START([dnl
         add-bond br0 bond p1 p2 --\
-        set Port bond lacp=active \
+        set Port bond lacp=active bond-mode=active-backup \
             other_config:lacp-time="fast" \
             other_config:lacp-system-id=11:22:33:44:55:66 \
             other_config:lacp-system-priority=54321 --\
@@ -52,6 +66,9 @@ OVS_VSWITCHD_START([dnl
             other_config:lacp-port-priority=222 \
             other_config:lacp-aggregation-key=3333 ])
 
+ovs-appctl time/stop
+ovs-appctl time/warp 300 100
+
 AT_CHECK([ovs-appctl lacp/show], [0], [stdout])
 AT_CHECK([sed -e 's/aggregation key:.*/aggregation key: <omitted>/' < stdout], [0], [dnl
 ---- bond ----
@@ -64,6 +81,7 @@ AT_CHECK([sed -e 's/aggregation key:.*/aggregation key: <omitted>/' < stdout], [
 slave: p1: expired attached
        port_id: 11
        port_priority: 111
+       may_enable: false
 
        actor sys_id: 11:22:33:44:55:66
        actor sys_priority: 54321
@@ -82,6 +100,7 @@ slave: p1: expired attached
 slave: p2: expired attached
        port_id: 22
        port_priority: 222
+       may_enable: false
 
        actor sys_id: 11:22:33:44:55:66
        actor sys_priority: 54321
@@ -100,10 +119,12 @@ slave: p2: expired attached
 AT_CHECK([ovs-appctl bond/show], [0], [dnl
 ---- bond ----
 bond_mode: active-backup
+bond may use recirculation: no, Recirc-ID : -1
 bond-hash-basis: 0
 updelay: 0 ms
 downdelay: 0 ms
 lacp_status: negotiated
+active slave mac: 00:00:00:00:00:00(none)
 
 slave p1: disabled
        may_enable: false
@@ -114,3 +135,449 @@ slave p2: disabled
 ])
 OVS_VSWITCHD_STOP
 AT_CLEANUP
+
+AT_SETUP([lacp - negotiation])
+# Create bond0 on br0 with interfaces p0 and p1
+#    and bond1 on br1 with interfaces p2 and p3
+# with p0 patched to p2 and p1 patched to p3.
+OVS_VSWITCHD_START(
+  [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
+                            other-config:lacp-time=fast \
+                            other-config:bond-rebalance-interval=0 -- \
+   set interface p0 type=patch options:peer=p2 ofport_request=1 \
+                    other-config:lacp-aggregation-key=2 -- \
+   set interface p1 type=patch options:peer=p3 ofport_request=2 \
+                    other-config:lacp-aggregation-key=2 -- \
+   add-br br1 -- \
+   set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
+   set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
+                  fail-mode=secure -- \
+   add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
+                            other-config:lacp-time=fast \
+                            other-config:bond-rebalance-interval=0 -- \
+   set interface p2 type=patch options:peer=p0 ofport_request=3 \
+                    other-config:lacp-aggregation-key=4 -- \
+   set interface p3 type=patch options:peer=p1 ofport_request=4 \
+                    other-config:lacp-aggregation-key=4 --])
+
+AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
+])
+
+ovs-appctl time/stop
+
+# Wait for up to 5 (simulated) seconds, until LACP negotiation finishes.
+i=0
+while :; do
+    ovs-appctl lacp/show bond0 > bond0
+    AT_CAPTURE_FILE([bond0])
+    ovs-appctl lacp/show bond1 > bond1
+    AT_CAPTURE_FILE([bond1])
+    if grep negotiated bond0 && grep negotiated bond1; then
+        if grep expired bond0 || grep expired bond1; then
+            :
+        else
+            break
+        fi
+    fi
+    i=`expr $i + 1`
+    if test $i = 50; then
+        AT_FAIL_IF([:])
+    fi
+    ovs-appctl time/warp 100
+done
+
+# Now check the correctly negotiated configuration.
+AT_CHECK(
+  [ovs-appctl lacp/show bond0
+ovs-appctl lacp/show bond1
+ovs-appctl bond/show bond0 | STRIP_RECIRC_ID | STRIP_ACTIVE_SLAVE_MAC
+ovs-appctl bond/show bond1 | STRIP_RECIRC_ID | STRIP_ACTIVE_SLAVE_MAC ], [0], [stdout])
+AT_CHECK([sed '/active slave/d' stdout], [0], [dnl
+---- bond0 ----
+       status: active negotiated
+       sys_id: aa:55:aa:55:00:00
+       sys_priority: 65534
+       aggregation key: 2
+       lacp_time: fast
+
+slave: p0: current attached
+       port_id: 1
+       port_priority: 65535
+       may_enable: true
+
+       actor sys_id: aa:55:aa:55:00:00
+       actor sys_priority: 65534
+       actor port_id: 1
+       actor port_priority: 65535
+       actor key: 2
+       actor state: activity timeout aggregation synchronized collecting distributing
+
+       partner sys_id: aa:66:aa:66:00:00
+       partner sys_priority: 65534
+       partner port_id: 3
+       partner port_priority: 65535
+       partner key: 4
+       partner state: activity timeout aggregation synchronized collecting distributing
+
+slave: p1: current attached
+       port_id: 2
+       port_priority: 65535
+       may_enable: true
+
+       actor sys_id: aa:55:aa:55:00:00
+       actor sys_priority: 65534
+       actor port_id: 2
+       actor port_priority: 65535
+       actor key: 2
+       actor state: activity timeout aggregation synchronized collecting distributing
+
+       partner sys_id: aa:66:aa:66:00:00
+       partner sys_priority: 65534
+       partner port_id: 4
+       partner port_priority: 65535
+       partner key: 4
+       partner state: activity timeout aggregation synchronized collecting distributing
+---- bond1 ----
+       status: active negotiated
+       sys_id: aa:66:aa:66:00:00
+       sys_priority: 65534
+       aggregation key: 4
+       lacp_time: fast
+
+slave: p2: current attached
+       port_id: 3
+       port_priority: 65535
+       may_enable: true
+
+       actor sys_id: aa:66:aa:66:00:00
+       actor sys_priority: 65534
+       actor port_id: 3
+       actor port_priority: 65535
+       actor key: 4
+       actor state: activity timeout aggregation synchronized collecting distributing
+
+       partner sys_id: aa:55:aa:55:00:00
+       partner sys_priority: 65534
+       partner port_id: 1
+       partner port_priority: 65535
+       partner key: 2
+       partner state: activity timeout aggregation synchronized collecting distributing
+
+slave: p3: current attached
+       port_id: 4
+       port_priority: 65535
+       may_enable: true
+
+       actor sys_id: aa:66:aa:66:00:00
+       actor sys_priority: 65534
+       actor port_id: 4
+       actor port_priority: 65535
+       actor key: 4
+       actor state: activity timeout aggregation synchronized collecting distributing
+
+       partner sys_id: aa:55:aa:55:00:00
+       partner sys_priority: 65534
+       partner port_id: 2
+       partner port_priority: 65535
+       partner key: 2
+       partner state: activity timeout aggregation synchronized collecting distributing
+---- bond0 ----
+bond_mode: balance-tcp
+bond may use recirculation: yes, <del>
+bond-hash-basis: 0
+updelay: 0 ms
+downdelay: 0 ms
+lacp_status: negotiated
+
+slave p0: enabled
+       may_enable: true
+
+slave p1: enabled
+       may_enable: true
+
+---- bond1 ----
+bond_mode: balance-tcp
+bond may use recirculation: yes, <del>
+bond-hash-basis: 0
+updelay: 0 ms
+downdelay: 0 ms
+lacp_status: negotiated
+
+slave p2: enabled
+       may_enable: true
+
+slave p3: enabled
+       may_enable: true
+
+])
+AT_CHECK([grep 'active slave$' stdout], [0], [dnl
+       active slave
+       active slave
+])
+
+# Redirect the patch link between p0 and p2 so that no packets get
+# back and forth across them anymore.  Then wait 4 simulated
+# seconds.  The LACP state should become "expired" for p0 and p2.
+AT_CHECK([ovs-vsctl \
+-- add-port br0 null0 -- set int null0 type=patch options:peer=p2 -- set int p2 options:peer=null0 \
+-- add-port br1 null1 -- set int null1 type=patch options:peer=p0 -- set int p0 options:peer=null1])
+
+ovs-appctl time/warp 4100 100
+AT_CHECK(
+  [ovs-appctl lacp/show bond0
+ovs-appctl lacp/show bond1
+ovs-appctl bond/show bond0 | STRIP_RECIRC_ID | STRIP_ACTIVE_SLAVE_MAC
+ovs-appctl bond/show bond1 | STRIP_RECIRC_ID | STRIP_ACTIVE_SLAVE_MAC ], [0], [dnl
+---- bond0 ----
+       status: active negotiated
+       sys_id: aa:55:aa:55:00:00
+       sys_priority: 65534
+       aggregation key: 2
+       lacp_time: fast
+
+slave: p0: expired attached
+       port_id: 1
+       port_priority: 65535
+       may_enable: false
+
+       actor sys_id: aa:55:aa:55:00:00
+       actor sys_priority: 65534
+       actor port_id: 1
+       actor port_priority: 65535
+       actor key: 2
+       actor state: activity timeout aggregation synchronized collecting distributing expired
+
+       partner sys_id: aa:66:aa:66:00:00
+       partner sys_priority: 65534
+       partner port_id: 3
+       partner port_priority: 65535
+       partner key: 4
+       partner state: activity timeout aggregation collecting distributing
+
+slave: p1: current attached
+       port_id: 2
+       port_priority: 65535
+       may_enable: true
+
+       actor sys_id: aa:55:aa:55:00:00
+       actor sys_priority: 65534
+       actor port_id: 2
+       actor port_priority: 65535
+       actor key: 2
+       actor state: activity timeout aggregation synchronized collecting distributing
+
+       partner sys_id: aa:66:aa:66:00:00
+       partner sys_priority: 65534
+       partner port_id: 4
+       partner port_priority: 65535
+       partner key: 4
+       partner state: activity timeout aggregation synchronized collecting distributing
+---- bond1 ----
+       status: active negotiated
+       sys_id: aa:66:aa:66:00:00
+       sys_priority: 65534
+       aggregation key: 4
+       lacp_time: fast
+
+slave: p2: expired attached
+       port_id: 3
+       port_priority: 65535
+       may_enable: false
+
+       actor sys_id: aa:66:aa:66:00:00
+       actor sys_priority: 65534
+       actor port_id: 3
+       actor port_priority: 65535
+       actor key: 4
+       actor state: activity timeout aggregation synchronized collecting distributing expired
+
+       partner sys_id: aa:55:aa:55:00:00
+       partner sys_priority: 65534
+       partner port_id: 1
+       partner port_priority: 65535
+       partner key: 2
+       partner state: activity timeout aggregation collecting distributing
+
+slave: p3: current attached
+       port_id: 4
+       port_priority: 65535
+       may_enable: true
+
+       actor sys_id: aa:66:aa:66:00:00
+       actor sys_priority: 65534
+       actor port_id: 4
+       actor port_priority: 65535
+       actor key: 4
+       actor state: activity timeout aggregation synchronized collecting distributing
+
+       partner sys_id: aa:55:aa:55:00:00
+       partner sys_priority: 65534
+       partner port_id: 2
+       partner port_priority: 65535
+       partner key: 2
+       partner state: activity timeout aggregation synchronized collecting distributing
+---- bond0 ----
+bond_mode: balance-tcp
+bond may use recirculation: yes, <del>
+bond-hash-basis: 0
+updelay: 0 ms
+downdelay: 0 ms
+lacp_status: negotiated
+<active slave mac del>
+
+slave p0: disabled
+       may_enable: false
+
+slave p1: enabled
+       active slave
+       may_enable: true
+
+---- bond1 ----
+bond_mode: balance-tcp
+bond may use recirculation: yes, <del>
+bond-hash-basis: 0
+updelay: 0 ms
+downdelay: 0 ms
+lacp_status: negotiated
+<active slave mac del>
+
+slave p2: disabled
+       may_enable: false
+
+slave p3: enabled
+       active slave
+       may_enable: true
+
+])
+
+# Wait 4 more simulated seconds.  The LACP state should become
+# "defaulted" for p0 and p2.
+ovs-appctl time/warp 4100 100
+AT_CHECK(
+  [ovs-appctl lacp/show bond0
+ovs-appctl lacp/show bond1
+ovs-appctl bond/show bond0 | STRIP_RECIRC_ID | STRIP_ACTIVE_SLAVE_MAC
+ovs-appctl bond/show bond1 | STRIP_RECIRC_ID | STRIP_ACTIVE_SLAVE_MAC ], [0], [dnl
+---- bond0 ----
+       status: active negotiated
+       sys_id: aa:55:aa:55:00:00
+       sys_priority: 65534
+       aggregation key: 2
+       lacp_time: fast
+
+slave: p0: defaulted detached
+       port_id: 1
+       port_priority: 65535
+       may_enable: false
+
+       actor sys_id: aa:55:aa:55:00:00
+       actor sys_priority: 65534
+       actor port_id: 1
+       actor port_priority: 65535
+       actor key: 2
+       actor state: activity timeout aggregation defaulted
+
+       partner sys_id: 00:00:00:00:00:00
+       partner sys_priority: 0
+       partner port_id: 0
+       partner port_priority: 0
+       partner key: 0
+       partner state:
+
+slave: p1: current attached
+       port_id: 2
+       port_priority: 65535
+       may_enable: true
+
+       actor sys_id: aa:55:aa:55:00:00
+       actor sys_priority: 65534
+       actor port_id: 2
+       actor port_priority: 65535
+       actor key: 2
+       actor state: activity timeout aggregation synchronized collecting distributing
+
+       partner sys_id: aa:66:aa:66:00:00
+       partner sys_priority: 65534
+       partner port_id: 4
+       partner port_priority: 65535
+       partner key: 4
+       partner state: activity timeout aggregation synchronized collecting distributing
+---- bond1 ----
+       status: active negotiated
+       sys_id: aa:66:aa:66:00:00
+       sys_priority: 65534
+       aggregation key: 4
+       lacp_time: fast
+
+slave: p2: defaulted detached
+       port_id: 3
+       port_priority: 65535
+       may_enable: false
+
+       actor sys_id: aa:66:aa:66:00:00
+       actor sys_priority: 65534
+       actor port_id: 3
+       actor port_priority: 65535
+       actor key: 4
+       actor state: activity timeout aggregation defaulted
+
+       partner sys_id: 00:00:00:00:00:00
+       partner sys_priority: 0
+       partner port_id: 0
+       partner port_priority: 0
+       partner key: 0
+       partner state:
+
+slave: p3: current attached
+       port_id: 4
+       port_priority: 65535
+       may_enable: true
+
+       actor sys_id: aa:66:aa:66:00:00
+       actor sys_priority: 65534
+       actor port_id: 4
+       actor port_priority: 65535
+       actor key: 4
+       actor state: activity timeout aggregation synchronized collecting distributing
+
+       partner sys_id: aa:55:aa:55:00:00
+       partner sys_priority: 65534
+       partner port_id: 2
+       partner port_priority: 65535
+       partner key: 2
+       partner state: activity timeout aggregation synchronized collecting distributing
+---- bond0 ----
+bond_mode: balance-tcp
+bond may use recirculation: yes, <del>
+bond-hash-basis: 0
+updelay: 0 ms
+downdelay: 0 ms
+lacp_status: negotiated
+<active slave mac del>
+
+slave p0: disabled
+       may_enable: false
+
+slave p1: enabled
+       active slave
+       may_enable: true
+
+---- bond1 ----
+bond_mode: balance-tcp
+bond may use recirculation: yes, <del>
+bond-hash-basis: 0
+updelay: 0 ms
+downdelay: 0 ms
+lacp_status: negotiated
+<active slave mac del>
+
+slave p2: disabled
+       may_enable: false
+
+slave p3: enabled
+       active slave
+       may_enable: true
+
+])
+OVS_VSWITCHD_STOP
+AT_CLEANUP