wext: add back wireless/ dir in sysfs for cfg80211 interfaces
The move away from having drivers assign wireless handlers, in favour of making cfg80211 assign them, broke the sysfs registration (the wireless/ dir went missing) because the handlers are now assigned only after registration, which is too late. Fix this by special-casing cfg80211-based devices, all of which are required to have an ieee80211_ptr, in the sysfs code, and also using get_wireless_stats() to have the same values reported as in procfs. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Reported-by: Hugh Dickins <hugh.dickins@tiscali.co.uk> Tested-by: Hugh Dickins <hugh.dickins@tiscali.co.uk> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
8503bd8c7d
commit
8f1546cadf
3 changed files with 7 additions and 8 deletions
|
@ -14,6 +14,7 @@ extern int wext_handle_ioctl(struct net *net, struct ifreq *ifr, unsigned int cm
|
|||
void __user *arg);
|
||||
extern int compat_wext_handle_ioctl(struct net *net, unsigned int cmd,
|
||||
unsigned long arg);
|
||||
extern struct iw_statistics *get_wireless_stats(struct net_device *dev);
|
||||
#else
|
||||
static inline int wext_proc_init(struct net *net)
|
||||
{
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#include <net/sock.h>
|
||||
#include <linux/rtnetlink.h>
|
||||
#include <linux/wireless.h>
|
||||
#include <net/iw_handler.h>
|
||||
#include <net/wext.h>
|
||||
|
||||
#include "net-sysfs.h"
|
||||
|
||||
|
@ -363,15 +363,13 @@ static ssize_t wireless_show(struct device *d, char *buf,
|
|||
char *))
|
||||
{
|
||||
struct net_device *dev = to_net_dev(d);
|
||||
const struct iw_statistics *iw = NULL;
|
||||
const struct iw_statistics *iw;
|
||||
ssize_t ret = -EINVAL;
|
||||
|
||||
read_lock(&dev_base_lock);
|
||||
if (dev_isalive(dev)) {
|
||||
if (dev->wireless_handlers &&
|
||||
dev->wireless_handlers->get_wireless_stats)
|
||||
iw = dev->wireless_handlers->get_wireless_stats(dev);
|
||||
if (iw != NULL)
|
||||
iw = get_wireless_stats(dev);
|
||||
if (iw)
|
||||
ret = (*format)(iw, buf);
|
||||
}
|
||||
read_unlock(&dev_base_lock);
|
||||
|
@ -505,7 +503,7 @@ int netdev_register_kobject(struct net_device *net)
|
|||
*groups++ = &netstat_group;
|
||||
|
||||
#ifdef CONFIG_WIRELESS_EXT_SYSFS
|
||||
if (net->wireless_handlers && net->wireless_handlers->get_wireless_stats)
|
||||
if (net->wireless_handlers || net->ieee80211_ptr)
|
||||
*groups++ = &wireless_group;
|
||||
#endif
|
||||
#endif /* CONFIG_SYSFS */
|
||||
|
|
|
@ -470,7 +470,7 @@ static iw_handler get_handler(struct net_device *dev, unsigned int cmd)
|
|||
/*
|
||||
* Get statistics out of the driver
|
||||
*/
|
||||
static struct iw_statistics *get_wireless_stats(struct net_device *dev)
|
||||
struct iw_statistics *get_wireless_stats(struct net_device *dev)
|
||||
{
|
||||
/* New location */
|
||||
if ((dev->wireless_handlers != NULL) &&
|
||||
|
|
Loading…
Reference in a new issue