netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Inaky Perez-Gonzalez <inaky@linux.intel.com>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: netdev <netdev@vger.kernel.org>, Thomas Graf <tgraf@suug.ch>
Subject: Re: [PATCH 03/39] wimax: constants and definitions to interact with user space
Date: Tue, 2 Dec 2008 18:06:15 -0800	[thread overview]
Message-ID: <200812021806.16278.inaky@linux.intel.com> (raw)
In-Reply-To: <1227778899.3809.30.camel@johannes.berg>

On Thursday 27 November 2008, Johannes Berg wrote:
> On Wed, 2008-11-26 at 15:07 -0800, Inaky Perez-Gonzalez wrote:

I've consolidated replies to some items in this email, instead of the
other ones, as some were repeated. These are mainly:

- using one policy per command

- licensing of the linux/wimax* headers

- the message channel

- the RP_RESULT to transfer results back to user space instead of
  using genl acks/nlerrs

> Explicitly licensing a header file that's used for userspace tools under
> GPL2 might seem to indicate that the tool must be GPL2'ed as well, this
> seems unintended. To be on the safe side, it seems that a lot of people
> would prefer this to be under something as simple as the ISC license
> just so that you can simply copy the file if necessary.
>
> I know this hasn't been done traditionally, but in wireless a lot of
> people are complaining and I know of one case where a complete header
> file was "reimplemented" from scratch because of such an issue.

This is a good point -- there are no issues in moving this to a BSD type.

> > +	WIMAX_GNL_ATTR_MAX = 5,
>
> This is another side effect of your decision of declaring attributes for
> each command. If you didn't, you could simply do

I could argue it is a side effect of netlink's implementation :)

The whole idea behind using a policy per command/signal is very simple
(and I realize now, very undocumented):

I want the attribute validator to do the validation job for me.a

Each command/signal have a list of arguments, each with a type, they
take. There is a policy for each that containst exactly that
list. When I get it from the user, I just need to validate it and if
there is something in there that should not, then that's an error.

So change the concept of "attribute maps to type" to "attribute type X
as an argument to command/signal Y".

However, if I had a single policy for *all* commands/signals, after
running the validator I'd have to check "does this attribute belong in
here"? for each one. I can do that manually (not) or I can have an
already working and proven piece of code do it for me. Makes it
easier. 

As well, it makes it easier to later expand each command/signal
signature without affecting others and keeping the namespace more or
less sane. Not that it is too complicated, but it makes it even easier.

> > + * Most of these map to an API call; _OP_ stands for operation, _RP_
> > + * for reply and _RE_ for report (aka: signal).
> > + */
> > +enum {
> > +	WIMAX_GNL_OP_MSG_FROM_USER,	/* User to kernel message */
> > +	WIMAX_GNL_OP_MSG_TO_USER,	/* Kernel to user message */
>
> What are those used for? Smells a lot like "iwpriv"...

Yes, that's what's they are, because there is still no known good
interface for the basic primitives (scan, connect, disconnect). That
will have to evolve or it might stay like that if there is no way to
find a common ground for those basic primitives [for others reading
out of context, see the reply to [PATCH 00/39] explaining why].

> > +	WIMAX_GNL_OP_OPEN,	/* Open a handle to a wimax device */
> > +	WIMAX_GNL_OP_UNUSED,	/* Unused */
> > +	WIMAX_GNL_OP_RFKILL,	/* Run wimax_rfkill() */
> > +	WIMAX_GNL_RP_IFINFO,	/* Reply to OPEN: Interface info */
> > +	WIMAX_GNL_RP_RESULT,	/* Reply: result of operation */
> > +	WIMAX_GNL_OP_RESET,	/* Run wimax_rfkill() */
> > +	WIMAX_GNL_RE_STATE_CHANGE,	/* Report: status change */
> > +	WIMAX_GNL_OP_MAX,
>
> That's not MAX, it's MAX+1, see the idiom above if you really need MAX.

This is used for something different. User space can use this to quick
check if this is a good message or not. It is actually redundant the
way it is being used now, so I just killed it.

> > +/* Message from user / to user */
> > +enum {
> > +	WIMAX_GNL_MSG_DATA = 1,
> > +};
>
> So this is iwpriv? Why bother with an enum if you're not doing
> kernel-doc?

Consistency with the rest of the stuff and that I try to avoid cpp
when possible :)

> > +enum wimax_rf_state {
> > +	WIMAX_RF_OFF = 0,	/* Radio is off, rfkill on/enabled */
> > +	WIMAX_RF_ON = 1,	/* Radio is on, rfkill off/disabled */
> > +	WIMAX_RF_QUERY = 2,
> > +};
> > +
> > +/* Attributes */
> > +enum {
> > +	WIMAX_GNL_RFKILL_STATE = 1,
> > +};
>
> What's wrong with making that 2, and using a single enum for all the
> attributes? It doesn't make a huge difference.

Described above.

> > +enum {
> > +	WIMAX_GNL_IFINFO_MC_GROUPS = 1,
> > +	WIMAX_GNL_IFINFO_MC_GROUP,
> > +	WIMAX_GNL_IFINFO_MC_NAME,
> > +	WIMAX_GNL_IFINFO_MC_ID,
> > +	WIMAX_GNL_IFINFO_MAX,		/* Used by user space */
>
> again, not MAX
> also what do you need MC_GROUP stuff for? genl mc groups
> are available via the genl controller, isn't that sufficient?

Couldn't get it to work -- in a prev message you mentioned to look
into the example done at the iw tarball. Will check and kill all this
(not that I like it precisely).

> > +/*
> > + * Attributes for the result-of-operation
> > + */
> > +enum {
> > +	WIMAX_GNL_RESULT_CODE = 1,
>
> This is a bit strange, what operations cannot just use the regular genl
> ack message? Are these asynchronous?

After going over other of your comments, I just realized I was using
libnl the wrong way. After a "aw crap" moment, it is working now, so I
killed all this.

> > +enum {
> > +	WIMAX_GNL_STCH_STATE_OLD = 1,
> > +	WIMAX_GNL_STCH_STATE_NEW,
> > +};
> > +
> > +
> > +/**
> > + * enum wimax_st - The different states of a WiMAX device
> > + * @__WIMAX_ST_NULL: The device structure has been allocated and zeroed,
> > + *     but still wimax_dev_add() hasn't been called. There is no state.
>
> That's not really available to userspace, is it? I mean, at that point
> wimax-genl will just not work?

Correct -- I just didn't want to break the state definition in two
parts for the internal (__WIMAX_*) vs external (WIMAX_*) states.

There is a note clarifying that in the kernel-doc.


-- 
Inaky


  reply	other threads:[~2008-12-03  2:11 UTC|newest]

Thread overview: 97+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-11-26 22:40 [PATCH 00/39] merge request for WiMAX kernel stack and i2400m driver v2 Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 01/39] wimax: documentation for the stack Inaky Perez-Gonzalez
2008-11-27  9:29   ` Johannes Berg
2008-12-03  2:07     ` Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 02/39] wimax: declarations for the in-kernel WiMAX API Inaky Perez-Gonzalez
2008-11-27  9:32   ` Johannes Berg
2008-12-03  2:07     ` Inaky Perez-Gonzalez
2008-12-04  9:04       ` Johannes Berg
2008-12-04 20:11         ` Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 03/39] wimax: constants and definitions to interact with user space Inaky Perez-Gonzalez
2008-11-27  9:41   ` Johannes Berg
2008-12-03  2:06     ` Inaky Perez-Gonzalez [this message]
2008-11-26 22:40 ` [PATCH 04/39] wimax: internal API for the kernel space WiMAX stack Inaky Perez-Gonzalez
2008-11-27  9:43   ` Johannes Berg
2008-12-03  2:07     ` Inaky Perez-Gonzalez
2008-12-04  9:02       ` Johannes Berg
2008-12-04 19:22         ` Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 05/39] wimax: debug macros and debug settings for the " Inaky Perez-Gonzalez
2008-11-27  9:28   ` Johannes Berg
2008-12-03  2:07     ` Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 06/39] genetlink: export genl_unregister_mc_group() Inaky Perez-Gonzalez
2008-11-26 23:07   ` Johannes Berg
2008-11-26 22:40 ` [PATCH 07/39] wimax: generic WiMAX device management (registration, deregistration, etc) Inaky Perez-Gonzalez
2008-11-27 10:40   ` Patrick McHardy
2008-12-03  2:06     ` Inaky Perez-Gonzalez
2008-12-04 13:02       ` Patrick McHardy
2008-11-26 22:40 ` [PATCH 08/39] wimax: Mappping of generic netlink family IDs to net devices Inaky Perez-Gonzalez
2008-11-27  9:47   ` Johannes Berg
2008-12-03  2:06     ` Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 09/39] wimax: provides user space with information needed when opening a WiMAX device Inaky Perez-Gonzalez
2008-11-27  9:53   ` Johannes Berg
2008-11-27 12:20     ` Johannes Berg
2008-12-03  2:06     ` Inaky Perez-Gonzalez
2008-11-27 10:44   ` Patrick McHardy
2008-11-26 22:40 ` [PATCH 10/39] wimax: Generic messaging interface between user space and driver/device Inaky Perez-Gonzalez
2008-11-27  9:55   ` Johannes Berg
2008-11-27 12:35   ` Thomas Graf
2008-12-03  2:02     ` Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 11/39] wimax: RF-kill framework integration Inaky Perez-Gonzalez
2008-11-27  9:56   ` Johannes Berg
2008-12-03  2:03     ` Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 12/39] wimax: API call to reset a WiMAX device Inaky Perez-Gonzalez
2008-11-27  9:58   ` Johannes Berg
2008-12-03  2:05     ` Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 13/39] wimax: Makefile, Kconfig and docbook linkage for the stack Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 14/39] i2400m: documentation and instructions for usage Inaky Perez-Gonzalez
2008-11-27 10:01   ` Johannes Berg
2008-12-03  2:06     ` Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 15/39] i2400m: host-to-device protocol definitions Inaky Perez-Gonzalez
2008-11-27 10:04   ` Johannes Berg
2008-12-03  2:06     ` Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 16/39] i2400m: core driver definitions and API Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 17/39] i2400m: Generic probe/disconnect, reset and message passing Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 18/39] i2400m: linkage to the networking stack Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 19/39] i2400m: sysfs controls Inaky Perez-Gonzalez
2008-11-27  9:23   ` Johannes Berg
2008-11-26 22:40 ` [PATCH 20/39] i2400m: rfkill integration with the WiMAX stack Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 21/39] i2400m: firmware loading and bootrom initialization Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 22/39] i2400m: handling of the data/control reception path Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 23/39] i2400m: handling of the data/control transmission path Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 24/39] i2400m: various functions for device management Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 25/39] i2400m/USB: header for the USB bus driver Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 26/39] i2400m/USB: error density tracking Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 27/39] i2400m/USB: main probe/disconnect and backend routines Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 28/39] i2400m/USB: firmware upload backend Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 29/39] i2400m/USB: handling of notifications from the device Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 30/39] i2400m/USB: read transactions from the USB device Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 31/39] i2400m/USB: write transactions to " Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 32/39] i2400m/SDIO: header for the SDIO subdriver Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 33/39] i2400m/SDIO: main probe/disconnect and backend routines Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 34/39] i2400m/SDIO: firmware upload backend Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 35/39] i2400m/SDIO: read transactions from the SDIO device Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 36/39] i2400m/SDIO: write transactions to " Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 37/39] i2400m: Makefile and Kconfig Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 38/39] wimax: export linux/wimax.h and linux/wimax/i2400m.h with headers_install Inaky Perez-Gonzalez
2008-11-26 22:40 ` [PATCH 39/39] wimax/i2400m: add CREDITS and MAINTAINERS entries Inaky Perez-Gonzalez
2008-11-27  8:17 ` [PATCH 00/39] merge request for WiMAX kernel stack and i2400m driver v2 David Miller
2008-11-27  9:24   ` Inaky Perez-Gonzalez
2008-11-27 10:18 ` Arkadiusz Miskiewicz
2008-11-27 10:41   ` Marcel Holtmann
2008-11-27 10:54 ` Johannes Berg
2008-11-27 11:14   ` Marcel Holtmann
2008-11-27 11:23     ` Johannes Berg
2008-11-30  4:05       ` Dan Williams
2008-11-27 11:47     ` Andi Kleen
2008-11-27 11:50       ` Johannes Berg
2008-11-27 16:51   ` Inaky Perez-Gonzalez
2008-12-03  2:07   ` Inaky Perez-Gonzalez
2008-12-03 23:03     ` Dan Williams
2008-12-04  9:00     ` Johannes Berg
2008-12-04 19:21       ` Inaky Perez-Gonzalez
2008-12-04 23:09         ` Johannes Berg
2008-12-03  2:10 ` Inaky Perez-Gonzalez
2008-12-04  9:01   ` Johannes Berg
2008-12-04 13:37     ` Marcel Holtmann
  -- strict thread matches above, loose matches on Subject: below --
2008-11-26  7:38 Inaky Perez-Gonzalez
2008-11-26  7:38 ` [PATCH 03/39] wimax: constants and definitions to interact with user space Inaky Perez-Gonzalez
2008-11-24 21:50 [PATCH 00/39] merge request for WiMAX kernel stack and i2400m driver Inaky Perez-Gonzalez
2008-11-24 21:50 ` [PATCH 03/39] wimax: constants and definitions to interact with user space Inaky Perez-Gonzalez

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=200812021806.16278.inaky@linux.intel.com \
    --to=inaky@linux.intel.com \
    --cc=johannes@sipsolutions.net \
    --cc=netdev@vger.kernel.org \
    --cc=tgraf@suug.ch \
    /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 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).