Thanks a lot! ;D
On Tue, Aug 20, 2013 at 3:12 PM, Ethan Jackson <et...@nicira.com> wrote: > Merged thanks. > > Like an idiot I forgot to put my signed-off-by so I'll put it here. > > Signed-off-by: Ethan Jackson <et...@nicira.com> > > Ethan > > On Tue, Aug 20, 2013 at 11:45 AM, Alex Wang <al...@nicira.com> wrote: > > When user switches between using CFM and BFD, there will be a short > > down time before the new protocol goes up. This can unintentionally > > change the traffic pattern of the bundled ports. To prevent this, > > it is proposed that user can enable both CFM and BFD before transition, > > wait for the new protocol to go up, and then disable the old protocol. > > > > To make this scheme work, this commit modifies the port_run() in > > ofproto-dpif.c, so that when both CFM and BFD are used, if either shows > > correct status, the port is considered usable in the bundle. > > > > Signed-off-by: Alex Wang <al...@nicira.com> > > --- > > ofproto/ofproto-dpif.c | 12 +++++-- > > tests/ofproto-dpif.at | 81 > ++++++++++++++++++++++++++++++++++++++++++++++++ > > 2 files changed, 90 insertions(+), 3 deletions(-) > > > > diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c > > index 4690215..9fe91c1 100644 > > --- a/ofproto/ofproto-dpif.c > > +++ b/ofproto/ofproto-dpif.c > > @@ -2952,6 +2952,8 @@ port_run(struct ofport_dpif *ofport) > > long long int carrier_seq = > netdev_get_carrier_resets(ofport->up.netdev); > > bool carrier_changed = carrier_seq != ofport->carrier_seq; > > bool enable = netdev_get_carrier(ofport->up.netdev); > > + bool cfm_enable = false; > > + bool bfd_enable = false; > > > > ofport->carrier_seq = carrier_seq; > > > > @@ -2961,16 +2963,20 @@ port_run(struct ofport_dpif *ofport) > > int cfm_opup = cfm_get_opup(ofport->cfm); > > > > cfm_run(ofport->cfm); > > - enable = enable && !cfm_get_fault(ofport->cfm); > > + cfm_enable = !cfm_get_fault(ofport->cfm); > > > > if (cfm_opup >= 0) { > > - enable = enable && cfm_opup; > > + cfm_enable = cfm_enable && cfm_opup; > > } > > } > > > > if (ofport->bfd) { > > bfd_run(ofport->bfd); > > - enable = enable && bfd_forwarding(ofport->bfd); > > + bfd_enable = bfd_forwarding(ofport->bfd); > > + } > > + > > + if (ofport->bfd || ofport->cfm) { > > + enable = enable && (cfm_enable || bfd_enable); > > } > > > > if (ofport->bundle) { > > diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at > > index b093998..4772416 100644 > > --- a/tests/ofproto-dpif.at > > +++ b/tests/ofproto-dpif.at > > @@ -2689,3 +2689,84 @@ AT_CHECK([tail -1 stdout], [0], [Datapath > actions: 5 > > ]) > > OVS_VSWITCHD_STOP > > AT_CLEANUP > > + > > +# Tests the bundling with various bfd and cfm configurations. > > +AT_SETUP([ofproto - bundle with variable bfd/cfm config]) > > +OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- > \ > > + add-bond br0 br0bond p0 p2 bond-mode=active-backup > -- \ > > + add-bond br1 br1bond p1 p3 bond-mode=active-backup > -- \ > > + set Interface p1 type=patch options:peer=p0 > ofport_request=2 -- \ > > + set Interface p3 type=patch options:peer=p2 > ofport_request=4 -- \ > > + set Interface p0 type=patch options:peer=p1 > ofport_request=1 -- \ > > + set Interface p2 type=patch options:peer=p3 > ofport_request=3 -- \ > > + set Interface p0 bfd:enable=true bfd:min_tx=300 > bfd:min_rx=300 -- \ > > + set Interface p0 cfm_mpid=1 -- \ > > + set Interface p1 bfd:enable=true bfd:min_tx=500 > bfd:min_rx=500]) > > + > > +ovs-appctl time/stop > > +# advance the clock to stablize everything. > > +for i in `seq 0 49`; do ovs-appctl time/warp 100; done > > +# cfm/show should show 'recv' fault. > > +AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl > > + fault: recv > > +]) > > +# bfd/show should show 'up'. > > +AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], > [dnl > > + Local Session State: up > > + Remote Session State: up > > + Local Session State: up > > + Remote Session State: up > > +]) > > +# bond/show should show 'may-enable: true' for all slaves. > > +AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], > [dnl > > + may_enable: true > > + may_enable: true > > + may_enable: true > > + may_enable: true > > +]) > > + > > +# now disable the bfd on p1. > > +AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false]) > > +# advance the clock to stablize everything. > > +for i in `seq 0 49`; do ovs-appctl time/warp 100; done > > +# cfm/show should show 'recv' fault. > > +AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl > > + fault: recv > > +]) > > +# bfd/show should show 'down'. > > +AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], > [dnl > > + Local Session State: down > > + Remote Session State: down > > +]) > > +# bond/show should show 'may-enable: false' for p0. > > +AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], > [dnl > > + may_enable: false > > + may_enable: true > > + may_enable: true > > + may_enable: true > > +]) > > + > > +# now enable the bfd on p1 and disable bfd on p0. > > +AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true]) > > +AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false]) > > +# advance the clock to stablize everything. > > +for i in `seq 0 49`; do ovs-appctl time/warp 100; done > > +# cfm/show should show 'recv' fault. > > +AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl > > + fault: recv > > +]) > > +# bfd/show should show 'down'. > > +AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], > [dnl > > + Local Session State: down > > + Remote Session State: down > > +]) > > +# bond/show should show 'may-enable: false' for p0 and p1. > > +AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], > [dnl > > + may_enable: false > > + may_enable: true > > + may_enable: false > > + may_enable: true > > +]) > > + > > +OVS_VSWITCHD_STOP > > +AT_CLEANUP > > \ No newline at end of file > > -- > > 1.7.9.5 > > > > _______________________________________________ > > dev mailing list > > dev@openvswitch.org > > http://openvswitch.org/mailman/listinfo/dev >
_______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev