Subject: Re: [PATCH] [NET] ethtool: Add LRO support

From: Jeff Garzik <[email-masked]>
Date: Fri, 10 Aug 2007 04:42:44 -0400

Auke Kok wrote:
> Signed-off-by: Auke Kok <[email-masked]>
> ---
> 
>  include/linux/ethtool.h   |    8 +++++++
>  include/linux/netdevice.h |    1 +
>  net/core/ethtool.c        |   53 +++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 62 insertions(+), 0 deletions(-)
> 
> diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
> index 23ccea8..a97248e 100644
> --- a/include/linux/ethtool.h
> +++ b/include/linux/ethtool.h
> @@ -272,6 +272,8 @@ u32 ethtool_op_get_tso(struct net_device *dev);
>  int ethtool_op_set_tso(struct net_device *dev, u32 data);
>  u32 ethtool_op_get_ufo(struct net_device *dev);
>  int ethtool_op_set_ufo(struct net_device *dev, u32 data);
> +u32 ethtool_op_get_lro(struct net_device *dev);
> +int ethtool_op_set_lro(struct net_device *dev, u32 data);

I'm thinking we don't need to keep adding two function pointers for each 
boolean choice.

I propose adding two operations:

get-flags:	return 32-bit (even on 64-bit platforms) flags bitmap
set-flags:	set 32-bit flags bitmap

The 32 bits shall be divided as follows:

bits 0-23:	ETHTOOL_FLAG_xxx defined in linux/ethtool.h
bits 24-31:	driver-specific boolean flags

The driver-specific flags are first enumerated by userland via an 
ETHTOOL_GSTRINGS call, using new string set ETH_SS_FLAGS.  The first 
string returned names the first driver-private flag (bit 24).  This also 
indicates that driver-private bit 24 is a valid flag for this driver and 
network interface.

The overall goal is to replace get-LRO/set-LRO operations with the 
setting/clearing of ETH_FLAG_LRO, and as well, provide a more-scalable 
ethtool interface.

I'll code this up, along with the associated generic helpers 
(net/core/ethtool.c), if there are no objections.

	Jeff