Search Linux Wireless

Re: mac80211 does not support WPA when used with wext

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, 2007-03-31 at 12:00 +0200, Johannes Berg wrote:
> On Sat, 2007-03-31 at 11:36 +0200, dragoran wrote:
> > Hello
> > While testing the iwlwifi driver I noticed that the mac80211 does 
> > provide a wext interface but does not support wpa with it.
> 
> You must have done something wrong, it works well.

Nope!  This time it's really mac80211 :)

Take a look at ieee80211_sta_scan_result() in mac80211/ieee80211_sta.c.
Note that it returns custom events for the WPA & RSN IEs.  That's just
wrong.  We should be using already-defined events.

[ Hopefully in cfg80211 we'll have a very easy way to extend the defined
tag-list for attributes returned from scan results.  If you look at what
various drivers have custom-defined for the CUSTOM tag, we weren't very
aggressive about standardizing custom tags into IWEV* events. ]

I'm not sure where the heck these bits of mac80211 came from; both
hostap and ieee80211 do it right (also airo, libertas, and prism54,
though I'm to blame for those).  Plus, it's a net loss of code to do it
with IWEVGENIE, and no additional kzalloc that can fail!  Bonus+2!

hostap:
-------------
	if (bss && bss->wpa_ie_len > 0 && bss->wpa_ie_len <= MAX_WPA_IE_LEN) {
		memset(&iwe, 0, sizeof(iwe));
		iwe.cmd = IWEVGENIE;
		iwe.u.data.length = bss->wpa_ie_len;
		current_ev = iwe_stream_add_point(
			current_ev, end_buf, &iwe, bss->wpa_ie);
	}

	if (bss && bss->rsn_ie_len > 0 && bss->rsn_ie_len <= MAX_WPA_IE_LEN) {
		memset(&iwe, 0, sizeof(iwe));
		iwe.cmd = IWEVGENIE;
		iwe.u.data.length = bss->rsn_ie_len;
		current_ev = iwe_stream_add_point(
			current_ev, end_buf, &iwe, bss->rsn_ie);
	}

ieee80211:
-------------

	memset(&iwe, 0, sizeof(iwe));
	if (network->wpa_ie_len) {
		char buf[MAX_WPA_IE_LEN];
		memcpy(buf, network->wpa_ie, network->wpa_ie_len);
		iwe.cmd = IWEVGENIE;
		iwe.u.data.length = network->wpa_ie_len;
		start = iwe_stream_add_point(start, stop, &iwe, buf);
	}

	memset(&iwe, 0, sizeof(iwe));
	if (network->rsn_ie_len) {
		char buf[MAX_WPA_IE_LEN];
		memcpy(buf, network->rsn_ie, network->rsn_ie_len);
		iwe.cmd = IWEVGENIE;
		iwe.u.data.length = network->rsn_ie_len;
		start = iwe_stream_add_point(start, stop, &iwe, buf);
	}

<rant>

I don't quite get why mac80211/d80211 was so behind in wireless
extensions support.  Didn't Jouni and Devicescape basically _write_
WE-18/19 WPA support?  Did d80211 just not get the love that
wpa_supplicant and the other drivers got when they were updated to WE-18
and later?

</rant>

I can whip something up that _looks_ right but hasn't been compile
tested if somebody else can test it.

Dan


-
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux