I can confirm that the problem with the rt2870sta driver and WPA still
exists in Ubuntu 10.04.2 LTS, and that it goes away when linux-
backports-modules-wireless-lucid-generic is installed.

I am using the rt2870sta driver for my D-Link DWL-G122 rev. E1 (chipset
RT3070, USB 07d1:3c0f), with NetworkManager and wpa_supplicant. The
rt2800usb driver is blacklisted (it doesn't work for me), and the USB ID
of my WLAN adapter is configured in the rt2870sta driver by writing it
to /sys/bus/usb/drivers/rt2870/new_id; see "Variante B" in
http://forum.ubuntuusers.de/topic/linksys-wusb100-wireless-
stick/#post-2264339 (German). [Note: When the backported drivers are
installed, these tricks are no longer necessary, i.e., rt2870sta is
loaded and works out of the box. Very nice.]

The driver correctly detects my Access Point (and other APs), but fails
to connect. Running 'iwevent', I noticed that the Association Request
IEs are corrupt:

12:01:36.189784   wlan0    Association Request
IEs:000E45617379426F782D373934453232010882848B961224486C0100000FAC020100000FAC040100000FAC020000

Breaking this up (two-byte header per information element - one byte for
the identifier, one for the length), it reads:

000E 45617379426F782D373934453232
0108 82848B961224486C
____ 0100000FAC020100000FAC040100000FAC020000

At the position ____, there are two bytes (h'3014) missing. I assume
that the Association Request is ignored by the AP for this reason. I
have checked the source code of the original rt2870sta driver, and I
think the bug is in linux-
source-2.6.32/drivers/staging/rt2860/sta/assoc.c, MlmeAssocReqAction():

    if (pAd->StaCfg.WpaSupplicantUP == 1)
    {
        MakeOutgoingFrame(pOutBuffer + FrameLen,    &tmp,
                            // <<< missing RSNIe and RSNIE_Len here! >>>
                            pAd->StaCfg.RSNIE_Len,  pAd->StaCfg.RSN_IE,
                            END_OF_ARGS);
    }
    else
    {
        MakeOutgoingFrame(pOutBuffer + FrameLen,    &tmp,
                            1,                      &RSNIe,
                            1,                      &pAd->StaCfg.RSNIE_Len,
                            pAd->StaCfg.RSNIE_Len,  pAd->StaCfg.RSN_IE,
                            END_OF_ARGS);
    }

In my case, the wpa_supplicant is up and does not set the WPA2 IE; the
driver uses its own StaCfg.RSN_IE, but without the two-byte header. In
later versions of the rt2870 driver, this bug was fixed by checking if
wpa_supplicant has actually provided the IE; e.g.:

    if ((pAd->StaCfg.WpaSupplicantUP ==
         WPA_SUPPLICANT_ENABLE)
        && (pAd->StaCfg.bRSN_IE_FromWpaSupplicant ==
            TRUE)) {
            MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,
                              pAd->StaCfg.RSNIE_Len,
                              pAd->StaCfg.RSN_IE,
                              END_OF_ARGS);
    } else {
            MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,
                              1, &RSNIe,
                              1, &pAd->StaCfg.RSNIE_Len,
                              pAd->StaCfg.RSNIE_Len,
                              pAd->StaCfg.RSN_IE,
                              END_OF_ARGS);
    }

Anyway, when the backported driver is installed, the IEs shown by
'iwevent' are correct, and the driver connects to my AP immediately.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/543836

Title:
  rt2870 wireless card cannot connect to  WPA network

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to