Thanks for the revision.
I still saw the failures, so I spent some time looking at why. It
turned out to be related to the two different database transactions used
to configure BFD. When I combined the two transactions into one,
e.g. changed
AT_CHECK([ovs-vsctl add-br br1 -- \
set bridge br1 datapath-type=dummy \
other-config:hwaddr=aa:55:aa:56:00:00 -- \
add-port br1 p1 -- set Interface p1 type=patch \
options:peer=p0 ofport_request=2 -- \
add-port br0 p0 -- set Interface p0 type=patch \
options:peer=p1 ofport_request=1])
AT_CHECK([ovs-vsctl \
set Interface p0 bfd:enable=true bfd:min_tx=100 bfd:min_rx=100 --
\
set Interface p1 bfd:enable=true bfd:min_tx=100 bfd:min_rx=100])
into
AT_CHECK([ovs-vsctl add-br br1 -- \
set bridge br1 datapath-type=dummy \
other-config:hwaddr=aa:55:aa:56:00:00 -- \
add-port br1 p1 -- set Interface p1 type=patch \
options:peer=p0 ofport_request=2 -- \
add-port br0 p0 -- set Interface p0 type=patch \
options:peer=p1 ofport_request=1 -- \
set Interface p0 bfd:enable=true bfd:min_tx=100 bfd:min_rx=100 --
\
set Interface p1 bfd:enable=true bfd:min_tx=100 bfd:min_rx=100])
I no longer saw the failures.
I made that change in each of the BFD tests. I also got rid of the use
of the GNU grep --no-group-separator option, which BSD doesn't appear to
support.
With those changes, I applied this to master. Thanks again!
On Thu, Apr 20, 2017 at 03:41:57PM +0000, László Sürü wrote:
> Thanks for the review and comments.
> All unit tests were passing for me before with 'make check', I haven't seen
> failing unit tests.
> It might have been a temporary misbehavior.
>
> I've applied the proposed changes and successfully rerun the tests
> also with 'testsuite' this time based on your attached log (see attachment).
> Also, I've adapted the tests to the new OF 1.6 test as well.
>
> Please find the modified patched below in this mail.
>
> Thanks and regards
> Laszlo
>
> -----Original Message-----
> From: Ben Pfaff [mailto:[email protected]]
> Sent: Saturday, April 15, 2017 6:44 AM
> To: László Sürü <[email protected]>
> Cc: [email protected]
> Subject: Re: [ovs-dev] [PATCH] ofproto-dpif : propagate may_enable flag as
> link aliveness
>
> Thanks a lot for the revised patch! It will be good to get this done
> properly.
>
> I'm appending some changes that I suggest folding in to better match the
> usual OVS coding style.
>
> However, when I run the testsuite, I get the failures below. Do you see
> these too? Can you take a look at them? I'm also attaching the full
> testsuite.log in case it helps.
>
> bfd
>
> 22: bfd - liveness propagation - OF1.3 FAILED (bfd.at:847)
> 23: bfd - liveness propagation - OF1.4 FAILED (bfd.at:920)
> 24: bfd - liveness propagation - OF1.5 FAILED (bfd.at:993)
>
> ofproto
>
> 890: ofproto - mod-port (OpenFlow 1.6) FAILED (ofproto.at:1308)
>
> --8<--------------------------cut here-------------------------->8--
> diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
> index 218e8eb..c82640d 100644
> --- a/ofproto/ofproto-dpif.c
> +++ b/ofproto/ofproto-dpif.c
> @@ -1894,6 +1894,16 @@ port_modified(struct ofport *port_)
> bfd_set_netdev(port->bfd, netdev);
> }
>
> + /* Set liveness, unless the link is administratively or
> + * operationally down or link monitoring false */
> + if (!(port->up.pp.config & OFPUTIL_PC_PORT_DOWN) &&
> + !(port->up.pp.state & OFPUTIL_PS_LINK_DOWN) &&
> + port->may_enable) {
> + port->up.pp.state |= OFPUTIL_PS_LIVE;
> + } else {
> + port->up.pp.state &= ~OFPUTIL_PS_LIVE;
> + }
> +
> ofproto_dpif_monitor_port_update(port, port->bfd, port->cfm,
> port->lldp, &port->up.pp.hw_addr);
>
> @@ -3457,6 +3467,19 @@ port_run(struct ofport_dpif *ofport)
> if (ofport->rstp_port) {
> rstp_port_set_mac_operational(ofport->rstp_port, enable);
> }
> +
> + /* Propagate liveness, unless the link is administratively or
> + * operationally down. */
> + if (!(ofport->up.pp.config & OFPUTIL_PC_PORT_DOWN) &&
> + !(ofport->up.pp.state & OFPUTIL_PS_LINK_DOWN)) {
> + enum ofputil_port_state of_state = ofport->up.pp.state;
> + if (enable) {
> + of_state |= OFPUTIL_PS_LIVE;
> + } else {
> + of_state &= ~OFPUTIL_PS_LIVE;
> + }
> + ofproto_port_set_state(&ofport->up, of_state);
> + }
> }
>
> ofport->may_enable = enable;
> diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
> index 7440d5b..d41e35a 100644
> --- a/ofproto/ofproto.c
> +++ b/ofproto/ofproto.c
> @@ -2473,9 +2473,6 @@ ofport_modified(struct ofport *port, struct
> ofputil_phy_port *pp)
> port->pp.peer = pp->peer;
> port->pp.curr_speed = pp->curr_speed;
> port->pp.max_speed = pp->max_speed;
> -
> - connmgr_send_port_status(port->ofproto->connmgr, NULL,
> - &port->pp, OFPPR_MODIFY);
> }
>
> /* Update OpenFlow 'state' in 'port' and notify controller. */
> @@ -2633,7 +2630,8 @@ update_port(struct ofproto *ofproto, const char *name)
> struct netdev *old_netdev = port->netdev;
>
> /* 'name' hasn't changed location. Any properties changed? */
> - if (!ofport_equal(&port->pp, &pp)) {
> + bool port_changed = !ofport_equal(&port->pp, &pp);
> + if (port_changed) {
> ofport_modified(port, &pp);
> }
>
> @@ -2649,6 +2647,12 @@ update_port(struct ofproto *ofproto, const char *name)
> port->ofproto->ofproto_class->port_modified(port);
> }
>
> + /* Send status update, if any port property changed */
> + if (port_changed) {
> + connmgr_send_port_status(port->ofproto->connmgr, NULL,
> + &port->pp, OFPPR_MODIFY);
> + }
> +
> netdev_close(old_netdev);
> } else {
> /* If 'port' is nonnull then its name differs from 'name' and
> thus
> diff --git a/tests/bfd.at b/tests/bfd.at
> index dee8124..81c7db2 100644
> --- a/tests/bfd.at
> +++ b/tests/bfd.at
> @@ -830,3 +830,222 @@ BFD_CHECK([p1], [false], [false], [none], [down],
> [Control Detection Time Expire
>
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> +
> +# test bfd: liveness propagation - OF1.3.
> +AT_SETUP([bfd - liveness propagation - OF1.3])
> +OVS_VSWITCHD_START
> +AT_CHECK([ovs-ofctl -O OpenFlow13 -P standard monitor br0 --detach
> --no-chdir --pidfile])
> +check_liveness () {
> + printf '\n\n--- check_liveness %d ---\n\n\n' $1
> + shift
> +
> + echo >>expout "OFPT_PORT_STATUS (OF1.3): MOD: 1(p0): addr:
> + config: 0
> + state: $1
> + speed: 0 Mbps now, 0 Mbps max"
> +
> + AT_CHECK(
> + [[sed '
> +s/ (xid=0x[0-9a-fA-F]*)//
> +s/ *duration.*//
> +s/addr:[0-9a-fA-F:]*/addr:/' < monitor.log|grep --no-group-separator -A3
> "MOD: 1(p0)"]],
> + [0], [expout])
> +}
> +: > expout
> +ovs-appctl -t ovs-ofctl ofctl/barrier
> +ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log
> +# Set miss_send_len to 128, enabling port_status messages to our service
> connection.
> +ovs-appctl -t ovs-ofctl ofctl/send 0409000c0123456700000080
> +#Create 2 bridges connected by patch ports and enable bfd
> +AT_CHECK([ovs-vsctl add-br br1 -- \
> + set bridge br1 datapath-type=dummy \
> + other-config:hwaddr=aa:55:aa:56:00:00 -- \
> + add-port br1 p1 -- set Interface p1 type=patch \
> + options:peer=p0 ofport_request=2 -- \
> + add-port br0 p0 -- set Interface p0 type=patch \
> + options:peer=p1 ofport_request=1])
> +
> +AT_CHECK([ovs-vsctl \
> + set Interface p0 bfd:enable=true bfd:min_tx=100 bfd:min_rx=100 -- \
> + set Interface p1 bfd:enable=true bfd:min_tx=100 bfd:min_rx=100])
> +
> +ovs-appctl time/stop
> +# Disable the stats update to prevent the race between ovsdb updating
> +# stats and ovs-vsctl cmd closing the jsonrpc session.
> +AT_CHECK([ovs-vsctl set Open_vSwitch .
> other_config:stats-update-interval=50000000])
> +
> +# wait for a while to stablize bfd.
> +ovs-appctl time/warp 10100 100
> +BFD_CHECK([p0], [true], [false], [none], [up], [No Diagnostic], [none],
> [up], [No Diagnostic])
> +BFD_CHECK([p1], [true], [false], [none], [up], [No Diagnostic], [none],
> [up], [No Diagnostic])
> +BFD_CHECK_TX([p0], [100ms], [100ms], [100ms])
> +BFD_CHECK_RX([p0], [100ms], [100ms], [100ms])
> +# both p0 and p1 should have flap_count = "1". since down->up.
> +BFD_VSCTL_LIST_IFACE([p0], ["s/^.*flap_count=\(.*\), forwarding.*$/\1/p"],
> ["1"])
> +BFD_VSCTL_LIST_IFACE([p1], ["s/^.*flap_count=\(.*\), forwarding.*$/\1/p"],
> ["1"])
> +check_liveness 1 LIVE
> +
> +# turn bfd on p1 off, should increment the bfd:flap_count on p0.
> +AT_CHECK([ovs-vsctl set interface p1 bfd:enable=false])
> +ovs-appctl time/warp 5000 100
> +BFD_CHECK([p0], [false], [false], [none], [down], [Control Detection Time
> Expired], [none], [down], [No Diagnostic])
> +BFD_VSCTL_LIST_IFACE([p0], ["s/^.*flap_count=\(.*\), forwarding.*$/\1/p"],
> ["2"])
> +AT_CHECK([ovs-vsctl list interface p1 | sed -n "s/^.*flap_count=\(.*\),
> forwarding.*$/\1/p"])
> +check_liveness 2 0
> +
> +# turn bfd on p1 on again, should increment the bfd:flap_count on p0.
> +# p1 should still have flap_count = "1", since it is reset.
> +AT_CHECK([ovs-vsctl set interface p1 bfd:enable=true])
> +ovs-appctl time/warp 5000 100
> +BFD_VSCTL_LIST_IFACE([p0], ["s/^.*flap_count=\(.*\), forwarding.*$/\1/p"],
> ["3"])
> +BFD_VSCTL_LIST_IFACE([p1], ["s/^.*flap_count=\(.*\), forwarding.*$/\1/p"],
> ["1"])
> +check_liveness 3 LIVE
> +
> +OVS_VSWITCHD_STOP
> +AT_CLEANUP
> +
> +# test bfd: liveness propagation - OF1.4.
> +AT_SETUP([bfd - liveness propagation - OF1.4])
> +OVS_VSWITCHD_START
> +AT_CHECK([ovs-ofctl -O OpenFlow14 -P standard monitor br0 --detach
> --no-chdir --pidfile])
> +check_liveness () {
> + printf '\n\n--- check_liveness %d ---\n\n\n' $1
> + shift
> +
> + echo >>expout "OFPT_PORT_STATUS (OF1.4): MOD: 1(p0): addr:
> + config: 0
> + state: $1
> + speed: 0 Mbps now, 0 Mbps max"
> +
> + AT_CHECK(
> + [[sed '
> +s/ (xid=0x[0-9a-fA-F]*)//
> +s/ *duration.*//
> +s/addr:[0-9a-fA-F:]*/addr:/' < monitor.log|grep --no-group-separator -A3
> "MOD: 1(p0)"]],
> + [0], [expout])
> +}
> +: > expout
> +ovs-appctl -t ovs-ofctl ofctl/barrier
> +ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log
> +# Set miss_send_len to 128, enabling port_status messages to our service
> connection.
> +ovs-appctl -t ovs-ofctl ofctl/send 0509000c0123456700000080
> +#Create 2 bridges connected by patch ports and enable bfd
> +AT_CHECK([ovs-vsctl add-br br1 -- \
> + set bridge br1 datapath-type=dummy \
> + other-config:hwaddr=aa:55:aa:56:00:00 -- \
> + add-port br1 p1 -- set Interface p1 type=patch \
> + options:peer=p0 ofport_request=2 -- \
> + add-port br0 p0 -- set Interface p0 type=patch \
> + options:peer=p1 ofport_request=1])
> +
> +AT_CHECK([ovs-vsctl \
> + set Interface p0 bfd:enable=true bfd:min_tx=100 bfd:min_rx=100 -- \
> + set Interface p1 bfd:enable=true bfd:min_tx=100 bfd:min_rx=100])
> +
> +ovs-appctl time/stop
> +# Disable the stats update to prevent the race between ovsdb updating
> +# stats and ovs-vsctl cmd closing the jsonrpc session.
> +AT_CHECK([ovs-vsctl set Open_vSwitch .
> other_config:stats-update-interval=50000000])
> +
> +# wait for a while to stablize bfd.
> +ovs-appctl time/warp 10100 100
> +BFD_CHECK([p0], [true], [false], [none], [up], [No Diagnostic], [none],
> [up], [No Diagnostic])
> +BFD_CHECK([p1], [true], [false], [none], [up], [No Diagnostic], [none],
> [up], [No Diagnostic])
> +BFD_CHECK_TX([p0], [100ms], [100ms], [100ms])
> +BFD_CHECK_RX([p0], [100ms], [100ms], [100ms])
> +# both p0 and p1 should have flap_count = "1". since down->up.
> +BFD_VSCTL_LIST_IFACE([p0], ["s/^.*flap_count=\(.*\), forwarding.*$/\1/p"],
> ["1"])
> +BFD_VSCTL_LIST_IFACE([p1], ["s/^.*flap_count=\(.*\), forwarding.*$/\1/p"],
> ["1"])
> +check_liveness 1 LIVE
> +
> +# turn bfd on p1 off, should increment the bfd:flap_count on p0.
> +AT_CHECK([ovs-vsctl set interface p1 bfd:enable=false])
> +ovs-appctl time/warp 5000 100
> +BFD_CHECK([p0], [false], [false], [none], [down], [Control Detection Time
> Expired], [none], [down], [No Diagnostic])
> +BFD_VSCTL_LIST_IFACE([p0], ["s/^.*flap_count=\(.*\), forwarding.*$/\1/p"],
> ["2"])
> +AT_CHECK([ovs-vsctl list interface p1 | sed -n "s/^.*flap_count=\(.*\),
> forwarding.*$/\1/p"])
> +check_liveness 2 0
> +
> +# turn bfd on p1 on again, should increment the bfd:flap_count on p0.
> +# p1 should still have flap_count = "1", since it is reset.
> +AT_CHECK([ovs-vsctl set interface p1 bfd:enable=true])
> +ovs-appctl time/warp 5000 100
> +BFD_VSCTL_LIST_IFACE([p0], ["s/^.*flap_count=\(.*\), forwarding.*$/\1/p"],
> ["3"])
> +BFD_VSCTL_LIST_IFACE([p1], ["s/^.*flap_count=\(.*\), forwarding.*$/\1/p"],
> ["1"])
> +check_liveness 3 LIVE
> +
> +OVS_VSWITCHD_STOP
> +AT_CLEANUP
> +
> +# test bfd: liveness propagation - OF1.5.
> +AT_SETUP([bfd - liveness propagation - OF1.5])
> +OVS_VSWITCHD_START
> +AT_CHECK([ovs-ofctl -O OpenFlow15 -P standard monitor br0 --detach
> --no-chdir --pidfile])
> +check_liveness () {
> + printf '\n\n--- check_liveness %d ---\n\n\n' $1
> + shift
> +
> + echo >>expout "OFPT_PORT_STATUS (OF1.5): MOD: 1(p0): addr:
> + config: 0
> + state: $1
> + speed: 0 Mbps now, 0 Mbps max"
> +
> + AT_CHECK(
> + [[sed '
> +s/ (xid=0x[0-9a-fA-F]*)//
> +s/ *duration.*//
> +s/addr:[0-9a-fA-F:]*/addr:/' < monitor.log|grep --no-group-separator -A3
> "MOD: 1(p0)"]],
> + [0], [expout])
> +}
> +: > expout
> +ovs-appctl -t ovs-ofctl ofctl/barrier
> +ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log
> +# Set miss_send_len to 128, enabling port_status messages to our service
> connection.
> +ovs-appctl -t ovs-ofctl ofctl/send 0609000c0123456700000080
> +#Create 2 bridges connected by patch ports and enable bfd
> +AT_CHECK([ovs-vsctl add-br br1 -- \
> + set bridge br1 datapath-type=dummy \
> + other-config:hwaddr=aa:55:aa:56:00:00 -- \
> + add-port br1 p1 -- set Interface p1 type=patch \
> + options:peer=p0 ofport_request=2 -- \
> + add-port br0 p0 -- set Interface p0 type=patch \
> + options:peer=p1 ofport_request=1])
> +
> +AT_CHECK([ovs-vsctl \
> + set Interface p0 bfd:enable=true bfd:min_tx=100 bfd:min_rx=100 -- \
> + set Interface p1 bfd:enable=true bfd:min_tx=100 bfd:min_rx=100])
> +
> +ovs-appctl time/stop
> +# Disable the stats update to prevent the race between ovsdb updating
> +# stats and ovs-vsctl cmd closing the jsonrpc session.
> +AT_CHECK([ovs-vsctl set Open_vSwitch .
> other_config:stats-update-interval=50000000])
> +
> +# wait for a while to stablize bfd.
> +ovs-appctl time/warp 10100 100
> +BFD_CHECK([p0], [true], [false], [none], [up], [No Diagnostic], [none],
> [up], [No Diagnostic])
> +BFD_CHECK([p1], [true], [false], [none], [up], [No Diagnostic], [none],
> [up], [No Diagnostic])
> +BFD_CHECK_TX([p0], [100ms], [100ms], [100ms])
> +BFD_CHECK_RX([p0], [100ms], [100ms], [100ms])
> +# both p0 and p1 should have flap_count = "1". since down->up.
> +BFD_VSCTL_LIST_IFACE([p0], ["s/^.*flap_count=\(.*\), forwarding.*$/\1/p"],
> ["1"])
> +BFD_VSCTL_LIST_IFACE([p1], ["s/^.*flap_count=\(.*\), forwarding.*$/\1/p"],
> ["1"])
> +check_liveness 1 LIVE
> +
> +# turn bfd on p1 off, should increment the bfd:flap_count on p0.
> +AT_CHECK([ovs-vsctl set interface p1 bfd:enable=false])
> +ovs-appctl time/warp 5000 100
> +BFD_CHECK([p0], [false], [false], [none], [down], [Control Detection Time
> Expired], [none], [down], [No Diagnostic])
> +BFD_VSCTL_LIST_IFACE([p0], ["s/^.*flap_count=\(.*\), forwarding.*$/\1/p"],
> ["2"])
> +AT_CHECK([ovs-vsctl list interface p1 | sed -n "s/^.*flap_count=\(.*\),
> forwarding.*$/\1/p"])
> +check_liveness 2 0
> +
> +# turn bfd on p1 on again, should increment the bfd:flap_count on p0.
> +# p1 should still have flap_count = "1", since it is reset.
> +AT_CHECK([ovs-vsctl set interface p1 bfd:enable=true])
> +ovs-appctl time/warp 5000 100
> +BFD_VSCTL_LIST_IFACE([p0], ["s/^.*flap_count=\(.*\), forwarding.*$/\1/p"],
> ["3"])
> +BFD_VSCTL_LIST_IFACE([p1], ["s/^.*flap_count=\(.*\), forwarding.*$/\1/p"],
> ["1"])
> +check_liveness 3 LIVE
> +
> +OVS_VSWITCHD_STOP
> +AT_CLEANUP
> diff --git a/tests/cfm.at b/tests/cfm.at
> index d951475..9349268 100644
> --- a/tests/cfm.at
> +++ b/tests/cfm.at
> @@ -319,3 +319,189 @@ CFM_CHECK_EXTENDED_FAULT([p0], [1], [recv], [0], [up],
> [up], [300ms])
>
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> +
> +# test cfm liveness propagation - OF1.3.
> +AT_SETUP([cfm - liveness propagation - OF1.3])
> +OVS_VSWITCHD_START
> +AT_CHECK([ovs-ofctl -O OpenFlow13 -P standard monitor br0 --detach
> --no-chdir --pidfile])
> +check_liveness () {
> + printf '\n\n--- check_liveness %d ---\n\n\n' $1
> + shift
> +
> + echo >>expout "OFPT_PORT_STATUS (OF1.3): MOD: 1(p0): addr:
> + config: 0
> + state: $1
> + speed: 0 Mbps now, 0 Mbps max"
> +
> + AT_CHECK(
> + [[sed '
> +s/ (xid=0x[0-9a-fA-F]*)//
> +s/ *duration.*//
> +s/addr:[0-9a-fA-F:]*/addr:/' < monitor.log|grep --no-group-separator -A3
> "MOD: 1(p0)"]],
> + [0], [expout])
> +}
> +: > expout
> +ovs-appctl -t ovs-ofctl ofctl/barrier
> +ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log
> +# Set miss_send_len to 128, enabling port_status messages to our service
> connection.
> +ovs-appctl -t ovs-ofctl ofctl/send 0409000c0123456700000080
> +
> +#Create 2 bridges connected by patch ports and enable cfm
> +AT_CHECK([ovs-vsctl add-br br1 -- \
> + set bridge br1 datapath-type=dummy \
> + other-config:hwaddr=aa:55:aa:56:00:00 -- \
> + add-port br1 p1 -- set Interface p1 type=patch \
> + options:peer=p0 -- \
> + add-port br0 p0 -- set Interface p0 type=patch \
> + options:peer=p1])
> +check_liveness 1 LIVE
> +
> +AT_CHECK([ovs-vsctl \
> + set Interface p0 cfm_mpid=1 other_config:cfm_interval=100
> other_config:cfm_extended=true -- \
> + set Interface p1 cfm_mpid=2 other_config:cfm_interval=100
> other_config:cfm_extended=true])
> +ovs-appctl time/stop
> +# wait for a while to stablize cfm.
> +ovs-appctl time/warp 10100 100
> +CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [100ms], [2], [up])
> +CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [100ms], [1], [up])
> +
> +# turn cfm on p1 off, should increment the cfm_flap_count on p0.
> +AT_CHECK([ovs-vsctl remove interface p1 cfm_mpid 2])
> +ovs-appctl time/warp 1100 100
> +CFM_VSCTL_LIST_IFACE([p0], [cfm_flap_count], [cfm_flap_count : 1])
> +CFM_VSCTL_LIST_IFACE([p1], [cfm_flap_count], [cfm_flap_count : [[]]])
> +check_liveness 2 0
> +
> +# turn cfm on p1 on again, should increment the cfm_flap_count on p0.
> +AT_CHECK([ovs-vsctl set interface p1 cfm_mpid=2])
> +ovs-appctl time/warp 1100 100
> +check_liveness 3 LIVE
> +
> +CFM_VSCTL_LIST_IFACE([p0], [cfm_flap_count], [cfm_flap_count : 2])
> +
> +OVS_VSWITCHD_STOP
> +AT_CLEANUP
> +
> +# test cfm liveness propagation - OF1.4.
> +AT_SETUP([cfm - liveness propagation - OF1.4])
> +OVS_VSWITCHD_START
> +AT_CHECK([ovs-ofctl -O OpenFlow14 -P standard monitor br0 --detach
> --no-chdir --pidfile])
> +check_liveness () {
> + printf '\n\n--- check_liveness %d ---\n\n\n' $1
> + shift
> +
> + echo >>expout "OFPT_PORT_STATUS (OF1.4): MOD: 1(p0): addr:
> + config: 0
> + state: $1
> + speed: 0 Mbps now, 0 Mbps max"
> +
> + AT_CHECK(
> + [[sed '
> +s/ (xid=0x[0-9a-fA-F]*)//
> +s/ *duration.*//
> +s/addr:[0-9a-fA-F:]*/addr:/' < monitor.log|grep --no-group-separator -A3
> "MOD: 1(p0)"]],
> + [0], [expout])
> +}
> +: > expout
> +ovs-appctl -t ovs-ofctl ofctl/barrier
> +ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log
> +# Set miss_send_len to 128, enabling port_status messages to our service
> connection.
> +ovs-appctl -t ovs-ofctl ofctl/send 0509000c0123456700000080
> +
> +#Create 2 bridges connected by patch ports and enable cfm
> +AT_CHECK([ovs-vsctl add-br br1 -- \
> + set bridge br1 datapath-type=dummy \
> + other-config:hwaddr=aa:55:aa:56:00:00 -- \
> + add-port br1 p1 -- set Interface p1 type=patch \
> + options:peer=p0 -- \
> + add-port br0 p0 -- set Interface p0 type=patch \
> + options:peer=p1])
> +check_liveness 1 LIVE
> +
> +AT_CHECK([ovs-vsctl \
> + set Interface p0 cfm_mpid=1 other_config:cfm_interval=100
> other_config:cfm_extended=true -- \
> + set Interface p1 cfm_mpid=2 other_config:cfm_interval=100
> other_config:cfm_extended=true])
> +ovs-appctl time/stop
> +# wait for a while to stablize cfm.
> +ovs-appctl time/warp 10100 100
> +CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [100ms], [2], [up])
> +CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [100ms], [1], [up])
> +
> +# turn cfm on p1 off, should increment the cfm_flap_count on p0.
> +AT_CHECK([ovs-vsctl remove interface p1 cfm_mpid 2])
> +ovs-appctl time/warp 1100 100
> +CFM_VSCTL_LIST_IFACE([p0], [cfm_flap_count], [cfm_flap_count : 1])
> +CFM_VSCTL_LIST_IFACE([p1], [cfm_flap_count], [cfm_flap_count : [[]]])
> +check_liveness 2 0
> +
> +# turn cfm on p1 on again, should increment the cfm_flap_count on p0.
> +AT_CHECK([ovs-vsctl set interface p1 cfm_mpid=2])
> +ovs-appctl time/warp 1100 100
> +check_liveness 3 LIVE
> +
> +CFM_VSCTL_LIST_IFACE([p0], [cfm_flap_count], [cfm_flap_count : 2])
> +
> +OVS_VSWITCHD_STOP
> +AT_CLEANUP
> +
> +# test cfm liveness propagation - OF1.5.
> +AT_SETUP([cfm - liveness propagation - OF1.5])
> +OVS_VSWITCHD_START
> +AT_CHECK([ovs-ofctl -O OpenFlow15 -P standard monitor br0 --detach
> --no-chdir --pidfile])
> +check_liveness () {
> + printf '\n\n--- check_liveness %d ---\n\n\n' $1
> + shift
> +
> + echo >>expout "OFPT_PORT_STATUS (OF1.5): MOD: 1(p0): addr:
> + config: 0
> + state: $1
> + speed: 0 Mbps now, 0 Mbps max"
> +
> + AT_CHECK(
> + [[sed '
> +s/ (xid=0x[0-9a-fA-F]*)//
> +s/ *duration.*//
> +s/addr:[0-9a-fA-F:]*/addr:/' < monitor.log|grep --no-group-separator -A3
> "MOD: 1(p0)"]],
> + [0], [expout])
> +}
> +: > expout
> +ovs-appctl -t ovs-ofctl ofctl/barrier
> +ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log
> +# Set miss_send_len to 128, enabling port_status messages to our service
> connection.
> +ovs-appctl -t ovs-ofctl ofctl/send 0609000c0123456700000080
> +
> +#Create 2 bridges connected by patch ports and enable cfm
> +AT_CHECK([ovs-vsctl add-br br1 -- \
> + set bridge br1 datapath-type=dummy \
> + other-config:hwaddr=aa:55:aa:56:00:00 -- \
> + add-port br1 p1 -- set Interface p1 type=patch \
> + options:peer=p0 -- \
> + add-port br0 p0 -- set Interface p0 type=patch \
> + options:peer=p1])
> +check_liveness 1 LIVE
> +
> +AT_CHECK([ovs-vsctl \
> + set Interface p0 cfm_mpid=1 other_config:cfm_interval=100
> other_config:cfm_extended=true -- \
> + set Interface p1 cfm_mpid=2 other_config:cfm_interval=100
> other_config:cfm_extended=true])
> +ovs-appctl time/stop
> +# wait for a while to stablize cfm.
> +ovs-appctl time/warp 10100 100
> +CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [100ms], [2], [up])
> +CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [100ms], [1], [up])
> +
> +# turn cfm on p1 off, should increment the cfm_flap_count on p0.
> +AT_CHECK([ovs-vsctl remove interface p1 cfm_mpid 2])
> +ovs-appctl time/warp 1100 100
> +CFM_VSCTL_LIST_IFACE([p0], [cfm_flap_count], [cfm_flap_count : 1])
> +CFM_VSCTL_LIST_IFACE([p1], [cfm_flap_count], [cfm_flap_count : [[]]])
> +check_liveness 2 0
> +
> +# turn cfm on p1 on again, should increment the cfm_flap_count on p0.
> +AT_CHECK([ovs-vsctl set interface p1 cfm_mpid=2])
> +ovs-appctl time/warp 1100 100
> +check_liveness 3 LIVE
> +
> +CFM_VSCTL_LIST_IFACE([p0], [cfm_flap_count], [cfm_flap_count : 2])
> +
> +OVS_VSWITCHD_STOP
> +AT_CLEANUP
> diff --git a/tests/lacp.at b/tests/lacp.at
> index 20ec09e..2b8adf3 100644
> --- a/tests/lacp.at
> +++ b/tests/lacp.at
> @@ -726,3 +726,291 @@ slave p3: enabled
>
> OVS_VSWITCHD_STOP
> AT_CLEANUP
> +
> +# test lacp liveness propagation - OF1.3.
> +AT_SETUP([lacp - liveness propagation - OF1.3])
> +OVS_VSWITCHD_START
> +AT_CHECK([ovs-ofctl -O OpenFlow13 -P standard monitor br0 --detach
> --no-chdir --pidfile])
> +check_liveness () {
> + printf '\n\n--- check_liveness %d ---\n\n\n' $1
> + shift
> +
> + echo >>expout "OFPT_PORT_STATUS (OF1.3): MOD: 1(p0): addr:
> + config: 0
> + state: $1
> + speed: 0 Mbps now, 0 Mbps max"
> +
> + AT_CHECK(
> + [[sed '
> +s/ (xid=0x[0-9a-fA-F]*)//
> +s/ *duration.*//
> +s/addr:[0-9a-fA-F:]*/addr:/' < monitor.log|grep --no-group-separator -A3
> "MOD: 1(p0)"]],
> + [0], [expout])
> +}
> +: > expout
> +ovs-appctl -t ovs-ofctl ofctl/barrier
> +ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log
> +# Set miss_send_len to 128, enabling port_status messages to our service
> connection.
> +ovs-appctl -t ovs-ofctl ofctl/send 0409000c0123456700000080
> +
> +# 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.
> +AT_CHECK([ovs-vsctl 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
> +check_liveness 1 LIVE
> +
> +# Makes LACP state "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])
> +check_liveness 2 LIVE
> +
> +# Wait 4 more simulated seconds. The LACP state should become "defaulted"
> for p0 and p2.
> +ovs-appctl time/warp 4100 100
> +check_liveness 3 0
> +
> +# Reconnect the patch link between p0 and p2 to allow traffic between the
> ports.
> +AT_CHECK([ovs-vsctl \
> +-- del-port null0 -- set int p2 options:peer=p0 \
> +-- del-port null1 -- set int p0 options:peer=p2])
> +
> +# Wait for 30 more seconds (LACP_SLOW_TIME_TX) for the lacp to renegotiate
> +ovs-appctl time/warp 30100 100
> +check_liveness 3 LIVE
> +
> +OVS_VSWITCHD_STOP
> +AT_CLEANUP
> +
> +# test lacp liveness propagation - OF1.4.
> +AT_SETUP([lacp - liveness propagation - OF1.4])
> +OVS_VSWITCHD_START
> +AT_CHECK([ovs-ofctl -O OpenFlow14 -P standard monitor br0 --detach
> --no-chdir --pidfile])
> +check_liveness () {
> + printf '\n\n--- check_liveness %d ---\n\n\n' $1
> + shift
> +
> + echo >>expout "OFPT_PORT_STATUS (OF1.4): MOD: 1(p0): addr:
> + config: 0
> + state: $1
> + speed: 0 Mbps now, 0 Mbps max"
> +
> + AT_CHECK(
> + [[sed '
> +s/ (xid=0x[0-9a-fA-F]*)//
> +s/ *duration.*//
> +s/addr:[0-9a-fA-F:]*/addr:/' < monitor.log|grep --no-group-separator -A3
> "MOD: 1(p0)"]],
> + [0], [expout])
> +}
> +: > expout
> +ovs-appctl -t ovs-ofctl ofctl/barrier
> +ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log
> +# Set miss_send_len to 128, enabling port_status messages to our service
> connection.
> +ovs-appctl -t ovs-ofctl ofctl/send 0509000c0123456700000080
> +
> +# 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.
> +AT_CHECK([ovs-vsctl 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
> +check_liveness 1 LIVE
> +
> +# Makes LACP state "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])
> +check_liveness 2 LIVE
> +
> +# Wait 4 more simulated seconds. The LACP state should become "defaulted"
> for p0 and p2.
> +ovs-appctl time/warp 4100 100
> +check_liveness 3 0
> +
> +# Reconnect the patch link between p0 and p2 to allow traffic between the
> ports.
> +AT_CHECK([ovs-vsctl \
> +-- del-port null0 -- set int p2 options:peer=p0 \
> +-- del-port null1 -- set int p0 options:peer=p2])
> +
> +# Wait for 30 more seconds (LACP_SLOW_TIME_TX) for the lacp to renegotiate
> +ovs-appctl time/warp 30100 100
> +check_liveness 3 LIVE
> +
> +OVS_VSWITCHD_STOP
> +AT_CLEANUP
> +
> +# test lacp liveness propagation - OF1.5.
> +AT_SETUP([lacp - liveness propagation - OF1.5])
> +OVS_VSWITCHD_START
> +AT_CHECK([ovs-ofctl -O OpenFlow15 -P standard monitor br0 --detach
> --no-chdir --pidfile])
> +check_liveness () {
> + printf '\n\n--- check_liveness %d ---\n\n\n' $1
> + shift
> +
> + echo >>expout "OFPT_PORT_STATUS (OF1.5): MOD: 1(p0): addr:
> + config: 0
> + state: $1
> + speed: 0 Mbps now, 0 Mbps max"
> +
> + AT_CHECK(
> + [[sed '
> +s/ (xid=0x[0-9a-fA-F]*)//
> +s/ *duration.*//
> +s/addr:[0-9a-fA-F:]*/addr:/' < monitor.log|grep --no-group-separator -A3
> "MOD: 1(p0)"]],
> + [0], [expout])
> +}
> +: > expout
> +ovs-appctl -t ovs-ofctl ofctl/barrier
> +ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log
> +# Set miss_send_len to 128, enabling port_status messages to our service
> connection.
> +ovs-appctl -t ovs-ofctl ofctl/send 0609000c0123456700000080
> +
> +# 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.
> +AT_CHECK([ovs-vsctl 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
> +check_liveness 1 LIVE
> +
> +# Makes LACP state "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])
> +check_liveness 2 LIVE
> +
> +# Wait 4 more simulated seconds. The LACP state should become "defaulted"
> for p0 and p2.
> +ovs-appctl time/warp 4100 100
> +check_liveness 3 0
> +
> +# Reconnect the patch link between p0 and p2 to allow traffic between the
> ports.
> +AT_CHECK([ovs-vsctl \
> +-- del-port null0 -- set int p2 options:peer=p0 \
> +-- del-port null1 -- set int p0 options:peer=p2])
> +
> +# Wait for 30 more seconds (LACP_SLOW_TIME_TX) for the lacp to renegotiate
> +ovs-appctl time/warp 30100 100
> +check_liveness 3 LIVE
> +
> +OVS_VSWITCHD_STOP
> +AT_CLEANUP
> diff --git a/tests/ofproto.at b/tests/ofproto.at
> index 5c0d076..e191c49 100644
> --- a/tests/ofproto.at
> +++ b/tests/ofproto.at
> @@ -1228,15 +1228,15 @@ AT_CLEANUP
> AT_SETUP([ofproto - mod-port (OpenFlow 1.2)])
> OVS_VSWITCHD_START
> for command_config_state in \
> - 'up 0 0' \
> + 'up 0 LIVE' \
> 'down PORT_DOWN LINK_DOWN' \
> 'no-receive PORT_DOWN,NO_RECV LINK_DOWN' \
> 'no-forward PORT_DOWN,NO_RECV,NO_FWD LINK_DOWN' \
> 'no-packet-in PORT_DOWN,NO_RECV,NO_FWD,NO_PACKET_IN LINK_DOWN' \
> 'forward PORT_DOWN,NO_RECV,NO_PACKET_IN LINK_DOWN' \
> 'packet-in PORT_DOWN,NO_RECV LINK_DOWN' \
> - 'up NO_RECV 0' \
> - 'receive 0 0'
> + 'up NO_RECV LIVE' \
> + 'receive 0 LIVE'
> do
> set $command_config_state
> command=$[1] config=`echo $[2] | sed 's/,/ /g'` state=$[3]
> @@ -1259,15 +1259,15 @@ AT_CLEANUP
> AT_SETUP([ofproto - mod-port (OpenFlow 1.4)])
> OVS_VSWITCHD_START
> for command_config_state in \
> - 'up 0 0' \
> + 'up 0 LIVE' \
> 'down PORT_DOWN LINK_DOWN' \
> 'no-receive PORT_DOWN,NO_RECV LINK_DOWN' \
> 'no-forward PORT_DOWN,NO_RECV,NO_FWD LINK_DOWN' \
> 'no-packet-in PORT_DOWN,NO_RECV,NO_FWD,NO_PACKET_IN LINK_DOWN' \
> 'forward PORT_DOWN,NO_RECV,NO_PACKET_IN LINK_DOWN' \
> 'packet-in PORT_DOWN,NO_RECV LINK_DOWN' \
> - 'up NO_RECV 0' \
> - 'receive 0 0'
> + 'up NO_RECV LIVE' \
> + 'receive 0 LIVE'
> do
> set $command_config_state
> command=$[1] config=`echo $[2] | sed 's/,/ /g'` state=$[3]
> @@ -1291,15 +1291,15 @@ AT_CLEANUP
> AT_SETUP([ofproto - mod-port (OpenFlow 1.6)])
> OVS_VSWITCHD_START
> for command_config_state in \
> - 'up 0 0' \
> + 'up 0 LIVE' \
> 'down PORT_DOWN LINK_DOWN' \
> 'no-receive PORT_DOWN,NO_RECV LINK_DOWN' \
> 'no-forward PORT_DOWN,NO_RECV,NO_FWD LINK_DOWN' \
> 'no-packet-in PORT_DOWN,NO_RECV,NO_FWD,NO_PACKET_IN LINK_DOWN' \
> 'forward PORT_DOWN,NO_RECV,NO_PACKET_IN LINK_DOWN' \
> 'packet-in PORT_DOWN,NO_RECV LINK_DOWN' \
> - 'up NO_RECV 0' \
> - 'receive 0 0'
> + 'up NO_RECV LIVE' \
> + 'receive 0 LIVE'
> do
> set $command_config_state
> command=$[1] config=`echo $[2] | sed 's/,/ /g'` state=$[3]
> @@ -3520,7 +3520,7 @@
> udp,vlan_tci=0x0000,dl_src=00:26:b9:8c:b0:f9,dl_dst=00:25:83:df:b4:00,nw_src=172
> speed: 0 Mbps now, 0 Mbps max
> OFPT_PORT_STATUS (OF1.4): MOD: ${INDEX}(test): addr:aa:55:aa:55:00:0x
> config: 0
> - state: 0
> + state: LIVE
> speed: 0 Mbps now, 0 Mbps max"
> fi
>
> @@ -3529,7 +3529,7 @@ OFPT_PORT_STATUS (OF1.4): MOD: ${INDEX}(test):
> addr:aa:55:aa:55:00:0x
> if test X"$1" = X"OFPPR_DELETE"; then shift;
> echo >>expout "OFPT_PORT_STATUS (OF1.4): DEL: ${INDEX}(test):
> addr:aa:55:aa:55:00:0x
> config: 0
> - state: 0
> + state: LIVE
> speed: 0 Mbps now, 0 Mbps max"
> fi
>
> @@ -3702,7 +3702,7 @@ check_async () {
> speed: 0 Mbps now, 0 Mbps max
> OFPT_PORT_STATUS (OF1.5): MOD: 2(test): addr:aa:55:aa:55:00:0x
> config: 0
> - state: 0
> + state: LIVE
> speed: 0 Mbps now, 0 Mbps max"
> fi
>
> @@ -3711,7 +3711,7 @@ OFPT_PORT_STATUS (OF1.5): MOD: 2(test):
> addr:aa:55:aa:55:00:0x
> if test X"$1" = X"OFPPR_DELETE"; then shift;
> echo >>expout "OFPT_PORT_STATUS (OF1.5): DEL: ${INDEX}(test):
> addr:aa:55:aa:55:00:0x
> config: 0
> - state: 0
> + state: LIVE
> speed: 0 Mbps now, 0 Mbps max"
> fi
>
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev