On Thu, 2008-05-22 at 19:56 +0200, Johannes Berg wrote: > > memset(&iwe, 0, sizeof(iwe)); > > iwe.cmd = SIOCGIWFREQ; > > - iwe.u.freq.m = bss->freq; > > - iwe.u.freq.e = 6; > > + iwe.u.freq.m = ieee80211_frequency_to_channel(bss->freq); > > + iwe.u.freq.e = 0; > > current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, > > IW_EV_FREQ_LEN); > > > > memset(&iwe, 0, sizeof(iwe)); > > iwe.cmd = SIOCGIWFREQ; > > - iwe.u.freq.m = ieee80211_frequency_to_channel(bss->freq); > > - iwe.u.freq.e = 0; > > + iwe.u.freq.m = bss->freq; > > + iwe.u.freq.e = 6; > > current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, > > IW_EV_FREQ_LEN); > > That doesn't make any sense, can you explain? Explanation: wpa_supplicant cannot handle A-band channel #s. Thus, with the previous code, the FREQ+frequency was sent first, and the FREQ+channel was sent second. Sending the FREQ+channel second made the supplicant overwrite the value it already parsed from the FREQ+frequency for that BSSID. But since the supplicant can't handle A-band channel #s, you end up with 0. Reversing the order of these two makes it work, but it's a total hack. That may be what's needed right now though until everyone fixes their supplicant. There's overlap on A-band channels 7 - 12 (5035MHz -> 5060MHz) with B/G band channel #s. Obviously WEXT falls over here because the band isn't passed. But what's the best fix to the supplicant? It could just parse A-band channels and where the numbers overlap, assume B/G band. Or, it could be patched to prefer FREQ+frequency over FREQ+channel if it received both. That's probably the best solution. 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