* [PATCH wireless-dev] d80211: Add support for user space client MLME
@ 2006-05-02 21:18 Jouni Malinen
2006-05-03 16:28 ` Jiri Benc
0 siblings, 1 reply; 12+ messages in thread
From: Jouni Malinen @ 2006-05-02 21:18 UTC (permalink / raw)
To: John W. Linville; +Cc: netdev, jkmaline
Add a configuration option for disabling client MLME in kernel
code. This is used to enable user space MLME for client mode (e.g.,
with wpa_supplicant). The kernel MLME implementation is unmodified,
but it could be removed or at least made optional in build
configuration in the future.
Signed-off-by: Jouni Malinen <jkm@devicescape.com>
Index: wireless-dev/net/d80211/hostapd_ioctl.h
===================================================================
--- wireless-dev.orig/net/d80211/hostapd_ioctl.h
+++ wireless-dev/net/d80211/hostapd_ioctl.h
@@ -91,6 +91,7 @@ enum {
PRISM2_PARAM_KEY_MGMT = 1040,
PRISM2_PARAM_RADAR_DETECT = 1043,
PRISM2_PARAM_SPECTRUM_MGMT = 1044,
+ PRISM2_PARAM_USER_SPACE_MLME = 1045,
/* NOTE: Please try to coordinate with other active development
* branches before allocating new param numbers so that each new param
* will be unique within all branches and the allocated number will not
Index: wireless-dev/net/d80211/ieee80211.c
===================================================================
--- wireless-dev.orig/net/d80211/ieee80211.c
+++ wireless-dev/net/d80211/ieee80211.c
@@ -3116,8 +3116,9 @@ ieee80211_rx_h_mgmt(struct ieee80211_txr
{
struct ieee80211_sub_if_data *sdata;
sdata = IEEE80211_DEV_TO_SUB_IF(rx->dev);
- if (sdata->type == IEEE80211_IF_TYPE_STA ||
- sdata->type == IEEE80211_IF_TYPE_IBSS) {
+ if ((sdata->type == IEEE80211_IF_TYPE_STA ||
+ sdata->type == IEEE80211_IF_TYPE_IBSS) &&
+ !rx->local->user_space_mlme) {
ieee80211_sta_rx_mgmt(rx->dev, rx->skb, rx->u.rx.status);
} else {
/* Management frames are sent to hostapd for processing */
Index: wireless-dev/net/d80211/ieee80211_ioctl.c
===================================================================
--- wireless-dev.orig/net/d80211/ieee80211_ioctl.c
+++ wireless-dev/net/d80211/ieee80211_ioctl.c
@@ -1048,10 +1048,14 @@ static int ieee80211_ioctl_scan_req(stru
struct prism2_hostapd_param *param,
int param_len)
{
+ struct ieee80211_local *local = dev->priv;
u8 *pos = param->u.scan_req.ssid;
int left = param_len - ((u8 *) pos - (u8 *) param);
int len = param->u.scan_req.ssid_len;
+ if (local->user_space_mlme)
+ return -EOPNOTSUPP;
+
if (left < len || len > IEEE80211_MAX_SSID_LEN)
return -EINVAL;
@@ -1076,8 +1080,12 @@ static int ieee80211_ioctl_sta_get_state
static int ieee80211_ioctl_mlme(struct net_device *dev,
struct prism2_hostapd_param *param)
{
+ struct ieee80211_local *local = dev->priv;
struct ieee80211_sub_if_data *sdata;
+ if (local->user_space_mlme)
+ return -EOPNOTSUPP;
+
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
if (sdata->type != IEEE80211_IF_TYPE_STA &&
sdata->type != IEEE80211_IF_TYPE_IBSS)
@@ -1136,6 +1144,10 @@ static int ieee80211_ioctl_set_sta_vlan(
static int ieee80211_set_gen_ie(struct net_device *dev, u8 *ie, size_t len)
{
struct ieee80211_sub_if_data *sdata;
+ struct ieee80211_local *local = dev->priv;
+
+ if (local->user_space_mlme)
+ return -EOPNOTSUPP;
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
if (sdata->type == IEEE80211_IF_TYPE_STA ||
@@ -1745,6 +1757,7 @@ static int ieee80211_ioctl_siwessid(stru
struct iw_request_info *info,
struct iw_point *data, char *ssid)
{
+ struct ieee80211_local *local = dev->priv;
struct ieee80211_sub_if_data *sdata;
size_t len = data->length;
@@ -1754,8 +1767,16 @@ static int ieee80211_ioctl_siwessid(stru
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
if (sdata->type == IEEE80211_IF_TYPE_STA ||
- sdata->type == IEEE80211_IF_TYPE_IBSS)
+ sdata->type == IEEE80211_IF_TYPE_IBSS) {
+ if (local->user_space_mlme) {
+ if (len > IEEE80211_MAX_SSID_LEN)
+ return -EINVAL;
+ memcpy(sdata->u.sta.ssid, ssid, len);
+ sdata->u.sta.ssid_len = len;
+ return 0;
+ }
return ieee80211_sta_set_ssid(dev, ssid, len);
+ }
if (sdata->type == IEEE80211_IF_TYPE_AP) {
memcpy(sdata->u.ap.ssid, ssid, len);
@@ -1804,11 +1825,17 @@ static int ieee80211_ioctl_siwap(struct
struct iw_request_info *info,
struct sockaddr *ap_addr, char *extra)
{
+ struct ieee80211_local *local = dev->priv;
struct ieee80211_sub_if_data *sdata;
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
if (sdata->type == IEEE80211_IF_TYPE_STA ||
sdata->type == IEEE80211_IF_TYPE_IBSS) {
+ if (local->user_space_mlme) {
+ memcpy(sdata->u.sta.bssid, (u8 *) &ap_addr->sa_data,
+ ETH_ALEN);
+ return 0;
+ }
return ieee80211_sta_set_bssid(dev, (u8 *) &ap_addr->sa_data);
} else if (sdata->type == IEEE80211_IF_TYPE_WDS) {
if (memcmp(sdata->u.wds.remote_addr, (u8 *) &ap_addr->sa_data,
@@ -2469,6 +2496,9 @@ static int ieee80211_ioctl_prism2_param(
case PRISM2_PARAM_SPECTRUM_MGMT:
local->conf.spect_mgmt = value;
break;
+ case PRISM2_PARAM_USER_SPACE_MLME:
+ local->user_space_mlme = value;
+ break;
default:
ret = -EOPNOTSUPP;
break;
@@ -2651,6 +2681,9 @@ static int ieee80211_ioctl_get_prism2_pa
else
*param = !!sdata->u.sta.wmm_enabled;
break;
+ case PRISM2_PARAM_USER_SPACE_MLME:
+ *param = local->user_space_mlme;
+ break;
default:
ret = -EOPNOTSUPP;
Index: wireless-dev/net/d80211/ieee80211_i.h
===================================================================
--- wireless-dev.orig/net/d80211/ieee80211_i.h
+++ wireless-dev/net/d80211/ieee80211_i.h
@@ -502,6 +502,8 @@ struct ieee80211_local {
unsigned int hw_modes; /* bitfield of allowed hardware modes;
* (1 << MODE_*) */
+
+ int user_space_mlme;
};
--
Jouni Malinen PGP id EFC895FA
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH wireless-dev] d80211: Add support for user space client MLME
2006-05-02 21:18 [PATCH wireless-dev] d80211: Add support for user space client MLME Jouni Malinen
@ 2006-05-03 16:28 ` Jiri Benc
2006-05-03 16:44 ` Jouni Malinen
0 siblings, 1 reply; 12+ messages in thread
From: Jiri Benc @ 2006-05-03 16:28 UTC (permalink / raw)
To: Jouni Malinen; +Cc: John W. Linville, netdev, jkmaline
On Tue, 2 May 2006 14:18:17 -0700, Jouni Malinen wrote:
> Add a configuration option for disabling client MLME in kernel
> code. This is used to enable user space MLME for client mode (e.g.,
> with wpa_supplicant). The kernel MLME implementation is unmodified,
> but it could be removed or at least made optional in build
> configuration in the future.
It is too early for this. We need to implement some better communication
interface between kernel and hostapd (or what will implement userspace
MLME) first. The current solution, where there is some special
net_device interface (wmaster0ap) abused to dump informations to
userspace, is ugly and confusing for users.
There is no userspace MLME implementation yet. And if one is going to be
written, I'm really convinced it should be written in a clean way. I
think Simon said he would examine a possibility to convert this stuff to
netlink - is there some progress there?
Also, I'm not sure how fullmac cards could be (potentially) supported
with this approach.
Thanks,
Jiri
--
Jiri Benc
SUSE Labs
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH wireless-dev] d80211: Add support for user space client MLME
2006-05-03 16:28 ` Jiri Benc
@ 2006-05-03 16:44 ` Jouni Malinen
2006-05-03 18:10 ` Jiri Benc
2006-05-04 12:26 ` [PATCH wireless-dev] d80211: Add support for user space client MLME Johannes Berg
0 siblings, 2 replies; 12+ messages in thread
From: Jouni Malinen @ 2006-05-03 16:44 UTC (permalink / raw)
To: Jiri Benc; +Cc: John W. Linville, netdev, jkmaline
On Wed, May 03, 2006 at 06:28:15PM +0200, Jiri Benc wrote:
> It is too early for this. We need to implement some better communication
> interface between kernel and hostapd (or what will implement userspace
> MLME) first. The current solution, where there is some special
> net_device interface (wmaster0ap) abused to dump informations to
> userspace, is ugly and confusing for users.
Why do you think that this would be too early now? I agree that the
interface between kernel and user space MLME can be improved, but I see
no point in making client MLME implementation wait for that to happen.
Personally, I don't think that the wmaster#ap interface is really that
ugly, but I have nothing against this being improved if someone has time
for doing it. I just don't see it as the highest priority.
> There is no userspace MLME implementation yet. And if one is going to be
> written, I'm really convinced it should be written in a clean way. I
> think Simon said he would examine a possibility to convert this stuff to
> netlink - is there some progress there?
But there is.. I committed changes to the wpa_supplicant devel branch
for this yesterday. It seems to work fine with net/d80211 and bcm43xx
with this small patch to d80211 to allow the functionality to be moved
into user space.
I have not yet heard of anyone working with details of converting the
management frame communication to use netlink.
> Also, I'm not sure how fullmac cards could be (potentially) supported
> with this approach.
In the same way as with the kernel space MLME implementation.. This
does not really change regardless of where the MLME code is implemented.
Some time ago, I sent a preliminary patch showing what kind of changes
are needed and this was mainly avoiding calls to some ieee80211_sta.c
functions.
--
Jouni Malinen PGP id EFC895FA
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH wireless-dev] d80211: Add support for user space client MLME
2006-05-03 16:44 ` Jouni Malinen
@ 2006-05-03 18:10 ` Jiri Benc
2006-05-03 18:35 ` Jouni Malinen
2006-05-04 12:26 ` [PATCH wireless-dev] d80211: Add support for user space client MLME Johannes Berg
1 sibling, 1 reply; 12+ messages in thread
From: Jiri Benc @ 2006-05-03 18:10 UTC (permalink / raw)
To: Jouni Malinen; +Cc: John W. Linville, netdev, jkmaline
On Wed, 3 May 2006 09:44:58 -0700, Jouni Malinen wrote:
> Why do you think that this would be too early now? I agree that the
> interface between kernel and user space MLME can be improved, but I see
> no point in making client MLME implementation wait for that to happen.
> Personally, I don't think that the wmaster#ap interface is really that
> ugly, but I have nothing against this being improved if someone has time
> for doing it. I just don't see it as the highest priority.
On the other hand, I'm afraid it will be hard to explain to users why
there are all these network interfaces (wmaster0, wmaster0ap) they
shouldn't touch at all. I'm trying to reduce those interfaces as much as
possible. We cannot avoid wmaster0, but we can avoid wmaster0ap. So I
see the new kernel->hostapd (wpa_supplicant) interface as a rather high
priority.
> But there is.. I committed changes to the wpa_supplicant devel branch
> for this yesterday. It seems to work fine with net/d80211 and bcm43xx
> with this small patch to d80211 to allow the functionality to be moved
> into user space.
Oh, sorry, didn't know that.
If you really feel this is a necessary feature (although I think we
should focus more on putting the stack to a form suitable for inclusion
in the kernel than on adding new features now), what about making the
wmaster0ap interface appear only when the device is switched to user
space MLME? Should I make a patch?
> I have not yet heard of anyone working with details of converting the
> management frame communication to use netlink.
With details - no, neither have I.
> > Also, I'm not sure how fullmac cards could be (potentially) supported
> > with this approach.
>
> In the same way as with the kernel space MLME implementation.. This
> does not really change regardless of where the MLME code is implemented.
I had in mind cards with large parts of MLME implemented in their
firmware, when MLME is moved from the stack fully to userspace. Such
cards probably won't allow you to handle e. g. scanning by switching
channels and sending probe requests. I know, we're not going to support
them soon, but isn't this something that will disallow the suppport at
all?
Or do I understand it wrong?
> Some time ago, I sent a preliminary patch showing what kind of changes
> are needed and this was mainly avoiding calls to some ieee80211_sta.c
> functions.
Hm, I probably missed that patch (or maybe just can't remember). Could
you post a link or something?
Thanks,
Jiri
--
Jiri Benc
SUSE Labs
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH wireless-dev] d80211: Add support for user space client MLME
2006-05-03 18:10 ` Jiri Benc
@ 2006-05-03 18:35 ` Jouni Malinen
2006-05-04 9:00 ` Jiri Benc
0 siblings, 1 reply; 12+ messages in thread
From: Jouni Malinen @ 2006-05-03 18:35 UTC (permalink / raw)
To: Jiri Benc; +Cc: John W. Linville, netdev, jkmaline
On Wed, May 03, 2006 at 08:10:59PM +0200, Jiri Benc wrote:
> If you really feel this is a necessary feature (although I think we
> should focus more on putting the stack to a form suitable for inclusion
> in the kernel than on adding new features now), what about making the
> wmaster0ap interface appear only when the device is switched to user
> space MLME? Should I make a patch?
I think it would be nice to get this in so that both client and AP modes
can use the same mechanism (user space MLME); hostapd already needs this
wmaster0ap interface. In other words, if we do not want to see that
interface by default, we could just add a generic mechanism for
registering wmaster0ap that both hostapd and wpa_supplicant could use.
The Host AP driver (driver/net/wireless/hostap) is doing this with
PRISM2_PARAM_HOSTAPD parameter. I don't care how it's done, but some
simple mechanism would be preferred.
> I had in mind cards with large parts of MLME implemented in their
> firmware, when MLME is moved from the stack fully to userspace. Such
> cards probably won't allow you to handle e. g. scanning by switching
> channels and sending probe requests. I know, we're not going to support
> them soon, but isn't this something that will disallow the suppport at
> all?
No, move of MLME to user space should not change this at all. As an
example, wpa_supplicant supports both cases and the patch I'm working on
for getting Prism2 (full MAC for client mode) working with d80211 is
modifying the kernel side to allow this to be done. Both changes are
touching the same areas in the code, but there is no major change in
whether fullmac can be supported or not.
> > Some time ago, I sent a preliminary patch showing what kind of changes
> > are needed and this was mainly avoiding calls to some ieee80211_sta.c
> > functions.
>
> Hm, I probably missed that patch (or maybe just can't remember). Could
> you post a link or something?
http://hostap.epitest.fi/releases/testing/jkm-wireless-dev-patches.tar.gz
That is not up-to-date with wireless-dev.git anymore, though. The key
patch is d80211_fullmac_client.diff which is small enough to include
here. Please note that this is not yet complete, so consider it more an
example on what type of changes are needed.
d80211: Add support for hardware-based client MLME (fullmac)
Add support for using hardware/firmware-based client MLME (fullmac) into
the Devicescape IEEE 802.11 stack. This adds a new flag, hw_client_mlme,
for the low-level drivers to indicate that the client MLME (management
frame processing) is implemented in hardware/firmware. This disables
host-based MLME implementation for client mode.
In addition to changes in net/d80211, this patch fixes client mode for
the Prism2/2.5/3 driver in drivers/net/wireless/d80211 by using the new
mode of implementing client MLME in firmware. AP mode (Host AP) is still
using host-based MLME.
Signed-off-by: Jouni Malinen <jkmaline@cc.hut.fi>
Index: wireless-dev/drivers/net/wireless/d80211/prism3_hw.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/d80211/prism3_hw.c
+++ wireless-dev/drivers/net/wireless/d80211/prism3_hw.c
@@ -2931,6 +2931,7 @@ static struct ieee80211_hw prism3_hw = {
.version = IEEE80211_VERSION,
.name = "prism3",
.host_broadcast_ps_buffering = 1,
+ .hw_client_mlme = 1,
.num_modes = 1,
.num_modes = NUM_ENTRIES(prism3_hw_modes),
.modes = prism3_hw_modes,
Index: wireless-dev/include/net/d80211.h
===================================================================
--- wireless-dev.orig/include/net/d80211.h
+++ wireless-dev/include/net/d80211.h
@@ -441,7 +441,11 @@ struct ieee80211_hw {
/* 1 = low-level driver supports skb fraglist (NETIF_F_FRAGLIST), i.e.,
* more than one skb per frame */
- unsigned int fraglist;
+ unsigned int fraglist:1;
+
+ /* 0 = client MLME in host software (softmac)
+ * 1 = client MLME in hardware/firmware (fullmac) */
+ unsigned int hw_client_mlme:1;
/* This is the time in us to change channels
*/
Index: wireless-dev/net/d80211/ieee80211_ioctl.c
===================================================================
--- wireless-dev.orig/net/d80211/ieee80211_ioctl.c
+++ wireless-dev/net/d80211/ieee80211_ioctl.c
@@ -1028,10 +1028,16 @@ static int ieee80211_ioctl_scan_req(stru
u8 *pos = param->u.scan_req.ssid;
int left = param_len - ((u8 *) pos - (u8 *) param);
int len = param->u.scan_req.ssid_len;
+ struct ieee80211_local *local = dev->priv;
if (left < len || len > IEEE80211_MAX_SSID_LEN)
return -EINVAL;
+ if (local->hw->hw_client_mlme) {
+ /* TODO: add local->hw->scan_req() */
+ return 0;
+ }
+
return ieee80211_sta_req_scan(dev, pos, len);
}
@@ -1053,10 +1059,17 @@ static int ieee80211_ioctl_mlme(struct n
struct prism2_hostapd_param *param)
{
struct ieee80211_sub_if_data *sdata;
+ struct ieee80211_local *local = dev->priv;
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
if (sdata->type != IEEE80211_SUB_IF_TYPE_STA)
return -EINVAL;
+
+ if (local->hw->hw_client_mlme) {
+ /* TODO: add local->hw->mlme() */
+ return 0;
+ }
+
switch (param->u.mlme.cmd) {
case MLME_STA_DEAUTH:
ieee80211_sta_deauthenticate(dev, param->u.mlme.reason_code);
@@ -1116,7 +1129,8 @@ static int ieee80211_set_gen_ie(struct n
struct ieee80211_sub_if_data *sdata;
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
- if (sdata->type == IEEE80211_SUB_IF_TYPE_STA)
+ if (sdata->type == IEEE80211_SUB_IF_TYPE_STA &&
+ !local->hw->hw_client_mlme)
return ieee80211_sta_set_extra_ie(dev, ie, len);
kfree(local->conf.generic_elem);
@@ -1783,7 +1797,8 @@ static int ieee80211_ioctl_siwessid(stru
len--;
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
- if (sdata->type == IEEE80211_SUB_IF_TYPE_STA)
+ if (sdata->type == IEEE80211_SUB_IF_TYPE_STA &&
+ !local->hw->hw_client_mlme)
return ieee80211_sta_set_ssid(dev, ssid, len);
kfree(local->conf.ssid);
@@ -1806,7 +1821,8 @@ static int ieee80211_ioctl_giwessid(stru
struct ieee80211_sub_if_data *sdata;
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
- if (sdata->type == IEEE80211_SUB_IF_TYPE_STA) {
+ if (sdata->type == IEEE80211_SUB_IF_TYPE_STA &&
+ !local->hw->hw_client_mlme) {
int res = ieee80211_sta_get_ssid(dev, ssid, &len);
if (res == 0)
data->length = len;
@@ -1841,6 +1857,8 @@ static int ieee80211_ioctl_siwap(struct
printk(KERN_DEBUG "%s: Failed to config new BSSID to "
"the low-level driver\n", dev->name);
}
+ if (local->hw->hw_client_mlme)
+ return 0;
return ieee80211_sta_set_bssid(dev, (u8 *) &ap_addr->sa_data);
}
@@ -1877,6 +1895,11 @@ static int ieee80211_ioctl_siwscan(struc
ssid = local->conf.ssid;
ssid_len = local->conf.ssid_len;
}
+ if (local->hw->hw_client_mlme) {
+ /* TODO: add local->hw->scan_req() */
+ return 0;
+ }
+
return ieee80211_sta_req_scan(dev, ssid, ssid_len);
}
@@ -1887,6 +1910,13 @@ static int ieee80211_ioctl_giwscan(struc
{
int res;
struct ieee80211_local *local = dev->priv;
+
+ if (local->hw->hw_client_mlme) {
+ /* TODO: add local->hw->get_scan() */
+ data->length = 0;
+ return 0;
+ }
+
if (local->sta_scanning)
return -EAGAIN;
res = ieee80211_sta_scan_results(dev, extra, IW_SCAN_MAX_DATA);
@@ -2692,6 +2722,7 @@ static int ieee80211_ioctl_siwmlme(struc
struct iw_request_info *info,
struct iw_point *data, char *extra)
{
+ struct ieee80211_local *local = dev->priv;
struct ieee80211_sub_if_data *sdata;
struct iw_mlme *mlme = (struct iw_mlme *) extra;
@@ -2699,6 +2730,11 @@ static int ieee80211_ioctl_siwmlme(struc
if (sdata->type != IEEE80211_SUB_IF_TYPE_STA)
return -EINVAL;
+ if (local->hw->hw_client_mlme) {
+ /* TODO: add local->hw->mlme() */
+ return 0;
+ }
+
switch (mlme->cmd) {
case IW_MLME_DEAUTH:
/* TODO: mlme->addr.sa_data */
--
Jouni Malinen PGP id EFC895FA
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH wireless-dev] d80211: Add support for user space client MLME
2006-05-03 18:35 ` Jouni Malinen
@ 2006-05-04 9:00 ` Jiri Benc
2006-05-04 16:44 ` Jouni Malinen
0 siblings, 1 reply; 12+ messages in thread
From: Jiri Benc @ 2006-05-04 9:00 UTC (permalink / raw)
To: Jouni Malinen; +Cc: John W. Linville, netdev, jkmaline
On Wed, 3 May 2006 11:35:24 -0700, Jouni Malinen wrote:
> I think it would be nice to get this in so that both client and AP modes
> can use the same mechanism (user space MLME); hostapd already needs this
> wmaster0ap interface. In other words, if we do not want to see that
> interface by default, we could just add a generic mechanism for
> registering wmaster0ap that both hostapd and wpa_supplicant could use.
> The Host AP driver (driver/net/wireless/hostap) is doing this with
> PRISM2_PARAM_HOSTAPD parameter. I don't care how it's done, but some
> simple mechanism would be preferred.
Ok. So what about PRISM2_HOSTAPD_MGMT_IF ioctl that will add management
interface (if not added yet) and return its ifindex? It would accept a
boolean parameter (like PRISM2_PARAM_HOSTAPD) to add/remove that
interface. If you agree with this, I will make a patch.
Of course, both hostapd and wpa_supplicant needs to be changed for that.
This should not be a problem now as the d80211 stack is not in a common
use yet.
> No, move of MLME to user space should not change this at all. As an
> example, wpa_supplicant supports both cases and the patch I'm working on
> for getting Prism2 (full MAC for client mode) working with d80211 is
> modifying the kernel side to allow this to be done. Both changes are
> touching the same areas in the code, but there is no major change in
> whether fullmac can be supported or not.
So wpa_supplicant needs to know if the card is softmac or fullmac and
behave accordingly, right?
> That is not up-to-date with wireless-dev.git anymore, though. The key
> patch is d80211_fullmac_client.diff which is small enough to include
> here. Please note that this is not yet complete, so consider it more an
> example on what type of changes are needed.
Oh, thanks, now I remember, I have seen that.
Thanks,
Jiri
--
Jiri Benc
SUSE Labs
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH wireless-dev] d80211: Add support for user space client MLME
2006-05-03 16:44 ` Jouni Malinen
2006-05-03 18:10 ` Jiri Benc
@ 2006-05-04 12:26 ` Johannes Berg
2006-05-10 17:17 ` [PATCH wireless-dev] d80211: Add support for user space clientMLME Jouni Malinen
1 sibling, 1 reply; 12+ messages in thread
From: Johannes Berg @ 2006-05-04 12:26 UTC (permalink / raw)
To: Jouni Malinen; +Cc: Jiri Benc, John W. Linville, netdev, jkmaline
[-- Attachment #1: Type: text/plain, Size: 665 bytes --]
On Wed, 2006-05-03 at 09:44 -0700, Jouni Malinen wrote:
> But there is.. I committed changes to the wpa_supplicant devel branch
> for this yesterday. It seems to work fine with net/d80211 and bcm43xx
> with this small patch to d80211 to allow the functionality to be moved
> into user space.
Cool, do you have a list of things that we need to support for it to
work on a 'softmac' based driver (iow removing softmac in favour of
this)?
> I have not yet heard of anyone working with details of converting the
> management frame communication to use netlink.
I have an interest in this, as soon as I can I'll try writing up
something.
johannes
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 793 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH wireless-dev] d80211: Add support for user space client MLME
2006-05-04 9:00 ` Jiri Benc
@ 2006-05-04 16:44 ` Jouni Malinen
2006-05-05 10:13 ` Johannes Berg
2006-05-05 13:17 ` [PATCH] d80211: switching management interface on/off Jiri Benc
0 siblings, 2 replies; 12+ messages in thread
From: Jouni Malinen @ 2006-05-04 16:44 UTC (permalink / raw)
To: Jiri Benc; +Cc: John W. Linville, netdev, jkmaline
On Thu, May 04, 2006 at 11:00:28AM +0200, Jiri Benc wrote:
> Ok. So what about PRISM2_HOSTAPD_MGMT_IF ioctl that will add management
> interface (if not added yet) and return its ifindex? It would accept a
> boolean parameter (like PRISM2_PARAM_HOSTAPD) to add/remove that
> interface. If you agree with this, I will make a patch.
Yes, that would be fine.
> Of course, both hostapd and wpa_supplicant needs to be changed for that.
> This should not be a problem now as the d80211 stack is not in a common
> use yet.
Sure, no problems with that at the moment.
> So wpa_supplicant needs to know if the card is softmac or fullmac and
> behave accordingly, right?
Yes. Currently, I'm just using a configuration file parameter for this,
but this information should eventually be exported by the kernel code to
allow wpa_supplicant to select which mode to use without requiring user
configuration.
--
Jouni Malinen PGP id EFC895FA
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH wireless-dev] d80211: Add support for user space client MLME
2006-05-04 16:44 ` Jouni Malinen
@ 2006-05-05 10:13 ` Johannes Berg
2006-05-05 13:17 ` [PATCH] d80211: switching management interface on/off Jiri Benc
1 sibling, 0 replies; 12+ messages in thread
From: Johannes Berg @ 2006-05-05 10:13 UTC (permalink / raw)
To: Jouni Malinen; +Cc: Jiri Benc, John W. Linville, netdev, jkmaline
[-- Attachment #1: Type: text/plain, Size: 635 bytes --]
On Thu, 2006-05-04 at 09:44 -0700, Jouni Malinen wrote:
> Yes. Currently, I'm just using a configuration file parameter for this,
> but this information should eventually be exported by the kernel code to
> allow wpa_supplicant to select which mode to use without requiring user
> configuration.
For the upcoming netlink interface, I'd suggest having a group of calls
that are needed for full-mac devices (similar to the current wext) and a
second group that are needed for soft-mlme, that way you simply try out
one for the soft-mlme and if not implemented fall back to hard, or the
other way around. Maybe.
johannes
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 793 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH] d80211: switching management interface on/off
2006-05-04 16:44 ` Jouni Malinen
2006-05-05 10:13 ` Johannes Berg
@ 2006-05-05 13:17 ` Jiri Benc
1 sibling, 0 replies; 12+ messages in thread
From: Jiri Benc @ 2006-05-05 13:17 UTC (permalink / raw)
To: Jouni Malinen; +Cc: John W. Linville, netdev, jkmaline
Default management interface (wmasterXap) confuses users. This patch removes
it and gives userspace tools (such as hostapd or wpa_supplicant) possibility
to switch it on/off as needed.
To do this, a new PRISM2_PARAM_MGMT_IF iwpriv ioctl is introduced. When set,
it accepts one parameter: 1 for enabling the interface, 0 for disabling it.
When read, it returns ifindex of the management interface or -ENOENT when
the management interface is switched off.
Signed-off-by: Jiri Benc <jbenc@suse.cz>
---
net/d80211/hostapd_ioctl.h | 1
net/d80211/ieee80211.c | 101 ++++++++++++++++++-------------------------
net/d80211/ieee80211_i.h | 3 +
net/d80211/ieee80211_iface.c | 66 ++++++++++++++++++++++++++--
net/d80211/ieee80211_ioctl.c | 16 ++++++
5 files changed, 127 insertions(+), 60 deletions(-)
--- dscape.orig/net/d80211/hostapd_ioctl.h
+++ dscape/net/d80211/hostapd_ioctl.h
@@ -91,6 +91,7 @@ enum {
PRISM2_PARAM_KEY_MGMT = 1040,
PRISM2_PARAM_RADAR_DETECT = 1043,
PRISM2_PARAM_SPECTRUM_MGMT = 1044,
+ PRISM2_PARAM_MGMT_IF = 1045,
/* NOTE: Please try to coordinate with other active development
* branches before allocating new param numbers so that each new param
* will be unique within all branches and the allocated number will not
--- dscape.orig/net/d80211/ieee80211.c
+++ dscape/net/d80211/ieee80211.c
@@ -1954,8 +1954,6 @@ static inline int identical_mac_addr_all
{
return (type1 == IEEE80211_IF_TYPE_MNTR ||
type2 == IEEE80211_IF_TYPE_MNTR ||
- type1 == IEEE80211_IF_TYPE_MGMT ||
- type2 == IEEE80211_IF_TYPE_MGMT ||
(type1 == IEEE80211_IF_TYPE_AP &&
type2 == IEEE80211_IF_TYPE_WDS) ||
(type1 == IEEE80211_IF_TYPE_WDS &&
@@ -1990,6 +1988,20 @@ static int ieee80211_master_stop(struct
return 0;
}
+static int ieee80211_mgmt_open(struct net_device *dev)
+{
+ struct ieee80211_local *local = dev->priv;
+
+ if (!netif_running(local->mdev))
+ return -EOPNOTSUPP;
+ return 0;
+}
+
+static int ieee80211_mgmt_stop(struct net_device *dev)
+{
+ return 0;
+}
+
/* Check if running monitor interfaces should go to a "soft monitor" mode
* and switch them if necessary. */
static inline void ieee80211_start_soft_monitor(struct ieee80211_local *local)
@@ -2032,7 +2044,6 @@ static int ieee80211_open(struct net_dev
struct net_device *ndev = nsdata->dev;
if (ndev != dev && ndev != local->mdev &&
- ndev != local->apdev &&
netif_running(ndev) &&
memcmp(dev->dev_addr, ndev->dev_addr, ETH_ALEN) == 0 &&
!identical_mac_addr_allowed(sdata->type, nsdata->type)) {
@@ -2075,8 +2086,11 @@ static int ieee80211_open(struct net_dev
res = local->hw->open(sdata->master);
if (res == 0) {
res = dev_open(sdata->master);
- if (res && local->hw->stop)
- local->hw->stop(sdata->master);
+ if (res) {
+ if (local->hw->stop)
+ local->hw->stop(sdata->master);
+ } else if (local->apdev)
+ dev_open(local->apdev);
}
if (res) {
if (local->hw->remove_interface)
@@ -2119,6 +2133,8 @@ static int ieee80211_stop(struct net_dev
if (local->open_count == 0) {
ieee80211_stop_scan(sdata->master);
dev_close(sdata->master);
+ if (local->apdev)
+ dev_close(local->apdev);
if (local->hw->stop)
local->hw->stop(sdata->master);
}
@@ -2367,6 +2383,10 @@ ieee80211_rx_mgmt(struct net_device *dev
if (msg_type != ieee80211_msg_monitor)
dev = local->apdev;
+ if (!dev) {
+ dev_kfree_skb(skb);
+ return;
+ }
skb->dev = dev;
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
@@ -3998,6 +4018,19 @@ void ieee80211_if_setup(struct net_devic
dev->destructor = ieee80211_if_free;
}
+void ieee80211_if_mgmt_setup(struct net_device *dev)
+{
+ ether_setup(dev);
+ dev->hard_start_xmit = ieee80211_mgmt_start_xmit;
+ dev->change_mtu = ieee80211_change_mtu_apdev;
+ dev->get_stats = ieee80211_get_stats;
+ dev->open = ieee80211_mgmt_open;
+ dev->stop = ieee80211_mgmt_stop;
+ dev->type = ARPHRD_IEEE80211_PRISM;
+ dev->hard_header_parse = header_parse_80211;
+ dev->tx_queue_len = 0;
+ dev->destructor = ieee80211_if_free;
+}
static void ieee80211_precalc_rates(struct ieee80211_hw *hw)
{
@@ -4018,7 +4051,7 @@ static void ieee80211_precalc_rates(stru
struct net_device *ieee80211_alloc_hw(size_t priv_data_len,
void (*setup)(struct net_device *))
{
- struct net_device *apdev, *mdev;
+ struct net_device *mdev;
struct ieee80211_local *local;
struct ieee80211_sub_if_data *sdata;
int alloc_size;
@@ -4038,17 +4071,11 @@ struct net_device *ieee80211_alloc_hw(si
* 0b84 *****************
* * hw_priv *
* 1664 *****************
- * * ap net_dev *
- * 17c0 *****************
- * * sub_if *
- * *****************
*/
alloc_size = sizeof(struct net_device) +
sizeof(struct ieee80211_sub_if_data) + 3 +
sizeof(struct ieee80211_local) + 3 +
priv_data_len + 3 +
- sizeof(struct net_device) + 3 +
- sizeof(struct ieee80211_sub_if_data) + 3 +
4096;
mdev = (struct net_device *) kzalloc(alloc_size, GFP_KERNEL);
if (mdev == NULL)
@@ -4061,15 +4088,10 @@ struct net_device *ieee80211_alloc_hw(si
local = mdev->priv;
local->hw_priv = (void *)
((char *) local + ((sizeof(struct ieee80211_local) + 3) & ~3));
- apdev = (struct net_device *)
- ((char *) local->hw_priv + ((priv_data_len + 3) & ~3));
ether_setup(mdev);
memcpy(mdev->name, "wmaster%d", 10);
- if (strlen(mdev->name) + 2 >= sizeof(mdev->name))
- goto fail;
-
local->dev_index = -1;
local->mdev = mdev;
local->rx_handlers = ieee80211_rx_handlers;
@@ -4104,28 +4126,6 @@ struct net_device *ieee80211_alloc_hw(si
ieee80211_if_init(mdev);
- apdev = (struct net_device *)
- ((char *) local->hw_priv + ((priv_data_len + 3) & ~3));
- local->apdev = apdev;
- ether_setup(apdev);
- apdev->priv = local;
- apdev->hard_start_xmit = ieee80211_mgmt_start_xmit;
- apdev->change_mtu = ieee80211_change_mtu_apdev;
- apdev->get_stats = ieee80211_get_stats;
- apdev->open = ieee80211_open;
- apdev->stop = ieee80211_stop;
- apdev->type = ARPHRD_IEEE80211_PRISM;
- apdev->hard_header_parse = header_parse_80211;
- apdev->tx_queue_len = 0;
- sprintf(apdev->name, "%sap", mdev->name);
-
- sdata = IEEE80211_DEV_TO_SUB_IF(apdev);
- sdata->type = IEEE80211_IF_TYPE_MGMT;
- sdata->dev = apdev;
- sdata->master = mdev;
- sdata->local = local;
- list_add_tail(&sdata->list, &local->sub_if_list);
-
mdev->hard_start_xmit = ieee80211_master_start_xmit;
mdev->wireless_handlers =
(struct iw_handler_def *) &ieee80211_iw_handler_def;
@@ -4155,10 +4155,6 @@ struct net_device *ieee80211_alloc_hw(si
setup(mdev);
return mdev;
-
- fail:
- ieee80211_free_hw(mdev);
- return NULL;
}
@@ -4193,15 +4189,11 @@ int ieee80211_register_hw(struct net_dev
sta_info_start(local);
- result = register_netdev(local->apdev);
- if (result < 0)
- goto fail_1st_dev;
-
if (hw->fraglist)
dev->features |= NETIF_F_FRAGLIST;
result = register_netdev(dev);
if (result < 0)
- goto fail_2nd_dev;
+ goto fail_dev;
if (rate_control_initialize(local) < 0) {
printk(KERN_DEBUG "%s: Failed to initialize rate control "
@@ -4226,9 +4218,7 @@ int ieee80211_register_hw(struct net_dev
fail_rate:
unregister_netdev(dev);
-fail_2nd_dev:
- unregister_netdev(local->apdev);
-fail_1st_dev:
+fail_dev:
sta_info_stop(local);
ieee80211_unregister_sysfs(local);
fail_sysfs:
@@ -4247,12 +4237,6 @@ int ieee80211_update_hw(struct net_devic
if (hw->queues == 0)
hw->queues = 1;
- memcpy(local->apdev->dev_addr, dev->dev_addr, ETH_ALEN);
- local->apdev->base_addr = dev->base_addr;
- local->apdev->irq = dev->irq;
- local->apdev->mem_start = dev->mem_start;
- local->apdev->mem_end = dev->mem_end;
-
if (!hw->modes || !hw->modes->channels || !hw->modes->rates ||
!hw->modes->num_channels || !hw->modes->num_rates)
return -1;
@@ -4291,6 +4275,9 @@ void ieee80211_unregister_hw(struct net_
del_timer_sync(&local->scan_timer);
ieee80211_rx_bss_list_deinit(dev);
+ if (local->apdev)
+ ieee80211_if_del(local->apdev);
+
list_for_each_safe(ptr, n, &local->sub_if_list) {
struct ieee80211_sub_if_data *sdata =
list_entry(ptr, struct ieee80211_sub_if_data, list);
--- dscape.orig/net/d80211/ieee80211_i.h
+++ dscape/net/d80211/ieee80211_i.h
@@ -518,6 +518,7 @@ void ieee80211_prepare_rates(struct net_
void ieee80211_tx_set_iswep(struct ieee80211_txrx_data *tx);
int ieee80211_if_update_wds(struct net_device *dev, u8 *remote_addr);
void ieee80211_if_setup(struct net_device *dev);
+void ieee80211_if_mgmt_setup(struct net_device *dev);
/* ieee80211_ioctl.c */
int ieee80211_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
@@ -595,6 +596,8 @@ int ieee80211_if_remove(struct net_devic
void ieee80211_if_free(struct net_device *dev);
void ieee80211_if_flush(struct net_device *dev);
void ieee80211_if_sdata_init(struct ieee80211_sub_if_data *sdata);
+int ieee80211_if_add_mgmt(struct net_device *dev);
+void ieee80211_if_del_mgmt(struct net_device *dev);
/* ieee80211_sysfs.c */
int ieee80211_register_sysfs(struct ieee80211_local *local);
--- dscape.orig/net/d80211/ieee80211_iface.c
+++ dscape/net/d80211/ieee80211_iface.c
@@ -93,6 +93,63 @@ fail:
return ret;
}
+int ieee80211_if_add_mgmt(struct net_device *dev)
+{
+ struct net_device *ndev;
+ struct ieee80211_local *local = dev->priv;
+ struct ieee80211_sub_if_data *sdata, *nsdata;
+ int alloc_size, ret;
+
+ sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+ ASSERT_RTNL();
+ alloc_size = sizeof(struct net_device) + 3 +
+ sizeof(struct ieee80211_sub_if_data) + 3;
+
+ ndev = (struct net_device *) kzalloc(alloc_size, GFP_KERNEL);
+ if (ndev == NULL)
+ return -ENOMEM;
+ ret = dev_alloc_name(ndev, "wmgmt%d");
+ if (ret)
+ goto fail;
+
+ ndev->priv = local;
+ memcpy(ndev->dev_addr, dev->dev_addr, ETH_ALEN);
+ ndev->base_addr = dev->base_addr;
+ ndev->irq = dev->irq;
+ ndev->mem_start = dev->mem_start;
+ ndev->mem_end = dev->mem_end;
+ ieee80211_if_mgmt_setup(ndev);
+
+ nsdata = IEEE80211_DEV_TO_SUB_IF(ndev);
+ nsdata->type = IEEE80211_IF_TYPE_MGMT;
+ nsdata->master = local->mdev;
+ nsdata->dev = ndev;
+ nsdata->local = local;
+ ieee80211_if_sdata_init(nsdata);
+
+ ret = register_netdevice(ndev);
+ if (ret)
+ goto fail;
+ if (local->open_count > 0)
+ dev_open(ndev);
+ local->apdev = ndev;
+ return 0;
+fail:
+ kfree(ndev);
+ return ret;
+}
+
+void ieee80211_if_del_mgmt(struct net_device *dev)
+{
+ struct ieee80211_local *local = dev->priv;
+ struct net_device *apdev;
+
+ ASSERT_RTNL();
+ apdev = local->apdev;
+ local->apdev = NULL;
+ unregister_netdevice(apdev);
+}
+
void ieee80211_if_set_type(struct net_device *dev, int type)
{
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
@@ -110,6 +167,7 @@ void ieee80211_if_set_type(struct net_de
sdata->u.ap.max_ratectrl_rateidx = -1;
skb_queue_head_init(&sdata->u.ap.ps_bc_buf);
sdata->bss = &sdata->u.ap;
+ sdata->type = IEEE80211_IF_TYPE_STA;
break;
case IEEE80211_IF_TYPE_STA:
case IEEE80211_IF_TYPE_IBSS: {
@@ -263,8 +321,7 @@ int ieee80211_if_remove(struct net_devic
list_for_each_entry_safe(sdata, n, &local->sub_if_list, list) {
if ((sdata->type == id || id == -1) &&
strcmp(name, sdata->dev->name) == 0 &&
- sdata->dev != local->mdev &&
- sdata->dev != local->apdev) {
+ sdata->dev != local->mdev) {
__ieee80211_if_del(local, sdata);
return 0;
}
@@ -298,6 +355,9 @@ void ieee80211_if_del(struct net_device
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
rtnl_lock();
- __ieee80211_if_del(local, sdata);
+ if (sdata->type == IEEE80211_IF_TYPE_MGMT)
+ ieee80211_if_del_mgmt(local->mdev);
+ else
+ __ieee80211_if_del(local, sdata);
rtnl_unlock();
}
--- dscape.orig/net/d80211/ieee80211_ioctl.c
+++ dscape/net/d80211/ieee80211_ioctl.c
@@ -2471,6 +2471,16 @@ static int ieee80211_ioctl_prism2_param(
case PRISM2_PARAM_SPECTRUM_MGMT:
local->conf.spect_mgmt = value;
break;
+ case PRISM2_PARAM_MGMT_IF:
+ if (value == 1) {
+ if (local->apdev == NULL)
+ ret = ieee80211_if_add_mgmt(local->mdev);
+ } else if (value == 0) {
+ if (local->apdev)
+ ieee80211_if_del_mgmt(local->mdev);
+ } else
+ ret = -EINVAL;
+ break;
default:
ret = -EOPNOTSUPP;
break;
@@ -2653,6 +2663,12 @@ static int ieee80211_ioctl_get_prism2_pa
else
*param = !!sdata->u.sta.wmm_enabled;
break;
+ case PRISM2_PARAM_MGMT_IF:
+ if (local->apdev)
+ *param = local->apdev->ifindex;
+ else
+ ret = -ENOENT;
+ break;
default:
ret = -EOPNOTSUPP;
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH wireless-dev] d80211: Add support for user space clientMLME
2006-05-04 12:26 ` [PATCH wireless-dev] d80211: Add support for user space client MLME Johannes Berg
@ 2006-05-10 17:17 ` Jouni Malinen
2006-05-11 11:41 ` Johannes Berg
0 siblings, 1 reply; 12+ messages in thread
From: Jouni Malinen @ 2006-05-10 17:17 UTC (permalink / raw)
To: Johannes Berg; +Cc: Jiri Benc, John W. Linville, netdev, jkmaline
On Thu, May 04, 2006 at 02:26:53PM +0200, Johannes Berg wrote:
> On Wed, 2006-05-03 at 09:44 -0700, Jouni Malinen wrote:
> > But there is.. I committed changes to the wpa_supplicant devel branch
> > for this yesterday. It seems to work fine with net/d80211 and bcm43xx
> > with this small patch to d80211 to allow the functionality to be moved
> > into user space.
>
> Cool, do you have a list of things that we need to support for it to
> work on a 'softmac' based driver (iow removing softmac in favour of
> this)?
This is still somewhat open, but at minimum, there needs to be a
mechanism for receiving and sending management frames from user space.
d80211 uses a "management netdev" for this currently (the same one that
was used before with hostapd for AP mode). In addition to that,
wpa_supplicant expect to be able to read list of support channels and TX
rates (get_hw_feature_data handler in driver wrapper) and to be able to
add and remove STA entries (e.g., for TX rate control and association
status validation in kernel code).
Currently, scanning is done simply by setting the channel with
SIOCSIWFREQ and listening for management frames. However, the goal is to
provide simple atomic operations that user space programs can request
the kernel code to do. This would cover not only scanning, but also some
other needs like IEEE 802.11k radio measurements. These operations could
be something like "stop transmit, move to channel 5, report received
management frames, record noise level, do this for 5 ms, return to
operational channel, enable transmit".
--
Jouni Malinen PGP id EFC895FA
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH wireless-dev] d80211: Add support for user space clientMLME
2006-05-10 17:17 ` [PATCH wireless-dev] d80211: Add support for user space clientMLME Jouni Malinen
@ 2006-05-11 11:41 ` Johannes Berg
0 siblings, 0 replies; 12+ messages in thread
From: Johannes Berg @ 2006-05-11 11:41 UTC (permalink / raw)
To: Jouni Malinen; +Cc: Jiri Benc, John W. Linville, netdev, jkmaline
[-- Attachment #1: Type: text/plain, Size: 1314 bytes --]
On Wed, 2006-05-10 at 10:17 -0700, Jouni Malinen wrote:
> This is still somewhat open, but at minimum, there needs to be a
> mechanism for receiving and sending management frames from user space.
> d80211 uses a "management netdev" for this currently (the same one that
> was used before with hostapd for AP mode). In addition to that,
> wpa_supplicant expect to be able to read list of support channels and TX
> rates (get_hw_feature_data handler in driver wrapper) and to be able to
> add and remove STA entries (e.g., for TX rate control and association
> status validation in kernel code).
Right.
> Currently, scanning is done simply by setting the channel with
> SIOCSIWFREQ and listening for management frames. However, the goal is to
> provide simple atomic operations that user space programs can request
> the kernel code to do. This would cover not only scanning, but also some
> other needs like IEEE 802.11k radio measurements. These operations could
> be something like "stop transmit, move to channel 5, report received
> management frames, record noise level, do this for 5 ms, return to
> operational channel, enable transmit".
Yeah, we talked about that. I suppose softmac will never support the
current interface, we'll just design a new one and use that.
johannes
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 793 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2006-05-11 11:42 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-05-02 21:18 [PATCH wireless-dev] d80211: Add support for user space client MLME Jouni Malinen
2006-05-03 16:28 ` Jiri Benc
2006-05-03 16:44 ` Jouni Malinen
2006-05-03 18:10 ` Jiri Benc
2006-05-03 18:35 ` Jouni Malinen
2006-05-04 9:00 ` Jiri Benc
2006-05-04 16:44 ` Jouni Malinen
2006-05-05 10:13 ` Johannes Berg
2006-05-05 13:17 ` [PATCH] d80211: switching management interface on/off Jiri Benc
2006-05-04 12:26 ` [PATCH wireless-dev] d80211: Add support for user space client MLME Johannes Berg
2006-05-10 17:17 ` [PATCH wireless-dev] d80211: Add support for user space clientMLME Jouni Malinen
2006-05-11 11:41 ` Johannes Berg
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).