From bdc7d9183bded1223c65eb87225403b5b97388e2 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Aug 06 2019 11:14:37 +0000 Subject: import ethtool-4.8-10.el7 --- diff --git a/SOURCES/0019-ethtool-Fix-coding-style-warnings-and-errors-reporte.patch b/SOURCES/0019-ethtool-Fix-coding-style-warnings-and-errors-reporte.patch new file mode 100644 index 0000000..5fec7e2 --- /dev/null +++ b/SOURCES/0019-ethtool-Fix-coding-style-warnings-and-errors-reporte.patch @@ -0,0 +1,385 @@ +From ec0ef0916c7d8d5f1b618610f202c805f1955827 Mon Sep 17 00:00:00 2001 +From: Gal Pressman +Date: Thu, 26 Oct 2017 17:44:43 +0300 +Subject: [PATCH] ethtool: Fix coding style warnings and errors reported by + checkpatch + +Checkpatch had a lot to say about ethtool.c, this will handle a lot of +the reported issues. + +Signed-off-by: Gal Pressman +Reviewed-by: Tariq Toukan +(cherry picked from commit 5a20e546c0bf4b479f1b3cd272ea366a6069bfa4) +--- + ethtool.c | 189 +++++++++++++++++++++++++++++--------------------------------- + 1 file changed, 89 insertions(+), 100 deletions(-) + +diff --git a/ethtool.c b/ethtool.c +index 2ecc13f..06006f4 100644 +--- a/ethtool.c ++++ b/ethtool.c +@@ -235,7 +235,7 @@ get_uint_range(char *str, int base, unsigned long long max) + exit_bad_args(); + errno = 0; + v = strtoull(str, &endp, base); +- if ( errno || *endp || v > max) ++ if (errno || *endp || v > max) + exit_bad_args(); + return v; + } +@@ -261,9 +261,8 @@ static void get_mac_addr(char *src, unsigned char *dest) + if (count != ETH_ALEN) + exit_bad_args(); + +- for (i = 0; i < count; i++) { ++ for (i = 0; i < count; i++) + dest[i] = buf[i]; +- } + } + + static int parse_hex_u32_bitmap(const char *s, +@@ -408,7 +407,7 @@ static void parse_generic_cmdline(struct cmd_context *ctx, + break; + } + } +- if( !found) ++ if (!found) + exit_bad_args(); + } + } +@@ -686,10 +685,10 @@ static void dump_link_caps(const char *prefix, const char *an_prefix, + "10000baseLRM/Full" }, + { 0, ETHTOOL_LINK_MODE_10000baseER_Full_BIT, + "10000baseER/Full" }, +- { 0, ETHTOOL_LINK_MODE_2500baseT_Full_BIT, +- "2500baseT/Full" }, +- { 0, ETHTOOL_LINK_MODE_5000baseT_Full_BIT, +- "5000baseT/Full" }, ++ { 0, ETHTOOL_LINK_MODE_2500baseT_Full_BIT, ++ "2500baseT/Full" }, ++ { 0, ETHTOOL_LINK_MODE_5000baseT_Full_BIT, ++ "5000baseT/Full" }, + }; + int indent; + int did1, new_line_pend, i; +@@ -719,7 +718,7 @@ static void dump_link_caps(const char *prefix, const char *an_prefix, + } + } + if (did1 == 0) +- fprintf(stdout, "Not reported"); ++ fprintf(stdout, "Not reported"); + fprintf(stdout, "\n"); + + if (!link_mode_only) { +@@ -911,32 +910,32 @@ static int parse_wolopts(char *optstr, u32 *data) + *data = 0; + while (*optstr) { + switch (*optstr) { +- case 'p': +- *data |= WAKE_PHY; +- break; +- case 'u': +- *data |= WAKE_UCAST; +- break; +- case 'm': +- *data |= WAKE_MCAST; +- break; +- case 'b': +- *data |= WAKE_BCAST; +- break; +- case 'a': +- *data |= WAKE_ARP; +- break; +- case 'g': +- *data |= WAKE_MAGIC; +- break; +- case 's': +- *data |= WAKE_MAGICSECURE; +- break; +- case 'd': +- *data = 0; +- break; +- default: +- return -1; ++ case 'p': ++ *data |= WAKE_PHY; ++ break; ++ case 'u': ++ *data |= WAKE_UCAST; ++ break; ++ case 'm': ++ *data |= WAKE_MCAST; ++ break; ++ case 'b': ++ *data |= WAKE_BCAST; ++ break; ++ case 'a': ++ *data |= WAKE_ARP; ++ break; ++ case 'g': ++ *data |= WAKE_MAGIC; ++ break; ++ case 's': ++ *data |= WAKE_MAGICSECURE; ++ break; ++ case 'd': ++ *data = 0; ++ break; ++ default: ++ return -1; + } + optstr++; + } +@@ -981,10 +980,11 @@ static int dump_wol(struct ethtool_wolinfo *wol) + if (wol->supported & WAKE_MAGICSECURE) { + int i; + int delim = 0; ++ + fprintf(stdout, " SecureOn password: "); + for (i = 0; i < SOPASS_MAX; i++) { + fprintf(stdout, "%s%02x", delim?":":"", wol->sopass[i]); +- delim=1; ++ delim = 1; + } + fprintf(stdout, "\n"); + } +@@ -997,32 +997,32 @@ static int parse_rxfhashopts(char *optstr, u32 *data) + *data = 0; + while (*optstr) { + switch (*optstr) { +- case 'm': +- *data |= RXH_L2DA; +- break; +- case 'v': +- *data |= RXH_VLAN; +- break; +- case 't': +- *data |= RXH_L3_PROTO; +- break; +- case 's': +- *data |= RXH_IP_SRC; +- break; +- case 'd': +- *data |= RXH_IP_DST; +- break; +- case 'f': +- *data |= RXH_L4_B_0_1; +- break; +- case 'n': +- *data |= RXH_L4_B_2_3; +- break; +- case 'r': +- *data |= RXH_DISCARD; +- break; +- default: +- return -1; ++ case 'm': ++ *data |= RXH_L2DA; ++ break; ++ case 'v': ++ *data |= RXH_VLAN; ++ break; ++ case 't': ++ *data |= RXH_L3_PROTO; ++ break; ++ case 's': ++ *data |= RXH_IP_SRC; ++ break; ++ case 'd': ++ *data |= RXH_IP_DST; ++ break; ++ case 'f': ++ *data |= RXH_L4_B_0_1; ++ break; ++ case 'n': ++ *data |= RXH_L4_B_2_3; ++ break; ++ case 'r': ++ *data |= RXH_DISCARD; ++ break; ++ default: ++ return -1; + } + optstr++; + } +@@ -1036,27 +1036,20 @@ static char *unparse_rxfhashopts(u64 opts) + memset(buf, 0, sizeof(buf)); + + if (opts) { +- if (opts & RXH_L2DA) { ++ if (opts & RXH_L2DA) + strcat(buf, "L2DA\n"); +- } +- if (opts & RXH_VLAN) { ++ if (opts & RXH_VLAN) + strcat(buf, "VLAN tag\n"); +- } +- if (opts & RXH_L3_PROTO) { ++ if (opts & RXH_L3_PROTO) + strcat(buf, "L3 proto\n"); +- } +- if (opts & RXH_IP_SRC) { ++ if (opts & RXH_IP_SRC) + strcat(buf, "IP SA\n"); +- } +- if (opts & RXH_IP_DST) { ++ if (opts & RXH_IP_DST) + strcat(buf, "IP DA\n"); +- } +- if (opts & RXH_L4_B_0_1) { ++ if (opts & RXH_L4_B_0_1) + strcat(buf, "L4 bytes 0 & 1 [TCP/UDP src port]\n"); +- } +- if (opts & RXH_L4_B_2_3) { ++ if (opts & RXH_L4_B_2_3) + strcat(buf, "L4 bytes 2 & 3 [TCP/UDP dst port]\n"); +- } + } else { + sprintf(buf, "None"); + } +@@ -1157,10 +1150,10 @@ static const struct { + { "tg3", tg3_dump_regs }, + { "skge", skge_dump_regs }, + { "sky2", sky2_dump_regs }, +- { "vioc", vioc_dump_regs }, +- { "smsc911x", smsc911x_dump_regs }, +- { "at76c50x-usb", at76c50x_usb_dump_regs }, +- { "sfc", sfc_dump_regs }, ++ { "vioc", vioc_dump_regs }, ++ { "smsc911x", smsc911x_dump_regs }, ++ { "at76c50x-usb", at76c50x_usb_dump_regs }, ++ { "sfc", sfc_dump_regs }, + { "st_mac100", st_mac100_dump_regs }, + { "st_gmac", st_gmac_dump_regs }, + { "et131x", et131x_dump_regs }, +@@ -2805,7 +2798,7 @@ static int do_sset(struct cmd_context *ctx) + i += 1; + if (i >= argc) + exit_bad_args(); +- speed_wanted = get_int(argp[i],10); ++ speed_wanted = get_int(argp[i], 10); + } else if (!strcmp(argp[i], "duplex")) { + gset_changed = 1; + i += 1; +@@ -3016,7 +3009,7 @@ static int do_sset(struct cmd_context *ctx) + speed_wanted); + if (duplex_wanted >= 0) + fprintf(stderr, " duplex %s", +- duplex_wanted ? ++ duplex_wanted ? + "full" : "half"); + fprintf(stderr, "\n"); + } +@@ -3101,14 +3094,12 @@ static int do_sset(struct cmd_context *ctx) + perror("Cannot get current wake-on-lan settings"); + } else { + /* Change everything the user specified. */ +- if (wol_change) { ++ if (wol_change) + wol.wolopts = wol_wanted; +- } + if (sopass_change) { + int i; +- for (i = 0; i < SOPASS_MAX; i++) { ++ for (i = 0; i < SOPASS_MAX; i++) + wol.sopass[i] = sopass_wanted[i]; +- } + } + + /* Try to perform the update. */ +@@ -3205,7 +3196,7 @@ static int do_gregs(struct cmd_context *ctx) + free(regs); + return 75; + } +- } ++ } + + if (dump_regs(gregs_dump_raw, gregs_dump_hex, + &drvinfo, regs) < 0) { +@@ -3364,7 +3355,7 @@ static int do_seeprom(struct cmd_context *ctx) + static int do_test(struct cmd_context *ctx) + { + enum { +- ONLINE=0, ++ ONLINE = 0, + OFFLINE, + EXTERNAL_LB, + } test_type; +@@ -3375,15 +3366,14 @@ static int do_test(struct cmd_context *ctx) + if (ctx->argc > 1) + exit_bad_args(); + if (ctx->argc == 1) { +- if (!strcmp(ctx->argp[0], "online")) { ++ if (!strcmp(ctx->argp[0], "online")) + test_type = ONLINE; +- } else if (!strcmp(*ctx->argp, "offline")) { ++ else if (!strcmp(*ctx->argp, "offline")) + test_type = OFFLINE; +- } else if (!strcmp(*ctx->argp, "external_lb")) { ++ else if (!strcmp(*ctx->argp, "external_lb")) + test_type = EXTERNAL_LB; +- } else { ++ else + exit_bad_args(); +- } + } else { + test_type = OFFLINE; + } +@@ -3414,7 +3404,7 @@ static int do_test(struct cmd_context *ctx) + err = send_ioctl(ctx, test); + if (err < 0) { + perror("Cannot test"); +- free (test); ++ free(test); + free(strings); + return 74; + } +@@ -3556,7 +3546,7 @@ static int do_srxclass(struct cmd_context *ctx) + err = send_ioctl(ctx, &nfccmd); + if (err < 0) + perror("Cannot change RX network flow hashing options"); +- } else if (!strcmp(ctx->argp[0], "flow-type")) { ++ } else if (!strcmp(ctx->argp[0], "flow-type")) { + struct ethtool_rx_flow_spec rx_rule_fs; + __u32 rss_context = 0; + +@@ -4325,8 +4315,8 @@ static int do_srxntuple(struct cmd_context *ctx, + /* + * Display error only if response is something other than op not + * supported. It is possible that the interface uses the network +- * flow classifier interface instead of N-tuple. +- */ ++ * flow classifier interface instead of N-tuple. ++ */ + if (err < 0) { + if (errno != EOPNOTSUPP) + perror("Cannot add new rule via N-tuple"); +@@ -4468,7 +4458,7 @@ static int do_gprivflags(struct cmd_context *ctx) + + /* Find longest string and align all strings accordingly */ + for (i = 0; i < strings->len; i++) { +- cur_len = strlen((const char*)strings->data + ++ cur_len = strlen((const char *)strings->data + + i * ETH_GSTRING_LEN); + if (cur_len > max_len) + max_len = cur_len; +@@ -4718,7 +4708,6 @@ static int do_seee(struct cmd_context *ctx) + do_generic_set(cmdline_eee, ARRAY_SIZE(cmdline_eee), &change2); + + if (change2) { +- + eeecmd.cmd = ETHTOOL_SEEE; + if (send_ioctl(ctx, &eeecmd)) { + perror("Cannot set EEE settings"); +@@ -4958,7 +4947,7 @@ static const struct option { + " [ tx N ]\n" + " [ other N ]\n" + " [ combined N ]\n" }, +- { "--show-priv-flags" , 1, do_gprivflags, "Query private flags" }, ++ { "--show-priv-flags", 1, do_gprivflags, "Query private flags" }, + { "--set-priv-flags", 1, do_sprivflags, "Set private flags", + " FLAG on|off ...\n" }, + { "-m|--dump-module-eeprom|--module-info", 1, do_getmodule, +-- +1.8.3.1 + diff --git a/SOURCES/0020-ethtool-Add-support-for-200Gbps-50Gbps-per-lane-link.patch b/SOURCES/0020-ethtool-Add-support-for-200Gbps-50Gbps-per-lane-link.patch new file mode 100644 index 0000000..e40303b --- /dev/null +++ b/SOURCES/0020-ethtool-Add-support-for-200Gbps-50Gbps-per-lane-link.patch @@ -0,0 +1,162 @@ +From f507c9e5f77a10d25d32581c2b160e90c4c446b0 Mon Sep 17 00:00:00 2001 +From: Aya Levin +Date: Mon, 25 Feb 2019 17:44:34 +0200 +Subject: [PATCH] ethtool: Add support for 200Gbps (50Gbps per lane) link mode + +Introduce 50Gbps per lane link modes and 200Gbps speed, update print +functions and initialization functions accordingly. +In addition, update related man page accordingly. + +Signed-off-by: Aya Levin +Signed-off-by: Tariq Toukan +Reviewed-by: Michal Kubecek +Signed-off-by: John W. Linville +(cherry picked from commit caa4bbef6ff920a0ff1d94c5bff7f2c7c875fca3) +--- + ethtool-copy.h | 18 +++++++++++++++++- + ethtool.8.in | 15 +++++++++++++++ + ethtool.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 77 insertions(+), 1 deletion(-) + +diff --git a/ethtool-copy.h b/ethtool-copy.h +index 8cc61e9..28b3592 100644 +--- a/ethtool-copy.h ++++ b/ethtool-copy.h +@@ -1450,6 +1450,21 @@ enum ethtool_link_mode_bit_indices { + ETHTOOL_LINK_MODE_FEC_NONE_BIT = 49, + ETHTOOL_LINK_MODE_FEC_RS_BIT = 50, + ETHTOOL_LINK_MODE_FEC_BASER_BIT = 51, ++ ETHTOOL_LINK_MODE_50000baseKR_Full_BIT = 52, ++ ETHTOOL_LINK_MODE_50000baseSR_Full_BIT = 53, ++ ETHTOOL_LINK_MODE_50000baseCR_Full_BIT = 54, ++ ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = 55, ++ ETHTOOL_LINK_MODE_50000baseDR_Full_BIT = 56, ++ ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = 57, ++ ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = 58, ++ ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = 59, ++ ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 60, ++ ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = 61, ++ ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = 62, ++ ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = 63, ++ ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 64, ++ ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 65, ++ ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 66, + + /* Last allowed bit for __ETHTOOL_LINK_MODE_LEGACY_MASK is bit + * 31. Please do NOT define any SUPPORTED_* or ADVERTISED_* +@@ -1458,7 +1473,7 @@ enum ethtool_link_mode_bit_indices { + */ + + __ETHTOOL_LINK_MODE_LAST +- = ETHTOOL_LINK_MODE_FEC_BASER_BIT, ++ = ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT, + }; + + #define __ETHTOOL_LINK_MODE_LEGACY_MASK(base_name) \ +@@ -1566,6 +1581,7 @@ enum ethtool_link_mode_bit_indices { + #define SPEED_50000 50000 + #define SPEED_56000 56000 + #define SPEED_100000 100000 ++#define SPEED_200000 200000 + + #define SPEED_UNKNOWN -1 + +diff --git a/ethtool.8.in b/ethtool.8.in +index dd2e3f5..de6ae68 100644 +--- a/ethtool.8.in ++++ b/ethtool.8.in +@@ -613,6 +613,11 @@ lB l lB. + 0x400000000 50000baseCR2 Full + 0x800000000 50000baseKR2 Full + 0x10000000000 50000baseSR2 Full ++0x10000000000000 50000baseKR Full ++0x20000000000000 50000baseSR Full ++0x40000000000000 50000baseCR Full ++0x80000000000000 50000baseLR_ER_FR Full ++0x100000000000000 50000baseDR Full + 0x8000000 56000baseKR4 Full + 0x10000000 56000baseCR4 Full + 0x20000000 56000baseSR4 Full +@@ -621,6 +626,16 @@ lB l lB. + 0x2000000000 100000baseSR4 Full + 0x4000000000 100000baseCR4 Full + 0x8000000000 100000baseLR4_ER4 Full ++0x200000000000000 100000baseKR2 Full ++0x400000000000000 100000baseSR2 Full ++0x800000000000000 100000baseCR2 Full ++0x1000000000000000 100000baseLR2_ER2_FR2 Full ++0x2000000000000000 100000baseDR2 Full ++0x4000000000000000 200000baseKR4 Full ++0x8000000000000000 200000baseSR4 Full ++0x10000000000000000 200000baseLR4_ER4_FR4 Full ++0x20000000000000000 200000baseDR4 Full ++0x40000000000000000 200000baseCR4 Full + .TE + .TP + .BI phyad \ N +diff --git a/ethtool.c b/ethtool.c +index 06006f4..d58ca2e 100644 +--- a/ethtool.c ++++ b/ethtool.c +@@ -530,6 +530,21 @@ static void init_global_link_mode_masks(void) + ETHTOOL_LINK_MODE_10000baseER_Full_BIT, + ETHTOOL_LINK_MODE_2500baseT_Full_BIT, + ETHTOOL_LINK_MODE_5000baseT_Full_BIT, ++ ETHTOOL_LINK_MODE_50000baseKR_Full_BIT, ++ ETHTOOL_LINK_MODE_50000baseSR_Full_BIT, ++ ETHTOOL_LINK_MODE_50000baseCR_Full_BIT, ++ ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT, ++ ETHTOOL_LINK_MODE_50000baseDR_Full_BIT, ++ ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT, ++ ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT, ++ ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT, ++ ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT, ++ ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT, ++ ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT, ++ ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT, ++ ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT, ++ ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT, ++ ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT, + }; + static const enum ethtool_link_mode_bit_indices + additional_advertised_flags_bits[] = { +@@ -689,6 +704,36 @@ static void dump_link_caps(const char *prefix, const char *an_prefix, + "2500baseT/Full" }, + { 0, ETHTOOL_LINK_MODE_5000baseT_Full_BIT, + "5000baseT/Full" }, ++ { 0, ETHTOOL_LINK_MODE_50000baseKR_Full_BIT, ++ "50000baseKR/Full" }, ++ { 0, ETHTOOL_LINK_MODE_50000baseSR_Full_BIT, ++ "50000baseSR/Full" }, ++ { 0, ETHTOOL_LINK_MODE_50000baseCR_Full_BIT, ++ "50000baseCR/Full" }, ++ { 0, ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT, ++ "50000baseLR_ER_FR/Full" }, ++ { 0, ETHTOOL_LINK_MODE_50000baseDR_Full_BIT, ++ "50000baseDR/Full" }, ++ { 0, ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT, ++ "100000baseKR2/Full" }, ++ { 0, ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT, ++ "100000baseSR2/Full" }, ++ { 0, ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT, ++ "100000baseCR2/Full" }, ++ { 0, ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT, ++ "100000baseLR2_ER2_FR2/Full" }, ++ { 0, ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT, ++ "100000baseDR2/Full" }, ++ { 0, ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT, ++ "200000baseKR4/Full" }, ++ { 0, ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT, ++ "200000baseSR4/Full" }, ++ { 0, ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT, ++ "200000baseLR4_ER4_FR4/Full" }, ++ { 0, ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT, ++ "200000baseDR4/Full" }, ++ { 0, ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT, ++ "200000baseCR4/Full" }, + }; + int indent; + int did1, new_line_pend, i; +-- +1.8.3.1 + diff --git a/SPECS/ethtool.spec b/SPECS/ethtool.spec index 92b6745..46e57c3 100644 --- a/SPECS/ethtool.spec +++ b/SPECS/ethtool.spec @@ -1,7 +1,7 @@ Name: ethtool Epoch: 2 Version: 4.8 -Release: 9%{?dist} +Release: 10%{?dist} Summary: Settings tool for Ethernet NICs License: GPLv2 @@ -38,6 +38,8 @@ Patch14: 0015-ethtool-copy.h-sync-with-net-next.patch Patch15: 0016-ethtool-add-support-for-extra-RSS-contexts-and-RSS-s.patch Patch16: 0017-ethtool.8-Document-RSS-context-control-and-RSS-filte.patch Patch17: 0018-ethtool-don-t-fall-back-to-grxfhindir-when-context-w.patch +Patch18: 0019-ethtool-Fix-coding-style-warnings-and-errors-reporte.patch +Patch19: 0020-ethtool-Add-support-for-200Gbps-50Gbps-per-lane-link.patch %description This utility allows querying and changing settings such as speed, @@ -64,6 +66,8 @@ network devices, especially of Ethernet devices. %patch15 -p1 %patch16 -p1 %patch17 -p1 +%patch18 -p1 +%patch19 -p1 # Only needed when using upstream git # aclocal @@ -86,6 +90,9 @@ make DESTDIR=%{buildroot} INSTALL='install -p' install %{_mandir}/man8/%{name}.8* %changelog +* Fri Mar 15 2019 Ivan Vecera - 2:4.8-9 +- Added support for 200Gbps (50Gbps/lane) link mode + * Mon Jul 2 2018 Ivan Vecera - 2:4.8-9 - Added support for extra RSS contexts and steering filters