* [PATCH ethtool-next] JSON output support for Netlink implementation of --show-ring option
@ 2022-12-27 17:52 Maxim Georgiev
0 siblings, 0 replies; only message in thread
From: Maxim Georgiev @ 2022-12-27 17:52 UTC (permalink / raw)
To: mkubecek; +Cc: netdev, kuba, glipus
Add --json support for Netlink implementation of --show-ring option
No changes for non-JSON output for this featire.
Example output without --json:
[ethtool-git]$ /ethtool -g enp9s0u2u1u2
Ring parameters for enp9s0u2u1u2:
Pre-set maximums:
RX: 4096
RX Mini: n/a
RX Jumbo: n/a
TX: n/a
Current hardware settings:
RX: 100
RX Mini: n/a
RX Jumbo: n/a
TX: n/a
RX Buf Len: n/a
CQE Size: n/a
TX Push: off
TCP data split: n/a
Same output with --json:
[ethtool-git]$ ./ethtool --json -g enp9s0u2u1u2
[ {
"ifname": "enp9s0u2u1u2",
"rx-max": 4096,
"rx": 100,
"tx-push": false
} ]
Suggested-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Maxim Georgiev <glipus@gmail.com>
---
ethtool.c | 1 +
netlink/rings.c | 35 +++++++++++++++++++++++++----------
2 files changed, 26 insertions(+), 10 deletions(-)
diff --git a/ethtool.c b/ethtool.c
index 60da8af..cf08a69 100644
--- a/ethtool.c
+++ b/ethtool.c
@@ -5751,6 +5751,7 @@ static const struct option args[] = {
},
{
.opts = "-g|--show-ring",
+ .json = true,
.func = do_gring,
.nlfunc = nl_gring,
.help = "Query RX/TX ring parameters"
diff --git a/netlink/rings.c b/netlink/rings.c
index 5996d5a..d51ef78 100644
--- a/netlink/rings.c
+++ b/netlink/rings.c
@@ -21,6 +21,9 @@ int rings_reply_cb(const struct nlmsghdr *nlhdr, void *data)
DECLARE_ATTR_TB_INFO(tb);
struct nl_context *nlctx = data;
unsigned char tcp_hds;
+ char *tcp_hds_fmt;
+ char *tcp_hds_key;
+ char tcp_hds_buf[256];
bool silent;
int err_ret;
int ret;
@@ -34,16 +37,19 @@ int rings_reply_cb(const struct nlmsghdr *nlhdr, void *data)
if (!dev_ok(nlctx))
return err_ret;
+ open_json_object(NULL);
+
if (silent)
- putchar('\n');
- printf("Ring parameters for %s:\n", nlctx->devname);
- printf("Pre-set maximums:\n");
+ show_cr();
+ print_string(PRINT_ANY, "ifname", "Ring parameters for %s:\n",
+ nlctx->devname);
+ print_string(PRINT_FP, NULL, "Pre-set maximums:\n", NULL);
show_u32("rx-max", "RX:\t\t", tb[ETHTOOL_A_RINGS_RX_MAX]);
show_u32("rx-mini-max", "RX Mini:\t", tb[ETHTOOL_A_RINGS_RX_MINI_MAX]);
show_u32("rx-jumbo-max", "RX Jumbo:\t",
tb[ETHTOOL_A_RINGS_RX_JUMBO_MAX]);
show_u32("tx-max", "TX:\t\t", tb[ETHTOOL_A_RINGS_TX_MAX]);
- printf("Current hardware settings:\n");
+ print_string(PRINT_FP, NULL, "Current hardware settings:\n", NULL);
show_u32("rx", "RX:\t\t", tb[ETHTOOL_A_RINGS_RX]);
show_u32("rx-mini", "RX Mini:\t", tb[ETHTOOL_A_RINGS_RX_MINI]);
show_u32("rx-jumbo", "RX Jumbo:\t", tb[ETHTOOL_A_RINGS_RX_JUMBO]);
@@ -52,24 +58,29 @@ int rings_reply_cb(const struct nlmsghdr *nlhdr, void *data)
show_u32("cqe-size", "CQE Size:\t", tb[ETHTOOL_A_RINGS_CQE_SIZE]);
show_bool("tx-push", "TX Push:\t%s\n", tb[ETHTOOL_A_RINGS_TX_PUSH]);
+ tcp_hds_fmt = "TCP data split:\t%s\n";
+ tcp_hds_key = "tcp-data-split";
tcp_hds = tb[ETHTOOL_A_RINGS_TCP_DATA_SPLIT] ?
mnl_attr_get_u8(tb[ETHTOOL_A_RINGS_TCP_DATA_SPLIT]) : 0;
- printf("TCP data split:\t");
switch (tcp_hds) {
case ETHTOOL_TCP_DATA_SPLIT_UNKNOWN:
- printf("n/a\n");
+ print_string(PRINT_FP, tcp_hds_key, tcp_hds_fmt, "n/a");
break;
case ETHTOOL_TCP_DATA_SPLIT_DISABLED:
- printf("off\n");
+ print_string(PRINT_ANY, tcp_hds_key, tcp_hds_fmt, "off");
break;
case ETHTOOL_TCP_DATA_SPLIT_ENABLED:
- printf("on\n");
+ print_string(PRINT_ANY, tcp_hds_key, tcp_hds_fmt, "on");
break;
default:
- printf("unknown(%d)\n", tcp_hds);
+ snprintf(tcp_hds_buf, sizeof(tcp_hds_buf),
+ "unknown(%d)\n", tcp_hds);
+ print_string(PRINT_ANY, tcp_hds_key, tcp_hds_fmt, tcp_hds_buf);
break;
}
+ close_json_object();
+
return MNL_CB_OK;
}
@@ -91,7 +102,11 @@ int nl_gring(struct cmd_context *ctx)
ETHTOOL_A_RINGS_HEADER, 0);
if (ret < 0)
return ret;
- return nlsock_send_get_request(nlsk, rings_reply_cb);
+
+ new_json_obj(ctx->json);
+ ret = nlsock_send_get_request(nlsk, rings_reply_cb);
+ delete_json_obj();
+ return ret;
}
/* RINGS_SET */
--
2.38.1
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2022-12-27 17:52 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-12-27 17:52 [PATCH ethtool-next] JSON output support for Netlink implementation of --show-ring option Maxim Georgiev
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.