[ovs-dev] ovs-vsctl for sFlow config

Ben Pfaff blp at nicira.com
Wed May 12 23:45:18 UTC 2010


Thanks for testing it.  I was just waiting for some feedback before I
put it into "master", so I've pushed it out now.

On Wed, May 12, 2010 at 04:41:05PM -0700, Neil McKee wrote:
> So... the patch you sent works great (see below),  but I see it's not in the trunk yet.   Will it be checked in soon?
> 
> Neil
> 
> 
> On May 7, 2010, at 11:42 AM, Neil McKee wrote:
> >> 
> >> Ouch.  Thank you for the bug report and for offering to write up a
> >> patch.  But I think that I have a fix for it.  Would you mind testing
> >> the following?  Thank you very much.
> >> 
> > 
> > Yup,  that works.  Good.   You should probably also take out the pointer back to ofproto that is the first field in struct ofproto_sflow (in ofproto-sflow.c).  As far as I can tell it is never set or used,  and just encourages heinous acts of encapsulation-breaking by folks like me.
> > 
> > (Oh, and my compiler felt that "ntohs()" fields were really "int" and so "%zu" was inappropriate in 3 places in ofproto.c.  It wouldn't have said anything,  only it knows that you care about such things.)
> > 
> > Finally, just for completeness,  here is my script to remove and destroy all sflow configuration.  There must be a better way to list fields in a config table(?)
> > 
> > #!/bin/bash
> > for SFLOWUUID in `ovs-vsctl list sflow | awk -- '/^_uuid/ { print $3; }'` ; do
> >    for BRIDGE in `ovs-vsctl list br | awk -- '/^name/ { print $3; }'` ; do
> >        BRIDGE=`echo $BRIDGE | tr -d "\""`
> >        ovs-vsctl remove bridge $BRIDGE sflow $SFLOWUUID ;
> >    done
> >    ovs-vsctl destroy sflow $SFLOWUUID;
> > done
> > 
> > 
> > Regards,
> > Neil
> > 
> > 
> > 
> >> --8<--------------------------cut here-------------------------->8--
> >> 
> >>> From 5ddded1758d206c9e393344ebb92a7c3d7315ef1 Mon Sep 17 00:00:00 2001
> >> From: Ben Pfaff <blp at nicira.com>
> >> Date: Fri, 7 May 2010 09:29:02 -0700
> >> Subject: [PATCH] ofproto-sflow: Maintain table of ports even when clearing configuration.
> >> 
> >> When ofproto_sflow_set_options() fails, it calls ofproto_sflow_clear() to
> >> deconfigure the ofproto_sflow object.  But ofproto_sflow_clear() deletes
> >> all of the object's record of datapath ports.  That means that the next
> >> call to ofproto_sflow_set_options(), if it succeeds, will believe that the
> >> datapath has no ports.
> >> 
> >> This commit fixes the problem by only clearing ofproto_sflow's record of
> >> datapath ports when it is destroyed, not just when a configuration error
> >> occurs.
> >> 
> >> Reported-by: Neil McKee <neil.mckee at inmon.com>
> >> ---
> >> ofproto/ofproto-sflow.c |   14 ++++++--------
> >> 1 files changed, 6 insertions(+), 8 deletions(-)
> >> 
> >> diff --git a/ofproto/ofproto-sflow.c b/ofproto/ofproto-sflow.c
> >> index 22d99eb..60baf0e 100644
> >> --- a/ofproto/ofproto-sflow.c
> >> +++ b/ofproto/ofproto-sflow.c
> >> @@ -239,9 +239,6 @@ success:
> >> void
> >> ofproto_sflow_clear(struct ofproto_sflow *os)
> >> {
> >> -    struct ofproto_sflow_port *osp;
> >> -    unsigned int odp_port;
> >> -
> >>    if (os->sflow_agent) {
> >>        sfl_agent_release(os->sflow_agent);
> >>        os->sflow_agent = NULL;
> >> @@ -251,11 +248,6 @@ ofproto_sflow_clear(struct ofproto_sflow *os)
> >>    ofproto_sflow_options_destroy(os->options);
> >>    os->options = NULL;
> >> 
> >> -    PORT_ARRAY_FOR_EACH (osp, &os->ports, odp_port) {
> >> -        ofproto_sflow_del_port(os, odp_port);
> >> -    }
> >> -    port_array_clear(&os->ports);
> >> -
> >>    /* Turn off sampling to save CPU cycles. */
> >>    dpif_set_sflow_probability(os->dpif, 0);
> >> }
> >> @@ -282,7 +274,13 @@ void
> >> ofproto_sflow_destroy(struct ofproto_sflow *os)
> >> {
> >>    if (os) {
> >> +        struct ofproto_sflow_port *osp;
> >> +        unsigned int odp_port;
> >> +
> >>        ofproto_sflow_clear(os);
> >> +        PORT_ARRAY_FOR_EACH (osp, &os->ports, odp_port) {
> >> +            ofproto_sflow_del_port(os, odp_port);
> >> +        }
> >>        port_array_destroy(&os->ports);
> >>        free(os);
> >>    }
> >> -- 
> >> 1.6.6.1
> > 
> > 
> > _______________________________________________
> > dev mailing list
> > dev at openvswitch.org
> > http://openvswitch.org/mailman/listinfo/dev_openvswitch.org
> 




More information about the dev mailing list