From 79bbc3417bba3abeaacfd51c249b2f39e309ea96 Mon Sep 17 00:00:00 2001 From: Liwei Ge Date: Wed, 13 Apr 2022 11:51:29 +0800 Subject: [PATCH] update to ethtool-5.13-1.el8.src.rpm Signed-off-by: Liwei Ge --- ...condition-for-displaying-actual-chan.patch | 46 -- ...d-return-an-error-when-features-were.patch | 61 --- ...of-signed-unsigned-comparison-warnin.patch | 147 ------ ...ence-of-eeprom-length-argument-prope.patch | 108 ---- ...revent-argc-underflow-in-do_perqueue.patch | 33 -- 0006-ioctl-make-argc-counters-unsigned.patch | 113 ---- ...-signed-unsigned-comparison-warnings.patch | 144 ----- ...d-unsigned-comparison-warnings-in-re.patch | 164 ------ ...simplify-link_mode_info-initializers.patch | 273 ---------- ...dline_info-arrays-to-named-initializ.patch | 468 ----------------- 0011-build-add-Wextra-to-default-CFLAGS.patch | 31 -- ...l-only-memset-non-NULL-link-settings.patch | 42 -- ...sed-function-parameters-of-non-netli.patch | 44 -- 0014-update-UAPI-header-copies.patch | 490 ------------------ 0015-update-link-mode-tables.patch | 158 ------ ...link-return-ENOMEM-when-calloc-fails.patch | 50 -- 0017-netlink-fix-memory-leak.patch | 35 -- 0018-fix-memory-leaks-in-do_sfeatures.patch | 60 --- ...copy-paste-error-in-rtm_link_summary.patch | 29 -- ...inux-update-kernel-UAPI-header-files.patch | 117 ----- ...-expand-linkstate_reply_cb-to-suppor.patch | 187 ------- ...netlink-prepare-for-more-per-op-info.patch | 126 ----- ...se-after-free-in-netlink_run_handler.patch | 53 -- ...leaked-instances-of-struct-nl_socket.patch | 64 --- ...end-messages-and-process-replies-in-.patch | 301 ----------- ...compatibility-between-netlink-and-io.patch | 191 ------- 0027-update-UAPI-header-copies.patch | 135 ----- 0028-update-UAPI-header-copies.patch | 83 --- 0029-pause-add-json-support.patch | 183 ------- 0030-separate-FLAGS-out-in-h.patch | 50 -- ...add-support-for-stats-in-subcommands.patch | 83 --- ...cy-dumping-to-check-if-stats-flag-is.patch | 232 --------- ...e-add-support-for-dumping-statistics.patch | 147 ------ ...u32-enumerated-types-in-pretty-print.patch | 83 --- ...64-bit-attribute-types-in-pretty-pri.patch | 97 ---- ...criptions-for-genetlink-policy-dumps.patch | 99 ---- ...message-descriptions-for-pause-stats.patch | 41 -- 0038-update-UAPI-header-copies.patch | 152 ------ ...-Add-netlink-support-for-lanes-param.patch | 63 --- ...gs-Expose-the-number-of-lanes-in-use.patch | 41 -- ...-completion-Add-completion-for-lanes.patch | 42 -- ...man-page-for-setting-lanes-parameter.patch | 41 -- download | 1 + ethtool-5.8.tar.xz | Bin 299416 -> 0 bytes ethtool.spec | 91 +--- 45 files changed, 6 insertions(+), 5193 deletions(-) delete mode 100644 0001-netlink-Fix-the-condition-for-displaying-actual-chan.patch delete mode 100644 0002-netlink-Print-and-return-an-error-when-features-were.patch delete mode 100644 0003-netlink-get-rid-of-signed-unsigned-comparison-warnin.patch delete mode 100644 0004-ioctl-check-presence-of-eeprom-length-argument-prope.patch delete mode 100644 0005-ioctl-prevent-argc-underflow-in-do_perqueue.patch delete mode 100644 0006-ioctl-make-argc-counters-unsigned.patch delete mode 100644 0007-ioctl-get-rid-of-signed-unsigned-comparison-warnings.patch delete mode 100644 0008-get-rid-of-signed-unsigned-comparison-warnings-in-re.patch delete mode 100644 0009-settings-simplify-link_mode_info-initializers.patch delete mode 100644 0010-ioctl-convert-cmdline_info-arrays-to-named-initializ.patch delete mode 100644 0011-build-add-Wextra-to-default-CFLAGS.patch delete mode 100644 0012-ioctl-only-memset-non-NULL-link-settings.patch delete mode 100644 0013-netlink-mark-unused-function-parameters-of-non-netli.patch delete mode 100644 0014-update-UAPI-header-copies.patch delete mode 100644 0015-update-link-mode-tables.patch delete mode 100644 0016-netlink-return-ENOMEM-when-calloc-fails.patch delete mode 100644 0017-netlink-fix-memory-leak.patch delete mode 100644 0018-fix-memory-leaks-in-do_sfeatures.patch delete mode 100644 0019-netlink-fix-copy-paste-error-in-rtm_link_summary.patch delete mode 100644 0020-uapi-linux-update-kernel-UAPI-header-files.patch delete mode 100644 0021-netlink-settings-expand-linkstate_reply_cb-to-suppor.patch delete mode 100644 0022-netlink-prepare-for-more-per-op-info.patch delete mode 100644 0023-netlink-fix-use-after-free-in-netlink_run_handler.patch delete mode 100644 0024-netlink-fix-leaked-instances-of-struct-nl_socket.patch delete mode 100644 0025-netlink-do-not-send-messages-and-process-replies-in-.patch delete mode 100644 0026-ethtool-Improve-compatibility-between-netlink-and-io.patch delete mode 100644 0027-update-UAPI-header-copies.patch delete mode 100644 0028-update-UAPI-header-copies.patch delete mode 100644 0029-pause-add-json-support.patch delete mode 100644 0030-separate-FLAGS-out-in-h.patch delete mode 100644 0031-add-support-for-stats-in-subcommands.patch delete mode 100644 0032-netlink-use-policy-dumping-to-check-if-stats-flag-is.patch delete mode 100644 0033-pause-add-support-for-dumping-statistics.patch delete mode 100644 0034-netlink-support-u32-enumerated-types-in-pretty-print.patch delete mode 100644 0035-netlink-support-64-bit-attribute-types-in-pretty-pri.patch delete mode 100644 0036-netlink-add-descriptions-for-genetlink-policy-dumps.patch delete mode 100644 0037-netlink-add-message-descriptions-for-pause-stats.patch delete mode 100644 0038-update-UAPI-header-copies.patch delete mode 100644 0039-netlink-settings-Add-netlink-support-for-lanes-param.patch delete mode 100644 0040-netlink-settings-Expose-the-number-of-lanes-in-use.patch delete mode 100644 0041-shell-completion-Add-completion-for-lanes.patch delete mode 100644 0042-man-Add-man-page-for-setting-lanes-parameter.patch create mode 100644 download delete mode 100644 ethtool-5.8.tar.xz diff --git a/0001-netlink-Fix-the-condition-for-displaying-actual-chan.patch b/0001-netlink-Fix-the-condition-for-displaying-actual-chan.patch deleted file mode 100644 index f0fc6af..0000000 --- a/0001-netlink-Fix-the-condition-for-displaying-actual-chan.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 89b49b2a88392c510c6a171940701ba4cf580116 Mon Sep 17 00:00:00 2001 -From: Maxim Mikityanskiy -Date: Fri, 14 Aug 2020 16:17:44 +0300 -Subject: [PATCH 01/17] netlink: Fix the condition for displaying actual - changes - -This comment in the code: - - /* result is not exactly as requested, show differences */ - -implies that the "Actual changes" output should be displayed only if the -result is not as requested, which matches the legacy ethtool behavior. -However, in fact, ethtool-netlink displays "actual changes" even when -the changes are expected (e.g., one bit was requested, and it was -changed as requested). - -This commit fixes the condition above to make the behavior match the -description in the comment and the behavior of the legacy ethtool. The -new condition excludes the req_mask bits from active_mask to avoid -reacting on bit changes that we asked for. The new condition now -matches the ifs in the loop above that print "[requested on/off]" and -"[not requested]". - -Signed-off-by: Maxim Mikityanskiy -Signed-off-by: Michal Kubecek -(cherry picked from commit 83d2b635de121a16a27663cc4e3045243e56063b) ---- - netlink/features.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/netlink/features.c b/netlink/features.c -index 8b5b8588ca23..133529da2b9f 100644 ---- a/netlink/features.c -+++ b/netlink/features.c -@@ -413,7 +413,7 @@ static void show_feature_changes(struct nl_context *nlctx, - - diff = false; - for (i = 0; i < words; i++) -- if (wanted_mask[i] || active_mask[i]) -+ if (wanted_mask[i] || (active_mask[i] & ~sfctx->req_mask[i])) - diff = true; - if (!diff) - return; --- -2.26.2 - diff --git a/0002-netlink-Print-and-return-an-error-when-features-were.patch b/0002-netlink-Print-and-return-an-error-when-features-were.patch deleted file mode 100644 index 8e9dd10..0000000 --- a/0002-netlink-Print-and-return-an-error-when-features-were.patch +++ /dev/null @@ -1,61 +0,0 @@ -From ad9e296622adf2cd775c93a94c4ba2756d07e0d5 Mon Sep 17 00:00:00 2001 -From: Maxim Mikityanskiy -Date: Tue, 25 Aug 2020 11:11:38 +0300 -Subject: [PATCH 02/17] netlink: Print and return an error when features - weren't changed - -The legacy ethtool prints an error message and returns 1 if no features -were changed as requested. Port this behavior to ethtool-netlink. -req_mask is compared to wanted_mask to detect if any feature was -changed. If these masks are equal, it means that the kernel hasn't -changed anything, and all bits got to wanted. - -Signed-off-by: Maxim Mikityanskiy -Signed-off-by: Michal Kubecek -(cherry picked from commit e06cf83352d5161399da49eae7296126cd5e4ea1) ---- - netlink/features.c | 11 ++++++++++- - 1 file changed, 10 insertions(+), 1 deletion(-) - -diff --git a/netlink/features.c b/netlink/features.c -index 133529da2b9f..762259405acc 100644 ---- a/netlink/features.c -+++ b/netlink/features.c -@@ -243,6 +243,7 @@ int nl_gfeatures(struct cmd_context *ctx) - /* FEATURES_SET */ - - struct sfeatures_context { -+ bool nothing_changed; - uint32_t req_mask[0]; - }; - -@@ -411,10 +412,14 @@ static void show_feature_changes(struct nl_context *nlctx, - if (!wanted_val || !wanted_mask || !active_val || !active_mask) - goto err; - -+ sfctx->nothing_changed = true; - diff = false; -- for (i = 0; i < words; i++) -+ for (i = 0; i < words; i++) { -+ if (wanted_mask[i] != sfctx->req_mask[i]) -+ sfctx->nothing_changed = false; - if (wanted_mask[i] || (active_mask[i] & ~sfctx->req_mask[i])) - diff = true; -+ } - if (!diff) - return; - -@@ -520,6 +525,10 @@ int nl_sfeatures(struct cmd_context *ctx) - if (ret < 0) - return 92; - ret = nlsock_process_reply(nlsk, sfeatures_reply_cb, nlctx); -+ if (sfctx->nothing_changed) { -+ fprintf(stderr, "Could not change any device features\n"); -+ return nlctx->exit_code ?: 1; -+ } - if (ret == 0) - return 0; - return nlctx->exit_code ?: 92; --- -2.26.2 - diff --git a/0003-netlink-get-rid-of-signed-unsigned-comparison-warnin.patch b/0003-netlink-get-rid-of-signed-unsigned-comparison-warnin.patch deleted file mode 100644 index cae78ed..0000000 --- a/0003-netlink-get-rid-of-signed-unsigned-comparison-warnin.patch +++ /dev/null @@ -1,147 +0,0 @@ -From aef2a21a2221c03e4e00fd06ea74002317fbfd5e Mon Sep 17 00:00:00 2001 -From: Michal Kubecek -Date: Sun, 23 Aug 2020 21:40:18 +0200 -Subject: [PATCH 03/17] netlink: get rid of signed/unsigned comparison warnings - -Use unsigned types where appropriate to get rid of compiler warnings about -comparison between signed and unsigned integer values in netlink code. - -v2: avoid casts in dump_features() - -Signed-off-by: Michal Kubecek -Reviewed-by: Andrew Lunn -(cherry picked from commit b038eef080221b1f9df944c3d2307bad172cf318) ---- - netlink/features.c | 6 +++--- - netlink/netlink.c | 4 ++-- - netlink/netlink.h | 2 +- - netlink/nlsock.c | 2 +- - netlink/parser.c | 2 +- - netlink/settings.c | 6 +++--- - 6 files changed, 11 insertions(+), 11 deletions(-) - -diff --git a/netlink/features.c b/netlink/features.c -index 762259405acc..3f1240437350 100644 ---- a/netlink/features.c -+++ b/netlink/features.c -@@ -109,9 +109,9 @@ static bool flag_pattern_match(const char *name, const char *pattern) - int dump_features(const struct nlattr *const *tb, - const struct stringset *feature_names) - { -+ unsigned int *feature_flags = NULL; - struct feature_results results; - unsigned int i, j; -- int *feature_flags = NULL; - int ret; - - ret = prepare_feature_results(tb, &results); -@@ -126,7 +126,7 @@ int dump_features(const struct nlattr *const *tb, - /* map netdev features to legacy flags */ - for (i = 0; i < results.count; i++) { - const char *name = get_string(feature_names, i); -- feature_flags[i] = -1; -+ feature_flags[i] = UINT_MAX; - - if (!name || !*name) - continue; -@@ -177,7 +177,7 @@ int dump_features(const struct nlattr *const *tb, - for (i = 0; i < results.count; i++) { - const char *name = get_string(feature_names, i); - -- if (!name || !*name || feature_flags[i] >= 0) -+ if (!name || !*name || feature_flags[i] != UINT_MAX) - continue; - dump_feature(&results, NULL, NULL, i, name, ""); - } -diff --git a/netlink/netlink.c b/netlink/netlink.c -index 76b6e825b1d0..e42d57076a4b 100644 ---- a/netlink/netlink.c -+++ b/netlink/netlink.c -@@ -33,9 +33,9 @@ int nomsg_reply_cb(const struct nlmsghdr *nlhdr, void *data __maybe_unused) - int attr_cb(const struct nlattr *attr, void *data) - { - const struct attr_tb_info *tb_info = data; -- int type = mnl_attr_get_type(attr); -+ uint16_t type = mnl_attr_get_type(attr); - -- if (type >= 0 && type <= tb_info->max_type) -+ if (type <= tb_info->max_type) - tb_info->tb[type] = attr; - - return MNL_CB_OK; -diff --git a/netlink/netlink.h b/netlink/netlink.h -index a4984c82ae76..dd4a02bcc916 100644 ---- a/netlink/netlink.h -+++ b/netlink/netlink.h -@@ -45,7 +45,7 @@ struct nl_context { - const char *cmd; - const char *param; - char **argp; -- int argc; -+ unsigned int argc; - bool ioctl_fallback; - bool wildcard_unsupported; - }; -diff --git a/netlink/nlsock.c b/netlink/nlsock.c -index c3f09b6ee9ab..ef31d8c33b29 100644 ---- a/netlink/nlsock.c -+++ b/netlink/nlsock.c -@@ -168,7 +168,7 @@ static void debug_msg(struct nl_socket *nlsk, const void *msg, unsigned int len, - * - * Return: error code extracted from the message - */ --static int nlsock_process_ack(struct nlmsghdr *nlhdr, ssize_t len, -+static int nlsock_process_ack(struct nlmsghdr *nlhdr, unsigned long len, - unsigned int suppress_nlerr, bool pretty) - { - const struct nlattr *tb[NLMSGERR_ATTR_MAX + 1] = {}; -diff --git a/netlink/parser.c b/netlink/parser.c -index 395bd5743af9..c5a368a65a7a 100644 ---- a/netlink/parser.c -+++ b/netlink/parser.c -@@ -604,7 +604,7 @@ static int parse_numeric_bitset(struct nl_context *nlctx, uint16_t type, - parser_err_invalid_value(nlctx, arg); - return -EINVAL; - } -- len1 = maskptr ? (maskptr - arg) : strlen(arg); -+ len1 = maskptr ? (unsigned int)(maskptr - arg) : strlen(arg); - nwords = DIV_ROUND_UP(len1, 8); - nbits = 0; - -diff --git a/netlink/settings.c b/netlink/settings.c -index 17ef000ed812..2b9c6e7a782c 100644 ---- a/netlink/settings.c -+++ b/netlink/settings.c -@@ -276,10 +276,10 @@ int dump_link_modes(struct nl_context *nlctx, const struct nlattr *bitset, - const struct nlattr *bitset_tb[ETHTOOL_A_BITSET_MAX + 1] = {}; - DECLARE_ATTR_TB_INFO(bitset_tb); - const unsigned int before_len = strlen(before); -+ unsigned int prev = UINT_MAX - 1; - const struct nlattr *bits; - const struct nlattr *bit; - bool first = true; -- int prev = -2; - bool nomask; - int ret; - -@@ -333,7 +333,7 @@ int dump_link_modes(struct nl_context *nlctx, const struct nlattr *bitset, - if (first) - first = false; - /* ugly hack to preserve old output format */ -- if (class == LM_CLASS_REAL && (prev == idx - 1) && -+ if (class == LM_CLASS_REAL && (idx == prev + 1) && - prev < link_modes_count && - link_modes[prev].class == LM_CLASS_REAL && - link_modes[prev].duplex == DUPLEX_HALF) -@@ -375,7 +375,7 @@ int dump_link_modes(struct nl_context *nlctx, const struct nlattr *bitset, - first = false; - } else { - /* ugly hack to preserve old output format */ -- if ((class == LM_CLASS_REAL) && (prev == idx - 1) && -+ if ((class == LM_CLASS_REAL) && (idx == prev + 1) && - (prev < link_modes_count) && - (link_modes[prev].class == LM_CLASS_REAL) && - (link_modes[prev].duplex == DUPLEX_HALF)) --- -2.26.2 - diff --git a/0004-ioctl-check-presence-of-eeprom-length-argument-prope.patch b/0004-ioctl-check-presence-of-eeprom-length-argument-prope.patch deleted file mode 100644 index f83e89c..0000000 --- a/0004-ioctl-check-presence-of-eeprom-length-argument-prope.patch +++ /dev/null @@ -1,108 +0,0 @@ -From ce297bec23dd0054600678b4297f6e73ecdc540d Mon Sep 17 00:00:00 2001 -From: Michal Kubecek -Date: Sun, 23 Aug 2020 21:40:21 +0200 -Subject: [PATCH 04/17] ioctl: check presence of eeprom length argument - properly - -In do_geeprom(), do_seprom() and do_getmodule(), check if user used -"length" command line argument is done by setting the value to -1 before -parsing and checking if it changed. This is quite ugly and also causes -compiler warnings as the variable is u32. - -Use proper "seen" flag to let parser tell us if the argument was used. - -Signed-off-by: Michal Kubecek -Reviewed-by: Andrew Lunn -(cherry picked from commit 923c3f51c4442a5f25afb529bd49ec2ef4f185a3) ---- - ethtool.c | 24 +++++++++++++++--------- - 1 file changed, 15 insertions(+), 9 deletions(-) - -diff --git a/ethtool.c b/ethtool.c -index c4ad186cd390..4fa7a2c1716f 100644 ---- a/ethtool.c -+++ b/ethtool.c -@@ -3184,10 +3184,12 @@ static int do_geeprom(struct cmd_context *ctx) - int geeprom_changed = 0; - int geeprom_dump_raw = 0; - u32 geeprom_offset = 0; -- u32 geeprom_length = -1; -+ u32 geeprom_length = 0; -+ int geeprom_length_seen = 0; - struct cmdline_info cmdline_geeprom[] = { - { "offset", CMDL_U32, &geeprom_offset, NULL }, -- { "length", CMDL_U32, &geeprom_length, NULL }, -+ { "length", CMDL_U32, &geeprom_length, NULL, -+ 0, &geeprom_length_seen }, - { "raw", CMDL_BOOL, &geeprom_dump_raw, NULL }, - }; - int err; -@@ -3204,7 +3206,7 @@ static int do_geeprom(struct cmd_context *ctx) - return 74; - } - -- if (geeprom_length == -1) -+ if (!geeprom_length_seen) - geeprom_length = drvinfo.eedump_len; - - if (drvinfo.eedump_len < geeprom_offset + geeprom_length) -@@ -3234,14 +3236,16 @@ static int do_seeprom(struct cmd_context *ctx) - { - int seeprom_changed = 0; - u32 seeprom_magic = 0; -- u32 seeprom_length = -1; -+ u32 seeprom_length = 0; - u32 seeprom_offset = 0; - u8 seeprom_value = 0; -+ int seeprom_length_seen = 0; - int seeprom_value_seen = 0; - struct cmdline_info cmdline_seeprom[] = { - { "magic", CMDL_U32, &seeprom_magic, NULL }, - { "offset", CMDL_U32, &seeprom_offset, NULL }, -- { "length", CMDL_U32, &seeprom_length, NULL }, -+ { "length", CMDL_U32, &seeprom_length, NULL, -+ 0, &seeprom_length_seen }, - { "value", CMDL_U8, &seeprom_value, NULL, - 0, &seeprom_value_seen }, - }; -@@ -3262,7 +3266,7 @@ static int do_seeprom(struct cmd_context *ctx) - if (seeprom_value_seen) - seeprom_length = 1; - -- if (seeprom_length == -1) -+ if (!seeprom_length_seen) - seeprom_length = drvinfo.eedump_len; - - if (drvinfo.eedump_len < seeprom_offset + seeprom_length) { -@@ -4538,15 +4542,17 @@ static int do_getmodule(struct cmd_context *ctx) - struct ethtool_modinfo modinfo; - struct ethtool_eeprom *eeprom; - u32 geeprom_offset = 0; -- u32 geeprom_length = -1; -+ u32 geeprom_length = 0; - int geeprom_changed = 0; - int geeprom_dump_raw = 0; - int geeprom_dump_hex = 0; -+ int geeprom_length_seen = 0; - int err; - - struct cmdline_info cmdline_geeprom[] = { - { "offset", CMDL_U32, &geeprom_offset, NULL }, -- { "length", CMDL_U32, &geeprom_length, NULL }, -+ { "length", CMDL_U32, &geeprom_length, NULL, -+ 0, &geeprom_length_seen }, - { "raw", CMDL_BOOL, &geeprom_dump_raw, NULL }, - { "hex", CMDL_BOOL, &geeprom_dump_hex, NULL }, - }; -@@ -4566,7 +4572,7 @@ static int do_getmodule(struct cmd_context *ctx) - return 1; - } - -- if (geeprom_length == -1) -+ if (!geeprom_length_seen) - geeprom_length = modinfo.eeprom_len; - - if (modinfo.eeprom_len < geeprom_offset + geeprom_length) --- -2.26.2 - diff --git a/0005-ioctl-prevent-argc-underflow-in-do_perqueue.patch b/0005-ioctl-prevent-argc-underflow-in-do_perqueue.patch deleted file mode 100644 index 422f028..0000000 --- a/0005-ioctl-prevent-argc-underflow-in-do_perqueue.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 04315b072d623ba9200612a4c5f5330f1eb28a27 Mon Sep 17 00:00:00 2001 -From: Michal Kubecek -Date: Sun, 23 Aug 2020 21:40:24 +0200 -Subject: [PATCH 05/17] ioctl: prevent argc underflow in do_perqueue() - -When first command line argument after "-Q" is "queue_mask", we parse -the queue mask and following subcommand without checking if these -arguments do actually exist. Add check if we have at least two arguments -left after "queue_mask" in the corresponding branch. - -Fixes: 9ecd54248b1a ("ethtool: introduce new ioctl for per-queue settings") -Signed-off-by: Michal Kubecek -(cherry picked from commit 39c354e591b66cc29edaab89f90ed03a513ad88f) ---- - ethtool.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/ethtool.c b/ethtool.c -index 4fa7a2c1716f..6c12452be7b4 100644 ---- a/ethtool.c -+++ b/ethtool.c -@@ -5880,6 +5880,8 @@ static int do_perqueue(struct cmd_context *ctx) - "The sub commands will be applied to all %d queues\n", - n_queues); - } else { -+ if (ctx->argc <= 2) -+ exit_bad_args(); - ctx->argc--; - ctx->argp++; - if (parse_hex_u32_bitmap(*ctx->argp, MAX_NUM_QUEUE, --- -2.26.2 - diff --git a/0006-ioctl-make-argc-counters-unsigned.patch b/0006-ioctl-make-argc-counters-unsigned.patch deleted file mode 100644 index 229f05e..0000000 --- a/0006-ioctl-make-argc-counters-unsigned.patch +++ /dev/null @@ -1,113 +0,0 @@ -From 7e3888aeb31d2920c3c282b135563a06c3bcf6e1 Mon Sep 17 00:00:00 2001 -From: Michal Kubecek -Date: Sun, 23 Aug 2020 21:40:27 +0200 -Subject: [PATCH 06/17] ioctl: make argc counters unsigned - -Use unsigned int for cmd_context::argc and local variables used for -command line argument count. These counters may never get negative and are -often compared to unsigned expressions. - -Signed-off-by: Michal Kubecek -Reviewed-by: Andrew Lunn -(cherry picked from commit 519f95bd59034e672cfbac70ca8d7badc4f26cc7) ---- - ethtool.c | 24 ++++++++++++------------ - internal.h | 2 +- - 2 files changed, 13 insertions(+), 13 deletions(-) - -diff --git a/ethtool.c b/ethtool.c -index 6c12452be7b4..7c7e98957c80 100644 ---- a/ethtool.c -+++ b/ethtool.c -@@ -223,9 +223,9 @@ static void parse_generic_cmdline(struct cmd_context *ctx, - struct cmdline_info *info, - unsigned int n_info) - { -- int argc = ctx->argc; -+ unsigned int argc = ctx->argc; - char **argp = ctx->argp; -- int i, idx; -+ unsigned int i, idx; - int found; - - for (i = 0; i < argc; i++) { -@@ -2724,9 +2724,9 @@ static int do_sset(struct cmd_context *ctx) - u32 msglvl_wanted = 0; - u32 msglvl_mask = 0; - struct cmdline_info cmdline_msglvl[n_flags_msglvl]; -- int argc = ctx->argc; -+ unsigned int argc = ctx->argc; - char **argp = ctx->argp; -- int i; -+ unsigned int i; - int err = 0; - - for (i = 0; i < n_flags_msglvl; i++) -@@ -3671,7 +3671,7 @@ static int do_grxfh(struct cmd_context *ctx) - struct ethtool_rxfh *rss; - u32 rss_context = 0; - u32 i, indir_bytes; -- int arg_num = 0; -+ unsigned int arg_num = 0; - char *hkey; - int err; - -@@ -4832,9 +4832,8 @@ static int do_gtunable(struct cmd_context *ctx) - { - struct ethtool_tunable_info *tinfo = tunables_info; - char **argp = ctx->argp; -- int argc = ctx->argc; -- int i; -- int j; -+ unsigned int argc = ctx->argc; -+ unsigned int i, j; - - if (argc < 1) - exit_bad_args(); -@@ -4876,7 +4875,7 @@ static int do_gtunable(struct cmd_context *ctx) - - static int do_get_phy_tunable(struct cmd_context *ctx) - { -- int argc = ctx->argc; -+ unsigned int argc = ctx->argc; - char **argp = ctx->argp; - - if (argc < 1) -@@ -4980,9 +4979,9 @@ static int do_reset(struct cmd_context *ctx) - { - struct ethtool_value resetinfo; - __u32 data; -- int argc = ctx->argc; -+ unsigned int argc = ctx->argc; - char **argp = ctx->argp; -- int i; -+ unsigned int i; - - if (argc == 0) - exit_bad_args(); -@@ -5270,7 +5269,8 @@ static int do_sfec(struct cmd_context *ctx) - enum { ARG_NONE, ARG_ENCODING } state = ARG_NONE; - struct ethtool_fecparam feccmd; - int fecmode = 0, newmode; -- int rv, i; -+ unsigned int i; -+ int rv; - - for (i = 0; i < ctx->argc; i++) { - if (!strcmp(ctx->argp[i], "encoding")) { -diff --git a/internal.h b/internal.h -index 8ae1efab5b5c..d096a28abfa2 100644 ---- a/internal.h -+++ b/internal.h -@@ -221,7 +221,7 @@ struct cmd_context { - const char *devname; /* net device name */ - int fd; /* socket suitable for ethtool ioctl */ - struct ifreq ifr; /* ifreq suitable for ethtool ioctl */ -- int argc; /* number of arguments to the sub-command */ -+ unsigned int argc; /* number of arguments to the sub-command */ - char **argp; /* arguments to the sub-command */ - unsigned long debug; /* debugging mask */ - bool json; /* Output JSON, if supported */ --- -2.26.2 - diff --git a/0007-ioctl-get-rid-of-signed-unsigned-comparison-warnings.patch b/0007-ioctl-get-rid-of-signed-unsigned-comparison-warnings.patch deleted file mode 100644 index 2d94966..0000000 --- a/0007-ioctl-get-rid-of-signed-unsigned-comparison-warnings.patch +++ /dev/null @@ -1,144 +0,0 @@ -From 4be3e49856ef6c4f09f2230bbcf40cb7492313ca Mon Sep 17 00:00:00 2001 -From: Michal Kubecek -Date: Sun, 23 Aug 2020 21:40:30 +0200 -Subject: [PATCH 07/17] ioctl: get rid of signed/unsigned comparison warnings - -Comparison between signed and unsigned values is fragile and causes -compiler warnings with recent compilers and stricter CFLAGS. Prevent such -comparisons either by properly declaring variables (mostly loop iterators) -as unsigned or by explicitly casting one side of the comparison. - -v2: rework argc related changes and split them into a separate patch - -Signed-off-by: Michal Kubecek -(cherry picked from commit f2f0fca943ffa25458865e4187690c9c7d6a89bc) ---- - ethtool.c | 31 +++++++++++++++++-------------- - 1 file changed, 17 insertions(+), 14 deletions(-) - -diff --git a/ethtool.c b/ethtool.c -index 7c7e98957c80..3c30824016d5 100644 ---- a/ethtool.c -+++ b/ethtool.c -@@ -641,8 +641,9 @@ static void dump_link_caps(const char *prefix, const char *an_prefix, - "200000baseCR4/Full" }, - }; - int indent; -- int did1, new_line_pend, i; -+ int did1, new_line_pend; - int fecreported = 0; -+ unsigned int i; - - /* Indent just like the separate functions used to */ - indent = strlen(prefix) + 14; -@@ -1071,7 +1072,7 @@ void dump_hex(FILE *file, const u8 *data, int len, int offset) - static int dump_regs(int gregs_dump_raw, int gregs_dump_hex, - struct ethtool_drvinfo *info, struct ethtool_regs *regs) - { -- int i; -+ unsigned int i; - - if (gregs_dump_raw) { - fwrite(regs->data, regs->len, 1, stdout); -@@ -1128,7 +1129,8 @@ static int dump_eeprom(int geeprom_dump_raw, - static int dump_test(struct ethtool_test *test, - struct ethtool_gstrings *strings) - { -- int i, rc; -+ unsigned int i; -+ int rc; - - rc = test->flags & ETH_TEST_FL_FAILED; - fprintf(stdout, "The test result is %s\n", rc ? "FAIL" : "PASS"); -@@ -1359,7 +1361,7 @@ static void dump_one_feature(const char *indent, const char *name, - : ""); - } - --static int linux_version_code(void) -+static unsigned int linux_version_code(void) - { - struct utsname utsname; - unsigned version, patchlevel, sublevel = 0; -@@ -1375,10 +1377,10 @@ static void dump_features(const struct feature_defs *defs, - const struct feature_state *state, - const struct feature_state *ref_state) - { -- int kernel_ver = linux_version_code(); -- u32 value; -+ unsigned int kernel_ver = linux_version_code(); -+ unsigned int i, j; - int indent; -- int i, j; -+ u32 value; - - for (i = 0; i < OFF_FLAG_DEF_SIZE; i++) { - /* Don't show features whose state is unknown on this -@@ -1411,7 +1413,7 @@ static void dump_features(const struct feature_defs *defs, - - /* Show matching features */ - for (j = 0; j < defs->n_features; j++) { -- if (defs->def[j].off_flag_index != i) -+ if (defs->def[j].off_flag_index != (int)i) - continue; - if (defs->off_flag_matched[i] != 1) - /* Show all matching feature states */ -@@ -1668,8 +1670,8 @@ static struct feature_defs *get_feature_defs(struct cmd_context *ctx) - { - struct ethtool_gstrings *names; - struct feature_defs *defs; -+ unsigned int i, j; - u32 n_features; -- int i, j; - - names = get_stringset(ctx, ETH_SS_FEATURES, 0, 1); - if (names) { -@@ -2236,8 +2238,8 @@ static int do_sfeatures(struct cmd_context *ctx) - struct cmdline_info *cmdline_features; - struct feature_state *old_state, *new_state; - struct ethtool_value eval; -+ unsigned int i, j; - int err, rc; -- int i, j; - - defs = get_feature_defs(ctx); - if (!defs) { -@@ -2317,7 +2319,7 @@ static int do_sfeatures(struct cmd_context *ctx) - continue; - - for (j = 0; j < defs->n_features; j++) { -- if (defs->def[j].off_flag_index != i || -+ if (defs->def[j].off_flag_index != (int)i || - !FEATURE_BIT_IS_SET( - old_state->features.features, - j, available) || -@@ -3869,7 +3871,7 @@ static int do_srxfh(struct cmd_context *ctx) - char *hfunc_name = NULL; - char *hkey = NULL; - int err = 0; -- int i; -+ unsigned int i; - u32 arg_num = 0, indir_bytes = 0; - u32 req_hfunc = 0; - u32 entry_size = sizeof(rss_head.rss_config[0]); -@@ -4135,7 +4137,8 @@ static int do_flash(struct cmd_context *ctx) - - static int do_permaddr(struct cmd_context *ctx) - { -- int i, err; -+ unsigned int i; -+ int err; - struct ethtool_perm_addr *epaddr; - - epaddr = malloc(sizeof(struct ethtool_perm_addr) + MAX_ADDR_LEN); -@@ -4750,7 +4753,7 @@ static int do_stunable(struct cmd_context *ctx) - struct cmdline_info cmdline_tunable[TUNABLES_INFO_SIZE]; - struct ethtool_tunable_info *tinfo = tunables_info; - int changed = 0; -- int i; -+ unsigned int i; - - for (i = 0; i < TUNABLES_INFO_SIZE; i++) { - cmdline_tunable[i].name = tunable_strings[tinfo[i].t_id]; --- -2.26.2 - diff --git a/0008-get-rid-of-signed-unsigned-comparison-warnings-in-re.patch b/0008-get-rid-of-signed-unsigned-comparison-warnings-in-re.patch deleted file mode 100644 index 218240f..0000000 --- a/0008-get-rid-of-signed-unsigned-comparison-warnings-in-re.patch +++ /dev/null @@ -1,164 +0,0 @@ -From a76ac50c3049b7fa77f71828c4e0a3569eea626d Mon Sep 17 00:00:00 2001 -From: Michal Kubecek -Date: Sun, 23 Aug 2020 21:40:33 +0200 -Subject: [PATCH 08/17] get rid of signed/unsigned comparison warnings in - register dump parsers - -All of these are avoided by declaring a variable (mostly loop iterators) -holding only unsigned values as unsigned. - -Signed-off-by: Michal Kubecek -Reviewed-by: Andrew Lunn -(cherry picked from commit 16c87d0a03757958d857d7054bd296bfc74c6d39) ---- - dsa.c | 2 +- - fec.c | 2 +- - ibm_emac.c | 2 +- - marvell.c | 2 +- - natsemi.c | 2 +- - rxclass.c | 8 +++++--- - sfpdiag.c | 2 +- - tg3.c | 4 ++-- - 8 files changed, 13 insertions(+), 11 deletions(-) - -diff --git a/dsa.c b/dsa.c -index 65502a899194..33c1d39d6605 100644 ---- a/dsa.c -+++ b/dsa.c -@@ -824,8 +824,8 @@ static int dsa_mv88e6xxx_dump_regs(struct ethtool_regs *regs) - { - const struct dsa_mv88e6xxx_switch *sw = NULL; - const u16 *data = (u16 *)regs->data; -+ unsigned int i; - u16 id; -- int i; - - /* Marvell chips have 32 per-port 16-bit registers */ - if (regs->len < 32 * sizeof(u16)) -diff --git a/fec.c b/fec.c -index 9cb4f8b1d4e1..d2373d6124c0 100644 ---- a/fec.c -+++ b/fec.c -@@ -198,7 +198,7 @@ int fec_dump_regs(struct ethtool_drvinfo *info __maybe_unused, - struct ethtool_regs *regs) - { - const u32 *data = (u32 *)regs->data; -- int offset; -+ unsigned int offset; - u32 val; - - for (offset = 0; offset < regs->len; offset += 4) { -diff --git a/ibm_emac.c b/ibm_emac.c -index ea01d56f609c..9f7cae605482 100644 ---- a/ibm_emac.c -+++ b/ibm_emac.c -@@ -238,7 +238,7 @@ static void *print_mal_regs(void *buf) - { - struct emac_ethtool_regs_subhdr *hdr = buf; - struct mal_regs *p = (struct mal_regs *)(hdr + 1); -- int i; -+ unsigned int i; - - printf("MAL%d Registers\n", hdr->index); - printf("-----------------\n"); -diff --git a/marvell.c b/marvell.c -index 8afb150327a3..d3d570e4d4ad 100644 ---- a/marvell.c -+++ b/marvell.c -@@ -130,7 +130,7 @@ static void dump_fifo(const char *name, const void *p) - static void dump_gmac_fifo(const char *name, const void *p) - { - const u32 *r = p; -- int i; -+ unsigned int i; - static const char *regs[] = { - "End Address", - "Almost Full Thresh", -diff --git a/natsemi.c b/natsemi.c -index 0af465959cbc..4d9fc092b623 100644 ---- a/natsemi.c -+++ b/natsemi.c -@@ -967,8 +967,8 @@ int - natsemi_dump_eeprom(struct ethtool_drvinfo *info __maybe_unused, - struct ethtool_eeprom *ee) - { -- int i; - u16 *eebuf = (u16 *)ee->data; -+ unsigned int i; - - if (ee->magic != NATSEMI_MAGIC) { - fprintf(stderr, "Magic number 0x%08x does not match 0x%08x\n", -diff --git a/rxclass.c b/rxclass.c -index 79972651e706..6cf81fdafc85 100644 ---- a/rxclass.c -+++ b/rxclass.c -@@ -348,8 +348,9 @@ int rxclass_rule_getall(struct cmd_context *ctx) - { - struct ethtool_rxnfc *nfccmd; - __u32 *rule_locs; -- int err, i; -+ unsigned int i; - __u32 count; -+ int err; - - /* determine rule count */ - err = rxclass_get_dev_info(ctx, &count, NULL); -@@ -481,8 +482,9 @@ static int rmgr_find_empty_slot(struct rmgr_ctrl *rmgr, - static int rmgr_init(struct cmd_context *ctx, struct rmgr_ctrl *rmgr) - { - struct ethtool_rxnfc *nfccmd; -- int err, i; - __u32 *rule_locs; -+ unsigned int i; -+ int err; - - /* clear rule manager settings */ - memset(rmgr, 0, sizeof(*rmgr)); -@@ -941,7 +943,7 @@ static int rxclass_get_long(char *str, long long *val, int size) - - static int rxclass_get_ulong(char *str, unsigned long long *val, int size) - { -- long long max = ~0ULL >> (64 - size); -+ unsigned long long max = ~0ULL >> (64 - size); - char *endp; - - errno = 0; -diff --git a/sfpdiag.c b/sfpdiag.c -index fa41651422ea..1fa8b7ba8fec 100644 ---- a/sfpdiag.c -+++ b/sfpdiag.c -@@ -190,8 +190,8 @@ static float befloattoh(const __u32 *source) - - static void sff8472_calibration(const __u8 *id, struct sff_diags *sd) - { -- int i; - __u16 rx_reading; -+ unsigned int i; - - /* Calibration should occur for all values (threshold and current) */ - for (i = 0; i < ARRAY_SIZE(sd->bias_cur); ++i) { -diff --git a/tg3.c b/tg3.c -index ac73b33ae4e3..ebdef2d60e6b 100644 ---- a/tg3.c -+++ b/tg3.c -@@ -7,7 +7,7 @@ - int tg3_dump_eeprom(struct ethtool_drvinfo *info __maybe_unused, - struct ethtool_eeprom *ee) - { -- int i; -+ unsigned int i; - - if (ee->magic != TG3_MAGIC) { - fprintf(stderr, "Magic number 0x%08x does not match 0x%08x\n", -@@ -26,7 +26,7 @@ int tg3_dump_eeprom(struct ethtool_drvinfo *info __maybe_unused, - int tg3_dump_regs(struct ethtool_drvinfo *info __maybe_unused, - struct ethtool_regs *regs) - { -- int i; -+ unsigned int i; - u32 reg; - - fprintf(stdout, "Offset\tValue\n"); --- -2.26.2 - diff --git a/0009-settings-simplify-link_mode_info-initializers.patch b/0009-settings-simplify-link_mode_info-initializers.patch deleted file mode 100644 index 1e3d9b2..0000000 --- a/0009-settings-simplify-link_mode_info-initializers.patch +++ /dev/null @@ -1,273 +0,0 @@ -From f99224132fba926ac0fb736748586ecdd51bb9d4 Mon Sep 17 00:00:00 2001 -From: Michal Kubecek -Date: Sun, 23 Aug 2020 21:40:36 +0200 -Subject: [PATCH 09/17] settings: simplify link_mode_info[] initializers - -Use macro helpers to make link_mode_info[] initializers easier to read and -less prone to mistakes. As a bonus, this gets rid of "missing field -initializer" warnings in netlink/settings.c - -This commit should have no effect on resulting code (checked with gcc-11 -and -O2). - -Signed-off-by: Michal Kubecek -Reviewed-by: Andrew Lunn -(cherry picked from commit 5319fae14254df9cb38cb2db0a4e39973c3fc1d8) ---- - netlink/settings.c | 236 +++++++++++++++++---------------------------- - 1 file changed, 86 insertions(+), 150 deletions(-) - -diff --git a/netlink/settings.c b/netlink/settings.c -index 2b9c6e7a782c..d1da995b434c 100644 ---- a/netlink/settings.c -+++ b/netlink/settings.c -@@ -64,160 +64,96 @@ static const char *const names_transceiver[] = { - * there is little chance of getting them separated any time soon so let's - * sort them out ourselves - */ -+#define __REAL(_speed) \ -+ { .class = LM_CLASS_REAL, .speed = _speed, .duplex = DUPLEX_FULL } -+#define __HALF_DUPLEX(_speed) \ -+ { .class = LM_CLASS_REAL, .speed = _speed, .duplex = DUPLEX_HALF } -+#define __SPECIAL(_class) \ -+ { .class = LM_CLASS_ ## _class } -+ - static const struct link_mode_info link_modes[] = { -- [ETHTOOL_LINK_MODE_10baseT_Half_BIT] = -- { LM_CLASS_REAL, 10, DUPLEX_HALF }, -- [ETHTOOL_LINK_MODE_10baseT_Full_BIT] = -- { LM_CLASS_REAL, 10, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_100baseT_Half_BIT] = -- { LM_CLASS_REAL, 100, DUPLEX_HALF }, -- [ETHTOOL_LINK_MODE_100baseT_Full_BIT] = -- { LM_CLASS_REAL, 100, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_1000baseT_Half_BIT] = -- { LM_CLASS_REAL, 1000, DUPLEX_HALF }, -- [ETHTOOL_LINK_MODE_1000baseT_Full_BIT] = -- { LM_CLASS_REAL, 1000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_Autoneg_BIT] = -- { LM_CLASS_AUTONEG }, -- [ETHTOOL_LINK_MODE_TP_BIT] = -- { LM_CLASS_PORT }, -- [ETHTOOL_LINK_MODE_AUI_BIT] = -- { LM_CLASS_PORT }, -- [ETHTOOL_LINK_MODE_MII_BIT] = -- { LM_CLASS_PORT }, -- [ETHTOOL_LINK_MODE_FIBRE_BIT] = -- { LM_CLASS_PORT }, -- [ETHTOOL_LINK_MODE_BNC_BIT] = -- { LM_CLASS_PORT }, -- [ETHTOOL_LINK_MODE_10000baseT_Full_BIT] = -- { LM_CLASS_REAL, 10000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_Pause_BIT] = -- { LM_CLASS_PAUSE }, -- [ETHTOOL_LINK_MODE_Asym_Pause_BIT] = -- { LM_CLASS_PAUSE }, -- [ETHTOOL_LINK_MODE_2500baseX_Full_BIT] = -- { LM_CLASS_REAL, 2500, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_Backplane_BIT] = -- { LM_CLASS_PORT }, -- [ETHTOOL_LINK_MODE_1000baseKX_Full_BIT] = -- { LM_CLASS_REAL, 1000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT] = -- { LM_CLASS_REAL, 10000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_10000baseKR_Full_BIT] = -- { LM_CLASS_REAL, 10000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_10000baseR_FEC_BIT] = -- { LM_CLASS_REAL, 10000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT] = -- { LM_CLASS_REAL, 20000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT] = -- { LM_CLASS_REAL, 20000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT] = -- { LM_CLASS_REAL, 40000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT] = -- { LM_CLASS_REAL, 40000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT] = -- { LM_CLASS_REAL, 40000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT] = -- { LM_CLASS_REAL, 40000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT] = -- { LM_CLASS_REAL, 56000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT] = -- { LM_CLASS_REAL, 56000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT] = -- { LM_CLASS_REAL, 56000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT] = -- { LM_CLASS_REAL, 56000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_25000baseCR_Full_BIT] = -- { LM_CLASS_REAL, 25000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_25000baseKR_Full_BIT] = -- { LM_CLASS_REAL, 25000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_25000baseSR_Full_BIT] = -- { LM_CLASS_REAL, 25000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT] = -- { LM_CLASS_REAL, 50000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT] = -- { LM_CLASS_REAL, 50000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT] = -- { LM_CLASS_REAL, 100000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT] = -- { LM_CLASS_REAL, 100000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT] = -- { LM_CLASS_REAL, 100000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT] = -- { LM_CLASS_REAL, 100000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT] = -- { LM_CLASS_REAL, 50000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_1000baseX_Full_BIT] = -- { LM_CLASS_REAL, 1000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_10000baseCR_Full_BIT] = -- { LM_CLASS_REAL, 10000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_10000baseSR_Full_BIT] = -- { LM_CLASS_REAL, 10000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_10000baseLR_Full_BIT] = -- { LM_CLASS_REAL, 10000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT] = -- { LM_CLASS_REAL, 10000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_10000baseER_Full_BIT] = -- { LM_CLASS_REAL, 10000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_2500baseT_Full_BIT] = -- { LM_CLASS_REAL, 2500, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_5000baseT_Full_BIT] = -- { LM_CLASS_REAL, 5000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_FEC_NONE_BIT] = -- { LM_CLASS_FEC }, -- [ETHTOOL_LINK_MODE_FEC_RS_BIT] = -- { LM_CLASS_FEC }, -- [ETHTOOL_LINK_MODE_FEC_BASER_BIT] = -- { LM_CLASS_FEC }, -- [ETHTOOL_LINK_MODE_50000baseKR_Full_BIT] = -- { LM_CLASS_REAL, 50000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_50000baseSR_Full_BIT] = -- { LM_CLASS_REAL, 50000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_50000baseCR_Full_BIT] = -- { LM_CLASS_REAL, 50000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT] = -- { LM_CLASS_REAL, 50000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_50000baseDR_Full_BIT] = -- { LM_CLASS_REAL, 50000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT] = -- { LM_CLASS_REAL, 100000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT] = -- { LM_CLASS_REAL, 100000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT] = -- { LM_CLASS_REAL, 100000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT] = -- { LM_CLASS_REAL, 100000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT] = -- { LM_CLASS_REAL, 100000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT] = -- { LM_CLASS_REAL, 200000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT] = -- { LM_CLASS_REAL, 200000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT] = -- { LM_CLASS_REAL, 200000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT] = -- { LM_CLASS_REAL, 200000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT] = -- { LM_CLASS_REAL, 200000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_100baseT1_Full_BIT] = -- { LM_CLASS_REAL, 100, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_1000baseT1_Full_BIT] = -- { LM_CLASS_REAL, 1000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT] = -- { LM_CLASS_REAL, 400000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT] = -- { LM_CLASS_REAL, 400000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT] = -- { LM_CLASS_REAL, 400000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT] = -- { LM_CLASS_REAL, 400000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT] = -- { LM_CLASS_REAL, 400000, DUPLEX_FULL }, -- [ETHTOOL_LINK_MODE_FEC_LLRS_BIT] = -- { LM_CLASS_FEC }, -+ [ETHTOOL_LINK_MODE_10baseT_Half_BIT] = __HALF_DUPLEX(10), -+ [ETHTOOL_LINK_MODE_10baseT_Full_BIT] = __REAL(10), -+ [ETHTOOL_LINK_MODE_100baseT_Half_BIT] = __HALF_DUPLEX(100), -+ [ETHTOOL_LINK_MODE_100baseT_Full_BIT] = __REAL(100), -+ [ETHTOOL_LINK_MODE_1000baseT_Half_BIT] = __HALF_DUPLEX(1000), -+ [ETHTOOL_LINK_MODE_1000baseT_Full_BIT] = __REAL(1000), -+ [ETHTOOL_LINK_MODE_Autoneg_BIT] = __SPECIAL(AUTONEG), -+ [ETHTOOL_LINK_MODE_TP_BIT] = __SPECIAL(PORT), -+ [ETHTOOL_LINK_MODE_AUI_BIT] = __SPECIAL(PORT), -+ [ETHTOOL_LINK_MODE_MII_BIT] = __SPECIAL(PORT), -+ [ETHTOOL_LINK_MODE_FIBRE_BIT] = __SPECIAL(PORT), -+ [ETHTOOL_LINK_MODE_BNC_BIT] = __SPECIAL(PORT), -+ [ETHTOOL_LINK_MODE_10000baseT_Full_BIT] = __REAL(10000), -+ [ETHTOOL_LINK_MODE_Pause_BIT] = __SPECIAL(PAUSE), -+ [ETHTOOL_LINK_MODE_Asym_Pause_BIT] = __SPECIAL(PAUSE), -+ [ETHTOOL_LINK_MODE_2500baseX_Full_BIT] = __REAL(2500), -+ [ETHTOOL_LINK_MODE_Backplane_BIT] = __SPECIAL(PORT), -+ [ETHTOOL_LINK_MODE_1000baseKX_Full_BIT] = __REAL(1000), -+ [ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT] = __REAL(10000), -+ [ETHTOOL_LINK_MODE_10000baseKR_Full_BIT] = __REAL(10000), -+ [ETHTOOL_LINK_MODE_10000baseR_FEC_BIT] = __REAL(10000), -+ [ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT] = __REAL(20000), -+ [ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT] = __REAL(20000), -+ [ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT] = __REAL(40000), -+ [ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT] = __REAL(40000), -+ [ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT] = __REAL(40000), -+ [ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT] = __REAL(40000), -+ [ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT] = __REAL(56000), -+ [ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT] = __REAL(56000), -+ [ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT] = __REAL(56000), -+ [ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT] = __REAL(56000), -+ [ETHTOOL_LINK_MODE_25000baseCR_Full_BIT] = __REAL(25000), -+ [ETHTOOL_LINK_MODE_25000baseKR_Full_BIT] = __REAL(25000), -+ [ETHTOOL_LINK_MODE_25000baseSR_Full_BIT] = __REAL(25000), -+ [ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT] = __REAL(50000), -+ [ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT] = __REAL(50000), -+ [ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT] = __REAL(100000), -+ [ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT] = __REAL(100000), -+ [ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT] = __REAL(100000), -+ [ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT] = __REAL(100000), -+ [ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT] = __REAL(50000), -+ [ETHTOOL_LINK_MODE_1000baseX_Full_BIT] = __REAL(1000), -+ [ETHTOOL_LINK_MODE_10000baseCR_Full_BIT] = __REAL(10000), -+ [ETHTOOL_LINK_MODE_10000baseSR_Full_BIT] = __REAL(10000), -+ [ETHTOOL_LINK_MODE_10000baseLR_Full_BIT] = __REAL(10000), -+ [ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT] = __REAL(10000), -+ [ETHTOOL_LINK_MODE_10000baseER_Full_BIT] = __REAL(10000), -+ [ETHTOOL_LINK_MODE_2500baseT_Full_BIT] = __REAL(2500), -+ [ETHTOOL_LINK_MODE_5000baseT_Full_BIT] = __REAL(5000), -+ [ETHTOOL_LINK_MODE_FEC_NONE_BIT] = __SPECIAL(FEC), -+ [ETHTOOL_LINK_MODE_FEC_RS_BIT] = __SPECIAL(FEC), -+ [ETHTOOL_LINK_MODE_FEC_BASER_BIT] = __SPECIAL(FEC), -+ [ETHTOOL_LINK_MODE_50000baseKR_Full_BIT] = __REAL(50000), -+ [ETHTOOL_LINK_MODE_50000baseSR_Full_BIT] = __REAL(50000), -+ [ETHTOOL_LINK_MODE_50000baseCR_Full_BIT] = __REAL(50000), -+ [ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT] = __REAL(50000), -+ [ETHTOOL_LINK_MODE_50000baseDR_Full_BIT] = __REAL(50000), -+ [ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT] = __REAL(100000), -+ [ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT] = __REAL(100000), -+ [ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT] = __REAL(100000), -+ [ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT] = __REAL(100000), -+ [ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT] = __REAL(100000), -+ [ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT] = __REAL(200000), -+ [ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT] = __REAL(200000), -+ [ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT] = __REAL(200000), -+ [ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT] = __REAL(200000), -+ [ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT] = __REAL(200000), -+ [ETHTOOL_LINK_MODE_100baseT1_Full_BIT] = __REAL(100), -+ [ETHTOOL_LINK_MODE_1000baseT1_Full_BIT] = __REAL(1000), -+ [ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT] = __REAL(400000), -+ [ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT] = __REAL(400000), -+ [ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT] = __REAL(400000), -+ [ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT] = __REAL(400000), -+ [ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT] = __REAL(400000), -+ [ETHTOOL_LINK_MODE_FEC_LLRS_BIT] = __SPECIAL(FEC), - }; - const unsigned int link_modes_count = ARRAY_SIZE(link_modes); - -+#undef __REAL -+#undef __HALF_DUPLEX -+#undef __SPECIAL -+ - static bool lm_class_match(unsigned int mode, enum link_mode_class class) - { - unsigned int mode_class = (mode < link_modes_count) ? --- -2.26.2 - diff --git a/0010-ioctl-convert-cmdline_info-arrays-to-named-initializ.patch b/0010-ioctl-convert-cmdline_info-arrays-to-named-initializ.patch deleted file mode 100644 index dc7309e..0000000 --- a/0010-ioctl-convert-cmdline_info-arrays-to-named-initializ.patch +++ /dev/null @@ -1,468 +0,0 @@ -From 35fb9ff49c579d6e6819d71ab4c614cb3d2c0dae Mon Sep 17 00:00:00 2001 -From: Michal Kubecek -Date: Sun, 23 Aug 2020 21:40:39 +0200 -Subject: [PATCH 10/17] ioctl: convert cmdline_info arrays to named - initializers - -To get rid of remaining "missing field initializer" compiler warnings, -convert arrays of struct cmdline_info used for command line parser to -named initializers. This also makes the initializers easier to read. - -This commit should have no effect on resulting code (checked with gcc-11 -and -O2). - -Signed-off-by: Michal Kubecek -Reviewed-by: Andrew Lunn -(cherry picked from commit 0c43dec5cf64aee41bbd4195c96671032ea6556d) ---- - ethtool.c | 378 ++++++++++++++++++++++++++++++++++++++++++------------ - 1 file changed, 296 insertions(+), 82 deletions(-) - -diff --git a/ethtool.c b/ethtool.c -index 3c30824016d5..e32a93b41088 100644 ---- a/ethtool.c -+++ b/ethtool.c -@@ -1825,10 +1825,24 @@ static int do_spause(struct cmd_context *ctx) - int pause_rx_wanted = -1; - int pause_tx_wanted = -1; - struct cmdline_info cmdline_pause[] = { -- { "autoneg", CMDL_BOOL, &pause_autoneg_wanted, -- &epause.autoneg }, -- { "rx", CMDL_BOOL, &pause_rx_wanted, &epause.rx_pause }, -- { "tx", CMDL_BOOL, &pause_tx_wanted, &epause.tx_pause }, -+ { -+ .name = "autoneg", -+ .type = CMDL_BOOL, -+ .wanted_val = &pause_autoneg_wanted, -+ .ioctl_val = &epause.autoneg, -+ }, -+ { -+ .name = "rx", -+ .type = CMDL_BOOL, -+ .wanted_val = &pause_rx_wanted, -+ .ioctl_val = &epause.rx_pause, -+ }, -+ { -+ .name = "tx", -+ .type = CMDL_BOOL, -+ .wanted_val = &pause_tx_wanted, -+ .ioctl_val = &epause.tx_pause, -+ }, - }; - int err, changed = 0; - -@@ -1868,12 +1882,30 @@ static int do_sring(struct cmd_context *ctx) - s32 ring_rx_jumbo_wanted = -1; - s32 ring_tx_wanted = -1; - struct cmdline_info cmdline_ring[] = { -- { "rx", CMDL_S32, &ring_rx_wanted, &ering.rx_pending }, -- { "rx-mini", CMDL_S32, &ring_rx_mini_wanted, -- &ering.rx_mini_pending }, -- { "rx-jumbo", CMDL_S32, &ring_rx_jumbo_wanted, -- &ering.rx_jumbo_pending }, -- { "tx", CMDL_S32, &ring_tx_wanted, &ering.tx_pending }, -+ { -+ .name = "rx", -+ .type = CMDL_S32, -+ .wanted_val = &ring_rx_wanted, -+ .ioctl_val = &ering.rx_pending, -+ }, -+ { -+ .name = "rx-mini", -+ .type = CMDL_S32, -+ .wanted_val = &ring_rx_mini_wanted, -+ .ioctl_val = &ering.rx_mini_pending, -+ }, -+ { -+ .name = "rx-jumbo", -+ .type = CMDL_S32, -+ .wanted_val = &ring_rx_jumbo_wanted, -+ .ioctl_val = &ering.rx_jumbo_pending, -+ }, -+ { -+ .name = "tx", -+ .type = CMDL_S32, -+ .wanted_val = &ring_tx_wanted, -+ .ioctl_val = &ering.tx_pending, -+ }, - }; - int err, changed = 0; - -@@ -1937,12 +1969,30 @@ static int do_schannels(struct cmd_context *ctx) - s32 channels_other_wanted = -1; - s32 channels_combined_wanted = -1; - struct cmdline_info cmdline_channels[] = { -- { "rx", CMDL_S32, &channels_rx_wanted, &echannels.rx_count }, -- { "tx", CMDL_S32, &channels_tx_wanted, &echannels.tx_count }, -- { "other", CMDL_S32, &channels_other_wanted, -- &echannels.other_count }, -- { "combined", CMDL_S32, &channels_combined_wanted, -- &echannels.combined_count }, -+ { -+ .name = "rx", -+ .type = CMDL_S32, -+ .wanted_val = &channels_rx_wanted, -+ .ioctl_val = &echannels.rx_count, -+ }, -+ { -+ .name = "tx", -+ .type = CMDL_S32, -+ .wanted_val = &channels_tx_wanted, -+ .ioctl_val = &echannels.tx_count, -+ }, -+ { -+ .name = "other", -+ .type = CMDL_S32, -+ .wanted_val = &channels_other_wanted, -+ .ioctl_val = &echannels.other_count, -+ }, -+ { -+ .name = "combined", -+ .type = CMDL_S32, -+ .wanted_val = &channels_combined_wanted, -+ .ioctl_val = &echannels.combined_count, -+ }, - }; - int err, changed = 0; - -@@ -2052,50 +2102,138 @@ static int do_gcoalesce(struct cmd_context *ctx) - - #define COALESCE_CMDLINE_INFO(__ecoal) \ - { \ -- { "adaptive-rx", CMDL_BOOL, &coal_adaptive_rx_wanted, \ -- &__ecoal.use_adaptive_rx_coalesce }, \ -- { "adaptive-tx", CMDL_BOOL, &coal_adaptive_tx_wanted, \ -- &__ecoal.use_adaptive_tx_coalesce }, \ -- { "sample-interval", CMDL_S32, &coal_sample_rate_wanted, \ -- &__ecoal.rate_sample_interval }, \ -- { "stats-block-usecs", CMDL_S32, &coal_stats_wanted, \ -- &__ecoal.stats_block_coalesce_usecs }, \ -- { "pkt-rate-low", CMDL_S32, &coal_pkt_rate_low_wanted, \ -- &__ecoal.pkt_rate_low }, \ -- { "pkt-rate-high", CMDL_S32, &coal_pkt_rate_high_wanted, \ -- &__ecoal.pkt_rate_high }, \ -- { "rx-usecs", CMDL_S32, &coal_rx_usec_wanted, \ -- &__ecoal.rx_coalesce_usecs }, \ -- { "rx-frames", CMDL_S32, &coal_rx_frames_wanted, \ -- &__ecoal.rx_max_coalesced_frames }, \ -- { "rx-usecs-irq", CMDL_S32, &coal_rx_usec_irq_wanted, \ -- &__ecoal.rx_coalesce_usecs_irq }, \ -- { "rx-frames-irq", CMDL_S32, &coal_rx_frames_irq_wanted, \ -- &__ecoal.rx_max_coalesced_frames_irq }, \ -- { "tx-usecs", CMDL_S32, &coal_tx_usec_wanted, \ -- &__ecoal.tx_coalesce_usecs }, \ -- { "tx-frames", CMDL_S32, &coal_tx_frames_wanted, \ -- &__ecoal.tx_max_coalesced_frames }, \ -- { "tx-usecs-irq", CMDL_S32, &coal_tx_usec_irq_wanted, \ -- &__ecoal.tx_coalesce_usecs_irq }, \ -- { "tx-frames-irq", CMDL_S32, &coal_tx_frames_irq_wanted, \ -- &__ecoal.tx_max_coalesced_frames_irq }, \ -- { "rx-usecs-low", CMDL_S32, &coal_rx_usec_low_wanted, \ -- &__ecoal.rx_coalesce_usecs_low }, \ -- { "rx-frames-low", CMDL_S32, &coal_rx_frames_low_wanted, \ -- &__ecoal.rx_max_coalesced_frames_low }, \ -- { "tx-usecs-low", CMDL_S32, &coal_tx_usec_low_wanted, \ -- &__ecoal.tx_coalesce_usecs_low }, \ -- { "tx-frames-low", CMDL_S32, &coal_tx_frames_low_wanted, \ -- &__ecoal.tx_max_coalesced_frames_low }, \ -- { "rx-usecs-high", CMDL_S32, &coal_rx_usec_high_wanted, \ -- &__ecoal.rx_coalesce_usecs_high }, \ -- { "rx-frames-high", CMDL_S32, &coal_rx_frames_high_wanted, \ -- &__ecoal.rx_max_coalesced_frames_high }, \ -- { "tx-usecs-high", CMDL_S32, &coal_tx_usec_high_wanted, \ -- &__ecoal.tx_coalesce_usecs_high }, \ -- { "tx-frames-high", CMDL_S32, &coal_tx_frames_high_wanted, \ -- &__ecoal.tx_max_coalesced_frames_high }, \ -+ { \ -+ .name = "adaptive-rx", \ -+ .type = CMDL_BOOL, \ -+ .wanted_val = &coal_adaptive_rx_wanted, \ -+ .ioctl_val = &__ecoal.use_adaptive_rx_coalesce, \ -+ }, \ -+ { \ -+ .name = "adaptive-tx", \ -+ .type = CMDL_BOOL, \ -+ .wanted_val = &coal_adaptive_tx_wanted, \ -+ .ioctl_val = &__ecoal.use_adaptive_tx_coalesce, \ -+ }, \ -+ { \ -+ .name = "sample-interval", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_sample_rate_wanted, \ -+ .ioctl_val = &__ecoal.rate_sample_interval, \ -+ }, \ -+ { \ -+ .name = "stats-block-usecs", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_stats_wanted, \ -+ .ioctl_val = &__ecoal.stats_block_coalesce_usecs, \ -+ }, \ -+ { \ -+ .name = "pkt-rate-low", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_pkt_rate_low_wanted, \ -+ .ioctl_val = &__ecoal.pkt_rate_low, \ -+ }, \ -+ { \ -+ .name = "pkt-rate-high", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_pkt_rate_high_wanted, \ -+ .ioctl_val = &__ecoal.pkt_rate_high, \ -+ }, \ -+ { \ -+ .name = "rx-usecs", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_rx_usec_wanted, \ -+ .ioctl_val = &__ecoal.rx_coalesce_usecs, \ -+ }, \ -+ { \ -+ .name = "rx-frames", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_rx_frames_wanted, \ -+ .ioctl_val = &__ecoal.rx_max_coalesced_frames, \ -+ }, \ -+ { \ -+ .name = "rx-usecs-irq", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_rx_usec_irq_wanted, \ -+ .ioctl_val = &__ecoal.rx_coalesce_usecs_irq, \ -+ }, \ -+ { \ -+ .name = "rx-frames-irq", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_rx_frames_irq_wanted, \ -+ .ioctl_val = &__ecoal.rx_max_coalesced_frames_irq, \ -+ }, \ -+ { \ -+ .name = "tx-usecs", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_tx_usec_wanted, \ -+ .ioctl_val = &__ecoal.tx_coalesce_usecs, \ -+ }, \ -+ { \ -+ .name = "tx-frames", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_tx_frames_wanted, \ -+ .ioctl_val = &__ecoal.tx_max_coalesced_frames, \ -+ }, \ -+ { \ -+ .name = "tx-usecs-irq", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_tx_usec_irq_wanted, \ -+ .ioctl_val = &__ecoal.tx_coalesce_usecs_irq, \ -+ }, \ -+ { \ -+ .name = "tx-frames-irq", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_tx_frames_irq_wanted, \ -+ .ioctl_val = &__ecoal.tx_max_coalesced_frames_irq, \ -+ }, \ -+ { \ -+ .name = "rx-usecs-low", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_rx_usec_low_wanted, \ -+ .ioctl_val = &__ecoal.rx_coalesce_usecs_low, \ -+ }, \ -+ { \ -+ .name = "rx-frames-low", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_rx_frames_low_wanted, \ -+ .ioctl_val = &__ecoal.rx_max_coalesced_frames_low, \ -+ }, \ -+ { \ -+ .name = "tx-usecs-low", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_tx_usec_low_wanted, \ -+ .ioctl_val = &__ecoal.tx_coalesce_usecs_low, \ -+ }, \ -+ { \ -+ .name = "tx-frames-low", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_tx_frames_low_wanted, \ -+ .ioctl_val = &__ecoal.tx_max_coalesced_frames_low, \ -+ }, \ -+ { \ -+ .name = "rx-usecs-high", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_rx_usec_high_wanted, \ -+ .ioctl_val = &__ecoal.rx_coalesce_usecs_high, \ -+ }, \ -+ { \ -+ .name = "rx-frames-high", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_rx_frames_high_wanted, \ -+ .ioctl_val = &__ecoal.rx_max_coalesced_frames_high,\ -+ }, \ -+ { \ -+ .name = "tx-usecs-high", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_tx_usec_high_wanted, \ -+ .ioctl_val = &__ecoal.tx_coalesce_usecs_high, \ -+ }, \ -+ { \ -+ .name = "tx-frames-high", \ -+ .type = CMDL_S32, \ -+ .wanted_val = &coal_tx_frames_high_wanted, \ -+ .ioctl_val = &__ecoal.tx_max_coalesced_frames_high,\ -+ }, \ - } - - static int do_scoalesce(struct cmd_context *ctx) -@@ -3090,9 +3228,21 @@ static int do_gregs(struct cmd_context *ctx) - int gregs_dump_hex = 0; - char *gregs_dump_file = NULL; - struct cmdline_info cmdline_gregs[] = { -- { "raw", CMDL_BOOL, &gregs_dump_raw, NULL }, -- { "hex", CMDL_BOOL, &gregs_dump_hex, NULL }, -- { "file", CMDL_STR, &gregs_dump_file, NULL }, -+ { -+ .name = "raw", -+ .type = CMDL_BOOL, -+ .wanted_val = &gregs_dump_raw, -+ }, -+ { -+ .name = "hex", -+ .type = CMDL_BOOL, -+ .wanted_val = &gregs_dump_hex, -+ }, -+ { -+ .name = "file", -+ .type = CMDL_STR, -+ .wanted_val = &gregs_dump_file, -+ }, - }; - int err; - struct ethtool_drvinfo drvinfo; -@@ -3189,10 +3339,22 @@ static int do_geeprom(struct cmd_context *ctx) - u32 geeprom_length = 0; - int geeprom_length_seen = 0; - struct cmdline_info cmdline_geeprom[] = { -- { "offset", CMDL_U32, &geeprom_offset, NULL }, -- { "length", CMDL_U32, &geeprom_length, NULL, -- 0, &geeprom_length_seen }, -- { "raw", CMDL_BOOL, &geeprom_dump_raw, NULL }, -+ { -+ .name = "offset", -+ .type = CMDL_U32, -+ .wanted_val = &geeprom_offset, -+ }, -+ { -+ .name = "length", -+ .type = CMDL_U32, -+ .wanted_val = &geeprom_length, -+ .seen_val = &geeprom_length_seen, -+ }, -+ { -+ .name = "raw", -+ .type = CMDL_BOOL, -+ .wanted_val = &geeprom_dump_raw, -+ }, - }; - int err; - struct ethtool_drvinfo drvinfo; -@@ -3244,12 +3406,28 @@ static int do_seeprom(struct cmd_context *ctx) - int seeprom_length_seen = 0; - int seeprom_value_seen = 0; - struct cmdline_info cmdline_seeprom[] = { -- { "magic", CMDL_U32, &seeprom_magic, NULL }, -- { "offset", CMDL_U32, &seeprom_offset, NULL }, -- { "length", CMDL_U32, &seeprom_length, NULL, -- 0, &seeprom_length_seen }, -- { "value", CMDL_U8, &seeprom_value, NULL, -- 0, &seeprom_value_seen }, -+ { -+ .name = "magic", -+ .type = CMDL_U32, -+ .wanted_val = &seeprom_magic, -+ }, -+ { -+ .name = "offset", -+ .type = CMDL_U32, -+ .wanted_val = &seeprom_offset, -+ }, -+ { -+ .name = "length", -+ .type = CMDL_U32, -+ .wanted_val = &seeprom_length, -+ .seen_val = &seeprom_length_seen, -+ }, -+ { -+ .name = "value", -+ .type = CMDL_U8, -+ .wanted_val = &seeprom_value, -+ .seen_val = &seeprom_value_seen, -+ }, - }; - int err; - struct ethtool_drvinfo drvinfo; -@@ -4553,11 +4731,27 @@ static int do_getmodule(struct cmd_context *ctx) - int err; - - struct cmdline_info cmdline_geeprom[] = { -- { "offset", CMDL_U32, &geeprom_offset, NULL }, -- { "length", CMDL_U32, &geeprom_length, NULL, -- 0, &geeprom_length_seen }, -- { "raw", CMDL_BOOL, &geeprom_dump_raw, NULL }, -- { "hex", CMDL_BOOL, &geeprom_dump_hex, NULL }, -+ { -+ .name = "offset", -+ .type = CMDL_U32, -+ .wanted_val = &geeprom_offset, -+ }, -+ { -+ .name = "length", -+ .type = CMDL_U32, -+ .wanted_val = &geeprom_length, -+ .seen_val = &geeprom_length_seen, -+ }, -+ { -+ .name = "raw", -+ .type = CMDL_BOOL, -+ .wanted_val = &geeprom_dump_raw, -+ }, -+ { -+ .name = "hex", -+ .type = CMDL_BOOL, -+ .wanted_val = &geeprom_dump_hex, -+ }, - }; - - parse_generic_cmdline(ctx, &geeprom_changed, -@@ -4669,10 +4863,30 @@ static int do_seee(struct cmd_context *ctx) - int change = -1, change2 = 0; - struct ethtool_eee eeecmd; - struct cmdline_info cmdline_eee[] = { -- { "advertise", CMDL_U32, &adv_c, &eeecmd.advertised }, -- { "tx-lpi", CMDL_BOOL, &lpi_c, &eeecmd.tx_lpi_enabled }, -- { "tx-timer", CMDL_U32, &lpi_time_c, &eeecmd.tx_lpi_timer}, -- { "eee", CMDL_BOOL, &eee_c, &eeecmd.eee_enabled}, -+ { -+ .name = "advertise", -+ .type = CMDL_U32, -+ .wanted_val = &adv_c, -+ .ioctl_val = &eeecmd.advertised, -+ }, -+ { -+ .name = "tx-lpi", -+ .type = CMDL_BOOL, -+ .wanted_val = &lpi_c, -+ .ioctl_val = &eeecmd.tx_lpi_enabled, -+ }, -+ { -+ .name = "tx-timer", -+ .type = CMDL_U32, -+ .wanted_val = &lpi_time_c, -+ .ioctl_val = &eeecmd.tx_lpi_timer, -+ }, -+ { -+ .name = "eee", -+ .type = CMDL_BOOL, -+ .wanted_val = &eee_c, -+ .ioctl_val = &eeecmd.eee_enabled, -+ }, - }; - - if (ctx->argc == 0) --- -2.26.2 - diff --git a/0011-build-add-Wextra-to-default-CFLAGS.patch b/0011-build-add-Wextra-to-default-CFLAGS.patch deleted file mode 100644 index dc6330b..0000000 --- a/0011-build-add-Wextra-to-default-CFLAGS.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 0d042007945d6fadb9b59ce8d01502575689067d Mon Sep 17 00:00:00 2001 -From: Michal Kubecek -Date: Sun, 23 Aug 2020 21:40:42 +0200 -Subject: [PATCH 11/17] build: add -Wextra to default CFLAGS - -As a result of previous commits, ethtool source now builds with gcc -versions 7-11 without any compiler warning with "-Wall -Wextra". Add -"-Wextra" to default cflags to make sure that any new warnings are -caught as early as possible. - -Suggested-by: Andrew Lunn -Signed-off-by: Michal Kubecek -Reviewed-by: Andrew Lunn -(cherry picked from commit 257d90cd946699c0951b670576d2d63a12b92541) ---- - Makefile.am | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Makefile.am b/Makefile.am -index 2abb2742c335..099182e8d6ad 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -1,4 +1,4 @@ --AM_CFLAGS = -Wall -+AM_CFLAGS = -Wall -Wextra - AM_CPPFLAGS = -I$(top_srcdir)/uapi - LDADD = -lm - --- -2.26.2 - diff --git a/0012-ioctl-only-memset-non-NULL-link-settings.patch b/0012-ioctl-only-memset-non-NULL-link-settings.patch deleted file mode 100644 index 0dcf3a6..0000000 --- a/0012-ioctl-only-memset-non-NULL-link-settings.patch +++ /dev/null @@ -1,42 +0,0 @@ -From a4186edd5bcb44d3236852816c21752eb82e5039 Mon Sep 17 00:00:00 2001 -From: Hans-Christian Noren Egtvedt -Date: Thu, 27 Aug 2020 11:50:33 +0200 -Subject: [PATCH 12/17] ioctl: only memset non-NULL link settings - -In commit bef780467fa ("ioctl: do not pass transceiver value back to -kernel") a regression slipped in. If we have a kernel that does not -support the ETHTOOL_xLINKSETTINGS API, then the do_ioctl_glinksettings() -function will return a NULL pointer. - -Hence before memset'ing the pointer to zero we must first check it is -valid, as NULL return is perfectly fine when running on old kernels. - -Fixes: bef780467fa7 ("ioctl: do not pass transceiver value back to kernel") -Signed-off-by: Hans-Christian Noren Egtvedt -Signed-off-by: Michal Kubecek -(cherry picked from commit cf12872ebe7d8fac2088e7d2cd5e2a0a5f03499d) ---- - ethtool.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/ethtool.c b/ethtool.c -index e32a93b41088..606af3e6b48f 100644 ---- a/ethtool.c -+++ b/ethtool.c -@@ -3048,10 +3048,11 @@ static int do_sset(struct cmd_context *ctx) - struct ethtool_link_usettings *link_usettings; - - link_usettings = do_ioctl_glinksettings(ctx); -- memset(&link_usettings->deprecated, 0, -- sizeof(link_usettings->deprecated)); - if (link_usettings == NULL) - link_usettings = do_ioctl_gset(ctx); -+ else -+ memset(&link_usettings->deprecated, 0, -+ sizeof(link_usettings->deprecated)); - if (link_usettings == NULL) { - perror("Cannot get current device settings"); - err = -1; --- -2.26.2 - diff --git a/0013-netlink-mark-unused-function-parameters-of-non-netli.patch b/0013-netlink-mark-unused-function-parameters-of-non-netli.patch deleted file mode 100644 index 8acc678..0000000 --- a/0013-netlink-mark-unused-function-parameters-of-non-netli.patch +++ /dev/null @@ -1,44 +0,0 @@ -From fd001f7b3e530afefe470db246e8fc299077329e Mon Sep 17 00:00:00 2001 -From: Michal Kubecek -Date: Wed, 16 Sep 2020 18:48:20 +0200 -Subject: [PATCH 13/17] netlink: mark unused function parameters of non-netlink - stubs - -Recent compiler warning cleanup missed three unused parameters in versions -of netlink_run_handler() and nl_monitor() used when netlink support is -disabled (configure --disable-netlink). - -Signed-off-by: Michal Kubecek -(cherry picked from commit eb5bd877ec5bd2a2d2b5e09fc90033be1a64c95a) ---- - netlink/extapi.h | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/netlink/extapi.h b/netlink/extapi.h -index a35d5f2c0b26..4fee6a9c3a99 100644 ---- a/netlink/extapi.h -+++ b/netlink/extapi.h -@@ -43,8 +43,9 @@ void nl_monitor_usage(void); - - #else /* ETHTOOL_ENABLE_NETLINK */ - --static inline void netlink_run_handler(struct cmd_context *ctx, -- nl_func_t nlfunc, bool no_fallback) -+static inline void netlink_run_handler(struct cmd_context *ctx __maybe_unused, -+ nl_func_t nlfunc __maybe_unused, -+ bool no_fallback) - { - if (no_fallback) { - fprintf(stderr, -@@ -54,7 +55,7 @@ static inline void netlink_run_handler(struct cmd_context *ctx, - } - } - --static inline int nl_monitor(struct cmd_context *ctx) -+static inline int nl_monitor(struct cmd_context *ctx __maybe_unused) - { - fprintf(stderr, "Netlink not supported by ethtool, option --monitor unsupported.\n"); - return -EOPNOTSUPP; --- -2.26.2 - diff --git a/0014-update-UAPI-header-copies.patch b/0014-update-UAPI-header-copies.patch deleted file mode 100644 index 43c781d..0000000 --- a/0014-update-UAPI-header-copies.patch +++ /dev/null @@ -1,490 +0,0 @@ -From 708dee5555dc4849bc03038048b9b9d08404f18e Mon Sep 17 00:00:00 2001 -From: Jakub Kicinski -Date: Thu, 10 Sep 2020 12:09:14 -0700 -Subject: [PATCH 14/17] update UAPI header copies - -Update to kernel commit 4f6a5caf187f. - -Signed-off-by: Jakub Kicinski -Signed-off-by: Michal Kubecek -(cherry picked from commit 1be081a983c94ab2eaa81686fbb9bcd707a2bac6) ---- - uapi/linux/ethtool.h | 17 +++ - uapi/linux/ethtool_netlink.h | 55 +++++++++ - uapi/linux/if_link.h | 227 ++++++++++++++++++++++++++++++++--- - uapi/linux/rtnetlink.h | 46 +++---- - 4 files changed, 305 insertions(+), 40 deletions(-) - -diff --git a/uapi/linux/ethtool.h b/uapi/linux/ethtool.h -index 6074caa2f220..355e718a99fd 100644 ---- a/uapi/linux/ethtool.h -+++ b/uapi/linux/ethtool.h -@@ -597,6 +597,7 @@ struct ethtool_pauseparam { - * @ETH_SS_SOF_TIMESTAMPING: SOF_TIMESTAMPING_* flags - * @ETH_SS_TS_TX_TYPES: timestamping Tx types - * @ETH_SS_TS_RX_FILTERS: timestamping Rx filters -+ * @ETH_SS_UDP_TUNNEL_TYPES: UDP tunnel types - */ - enum ethtool_stringset { - ETH_SS_TEST = 0, -@@ -614,6 +615,7 @@ enum ethtool_stringset { - ETH_SS_SOF_TIMESTAMPING, - ETH_SS_TS_TX_TYPES, - ETH_SS_TS_RX_FILTERS, -+ ETH_SS_UDP_TUNNEL_TYPES, - - /* add new constants above here */ - ETH_SS_COUNT -@@ -1528,6 +1530,21 @@ enum ethtool_link_mode_bit_indices { - ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 72, - ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 73, - ETHTOOL_LINK_MODE_FEC_LLRS_BIT = 74, -+ ETHTOOL_LINK_MODE_100000baseKR_Full_BIT = 75, -+ ETHTOOL_LINK_MODE_100000baseSR_Full_BIT = 76, -+ ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = 77, -+ ETHTOOL_LINK_MODE_100000baseCR_Full_BIT = 78, -+ ETHTOOL_LINK_MODE_100000baseDR_Full_BIT = 79, -+ ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = 80, -+ ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = 81, -+ ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 82, -+ ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = 83, -+ ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = 84, -+ ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = 85, -+ ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = 86, -+ ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 87, -+ ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 88, -+ ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 89, - /* must be last entry */ - __ETHTOOL_LINK_MODE_MASK_NBITS - }; -diff --git a/uapi/linux/ethtool_netlink.h b/uapi/linux/ethtool_netlink.h -index b18e7bc539f2..c1b4d67d35d1 100644 ---- a/uapi/linux/ethtool_netlink.h -+++ b/uapi/linux/ethtool_netlink.h -@@ -41,6 +41,7 @@ enum { - ETHTOOL_MSG_TSINFO_GET, - ETHTOOL_MSG_CABLE_TEST_ACT, - ETHTOOL_MSG_CABLE_TEST_TDR_ACT, -+ ETHTOOL_MSG_TUNNEL_INFO_GET, - - /* add new constants above here */ - __ETHTOOL_MSG_USER_CNT, -@@ -554,6 +555,60 @@ enum { - ETHTOOL_A_CABLE_TEST_TDR_NTF_MAX = __ETHTOOL_A_CABLE_TEST_TDR_NTF_CNT - 1 - }; - -+/* TUNNEL INFO */ -+ -+enum { -+ ETHTOOL_UDP_TUNNEL_TYPE_VXLAN, -+ ETHTOOL_UDP_TUNNEL_TYPE_GENEVE, -+ ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE, -+ -+ __ETHTOOL_UDP_TUNNEL_TYPE_CNT -+}; -+ -+enum { -+ ETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC, -+ -+ ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT, /* be16 */ -+ ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE, /* u32 */ -+ -+ /* add new constants above here */ -+ __ETHTOOL_A_TUNNEL_UDP_ENTRY_CNT, -+ ETHTOOL_A_TUNNEL_UDP_ENTRY_MAX = (__ETHTOOL_A_TUNNEL_UDP_ENTRY_CNT - 1) -+}; -+ -+enum { -+ ETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC, -+ -+ ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE, /* u32 */ -+ ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES, /* bitset */ -+ ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY, /* nest - _UDP_ENTRY_* */ -+ -+ /* add new constants above here */ -+ __ETHTOOL_A_TUNNEL_UDP_TABLE_CNT, -+ ETHTOOL_A_TUNNEL_UDP_TABLE_MAX = (__ETHTOOL_A_TUNNEL_UDP_TABLE_CNT - 1) -+}; -+ -+enum { -+ ETHTOOL_A_TUNNEL_UDP_UNSPEC, -+ -+ ETHTOOL_A_TUNNEL_UDP_TABLE, /* nest - _UDP_TABLE_* */ -+ -+ /* add new constants above here */ -+ __ETHTOOL_A_TUNNEL_UDP_CNT, -+ ETHTOOL_A_TUNNEL_UDP_MAX = (__ETHTOOL_A_TUNNEL_UDP_CNT - 1) -+}; -+ -+enum { -+ ETHTOOL_A_TUNNEL_INFO_UNSPEC, -+ ETHTOOL_A_TUNNEL_INFO_HEADER, /* nest - _A_HEADER_* */ -+ -+ ETHTOOL_A_TUNNEL_INFO_UDP_PORTS, /* nest - _UDP_TABLE */ -+ -+ /* add new constants above here */ -+ __ETHTOOL_A_TUNNEL_INFO_CNT, -+ ETHTOOL_A_TUNNEL_INFO_MAX = (__ETHTOOL_A_TUNNEL_INFO_CNT - 1) -+}; -+ - /* generic netlink info */ - #define ETHTOOL_GENL_NAME "ethtool" - #define ETHTOOL_GENL_VERSION 1 -diff --git a/uapi/linux/if_link.h b/uapi/linux/if_link.h -index a8901a39a345..9d96890f9742 100644 ---- a/uapi/linux/if_link.h -+++ b/uapi/linux/if_link.h -@@ -40,26 +40,197 @@ struct rtnl_link_stats { - __u32 rx_nohandler; /* dropped, no handler found */ - }; - --/* The main device statistics structure */ -+/** -+ * struct rtnl_link_stats64 - The main device statistics structure. -+ * -+ * @rx_packets: Number of good packets received by the interface. -+ * For hardware interfaces counts all good packets received from the device -+ * by the host, including packets which host had to drop at various stages -+ * of processing (even in the driver). -+ * -+ * @tx_packets: Number of packets successfully transmitted. -+ * For hardware interfaces counts packets which host was able to successfully -+ * hand over to the device, which does not necessarily mean that packets -+ * had been successfully transmitted out of the device, only that device -+ * acknowledged it copied them out of host memory. -+ * -+ * @rx_bytes: Number of good received bytes, corresponding to @rx_packets. -+ * -+ * For IEEE 802.3 devices should count the length of Ethernet Frames -+ * excluding the FCS. -+ * -+ * @tx_bytes: Number of good transmitted bytes, corresponding to @tx_packets. -+ * -+ * For IEEE 802.3 devices should count the length of Ethernet Frames -+ * excluding the FCS. -+ * -+ * @rx_errors: Total number of bad packets received on this network device. -+ * This counter must include events counted by @rx_length_errors, -+ * @rx_crc_errors, @rx_frame_errors and other errors not otherwise -+ * counted. -+ * -+ * @tx_errors: Total number of transmit problems. -+ * This counter must include events counter by @tx_aborted_errors, -+ * @tx_carrier_errors, @tx_fifo_errors, @tx_heartbeat_errors, -+ * @tx_window_errors and other errors not otherwise counted. -+ * -+ * @rx_dropped: Number of packets received but not processed, -+ * e.g. due to lack of resources or unsupported protocol. -+ * For hardware interfaces this counter should not include packets -+ * dropped by the device which are counted separately in -+ * @rx_missed_errors (since procfs folds those two counters together). -+ * -+ * @tx_dropped: Number of packets dropped on their way to transmission, -+ * e.g. due to lack of resources. -+ * -+ * @multicast: Multicast packets received. -+ * For hardware interfaces this statistic is commonly calculated -+ * at the device level (unlike @rx_packets) and therefore may include -+ * packets which did not reach the host. -+ * -+ * For IEEE 802.3 devices this counter may be equivalent to: -+ * -+ * - 30.3.1.1.21 aMulticastFramesReceivedOK -+ * -+ * @collisions: Number of collisions during packet transmissions. -+ * -+ * @rx_length_errors: Number of packets dropped due to invalid length. -+ * Part of aggregate "frame" errors in `/proc/net/dev`. -+ * -+ * For IEEE 802.3 devices this counter should be equivalent to a sum -+ * of the following attributes: -+ * -+ * - 30.3.1.1.23 aInRangeLengthErrors -+ * - 30.3.1.1.24 aOutOfRangeLengthField -+ * - 30.3.1.1.25 aFrameTooLongErrors -+ * -+ * @rx_over_errors: Receiver FIFO overflow event counter. -+ * -+ * Historically the count of overflow events. Such events may be -+ * reported in the receive descriptors or via interrupts, and may -+ * not correspond one-to-one with dropped packets. -+ * -+ * The recommended interpretation for high speed interfaces is - -+ * number of packets dropped because they did not fit into buffers -+ * provided by the host, e.g. packets larger than MTU or next buffer -+ * in the ring was not available for a scatter transfer. -+ * -+ * Part of aggregate "frame" errors in `/proc/net/dev`. -+ * -+ * This statistics was historically used interchangeably with -+ * @rx_fifo_errors. -+ * -+ * This statistic corresponds to hardware events and is not commonly used -+ * on software devices. -+ * -+ * @rx_crc_errors: Number of packets received with a CRC error. -+ * Part of aggregate "frame" errors in `/proc/net/dev`. -+ * -+ * For IEEE 802.3 devices this counter must be equivalent to: -+ * -+ * - 30.3.1.1.6 aFrameCheckSequenceErrors -+ * -+ * @rx_frame_errors: Receiver frame alignment errors. -+ * Part of aggregate "frame" errors in `/proc/net/dev`. -+ * -+ * For IEEE 802.3 devices this counter should be equivalent to: -+ * -+ * - 30.3.1.1.7 aAlignmentErrors -+ * -+ * @rx_fifo_errors: Receiver FIFO error counter. -+ * -+ * Historically the count of overflow events. Those events may be -+ * reported in the receive descriptors or via interrupts, and may -+ * not correspond one-to-one with dropped packets. -+ * -+ * This statistics was used interchangeably with @rx_over_errors. -+ * Not recommended for use in drivers for high speed interfaces. -+ * -+ * This statistic is used on software devices, e.g. to count software -+ * packet queue overflow (can) or sequencing errors (GRE). -+ * -+ * @rx_missed_errors: Count of packets missed by the host. -+ * Folded into the "drop" counter in `/proc/net/dev`. -+ * -+ * Counts number of packets dropped by the device due to lack -+ * of buffer space. This usually indicates that the host interface -+ * is slower than the network interface, or host is not keeping up -+ * with the receive packet rate. -+ * -+ * This statistic corresponds to hardware events and is not used -+ * on software devices. -+ * -+ * @tx_aborted_errors: -+ * Part of aggregate "carrier" errors in `/proc/net/dev`. -+ * For IEEE 802.3 devices capable of half-duplex operation this counter -+ * must be equivalent to: -+ * -+ * - 30.3.1.1.11 aFramesAbortedDueToXSColls -+ * -+ * High speed interfaces may use this counter as a general device -+ * discard counter. -+ * -+ * @tx_carrier_errors: Number of frame transmission errors due to loss -+ * of carrier during transmission. -+ * Part of aggregate "carrier" errors in `/proc/net/dev`. -+ * -+ * For IEEE 802.3 devices this counter must be equivalent to: -+ * -+ * - 30.3.1.1.13 aCarrierSenseErrors -+ * -+ * @tx_fifo_errors: Number of frame transmission errors due to device -+ * FIFO underrun / underflow. This condition occurs when the device -+ * begins transmission of a frame but is unable to deliver the -+ * entire frame to the transmitter in time for transmission. -+ * Part of aggregate "carrier" errors in `/proc/net/dev`. -+ * -+ * @tx_heartbeat_errors: Number of Heartbeat / SQE Test errors for -+ * old half-duplex Ethernet. -+ * Part of aggregate "carrier" errors in `/proc/net/dev`. -+ * -+ * For IEEE 802.3 devices possibly equivalent to: -+ * -+ * - 30.3.2.1.4 aSQETestErrors -+ * -+ * @tx_window_errors: Number of frame transmission errors due -+ * to late collisions (for Ethernet - after the first 64B of transmission). -+ * Part of aggregate "carrier" errors in `/proc/net/dev`. -+ * -+ * For IEEE 802.3 devices this counter must be equivalent to: -+ * -+ * - 30.3.1.1.10 aLateCollisions -+ * -+ * @rx_compressed: Number of correctly received compressed packets. -+ * This counters is only meaningful for interfaces which support -+ * packet compression (e.g. CSLIP, PPP). -+ * -+ * @tx_compressed: Number of transmitted compressed packets. -+ * This counters is only meaningful for interfaces which support -+ * packet compression (e.g. CSLIP, PPP). -+ * -+ * @rx_nohandler: Number of packets received on the interface -+ * but dropped by the networking stack because the device is -+ * not designated to receive packets (e.g. backup link in a bond). -+ */ - struct rtnl_link_stats64 { -- __u64 rx_packets; /* total packets received */ -- __u64 tx_packets; /* total packets transmitted */ -- __u64 rx_bytes; /* total bytes received */ -- __u64 tx_bytes; /* total bytes transmitted */ -- __u64 rx_errors; /* bad packets received */ -- __u64 tx_errors; /* packet transmit problems */ -- __u64 rx_dropped; /* no space in linux buffers */ -- __u64 tx_dropped; /* no space available in linux */ -- __u64 multicast; /* multicast packets received */ -+ __u64 rx_packets; -+ __u64 tx_packets; -+ __u64 rx_bytes; -+ __u64 tx_bytes; -+ __u64 rx_errors; -+ __u64 tx_errors; -+ __u64 rx_dropped; -+ __u64 tx_dropped; -+ __u64 multicast; - __u64 collisions; - - /* detailed rx_errors: */ - __u64 rx_length_errors; -- __u64 rx_over_errors; /* receiver ring buff overflow */ -- __u64 rx_crc_errors; /* recved pkt with crc error */ -- __u64 rx_frame_errors; /* recv'd frame alignment error */ -- __u64 rx_fifo_errors; /* recv'r fifo overrun */ -- __u64 rx_missed_errors; /* receiver missed packet */ -+ __u64 rx_over_errors; -+ __u64 rx_crc_errors; -+ __u64 rx_frame_errors; -+ __u64 rx_fifo_errors; -+ __u64 rx_missed_errors; - - /* detailed tx_errors */ - __u64 tx_aborted_errors; -@@ -71,8 +242,7 @@ struct rtnl_link_stats64 { - /* for cslip etc */ - __u64 rx_compressed; - __u64 tx_compressed; -- -- __u64 rx_nohandler; /* dropped, no handler found */ -+ __u64 rx_nohandler; - }; - - /* The struct should be in sync with struct ifmap */ -@@ -170,12 +340,22 @@ enum { - IFLA_PROP_LIST, - IFLA_ALT_IFNAME, /* Alternative ifname */ - IFLA_PERM_ADDRESS, -+ IFLA_PROTO_DOWN_REASON, - __IFLA_MAX - }; - - - #define IFLA_MAX (__IFLA_MAX - 1) - -+enum { -+ IFLA_PROTO_DOWN_REASON_UNSPEC, -+ IFLA_PROTO_DOWN_REASON_MASK, /* u32, mask for reason bits */ -+ IFLA_PROTO_DOWN_REASON_VALUE, /* u32, reason bit value */ -+ -+ __IFLA_PROTO_DOWN_REASON_CNT, -+ IFLA_PROTO_DOWN_REASON_MAX = __IFLA_PROTO_DOWN_REASON_CNT - 1 -+}; -+ - /* backwards compatibility for userspace */ - #define IFLA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg)))) - #define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg)) -@@ -342,6 +522,7 @@ enum { - IFLA_BRPORT_ISOLATED, - IFLA_BRPORT_BACKUP_PORT, - IFLA_BRPORT_MRP_RING_OPEN, -+ IFLA_BRPORT_MRP_IN_OPEN, - __IFLA_BRPORT_MAX - }; - #define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1) -@@ -904,7 +1085,14 @@ enum { - #define IFLA_IPOIB_MAX (__IFLA_IPOIB_MAX - 1) - - --/* HSR section */ -+/* HSR/PRP section, both uses same interface */ -+ -+/* Different redundancy protocols for hsr device */ -+enum { -+ HSR_PROTOCOL_HSR, -+ HSR_PROTOCOL_PRP, -+ HSR_PROTOCOL_MAX, -+}; - - enum { - IFLA_HSR_UNSPEC, -@@ -914,6 +1102,9 @@ enum { - IFLA_HSR_SUPERVISION_ADDR, /* Supervision frame multicast addr */ - IFLA_HSR_SEQ_NR, - IFLA_HSR_VERSION, /* HSR version */ -+ IFLA_HSR_PROTOCOL, /* Indicate different protocol than -+ * HSR. For example PRP. -+ */ - __IFLA_HSR_MAX, - }; - -diff --git a/uapi/linux/rtnetlink.h b/uapi/linux/rtnetlink.h -index bcb1ba4d0146..5ad84e663d01 100644 ---- a/uapi/linux/rtnetlink.h -+++ b/uapi/linux/rtnetlink.h -@@ -257,12 +257,12 @@ enum { - - /* rtm_protocol */ - --#define RTPROT_UNSPEC 0 --#define RTPROT_REDIRECT 1 /* Route installed by ICMP redirects; -- not used by current IPv4 */ --#define RTPROT_KERNEL 2 /* Route installed by kernel */ --#define RTPROT_BOOT 3 /* Route installed during boot */ --#define RTPROT_STATIC 4 /* Route installed by administrator */ -+#define RTPROT_UNSPEC 0 -+#define RTPROT_REDIRECT 1 /* Route installed by ICMP redirects; -+ not used by current IPv4 */ -+#define RTPROT_KERNEL 2 /* Route installed by kernel */ -+#define RTPROT_BOOT 3 /* Route installed during boot */ -+#define RTPROT_STATIC 4 /* Route installed by administrator */ - - /* Values of protocol >= RTPROT_STATIC are not interpreted by kernel; - they are just passed from user and back as is. -@@ -271,22 +271,23 @@ enum { - avoid conflicts. - */ - --#define RTPROT_GATED 8 /* Apparently, GateD */ --#define RTPROT_RA 9 /* RDISC/ND router advertisements */ --#define RTPROT_MRT 10 /* Merit MRT */ --#define RTPROT_ZEBRA 11 /* Zebra */ --#define RTPROT_BIRD 12 /* BIRD */ --#define RTPROT_DNROUTED 13 /* DECnet routing daemon */ --#define RTPROT_XORP 14 /* XORP */ --#define RTPROT_NTK 15 /* Netsukuku */ --#define RTPROT_DHCP 16 /* DHCP client */ --#define RTPROT_MROUTED 17 /* Multicast daemon */ --#define RTPROT_BABEL 42 /* Babel daemon */ --#define RTPROT_BGP 186 /* BGP Routes */ --#define RTPROT_ISIS 187 /* ISIS Routes */ --#define RTPROT_OSPF 188 /* OSPF Routes */ --#define RTPROT_RIP 189 /* RIP Routes */ --#define RTPROT_EIGRP 192 /* EIGRP Routes */ -+#define RTPROT_GATED 8 /* Apparently, GateD */ -+#define RTPROT_RA 9 /* RDISC/ND router advertisements */ -+#define RTPROT_MRT 10 /* Merit MRT */ -+#define RTPROT_ZEBRA 11 /* Zebra */ -+#define RTPROT_BIRD 12 /* BIRD */ -+#define RTPROT_DNROUTED 13 /* DECnet routing daemon */ -+#define RTPROT_XORP 14 /* XORP */ -+#define RTPROT_NTK 15 /* Netsukuku */ -+#define RTPROT_DHCP 16 /* DHCP client */ -+#define RTPROT_MROUTED 17 /* Multicast daemon */ -+#define RTPROT_KEEPALIVED 18 /* Keepalived daemon */ -+#define RTPROT_BABEL 42 /* Babel daemon */ -+#define RTPROT_BGP 186 /* BGP Routes */ -+#define RTPROT_ISIS 187 /* ISIS Routes */ -+#define RTPROT_OSPF 188 /* OSPF Routes */ -+#define RTPROT_RIP 189 /* RIP Routes */ -+#define RTPROT_EIGRP 192 /* EIGRP Routes */ - - /* rtm_scope - -@@ -775,6 +776,7 @@ enum { - #define RTEXT_FILTER_BRVLAN (1 << 1) - #define RTEXT_FILTER_BRVLAN_COMPRESSED (1 << 2) - #define RTEXT_FILTER_SKIP_STATS (1 << 3) -+#define RTEXT_FILTER_MRP (1 << 4) - - /* End of information exported to user level */ - --- -2.26.2 - diff --git a/0015-update-link-mode-tables.patch b/0015-update-link-mode-tables.patch deleted file mode 100644 index d5e1c5d..0000000 --- a/0015-update-link-mode-tables.patch +++ /dev/null @@ -1,158 +0,0 @@ -From aefd1fcb99c1d64198f315a20e087888d7715632 Mon Sep 17 00:00:00 2001 -From: Michal Kubecek -Date: Wed, 16 Sep 2020 23:12:18 +0200 -Subject: [PATCH 15/17] update link mode tables - -Update tables of link modes to cover all modes currently defined in uapi -header: - - - link_modes[] array in netlink/settings.c - - all_advertised_modes_bits[] array in ethtool.c - - table of modes and corresponding bit values in manual page - -In the manual page table, fix also whitespace and order inconsistencies. - -Signed-off-by: Michal Kubecek -(cherry picked from commit 63130d0b00040136629988a1170da93ae742ca51) ---- - ethtool.8.in | 32 ++++++++++++++++++++++++++------ - ethtool.c | 24 ++++++++++++++++++++++-- - netlink/settings.c | 15 +++++++++++++++ - 3 files changed, 63 insertions(+), 8 deletions(-) - -diff --git a/ethtool.8.in b/ethtool.8.in -index a50a4769895c..12866dc456cf 100644 ---- a/ethtool.8.in -+++ b/ethtool.8.in -@@ -721,21 +721,21 @@ lB l lB. - 0x80000000000000000 100baseT1 Full - 0x010 1000baseT Half (not supported by IEEE standards) - 0x020 1000baseT Full --0x100000000000000000 1000baseT1 Full - 0x20000 1000baseKX Full - 0x20000000000 1000baseX Full --0x800000000000 2500baseT Full -+0x100000000000000000 1000baseT1 Full - 0x8000 2500baseX Full (not supported by IEEE standards) -+0x800000000000 2500baseT Full - 0x1000000000000 5000baseT Full - 0x1000 10000baseT Full - 0x40000 10000baseKX4 Full - 0x80000 10000baseKR Full - 0x100000 10000baseR_FEC --0x40000000000 10000baseCR Full --0x80000000000 10000baseSR Full --0x100000000000 10000baseLR Full -+0x40000000000 10000baseCR Full -+0x80000000000 10000baseSR Full -+0x100000000000 10000baseLR Full - 0x200000000000 10000baseLRM Full --0x400000000000 10000baseER Full -+0x400000000000 10000baseER Full - 0x200000 20000baseMLD2 Full (not supported by IEEE standards) - 0x400000 20000baseKR2 Full (not supported by IEEE standards) - 0x80000000 25000baseCR Full -@@ -766,11 +766,31 @@ lB l lB. - 0x800000000000000 100000baseCR2 Full - 0x1000000000000000 100000baseLR2_ER2_FR2 Full - 0x2000000000000000 100000baseDR2 Full -+0x8000000000000000000 100000baseKR Full -+0x10000000000000000000 100000baseSR Full -+0x20000000000000000000 100000baseLR_ER_FR Full -+0x40000000000000000000 100000baseCR Full -+0x80000000000000000000 100000baseDR Full - 0x4000000000000000 200000baseKR4 Full - 0x8000000000000000 200000baseSR4 Full - 0x10000000000000000 200000baseLR4_ER4_FR4 Full - 0x20000000000000000 200000baseDR4 Full - 0x40000000000000000 200000baseCR4 Full -+0x100000000000000000000 200000baseKR2 Full -+0x200000000000000000000 200000baseSR2 Full -+0x400000000000000000000 200000baseLR2_ER2_FR2 Full -+0x800000000000000000000 200000baseDR2 Full -+0x1000000000000000000000 200000baseCR2 Full -+0x200000000000000000 400000baseKR8 Full -+0x400000000000000000 400000baseSR8 Full -+0x800000000000000000 400000baseLR8_ER8_FR8 Full -+0x1000000000000000000 400000baseDR8 Full -+0x2000000000000000000 400000baseCR8 Full -+0x2000000000000000000000 400000baseKR4 Full -+0x4000000000000000000000 400000baseSR4 Full -+0x8000000000000000000000 400000baseLR4_ER4_FR4 Full -+0x10000000000000000000000 400000baseDR4 Full -+0x20000000000000000000000 400000baseCR4 Full - .TE - .TP - .BI phyad \ N -diff --git a/ethtool.c b/ethtool.c -index 606af3e6b48f..2e24e98187d2 100644 ---- a/ethtool.c -+++ b/ethtool.c -@@ -392,9 +392,9 @@ static void init_global_link_mode_masks(void) - ETHTOOL_LINK_MODE_100baseT_Full_BIT, - ETHTOOL_LINK_MODE_1000baseT_Half_BIT, - ETHTOOL_LINK_MODE_1000baseT_Full_BIT, -- ETHTOOL_LINK_MODE_1000baseKX_Full_BIT, -- ETHTOOL_LINK_MODE_2500baseX_Full_BIT, - ETHTOOL_LINK_MODE_10000baseT_Full_BIT, -+ ETHTOOL_LINK_MODE_2500baseX_Full_BIT, -+ ETHTOOL_LINK_MODE_1000baseKX_Full_BIT, - ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT, - ETHTOOL_LINK_MODE_10000baseKR_Full_BIT, - ETHTOOL_LINK_MODE_10000baseR_FEC_BIT, -@@ -443,6 +443,26 @@ static void init_global_link_mode_masks(void) - ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT, - ETHTOOL_LINK_MODE_100baseT1_Full_BIT, - ETHTOOL_LINK_MODE_1000baseT1_Full_BIT, -+ ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT, -+ ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT, -+ ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT, -+ ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT, -+ ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT, -+ ETHTOOL_LINK_MODE_100000baseKR_Full_BIT, -+ ETHTOOL_LINK_MODE_100000baseSR_Full_BIT, -+ ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT, -+ ETHTOOL_LINK_MODE_100000baseCR_Full_BIT, -+ ETHTOOL_LINK_MODE_100000baseDR_Full_BIT, -+ ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT, -+ ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT, -+ ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT, -+ ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT, -+ ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT, -+ ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT, -+ ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT, -+ ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT, -+ ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT, -+ ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT, - }; - static const enum ethtool_link_mode_bit_indices - additional_advertised_flags_bits[] = { -diff --git a/netlink/settings.c b/netlink/settings.c -index d1da995b434c..3a9518a7e12b 100644 ---- a/netlink/settings.c -+++ b/netlink/settings.c -@@ -147,6 +147,21 @@ static const struct link_mode_info link_modes[] = { - [ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT] = __REAL(400000), - [ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT] = __REAL(400000), - [ETHTOOL_LINK_MODE_FEC_LLRS_BIT] = __SPECIAL(FEC), -+ [ETHTOOL_LINK_MODE_100000baseKR_Full_BIT] = __REAL(100000), -+ [ETHTOOL_LINK_MODE_100000baseSR_Full_BIT] = __REAL(100000), -+ [ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT] = __REAL(100000), -+ [ETHTOOL_LINK_MODE_100000baseCR_Full_BIT] = __REAL(100000), -+ [ETHTOOL_LINK_MODE_100000baseDR_Full_BIT] = __REAL(100000), -+ [ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT] = __REAL(200000), -+ [ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT] = __REAL(200000), -+ [ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT] = __REAL(200000), -+ [ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT] = __REAL(200000), -+ [ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT] = __REAL(200000), -+ [ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT] = __REAL(400000), -+ [ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT] = __REAL(400000), -+ [ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT] = __REAL(400000), -+ [ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT] = __REAL(400000), -+ [ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT] = __REAL(400000), - }; - const unsigned int link_modes_count = ARRAY_SIZE(link_modes); - --- -2.26.2 - diff --git a/0016-netlink-return-ENOMEM-when-calloc-fails.patch b/0016-netlink-return-ENOMEM-when-calloc-fails.patch deleted file mode 100644 index 6140036..0000000 --- a/0016-netlink-return-ENOMEM-when-calloc-fails.patch +++ /dev/null @@ -1,50 +0,0 @@ -From d0362097e60d227bac4f66a06891ee1d807d2c48 Mon Sep 17 00:00:00 2001 -From: Ivan Vecera -Date: Thu, 24 Sep 2020 19:51:47 +0200 -Subject: [PATCH 16/17] netlink: return -ENOMEM when calloc fails - -Fixes: f2c17e107900 ("netlink: add netlink handler for gfeatures (-k)") - -Cc: Michal Kubecek -Signed-off-by: Ivan Vecera ---- - netlink/features.c | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -diff --git a/netlink/features.c b/netlink/features.c -index 3f1240437350..b2cf57eea660 100644 ---- a/netlink/features.c -+++ b/netlink/features.c -@@ -112,16 +112,17 @@ int dump_features(const struct nlattr *const *tb, - unsigned int *feature_flags = NULL; - struct feature_results results; - unsigned int i, j; -- int ret; -+ int ret = 0; - - ret = prepare_feature_results(tb, &results); - if (ret < 0) - return -EFAULT; - -- ret = -ENOMEM; - feature_flags = calloc(results.count, sizeof(feature_flags[0])); -- if (!feature_flags) -+ if (!feature_flags) { -+ ret = -ENOMEM; - goto out_free; -+ } - - /* map netdev features to legacy flags */ - for (i = 0; i < results.count; i++) { -@@ -184,7 +185,7 @@ int dump_features(const struct nlattr *const *tb, - - out_free: - free(feature_flags); -- return 0; -+ return ret; - } - - int features_reply_cb(const struct nlmsghdr *nlhdr, void *data) --- -2.26.2 - diff --git a/0017-netlink-fix-memory-leak.patch b/0017-netlink-fix-memory-leak.patch deleted file mode 100644 index 306bd38..0000000 --- a/0017-netlink-fix-memory-leak.patch +++ /dev/null @@ -1,35 +0,0 @@ -From f1bb0c6263ca11bedea9e18bc9753c6b1d4c924d Mon Sep 17 00:00:00 2001 -From: Ivan Vecera -Date: Thu, 24 Sep 2020 20:10:31 +0200 -Subject: [PATCH 17/17] netlink: fix memory leak - -Potentially allocated memory allocated for mask is not freed when -the allocation for value fails. - -Fixes: 81a30f416ec7 ("netlink: add bitset command line parser handlers") - -Cc: Michal Kubecek -Signed-off-by: Ivan Vecera ---- - netlink/parser.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/netlink/parser.c b/netlink/parser.c -index c5a368a65a7a..3b25f5d5a88e 100644 ---- a/netlink/parser.c -+++ b/netlink/parser.c -@@ -630,8 +630,10 @@ static int parse_numeric_bitset(struct nl_context *nlctx, uint16_t type, - } - - value = calloc(nwords, sizeof(uint32_t)); -- if (!value) -+ if (!value) { -+ free(mask); - return -ENOMEM; -+ } - ret = __parse_num_string(arg, len1, value, force_hex1); - if (ret < 0) { - parser_err_invalid_value(nlctx, arg); --- -2.26.2 - diff --git a/0018-fix-memory-leaks-in-do_sfeatures.patch b/0018-fix-memory-leaks-in-do_sfeatures.patch deleted file mode 100644 index 6fa5fcc..0000000 --- a/0018-fix-memory-leaks-in-do_sfeatures.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 78b5b29e6cf286ce687e7b4d42745fb06cfb2353 Mon Sep 17 00:00:00 2001 -From: Ivan Vecera -Date: Fri, 25 Sep 2020 08:39:16 +0200 -Subject: [PATCH 18/19] fix memory leaks in do_sfeatures() - -Memory blocks referenced by new_state and old_state are never freed. -For efeatures there is no need to check pointer as free() can be called -with NULL parameter. - -Fixes: 6042804cf6ec ("Change -k/-K options to use ETHTOOL_{G,S}FEATURES") - -Cc: Michal Kubecek -Signed-off-by: Ivan Vecera ---- - ethtool.c | 13 +++++++------ - 1 file changed, 7 insertions(+), 6 deletions(-) - -diff --git a/ethtool.c b/ethtool.c -index 2e24e98187d2..32ef80add923 100644 ---- a/ethtool.c -+++ b/ethtool.c -@@ -2392,9 +2392,10 @@ static int do_sfeatures(struct cmd_context *ctx) - int any_changed = 0, any_mismatch = 0; - u32 off_flags_wanted = 0; - u32 off_flags_mask = 0; -- struct ethtool_sfeatures *efeatures; -+ struct ethtool_sfeatures *efeatures = NULL; -+ struct feature_state *old_state = NULL; -+ struct feature_state *new_state = NULL; - struct cmdline_info *cmdline_features; -- struct feature_state *old_state, *new_state; - struct ethtool_value eval; - unsigned int i, j; - int err, rc; -@@ -2418,8 +2419,6 @@ static int do_sfeatures(struct cmd_context *ctx) - memset(efeatures->features, 0, - FEATURE_BITS_TO_BLOCKS(defs->n_features) * - sizeof(efeatures->features[0])); -- } else { -- efeatures = NULL; - } - - /* Generate cmdline_info for legacy flags and kernel-named -@@ -2578,9 +2577,11 @@ static int do_sfeatures(struct cmd_context *ctx) - rc = 0; - - err: -+ free(new_state); -+ free(old_state); - free(defs); -- if (efeatures) -- free(efeatures); -+ free(efeatures); -+ - return rc; - } - --- -2.26.2 - diff --git a/0019-netlink-fix-copy-paste-error-in-rtm_link_summary.patch b/0019-netlink-fix-copy-paste-error-in-rtm_link_summary.patch deleted file mode 100644 index 7542e7f..0000000 --- a/0019-netlink-fix-copy-paste-error-in-rtm_link_summary.patch +++ /dev/null @@ -1,29 +0,0 @@ -From d76260a0c91c0590f9c82a2771fd10f40b8c81fd Mon Sep 17 00:00:00 2001 -From: Ivan Vecera -Date: Fri, 25 Sep 2020 09:03:57 +0200 -Subject: [PATCH 19/19] netlink: fix copy-paste error in rtm_link_summary() - -Fixes: bdfffab54933 ("netlink: message format descriptions for rtnetlink") - -Cc: Michal Kubecek -Signed-off-by: Ivan Vecera ---- - netlink/prettymsg.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/netlink/prettymsg.c b/netlink/prettymsg.c -index 9e62bebe615e..f992dcaf071f 100644 ---- a/netlink/prettymsg.c -+++ b/netlink/prettymsg.c -@@ -202,7 +202,7 @@ static void rtm_link_summary(const struct ifinfomsg *ifinfo) - printf(" ifindex=%d", ifinfo->ifi_index); - if (ifinfo->ifi_flags) - printf(" flags=0x%x", ifinfo->ifi_flags); -- if (ifinfo->ifi_flags) -+ if (ifinfo->ifi_change) - printf(" change=0x%x", ifinfo->ifi_change); - } - --- -2.26.2 - diff --git a/0020-uapi-linux-update-kernel-UAPI-header-files.patch b/0020-uapi-linux-update-kernel-UAPI-header-files.patch deleted file mode 100644 index f36f8b9..0000000 --- a/0020-uapi-linux-update-kernel-UAPI-header-files.patch +++ /dev/null @@ -1,117 +0,0 @@ -From 8fa6c3a1bc2536816e961a4ef865c67218683bf2 Mon Sep 17 00:00:00 2001 -From: Amit Cohen -Date: Thu, 2 Jul 2020 16:11:09 +0300 -Subject: [PATCH 20/26] uapi: linux: update kernel UAPI header files - -Add copies of kernel UAPI header files needed for link extended state: - uapi/linux/ethtool.h - uapi/linux/ethtool_netlink.h - -The copies are taken from net-next tree, -commit ecc31c60240b ("ethtool: Add link extended state") - -Signed-off-by: Amit Cohen -Signed-off-by: Michal Kubecek -(cherry picked from commit dc46dd315071190b880dba9b48dd4521cf7c133e) ---- - uapi/linux/ethtool.h | 70 ++++++++++++++++++++++++++++++++++++ - uapi/linux/ethtool_netlink.h | 2 ++ - 2 files changed, 72 insertions(+) - -diff --git a/uapi/linux/ethtool.h b/uapi/linux/ethtool.h -index 355e718a99fd..847ccd0b1fce 100644 ---- a/uapi/linux/ethtool.h -+++ b/uapi/linux/ethtool.h -@@ -577,6 +577,76 @@ struct ethtool_pauseparam { - __u32 tx_pause; - }; - -+/** -+ * enum ethtool_link_ext_state - link extended state -+ */ -+enum ethtool_link_ext_state { -+ ETHTOOL_LINK_EXT_STATE_AUTONEG, -+ ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE, -+ ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH, -+ ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY, -+ ETHTOOL_LINK_EXT_STATE_NO_CABLE, -+ ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE, -+ ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE, -+ ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE, -+ ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED, -+ ETHTOOL_LINK_EXT_STATE_OVERHEAT, -+}; -+ -+/** -+ * enum ethtool_link_ext_substate_autoneg - more information in addition to -+ * ETHTOOL_LINK_EXT_STATE_AUTONEG. -+ */ -+enum ethtool_link_ext_substate_autoneg { -+ ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED = 1, -+ ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED, -+ ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED, -+ ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE, -+ ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE, -+ ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD, -+}; -+ -+/** -+ * enum ethtool_link_ext_substate_link_training - more information in addition to -+ * ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE. -+ */ -+enum ethtool_link_ext_substate_link_training { -+ ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED = 1, -+ ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT, -+ ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY, -+ ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT, -+}; -+ -+/** -+ * enum ethtool_link_ext_substate_logical_mismatch - more information in addition -+ * to ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH. -+ */ -+enum ethtool_link_ext_substate_link_logical_mismatch { -+ ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK = 1, -+ ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK, -+ ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS, -+ ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED, -+ ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED, -+}; -+ -+/** -+ * enum ethtool_link_ext_substate_bad_signal_integrity - more information in -+ * addition to ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY. -+ */ -+enum ethtool_link_ext_substate_bad_signal_integrity { -+ ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 1, -+ ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE, -+}; -+ -+/** -+ * enum ethtool_link_ext_substate_cable_issue - more information in -+ * addition to ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE. -+ */ -+enum ethtool_link_ext_substate_cable_issue { -+ ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE = 1, -+ ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE, -+}; -+ - #define ETH_GSTRING_LEN 32 - - /** -diff --git a/uapi/linux/ethtool_netlink.h b/uapi/linux/ethtool_netlink.h -index c1b4d67d35d1..cebdb52e6a05 100644 ---- a/uapi/linux/ethtool_netlink.h -+++ b/uapi/linux/ethtool_netlink.h -@@ -237,6 +237,8 @@ enum { - ETHTOOL_A_LINKSTATE_LINK, /* u8 */ - ETHTOOL_A_LINKSTATE_SQI, /* u32 */ - ETHTOOL_A_LINKSTATE_SQI_MAX, /* u32 */ -+ ETHTOOL_A_LINKSTATE_EXT_STATE, /* u8 */ -+ ETHTOOL_A_LINKSTATE_EXT_SUBSTATE, /* u8 */ - - /* add new constants above here */ - __ETHTOOL_A_LINKSTATE_CNT, --- -2.26.2 - diff --git a/0021-netlink-settings-expand-linkstate_reply_cb-to-suppor.patch b/0021-netlink-settings-expand-linkstate_reply_cb-to-suppor.patch deleted file mode 100644 index 1b5bcf3..0000000 --- a/0021-netlink-settings-expand-linkstate_reply_cb-to-suppor.patch +++ /dev/null @@ -1,187 +0,0 @@ -From abc33073ed6d4528d3c951cc719a155a6e1178cd Mon Sep 17 00:00:00 2001 -From: Amit Cohen -Date: Thu, 2 Jul 2020 16:11:11 +0300 -Subject: [PATCH 21/26] netlink: settings: expand linkstate_reply_cb() to - support link extended state - -Print extended state in addition to link state. - -In case that extended state is not provided, print state only. -If extended substate is provided in addition to the extended state, -print it also. - -Signed-off-by: Amit Cohen -Signed-off-by: Michal Kubecek -(cherry picked from commit ba6367d2bb32173166b91fbcc053865c99ca7c57) ---- - netlink/settings.c | 147 ++++++++++++++++++++++++++++++++++++++++++++- - 1 file changed, 146 insertions(+), 1 deletion(-) - -diff --git a/netlink/settings.c b/netlink/settings.c -index 3a9518a7e12b..75db15e5069c 100644 ---- a/netlink/settings.c -+++ b/netlink/settings.c -@@ -565,6 +565,149 @@ int linkinfo_reply_cb(const struct nlmsghdr *nlhdr, void *data) - return MNL_CB_OK; - } - -+static const char *get_enum_string(const char *const *string_table, unsigned int n_string_table, -+ unsigned int val) -+{ -+ if (val >= n_string_table || !string_table[val]) -+ return NULL; -+ else -+ return string_table[val]; -+} -+ -+static const char *const names_link_ext_state[] = { -+ [ETHTOOL_LINK_EXT_STATE_AUTONEG] = "Autoneg", -+ [ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE] = "Link training failure", -+ [ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH] = "Logical mismatch", -+ [ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY] = "Bad signal integrity", -+ [ETHTOOL_LINK_EXT_STATE_NO_CABLE] = "No cable", -+ [ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE] = "Cable issue", -+ [ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE] = "EEPROM issue", -+ [ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE] = "Calibration failure", -+ [ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED] = "Power budget exceeded", -+ [ETHTOOL_LINK_EXT_STATE_OVERHEAT] = "Overheat", -+}; -+ -+static const char *const names_autoneg_link_ext_substate[] = { -+ [ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED] = -+ "No partner detected", -+ [ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED] = -+ "Ack not received", -+ [ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED] = -+ "Next page exchange failed", -+ [ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE] = -+ "No partner detected during force mode", -+ [ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE] = -+ "FEC mismatch during override", -+ [ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD] = -+ "No HCD", -+}; -+ -+static const char *const names_link_training_link_ext_substate[] = { -+ [ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED] = -+ "KR frame lock not acquired", -+ [ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT] = -+ "KR link inhibit timeout", -+ [ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY] = -+ "KR Link partner did not set receiver ready", -+ [ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT] = -+ "Remote side is not ready yet", -+}; -+ -+static const char *const names_link_logical_mismatch_link_ext_substate[] = { -+ [ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK] = -+ "PCS did not acquire block lock", -+ [ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK] = -+ "PCS did not acquire AM lock", -+ [ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS] = -+ "PCS did not get align_status", -+ [ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED] = -+ "FC FEC is not locked", -+ [ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED] = -+ "RS FEC is not locked", -+}; -+ -+static const char *const names_bad_signal_integrity_link_ext_substate[] = { -+ [ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS] = -+ "Large number of physical errors", -+ [ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE] = -+ "Unsupported rate", -+}; -+ -+static const char *const names_cable_issue_link_ext_substate[] = { -+ [ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE] = -+ "Unsupported cable", -+ [ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE] = -+ "Cable test failure", -+}; -+ -+static const char *link_ext_substate_get(uint8_t link_ext_state_val, uint8_t link_ext_substate_val) -+{ -+ switch (link_ext_state_val) { -+ case ETHTOOL_LINK_EXT_STATE_AUTONEG: -+ return get_enum_string(names_autoneg_link_ext_substate, -+ ARRAY_SIZE(names_autoneg_link_ext_substate), -+ link_ext_substate_val); -+ case ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE: -+ return get_enum_string(names_link_training_link_ext_substate, -+ ARRAY_SIZE(names_link_training_link_ext_substate), -+ link_ext_substate_val); -+ case ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH: -+ return get_enum_string(names_link_logical_mismatch_link_ext_substate, -+ ARRAY_SIZE(names_link_logical_mismatch_link_ext_substate), -+ link_ext_substate_val); -+ case ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY: -+ return get_enum_string(names_bad_signal_integrity_link_ext_substate, -+ ARRAY_SIZE(names_bad_signal_integrity_link_ext_substate), -+ link_ext_substate_val); -+ case ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE: -+ return get_enum_string(names_cable_issue_link_ext_substate, -+ ARRAY_SIZE(names_cable_issue_link_ext_substate), -+ link_ext_substate_val); -+ default: -+ return NULL; -+ } -+} -+ -+static void linkstate_link_ext_substate_print(const struct nlattr *tb[], struct nl_context *nlctx, -+ uint8_t link_ext_state_val) -+{ -+ uint8_t link_ext_substate_val; -+ const char *link_ext_substate_str; -+ -+ if (!tb[ETHTOOL_A_LINKSTATE_EXT_SUBSTATE]) -+ return; -+ -+ link_ext_substate_val = mnl_attr_get_u8(tb[ETHTOOL_A_LINKSTATE_EXT_SUBSTATE]); -+ -+ link_ext_substate_str = link_ext_substate_get(link_ext_state_val, link_ext_substate_val); -+ if (!link_ext_substate_str) -+ printf(", %u", link_ext_substate_val); -+ else -+ printf(", %s", link_ext_substate_str); -+} -+ -+static void linkstate_link_ext_state_print(const struct nlattr *tb[], struct nl_context *nlctx) -+{ -+ uint8_t link_ext_state_val; -+ const char *link_ext_state_str; -+ -+ if (!tb[ETHTOOL_A_LINKSTATE_EXT_STATE]) -+ return; -+ -+ link_ext_state_val = mnl_attr_get_u8(tb[ETHTOOL_A_LINKSTATE_EXT_STATE]); -+ -+ link_ext_state_str = get_enum_string(names_link_ext_state, -+ ARRAY_SIZE(names_link_ext_state), -+ link_ext_state_val); -+ if (!link_ext_state_str) -+ printf(" (%u", link_ext_state_val); -+ else -+ printf(" (%s", link_ext_state_str); -+ -+ linkstate_link_ext_substate_print(tb, nlctx, link_ext_state_val); -+ printf(")"); -+} -+ - int linkstate_reply_cb(const struct nlmsghdr *nlhdr, void *data) - { - const struct nlattr *tb[ETHTOOL_A_LINKSTATE_MAX + 1] = {}; -@@ -585,7 +728,9 @@ int linkstate_reply_cb(const struct nlmsghdr *nlhdr, void *data) - uint8_t val = mnl_attr_get_u8(tb[ETHTOOL_A_LINKSTATE_LINK]); - - print_banner(nlctx); -- printf("\tLink detected: %s\n", val ? "yes" : "no"); -+ printf("\tLink detected: %s", val ? "yes" : "no"); -+ linkstate_link_ext_state_print(tb, nlctx); -+ printf("\n"); - } - - if (tb[ETHTOOL_A_LINKSTATE_SQI]) { --- -2.26.2 - diff --git a/0022-netlink-prepare-for-more-per-op-info.patch b/0022-netlink-prepare-for-more-per-op-info.patch deleted file mode 100644 index 4b3a008..0000000 --- a/0022-netlink-prepare-for-more-per-op-info.patch +++ /dev/null @@ -1,126 +0,0 @@ -From 15e57173470b0929fd649bc7b0376d41c786ddbe Mon Sep 17 00:00:00 2001 -From: Jakub Kicinski -Date: Sun, 18 Oct 2020 14:31:49 -0700 -Subject: [PATCH 22/26] netlink: prepare for more per-op info - -We stored an array of op flags, to check if operations are -supported. Make that array a structure rather than plain -uint32_t in preparation for storing more state. - -v3: new patch - -Signed-off-by: Jakub Kicinski -Signed-off-by: Michal Kubecek -(cherry picked from commit 8d36270be3c06b99eba281ccf341ebfab555c6b6) ---- - netlink/netlink.c | 25 +++++++++++++------------ - netlink/netlink.h | 6 +++++- - 2 files changed, 18 insertions(+), 13 deletions(-) - -diff --git a/netlink/netlink.c b/netlink/netlink.c -index e42d57076a4b..86dc1efdf5ce 100644 ---- a/netlink/netlink.c -+++ b/netlink/netlink.c -@@ -120,19 +120,19 @@ bool netlink_cmd_check(struct cmd_context *ctx, unsigned int cmd, - nlctx->wildcard_unsupported = true; - return true; - } -- if (!nlctx->ops_flags) { -+ if (!nlctx->ops_info) { - nlctx->ioctl_fallback = true; - return false; - } -- if (cmd > ETHTOOL_MSG_USER_MAX || !nlctx->ops_flags[cmd]) { -+ if (cmd > ETHTOOL_MSG_USER_MAX || !nlctx->ops_info[cmd].op_flags) { - nlctx->ioctl_fallback = true; - return true; - } - -- if (is_dump && !(nlctx->ops_flags[cmd] & GENL_CMD_CAP_DUMP)) -+ if (is_dump && !(nlctx->ops_info[cmd].op_flags & GENL_CMD_CAP_DUMP)) - nlctx->wildcard_unsupported = true; - -- return !(nlctx->ops_flags[cmd] & cap); -+ return !(nlctx->ops_info[cmd].op_flags & cap); - } - - /* initialization */ -@@ -140,12 +140,12 @@ bool netlink_cmd_check(struct cmd_context *ctx, unsigned int cmd, - static int genl_read_ops(struct nl_context *nlctx, - const struct nlattr *ops_attr) - { -+ struct nl_op_info *ops_info; - struct nlattr *op_attr; -- uint32_t *ops_flags; - int ret; - -- ops_flags = calloc(__ETHTOOL_MSG_USER_CNT, sizeof(ops_flags[0])); -- if (!ops_flags) -+ ops_info = calloc(__ETHTOOL_MSG_USER_CNT, sizeof(ops_info[0])); -+ if (!ops_info) - return -ENOMEM; - - mnl_attr_for_each_nested(op_attr, ops_attr) { -@@ -163,13 +163,14 @@ static int genl_read_ops(struct nl_context *nlctx, - if (op_id >= __ETHTOOL_MSG_USER_CNT) - continue; - -- ops_flags[op_id] = mnl_attr_get_u32(tb[CTRL_ATTR_OP_FLAGS]); -+ ops_info[op_id].op_flags = -+ mnl_attr_get_u32(tb[CTRL_ATTR_OP_FLAGS]); - } - -- nlctx->ops_flags = ops_flags; -+ nlctx->ops_info = ops_info; - return 0; - err: -- free(ops_flags); -+ free(ops_info); - return ret; - } - -@@ -273,7 +274,7 @@ int netlink_init(struct cmd_context *ctx) - out_nlsk: - nlsock_done(nlctx->ethnl_socket); - out_free: -- free(nlctx->ops_flags); -+ free(nlctx->ops_info); - free(nlctx); - return ret; - } -@@ -283,7 +284,7 @@ static void netlink_done(struct cmd_context *ctx) - if (!ctx->nlctx) - return; - -- free(ctx->nlctx->ops_flags); -+ free(ctx->nlctx->ops_info); - free(ctx->nlctx); - ctx->nlctx = NULL; - cleanup_all_strings(); -diff --git a/netlink/netlink.h b/netlink/netlink.h -index dd4a02bcc916..61a072db8ed9 100644 ---- a/netlink/netlink.h -+++ b/netlink/netlink.h -@@ -25,6 +25,10 @@ enum link_mode_class { - LM_CLASS_FEC, - }; - -+struct nl_op_info { -+ uint32_t op_flags; -+}; -+ - struct nl_context { - struct cmd_context *ctx; - void *cmd_private; -@@ -34,7 +38,7 @@ struct nl_context { - unsigned int suppress_nlerr; - uint16_t ethnl_fam; - uint32_t ethnl_mongrp; -- uint32_t *ops_flags; -+ struct nl_op_info *ops_info; - struct nl_socket *ethnl_socket; - struct nl_socket *ethnl2_socket; - struct nl_socket *rtnl_socket; --- -2.26.2 - diff --git a/0023-netlink-fix-use-after-free-in-netlink_run_handler.patch b/0023-netlink-fix-use-after-free-in-netlink_run_handler.patch deleted file mode 100644 index 45cfd61..0000000 --- a/0023-netlink-fix-use-after-free-in-netlink_run_handler.patch +++ /dev/null @@ -1,53 +0,0 @@ -From ef1675823905ff09cb5e551700a124d0133648b7 Mon Sep 17 00:00:00 2001 -From: Michal Kubecek -Date: Mon, 9 Nov 2020 13:30:54 +0100 -Subject: [PATCH 23/26] netlink: fix use after free in netlink_run_handler() - -Valgrind detected use after free in netlink_run_handler(): some members of -struct nl_context are accessed after the netlink context is freed by -netlink_done(). Use local variables to store the two flags and check them -instead. - -Fixes: 6c19c0d559c8 ("netlink: use genetlink ops information to decide about fallback") -Signed-off-by: Michal Kubecek -(cherry picked from commit 29b38ea218bd978d1950e12cc24da98215a1eeef) ---- - netlink/netlink.c | 10 +++++++--- - 1 file changed, 7 insertions(+), 3 deletions(-) - -diff --git a/netlink/netlink.c b/netlink/netlink.c -index 86dc1efdf5ce..2a12bb8b1759 100644 ---- a/netlink/netlink.c -+++ b/netlink/netlink.c -@@ -303,6 +303,7 @@ void netlink_run_handler(struct cmd_context *ctx, nl_func_t nlfunc, - bool no_fallback) - { - bool wildcard = ctx->devname && !strcmp(ctx->devname, WILDCARD_DEVNAME); -+ bool wildcard_unsupported, ioctl_fallback; - struct nl_context *nlctx; - const char *reason; - int ret; -@@ -324,14 +325,17 @@ void netlink_run_handler(struct cmd_context *ctx, nl_func_t nlfunc, - nlctx = ctx->nlctx; - - ret = nlfunc(ctx); -+ wildcard_unsupported = nlctx->wildcard_unsupported; -+ ioctl_fallback = nlctx->ioctl_fallback; - netlink_done(ctx); -- if (no_fallback || ret != -EOPNOTSUPP || !nlctx->ioctl_fallback) { -- if (nlctx->wildcard_unsupported) -+ -+ if (no_fallback || ret != -EOPNOTSUPP || !ioctl_fallback) { -+ if (wildcard_unsupported) - fprintf(stderr, "%s\n", - "subcommand does not support wildcard dump"); - exit(ret >= 0 ? ret : 1); - } -- if (nlctx->wildcard_unsupported) -+ if (wildcard_unsupported) - reason = "subcommand does not support wildcard dump"; - else - reason = "kernel netlink support for subcommand missing"; --- -2.26.2 - diff --git a/0024-netlink-fix-leaked-instances-of-struct-nl_socket.patch b/0024-netlink-fix-leaked-instances-of-struct-nl_socket.patch deleted file mode 100644 index 8d6b809..0000000 --- a/0024-netlink-fix-leaked-instances-of-struct-nl_socket.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 5fad40a007b61092161d1e4fd0ffbbc3e7b8ba6c Mon Sep 17 00:00:00 2001 -From: Michal Kubecek -Date: Mon, 9 Nov 2020 13:30:57 +0100 -Subject: [PATCH 24/26] netlink: fix leaked instances of struct nl_socket - -Valgrind detected memory leaks caused by missing cleanup of netlink -context's ethnl_socket, ethnl2_socket and rtnl_socket. Also, contrary to -its description, nlsock_done() does not free struct nl_socket itself. -Fix nlsock_done() to free the structure and use it to dispose of sockets -pointed to by struct nl_context members. - -Fixes: 50efb3cdd2bb ("netlink: netlink socket wrapper and helpers") -Fixes: 87307c30724d ("netlink: initialize ethtool netlink socket") -Fixes: 7f3585b22a4b ("netlink: add handler for permaddr (-P)") -Signed-off-by: Michal Kubecek -(cherry picked from commit d85f57499d75da5c98b73652488f3f62c6f6d8ea) ---- - netlink/netlink.c | 11 ++++++++--- - netlink/nlsock.c | 3 +++ - 2 files changed, 11 insertions(+), 3 deletions(-) - -diff --git a/netlink/netlink.c b/netlink/netlink.c -index 2a12bb8b1759..5677274c2fce 100644 ---- a/netlink/netlink.c -+++ b/netlink/netlink.c -@@ -281,11 +281,16 @@ out_free: - - static void netlink_done(struct cmd_context *ctx) - { -- if (!ctx->nlctx) -+ struct nl_context *nlctx = ctx->nlctx; -+ -+ if (!nlctx) - return; - -- free(ctx->nlctx->ops_info); -- free(ctx->nlctx); -+ nlsock_done(nlctx->ethnl_socket); -+ nlsock_done(nlctx->ethnl2_socket); -+ nlsock_done(nlctx->rtnl_socket); -+ free(nlctx->ops_info); -+ free(nlctx); - ctx->nlctx = NULL; - cleanup_all_strings(); - } -diff --git a/netlink/nlsock.c b/netlink/nlsock.c -index ef31d8c33b29..0ec2738d81d2 100644 ---- a/netlink/nlsock.c -+++ b/netlink/nlsock.c -@@ -395,8 +395,11 @@ out_msgbuff: - */ - void nlsock_done(struct nl_socket *nlsk) - { -+ if (!nlsk) -+ return; - if (nlsk->sk) - mnl_socket_close(nlsk->sk); - msgbuff_done(&nlsk->msgbuff); - memset(nlsk, '\0', sizeof(*nlsk)); -+ free(nlsk); - } --- -2.26.2 - diff --git a/0025-netlink-do-not-send-messages-and-process-replies-in-.patch b/0025-netlink-do-not-send-messages-and-process-replies-in-.patch deleted file mode 100644 index e5866c2..0000000 --- a/0025-netlink-do-not-send-messages-and-process-replies-in-.patch +++ /dev/null @@ -1,301 +0,0 @@ -From fc5f2a6bb2911a951bf5a1364dc5732e521d735a Mon Sep 17 00:00:00 2001 -From: Michal Kubecek -Date: Mon, 9 Nov 2020 14:29:56 +0100 -Subject: [PATCH 25/26] netlink: do not send messages and process replies in - nl_parser() - -When called with group_style = PARSER_GROUP_MSG, nl_parser() not only -parses the command line and composes the messages but also sends them to -kernel and processes the replies. This is inconsistent with other modes and -also impractical as it takes the control over the process from caller where -it belongs. - -Modify nl_parser() to pass composed messages back to caller (which is only -nl_sset() at the moment) and let it send requests and process replies. This -will be needed for an upcoming backward compatibility patch which will need -to inspect and possibly modify one of the composed messages. - -Signed-off-by: Michal Kubecek -(cherry picked from commit acd9730d1e794f85caf1192fe8788876e6f96305) ---- - netlink/cable_test.c | 2 +- - netlink/channels.c | 2 +- - netlink/coalesce.c | 2 +- - netlink/eee.c | 2 +- - netlink/parser.c | 43 ++++++++++++++++++++++++++++--------------- - netlink/parser.h | 3 ++- - netlink/pause.c | 2 +- - netlink/rings.c | 2 +- - netlink/settings.c | 35 ++++++++++++++++++++++++++++++----- - 9 files changed, 66 insertions(+), 27 deletions(-) - -diff --git a/netlink/cable_test.c b/netlink/cable_test.c -index d39b7d82efb0..e05b67c4e231 100644 ---- a/netlink/cable_test.c -+++ b/netlink/cable_test.c -@@ -574,7 +574,7 @@ int nl_cable_test_tdr(struct cmd_context *ctx) - ctx->devname, 0)) - return -EMSGSIZE; - -- ret = nl_parser(nlctx, tdr_params, NULL, PARSER_GROUP_NEST); -+ ret = nl_parser(nlctx, tdr_params, NULL, PARSER_GROUP_NEST, NULL); - if (ret < 0) - return ret; - -diff --git a/netlink/channels.c b/netlink/channels.c -index c6002ceeb121..894c74bcc11a 100644 ---- a/netlink/channels.c -+++ b/netlink/channels.c -@@ -126,7 +126,7 @@ int nl_schannels(struct cmd_context *ctx) - ctx->devname, 0)) - return -EMSGSIZE; - -- ret = nl_parser(nlctx, schannels_params, NULL, PARSER_GROUP_NONE); -+ ret = nl_parser(nlctx, schannels_params, NULL, PARSER_GROUP_NONE, NULL); - if (ret < 0) - return 1; - -diff --git a/netlink/coalesce.c b/netlink/coalesce.c -index 65f75cf9a8dd..0223f8e3484e 100644 ---- a/netlink/coalesce.c -+++ b/netlink/coalesce.c -@@ -254,7 +254,7 @@ int nl_scoalesce(struct cmd_context *ctx) - ctx->devname, 0)) - return -EMSGSIZE; - -- ret = nl_parser(nlctx, scoalesce_params, NULL, PARSER_GROUP_NONE); -+ ret = nl_parser(nlctx, scoalesce_params, NULL, PARSER_GROUP_NONE, NULL); - if (ret < 0) - return 1; - -diff --git a/netlink/eee.c b/netlink/eee.c -index d3135b2094a4..04d8f0bbe3fc 100644 ---- a/netlink/eee.c -+++ b/netlink/eee.c -@@ -174,7 +174,7 @@ int nl_seee(struct cmd_context *ctx) - ctx->devname, 0)) - return -EMSGSIZE; - -- ret = nl_parser(nlctx, seee_params, NULL, PARSER_GROUP_NONE); -+ ret = nl_parser(nlctx, seee_params, NULL, PARSER_GROUP_NONE, NULL); - if (ret < 0) - return 1; - -diff --git a/netlink/parser.c b/netlink/parser.c -index 3b25f5d5a88e..c2eae93efb69 100644 ---- a/netlink/parser.c -+++ b/netlink/parser.c -@@ -920,7 +920,7 @@ static void __parser_set(uint64_t *map, unsigned int idx) - } - - struct tmp_buff { -- struct nl_msg_buff msgbuff; -+ struct nl_msg_buff *msgbuff; - unsigned int id; - unsigned int orig_len; - struct tmp_buff *next; -@@ -951,7 +951,12 @@ static struct tmp_buff *tmp_buff_find_or_create(struct tmp_buff **phead, - if (!new_buff) - return NULL; - new_buff->id = id; -- msgbuff_init(&new_buff->msgbuff); -+ new_buff->msgbuff = malloc(sizeof(*new_buff->msgbuff)); -+ if (!new_buff->msgbuff) { -+ free(new_buff); -+ return NULL; -+ } -+ msgbuff_init(new_buff->msgbuff); - new_buff->next = NULL; - *pbuff = new_buff; - -@@ -965,7 +970,10 @@ static void tmp_buff_destroy(struct tmp_buff *head) - - while (buff) { - next = buff->next; -- msgbuff_done(&buff->msgbuff); -+ if (buff->msgbuff) { -+ msgbuff_done(buff->msgbuff); -+ free(buff->msgbuff); -+ } - free(buff); - buff = next; - } -@@ -980,13 +988,22 @@ static void tmp_buff_destroy(struct tmp_buff *head) - * param_parser::offset) - * @group_style: defines if identifiers in .group represent separate messages, - * nested attributes or are not allowed -+ * @msgbuffs: (only used for @group_style = PARSER_GROUP_MSG) array to store -+ * pointers to composed messages; caller must make sure this -+ * array is sufficient, i.e. that it has at least as many entries -+ * as the number of different .group values in params array; -+ * entries are filled from the start, remaining entries are not -+ * modified; caller should zero initialize the array before -+ * calling nl_parser() - */ - int nl_parser(struct nl_context *nlctx, const struct param_parser *params, -- void *dest, enum parser_group_style group_style) -+ void *dest, enum parser_group_style group_style, -+ struct nl_msg_buff **msgbuffs) - { - struct nl_socket *nlsk = nlctx->ethnl_socket; - const struct param_parser *parser; - struct tmp_buff *buffs = NULL; -+ unsigned int n_msgbuffs = 0; - struct tmp_buff *buff; - unsigned int n_params; - uint64_t *params_seen; -@@ -1004,7 +1021,7 @@ int nl_parser(struct nl_context *nlctx, const struct param_parser *params, - buff = tmp_buff_find_or_create(&buffs, parser->group); - if (!buff) - goto out_free_buffs; -- msgbuff = &buff->msgbuff; -+ msgbuff = buff->msgbuff; - ret = msg_init(nlctx, msgbuff, parser->group, - NLM_F_REQUEST | NLM_F_ACK); - if (ret < 0) -@@ -1013,7 +1030,7 @@ int nl_parser(struct nl_context *nlctx, const struct param_parser *params, - switch (group_style) { - case PARSER_GROUP_NEST: - ret = -EMSGSIZE; -- nest = ethnla_nest_start(&buff->msgbuff, parser->group); -+ nest = ethnla_nest_start(buff->msgbuff, parser->group); - if (!nest) - goto out_free_buffs; - break; -@@ -1062,7 +1079,7 @@ int nl_parser(struct nl_context *nlctx, const struct param_parser *params, - buff = NULL; - if (parser->group) - buff = tmp_buff_find(buffs, parser->group); -- msgbuff = buff ? &buff->msgbuff : &nlsk->msgbuff; -+ msgbuff = buff ? buff->msgbuff : &nlsk->msgbuff; - - param_dest = dest ? ((char *)dest + parser->dest_offset) : NULL; - ret = parser->handler(nlctx, parser->type, parser->handler_data, -@@ -1074,12 +1091,12 @@ int nl_parser(struct nl_context *nlctx, const struct param_parser *params, - if (group_style == PARSER_GROUP_MSG) { - ret = -EOPNOTSUPP; - for (buff = buffs; buff; buff = buff->next) -- if (msgbuff_len(&buff->msgbuff) > buff->orig_len && -+ if (msgbuff_len(buff->msgbuff) > buff->orig_len && - netlink_cmd_check(nlctx->ctx, buff->id, false)) - goto out_free; - } - for (buff = buffs; buff; buff = buff->next) { -- struct nl_msg_buff *msgbuff = &buff->msgbuff; -+ struct nl_msg_buff *msgbuff = buff->msgbuff; - - if (group_style == PARSER_GROUP_NONE || - msgbuff_len(msgbuff) == buff->orig_len) -@@ -1092,12 +1109,8 @@ int nl_parser(struct nl_context *nlctx, const struct param_parser *params, - goto out_free; - break; - case PARSER_GROUP_MSG: -- ret = nlsock_sendmsg(nlsk, msgbuff); -- if (ret < 0) -- goto out_free; -- ret = nlsock_process_reply(nlsk, nomsg_reply_cb, NULL); -- if (ret < 0) -- goto out_free; -+ msgbuffs[n_msgbuffs++] = msgbuff; -+ buff->msgbuff = NULL; - break; - default: - break; -diff --git a/netlink/parser.h b/netlink/parser.h -index fd55bc768d42..28f26ccc2a1c 100644 ---- a/netlink/parser.h -+++ b/netlink/parser.h -@@ -143,6 +143,7 @@ int nl_parse_char_bitset(struct nl_context *nlctx, uint16_t type, - - /* main entry point called to parse the command line */ - int nl_parser(struct nl_context *nlctx, const struct param_parser *params, -- void *dest, enum parser_group_style group_style); -+ void *dest, enum parser_group_style group_style, -+ struct nl_msg_buff **msgbuffs); - - #endif /* ETHTOOL_NETLINK_PARSER_H__ */ -diff --git a/netlink/pause.c b/netlink/pause.c -index 7b6b3a1d2c10..048320b123d2 100644 ---- a/netlink/pause.c -+++ b/netlink/pause.c -@@ -208,7 +208,7 @@ int nl_spause(struct cmd_context *ctx) - ctx->devname, 0)) - return -EMSGSIZE; - -- ret = nl_parser(nlctx, spause_params, NULL, PARSER_GROUP_NONE); -+ ret = nl_parser(nlctx, spause_params, NULL, PARSER_GROUP_NONE, NULL); - if (ret < 0) - return 1; - -diff --git a/netlink/rings.c b/netlink/rings.c -index 4061520212d5..b8c458fce25f 100644 ---- a/netlink/rings.c -+++ b/netlink/rings.c -@@ -126,7 +126,7 @@ int nl_sring(struct cmd_context *ctx) - ctx->devname, 0)) - return -EMSGSIZE; - -- ret = nl_parser(nlctx, sring_params, NULL, PARSER_GROUP_NONE); -+ ret = nl_parser(nlctx, sring_params, NULL, PARSER_GROUP_NONE, NULL); - if (ret < 0) - return 1; - -diff --git a/netlink/settings.c b/netlink/settings.c -index 75db15e5069c..fac192e2fbb7 100644 ---- a/netlink/settings.c -+++ b/netlink/settings.c -@@ -1108,9 +1108,16 @@ static const struct param_parser sset_params[] = { - {} - }; - -+/* Maximum number of request messages sent to kernel; must be equal to the -+ * number of different .group values in sset_params[] array. -+ */ -+#define SSET_MAX_MSGS 4 -+ - int nl_sset(struct cmd_context *ctx) - { -+ struct nl_msg_buff *msgbuffs[SSET_MAX_MSGS] = {}; - struct nl_context *nlctx = ctx->nlctx; -+ unsigned int i; - int ret; - - nlctx->cmd = "-s"; -@@ -1118,11 +1125,29 @@ int nl_sset(struct cmd_context *ctx) - nlctx->argc = ctx->argc; - nlctx->devname = ctx->devname; - -- ret = nl_parser(nlctx, sset_params, NULL, PARSER_GROUP_MSG); -- if (ret < 0) -- return 1; -+ ret = nl_parser(nlctx, sset_params, NULL, PARSER_GROUP_MSG, msgbuffs); -+ if (ret < 0) { -+ ret = 1; -+ goto out_free; -+ } -+ -+ for (i = 0; i < SSET_MAX_MSGS && msgbuffs[i]; i++) { -+ struct nl_socket *nlsk = nlctx->ethnl_socket; - -- if (ret == 0) -- return 0; -+ ret = nlsock_sendmsg(nlsk, msgbuffs[i]); -+ if (ret < 0) -+ goto out_free; -+ ret = nlsock_process_reply(nlsk, nomsg_reply_cb, NULL); -+ if (ret < 0) -+ goto out_free; -+ } -+ -+out_free: -+ for (i = 0; i < SSET_MAX_MSGS && msgbuffs[i]; i++) { -+ msgbuff_done(msgbuffs[i]); -+ free(msgbuffs[i]); -+ } -+ if (ret >= 0) -+ return ret; - return nlctx->exit_code ?: 75; - } --- -2.26.2 - diff --git a/0026-ethtool-Improve-compatibility-between-netlink-and-io.patch b/0026-ethtool-Improve-compatibility-between-netlink-and-io.patch deleted file mode 100644 index bb2e9da..0000000 --- a/0026-ethtool-Improve-compatibility-between-netlink-and-io.patch +++ /dev/null @@ -1,191 +0,0 @@ -From f16bc54fe82b9129d6852273d02e044b9cb28789 Mon Sep 17 00:00:00 2001 -From: Ido Schimmel -Date: Mon, 9 Nov 2020 14:29:59 +0100 -Subject: [PATCH 26/26] ethtool: Improve compatibility between netlink and - ioctl interfaces - -With the ioctl interface, when autoneg is enabled, but without -specifying speed, duplex or link modes, the advertised link modes are -set to the supported link modes by the ethtool user space utility. - -This does not happen when using the netlink interface. Fix this -incompatibility problem by having ethtool query the supported link modes -from the kernel and advertise all the "real" ones when only "autoneg on" -is specified. - -Before: - -Settings for eth0: - Supported ports: [ TP ] - Supported link modes: 10baseT/Half 10baseT/Full - 100baseT/Half 100baseT/Full - 1000baseT/Full - Supported pause frame use: No - Supports auto-negotiation: Yes - Supported FEC modes: Not reported - Advertised link modes: 100baseT/Half 100baseT/Full - Advertised pause frame use: No - Advertised auto-negotiation: Yes - Advertised FEC modes: Not reported - Speed: 1000Mb/s - Duplex: Full - Auto-negotiation: on - Port: Twisted Pair - PHYAD: 0 - Transceiver: internal - MDI-X: off (auto) - Supports Wake-on: umbg - Wake-on: d - Current message level: 0x00000007 (7) - drv probe link - Link detected: yes - -After: - -Settings for eth0: - Supported ports: [ TP ] - Supported link modes: 10baseT/Half 10baseT/Full - 100baseT/Half 100baseT/Full - 1000baseT/Full - Supported pause frame use: No - Supports auto-negotiation: Yes - Supported FEC modes: Not reported - Advertised link modes: 10baseT/Half 10baseT/Full - 100baseT/Half 100baseT/Full - 1000baseT/Full - Advertised pause frame use: No - Advertised auto-negotiation: Yes - Advertised FEC modes: Not reported - Speed: 1000Mb/s - Duplex: Full - Auto-negotiation: on - Port: Twisted Pair - PHYAD: 0 - Transceiver: internal - MDI-X: on (auto) - Supports Wake-on: umbg - Wake-on: d - Current message level: 0x00000007 (7) - drv probe link - Link detected: yes - -Signed-off-by: Ido Schimmel -Signed-off-by: Michal Kubecek -(cherry picked from commit 124a3c06d1c34b125d84a9eb312fddd365bb7bf6) ---- - netlink/settings.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 92 insertions(+) - -diff --git a/netlink/settings.c b/netlink/settings.c -index fac192e2fbb7..01c1d38d323f 100644 ---- a/netlink/settings.c -+++ b/netlink/settings.c -@@ -1113,6 +1113,93 @@ static const struct param_parser sset_params[] = { - */ - #define SSET_MAX_MSGS 4 - -+static int linkmodes_reply_advert_all_cb(const struct nlmsghdr *nlhdr, -+ void *data) -+{ -+ const struct nlattr *tb[ETHTOOL_A_LINKMODES_MAX + 1] = {}; -+ DECLARE_ATTR_TB_INFO(tb); -+ struct nl_msg_buff *req_msgbuff = data; -+ const struct nlattr *ours_attr; -+ struct nlattr *req_bitset; -+ uint32_t *supported_modes; -+ unsigned int modes_count; -+ unsigned int i; -+ int ret; -+ -+ ret = mnl_attr_parse(nlhdr, GENL_HDRLEN, attr_cb, &tb_info); -+ if (ret < 0) -+ return MNL_CB_ERROR; -+ ours_attr = tb[ETHTOOL_A_LINKMODES_OURS]; -+ if (!ours_attr) -+ return MNL_CB_ERROR; -+ modes_count = bitset_get_count(tb[ETHTOOL_A_LINKMODES_OURS], &ret); -+ if (ret < 0) -+ return MNL_CB_ERROR; -+ supported_modes = get_compact_bitset_mask(tb[ETHTOOL_A_LINKMODES_OURS]); -+ if (!supported_modes) -+ return MNL_CB_ERROR; -+ -+ /* keep only "real" link modes */ -+ for (i = 0; i < modes_count; i++) -+ if (!lm_class_match(i, LM_CLASS_REAL)) -+ supported_modes[i / 32] &= ~((uint32_t)1 << (i % 32)); -+ -+ req_bitset = ethnla_nest_start(req_msgbuff, ETHTOOL_A_LINKMODES_OURS); -+ if (!req_bitset) -+ return MNL_CB_ERROR; -+ -+ if (ethnla_put_u32(req_msgbuff, ETHTOOL_A_BITSET_SIZE, modes_count) || -+ ethnla_put(req_msgbuff, ETHTOOL_A_BITSET_VALUE, -+ DIV_ROUND_UP(modes_count, 32) * sizeof(uint32_t), -+ supported_modes) || -+ ethnla_put(req_msgbuff, ETHTOOL_A_BITSET_MASK, -+ DIV_ROUND_UP(modes_count, 32) * sizeof(uint32_t), -+ supported_modes)) { -+ ethnla_nest_cancel(req_msgbuff, req_bitset); -+ return MNL_CB_ERROR; -+ } -+ -+ ethnla_nest_end(req_msgbuff, req_bitset); -+ return MNL_CB_OK; -+} -+ -+/* For compatibility reasons with ioctl-based ethtool, when "autoneg on" is -+ * specified without "advertise", "speed" and "duplex", we need to query the -+ * supported link modes from the kernel and advertise all the "real" ones. -+ */ -+static int nl_sset_compat_linkmodes(struct nl_context *nlctx, -+ struct nl_msg_buff *msgbuff) -+{ -+ const struct nlattr *tb[ETHTOOL_A_LINKMODES_MAX + 1] = {}; -+ DECLARE_ATTR_TB_INFO(tb); -+ struct nl_socket *nlsk = nlctx->ethnl_socket; -+ int ret; -+ -+ ret = mnl_attr_parse(msgbuff->nlhdr, GENL_HDRLEN, attr_cb, &tb_info); -+ if (ret < 0) -+ return ret; -+ if (!tb[ETHTOOL_A_LINKMODES_AUTONEG] || tb[ETHTOOL_A_LINKMODES_OURS] || -+ tb[ETHTOOL_A_LINKMODES_SPEED] || tb[ETHTOOL_A_LINKMODES_DUPLEX]) -+ return 0; -+ if (!mnl_attr_get_u8(tb[ETHTOOL_A_LINKMODES_AUTONEG])) -+ return 0; -+ -+ /* all conditions satisfied, create ETHTOOL_A_LINKMODES_OURS */ -+ if (netlink_cmd_check(nlctx->ctx, ETHTOOL_MSG_LINKMODES_GET, false) || -+ netlink_cmd_check(nlctx->ctx, ETHTOOL_MSG_LINKMODES_SET, false)) -+ return -EOPNOTSUPP; -+ ret = nlsock_prep_get_request(nlsk, ETHTOOL_MSG_LINKMODES_GET, -+ ETHTOOL_A_LINKMODES_HEADER, -+ ETHTOOL_FLAG_COMPACT_BITSETS); -+ if (ret < 0) -+ return ret; -+ ret = nlsock_sendmsg(nlsk, NULL); -+ if (ret < 0) -+ return ret; -+ return nlsock_process_reply(nlsk, linkmodes_reply_advert_all_cb, -+ msgbuff); -+} -+ - int nl_sset(struct cmd_context *ctx) - { - struct nl_msg_buff *msgbuffs[SSET_MAX_MSGS] = {}; -@@ -1134,6 +1221,11 @@ int nl_sset(struct cmd_context *ctx) - for (i = 0; i < SSET_MAX_MSGS && msgbuffs[i]; i++) { - struct nl_socket *nlsk = nlctx->ethnl_socket; - -+ if (msgbuffs[i]->genlhdr->cmd == ETHTOOL_MSG_LINKMODES_SET) { -+ ret = nl_sset_compat_linkmodes(nlctx, msgbuffs[i]); -+ if (ret < 0) -+ goto out_free; -+ } - ret = nlsock_sendmsg(nlsk, msgbuffs[i]); - if (ret < 0) - goto out_free; --- -2.26.2 - diff --git a/0027-update-UAPI-header-copies.patch b/0027-update-UAPI-header-copies.patch deleted file mode 100644 index 4159a4a..0000000 --- a/0027-update-UAPI-header-copies.patch +++ /dev/null @@ -1,135 +0,0 @@ -From 43ffee8b0530b0ee0458ba9c0cf651cc77201ba0 Mon Sep 17 00:00:00 2001 -From: Michal Kubecek -Date: Mon, 28 Sep 2020 16:55:49 +0200 -Subject: [PATCH 27/37] update UAPI header copies - -Update to kernel commit 0675c285ea65. - -Signed-off-by: Michal Kubecek -(cherry picked from commit 0cd0742eab2edd702306da79ddee48644ebe0c9a) ---- - uapi/linux/ethtool.h | 2 ++ - uapi/linux/ethtool_netlink.h | 19 ++++++++++++++++++- - uapi/linux/if_link.h | 31 +++++++++++++++---------------- - 3 files changed, 35 insertions(+), 17 deletions(-) - -diff --git a/uapi/linux/ethtool.h b/uapi/linux/ethtool.h -index 847ccd0b1fce..052689bcc90c 100644 ---- a/uapi/linux/ethtool.h -+++ b/uapi/linux/ethtool.h -@@ -1615,6 +1615,8 @@ enum ethtool_link_mode_bit_indices { - ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 87, - ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 88, - ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 89, -+ ETHTOOL_LINK_MODE_100baseFX_Half_BIT = 90, -+ ETHTOOL_LINK_MODE_100baseFX_Full_BIT = 91, - /* must be last entry */ - __ETHTOOL_LINK_MODE_MASK_NBITS - }; -diff --git a/uapi/linux/ethtool_netlink.h b/uapi/linux/ethtool_netlink.h -index cebdb52e6a05..c022883cdb22 100644 ---- a/uapi/linux/ethtool_netlink.h -+++ b/uapi/linux/ethtool_netlink.h -@@ -79,6 +79,7 @@ enum { - ETHTOOL_MSG_TSINFO_GET_REPLY, - ETHTOOL_MSG_CABLE_TEST_NTF, - ETHTOOL_MSG_CABLE_TEST_TDR_NTF, -+ ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY, - - /* add new constants above here */ - __ETHTOOL_MSG_KERNEL_CNT, -@@ -91,9 +92,12 @@ enum { - #define ETHTOOL_FLAG_COMPACT_BITSETS (1 << 0) - /* provide optional reply for SET or ACT requests */ - #define ETHTOOL_FLAG_OMIT_REPLY (1 << 1) -+/* request statistics, if supported by the driver */ -+#define ETHTOOL_FLAG_STATS (1 << 2) - - #define ETHTOOL_FLAG_ALL (ETHTOOL_FLAG_COMPACT_BITSETS | \ -- ETHTOOL_FLAG_OMIT_REPLY) -+ ETHTOOL_FLAG_OMIT_REPLY | \ -+ ETHTOOL_FLAG_STATS) - - enum { - ETHTOOL_A_HEADER_UNSPEC, -@@ -376,12 +380,25 @@ enum { - ETHTOOL_A_PAUSE_AUTONEG, /* u8 */ - ETHTOOL_A_PAUSE_RX, /* u8 */ - ETHTOOL_A_PAUSE_TX, /* u8 */ -+ ETHTOOL_A_PAUSE_STATS, /* nest - _PAUSE_STAT_* */ - - /* add new constants above here */ - __ETHTOOL_A_PAUSE_CNT, - ETHTOOL_A_PAUSE_MAX = (__ETHTOOL_A_PAUSE_CNT - 1) - }; - -+enum { -+ ETHTOOL_A_PAUSE_STAT_UNSPEC, -+ ETHTOOL_A_PAUSE_STAT_PAD, -+ -+ ETHTOOL_A_PAUSE_STAT_TX_FRAMES, -+ ETHTOOL_A_PAUSE_STAT_RX_FRAMES, -+ -+ /* add new constants above here */ -+ __ETHTOOL_A_PAUSE_STAT_CNT, -+ ETHTOOL_A_PAUSE_STAT_MAX = (__ETHTOOL_A_PAUSE_STAT_CNT - 1) -+}; -+ - /* EEE */ - - enum { -diff --git a/uapi/linux/if_link.h b/uapi/linux/if_link.h -index 9d96890f9742..307e5c245e9f 100644 ---- a/uapi/linux/if_link.h -+++ b/uapi/linux/if_link.h -@@ -7,24 +7,23 @@ - - /* This struct should be in sync with struct rtnl_link_stats64 */ - struct rtnl_link_stats { -- __u32 rx_packets; /* total packets received */ -- __u32 tx_packets; /* total packets transmitted */ -- __u32 rx_bytes; /* total bytes received */ -- __u32 tx_bytes; /* total bytes transmitted */ -- __u32 rx_errors; /* bad packets received */ -- __u32 tx_errors; /* packet transmit problems */ -- __u32 rx_dropped; /* no space in linux buffers */ -- __u32 tx_dropped; /* no space available in linux */ -- __u32 multicast; /* multicast packets received */ -+ __u32 rx_packets; -+ __u32 tx_packets; -+ __u32 rx_bytes; -+ __u32 tx_bytes; -+ __u32 rx_errors; -+ __u32 tx_errors; -+ __u32 rx_dropped; -+ __u32 tx_dropped; -+ __u32 multicast; - __u32 collisions; -- - /* detailed rx_errors: */ - __u32 rx_length_errors; -- __u32 rx_over_errors; /* receiver ring buff overflow */ -- __u32 rx_crc_errors; /* recved pkt with crc error */ -- __u32 rx_frame_errors; /* recv'd frame alignment error */ -- __u32 rx_fifo_errors; /* recv'r fifo overrun */ -- __u32 rx_missed_errors; /* receiver missed packet */ -+ __u32 rx_over_errors; -+ __u32 rx_crc_errors; -+ __u32 rx_frame_errors; -+ __u32 rx_fifo_errors; -+ __u32 rx_missed_errors; - - /* detailed tx_errors */ - __u32 tx_aborted_errors; -@@ -37,7 +36,7 @@ struct rtnl_link_stats { - __u32 rx_compressed; - __u32 tx_compressed; - -- __u32 rx_nohandler; /* dropped, no handler found */ -+ __u32 rx_nohandler; - }; - - /** --- -2.26.2 - diff --git a/0028-update-UAPI-header-copies.patch b/0028-update-UAPI-header-copies.patch deleted file mode 100644 index ad113ea..0000000 --- a/0028-update-UAPI-header-copies.patch +++ /dev/null @@ -1,83 +0,0 @@ -From 526176cf61c011c2b63d7b9d86581f54f60e55cd Mon Sep 17 00:00:00 2001 -From: Jakub Kicinski -Date: Sun, 18 Oct 2020 14:31:45 -0700 -Subject: [PATCH 28/37] update UAPI header copies - -Update to kernel commit 9453b2d4694c. - -Signed-off-by: Jakub Kicinski -Signed-off-by: Michal Kubecek -(cherry picked from commit 77613ca972ac37f11477539be8d2b604972e9c18) ---- - uapi/linux/genetlink.h | 11 +++++++++++ - uapi/linux/netlink.h | 4 ++++ - 2 files changed, 15 insertions(+) - -diff --git a/uapi/linux/genetlink.h b/uapi/linux/genetlink.h -index 7c6c390c48ee..9fa720ee87ae 100644 ---- a/uapi/linux/genetlink.h -+++ b/uapi/linux/genetlink.h -@@ -64,6 +64,8 @@ enum { - CTRL_ATTR_OPS, - CTRL_ATTR_MCAST_GROUPS, - CTRL_ATTR_POLICY, -+ CTRL_ATTR_OP_POLICY, -+ CTRL_ATTR_OP, - __CTRL_ATTR_MAX, - }; - -@@ -85,6 +87,15 @@ enum { - __CTRL_ATTR_MCAST_GRP_MAX, - }; - -+enum { -+ CTRL_ATTR_POLICY_UNSPEC, -+ CTRL_ATTR_POLICY_DO, -+ CTRL_ATTR_POLICY_DUMP, -+ -+ __CTRL_ATTR_POLICY_DUMP_MAX, -+ CTRL_ATTR_POLICY_DUMP_MAX = __CTRL_ATTR_POLICY_DUMP_MAX - 1 -+}; -+ - #define CTRL_ATTR_MCAST_GRP_MAX (__CTRL_ATTR_MCAST_GRP_MAX - 1) - - -diff --git a/uapi/linux/netlink.h b/uapi/linux/netlink.h -index 695c88e3c29d..dfef006be9f9 100644 ---- a/uapi/linux/netlink.h -+++ b/uapi/linux/netlink.h -@@ -129,6 +129,7 @@ struct nlmsgerr { - * @NLMSGERR_ATTR_COOKIE: arbitrary subsystem specific cookie to - * be used - in the success case - to identify a created - * object or operation or similar (binary) -+ * @NLMSGERR_ATTR_POLICY: policy for a rejected attribute - * @__NLMSGERR_ATTR_MAX: number of attributes - * @NLMSGERR_ATTR_MAX: highest attribute number - */ -@@ -137,6 +138,7 @@ enum nlmsgerr_attrs { - NLMSGERR_ATTR_MSG, - NLMSGERR_ATTR_OFFS, - NLMSGERR_ATTR_COOKIE, -+ NLMSGERR_ATTR_POLICY, - - __NLMSGERR_ATTR_MAX, - NLMSGERR_ATTR_MAX = __NLMSGERR_ATTR_MAX - 1 -@@ -327,6 +329,7 @@ enum netlink_attribute_type { - * the index, if limited inside the nesting (U32) - * @NL_POLICY_TYPE_ATTR_BITFIELD32_MASK: valid mask for the - * bitfield32 type (U32) -+ * @NL_POLICY_TYPE_ATTR_MASK: mask of valid bits for unsigned integers (U64) - * @NL_POLICY_TYPE_ATTR_PAD: pad attribute for 64-bit alignment - */ - enum netlink_policy_type_attr { -@@ -342,6 +345,7 @@ enum netlink_policy_type_attr { - NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE, - NL_POLICY_TYPE_ATTR_BITFIELD32_MASK, - NL_POLICY_TYPE_ATTR_PAD, -+ NL_POLICY_TYPE_ATTR_MASK, - - /* keep last */ - __NL_POLICY_TYPE_ATTR_MAX, --- -2.26.2 - diff --git a/0029-pause-add-json-support.patch b/0029-pause-add-json-support.patch deleted file mode 100644 index 44432e0..0000000 --- a/0029-pause-add-json-support.patch +++ /dev/null @@ -1,183 +0,0 @@ -From 7bb75228e6849f3371cd434cf36d29f406db1ccc Mon Sep 17 00:00:00 2001 -From: Jakub Kicinski -Date: Sun, 18 Oct 2020 14:31:46 -0700 -Subject: [PATCH 29/37] pause: add --json support - -No change in normal text output: - - # ./ethtool -a eth0 -Pause parameters for eth0: -Autonegotiate: on -RX: on -TX: on -RX negotiated: on -TX negotiated: on - -JSON: - - # ./ethtool --json -a eth0 -[ { - "ifname": "eth0", - "autonegotiate": true, - "rx": true, - "tx": true, - "negotiated": { - "rx": true, - "tx": true - } - } ] - -v2: - - restructure show_bool() so we can use its logic for show_bool_val() - -Signed-off-by: Jakub Kicinski -Signed-off-by: Michal Kubecek -(cherry picked from commit 7e5c1ddbe67d0eefe9004e9a69f2ea5378e3bc5e) ---- - netlink/coalesce.c | 6 +++--- - netlink/netlink.h | 21 ++++++++++++++++----- - netlink/pause.c | 44 ++++++++++++++++++++++++++++++++------------ - 3 files changed, 51 insertions(+), 20 deletions(-) - -diff --git a/netlink/coalesce.c b/netlink/coalesce.c -index 0223f8e3484e..75922a91c2e7 100644 ---- a/netlink/coalesce.c -+++ b/netlink/coalesce.c -@@ -36,9 +36,9 @@ int coalesce_reply_cb(const struct nlmsghdr *nlhdr, void *data) - if (silent) - putchar('\n'); - printf("Coalesce parameters for %s:\n", nlctx->devname); -- printf("Adaptive RX: %s TX: %s\n", -- u8_to_bool(tb[ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX]), -- u8_to_bool(tb[ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX])); -+ show_bool("rx", "Adaptive RX: %s ", -+ tb[ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX]); -+ show_bool("tx", "TX: %s\n", tb[ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX]); - show_u32(tb[ETHTOOL_A_COALESCE_STATS_BLOCK_USECS], - "stats-block-usecs: "); - show_u32(tb[ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL], -diff --git a/netlink/netlink.h b/netlink/netlink.h -index 61a072db8ed9..e79143016bd5 100644 ---- a/netlink/netlink.h -+++ b/netlink/netlink.h -@@ -102,17 +102,28 @@ static inline void show_u32(const struct nlattr *attr, const char *label) - printf("%sn/a\n", label); - } - --static inline const char *u8_to_bool(const struct nlattr *attr) -+static inline const char *u8_to_bool(const uint8_t *val) - { -- if (attr) -- return mnl_attr_get_u8(attr) ? "on" : "off"; -+ if (val) -+ return *val ? "on" : "off"; - else - return "n/a"; - } - --static inline void show_bool(const struct nlattr *attr, const char *label) -+static inline void show_bool_val(const char *key, const char *fmt, uint8_t *val) -+{ -+ if (is_json_context()) { -+ if (val) -+ print_bool(PRINT_JSON, key, NULL, val); -+ } else { -+ print_string(PRINT_FP, NULL, fmt, u8_to_bool(val)); -+ } -+} -+ -+static inline void show_bool(const char *key, const char *fmt, -+ const struct nlattr *attr) - { -- printf("%s%s\n", label, u8_to_bool(attr)); -+ show_bool_val(key, fmt, attr ? mnl_attr_get_payload(attr) : NULL); - } - - /* misc */ -diff --git a/netlink/pause.c b/netlink/pause.c -index 048320b123d2..c54488d71fce 100644 ---- a/netlink/pause.c -+++ b/netlink/pause.c -@@ -40,8 +40,8 @@ static int pause_autoneg_cb(const struct nlmsghdr *nlhdr, void *data) - struct pause_autoneg_status ours = {}; - struct pause_autoneg_status peer = {}; - struct nl_context *nlctx = data; -- bool rx_status = false; -- bool tx_status = false; -+ uint8_t rx_status = false; -+ uint8_t tx_status = false; - bool silent; - int err_ret; - int ret; -@@ -72,8 +72,11 @@ static int pause_autoneg_cb(const struct nlmsghdr *nlhdr, void *data) - else if (peer.pause) - tx_status = true; - } -- printf("RX negotiated: %s\nTX negotiated: %s\n", -- rx_status ? "on" : "off", tx_status ? "on" : "off"); -+ -+ open_json_object("negotiated"); -+ show_bool_val("rx", "RX negotiated: %s\n", &rx_status); -+ show_bool_val("tx", "TX negotiated: %s\n", &tx_status); -+ close_json_object(); - - return MNL_CB_OK; - } -@@ -121,21 +124,34 @@ int pause_reply_cb(const struct nlmsghdr *nlhdr, void *data) - return err_ret; - - if (silent) -- putchar('\n'); -- printf("Pause parameters for %s:\n", nlctx->devname); -- show_bool(tb[ETHTOOL_A_PAUSE_AUTONEG], "Autonegotiate:\t"); -- show_bool(tb[ETHTOOL_A_PAUSE_RX], "RX:\t\t"); -- show_bool(tb[ETHTOOL_A_PAUSE_TX], "TX:\t\t"); -+ print_nl(); -+ -+ open_json_object(NULL); -+ -+ print_string(PRINT_ANY, "ifname", "Pause parameters for %s:\n", -+ nlctx->devname); -+ -+ show_bool("autonegotiate", "Autonegotiate:\t%s\n", -+ tb[ETHTOOL_A_PAUSE_AUTONEG]); -+ show_bool("rx", "RX:\t\t%s\n", tb[ETHTOOL_A_PAUSE_RX]); -+ show_bool("tx", "TX:\t\t%s\n", tb[ETHTOOL_A_PAUSE_TX]); -+ - if (!nlctx->is_monitor && tb[ETHTOOL_A_PAUSE_AUTONEG] && - mnl_attr_get_u8(tb[ETHTOOL_A_PAUSE_AUTONEG])) { - ret = show_pause_autoneg_status(nlctx); - if (ret < 0) -- return err_ret; -+ goto err_close_dev; - } - if (!silent) -- putchar('\n'); -+ print_nl(); -+ -+ close_json_object(); - - return MNL_CB_OK; -+ -+err_close_dev: -+ close_json_object(); -+ return err_ret; - } - - int nl_gpause(struct cmd_context *ctx) -@@ -156,7 +172,11 @@ int nl_gpause(struct cmd_context *ctx) - ETHTOOL_A_PAUSE_HEADER, 0); - if (ret < 0) - return ret; -- return nlsock_send_get_request(nlsk, pause_reply_cb); -+ -+ new_json_obj(ctx->json); -+ ret = nlsock_send_get_request(nlsk, pause_reply_cb); -+ delete_json_obj(); -+ return ret; - } - - /* PAUSE_SET */ --- -2.26.2 - diff --git a/0030-separate-FLAGS-out-in-h.patch b/0030-separate-FLAGS-out-in-h.patch deleted file mode 100644 index 1c0df96..0000000 --- a/0030-separate-FLAGS-out-in-h.patch +++ /dev/null @@ -1,50 +0,0 @@ -From ca9ed7a3b07e68b17f63ce8de6c201267ef48887 Mon Sep 17 00:00:00 2001 -From: Jakub Kicinski -Date: Sun, 18 Oct 2020 14:31:47 -0700 -Subject: [PATCH 30/37] separate FLAGS out in -h - -Help output is quite crowded already with every command -being prefixed by --debug and --json options, and we're -about to add a third one. - -Add an indirection. - -Signed-off-by: Jakub Kicinski -Signed-off-by: Michal Kubecek -(cherry picked from commit d944e60dbeee28ef0c3581e6a90f2e3b75b1c8f7) ---- - ethtool.c | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) - -diff --git a/ethtool.c b/ethtool.c -index 32ef80add923..9b56b0e2a628 100644 ---- a/ethtool.c -+++ b/ethtool.c -@@ -5963,10 +5963,10 @@ static int show_usage(struct cmd_context *ctx __maybe_unused) - fprintf(stdout, PACKAGE " version " VERSION "\n"); - fprintf(stdout, - "Usage:\n" -- " ethtool [ --debug MASK ][ --json ] DEVNAME\t" -+ " ethtool [ FLAGS ] DEVNAME\t" - "Display standard information about device\n"); - for (i = 0; args[i].opts; i++) { -- fputs(" ethtool [ --debug MASK ][ --json ] ", stdout); -+ fputs(" ethtool [ FLAGS ] ", stdout); - fprintf(stdout, "%s %s\t%s\n", - args[i].opts, - args[i].no_dev ? "\t" : "DEVNAME", -@@ -5975,7 +5975,10 @@ static int show_usage(struct cmd_context *ctx __maybe_unused) - fputs(args[i].xhelp, stdout); - } - nl_monitor_usage(); -- fprintf(stdout, "Not all options support JSON output\n"); -+ fprintf(stdout, "\n"); -+ fprintf(stdout, "FLAGS:\n"); -+ fprintf(stdout, " --debug MASK turn on debugging messages\n"); -+ fprintf(stdout, " --json enable JSON output format (not supported by all commands)\n"); - - return 0; - } --- -2.26.2 - diff --git a/0031-add-support-for-stats-in-subcommands.patch b/0031-add-support-for-stats-in-subcommands.patch deleted file mode 100644 index 5c2ac2f..0000000 --- a/0031-add-support-for-stats-in-subcommands.patch +++ /dev/null @@ -1,83 +0,0 @@ -From 26b419d729ee84a1924c31b2140281dace819dbc Mon Sep 17 00:00:00 2001 -From: Jakub Kicinski -Date: Sun, 18 Oct 2020 14:31:48 -0700 -Subject: [PATCH 31/37] add support for stats in subcommands - -Add new parameters (-I | --include-statistics) which will -control requesting statistic dumps from the kernel. - -Signed-off-by: Jakub Kicinski -Signed-off-by: Michal Kubecek -(cherry picked from commit 66ecd38ca8b4e6184af4c38c234a9dcfb6804a4a) ---- - ethtool.8.in | 7 +++++++ - ethtool.c | 8 ++++++++ - internal.h | 1 + - 3 files changed, 16 insertions(+) - -diff --git a/ethtool.8.in b/ethtool.8.in -index 12866dc456cf..e0601b3db0cf 100644 ---- a/ethtool.8.in -+++ b/ethtool.8.in -@@ -140,6 +140,9 @@ ethtool \- query or control network driver and hardware settings - .B ethtool [--json] - .I args - .HP -+.B ethtool [-I | --include-statistics] -+.I args -+.HP - .B ethtool \-\-monitor - [ - .I command -@@ -496,6 +499,10 @@ Output results in JavaScript Object Notation (JSON). Only a subset of - options support this. Those which do not will continue to output - plain text in the presence of this option. - .TP -+.B \-I \-\-include\-statistics -+Include command-related statistics in the output. This option allows -+displaying relevant device statistics for selected get commands. -+.TP - .B \-a \-\-show\-pause - Queries the specified Ethernet device for pause parameter information. - .TP -diff --git a/ethtool.c b/ethtool.c -index 9b56b0e2a628..f5fbb01e553a 100644 ---- a/ethtool.c -+++ b/ethtool.c -@@ -5979,6 +5979,7 @@ static int show_usage(struct cmd_context *ctx __maybe_unused) - fprintf(stdout, "FLAGS:\n"); - fprintf(stdout, " --debug MASK turn on debugging messages\n"); - fprintf(stdout, " --json enable JSON output format (not supported by all commands)\n"); -+ fprintf(stdout, " -I|--include-statistics request device statistics related to the command (not supported by all commands)\n"); - - return 0; - } -@@ -6239,6 +6240,13 @@ int main(int argc, char **argp) - argc -= 1; - continue; - } -+ if (*argp && (!strcmp(*argp, "--include-statistics") || -+ !strcmp(*argp, "-I"))) { -+ ctx.show_stats = true; -+ argp += 1; -+ argc -= 1; -+ continue; -+ } - break; - } - if (*argp && !strcmp(*argp, "--monitor")) { -diff --git a/internal.h b/internal.h -index d096a28abfa2..1c0652d28793 100644 ---- a/internal.h -+++ b/internal.h -@@ -225,6 +225,7 @@ struct cmd_context { - char **argp; /* arguments to the sub-command */ - unsigned long debug; /* debugging mask */ - bool json; /* Output JSON, if supported */ -+ bool show_stats; /* include command-specific stats */ - #ifdef ETHTOOL_ENABLE_NETLINK - struct nl_context *nlctx; /* netlink context (opaque) */ - #endif --- -2.26.2 - diff --git a/0032-netlink-use-policy-dumping-to-check-if-stats-flag-is.patch b/0032-netlink-use-policy-dumping-to-check-if-stats-flag-is.patch deleted file mode 100644 index 2ec74dc..0000000 --- a/0032-netlink-use-policy-dumping-to-check-if-stats-flag-is.patch +++ /dev/null @@ -1,232 +0,0 @@ -From 5966f5dae0dd173fdc7fe34af5f400e36fe782c7 Mon Sep 17 00:00:00 2001 -From: Jakub Kicinski -Date: Sun, 18 Oct 2020 14:31:50 -0700 -Subject: [PATCH 32/37] netlink: use policy dumping to check if stats flag is - supported - -Older kernels don't support statistics, to avoid retries -make use of netlink policy dumps to figure out which -flags kernel actually supports. - -v3: - - s/ctx/policy_ctx/ - - save the flags in nl_context to be able to reuse them, - and not have to return errors and values from the policy - get function - -Signed-off-by: Jakub Kicinski -Signed-off-by: Michal Kubecek -(cherry picked from commit 5c90128a47d7c96cc4dd2c4ad26a0fed1ab60940) ---- - netlink/msgbuff.h | 6 ++ - netlink/netlink.c | 154 ++++++++++++++++++++++++++++++++++++++++++++++ - netlink/netlink.h | 4 ++ - 3 files changed, 164 insertions(+) - -diff --git a/netlink/msgbuff.h b/netlink/msgbuff.h -index 24b99c5a28d7..7d6731fc24a3 100644 ---- a/netlink/msgbuff.h -+++ b/netlink/msgbuff.h -@@ -81,6 +81,12 @@ static inline bool ethnla_put_u32(struct nl_msg_buff *msgbuff, uint16_t type, - return ethnla_put(msgbuff, type, sizeof(uint32_t), &data); - } - -+static inline bool ethnla_put_u16(struct nl_msg_buff *msgbuff, uint16_t type, -+ uint16_t data) -+{ -+ return ethnla_put(msgbuff, type, sizeof(uint16_t), &data); -+} -+ - static inline bool ethnla_put_u8(struct nl_msg_buff *msgbuff, uint16_t type, - uint8_t data) - { -diff --git a/netlink/netlink.c b/netlink/netlink.c -index 5677274c2fce..ffe06339f099 100644 ---- a/netlink/netlink.c -+++ b/netlink/netlink.c -@@ -135,6 +135,160 @@ bool netlink_cmd_check(struct cmd_context *ctx, unsigned int cmd, - return !(nlctx->ops_info[cmd].op_flags & cap); - } - -+struct ethtool_op_policy_query_ctx { -+ struct nl_context *nlctx; -+ unsigned int op; -+ unsigned int op_hdr_attr; -+ -+ bool op_policy_found; -+ bool hdr_policy_found; -+ unsigned int op_policy_idx; -+ unsigned int hdr_policy_idx; -+ uint64_t flag_mask; -+}; -+ -+static int family_policy_find_op(struct ethtool_op_policy_query_ctx *policy_ctx, -+ const struct nlattr *op_policy) -+{ -+ const struct nlattr *attr; -+ unsigned int type; -+ int ret; -+ -+ type = policy_ctx->nlctx->is_dump ? -+ CTRL_ATTR_POLICY_DUMP : CTRL_ATTR_POLICY_DO; -+ -+ mnl_attr_for_each_nested(attr, op_policy) { -+ const struct nlattr *tb[CTRL_ATTR_POLICY_DUMP_MAX + 1] = {}; -+ DECLARE_ATTR_TB_INFO(tb); -+ -+ if (mnl_attr_get_type(attr) != policy_ctx->op) -+ continue; -+ -+ ret = mnl_attr_parse_nested(attr, attr_cb, &tb_info); -+ if (ret < 0) -+ return ret; -+ -+ if (!tb[type]) -+ continue; -+ -+ policy_ctx->op_policy_found = true; -+ policy_ctx->op_policy_idx = mnl_attr_get_u32(tb[type]); -+ break; -+ } -+ -+ return 0; -+} -+ -+static int family_policy_cb(const struct nlmsghdr *nlhdr, void *data) -+{ -+ const struct nlattr *tba[NL_POLICY_TYPE_ATTR_MAX + 1] = {}; -+ DECLARE_ATTR_TB_INFO(tba); -+ const struct nlattr *tb[CTRL_ATTR_MAX + 1] = {}; -+ DECLARE_ATTR_TB_INFO(tb); -+ struct ethtool_op_policy_query_ctx *policy_ctx = data; -+ const struct nlattr *policy_attr, *attr_attr, *attr; -+ unsigned int attr_idx, policy_idx; -+ int ret; -+ -+ ret = mnl_attr_parse(nlhdr, GENL_HDRLEN, attr_cb, &tb_info); -+ if (ret < 0) -+ return MNL_CB_ERROR; -+ -+ if (!policy_ctx->op_policy_found) { -+ if (!tb[CTRL_ATTR_OP_POLICY]) { -+ fprintf(stderr, "Error: op policy map not present\n"); -+ return MNL_CB_ERROR; -+ } -+ ret = family_policy_find_op(policy_ctx, tb[CTRL_ATTR_OP_POLICY]); -+ return ret < 0 ? MNL_CB_ERROR : MNL_CB_OK; -+ } -+ -+ if (!tb[CTRL_ATTR_POLICY]) -+ return MNL_CB_OK; -+ -+ policy_attr = mnl_attr_get_payload(tb[CTRL_ATTR_POLICY]); -+ policy_idx = mnl_attr_get_type(policy_attr); -+ attr_attr = mnl_attr_get_payload(policy_attr); -+ attr_idx = mnl_attr_get_type(attr_attr); -+ -+ ret = mnl_attr_parse_nested(attr_attr, attr_cb, &tba_info); -+ if (ret < 0) -+ return MNL_CB_ERROR; -+ -+ if (policy_idx == policy_ctx->op_policy_idx && -+ attr_idx == policy_ctx->op_hdr_attr) { -+ attr = tba[NL_POLICY_TYPE_ATTR_POLICY_IDX]; -+ if (!attr) { -+ fprintf(stderr, "Error: no policy index in what was expected to be ethtool header attribute\n"); -+ return MNL_CB_ERROR; -+ } -+ policy_ctx->hdr_policy_found = true; -+ policy_ctx->hdr_policy_idx = mnl_attr_get_u32(attr); -+ } -+ -+ if (policy_ctx->hdr_policy_found && -+ policy_ctx->hdr_policy_idx == policy_idx && -+ attr_idx == ETHTOOL_A_HEADER_FLAGS) { -+ attr = tba[NL_POLICY_TYPE_ATTR_MASK]; -+ if (!attr) { -+ fprintf(stderr, "Error: validation mask not reported for ethtool header flags\n"); -+ return MNL_CB_ERROR; -+ } -+ -+ policy_ctx->flag_mask = mnl_attr_get_u64(attr); -+ } -+ -+ return MNL_CB_OK; -+} -+ -+static int read_flags_policy(struct nl_context *nlctx, struct nl_socket *nlsk, -+ unsigned int nlcmd, unsigned int hdrattr) -+{ -+ struct ethtool_op_policy_query_ctx policy_ctx; -+ struct nl_msg_buff *msgbuff = &nlsk->msgbuff; -+ int ret; -+ -+ if (nlctx->ops_info[nlcmd].hdr_policy_loaded) -+ return 0; -+ -+ memset(&policy_ctx, 0, sizeof(policy_ctx)); -+ policy_ctx.nlctx = nlctx; -+ policy_ctx.op = nlcmd; -+ policy_ctx.op_hdr_attr = hdrattr; -+ -+ ret = __msg_init(msgbuff, GENL_ID_CTRL, CTRL_CMD_GETPOLICY, -+ NLM_F_REQUEST | NLM_F_ACK | NLM_F_DUMP, 1); -+ if (ret < 0) -+ return ret; -+ ret = -EMSGSIZE; -+ if (ethnla_put_u16(msgbuff, CTRL_ATTR_FAMILY_ID, nlctx->ethnl_fam)) -+ return ret; -+ if (ethnla_put_u32(msgbuff, CTRL_ATTR_OP, nlcmd)) -+ return ret; -+ -+ nlsock_sendmsg(nlsk, NULL); -+ nlsock_process_reply(nlsk, family_policy_cb, &policy_ctx); -+ -+ nlctx->ops_info[nlcmd].hdr_policy_loaded = 1; -+ nlctx->ops_info[nlcmd].hdr_flags = policy_ctx.flag_mask; -+ return 0; -+} -+ -+u32 get_stats_flag(struct nl_context *nlctx, unsigned int nlcmd, -+ unsigned int hdrattr) -+{ -+ if (!nlctx->ctx->show_stats) -+ return 0; -+ if (nlcmd > ETHTOOL_MSG_USER_MAX || -+ !(nlctx->ops_info[nlcmd].op_flags & GENL_CMD_CAP_HASPOL)) -+ return 0; -+ -+ if (read_flags_policy(nlctx, nlctx->ethnl_socket, nlcmd, hdrattr) < 0) -+ return 0; -+ -+ return nlctx->ops_info[nlcmd].hdr_flags & ETHTOOL_FLAG_STATS; -+} -+ - /* initialization */ - - static int genl_read_ops(struct nl_context *nlctx, -diff --git a/netlink/netlink.h b/netlink/netlink.h -index e79143016bd5..c02558540218 100644 ---- a/netlink/netlink.h -+++ b/netlink/netlink.h -@@ -27,6 +27,8 @@ enum link_mode_class { - - struct nl_op_info { - uint32_t op_flags; -+ uint32_t hdr_flags; -+ uint8_t hdr_policy_loaded:1; - }; - - struct nl_context { -@@ -70,6 +72,8 @@ bool netlink_cmd_check(struct cmd_context *ctx, unsigned int cmd, - bool allow_wildcard); - const char *get_dev_name(const struct nlattr *nest); - int get_dev_info(const struct nlattr *nest, int *ifindex, char *ifname); -+u32 get_stats_flag(struct nl_context *nlctx, unsigned int nlcmd, -+ unsigned int hdrattr); - - int linkmodes_reply_cb(const struct nlmsghdr *nlhdr, void *data); - int linkinfo_reply_cb(const struct nlmsghdr *nlhdr, void *data); --- -2.26.2 - diff --git a/0033-pause-add-support-for-dumping-statistics.patch b/0033-pause-add-support-for-dumping-statistics.patch deleted file mode 100644 index 938e5b1..0000000 --- a/0033-pause-add-support-for-dumping-statistics.patch +++ /dev/null @@ -1,147 +0,0 @@ -From dd5f8a5e8a13ce389269d6be24ba17a903dc6fd9 Mon Sep 17 00:00:00 2001 -From: Jakub Kicinski -Date: Sun, 18 Oct 2020 14:31:51 -0700 -Subject: [PATCH 33/37] pause: add support for dumping statistics - -Add support for requesting pause frame stats from the kernel. - - # ./ethtool -I -a eth0 -Pause parameters for eth0: -Autonegotiate: on -RX: on -TX: on -Statistics: - tx_pause_frames: 1 - rx_pause_frames: 1 - - # ./ethtool -I --json -a eth0 -[ { - "ifname": "eth0", - "autonegotiate": true, - "rx": true, - "tx": true, - "statistics": { - "tx_pause_frames": 1, - "rx_pause_frames": 1 - } - } ] - -v2: - correct print format for u64 - -Signed-off-by: Jakub Kicinski -Signed-off-by: Michal Kubecek -(cherry picked from commit 1166ed2fbc603e739759961a77c7ecb5cf2d5443) ---- - netlink/pause.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++- - 1 file changed, 66 insertions(+), 1 deletion(-) - -diff --git a/netlink/pause.c b/netlink/pause.c -index c54488d71fce..867d0da71f72 100644 ---- a/netlink/pause.c -+++ b/netlink/pause.c -@@ -5,6 +5,7 @@ - */ - - #include -+#include - #include - #include - -@@ -105,6 +106,62 @@ out: - return ret; - } - -+static int show_pause_stats(const struct nlattr *nest) -+{ -+ const struct nlattr *tb[ETHTOOL_A_PAUSE_STAT_MAX + 1] = {}; -+ DECLARE_ATTR_TB_INFO(tb); -+ static const struct { -+ unsigned int attr; -+ char *name; -+ } stats[] = { -+ { ETHTOOL_A_PAUSE_STAT_TX_FRAMES, "tx_pause_frames" }, -+ { ETHTOOL_A_PAUSE_STAT_RX_FRAMES, "rx_pause_frames" }, -+ }; -+ bool header = false; -+ unsigned int i; -+ size_t n; -+ int ret; -+ -+ ret = mnl_attr_parse_nested(nest, attr_cb, &tb_info); -+ if (ret < 0) -+ return ret; -+ -+ open_json_object("statistics"); -+ for (i = 0; i < ARRAY_SIZE(stats); i++) { -+ char fmt[32]; -+ -+ if (!tb[stats[i].attr]) -+ continue; -+ -+ if (!header && !is_json_context()) { -+ printf("Statistics:\n"); -+ header = true; -+ } -+ -+ if (mnl_attr_validate(tb[stats[i].attr], MNL_TYPE_U64)) { -+ fprintf(stderr, "malformed netlink message (statistic)\n"); -+ goto err_close_stats; -+ } -+ -+ n = snprintf(fmt, sizeof(fmt), " %s: %%" PRIu64 "\n", -+ stats[i].name); -+ if (n >= sizeof(fmt)) { -+ fprintf(stderr, "internal error - malformed label\n"); -+ goto err_close_stats; -+ } -+ -+ print_u64(PRINT_ANY, stats[i].name, fmt, -+ mnl_attr_get_u64(tb[stats[i].attr])); -+ } -+ close_json_object(); -+ -+ return 0; -+ -+err_close_stats: -+ close_json_object(); -+ return -1; -+} -+ - int pause_reply_cb(const struct nlmsghdr *nlhdr, void *data) - { - const struct nlattr *tb[ETHTOOL_A_PAUSE_MAX + 1] = {}; -@@ -142,6 +199,11 @@ int pause_reply_cb(const struct nlmsghdr *nlhdr, void *data) - if (ret < 0) - goto err_close_dev; - } -+ if (tb[ETHTOOL_A_PAUSE_STATS]) { -+ ret = show_pause_stats(tb[ETHTOOL_A_PAUSE_STATS]); -+ if (ret < 0) -+ goto err_close_dev; -+ } - if (!silent) - print_nl(); - -@@ -158,6 +220,7 @@ int nl_gpause(struct cmd_context *ctx) - { - struct nl_context *nlctx = ctx->nlctx; - struct nl_socket *nlsk = nlctx->ethnl_socket; -+ u32 flags; - int ret; - - if (netlink_cmd_check(ctx, ETHTOOL_MSG_PAUSE_GET, true)) -@@ -168,8 +231,10 @@ int nl_gpause(struct cmd_context *ctx) - return 1; - } - -+ flags = get_stats_flag(nlctx, ETHTOOL_MSG_PAUSE_GET, -+ ETHTOOL_A_PAUSE_HEADER); - ret = nlsock_prep_get_request(nlsk, ETHTOOL_MSG_PAUSE_GET, -- ETHTOOL_A_PAUSE_HEADER, 0); -+ ETHTOOL_A_PAUSE_HEADER, flags); - if (ret < 0) - return ret; - --- -2.26.2 - diff --git a/0034-netlink-support-u32-enumerated-types-in-pretty-print.patch b/0034-netlink-support-u32-enumerated-types-in-pretty-print.patch deleted file mode 100644 index 36d5033..0000000 --- a/0034-netlink-support-u32-enumerated-types-in-pretty-print.patch +++ /dev/null @@ -1,83 +0,0 @@ -From 856c0c40eb221499b7326c216aaf87691062eacb Mon Sep 17 00:00:00 2001 -From: Michal Kubecek -Date: Mon, 19 Oct 2020 23:32:40 +0200 -Subject: [PATCH 34/37] netlink: support u32 enumerated types in pretty - printing - -Some numeric attributes take values from a short list/range with symbolic -names. Showing the symbolic names instead of numeric values will make the -pretty printed netlink messages easier to read. If the value is too big for -provided names array (e.g. running on newer kernel) or the name is omitted, -numeric attribute value is shown. - -Signed-off-by: Michal Kubecek -(cherry picked from commit c7fe2f38477f5f90569f73bacd6fab3a8a739f62) ---- - netlink/prettymsg.c | 9 +++++++++ - netlink/prettymsg.h | 18 ++++++++++++++++-- - 2 files changed, 25 insertions(+), 2 deletions(-) - -diff --git a/netlink/prettymsg.c b/netlink/prettymsg.c -index f992dcaf071f..d5d999fddfbb 100644 ---- a/netlink/prettymsg.c -+++ b/netlink/prettymsg.c -@@ -137,6 +137,15 @@ static int pretty_print_attr(const struct nlattr *attr, - case NLA_BOOL: - printf("%s", mnl_attr_get_u8(attr) ? "on" : "off"); - break; -+ case NLA_U32_ENUM: { -+ uint32_t val = mnl_attr_get_u32(attr); -+ -+ if (adesc && val < adesc->n_names && adesc->names[val]) -+ printf("%s", adesc->names[val]); -+ else -+ printf("%u", val); -+ break; -+ } - default: - if (alen <= __DUMP_LINE) - __print_binary_short(adata, alen); -diff --git a/netlink/prettymsg.h b/netlink/prettymsg.h -index b5e5f735ac8a..6987c6ec5bca 100644 ---- a/netlink/prettymsg.h -+++ b/netlink/prettymsg.h -@@ -28,13 +28,20 @@ enum pretty_nla_format { - NLA_BOOL, - NLA_NESTED, - NLA_ARRAY, -+ NLA_U32_ENUM, - }; - - struct pretty_nla_desc { - enum pretty_nla_format format; - const char *name; -- const struct pretty_nla_desc *children; -- unsigned int n_children; -+ union { -+ const struct pretty_nla_desc *children; -+ const char *const *names; -+ }; -+ union { -+ unsigned int n_children; -+ unsigned int n_names; -+ }; - }; - - struct pretty_nlmsg_desc { -@@ -81,6 +88,13 @@ struct pretty_nlmsg_desc { - .children = __ ## _children_desc ## _desc, \ - .n_children = 1, \ - } -+#define NLATTR_DESC_U32_ENUM(_name, _names_table) \ -+ [_name] = { \ -+ .format = NLA_U32_ENUM, \ -+ .name = #_name, \ -+ .names = __ ## _names_table ## _names, \ -+ .n_children = ARRAY_SIZE(__ ## _names_table ## _names), \ -+ } - - #define NLMSG_DESC(_name, _attrs) \ - [_name] = { \ --- -2.26.2 - diff --git a/0035-netlink-support-64-bit-attribute-types-in-pretty-pri.patch b/0035-netlink-support-64-bit-attribute-types-in-pretty-pri.patch deleted file mode 100644 index ad6fa56..0000000 --- a/0035-netlink-support-64-bit-attribute-types-in-pretty-pri.patch +++ /dev/null @@ -1,97 +0,0 @@ -From 2ed28d2a92d05a4a1d8bd98dab1607741202f4a3 Mon Sep 17 00:00:00 2001 -From: Michal Kubecek -Date: Mon, 19 Oct 2020 23:32:43 +0200 -Subject: [PATCH 35/37] netlink: support 64-bit attribute types in pretty - printed messages - -Add NLA_U64 (unsigned), NLA_X64 (unsigned, printed as hex) and NLA_S64 -(signed) attribute types in pretty printing code. - -Signed-off-by: Michal Kubecek -(cherry picked from commit 0f5f1bacee2bfb0b29fe037f8236b3cd714fb10e) ---- - netlink/prettymsg.c | 10 ++++++++++ - netlink/prettymsg.h | 6 ++++++ - 2 files changed, 16 insertions(+) - -diff --git a/netlink/prettymsg.c b/netlink/prettymsg.c -index d5d999fddfbb..0a1fae3da54e 100644 ---- a/netlink/prettymsg.c -+++ b/netlink/prettymsg.c -@@ -9,6 +9,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -110,6 +111,9 @@ static int pretty_print_attr(const struct nlattr *attr, - case NLA_U32: - printf("%u", mnl_attr_get_u32(attr)); - break; -+ case NLA_U64: -+ printf("%" PRIu64, mnl_attr_get_u64(attr)); -+ break; - case NLA_X8: - printf("0x%02x", mnl_attr_get_u8(attr)); - break; -@@ -119,6 +123,9 @@ static int pretty_print_attr(const struct nlattr *attr, - case NLA_X32: - printf("0x%08x", mnl_attr_get_u32(attr)); - break; -+ case NLA_X64: -+ printf("%" PRIx64, mnl_attr_get_u64(attr)); -+ break; - case NLA_S8: - printf("%d", (int)mnl_attr_get_u8(attr)); - break; -@@ -128,6 +135,9 @@ static int pretty_print_attr(const struct nlattr *attr, - case NLA_S32: - printf("%d", (int)mnl_attr_get_u32(attr)); - break; -+ case NLA_S64: -+ printf("%" PRId64, (int64_t)mnl_attr_get_u64(attr)); -+ break; - case NLA_STRING: - printf("\"%.*s\"", alen, (const char *)adata); - break; -diff --git a/netlink/prettymsg.h b/netlink/prettymsg.h -index 6987c6ec5bca..25990cceffca 100644 ---- a/netlink/prettymsg.h -+++ b/netlink/prettymsg.h -@@ -17,12 +17,15 @@ enum pretty_nla_format { - NLA_U8, - NLA_U16, - NLA_U32, -+ NLA_U64, - NLA_X8, - NLA_X16, - NLA_X32, -+ NLA_X64, - NLA_S8, - NLA_S16, - NLA_S32, -+ NLA_S64, - NLA_STRING, - NLA_FLAG, - NLA_BOOL, -@@ -62,12 +65,15 @@ struct pretty_nlmsg_desc { - #define NLATTR_DESC_U8(_name) NLATTR_DESC(_name, NLA_U8) - #define NLATTR_DESC_U16(_name) NLATTR_DESC(_name, NLA_U16) - #define NLATTR_DESC_U32(_name) NLATTR_DESC(_name, NLA_U32) -+#define NLATTR_DESC_U64(_name) NLATTR_DESC(_name, NLA_U64) - #define NLATTR_DESC_X8(_name) NLATTR_DESC(_name, NLA_X8) - #define NLATTR_DESC_X16(_name) NLATTR_DESC(_name, NLA_X16) - #define NLATTR_DESC_X32(_name) NLATTR_DESC(_name, NLA_X32) -+#define NLATTR_DESC_X64(_name) NLATTR_DESC(_name, NLA_X64) - #define NLATTR_DESC_S8(_name) NLATTR_DESC(_name, NLA_U8) - #define NLATTR_DESC_S16(_name) NLATTR_DESC(_name, NLA_U16) - #define NLATTR_DESC_S32(_name) NLATTR_DESC(_name, NLA_U32) -+#define NLATTR_DESC_S64(_name) NLATTR_DESC(_name, NLA_S64) - #define NLATTR_DESC_STRING(_name) NLATTR_DESC(_name, NLA_STRING) - #define NLATTR_DESC_FLAG(_name) NLATTR_DESC(_name, NLA_FLAG) - #define NLATTR_DESC_BOOL(_name) NLATTR_DESC(_name, NLA_BOOL) --- -2.26.2 - diff --git a/0036-netlink-add-descriptions-for-genetlink-policy-dumps.patch b/0036-netlink-add-descriptions-for-genetlink-policy-dumps.patch deleted file mode 100644 index a03ba96..0000000 --- a/0036-netlink-add-descriptions-for-genetlink-policy-dumps.patch +++ /dev/null @@ -1,99 +0,0 @@ -From 536adfb31d821ad19fd823e56dec5e384ed5588c Mon Sep 17 00:00:00 2001 -From: Michal Kubecek -Date: Mon, 19 Oct 2020 23:32:46 +0200 -Subject: [PATCH 36/37] netlink: add descriptions for genetlink policy dumps - -Add GENL_ID_CTRL message descriptions for messages and attributes used -for policy dumps. - -Signed-off-by: Michal Kubecek -(cherry picked from commit e88f3127a007e07d81cc30c2ac9a3e752d66c0af) ---- - netlink/desc-genlctrl.c | 57 +++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 57 insertions(+) - -diff --git a/netlink/desc-genlctrl.c b/netlink/desc-genlctrl.c -index 9840179b0a1a..43b41ab395b8 100644 ---- a/netlink/desc-genlctrl.c -+++ b/netlink/desc-genlctrl.c -@@ -29,6 +29,59 @@ static const struct pretty_nla_desc __mcgrps_desc[] = { - NLATTR_DESC_NESTED(0, mcgrp), - }; - -+static const char *__policy_attr_type_names[] = { -+ [NL_ATTR_TYPE_INVALID] = "NL_ATTR_TYPE_INVALID", -+ [NL_ATTR_TYPE_FLAG] = "NL_ATTR_TYPE_FLAG", -+ [NL_ATTR_TYPE_U8] = "NL_ATTR_TYPE_U8", -+ [NL_ATTR_TYPE_U16] = "NL_ATTR_TYPE_U16", -+ [NL_ATTR_TYPE_U32] = "NL_ATTR_TYPE_U32", -+ [NL_ATTR_TYPE_U64] = "NL_ATTR_TYPE_U64", -+ [NL_ATTR_TYPE_S8] = "NL_ATTR_TYPE_S8", -+ [NL_ATTR_TYPE_S16] = "NL_ATTR_TYPE_S16", -+ [NL_ATTR_TYPE_S32] = "NL_ATTR_TYPE_S32", -+ [NL_ATTR_TYPE_S64] = "NL_ATTR_TYPE_S64", -+ [NL_ATTR_TYPE_BINARY] = "NL_ATTR_TYPE_BINARY", -+ [NL_ATTR_TYPE_STRING] = "NL_ATTR_TYPE_STRING", -+ [NL_ATTR_TYPE_NUL_STRING] = "NL_ATTR_TYPE_NUL_STRING", -+ [NL_ATTR_TYPE_NESTED] = "NL_ATTR_TYPE_NESTED", -+ [NL_ATTR_TYPE_NESTED_ARRAY] = "NL_ATTR_TYPE_NESTED_ARRAY", -+ [NL_ATTR_TYPE_BITFIELD32] = "NL_ATTR_TYPE_BITFIELD32", -+}; -+ -+static const struct pretty_nla_desc __policy_attr_desc[] = { -+ NLATTR_DESC_INVALID(NL_POLICY_TYPE_ATTR_UNSPEC), -+ NLATTR_DESC_U32_ENUM(NL_POLICY_TYPE_ATTR_TYPE, policy_attr_type), -+ NLATTR_DESC_S64(NL_POLICY_TYPE_ATTR_MIN_VALUE_S), -+ NLATTR_DESC_S64(NL_POLICY_TYPE_ATTR_MAX_VALUE_S), -+ NLATTR_DESC_U64(NL_POLICY_TYPE_ATTR_MIN_VALUE_U), -+ NLATTR_DESC_U64(NL_POLICY_TYPE_ATTR_MAX_VALUE_U), -+ NLATTR_DESC_U32(NL_POLICY_TYPE_ATTR_MIN_LENGTH), -+ NLATTR_DESC_U32(NL_POLICY_TYPE_ATTR_MAX_LENGTH), -+ NLATTR_DESC_U32(NL_POLICY_TYPE_ATTR_POLICY_IDX), -+ NLATTR_DESC_U32(NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE), -+ NLATTR_DESC_X32(NL_POLICY_TYPE_ATTR_BITFIELD32_MASK), -+ NLATTR_DESC_X64(NL_POLICY_TYPE_ATTR_PAD), -+ NLATTR_DESC_BINARY(NL_POLICY_TYPE_ATTR_MASK), -+}; -+ -+static const struct pretty_nla_desc __policy_attrs_desc[] = { -+ NLATTR_DESC_NESTED(0, policy_attr), -+}; -+ -+static const struct pretty_nla_desc __policies_desc[] = { -+ NLATTR_DESC_ARRAY(0, policy_attrs), -+}; -+ -+static const struct pretty_nla_desc __op_policy_desc[] = { -+ NLATTR_DESC_INVALID(CTRL_ATTR_POLICY_UNSPEC), -+ NLATTR_DESC_U32(CTRL_ATTR_POLICY_DO), -+ NLATTR_DESC_U32(CTRL_ATTR_POLICY_DUMP), -+}; -+ -+static const struct pretty_nla_desc __op_policies_desc[] = { -+ NLATTR_DESC_NESTED(0, op_policy), -+}; -+ - static const struct pretty_nla_desc __attr_desc[] = { - NLATTR_DESC_INVALID(CTRL_ATTR_UNSPEC), - NLATTR_DESC_U16(CTRL_ATTR_FAMILY_ID), -@@ -38,6 +91,9 @@ static const struct pretty_nla_desc __attr_desc[] = { - NLATTR_DESC_U32(CTRL_ATTR_MAXATTR), - NLATTR_DESC_ARRAY(CTRL_ATTR_OPS, attrops), - NLATTR_DESC_ARRAY(CTRL_ATTR_MCAST_GROUPS, mcgrps), -+ NLATTR_DESC_ARRAY(CTRL_ATTR_POLICY, policies), -+ NLATTR_DESC_ARRAY(CTRL_ATTR_OP_POLICY, op_policies), -+ NLATTR_DESC_U32(CTRL_ATTR_OP), - }; - - const struct pretty_nlmsg_desc genlctrl_msg_desc[] = { -@@ -51,6 +107,7 @@ const struct pretty_nlmsg_desc genlctrl_msg_desc[] = { - NLMSG_DESC(CTRL_CMD_NEWMCAST_GRP, attr), - NLMSG_DESC(CTRL_CMD_DELMCAST_GRP, attr), - NLMSG_DESC(CTRL_CMD_GETMCAST_GRP, attr), -+ NLMSG_DESC(CTRL_CMD_GETPOLICY, attr), - }; - - const unsigned int genlctrl_msg_n_desc = ARRAY_SIZE(genlctrl_msg_desc); --- -2.26.2 - diff --git a/0037-netlink-add-message-descriptions-for-pause-stats.patch b/0037-netlink-add-message-descriptions-for-pause-stats.patch deleted file mode 100644 index 3a39fa8..0000000 --- a/0037-netlink-add-message-descriptions-for-pause-stats.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 5d4ecfe153434ffae3bf9858b870eafc70e55ccf Mon Sep 17 00:00:00 2001 -From: Michal Kubecek -Date: Mon, 19 Oct 2020 23:32:49 +0200 -Subject: [PATCH 37/37] netlink: add message descriptions for pause stats - -Add message descriptions for pretty printing of new attributes used for pause -statistics. - -Signed-off-by: Michal Kubecek -(cherry picked from commit 9922adcbb4383c50eb8d0046f283873b999b40ba) ---- - netlink/desc-ethtool.c | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/netlink/desc-ethtool.c b/netlink/desc-ethtool.c -index 54f057915d6d..8dd4a91ad0d7 100644 ---- a/netlink/desc-ethtool.c -+++ b/netlink/desc-ethtool.c -@@ -178,12 +178,19 @@ static const struct pretty_nla_desc __coalesce_desc[] = { - NLATTR_DESC_U32(ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL), - }; - -+static const struct pretty_nla_desc __pause_stats_desc[] = { -+ NLATTR_DESC_BINARY(ETHTOOL_A_PAUSE_STAT_PAD), -+ NLATTR_DESC_U64(ETHTOOL_A_PAUSE_STAT_TX_FRAMES), -+ NLATTR_DESC_U64(ETHTOOL_A_PAUSE_STAT_RX_FRAMES), -+}; -+ - static const struct pretty_nla_desc __pause_desc[] = { - NLATTR_DESC_INVALID(ETHTOOL_A_PAUSE_UNSPEC), - NLATTR_DESC_NESTED(ETHTOOL_A_PAUSE_HEADER, header), - NLATTR_DESC_BOOL(ETHTOOL_A_PAUSE_AUTONEG), - NLATTR_DESC_BOOL(ETHTOOL_A_PAUSE_RX), - NLATTR_DESC_BOOL(ETHTOOL_A_PAUSE_TX), -+ NLATTR_DESC_NESTED(ETHTOOL_A_PAUSE_STATS, pause_stats), - }; - - static const struct pretty_nla_desc __eee_desc[] = { --- -2.26.2 - diff --git a/0038-update-UAPI-header-copies.patch b/0038-update-UAPI-header-copies.patch deleted file mode 100644 index 47f1b1c..0000000 --- a/0038-update-UAPI-header-copies.patch +++ /dev/null @@ -1,152 +0,0 @@ -From b70c39e968db6cb67d64526cafd72fc0763d959a Mon Sep 17 00:00:00 2001 -From: Danielle Ratson -Date: Wed, 10 Feb 2021 15:48:36 +0200 -Subject: [PATCH 38/42] update UAPI header copies - -Update to kernel commit 012ce4dd3102. - -Signed-off-by: Danielle Ratson -Signed-off-by: Michal Kubecek -(cherry picked from commit 18e509526a727c594c29622489437c7376f44d32) ---- - uapi/linux/ethtool.h | 2 +- - uapi/linux/ethtool_netlink.h | 1 + - uapi/linux/if_link.h | 10 ++++++++-- - uapi/linux/netlink.h | 2 +- - uapi/linux/rtnetlink.h | 20 +++++++++++++++----- - 5 files changed, 26 insertions(+), 9 deletions(-) - -diff --git a/uapi/linux/ethtool.h b/uapi/linux/ethtool.h -index 052689bcc90c..a951137bdba9 100644 ---- a/uapi/linux/ethtool.h -+++ b/uapi/linux/ethtool.h -@@ -14,7 +14,7 @@ - #ifndef _LINUX_ETHTOOL_H - #define _LINUX_ETHTOOL_H - --#include -+#include - #include - #include - -diff --git a/uapi/linux/ethtool_netlink.h b/uapi/linux/ethtool_netlink.h -index c022883cdb22..0cd6906aa5d5 100644 ---- a/uapi/linux/ethtool_netlink.h -+++ b/uapi/linux/ethtool_netlink.h -@@ -227,6 +227,7 @@ enum { - ETHTOOL_A_LINKMODES_DUPLEX, /* u8 */ - ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG, /* u8 */ - ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE, /* u8 */ -+ ETHTOOL_A_LINKMODES_LANES, /* u32 */ - - /* add new constants above here */ - __ETHTOOL_A_LINKMODES_CNT, -diff --git a/uapi/linux/if_link.h b/uapi/linux/if_link.h -index 307e5c245e9f..c96880c51c93 100644 ---- a/uapi/linux/if_link.h -+++ b/uapi/linux/if_link.h -@@ -75,8 +75,9 @@ struct rtnl_link_stats { - * - * @rx_dropped: Number of packets received but not processed, - * e.g. due to lack of resources or unsupported protocol. -- * For hardware interfaces this counter should not include packets -- * dropped by the device which are counted separately in -+ * For hardware interfaces this counter may include packets discarded -+ * due to L2 address filtering but should not include packets dropped -+ * by the device due to buffer exhaustion which are counted separately in - * @rx_missed_errors (since procfs folds those two counters together). - * - * @tx_dropped: Number of packets dropped on their way to transmission, -@@ -522,6 +523,8 @@ enum { - IFLA_BRPORT_BACKUP_PORT, - IFLA_BRPORT_MRP_RING_OPEN, - IFLA_BRPORT_MRP_IN_OPEN, -+ IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT, -+ IFLA_BRPORT_MCAST_EHT_HOSTS_CNT, - __IFLA_BRPORT_MAX - }; - #define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1) -@@ -586,6 +589,8 @@ enum { - IFLA_MACVLAN_MACADDR, - IFLA_MACVLAN_MACADDR_DATA, - IFLA_MACVLAN_MACADDR_COUNT, -+ IFLA_MACVLAN_BC_QUEUE_LEN, -+ IFLA_MACVLAN_BC_QUEUE_LEN_USED, - __IFLA_MACVLAN_MAX, - }; - -@@ -804,6 +809,7 @@ enum { - IFLA_GTP_FD1, - IFLA_GTP_PDP_HASHSIZE, - IFLA_GTP_ROLE, -+ IFLA_GTP_COLLECT_METADATA, - __IFLA_GTP_MAX, - }; - #define IFLA_GTP_MAX (__IFLA_GTP_MAX - 1) -diff --git a/uapi/linux/netlink.h b/uapi/linux/netlink.h -index dfef006be9f9..5024c5435749 100644 ---- a/uapi/linux/netlink.h -+++ b/uapi/linux/netlink.h -@@ -2,7 +2,7 @@ - #ifndef __LINUX_NETLINK_H - #define __LINUX_NETLINK_H - --#include -+#include - #include /* for __kernel_sa_family_t */ - #include - -diff --git a/uapi/linux/rtnetlink.h b/uapi/linux/rtnetlink.h -index 5ad84e663d01..c66fd247d90a 100644 ---- a/uapi/linux/rtnetlink.h -+++ b/uapi/linux/rtnetlink.h -@@ -396,11 +396,13 @@ struct rtnexthop { - #define RTNH_F_DEAD 1 /* Nexthop is dead (used by multipath) */ - #define RTNH_F_PERVASIVE 2 /* Do recursive gateway lookup */ - #define RTNH_F_ONLINK 4 /* Gateway is forced on link */ --#define RTNH_F_OFFLOAD 8 /* offloaded route */ -+#define RTNH_F_OFFLOAD 8 /* Nexthop is offloaded */ - #define RTNH_F_LINKDOWN 16 /* carrier-down on nexthop */ - #define RTNH_F_UNRESOLVED 32 /* The entry is unresolved (ipmr) */ -+#define RTNH_F_TRAP 64 /* Nexthop is trapping packets */ - --#define RTNH_COMPARE_MASK (RTNH_F_DEAD | RTNH_F_LINKDOWN | RTNH_F_OFFLOAD) -+#define RTNH_COMPARE_MASK (RTNH_F_DEAD | RTNH_F_LINKDOWN | \ -+ RTNH_F_OFFLOAD | RTNH_F_TRAP) - - /* Macros to handle hexthops */ - -@@ -764,12 +766,18 @@ enum { - #define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg)) - /* tcamsg flags stored in attribute TCA_ROOT_FLAGS - * -- * TCA_FLAG_LARGE_DUMP_ON user->kernel to request for larger than TCA_ACT_MAX_PRIO -- * actions in a dump. All dump responses will contain the number of actions -- * being dumped stored in for user app's consumption in TCA_ROOT_COUNT -+ * TCA_ACT_FLAG_LARGE_DUMP_ON user->kernel to request for larger than -+ * TCA_ACT_MAX_PRIO actions in a dump. All dump responses will contain the -+ * number of actions being dumped stored in for user app's consumption in -+ * TCA_ROOT_COUNT -+ * -+ * TCA_ACT_FLAG_TERSE_DUMP user->kernel to request terse (brief) dump that only -+ * includes essential action info (kind, index, etc.) - * - */ - #define TCA_FLAG_LARGE_DUMP_ON (1 << 0) -+#define TCA_ACT_FLAG_LARGE_DUMP_ON TCA_FLAG_LARGE_DUMP_ON -+#define TCA_ACT_FLAG_TERSE_DUMP (1 << 1) - - /* New extended info filters for IFLA_EXT_MASK */ - #define RTEXT_FILTER_VF (1 << 0) -@@ -777,6 +785,8 @@ enum { - #define RTEXT_FILTER_BRVLAN_COMPRESSED (1 << 2) - #define RTEXT_FILTER_SKIP_STATS (1 << 3) - #define RTEXT_FILTER_MRP (1 << 4) -+#define RTEXT_FILTER_CFM_CONFIG (1 << 5) -+#define RTEXT_FILTER_CFM_STATUS (1 << 6) - - /* End of information exported to user level */ - --- -2.31.1 - diff --git a/0039-netlink-settings-Add-netlink-support-for-lanes-param.patch b/0039-netlink-settings-Add-netlink-support-for-lanes-param.patch deleted file mode 100644 index b8a9ea8..0000000 --- a/0039-netlink-settings-Add-netlink-support-for-lanes-param.patch +++ /dev/null @@ -1,63 +0,0 @@ -From e9ee8ed549fbc02527356c3c82cec23434fc2f56 Mon Sep 17 00:00:00 2001 -From: Danielle Ratson -Date: Wed, 10 Feb 2021 15:48:37 +0200 -Subject: [PATCH 39/42] netlink: settings: Add netlink support for lanes - parameter - -Add support for "ethtool -s lanes N ..." for setting a specific -number of lanes. - -Signed-off-by: Danielle Ratson -Signed-off-by: Michal Kubecek -(cherry picked from commit 107ee330ec7bf83e8c3938375f3466bc8e102b93) ---- - ethtool.c | 1 + - netlink/desc-ethtool.c | 1 + - netlink/settings.c | 7 +++++++ - 3 files changed, 9 insertions(+) - -diff --git a/ethtool.c b/ethtool.c -index f5fbb01e553a..61f136c5bf2c 100644 ---- a/ethtool.c -+++ b/ethtool.c -@@ -5568,6 +5568,7 @@ static const struct option args[] = { - .nlfunc = nl_sset, - .help = "Change generic options", - .xhelp = " [ speed %d ]\n" -+ " [ lanes %d ]\n" - " [ duplex half|full ]\n" - " [ port tp|aui|bnc|mii|fibre|da ]\n" - " [ mdix auto|on|off ]\n" -diff --git a/netlink/desc-ethtool.c b/netlink/desc-ethtool.c -index 8dd4a91ad0d7..c8447ce33f4d 100644 ---- a/netlink/desc-ethtool.c -+++ b/netlink/desc-ethtool.c -@@ -87,6 +87,7 @@ static const struct pretty_nla_desc __linkmodes_desc[] = { - NLATTR_DESC_U8(ETHTOOL_A_LINKMODES_DUPLEX), - NLATTR_DESC_U8(ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG), - NLATTR_DESC_U8(ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE), -+ NLATTR_DESC_U32(ETHTOOL_A_LINKMODES_LANES), - }; - - static const struct pretty_nla_desc __linkstate_desc[] = { -diff --git a/netlink/settings.c b/netlink/settings.c -index 01c1d38d323f..37222db5c833 100644 ---- a/netlink/settings.c -+++ b/netlink/settings.c -@@ -1065,6 +1065,13 @@ static const struct param_parser sset_params[] = { - .handler = nl_parse_direct_u32, - .min_argc = 1, - }, -+ { -+ .arg = "lanes", -+ .group = ETHTOOL_MSG_LINKMODES_SET, -+ .type = ETHTOOL_A_LINKMODES_LANES, -+ .handler = nl_parse_direct_u32, -+ .min_argc = 1, -+ }, - { - .arg = "duplex", - .group = ETHTOOL_MSG_LINKMODES_SET, --- -2.31.1 - diff --git a/0040-netlink-settings-Expose-the-number-of-lanes-in-use.patch b/0040-netlink-settings-Expose-the-number-of-lanes-in-use.patch deleted file mode 100644 index 047897c..0000000 --- a/0040-netlink-settings-Expose-the-number-of-lanes-in-use.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 53e33fe5f4f982afe13e45677d134eb1b11d4d2a Mon Sep 17 00:00:00 2001 -From: Danielle Ratson -Date: Wed, 10 Feb 2021 15:48:38 +0200 -Subject: [PATCH 40/42] netlink: settings: Expose the number of lanes in use - -Currently, the user does not have the information regarding how many lanes -are used when the link is up. - -After adding a possibility to advertise or force a specific number of -lanes this information becomes helpful. - -Expose the number of lanes in use if the information is passed from -kernel. - -Signed-off-by: Danielle Ratson -Signed-off-by: Michal Kubecek -(cherry picked from commit db7d457e49833d8a68be03d48cffa1d617498adc) ---- - netlink/settings.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/netlink/settings.c b/netlink/settings.c -index 37222db5c833..2835805667d2 100644 ---- a/netlink/settings.c -+++ b/netlink/settings.c -@@ -471,6 +471,12 @@ int linkmodes_reply_cb(const struct nlmsghdr *nlhdr, void *data) - else - printf("\tSpeed: %uMb/s\n", val); - } -+ if (tb[ETHTOOL_A_LINKMODES_LANES]) { -+ uint32_t val = mnl_attr_get_u32(tb[ETHTOOL_A_LINKMODES_LANES]); -+ -+ print_banner(nlctx); -+ printf("\tLanes: %u\n", val); -+ } - if (tb[ETHTOOL_A_LINKMODES_DUPLEX]) { - uint8_t val = mnl_attr_get_u8(tb[ETHTOOL_A_LINKMODES_DUPLEX]); - --- -2.31.1 - diff --git a/0041-shell-completion-Add-completion-for-lanes.patch b/0041-shell-completion-Add-completion-for-lanes.patch deleted file mode 100644 index a41e40e..0000000 --- a/0041-shell-completion-Add-completion-for-lanes.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 68c18af78f4e5eac30ed4fd4c6f3bb0ca8dc347e Mon Sep 17 00:00:00 2001 -From: Danielle Ratson -Date: Wed, 10 Feb 2021 15:48:39 +0200 -Subject: [PATCH 41/42] shell-completion: Add completion for lanes - -Lanes was added as a new link mode setting in ethtool. - -Support completion for lanes when setting parameters. - -Signed-off-by: Danielle Ratson -Reviewed-by: Jiri Pirko -Signed-off-by: Michal Kubecek -(cherry picked from commit c323bcb248c2424cebe533cb2607283aa4538a0b) ---- - shell-completion/bash/ethtool | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/shell-completion/bash/ethtool b/shell-completion/bash/ethtool -index 53055594b649..45573413985d 100644 ---- a/shell-completion/bash/ethtool -+++ b/shell-completion/bash/ethtool -@@ -97,6 +97,7 @@ _ethtool_change() - [speed]=notseen - [wol]=notseen - [xcvr]=notseen -+ [lanes]=notseen - ) - - local -A msgtypes=( -@@ -175,6 +176,9 @@ _ethtool_change() - xcvr) - COMPREPLY=( $( compgen -W 'internal external' -- "$cur" ) ) - return ;; -+ lanes) -+ # Number -+ return ;; - esac - - local -a comp_words=() --- -2.31.1 - diff --git a/0042-man-Add-man-page-for-setting-lanes-parameter.patch b/0042-man-Add-man-page-for-setting-lanes-parameter.patch deleted file mode 100644 index c99481d..0000000 --- a/0042-man-Add-man-page-for-setting-lanes-parameter.patch +++ /dev/null @@ -1,41 +0,0 @@ -From c8883327ddbbdcc8241104a98800bd50c0a667e1 Mon Sep 17 00:00:00 2001 -From: Danielle Ratson -Date: Wed, 10 Feb 2021 15:48:40 +0200 -Subject: [PATCH 42/42] man: Add man page for setting lanes parameter - -Lanes parameter was added for setting using ethtool. - -Update the man page to include the new parameter. - -Signed-off-by: Danielle Ratson -Signed-off-by: Michal Kubecek -(cherry picked from commit e2a120e1d44e6c4d64f53ac78c9c08427922b33b) ---- - ethtool.8.in | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/ethtool.8.in b/ethtool.8.in -index e0601b3db0cf..3a7a8f947cc1 100644 ---- a/ethtool.8.in -+++ b/ethtool.8.in -@@ -251,6 +251,7 @@ ethtool \- query or control network driver and hardware settings - .B ethtool \-s - .I devname - .BN speed -+.BN lanes - .B2 duplex half full - .B4 port tp aui bnc mii fibre da - .B3 mdix auto on off -@@ -682,6 +683,9 @@ Set speed in Mb/s. - .B ethtool - with just the device name as an argument will show you the supported device speeds. - .TP -+.BI lanes \ N -+Set number of lanes. -+.TP - .A2 duplex half full - Sets full or half duplex mode. - .TP --- -2.31.1 - diff --git a/download b/download new file mode 100644 index 0000000..b06a12e --- /dev/null +++ b/download @@ -0,0 +1 @@ +940bd6c330b9ebafaf40b3b428e56754 ethtool-5.13.tar.xz diff --git a/ethtool-5.8.tar.xz b/ethtool-5.8.tar.xz deleted file mode 100644 index fcdce08df493295ae8105aca882f5c9e0b7db909..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 299416 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

i1G_+{hvc=}UWXm-23lRSVgOtuA{*Tlm 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%0A3jfYw2%4Nif*@JlYwh9JAr-?Bc`|nU6p| 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∓7yB$k6UH-VUW@qU?g&8zUaOG-& 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 D{p;!h)$Jn~|d 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

HLsAVMuJ=AY^f~43fH|O>!BRw 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 +rCi_ePHE+ak6zesD9t01$bzl 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

3m_)EBKr|AE(~(B9q@E|v3*Ff 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 diff --git a/ethtool.spec b/ethtool.spec index c5bf8ad..aa6e62c 100644 --- a/ethtool.spec +++ b/ethtool.spec @@ -1,54 +1,12 @@ Name: ethtool Epoch: 2 -Version: 5.8 -Release: 7%{?dist} +Version: 5.13 +Release: 1%{?dist} Summary: Settings tool for Ethernet NICs License: GPLv2 Group: Applications/System URL: https://www.kernel.org/pub/software/network/%{name}/ Source0: https://www.kernel.org/pub/software/network/%{name}/%{name}-%{version}.tar.xz -Patch1: 0001-netlink-Fix-the-condition-for-displaying-actual-chan.patch -Patch2: 0002-netlink-Print-and-return-an-error-when-features-were.patch -Patch3: 0003-netlink-get-rid-of-signed-unsigned-comparison-warnin.patch -Patch4: 0004-ioctl-check-presence-of-eeprom-length-argument-prope.patch -Patch5: 0005-ioctl-prevent-argc-underflow-in-do_perqueue.patch -Patch6: 0006-ioctl-make-argc-counters-unsigned.patch -Patch7: 0007-ioctl-get-rid-of-signed-unsigned-comparison-warnings.patch -Patch8: 0008-get-rid-of-signed-unsigned-comparison-warnings-in-re.patch -Patch9: 0009-settings-simplify-link_mode_info-initializers.patch -Patch10: 0010-ioctl-convert-cmdline_info-arrays-to-named-initializ.patch -Patch11: 0011-build-add-Wextra-to-default-CFLAGS.patch -Patch12: 0012-ioctl-only-memset-non-NULL-link-settings.patch -Patch13: 0013-netlink-mark-unused-function-parameters-of-non-netli.patch -Patch14: 0014-update-UAPI-header-copies.patch -Patch15: 0015-update-link-mode-tables.patch -Patch16: 0016-netlink-return-ENOMEM-when-calloc-fails.patch -Patch17: 0017-netlink-fix-memory-leak.patch -Patch18: 0018-fix-memory-leaks-in-do_sfeatures.patch -Patch19: 0019-netlink-fix-copy-paste-error-in-rtm_link_summary.patch -Patch20: 0020-uapi-linux-update-kernel-UAPI-header-files.patch -Patch21: 0021-netlink-settings-expand-linkstate_reply_cb-to-suppor.patch -Patch22: 0022-netlink-prepare-for-more-per-op-info.patch -Patch23: 0023-netlink-fix-use-after-free-in-netlink_run_handler.patch -Patch24: 0024-netlink-fix-leaked-instances-of-struct-nl_socket.patch -Patch25: 0025-netlink-do-not-send-messages-and-process-replies-in-.patch -Patch26: 0026-ethtool-Improve-compatibility-between-netlink-and-io.patch -Patch27: 0027-update-UAPI-header-copies.patch -Patch28: 0028-update-UAPI-header-copies.patch -Patch29: 0029-pause-add-json-support.patch -Patch30: 0030-separate-FLAGS-out-in-h.patch -Patch31: 0031-add-support-for-stats-in-subcommands.patch -Patch32: 0032-netlink-use-policy-dumping-to-check-if-stats-flag-is.patch -Patch33: 0033-pause-add-support-for-dumping-statistics.patch -Patch34: 0034-netlink-support-u32-enumerated-types-in-pretty-print.patch -Patch35: 0035-netlink-support-64-bit-attribute-types-in-pretty-pri.patch -Patch36: 0036-netlink-add-descriptions-for-genetlink-policy-dumps.patch -Patch37: 0037-netlink-add-message-descriptions-for-pause-stats.patch -Patch38: 0038-update-UAPI-header-copies.patch -Patch39: 0039-netlink-settings-Add-netlink-support-for-lanes-param.patch -Patch40: 0040-netlink-settings-Expose-the-number-of-lanes-in-use.patch -Patch41: 0041-shell-completion-Add-completion-for-lanes.patch -Patch42: 0042-man-Add-man-page-for-setting-lanes-parameter.patch BuildRequires: libmnl-devel Conflicts: filesystem < 3 @@ -59,48 +17,6 @@ network devices, especially of Ethernet devices. %prep %setup -q -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 -%patch6 -p1 -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 -%patch11 -p1 -%patch12 -p1 -%patch13 -p1 -%patch14 -p1 -%patch15 -p1 -%patch16 -p1 -%patch17 -p1 -%patch18 -p1 -%patch19 -p1 -%patch20 -p1 -%patch21 -p1 -%patch22 -p1 -%patch23 -p1 -%patch24 -p1 -%patch25 -p1 -%patch26 -p1 -%patch27 -p1 -%patch28 -p1 -%patch29 -p1 -%patch30 -p1 -%patch31 -p1 -%patch32 -p1 -%patch33 -p1 -%patch34 -p1 -%patch35 -p1 -%patch36 -p1 -%patch37 -p1 -%patch38 -p1 -%patch39 -p1 -%patch40 -p1 -%patch41 -p1 -%patch42 -p1 %build %configure @@ -117,6 +33,9 @@ make DESTDIR=%{buildroot} INSTALL='install -p' install %{_datadir}/bash-completion/completions/ethtool %changelog +* Thu Nov 18 2021 Ivan Vecera - 2:5.13-1 +- Updated to upstream v5.13 + * Thu Jun 03 2021 Ivan Vecera - 2:5.8-7 - Added support for lanes -- Gitee