From: Johannes Berg <johannes@sipsolutions.net>
To: linux-wireless@vger.kernel.org
Cc: Javier Cardona <javier@cozybit.com>,
Steve Derosier <steve@cozybit.com>,
devel@lists.open80211s.org
Subject: [RFC 3/5] cfg80211: require add_virtual_intf to return new dev
Date: Wed, 01 Dec 2010 21:59:42 +0100 [thread overview]
Message-ID: <20101201210225.740820680@sipsolutions.net> (raw)
In-Reply-To: 20101201205939.009530439@sipsolutions.net
From: Johannes Berg <johannes.berg@intel.com>
cfg80211 used to do all its bookkeeping in
the notifier, but some new stuff will have
to use local variables so make the callback
return the netdev pointer.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
include/net/cfg80211.h | 11 +++++++----
net/mac80211/cfg.c | 20 ++++++++++++--------
net/wireless/nl80211.c | 7 +++++--
3 files changed, 24 insertions(+), 14 deletions(-)
--- wireless-testing.orig/include/net/cfg80211.h 2010-12-01 21:06:31.000000000 +0100
+++ wireless-testing/include/net/cfg80211.h 2010-12-01 21:07:35.000000000 +0100
@@ -1031,7 +1031,8 @@ struct cfg80211_pmksa {
*
* @add_virtual_intf: create a new virtual interface with the given name,
* must set the struct wireless_dev's iftype. Beware: You must create
- * the new netdev in the wiphy's network namespace!
+ * the new netdev in the wiphy's network namespace! Returns the netdev,
+ * or an ERR_PTR.
*
* @del_virtual_intf: remove the virtual interface determined by ifindex.
*
@@ -1159,9 +1160,11 @@ struct cfg80211_ops {
int (*suspend)(struct wiphy *wiphy);
int (*resume)(struct wiphy *wiphy);
- int (*add_virtual_intf)(struct wiphy *wiphy, char *name,
- enum nl80211_iftype type, u32 *flags,
- struct vif_params *params);
+ struct net_device * (*add_virtual_intf)(struct wiphy *wiphy,
+ char *name,
+ enum nl80211_iftype type,
+ u32 *flags,
+ struct vif_params *params);
int (*del_virtual_intf)(struct wiphy *wiphy, struct net_device *dev);
int (*change_virtual_intf)(struct wiphy *wiphy,
struct net_device *dev,
--- wireless-testing.orig/net/mac80211/cfg.c 2010-12-01 21:08:42.000000000 +0100
+++ wireless-testing/net/mac80211/cfg.c 2010-12-01 21:10:10.000000000 +0100
@@ -19,9 +19,10 @@
#include "rate.h"
#include "mesh.h"
-static int ieee80211_add_iface(struct wiphy *wiphy, char *name,
- enum nl80211_iftype type, u32 *flags,
- struct vif_params *params)
+static struct net_device *ieee80211_add_iface(struct wiphy *wiphy, char *name,
+ enum nl80211_iftype type,
+ u32 *flags,
+ struct vif_params *params)
{
struct ieee80211_local *local = wiphy_priv(wiphy);
struct net_device *dev;
@@ -29,12 +30,15 @@ static int ieee80211_add_iface(struct wi
int err;
err = ieee80211_if_add(local, name, &dev, type, params);
- if (err || type != NL80211_IFTYPE_MONITOR || !flags)
- return err;
+ if (err)
+ return ERR_PTR(err);
- sdata = IEEE80211_DEV_TO_SUB_IF(dev);
- sdata->u.mntr_flags = *flags;
- return 0;
+ if (type == NL80211_IFTYPE_MONITOR && flags) {
+ sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+ sdata->u.mntr_flags = *flags;
+ }
+
+ return dev;
}
static int ieee80211_del_iface(struct wiphy *wiphy, struct net_device *dev)
--- wireless-testing.orig/net/wireless/nl80211.c 2010-12-01 21:07:56.000000000 +0100
+++ wireless-testing/net/wireless/nl80211.c 2010-12-01 21:08:25.000000000 +0100
@@ -1368,6 +1368,7 @@ static int nl80211_new_interface(struct
{
struct cfg80211_registered_device *rdev = info->user_ptr[0];
struct vif_params params;
+ struct net_device *dev;
int err;
enum nl80211_iftype type = NL80211_IFTYPE_UNSPECIFIED;
u32 flags;
@@ -1403,11 +1404,13 @@ static int nl80211_new_interface(struct
err = parse_monitor_flags(type == NL80211_IFTYPE_MONITOR ?
info->attrs[NL80211_ATTR_MNTR_FLAGS] : NULL,
&flags);
- err = rdev->ops->add_virtual_intf(&rdev->wiphy,
+ dev = rdev->ops->add_virtual_intf(&rdev->wiphy,
nla_data(info->attrs[NL80211_ATTR_IFNAME]),
type, err ? NULL : &flags, ¶ms);
+ if (IS_ERR(dev))
+ return PTR_ERR(dev);
- return err;
+ return 0;
}
static int nl80211_del_interface(struct sk_buff *skb, struct genl_info *info)
next prev parent reply other threads:[~2010-12-01 21:03 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-01 20:59 [RFC 0/5] mesh join/leave API Johannes Berg
2010-12-01 20:59 ` [RFC 1/5] mac80211: use configured mesh TTL Johannes Berg
2010-12-01 20:59 ` [RFC 2/5] mac80211: move mesh filter adjusting Johannes Berg
2010-12-01 20:59 ` Johannes Berg [this message]
2010-12-01 20:59 ` [RFC 4/5] nl80211: refactor mesh parameter parsing Johannes Berg
2010-12-02 8:34 ` [RFC 4/5 v2] " Johannes Berg
2010-12-01 20:59 ` [RFC 5/5] cfg80211/mac80211: add mesh join/leave commands Johannes Berg
2010-12-01 21:15 ` Johannes Berg
2010-12-02 0:23 ` Javier Cardona
2010-12-02 6:57 ` Johannes Berg
2010-12-02 8:45 ` [RFC 5/5 v2] " Johannes Berg
2010-12-02 20:09 ` Javier Cardona
2010-12-02 20:14 ` Johannes Berg
2010-12-02 21:24 ` Javier Cardona
2010-12-02 21:38 ` Johannes Berg
2010-12-02 23:08 ` Javier Cardona
2010-12-03 8:13 ` 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=20101201210225.740820680@sipsolutions.net \
--to=johannes@sipsolutions.net \
--cc=devel@lists.open80211s.org \
--cc=javier@cozybit.com \
--cc=linux-wireless@vger.kernel.org \
--cc=steve@cozybit.com \
/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).