X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=tests%2Flacp.at;h=0db2077381cb63d06297efdc61abf3d1a69883da;hb=0ef165ecb57943e17a8ee8270df68ffb8d032e29;hp=de7a3a7bae7755be515a40a87102de17a9d908a3;hpb=742468d943cf2212d633951db2a6a72844b4f97d;p=sliver-openvswitch.git diff --git a/tests/lacp.at b/tests/lacp.at index de7a3a7ba..0db207738 100644 --- a/tests/lacp.at +++ b/tests/lacp.at @@ -1,13 +1,22 @@ AT_BANNER([lacp]) +# Strips out Reciulation ID information since it may change over time. +m4_define([STRIP_RECIRC_ID], [[sed ' + s/Recirc-ID.*$// +' ]]) + AT_SETUP([lacp - config]) OVS_VSWITCHD_START([\ add-port br0 p1 --\ set Port p1 lacp=active --\ set Interface p1 type=dummy ]) -AT_CHECK([ovs-appctl lacp/show], [0], [stdout]) -AT_CHECK([cat stdout], [0], [dnl +ovs-appctl time/stop +ovs-appctl time/warp 100 +ovs-appctl time/warp 100 +ovs-appctl time/warp 100 + +AT_CHECK([ovs-appctl lacp/show], [0], [dnl ---- p1 ---- status: active negotiated sys_id: aa:55:aa:55:00:00 @@ -18,6 +27,7 @@ AT_CHECK([cat stdout], [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 @@ -33,13 +43,14 @@ slave: p1: expired attached partner key: 0 partner state: timeout ]) +AT_CHECK([ovs-appctl bond/show]) OVS_VSWITCHD_STOP AT_CLEANUP -AT_SETUP([lacp - config]) +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 +63,11 @@ OVS_VSWITCHD_START([dnl other_config:lacp-port-priority=222 \ other_config:lacp-aggregation-key=3333 ]) +ovs-appctl time/stop +ovs-appctl time/warp 100 +ovs-appctl time/warp 100 +ovs-appctl time/warp 100 + AT_CHECK([ovs-appctl lacp/show], [0], [stdout]) AT_CHECK([sed -e 's/aggregation key:.*/aggregation key: /' < stdout], [0], [dnl ---- bond ---- @@ -64,6 +80,7 @@ AT_CHECK([sed -e 's/aggregation key:.*/aggregation key: /' < 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 +99,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 @@ -97,5 +115,463 @@ slave: p2: expired attached partner key: 0 partner state: timeout ]) +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 + +slave p1: disabled + may_enable: false + +slave p2: disabled + may_enable: false + +]) +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 +ovs-appctl bond/show bond1 | STRIP_RECIRC_ID ], [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, +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, +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]) + +for i in `seq 0 40`; do ovs-appctl time/warp 100; done +AT_CHECK( + [ovs-appctl lacp/show bond0 +ovs-appctl lacp/show bond1 +ovs-appctl bond/show bond0 | STRIP_RECIRC_ID +ovs-appctl bond/show bond1 | STRIP_RECIRC_ID ], [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, +bond-hash-basis: 0 +updelay: 0 ms +downdelay: 0 ms +lacp_status: negotiated + +slave p0: disabled + may_enable: false + +slave p1: enabled + active slave + may_enable: true + +---- bond1 ---- +bond_mode: balance-tcp +bond may use recirculation: yes, +bond-hash-basis: 0 +updelay: 0 ms +downdelay: 0 ms +lacp_status: negotiated + +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. +for i in `seq 0 40`; do ovs-appctl time/warp 100; done +AT_CHECK( + [ovs-appctl lacp/show bond0 +ovs-appctl lacp/show bond1 +ovs-appctl bond/show bond0 | STRIP_RECIRC_ID +ovs-appctl bond/show bond1 | STRIP_RECIRC_ID ], [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, +bond-hash-basis: 0 +updelay: 0 ms +downdelay: 0 ms +lacp_status: negotiated + +slave p0: disabled + may_enable: false + +slave p1: enabled + active slave + may_enable: true + +---- bond1 ---- +bond_mode: balance-tcp +bond may use recirculation: yes, +bond-hash-basis: 0 +updelay: 0 ms +downdelay: 0 ms +lacp_status: negotiated + +slave p2: disabled + may_enable: false + +slave p3: enabled + active slave + may_enable: true + +]) OVS_VSWITCHD_STOP AT_CLEANUP