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
next prev 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).