From: Jeff Garzik <jeff@garzik.org>
To: Jeff Garzik <jeff@garzik.org>
Cc: netdev@vger.kernel.org, davem@davemloft.net,
LKML <linux-kernel@vger.kernel.org>
Subject: Driver writer hints (was [PATCH 3/4] Add ETHTOOL_[GS]PFLAGS sub-ioctls)
Date: Fri, 10 Aug 2007 16:45:11 -0400 [thread overview]
Message-ID: <46BCCE57.1060802@garzik.org> (raw)
In-Reply-To: <20070810202630.GB25095@havoc.gtf.org>
Jeff Garzik wrote:
> commit 4901236cec047029b970261b95e47d6be60f523e
> Author: Jeff Garzik <jeff@garzik.org>
> Date: Fri Aug 10 15:52:06 2007 -0400
>
> [ETHTOOL] Introduce ->{get,set}_priv_flags, ETHTOOL_[GS]PFLAGS
>
> Signed-off-by: Jeff Garzik <jeff@garzik.org>
>
> include/linux/ethtool.h | 8 +++++++-
> net/core/ethtool.c | 38 ++++++++++++++++++++++++++++++++++++++
> 2 files changed, 45 insertions(+), 1 deletion(-)
This change permits driver writers to allow userspace to enable/disable
driver-specific boolean options on a per-interface basis. This is best
illustrated by describing how userland uses this:
(this is very similar to how the get-stats and self-test operations
currently work)
1) Userland issues ETHTOOL_GDRVINFO, to obtain the n_priv_flags value.
2) Userland issues ETHTOOL_GSTRINGS (ETH_SS_PRIV_FLAGS) to obtain an
array of strings. Each element in this array maps to a bit in the list
of driver-private flags. Array element #0 is the tag (name) for bit #0.
Array element #5 is the tag for bit #5. etc.
If we are getting (retrieving) flags:
3) Userland issues ETHTOOL_GPFLAGS, to obtain a 32-bit bitmap
4) Userland prints out a tag returned from ETHTOOL_GSTRINGS
for each bit set to one in the bitmap. If a bit is set,
but there is no string to describe it, that bit is ignored.
(i.e. a list of 5 strings is returned, but bit 24 is set)
If we are setting flags:
3) Userland issues ETHTOOL_GPFLAGS, to obtain 32-bit bitmap
4) Userland parses command line, which has a series of strings
in the format of "+option" (set flag) and "-option" (clear
flag).
5) Userland sets and clears bits in the 32-bit bitmap, by
matching the command line-supplied data with strings returned
by ETHTOOL_GSTRINGS.
6) If the bitmap has changed, send it back to the driver using
ETHTOOL_SPFLAGS.
In this way, you can see that the actual bit numbers are irrelevant, and
need not be a fixed part of the ABI. Everything is named-based.
This name-based stuff only applies to the private flags. The
ETHTOOL_[GS]FLAGS operations /do/ fix the bit numbers in stone, in the
ABI. There is no name list associated with ETHTOOL_[GS]FLAGS]. The
userland interface does, however, use names rather than bit numbers, for
ease of use.
Another attribute is worth pointing out at this point: ETHTOOL_SFLAGS
and ETHTOOL_SPFLAGS both permit atomic retrieval/setting of groups of
features all at once. IMO this is a nice addition to ethtool as well,
where previously you had to issue separate ioctls for each feature,
which might result in repeated NIC resets [depending on driver
implementation].
Get-flags and get-priv-flags are unpriveleged operations. Set-flags and
set-priv-flags require CAP_NET_ADMIN like other ethtool sub-ioctls.
Drivers should return -EINVAL if userland attempts to set an invariant
(read-only) flag to something other than its constant value.
next prev parent reply other threads:[~2007-08-10 20:45 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-10 20:24 [PATCH 1/4] Add ETHTOOL_[GS]FLAGS sub-ioctls Jeff Garzik
2007-08-10 20:25 ` [PATCH 2/4] ethtool: introduce get_sset_count Jeff Garzik
2007-08-10 20:26 ` [PATCH 3/4] Add ETHTOOL_[GS]PFLAGS sub-ioctls Jeff Garzik
2007-08-10 20:45 ` Jeff Garzik [this message]
2007-08-10 21:01 ` Driver writer hints (was [PATCH 3/4] Add ETHTOOL_[GS]PFLAGS sub-ioctls) Rick Jones
2007-08-10 21:08 ` Jeff Garzik
2007-08-10 20:26 ` [PATCH 4/4] ethtool: internal simplification Jeff Garzik
2007-08-10 20:56 ` [PATCH 1/4] Add ETHTOOL_[GS]FLAGS sub-ioctls Jeff Garzik
2007-08-15 23:05 ` David Miller
2007-08-10 21:02 ` Jeff Garzik
2007-08-10 21:11 ` Ben Greear
2007-08-10 22:10 ` David Miller
2007-08-10 22:40 ` Ben Greear
2007-08-10 22:46 ` David Miller
2007-08-10 23:15 ` Rick Jones
2007-08-14 20:38 ` Kok, Auke
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=46BCCE57.1060802@garzik.org \
--to=jeff@garzik.org \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.