On Sat, Mar 04, 2023 at 11:23:50AM +0800, Wan Junjie wrote:
> Hi Simon,
> 
> Thanks for the review.

Hi Wan Junjie,

Thanks for responding.

> On Fri, Mar 3, 2023 at 11:06 PM Simon Horman <simon.hor...@corigine.com> 
> wrote:
> > On Wed, Mar 01, 2023 at 04:05:17PM +0800, Wan Junjie wrote:

...

> > > diff --git a/utilities/ovs-ofctl.8.in b/utilities/ovs-ofctl.8.in
> > > index 0a611b2ee..c44091906 100644
> > > --- a/utilities/ovs-ofctl.8.in
> > > +++ b/utilities/ovs-ofctl.8.in
> > > @@ -492,23 +492,35 @@ the \fBBridge\fR table).  For more information, see 
> > > ``Q: What versions
> > >  of OpenFlow does Open vSwitch support?'' in the Open vSwitch FAQ.
> > >  .
> > >  .IP "\fBadd\-meter \fIswitch meter\fR"
> > > +.IQ "\fBadd\-meter \fIswitch - < file\fR"
> > >  Add a meter entry to \fIswitch\fR's tables. The \fImeter\fR syntax is
> > >  described in section \fBMeter Syntax\fR, below.
> > >  .
> > > +.IP "\fBadd\-meters \fIswitch file\fR"
> > > +Add each meter entry to \fIswitch\fR's tables. Each meter specification
> > > +(each line in file) may start with \fBadd\fI, \fBmodify\fI or 
> > > \fBdelete\fI
> > > +keyword to specify whether a meter is to be added, modified, or deleted.
> > > +For backwards compatibility a meter specification without one of these 
> > > keywords
> > > +is treated as a meter add. The \fImeter\fR syntax is described in section
> > > +\fBMeter Syntax\fR, below.
> > > +.
> > >  .IP "\fBmod\-meter \fIswitch meter\fR"
> > > +.IQ "\fBmod\-meter \fIswitch - < file\fR"
> > >  Modify an existing meter.
> > >  .
> > >  .IP "\fBdel\-meters \fIswitch\fR [\fImeter\fR]"
> > > +.IQ "\fBdel\-meters \fIswitch\fR - < file"
> > >  Delete entries from \fIswitch\fR's meter table.  To delete only a
> > > -specific meter, specify its number as \fImeter\fR.  Otherwise, if
> > > +specific meter, specify a meter syntax \fBmeter=\fIid\fR.  Otherwise, if
> >
> > Are there backwards compatibility concerns here...
> >
> In fact, old docs are not clear on meter syntax, it means meter=id.

Ok, so the documentation is being fixed to match the current implementation?
If so I think that should be a separate patch.

> > >  \fImeter\fR is omitted, or if it is specified as \fBall\fR, then all
> > >  meters are deleted.
> > >  .
> > > -.IP "\fBdump\-meters \fIswitch\fR [\fImeter\fR]"
> > > +.IP "[\fB\-\-oneline\fR] \fBdump\-meters \fIswitch\fR [\fImeter\fR]"
> > >  Print entries from \fIswitch\fR's meter table.  To print only a
> > > -specific meter, specify its number as \fImeter\fR.  Otherwise, if
> > > +specific meter, specify a meter syntax \fBmeter=\fIid\fR.  Otherwise, if
> >
> > ... and here?
> >
> > >  \fImeter\fR is omitted, or if it is specified as \fBall\fR, then all
> > > -meters are printed.
> > > +meters are printed.  With \fB\-\-oneline\fR, band information will be
> > > +combined into one line.
> > >  .
> > >  .IP "\fBmeter\-stats \fIswitch\fR [\fImeter\fR]"
> > >  Print meter statistics.  \fImeter\fR can specify a single meter with
> > > @@ -1342,6 +1354,11 @@ includes flow duration, packet and byte counts, 
> > > and idle and hard age
> > >  in its output.  With \fB\-\-no\-stats\fR, it omits all of these, as
> > >  well as cookie values and table IDs if they are zero.
> > >  .
> > > +.IP "\fB\-\-oneline\fR"
> > > +The \fBdump\-meters\fR command prints each band in a separate line by
> > > +default. With \fB\-\-oneline\fR, all bands will be printed in a single
> > > +line. This is useful for dumping meters to a file and restoring them.
> > > +.
> > >  .IP "\fB\-\-read-only\fR"
> > >  Do not execute read/write commands.
> > >  .

...

> > > +static void
> > > +ofctl_dump_meters(struct ovs_cmdl_context *ctx)
> > > +{
> > > +    if (!oneline) {
> > > +        ofctl_dump_meters__(ctx);
> > > +    } else {
> > > +        struct ofputil_meter_mod mm;
> > > +        struct vconn *vconn;
> > > +        enum ofputil_protocol protocol;
> > > +        enum ofp_version version;
> > > +
> > > +        memset(&mm, 0, sizeof mm);
> > > +        const char *bridge = ctx->argv[1];
> > > +        const char *str = ctx->argc > 2 ? ctx->argv[2] : NULL;
> > > +
> > > +        vconn = prepare_dump_meters(bridge, str, &mm, &protocol);
> > > +        version = ofputil_protocol_to_ofp_version(protocol);
> > > +        struct ofpbuf *request = ofputil_encode_meter_request(version,
> > > +                        OFPUTIL_METER_CONFIG, mm.meter.meter_id);
> >
> > The logic in the two 'paragraphs' above seems to largely duplicate
> > ofctl_dump_meters__() => ofctl_meter_request__().
> >
> > Could those functions be parameterised over oneline?
> >
> ofctl_meter_request__() will handle stats, features requests. We can
> put 'oneline' to
> parameters, but that will make other functions a little confused about
> this parameter.
> A combined function will be a little more complicated since it will
> have to judge the
> request type, changes won't save us any code.
> 
> > > +
> > > +        struct ofputil_meter_config *mcs;
> > > +        size_t n_mtrs;
> > > +        run(vconn_dump_meters(vconn, request, &mcs, &n_mtrs),
> > > +            "dump meters");
> > > +
> > > +        struct ds s = DS_EMPTY_INITIALIZER;
> > > +        for (size_t i = 0; i < n_mtrs; i ++) {
> > > +            ds_clear(&s);
> > > +            ofputil_format_meter_config(&s, &mcs[i], 1);
> > > +            printf("%s\n", ds_cstr(&s));
> > > +        }
> > > +        ds_destroy(&s);
> > > +
> > > +        for (size_t i = 0; i < n_mtrs; i ++) {
> > > +            free(CONST_CAST(struct ofputil_meter_band *, mcs[i].bands));
> > > +        }
> > > +        free(mcs);
> >
> > The above, ofputil_format_meter_config(), and recv_meter_stats_reply()
> > seems to be a lot of code to customise what was otherwise a call to
> > dump_transaction().
> >
> > Perhaps it would be cleaner to parameterise ofp_print() over 'oneline'.
> >
> That was my first thought, then I realize that I would have to add
> this parameter to several
> functions recursively, like dump_transaction(), ofp_print(),
> ofp_to_string__(), ofp_to_string().
> I don't think these functions really need that parameter since only
> meter has compatibility issues.

I understand your point. But I think it would be better to teach the
core/common code how to handle this and avoid open coding the special case.

Perhaps a 'oneline' parameter isn't the best approach.
But really one bit of information is needed in order
for core/common code to implement a (slightly) different behaviour.

And it is conceivable that other dump functions will need
alternate behaviour in future.

> Regards,
> Wan Junjie

...
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to