On Sun, Mar 13, 2016 at 04:01:49PM +0000, Ben Hutchings wrote:
> The new do_gphystats() function is almost exactly the same as
> do_gstats(), which is silly.
> 
> * Add parameters to do_gstats() for the command number, string set
>   number and heading
> * Introduce do_gnicstats() as a wrapper for do_gstats() that does
>   what do_gstats() used to
> * Change do_gphystats() into a wrapper for do_gstats()
> 
> Signed-off-by: Ben Hutchings <b...@decadent.org.uk>

Reviewed-by: Andrew Lunn <and...@lunn.ch>

Thanks
        Andrew
> ---
>  ethtool.c | 71 
> +++++++++++----------------------------------------------------
>  1 file changed, 12 insertions(+), 59 deletions(-)
> 
> diff --git a/ethtool.c b/ethtool.c
> index 1c988f7d8a9d..4f69a825849a 100644
> --- a/ethtool.c
> +++ b/ethtool.c
> @@ -2937,7 +2937,8 @@ static int do_phys_id(struct cmd_context *ctx)
>       return err;
>  }
>  
> -static int do_gstats(struct cmd_context *ctx)
> +static int do_gstats(struct cmd_context *ctx, int cmd, int stringset,
> +                 const char *name)
>  {
>       struct ethtool_gstrings *strings;
>       struct ethtool_stats *stats;
> @@ -2947,7 +2948,7 @@ static int do_gstats(struct cmd_context *ctx)
>       if (ctx->argc != 0)
>               exit_bad_args();
>  
> -     strings = get_stringset(ctx, ETH_SS_STATS,
> +     strings = get_stringset(ctx, stringset,
>                               offsetof(struct ethtool_drvinfo, n_stats),
>                               0);
>       if (!strings) {
> @@ -2971,7 +2972,7 @@ static int do_gstats(struct cmd_context *ctx)
>               return 95;
>       }
>  
> -     stats->cmd = ETHTOOL_GSTATS;
> +     stats->cmd = cmd;
>       stats->n_stats = n_stats;
>       err = send_ioctl(ctx, stats);
>       if (err < 0) {
> @@ -2982,7 +2983,7 @@ static int do_gstats(struct cmd_context *ctx)
>       }
>  
>       /* todo - pretty-print the strings per-driver */
> -     fprintf(stdout, "NIC statistics:\n");
> +     fprintf(stdout, "%s statistics:\n", name);
>       for (i = 0; i < n_stats; i++) {
>               fprintf(stdout, "     %.*s: %llu\n",
>                       ETH_GSTRING_LEN,
> @@ -2995,62 +2996,14 @@ static int do_gstats(struct cmd_context *ctx)
>       return 0;
>  }
>  
> -static int do_gphystats(struct cmd_context *ctx)
> +static int do_gnicstats(struct cmd_context *ctx)
>  {
> -     struct ethtool_gstrings *strings;
> -     struct ethtool_stats *stats;
> -     unsigned int n_stats, sz_stats, i;
> -     int err;
> -
> -     if (ctx->argc != 0)
> -             exit_bad_args();
> -
> -     strings = get_stringset(ctx, ETH_SS_PHY_STATS,
> -                             offsetof(struct ethtool_drvinfo, n_stats),
> -                             0);
> -     if (!strings) {
> -             perror("Cannot get stats strings information");
> -             return 96;
> -     }
> -
> -     n_stats = strings->len;
> -     if (n_stats < 1) {
> -             fprintf(stderr, "no stats available\n");
> -             free(strings);
> -             return 94;
> -     }
> -
> -     sz_stats = n_stats * sizeof(u64);
> -
> -     stats = calloc(1, sz_stats + sizeof(struct ethtool_stats));
> -     if (!stats) {
> -             fprintf(stderr, "no memory available\n");
> -             free(strings);
> -             return 95;
> -     }
> -
> -     stats->cmd = ETHTOOL_GPHYSTATS;
> -     stats->n_stats = n_stats;
> -     err = send_ioctl(ctx, stats);
> -     if (err < 0) {
> -             perror("Cannot get stats information");
> -             free(strings);
> -             free(stats);
> -             return 97;
> -     }
> -
> -     /* todo - pretty-print the strings per-driver */
> -     fprintf(stdout, "PHY statistics:\n");
> -     for (i = 0; i < n_stats; i++) {
> -             fprintf(stdout, "     %.*s: %llu\n",
> -                     ETH_GSTRING_LEN,
> -                     &strings->data[i * ETH_GSTRING_LEN],
> -                     stats->data[i]);
> -     }
> -     free(strings);
> -     free(stats);
> +     return do_gstats(ctx, ETHTOOL_GSTATS, ETH_SS_STATS, "NIC");
> +}
>  
> -     return 0;
> +static int do_gphystats(struct cmd_context *ctx)
> +{
> +     return do_gstats(ctx, ETHTOOL_GPHYSTATS, ETH_SS_PHY_STATS, "PHY");
>  }
>  
>  static int do_srxntuple(struct cmd_context *ctx,
> @@ -4135,7 +4088,7 @@ static const struct option {
>         "               [ TIME-IN-SECONDS ]\n" },
>       { "-t|--test", 1, do_test, "Execute adapter self test",
>         "               [ online | offline | external_lb ]\n" },
> -     { "-S|--statistics", 1, do_gstats, "Show adapter statistics" },
> +     { "-S|--statistics", 1, do_gnicstats, "Show adapter statistics" },
>       { "--phy-statistics", 1, do_gphystats,
>         "Show phy statistics" },
>       { "-n|-u|--show-nfc|--show-ntuple", 1, do_grxclass,

Reply via email to