netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/5] ethtool: Update ethtool-copy.h
@ 2009-04-30 12:33 Ben Hutchings
  2009-04-30 12:35 ` Ben Hutchings
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Ben Hutchings @ 2009-04-30 12:33 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: netdev

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
---
This comes from net-next-2.6 as of today.

Ben.

 ethtool-copy.h |  107 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 100 insertions(+), 7 deletions(-)

diff --git a/ethtool-copy.h b/ethtool-copy.h
index 3ca4e2c..d9bb957 100644
--- a/ethtool-copy.h
+++ b/ethtool-copy.h
@@ -7,11 +7,14 @@
  * Portions Copyright 2002 Intel (eli.kupermann@intel.com,
  *                                christopher.leech@intel.com,
  *                                scott.feldman@intel.com)
+ * Portions Copyright (C) Sun Microsystems 2008
  */
 
 #ifndef _LINUX_ETHTOOL_H
 #define _LINUX_ETHTOOL_H
 
+#include <linux/types.h>
+
 /* This should work for both 32 and 64 bit userland. */
 struct ethtool_cmd {
 	__u32	cmd;
@@ -23,14 +26,16 @@ struct ethtool_cmd {
 	__u8	phy_address;
 	__u8	transceiver;	/* Which transceiver to use */
 	__u8	autoneg;	/* Enable or disable autonegotiation */
+	__u8	mdio_support;
 	__u32	maxtxpkt;	/* Tx pkts before generating tx int */
 	__u32	maxrxpkt;	/* Rx pkts before generating rx int */
 	__u16	speed_hi;
 	__u16	reserved2;
-	__u32	reserved[3];
+	__u32	lp_advertising;	/* Features the link partner advertises */
+	__u32	reserved[2];
 };
 
-static inline void ethtool_cmd_speed_set(struct ethtool_cmd *ep,
+static __inline__ void ethtool_cmd_speed_set(struct ethtool_cmd *ep,
 						__u32 speed)
 {
 
@@ -38,7 +43,7 @@ static inline void ethtool_cmd_speed_set(struct ethtool_cmd *ep,
 	ep->speed_hi = (__u16)(speed >> 16);
 }
 
-static inline __u32 ethtool_cmd_speed(struct ethtool_cmd *ep)
+static __inline__ __u32 ethtool_cmd_speed(struct ethtool_cmd *ep)
 {
 	return (ep->speed_hi << 16) | ep->speed;
 }
@@ -285,12 +290,78 @@ enum ethtool_flags {
 	ETH_FLAG_LRO		= (1 << 15),	/* LRO is enabled */
 };
 
-struct ethtool_rxnfc {
-	__u32		cmd;
+/* The following structures are for supporting RX network flow
+ * classification configuration. Note, all multibyte fields, e.g.,
+ * ip4src, ip4dst, psrc, pdst, spi, etc. are expected to be in network
+ * byte order.
+ */
+struct ethtool_tcpip4_spec {
+	__be32	ip4src;
+	__be32	ip4dst;
+	__be16	psrc;
+	__be16	pdst;
+	__u8    tos;
+};
+
+struct ethtool_ah_espip4_spec {
+	__be32	ip4src;
+	__be32	ip4dst;
+	__be32	spi;
+	__u8    tos;
+};
+
+struct ethtool_rawip4_spec {
+	__be32	ip4src;
+	__be32	ip4dst;
+	__u8	hdata[64];
+};
+
+struct ethtool_ether_spec {
+	__be16	ether_type;
+	__u8	frame_size;
+	__u8	eframe[16];
+};
+
+#define	ETH_RX_NFC_IP4	1
+#define	ETH_RX_NFC_IP6	2
+
+struct ethtool_usrip4_spec {
+	__be32	ip4src;
+	__be32	ip4dst;
+	__be32	l4_4_bytes;
+	__u8    tos;
+	__u8    ip_ver;
+	__u8    proto;
+};
+
+struct ethtool_rx_flow_spec {
 	__u32		flow_type;
-	__u64		data;
+	union {
+		struct ethtool_tcpip4_spec		tcp_ip4_spec;
+		struct ethtool_tcpip4_spec		udp_ip4_spec;
+		struct ethtool_tcpip4_spec		sctp_ip4_spec;
+		struct ethtool_ah_espip4_spec		ah_ip4_spec;
+		struct ethtool_ah_espip4_spec		esp_ip4_spec;
+		struct ethtool_rawip4_spec		raw_ip4_spec;
+		struct ethtool_ether_spec		ether_spec;
+		struct ethtool_usrip4_spec		usr_ip4_spec;
+		__u8					hdata[64];
+	} h_u, m_u; /* entry, mask */
+	__u64		ring_cookie;
+	__u32		location;
 };
 
+struct ethtool_rxnfc {
+	__u32				cmd;
+	__u32				flow_type;
+	/* The rx flow hash value or the rule DB size */
+	__u64				data;
+	struct ethtool_rx_flow_spec	fs;
+	__u32				rule_cnt;
+	__u32				rule_locs[0];
+};
+
+
 /* CMDs currently supported */
 #define ETHTOOL_GSET		0x00000001 /* Get settings. */
 #define ETHTOOL_SSET		0x00000002 /* Set settings. */
@@ -338,6 +409,12 @@ struct ethtool_rxnfc {
 #define	ETHTOOL_SRXFH		0x0000002a /* Set RX flow hash configuration */
 #define ETHTOOL_GGRO		0x0000002b /* Get GRO enable (ethtool_value) */
 #define ETHTOOL_SGRO		0x0000002c /* Set GRO enable (ethtool_value) */
+#define	ETHTOOL_GRXRINGS	0x0000002d /* Get RX rings available for LB */
+#define	ETHTOOL_GRXCLSRLCNT	0x0000002e /* Get RX class rule count */
+#define	ETHTOOL_GRXCLSRULE	0x0000002f /* Get RX classification rule */
+#define	ETHTOOL_GRXCLSRLALL	0x00000030 /* Get all RX classification rule */
+#define	ETHTOOL_SRXCLSRLDEL	0x00000031 /* Delete RX classification rule */
+#define	ETHTOOL_SRXCLSRLINS	0x00000032 /* Insert RX classification rule */
 
 /* compatibility with older code */
 #define SPARC_ETH_GSET		ETHTOOL_GSET
@@ -360,6 +437,11 @@ struct ethtool_rxnfc {
 #define SUPPORTED_Pause			(1 << 13)
 #define SUPPORTED_Asym_Pause		(1 << 14)
 #define SUPPORTED_2500baseX_Full	(1 << 15)
+#define SUPPORTED_Backplane		(1 << 16)
+#define SUPPORTED_1000baseKX_Full	(1 << 17)
+#define SUPPORTED_10000baseKX4_Full	(1 << 18)
+#define SUPPORTED_10000baseKR_Full	(1 << 19)
+#define SUPPORTED_10000baseR_FEC	(1 << 20)
 
 /* Indicates what features are advertised by the interface. */
 #define ADVERTISED_10baseT_Half		(1 << 0)
@@ -378,6 +460,11 @@ struct ethtool_rxnfc {
 #define ADVERTISED_Pause		(1 << 13)
 #define ADVERTISED_Asym_Pause		(1 << 14)
 #define ADVERTISED_2500baseX_Full	(1 << 15)
+#define ADVERTISED_Backplane		(1 << 16)
+#define ADVERTISED_1000baseKX_Full	(1 << 17)
+#define ADVERTISED_10000baseKX4_Full	(1 << 18)
+#define ADVERTISED_10000baseKR_Full	(1 << 19)
+#define ADVERTISED_10000baseR_FEC	(1 << 20)
 
 /* The following are all involved in forcing a particular link
  * mode for the device for setting things.  When getting the
@@ -402,6 +489,7 @@ struct ethtool_rxnfc {
 #define PORT_MII		0x02
 #define PORT_FIBRE		0x03
 #define PORT_BNC		0x04
+#define PORT_OTHER		0xff
 
 /* Which transceiver to use. */
 #define XCVR_INTERNAL		0x00
@@ -434,9 +522,13 @@ struct ethtool_rxnfc {
 #define	UDP_V6_FLOW	0x06
 #define	SCTP_V6_FLOW	0x07
 #define	AH_ESP_V6_FLOW	0x08
+#define	AH_V4_FLOW	0x09
+#define	ESP_V4_FLOW	0x0a
+#define	AH_V6_FLOW	0x0b
+#define	ESP_V6_FLOW	0x0c
+#define	IP_USER_FLOW	0x0d
 
 /* L3-L4 network traffic flow hash options */
-#define	RXH_DEV_PORT	(1 << 0)
 #define	RXH_L2DA	(1 << 1)
 #define	RXH_VLAN	(1 << 2)
 #define	RXH_L3_PROTO	(1 << 3)
@@ -446,5 +538,6 @@ struct ethtool_rxnfc {
 #define	RXH_L4_B_2_3	(1 << 7) /* dst port in case of TCP/UDP/SCTP */
 #define	RXH_DISCARD	(1 << 31)
 
+#define	RX_CLS_FLOW_DISC	0xffffffffffffffffULL
 
 #endif /* _LINUX_ETHTOOL_H */

-- 
Ben Hutchings, Senior Software Engineer, Solarflare Communications
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/5] ethtool: Update ethtool-copy.h
  2009-04-30 12:33 [PATCH 1/5] ethtool: Update ethtool-copy.h Ben Hutchings
@ 2009-04-30 12:35 ` Ben Hutchings
  2009-04-30 12:36 ` [PATCH 1/5] ethtool: Remove support for RX hashing by port Ben Hutchings
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Ben Hutchings @ 2009-04-30 12:35 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: netdev

Sorry, this should be the second patch not the first.

Ben.

-- 
Ben Hutchings, Senior Software Engineer, Solarflare Communications
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/5] ethtool: Remove support for RX hashing by port
  2009-04-30 12:33 [PATCH 1/5] ethtool: Update ethtool-copy.h Ben Hutchings
  2009-04-30 12:35 ` Ben Hutchings
@ 2009-04-30 12:36 ` Ben Hutchings
  2009-04-30 12:37 ` [PATCH 3/5] ethtool: Decode PORT_OTHER Ben Hutchings
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Ben Hutchings @ 2009-04-30 12:36 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: netdev

The kernel-side support for this was removed by:

commit 59089d8d162ddcb5c434672e915331964d38a754
Author: Santwona Behera <santwona.behera@sun.com>
Date:   Fri Feb 20 00:58:13 2009 -0800

    ethtool: Add RX pkt classification interface

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
---
 ethtool.8 |    3 ---
 ethtool.c |    8 +-------
 2 files changed, 1 insertions(+), 10 deletions(-)

diff --git a/ethtool.8 b/ethtool.8
index 178f6ea..7a6f52b 100644
--- a/ethtool.8
+++ b/ethtool.8
@@ -473,9 +473,6 @@ Configures the hash options for the specified network traffic type.
 .RS
 .PD 0
 .TP 3
-.B p
-Hash on the device port number on which the packet was received.
-.TP 3
 .B m
 Hash on the Layer 2 destination address of the rx packet.
 .TP 3
diff --git a/ethtool.c b/ethtool.c
index 43ec2bf..5c45b2d 100644
--- a/ethtool.c
+++ b/ethtool.c
@@ -191,7 +191,7 @@ static struct option {
     { "-N", "--config-nfc", MODE_SNFC, "Configure Rx network flow "
 		"classification options",
 		"		[ rx-flow-hash tcp4|udp4|ah4|sctp4|"
-		"tcp6|udp6|ah6|sctp6 p|m|v|t|s|d|f|n|r... ]\n" },
+		"tcp6|udp6|ah6|sctp6 m|v|t|s|d|f|n|r... ]\n" },
     { "-h", "--help", MODE_HELP, "Show this help" },
     {}
 };
@@ -1090,9 +1090,6 @@ static int parse_rxfhashopts(char *optstr, u32 *data)
 	*data = 0;
 	while (*optstr) {
 		switch (*optstr) {
-			case 'p':
-				*data |= RXH_DEV_PORT;
-				break;
 			case 'm':
 				*data |= RXH_L2DA;
 				break;
@@ -1132,9 +1129,6 @@ static char *unparse_rxfhashopts(u64 opts)
 	memset(buf, 0, sizeof(buf));
 
 	if (opts) {
-		if (opts & RXH_DEV_PORT) {
-			strcat(buf, "Dev port\n");
-		}
 		if (opts & RXH_L2DA) {
 			strcat(buf, "L2DA\n");
 		}

-- 
Ben Hutchings, Senior Software Engineer, Solarflare Communications
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/5] ethtool: Decode PORT_OTHER
  2009-04-30 12:33 [PATCH 1/5] ethtool: Update ethtool-copy.h Ben Hutchings
  2009-04-30 12:35 ` Ben Hutchings
  2009-04-30 12:36 ` [PATCH 1/5] ethtool: Remove support for RX hashing by port Ben Hutchings
@ 2009-04-30 12:37 ` Ben Hutchings
  2009-04-30 12:37 ` [PATCH 4/5] ethtool: Report link partner advertising Ben Hutchings
  2009-04-30 12:38 ` [PATCH 5/5] ethtool: Report pause auto-negotiation flags Ben Hutchings
  4 siblings, 0 replies; 6+ messages in thread
From: Ben Hutchings @ 2009-04-30 12:37 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: netdev

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
---
 ethtool.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/ethtool.c b/ethtool.c
index 5c45b2d..08165eb 100644
--- a/ethtool.c
+++ b/ethtool.c
@@ -941,6 +941,9 @@ static int dump_ecmd(struct ethtool_cmd *ep)
 	case PORT_FIBRE:
 		fprintf(stdout, "FIBRE\n");
 		break;
+	case PORT_OTHER:
+		fprintf(stdout, "Other\n");
+		break;
 	default:
 		fprintf(stdout, "Unknown! (%i)\n", ep->port);
 		break;

-- 
Ben Hutchings, Senior Software Engineer, Solarflare Communications
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 4/5] ethtool: Report link partner advertising
  2009-04-30 12:33 [PATCH 1/5] ethtool: Update ethtool-copy.h Ben Hutchings
                   ` (2 preceding siblings ...)
  2009-04-30 12:37 ` [PATCH 3/5] ethtool: Decode PORT_OTHER Ben Hutchings
@ 2009-04-30 12:37 ` Ben Hutchings
  2009-04-30 12:38 ` [PATCH 5/5] ethtool: Report pause auto-negotiation flags Ben Hutchings
  4 siblings, 0 replies; 6+ messages in thread
From: Ben Hutchings @ 2009-04-30 12:37 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: netdev

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
---
 ethtool.c |   20 +++++++++++---------
 1 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/ethtool.c b/ethtool.c
index 08165eb..0d188af 100644
--- a/ethtool.c
+++ b/ethtool.c
@@ -839,12 +839,13 @@ static void dump_supported(struct ethtool_cmd *ep)
 		fprintf(stdout, "No\n");
 }
 
-static void dump_advertised(struct ethtool_cmd *ep)
+static void dump_advertised(struct ethtool_cmd *ep,
+			    const char *prefix, u_int32_t mask)
 {
-	u_int32_t mask = ep->advertising;
+	int indent = strlen(prefix) + 14;
 	int did1;
 
-	fprintf(stdout, "	Advertised link modes:  ");
+	fprintf(stdout, "	%s link modes:  ", prefix);
 	did1 = 0;
 	if (mask & ADVERTISED_10baseT_Half) {
 		did1++; fprintf(stdout, "10baseT/Half ");
@@ -854,7 +855,7 @@ static void dump_advertised(struct ethtool_cmd *ep)
 	}
 	if (did1 && (mask & (ADVERTISED_100baseT_Half|ADVERTISED_100baseT_Full))) {
 		fprintf(stdout, "\n");
-		fprintf(stdout, "	                        ");
+		fprintf(stdout, "	%*s", indent, "");
 	}
 	if (mask & ADVERTISED_100baseT_Half) {
 		did1++; fprintf(stdout, "100baseT/Half ");
@@ -864,7 +865,7 @@ static void dump_advertised(struct ethtool_cmd *ep)
 	}
 	if (did1 && (mask & (ADVERTISED_1000baseT_Half|ADVERTISED_1000baseT_Full))) {
 		fprintf(stdout, "\n");
-		fprintf(stdout, "	                        ");
+		fprintf(stdout, "	%*s", indent, "");
 	}
 	if (mask & ADVERTISED_1000baseT_Half) {
 		did1++; fprintf(stdout, "1000baseT/Half ");
@@ -874,14 +875,14 @@ static void dump_advertised(struct ethtool_cmd *ep)
 	}
 	if (did1 && (mask & ADVERTISED_2500baseX_Full)) {
 		fprintf(stdout, "\n");
-		fprintf(stdout, "	                        ");
+		fprintf(stdout, "	%*s", indent, "");
 	}
 	if (mask & ADVERTISED_2500baseX_Full) {
 		did1++; fprintf(stdout, "2500baseX/Full ");
 	}
 	if (did1 && (mask & ADVERTISED_10000baseT_Full)) {
 		fprintf(stdout, "\n");
-		fprintf(stdout, "	                        ");
+		fprintf(stdout, "	%*s", indent, "");
 	}
 	if (mask & ADVERTISED_10000baseT_Full) {
 		did1++; fprintf(stdout, "10000baseT/Full ");
@@ -890,7 +891,7 @@ static void dump_advertised(struct ethtool_cmd *ep)
 		 fprintf(stdout, "Not reported");
 	fprintf(stdout, "\n");
 
-	fprintf(stdout, "	Advertised auto-negotiation: ");
+	fprintf(stdout, "	%s auto-negotiation: ", prefix);
 	if (mask & ADVERTISED_Autoneg)
 		fprintf(stdout, "Yes\n");
 	else
@@ -902,7 +903,8 @@ static int dump_ecmd(struct ethtool_cmd *ep)
 	u32 speed;
 
 	dump_supported(ep);
-	dump_advertised(ep);
+	dump_advertised(ep, "Advertised", ep->advertising);
+	dump_advertised(ep, "Link partner advertised", ep->lp_advertising);
 
 	fprintf(stdout, "	Speed: ");
 	speed = ethtool_cmd_speed(ep);

-- 
Ben Hutchings, Senior Software Engineer, Solarflare Communications
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 5/5] ethtool: Report pause auto-negotiation flags
  2009-04-30 12:33 [PATCH 1/5] ethtool: Update ethtool-copy.h Ben Hutchings
                   ` (3 preceding siblings ...)
  2009-04-30 12:37 ` [PATCH 4/5] ethtool: Report link partner advertising Ben Hutchings
@ 2009-04-30 12:38 ` Ben Hutchings
  4 siblings, 0 replies; 6+ messages in thread
From: Ben Hutchings @ 2009-04-30 12:38 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: netdev

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
---
 ethtool.c |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/ethtool.c b/ethtool.c
index 0d188af..c40603c 100644
--- a/ethtool.c
+++ b/ethtool.c
@@ -891,6 +891,19 @@ static void dump_advertised(struct ethtool_cmd *ep,
 		 fprintf(stdout, "Not reported");
 	fprintf(stdout, "\n");
 
+	fprintf(stdout, "	%s pause frame use: ", prefix);
+	if (mask & ADVERTISED_Pause) {
+		fprintf(stdout, "Symmetric");
+		if (mask & ADVERTISED_Asym_Pause)
+			fprintf(stdout, " Receive-only");
+		fprintf(stdout, "\n");
+	} else {
+		if (mask & ADVERTISED_Asym_Pause)
+			fprintf(stdout, "Transmit-only\n");
+		else
+			fprintf(stdout, "No\n");
+	}
+
 	fprintf(stdout, "	%s auto-negotiation: ", prefix);
 	if (mask & ADVERTISED_Autoneg)
 		fprintf(stdout, "Yes\n");

-- 
Ben Hutchings, Senior Software Engineer, Solarflare Communications
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2009-04-30 12:38 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-04-30 12:33 [PATCH 1/5] ethtool: Update ethtool-copy.h Ben Hutchings
2009-04-30 12:35 ` Ben Hutchings
2009-04-30 12:36 ` [PATCH 1/5] ethtool: Remove support for RX hashing by port Ben Hutchings
2009-04-30 12:37 ` [PATCH 3/5] ethtool: Decode PORT_OTHER Ben Hutchings
2009-04-30 12:37 ` [PATCH 4/5] ethtool: Report link partner advertising Ben Hutchings
2009-04-30 12:38 ` [PATCH 5/5] ethtool: Report pause auto-negotiation flags Ben Hutchings

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).