Ping?

On Mon, Oct 01, 2018 at 02:59:10PM -0400, John W. Linville wrote:
> Is this patch still RFC?
> 
> On Wed, Sep 19, 2018 at 05:06:25PM +0100, Edward Cree wrote:
> > Instead of commas, just have them as separate argvs.
> > 
> > The parsing state machine might look heavyweight, but it makes it easy to 
> > add
> >  more parameters later and distinguish parameter names from encoding names.
> > 
> > Suggested-by: Michal Kubecek <mkube...@suse.cz>
> > Signed-off-by: Edward Cree <ec...@solarflare.com>
> > ---
> >  ethtool.8.in   |  6 +++---
> >  ethtool.c      | 63 
> > ++++++++++++++++------------------------------------------
> >  test-cmdline.c | 10 +++++-----
> >  3 files changed, 25 insertions(+), 54 deletions(-)
> > 
> > diff --git a/ethtool.8.in b/ethtool.8.in
> > index 414eaa1..7ea2cc0 100644
> > --- a/ethtool.8.in
> > +++ b/ethtool.8.in
> > @@ -390,7 +390,7 @@ ethtool \- query or control network driver and hardware 
> > settings
> >  .B ethtool \-\-set\-fec
> >  .I devname
> >  .B encoding
> > -.BR auto | off | rs | baser [ , ...]
> > +.BR auto | off | rs | baser \ [...]
> >  .
> >  .\" Adjust lines (i.e. full justification) and hyphenate.
> >  .ad
> > @@ -1120,11 +1120,11 @@ current FEC mode, the driver or firmware must take 
> > the link down
> >  administratively and report the problem in the system logs for users to 
> > correct.
> >  .RS 4
> >  .TP
> > -.BR encoding\ auto | off | rs | baser [ , ...]
> > +.BR encoding\ auto | off | rs | baser \ [...]
> >  
> >  Sets the FEC encoding for the device.  Combinations of options are 
> > specified as
> >  e.g.
> > -.B auto,rs
> > +.B encoding auto rs
> >  ; the semantics of such combinations vary between drivers.
> >  .TS
> >  nokeep;
> > diff --git a/ethtool.c b/ethtool.c
> > index 9997930..2f7e96b 100644
> > --- a/ethtool.c
> > +++ b/ethtool.c
> > @@ -4979,39 +4979,6 @@ static int fecmode_str_to_type(const char *str)
> >     return 0;
> >  }
> >  
> > -/* Takes a comma-separated list of FEC modes, returns the bitwise OR of 
> > their
> > - * corresponding ETHTOOL_FEC_* constants.
> > - * Accepts repetitions (e.g. 'auto,auto') and trailing comma (e.g. 'off,').
> > - */
> > -static int parse_fecmode(const char *str)
> > -{
> > -   int fecmode = 0;
> > -   char buf[6];
> > -
> > -   if (!str)
> > -           return 0;
> > -   while (*str) {
> > -           size_t next;
> > -           int mode;
> > -
> > -           next = strcspn(str, ",");
> > -           if (next >= 6) /* Bad mode, longest name is 5 chars */
> > -                   return 0;
> > -           /* Copy into temp buffer and nul-terminate */
> > -           memcpy(buf, str, next);
> > -           buf[next] = 0;
> > -           mode = fecmode_str_to_type(buf);
> > -           if (!mode) /* Bad mode encountered */
> > -                   return 0;
> > -           fecmode |= mode;
> > -           str += next;
> > -           /* Skip over ',' (but not nul) */
> > -           if (*str)
> > -                   str++;
> > -   }
> > -   return fecmode;
> > -}
> > -
> >  static int do_gfec(struct cmd_context *ctx)
> >  {
> >     struct ethtool_fecparam feccmd = { 0 };
> > @@ -5041,22 +5008,26 @@ static int do_gfec(struct cmd_context *ctx)
> >  
> >  static int do_sfec(struct cmd_context *ctx)
> >  {
> > -   char *fecmode_str = NULL;
> > +   enum { ARG_NONE, ARG_ENCODING } state = ARG_NONE;
> >     struct ethtool_fecparam feccmd;
> > -   struct cmdline_info cmdline_fec[] = {
> > -           { "encoding", CMDL_STR,  &fecmode_str,  &feccmd.fec},
> > -   };
> > -   int changed;
> > -   int fecmode;
> > -   int rv;
> > +   int fecmode = 0, newmode;
> > +   int rv, i;
> >  
> > -   parse_generic_cmdline(ctx, &changed, cmdline_fec,
> > -                         ARRAY_SIZE(cmdline_fec));
> > -
> > -   if (!fecmode_str)
> > +   for (i = 0; i < ctx->argc; i++) {
> > +           if (!strcmp(ctx->argp[i], "encoding")) {
> > +                   state = ARG_ENCODING;
> > +                   continue;
> > +           }
> > +           if (state == ARG_ENCODING) {
> > +                   newmode = fecmode_str_to_type(ctx->argp[i]);
> > +                   if (!newmode)
> > +                           exit_bad_args();
> > +                   fecmode |= newmode;
> > +                   continue;
> > +           }
> >             exit_bad_args();
> > +   }
> >  
> > -   fecmode = parse_fecmode(fecmode_str);
> >     if (!fecmode)
> >             exit_bad_args();
> >  
> > @@ -5265,7 +5236,7 @@ static const struct option {
> >       "             [ all ]\n"},
> >     { "--show-fec", 1, do_gfec, "Show FEC settings"},
> >     { "--set-fec", 1, do_sfec, "Set FEC settings",
> > -     "             [ encoding auto|off|rs|baser ]\n"},
> > +     "             [ encoding auto|off|rs|baser [...]]\n"},
> >     { "-h|--help", 0, show_usage, "Show this help" },
> >     { "--version", 0, do_version, "Show version number" },
> >     {}
> > diff --git a/test-cmdline.c b/test-cmdline.c
> > index 9c51cca..84630a5 100644
> > --- a/test-cmdline.c
> > +++ b/test-cmdline.c
> > @@ -268,12 +268,12 @@ static struct test_case {
> >     { 1, "--set-eee devname advertise foo" },
> >     { 1, "--set-fec devname" },
> >     { 0, "--set-fec devname encoding auto" },
> > -   { 0, "--set-fec devname encoding off," },
> > -   { 0, "--set-fec devname encoding baser,rs" },
> > -   { 0, "--set-fec devname encoding auto,auto," },
> > +   { 0, "--set-fec devname encoding off" },
> > +   { 0, "--set-fec devname encoding baser rs" },
> > +   { 0, "--set-fec devname encoding auto auto" },
> >     { 1, "--set-fec devname encoding foo" },
> > -   { 1, "--set-fec devname encoding auto,foo" },
> > -   { 1, "--set-fec devname encoding auto,," },
> > +   { 1, "--set-fec devname encoding auto foo" },
> > +   { 1, "--set-fec devname encoding none" },
> >     { 1, "--set-fec devname auto" },
> >     /* can't test --set-priv-flags yet */
> >     { 0, "-h" },
> > 
> 
> -- 
> John W. Linville              Someday the world will need a hero, and you
> linvi...@tuxdriver.com                        might be all we have.  Be ready.
> 

-- 
John W. Linville                Someday the world will need a hero, and you
linvi...@tuxdriver.com                  might be all we have.  Be ready.

Reply via email to