diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-06-23 07:14:52 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-06-23 07:14:52 +0200 |
commit | f39374b47ecc9521e16a691ff900c1a1f11609ff (patch) | |
tree | 0e2984a65a98d45d9eb45e4869c8a657e544a90d /sys/src/9/pc/wifi.c | |
parent | fb22c348334496404905ef2b6bc5693fcc14af87 (diff) |
wifi: fix missed eapol frames
allow the driver to associate the node with a new aid right after
we receive the association response, not just when we transmit
a packet which usualy does not happen as eapol is initiated by
the access point so there are no transmit calls. we just call
transmit from the wifiproc with a nil block to introduce the node.
Diffstat (limited to 'sys/src/9/pc/wifi.c')
-rw-r--r-- | sys/src/9/pc/wifi.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/src/9/pc/wifi.c b/sys/src/9/pc/wifi.c index 85b1cd886..a34ab39e9 100644 --- a/sys/src/9/pc/wifi.c +++ b/sys/src/9/pc/wifi.c @@ -417,6 +417,8 @@ wifiproc(void *arg) case 0x30: /* reassoc response */ b->rp += wifihdrlen(w); recvassoc(wifi, wn, b->rp, BLEN(b)); + /* notify driver about node aid association */ + (*wifi->transmit)(wifi, wn, nil); break; case 0xb0: /* auth */ setstatus(wifi, Sauth); @@ -673,13 +675,13 @@ wifictl(Wifi *wifi, void *buf, long n) memmove(wifi->bssid, addr, Eaddrlen); goto Findbss; case CMauth: - setstatus(wifi, Sauth); memset(wn->rxkey, 0, sizeof(wn->rxkey)); memset(wn->txkey, 0, sizeof(wn->txkey)); if(cb->f[1] == nil) wn->rsnelen = 0; else wn->rsnelen = hextob(cb->f[1], nil, wn->rsne, sizeof(wn->rsne)); + setstatus(wifi, Sauth); sendassoc(wifi, wn); break; case CMrxkey0: case CMrxkey1: case CMrxkey2: case CMrxkey3: case CMrxkey4: |