This commit is contained in:
parent
71d38e9b10
commit
e7307cc626
137
ethtool-LRO_support.patch
Normal file
137
ethtool-LRO_support.patch
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
Add lro support to command in similar manner to TSO, GSO, etc.
|
||||||
|
|
||||||
|
Based on patch by Stephen Hemminger
|
||||||
|
<http://article.gmane.org/gmane.linux.network/88124>.
|
||||||
|
|
||||||
|
My changes:
|
||||||
|
- Changed error return codes for setting LRO to be unique.
|
||||||
|
- Report failure to get device flags, consistent with other offload settings.
|
||||||
|
- Fixed code spacing.
|
||||||
|
|
||||||
|
Tested with the sfc driver.
|
||||||
|
|
||||||
|
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
|
||||||
|
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
|
||||||
|
|
||||||
|
|
||||||
|
--- ethtool.c
|
||||||
|
+++ ethtool.c
|
||||||
|
@@ -151,7 +151,9 @@
|
||||||
|
" [ sg on|off ]\n"
|
||||||
|
" [ tso on|off ]\n"
|
||||||
|
" [ ufo on|off ]\n"
|
||||||
|
- " [ gso on|off ]\n" },
|
||||||
|
+ " [ gso on|off ]\n"
|
||||||
|
+ " [ lro on|off ]\n"
|
||||||
|
+ },
|
||||||
|
{ "-i", "--driver", MODE_GDRV, "Show driver information" },
|
||||||
|
{ "-d", "--register-dump", MODE_GREGS, "Do a register dump",
|
||||||
|
" [ raw on|off ]\n"
|
||||||
|
@@ -200,6 +202,7 @@
|
||||||
|
static int off_tso_wanted = -1;
|
||||||
|
static int off_ufo_wanted = -1;
|
||||||
|
static int off_gso_wanted = -1;
|
||||||
|
+static int off_lro_wanted = -1;
|
||||||
|
|
||||||
|
static struct ethtool_pauseparam epause;
|
||||||
|
static int gpause_changed = 0;
|
||||||
|
@@ -310,6 +313,7 @@
|
||||||
|
{ "tso", CMDL_BOOL, &off_tso_wanted, NULL },
|
||||||
|
{ "ufo", CMDL_BOOL, &off_ufo_wanted, NULL },
|
||||||
|
{ "gso", CMDL_BOOL, &off_gso_wanted, NULL },
|
||||||
|
+ { "lro", CMDL_BOOL, &off_lro_wanted, NULL },
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct cmdline_info cmdline_pause[] = {
|
||||||
|
@@ -1207,7 +1211,7 @@
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static int dump_offload (int rx, int tx, int sg, int tso, int ufo, int gso)
|
||||||
|
+static int dump_offload(int rx, int tx, int sg, int tso, int ufo, int gso, int lro)
|
||||||
|
{
|
||||||
|
fprintf(stdout,
|
||||||
|
"rx-checksumming: %s\n"
|
||||||
|
@@ -1215,13 +1219,15 @@
|
||||||
|
"scatter-gather: %s\n"
|
||||||
|
"tcp segmentation offload: %s\n"
|
||||||
|
"udp fragmentation offload: %s\n"
|
||||||
|
- "generic segmentation offload: %s\n",
|
||||||
|
+ "generic segmentation offload: %s\n"
|
||||||
|
+ "large receive offload: %s\n",
|
||||||
|
rx ? "on" : "off",
|
||||||
|
tx ? "on" : "off",
|
||||||
|
sg ? "on" : "off",
|
||||||
|
tso ? "on" : "off",
|
||||||
|
ufo ? "on" : "off",
|
||||||
|
- gso ? "on" : "off");
|
||||||
|
+ gso ? "on" : "off",
|
||||||
|
+ lro ? "on" : "off");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@@ -1485,7 +1491,8 @@
|
||||||
|
static int do_goffload(int fd, struct ifreq *ifr)
|
||||||
|
{
|
||||||
|
struct ethtool_value eval;
|
||||||
|
- int err, allfail = 1, rx = 0, tx = 0, sg = 0, tso = 0, ufo = 0, gso = 0;
|
||||||
|
+ int err, allfail = 1, rx = 0, tx = 0, sg = 0;
|
||||||
|
+ int tso = 0, ufo = 0, gso = 0, lro = 0;
|
||||||
|
|
||||||
|
fprintf(stdout, "Offload parameters for %s:\n", devname);
|
||||||
|
|
||||||
|
@@ -1549,12 +1556,22 @@
|
||||||
|
allfail = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ eval.cmd = ETHTOOL_GFLAGS;
|
||||||
|
+ ifr->ifr_data = (caddr_t)&eval;
|
||||||
|
+ err = ioctl(fd, SIOCETHTOOL, ifr);
|
||||||
|
+ if (err) {
|
||||||
|
+ perror("Cannot get device flags");
|
||||||
|
+ } else {
|
||||||
|
+ lro = (eval.data & ETH_FLAG_LRO) != 0;
|
||||||
|
+ allfail = 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (allfail) {
|
||||||
|
fprintf(stdout, "no offload info available\n");
|
||||||
|
return 83;
|
||||||
|
}
|
||||||
|
|
||||||
|
- return dump_offload(rx, tx, sg, tso, ufo, gso);
|
||||||
|
+ return dump_offload(rx, tx, sg, tso, ufo, gso, lro);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int do_soffload(int fd, struct ifreq *ifr)
|
||||||
|
@@ -1631,6 +1648,30 @@
|
||||||
|
return 90;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ if (off_lro_wanted >= 0) {
|
||||||
|
+ changed = 1;
|
||||||
|
+ eval.cmd = ETHTOOL_GFLAGS;
|
||||||
|
+ eval.data = 0;
|
||||||
|
+ ifr->ifr_data = (caddr_t)&eval;
|
||||||
|
+ err = ioctl(fd, SIOCETHTOOL, ifr);
|
||||||
|
+ if (err) {
|
||||||
|
+ perror("Cannot get device flag settings");
|
||||||
|
+ return 91;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ eval.cmd = ETHTOOL_SFLAGS;
|
||||||
|
+ if (off_lro_wanted == 1)
|
||||||
|
+ eval.data |= ETH_FLAG_LRO;
|
||||||
|
+ else
|
||||||
|
+ eval.data &= ~ETH_FLAG_LRO;
|
||||||
|
+
|
||||||
|
+ err = ioctl(fd, SIOCETHTOOL, ifr);
|
||||||
|
+ if (err) {
|
||||||
|
+ perror("Cannot set large receive offload settings");
|
||||||
|
+ return 92;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (!changed) {
|
||||||
|
fprintf(stdout, "no offload settings changed\n");
|
||||||
|
}
|
@ -1,3 +1,8 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Nov 4 11:41:01 CET 2008 - hvogel@suse.de
|
||||||
|
|
||||||
|
- Add support for LRO (Large Receive Offload) [bnc#440003]
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Sep 12 15:51:49 CEST 2008 - bphilips@suse.de
|
Fri Sep 12 15:51:49 CEST 2008 - bphilips@suse.de
|
||||||
|
|
||||||
|
12
ethtool.spec
12
ethtool.spec
@ -24,11 +24,12 @@ Group: Productivity/Networking/Diagnostic
|
|||||||
AutoReqProv: on
|
AutoReqProv: on
|
||||||
Summary: Examine and Tune Ethernet-Based Network Interfaces
|
Summary: Examine and Tune Ethernet-Based Network Interfaces
|
||||||
Version: 6
|
Version: 6
|
||||||
Release: 75
|
Release: 78
|
||||||
Url: http://sourceforge.net/projects/gkernel
|
Url: http://git.kernel.org/?p=network/ethtool/ethtool.git
|
||||||
Source: %{name}-%{version}.tar.bz2
|
Source: %{name}-%{version}.tar.bz2
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
Patch: ethtool-cmd-speed-use-full-variable.patch
|
Patch0: ethtool-cmd-speed-use-full-variable.patch
|
||||||
|
Patch1: ethtool-LRO_support.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
Ethtool is a small utility for examining and tuning ethernet-based
|
Ethtool is a small utility for examining and tuning ethernet-based
|
||||||
@ -45,7 +46,8 @@ Authors:
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
%patch -p1
|
%patch0 -p1
|
||||||
|
%patch1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%{suse_update_config -f}
|
%{suse_update_config -f}
|
||||||
@ -67,6 +69,8 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
%doc AUTHORS COPYING NEWS README ChangeLog
|
%doc AUTHORS COPYING NEWS README ChangeLog
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Nov 04 2008 hvogel@suse.de
|
||||||
|
- Add support for LRO (Large Receive Offload) [bnc#440003]
|
||||||
* Fri Sep 12 2008 bphilips@suse.de
|
* Fri Sep 12 2008 bphilips@suse.de
|
||||||
- Add support for larger speed field to do greater than 65535Mb/s devices
|
- Add support for larger speed field to do greater than 65535Mb/s devices
|
||||||
* Wed Dec 19 2007 mskibbe@suse.de
|
* Wed Dec 19 2007 mskibbe@suse.de
|
||||||
|
Loading…
Reference in New Issue
Block a user