netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jiri Benc <jbenc@suse.cz>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: netdev <netdev@vger.kernel.org>,
	"John W. Linville" <linville@tuxdriver.com>
Subject: Re: [RFC] add nl80211
Date: Thu, 24 Aug 2006 15:32:30 +0200	[thread overview]
Message-ID: <20060824153230.5a54bb6a@griffin.suse.cz> (raw)
In-Reply-To: <1156254768.3825.1.camel@ux156>

On Tue, 22 Aug 2006 15:52:47 +0200, Johannes Berg wrote:
> [...]
> +	int	(*add_virtual_intf)(void *priv, char *name);

What about initial interface type? (Hm, maybe it can be fixed to a STA
mode, but it should be documented somewhere at least.)

> +	int	(*del_virtual_intf)(void *priv, int ifindex);
> +
> +	/* more things to be added...
> +	 *
> +	 * for a (*configure)(...) call I'd probably guess that the
> +	 * best bet would be to have one call that returns all
> +	 * possible options, one that sets them based on the
> +	 * struct genl_info *info, and one for that optimised
> +	 * set-at-once thing.
> +	 */
> +};
> +
> +/*
> + * register a given method structure with the nl80211 system
> + * and associate the 'priv' pointer with it.
> + * NOTE: for proper operation, this priv pointer MUST also be
> + * assigned to each &struct net_device's @ieee80211_ptr member!
> + */
> +extern int nl80211_register(struct nl80211_ops *ops, void *priv);

Could this function return the allocated wiphy index?

> [...]
> +struct nl80211_registered_driver {
> +	struct nl80211_ops *ops;
> +	int wiphy;
> +	void *priv;
> +	struct list_head list;
> +	/* we hold this mutex during any call so that
> +	 * we cannot do multiple calls at once, and also
> +	 * to avoid the deregister call to proceed while
> +	 * any call is in progress */
> +	struct mutex mtx;
> +};

Hm, most of drivers will need to take rtnl to stay compatible with WE.
(Not a reason to take rtnl in nl80211, just a remark.)

> [...]
> +static struct nl80211_registered_driver *nl80211_drv_by_priv_locked(void *priv)

Please use __ prefix instead of _locked suffix (e.g.
__nl80211_drv_by_priv). That's more common convention in the kernel.

> [...]
> +/* requires nl80211_drv_mutex to be held! */
> +static struct nl80211_registered_driver *
> +nl80211_drv_from_info_locked(struct genl_info *info)
> +{
> +	int ifindex;
> +	struct nl80211_registered_driver *result = NULL;
> +	struct net_device *dev;
> +	int err = -EINVAL;
> +
> +	if (info->attrs[NL80211_ATTR_WIPHY]) {
> +		result = nl80211_drv_by_wiphy_locked(
> +				nla_get_u32(info->attrs[NL80211_ATTR_WIPHY]));
> +		if (result)
> +			return result;
> +		err = -ENODEV;
> +	}
> +
> +	if (info->attrs[NL80211_ATTR_IFINDEX]) {
> +		ifindex = nla_get_u32(info->attrs[NL80211_ATTR_IFINDEX]);
> +		dev = dev_get_by_index(ifindex);
> +		result = nl80211_drv_by_priv_locked(dev->ieee80211_ptr);
> +		dev_put(dev);
> +		if (result)
> +			return result;
> +		err = -ENODEV;
> +	}

If both ifindex and wiphy index are set and they disagree with each
other, this should return an error.

> +
> +	return ERR_PTR(err);
> +}
> +
> [...]
> +static struct nl80211_registered_driver *
> +nl80211_drv_from_info_with_locking(struct genl_info *info)

nl80211_get_drv_from_info would be better. Also, introduce
a nl80211_put_drv function to ease tracking of locks.

> [...]
> +static int nl80211_dump_wiphys(struct sk_buff *skb, struct netlink_callback *cb)
> +{
> +	/* I think need professional netlink help with dumpit calls */

I'm not able to help you here :-(


Looks really good now, I think.

Thanks,

 Jiri

-- 
Jiri Benc
SUSE Labs

  parent reply	other threads:[~2006-08-24 13:32 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-08-22 13:52 [RFC] add nl80211 Johannes Berg
2006-08-22 15:09 ` Johannes Berg
2006-08-23  9:40 ` Johannes Berg
2006-08-24 13:32 ` Jiri Benc [this message]
2006-08-24 14:15   ` Johannes Berg
2006-08-24 14:36 ` Thomas Graf
2006-08-24 15:20   ` Johannes Berg
2006-08-24 16:07 ` Johannes Berg
2006-08-24 17:27   ` Thomas Graf
2006-08-25  9:04     ` Johannes Berg
2006-08-25 10:30       ` Thomas Graf
2006-08-25 10:38         ` Johannes Berg
2006-08-25 11:01   ` [RFC take3] " Johannes Berg

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=20060824153230.5a54bb6a@griffin.suse.cz \
    --to=jbenc@suse.cz \
    --cc=johannes@sipsolutions.net \
    --cc=linville@tuxdriver.com \
    --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 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).