All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2.6.12-rc4] ethtool: Support for UDP Large Send Offload
@ 2005-06-03  0:43 ravinandan.arakali
  0 siblings, 0 replies; only message in thread
From: ravinandan.arakali @ 2005-06-03  0:43 UTC (permalink / raw)
  To: davem, jgarzik, netdev
  Cc: raghavendra.koushik, ravinandan.arakali, leonid.grossman,
	ananda.raju, rapuru.sriram

Hi,
Attached below is a patch on ethtool utility to support USO(UDP Large
Send Offload).
Pls review the patch.

Usage:
1. To view USO setting
# ethtool -k <ethernet_interface>

2. To set/unset USO 
# ethtool -K <ethernet_interface> uso on|off

Signed-off-by: Ananda Raju <ananda.raju@neterion.com>
Signed-off-by: Ravinandan Arakali <ravinandan.arakali@neterion.com>
---
diff -uNr ethtool-3/ethtool-copy.h ethtool-3_uso/ethtool-copy.h
--- ethtool-3/ethtool-copy.h	2005-01-28 01:50:26.000000000 +0545
+++ ethtool-3_uso/ethtool-copy.h	2005-06-02 23:06:48.000000000 +0545
@@ -283,6 +283,8 @@
 #define ETHTOOL_GSTATS		0x0000001d /* get NIC-specific statistics */
 #define ETHTOOL_GTSO		0x0000001e /* Get TSO enable (ethtool_value) */
 #define ETHTOOL_STSO		0x0000001f /* Set TSO enable (ethtool_value) */
+#define ETHTOOL_GUSO		0x00000020 /* Get USO enable (ethtool_value) */
+#define ETHTOOL_SUSO		0x00000021 /* Set USO enable (ethtool_value) */
 
 /* compatibility with older code */
 #define SPARC_ETH_GSET		ETHTOOL_GSET
diff -uNr ethtool-3/ethtool.c ethtool-3_uso/ethtool.c
--- ethtool-3/ethtool.c	2005-01-28 04:19:29.000000000 +0545
+++ ethtool-3_uso/ethtool.c	2005-06-02 23:06:52.000000000 +0545
@@ -119,6 +119,7 @@
  *		[ tx on|off ] \
  *		[ sg on|off ] \
  *		[ tso on|off ]
+ *		[ uso on|off ]
  *	ethtool -r DEVNAME
  *	ethtool -p DEVNAME [ %d ]
  *	ethtool -t DEVNAME [ online|offline ]
@@ -191,6 +192,7 @@
 		"		[ tx on|off ] \\\n"
 		"		[ sg on|off ] \\\n"
 		"		[ tso on|off ]\n"
+		"		[ uso on|off ]\n"
 		"	ethtool -r DEVNAME\n"
 		"	ethtool -p DEVNAME [ %%d ]\n"
 		"	ethtool -t DEVNAME [online|(offline)]\n"
@@ -236,6 +238,7 @@
 static int off_csum_tx_wanted = -1;
 static int off_sg_wanted = -1;
 static int off_tso_wanted = -1;
+static int off_uso_wanted = -1;
 
 static struct ethtool_pauseparam epause;
 static int gpause_changed = 0;
@@ -339,6 +342,7 @@
 	{ "tx", CMDL_BOOL, &off_csum_tx_wanted, NULL },
 	{ "sg", CMDL_BOOL, &off_sg_wanted, NULL },
 	{ "tso", CMDL_BOOL, &off_tso_wanted, NULL },
+	{ "uso", CMDL_BOOL, &off_uso_wanted, NULL },
 };
 
 static struct cmdline_info cmdline_pause[] = {
@@ -1184,17 +1188,19 @@
 	return 0;
 }
 
-static int dump_offload (int rx, int tx, int sg, int tso)
+static int dump_offload (int rx, int tx, int sg, int tso, int uso)
 {
 	fprintf(stdout,
 		"rx-checksumming: %s\n"
 		"tx-checksumming: %s\n"
 		"scatter-gather: %s\n"
-		"tcp segmentation offload: %s\n",
+		"tcp segmentation offload: %s\n"
+		"udp large send offload: %s\n",
 		rx ? "on" : "off",
 		tx ? "on" : "off",
 		sg ? "on" : "off",
-		tso ? "on" : "off");
+		tso ? "on" : "off",
+		uso ? "on" : "off");
 
 	return 0;
 }
@@ -1458,7 +1464,7 @@
 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;
+	int err, allfail = 1, rx = 0, tx = 0, sg = 0, tso = 0, uso = 0;
 
 	fprintf(stdout, "Offload parameters for %s:\n", devname);
 
@@ -1502,12 +1508,22 @@
 		allfail = 0;
 	}
 
+	eval.cmd = ETHTOOL_GUSO;
+	ifr->ifr_data = (caddr_t)&eval;
+	err = ioctl(fd, SIOCETHTOOL, ifr);
+	if (err)
+		perror("Cannot get device udp large send offload settings");
+	else {
+		uso = eval.data;
+		allfail = 0;
+	}
+
 	if (allfail) {
 		fprintf(stdout, "no offload info available\n");
 		return 83;
 	}
 
-	return dump_offload(rx, tx, sg, tso);
+	return dump_offload(rx, tx, sg, tso, uso);
 }
 
 static int do_soffload(int fd, struct ifreq *ifr)
@@ -1562,6 +1578,17 @@
 			return 88;
 		}
 	}
+	if (off_uso_wanted >= 0) {
+		changed = 1;
+		eval.cmd = ETHTOOL_SUSO;
+		eval.data = (off_uso_wanted == 1);
+		ifr->ifr_data = (caddr_t)&eval;
+		err = ioctl(fd, SIOCETHTOOL, ifr);
+		if (err) {
+			perror("Cannot set device udp large send offload settings");
+			return 89;
+		}
+	}
 	if (!changed) {
 		fprintf(stdout, "no offload settings changed\n");
 	}

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2005-06-03  0:43 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-06-03  0:43 [PATCH 2.6.12-rc4] ethtool: Support for UDP Large Send Offload ravinandan.arakali

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.