2013-04-17 22:06:54

by Bing Zhao

[permalink] [raw]
Subject: [PATCH] net-sysfs: Add entry for nl80211 interface type

Add a "wireless/nl80211_iftype" entry in the net device sysfs
file structure to indicate the mode of the wireless device so
it can be discovered easily from userspace.

Signed-off-by: Paul Stewart <[email protected]>
Signed-off-by: Bing Zhao <[email protected]>
---
net/core/net-sysfs.c | 18 ++++++++++++++++++
1 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
index 7427ab5..454bd7f 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -17,6 +17,7 @@
#include <linux/nsproxy.h>
#include <net/sock.h>
#include <net/net_namespace.h>
+#include <net/cfg80211.h>
#include <linux/rtnetlink.h>
#include <linux/vmalloc.h>
#include <linux/export.h>
@@ -448,7 +449,24 @@ static struct attribute_group netstat_group = {
};

#if IS_ENABLED(CONFIG_WIRELESS_EXT) || IS_ENABLED(CONFIG_CFG80211)
+static ssize_t show_nl80211_iftype(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ const struct net_device *netdev = to_net_dev(dev);
+ ssize_t ret = 0;
+
+ if (!rtnl_trylock())
+ return restart_syscall();
+ if (netdev->ieee80211_ptr)
+ ret = sprintf(buf, "%d\n", netdev->ieee80211_ptr->iftype);
+ rtnl_unlock();
+
+ return ret;
+}
+static DEVICE_ATTR(nl80211_iftype, S_IRUGO, show_nl80211_iftype, NULL);
+
static struct attribute *wireless_attrs[] = {
+ &dev_attr_nl80211_iftype.attr,
NULL
};

--
1.7.0.2


2013-04-17 22:09:58

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH] net-sysfs: Add entry for nl80211 interface type

On Wed, 2013-04-17 at 15:06 -0700, Bing Zhao wrote:
> Add a "wireless/nl80211_iftype" entry in the net device sysfs
> file structure to indicate the mode of the wireless device so
> it can be discovered easily from userspace.

What's wrong with "iw dev", i.e. netlink/nl80211?

johannes

2013-04-17 22:54:38

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH] net-sysfs: Add entry for nl80211 interface type

Hi Bing,

> Add a "wireless/nl80211_iftype" entry in the net device sysfs
> file structure to indicate the mode of the wireless device so
> it can be discovered easily from userspace.

I do question a little bit the usefulness for this one. It would only work on netdev and on wdev devices. Using nl80211 to discover this information seems a lot better approach.

Regards

Marcel

2013-04-18 06:21:59

by Nicolas Cavallari

[permalink] [raw]
Subject: Re: [PATCH] net-sysfs: Add entry for nl80211 interface type

On 18/04/2013 00:09, Johannes Berg wrote:
> On Wed, 2013-04-17 at 15:06 -0700, Bing Zhao wrote:
>> Add a "wireless/nl80211_iftype" entry in the net device sysfs
>> file structure to indicate the mode of the wireless device so
>> it can be discovered easily from userspace.
>
> What's wrong with "iw dev", i.e. netlink/nl80211?

"Do NOT screenscrape this tool, we don't consider its output stable."

So if you are in a shell script, you're basically screwed.

2013-04-18 06:44:07

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH] net-sysfs: Add entry for nl80211 interface type

Hi Nicolas,

>>> Add a "wireless/nl80211_iftype" entry in the net device sysfs
>>> file structure to indicate the mode of the wireless device so
>>> it can be discovered easily from userspace.
>>
>> What's wrong with "iw dev", i.e. netlink/nl80211?
>
> "Do NOT screenscrape this tool, we don't consider its output stable."
>
> So if you are in a shell script, you're basically screwed.

if you are in a shell script, you are screwed no matter what. So what is your point?

Regards

Marcel

2013-04-18 07:03:32

by Paul Stewart

[permalink] [raw]
Subject: Re: [PATCH] net-sysfs: Add entry for nl80211 interface type

The original reason to request this change was simple: to figure out
what type of interface we are looking at, since now some wireless
drivers can simultaneously create managed, p2p and ap interfaces.
Knowing that, from a simple front-end (let's even say a shell script)
we can decide what arguments to use with wpa_supplicant (or indeed if
we want to start it on this interface). wpa_supplicant, of course,
knows how to manipulate the device further using nl80211. I thought
it was a bit onerous to force userspace all the way through nl80211
just to get this trivial piece of information, but apparently this
doesn't seem to be the common point of view.

--
Paul

On Wed, Apr 17, 2013 at 11:43 PM, Marcel Holtmann <[email protected]> wrote:
> Hi Nicolas,
>
>>>> Add a "wireless/nl80211_iftype" entry in the net device sysfs
>>>> file structure to indicate the mode of the wireless device so
>>>> it can be discovered easily from userspace.
>>>
>>> What's wrong with "iw dev", i.e. netlink/nl80211?
>>
>> "Do NOT screenscrape this tool, we don't consider its output stable."
>>
>> So if you are in a shell script, you're basically screwed.
>
> if you are in a shell script, you are screwed no matter what. So what is your point?
>
> Regards
>
> Marcel
>
>

2013-04-18 15:46:48

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH] net-sysfs: Add entry for nl80211 interface type

Hi Paul,

> The original reason to request this change was simple: to figure out
> what type of interface we are looking at, since now some wireless
> drivers can simultaneously create managed, p2p and ap interfaces.
> Knowing that, from a simple front-end (let's even say a shell script)
> we can decide what arguments to use with wpa_supplicant (or indeed if
> we want to start it on this interface). wpa_supplicant, of course,
> knows how to manipulate the device further using nl80211. I thought
> it was a bit onerous to force userspace all the way through nl80211
> just to get this trivial piece of information, but apparently this
> doesn't seem to be the common point of view.

quite frankly this is a design issue with wpa_supplicant since it refuses to manage the wireless devices and interfaces. If you would have a real daemon that manages the wireless device via nl80211, then you would never ever have this problem. All the information are available via nl80211.

However my point is that you can not just base this around netdev exposed interfaces. The netdev interface might not even be present. Especially when talking about P2P you might not have a netdev in the first place. You only have a wdev.

Regards

Marcel

2013-04-18 19:03:21

by Bing Zhao

[permalink] [raw]
Subject: RE: [PATCH] net-sysfs: Add entry for nl80211 interface type

Hi Marcel,

> Hi Bing,
>
> > Add a "wireless/nl80211_iftype" entry in the net device sysfs
> > file structure to indicate the mode of the wireless device so
> > it can be discovered easily from userspace.
>
> I do question a little bit the usefulness for this one.
> It would only work on netdev and on wdev devices.

It's true. That's why the new sysfs entry is added in the 'wireless' placeholder.

/sys/class/net/ethX/wireless/

For non-wireless dev, this won't apply.

Thanks,
Bing

> Using nl80211 to discover this information seems a lot better approach.
>
> Regards
>
> Marcel

2013-04-18 19:11:04

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH] net-sysfs: Add entry for nl80211 interface type

Hi Bing,

>>> Add a "wireless/nl80211_iftype" entry in the net device sysfs
>>> file structure to indicate the mode of the wireless device so
>>> it can be discovered easily from userspace.
>>
>> I do question a little bit the usefulness for this one.
>> It would only work on netdev and on wdev devices.
>
> It's true. That's why the new sysfs entry is added in the 'wireless' placeholder.
>
> /sys/class/net/ethX/wireless/
>
> For non-wireless dev, this won't apply.

I have to correct myself. I meant it does NOT work for wdev. Please just go with nl80211 for this kind of information. It is the right way to handle it. Not some sysfs file.

Regards

Marcel

2013-04-18 19:19:08

by Arend van Spriel

[permalink] [raw]
Subject: Re: [PATCH] net-sysfs: Add entry for nl80211 interface type

On 04/18/2013 09:10 PM, Marcel Holtmann wrote:
> Hi Bing,
>
>>>> Add a "wireless/nl80211_iftype" entry in the net device sysfs
>>>> file structure to indicate the mode of the wireless device so
>>>> it can be discovered easily from userspace.
>>>
>>> I do question a little bit the usefulness for this one.
>>> It would only work on netdev and on wdev devices.
>>
>> It's true. That's why the new sysfs entry is added in the 'wireless' placeholder.
>>
>> /sys/class/net/ethX/wireless/
>>
>> For non-wireless dev, this won't apply.
>
> I have to correct myself. I meant it does NOT work for wdev. Please just go with nl80211 for this kind of information. It is the right way to handle it. Not some sysfs file.
>

I wanted to correct you on P2P but that would be diverging from the real
message. Totally agreeing. Why add another user-space API when the
nl80211 API can provide the information.

Gr. AvS

2013-04-22 13:30:11

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH] net-sysfs: Add entry for nl80211 interface type

On Wed, 2013-04-17 at 15:14 -0700, Paul Stewart wrote:
> I believe the documents for "iw" state explicitly that we shouldn't
> screen-scrape it?

Well, you specifically control your system. I'd also be happy to add
some (maybe a bit hidden) commands to print out _just_ the (numeric)
type, to aid scripting? All I'm trying to say with that though is that
you shouldn't rely on specific output formatting, particularly not with
scan results and "iw list" etc.

johannes

2013-04-22 13:55:04

by Paul Stewart

[permalink] [raw]
Subject: Re: [PATCH] net-sysfs: Add entry for nl80211 interface type

On Mon, Apr 22, 2013 at 6:29 AM, Johannes Berg
<[email protected]> wrote:
>
> On Wed, 2013-04-17 at 15:14 -0700, Paul Stewart wrote:
> > I believe the documents for "iw" state explicitly that we shouldn't
> > screen-scrape it?
>
> Well, you specifically control your system. I'd also be happy to add
> some (maybe a bit hidden) commands to print out _just_ the (numeric)
> type, to aid scripting?


No need. I already made the necessary changes in userspace to switch
to nl80211 to retrieve the iftype. Both Bing and I are done
proselytizing at this point. :-)

>
> All I'm trying to say with that though is that
> you shouldn't rely on specific output formatting, particularly not with
> scan results and "iw list" etc.
>
> johannes
>
>