[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20230124142056.3778131-4-vladimir.oltean@nxp.com>
Date: Tue, 24 Jan 2023 16:20:54 +0200
From: Vladimir Oltean <vladimir.oltean@....com>
To: netdev@...r.kernel.org
Cc: Michal Kubecek <mkubecek@...e.cz>,
Jakub Kicinski <kuba@...nel.org>,
Vinicius Costa Gomes <vinicius.gomes@...el.com>
Subject: [PATCH v2 ethtool 3/5] netlink: pass the source of statistics for pause stats
Support adding and parsing the ETHTOOL_A_PAUSE_STATS_SRC attribute from
the request header.
$ ethtool -I --show-pause eno2 --src aggregate
Pause parameters for eno2:
Autonegotiate: on
RX: off
TX: off
RX negotiated: on
TX negotiated: on
Statistics:
tx_pause_frames: 0
rx_pause_frames: 0
$ ethtool -I --show-pause eno0 --src pmac
$ ethtool -I --show-pause eno0 --src emac
Signed-off-by: Vladimir Oltean <vladimir.oltean@....com>
---
v1->v2:
- ETHTOOL_STATS_SRC* macro names changed to ETHTOOL_MAC_STATS_SRC*
netlink/pause.c | 33 ++++++++++++++++++++++++++++-----
1 file changed, 28 insertions(+), 5 deletions(-)
diff --git a/netlink/pause.c b/netlink/pause.c
index 867d0da71f72..da444bdeb13f 100644
--- a/netlink/pause.c
+++ b/netlink/pause.c
@@ -216,6 +216,24 @@ err_close_dev:
return err_ret;
}
+static const struct lookup_entry_u32 stats_src_values[] = {
+ { .arg = "aggregate", .val = ETHTOOL_MAC_STATS_SRC_AGGREGATE },
+ { .arg = "emac", .val = ETHTOOL_MAC_STATS_SRC_EMAC },
+ { .arg = "pmac", .val = ETHTOOL_MAC_STATS_SRC_PMAC },
+ {}
+};
+
+static const struct param_parser gpause_params[] = {
+ {
+ .arg = "--src",
+ .type = ETHTOOL_A_PAUSE_STATS_SRC,
+ .handler = nl_parse_lookup_u32,
+ .handler_data = stats_src_values,
+ .min_argc = 1,
+ },
+ {}
+};
+
int nl_gpause(struct cmd_context *ctx)
{
struct nl_context *nlctx = ctx->nlctx;
@@ -225,11 +243,6 @@ int nl_gpause(struct cmd_context *ctx)
if (netlink_cmd_check(ctx, ETHTOOL_MSG_PAUSE_GET, true))
return -EOPNOTSUPP;
- if (ctx->argc > 0) {
- fprintf(stderr, "ethtool: unexpected parameter '%s'\n",
- *ctx->argp);
- return 1;
- }
flags = get_stats_flag(nlctx, ETHTOOL_MSG_PAUSE_GET,
ETHTOOL_A_PAUSE_HEADER);
@@ -238,6 +251,16 @@ int nl_gpause(struct cmd_context *ctx)
if (ret < 0)
return ret;
+ nlctx->cmd = "-a";
+ nlctx->argp = ctx->argp;
+ nlctx->argc = ctx->argc;
+ nlctx->devname = ctx->devname;
+ nlsk = nlctx->ethnl_socket;
+
+ ret = nl_parser(nlctx, gpause_params, NULL, PARSER_GROUP_NONE, NULL);
+ if (ret < 0)
+ return 1;
+
new_json_obj(ctx->json);
ret = nlsock_send_get_request(nlsk, pause_reply_cb);
delete_json_obj();
--
2.34.1
Powered by blists - more mailing lists