aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShay Agroskin <shayagr@amazon.com>2023-04-23 17:49:48 +0300
committerMichal Kubecek <mkubecek@suse.cz>2023-05-08 00:35:13 +0200
commiteebf01f05f03fcb7892e4fdf7c1a5ac91939234c (patch)
tree7f55f9b9186c566ec725861e4239a58224a1dcf7
parent2782ea8fce218a27664c4be8a824d54fc76a7502 (diff)
downloadethtool-eebf01f05f03fcb7892e4fdf7c1a5ac91939234c.tar.gz
ethtool: Add support for configuring tx-push-buf-len
This attribute, which is part of ethtool's ring param configuration allows the user to specify the maximum number of the packet's payload that can be written directly to the device. Example usage: # ethtool -G [interface] tx-push-buf-len [number of bytes] Signed-off-by: Shay Agroskin <shayagr@amazon.com>
-rw-r--r--ethtool.8.in5
-rw-r--r--ethtool.c1
-rw-r--r--netlink/desc-ethtool.c2
-rw-r--r--netlink/rings.c38
4 files changed, 32 insertions, 14 deletions
diff --git a/ethtool.8.in b/ethtool.8.in
index f36e2fa..6cd90d9 100644
--- a/ethtool.8.in
+++ b/ethtool.8.in
@@ -205,6 +205,7 @@ ethtool \- query or control network driver and hardware settings
.BN cqe\-size
.BN tx\-push
.BN rx\-push
+.BN tx\-push\-buf\-len
.HP
.B ethtool \-i|\-\-driver
.I devname
@@ -636,6 +637,10 @@ Specifies whether TX push should be enabled.
.TP
.BI rx\-push \ on|off
Specifies whether RX push should be enabled.
+.TP
+.BI tx\-push\-buf\-len \ N
+Specifies the maximum number of bytes of a transmitted packet a driver can push
+directly to the underlying device
.RE
.TP
.B \-i \-\-driver
diff --git a/ethtool.c b/ethtool.c
index 98690df..1c09600 100644
--- a/ethtool.c
+++ b/ethtool.c
@@ -5754,6 +5754,7 @@ static const struct option args[] = {
" [ cqe-size N ]\n"
" [ tx-push on|off ]\n"
" [ rx-push on|off ]\n"
+ " [ tx-push-buf-len N]\n"
},
{
.opts = "-k|--show-features|--show-offload",
diff --git a/netlink/desc-ethtool.c b/netlink/desc-ethtool.c
index 7b77f88..661de26 100644
--- a/netlink/desc-ethtool.c
+++ b/netlink/desc-ethtool.c
@@ -159,6 +159,8 @@ static const struct pretty_nla_desc __rings_desc[] = {
NLATTR_DESC_U32(ETHTOOL_A_RINGS_CQE_SIZE),
NLATTR_DESC_BOOL(ETHTOOL_A_RINGS_TX_PUSH),
NLATTR_DESC_BOOL(ETHTOOL_A_RINGS_RX_PUSH),
+ NLATTR_DESC_U32(ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN),
+ NLATTR_DESC_U32(ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN_MAX),
};
static const struct pretty_nla_desc __channels_desc[] = {
diff --git a/netlink/rings.c b/netlink/rings.c
index 57bfb36..51d28c2 100644
--- a/netlink/rings.c
+++ b/netlink/rings.c
@@ -44,22 +44,26 @@ int rings_reply_cb(const struct nlmsghdr *nlhdr, void *data)
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",
+ show_u32("rx-max", "RX:\t\t\t", tb[ETHTOOL_A_RINGS_RX_MAX]);
+ show_u32("rx-mini-max", "RX Mini:\t\t", tb[ETHTOOL_A_RINGS_RX_MINI_MAX]);
+ show_u32("rx-jumbo-max", "RX Jumbo:\t\t",
tb[ETHTOOL_A_RINGS_RX_JUMBO_MAX]);
- show_u32("tx-max", "TX:\t\t", tb[ETHTOOL_A_RINGS_TX_MAX]);
+ show_u32("tx-max", "TX:\t\t\t", tb[ETHTOOL_A_RINGS_TX_MAX]);
+ show_u32("tx-push-buff-max-len", "TX push buff len:\t",
+ tb[ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN_MAX]);
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]);
- show_u32("tx", "TX:\t\t", tb[ETHTOOL_A_RINGS_TX]);
- show_u32("rx-buf-len", "RX Buf Len:\t", tb[ETHTOOL_A_RINGS_RX_BUF_LEN]);
- 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]);
- show_bool("rx-push", "RX Push:\t%s\n", tb[ETHTOOL_A_RINGS_RX_PUSH]);
-
- tcp_hds_fmt = "TCP data split:\t%s\n";
+ show_u32("rx", "RX:\t\t\t", tb[ETHTOOL_A_RINGS_RX]);
+ show_u32("rx-mini", "RX Mini:\t\t", tb[ETHTOOL_A_RINGS_RX_MINI]);
+ show_u32("rx-jumbo", "RX Jumbo:\t\t", tb[ETHTOOL_A_RINGS_RX_JUMBO]);
+ show_u32("tx", "TX:\t\t\t", tb[ETHTOOL_A_RINGS_TX]);
+ show_u32("rx-buf-len", "RX Buf Len:\t\t", tb[ETHTOOL_A_RINGS_RX_BUF_LEN]);
+ show_u32("cqe-size", "CQE Size:\t\t", tb[ETHTOOL_A_RINGS_CQE_SIZE]);
+ show_bool("tx-push", "TX Push:\t\t%s\n", tb[ETHTOOL_A_RINGS_TX_PUSH]);
+ show_bool("rx-push", "RX Push:\t\t%s\n", tb[ETHTOOL_A_RINGS_RX_PUSH]);
+ show_u32("tx-push-buf-len", "TX push buff len:\t",
+ tb[ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN]);
+
+ tcp_hds_fmt = "TCP data split:\t\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;
@@ -138,6 +142,12 @@ static const struct param_parser sring_params[] = {
.min_argc = 1,
},
{
+ .arg = "tx-push-buf-len",
+ .type = ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN,
+ .handler = nl_parse_direct_u32,
+ .min_argc = 1,
+ },
+ {
.arg = "rx-buf-len",
.type = ETHTOOL_A_RINGS_RX_BUF_LEN,
.handler = nl_parse_direct_u32,