diff options
| author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-06-23 00:32:16 +0200 |
|---|---|---|
| committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-06-23 00:32:16 +0200 |
| commit | 677746244dbf8309971fca39f69fbffa89a27cce (patch) | |
| tree | eb54c767a9cfc59bc1a1a7197920b8ac7add8ffe | |
| parent | 6ea8d974388a27d9d68687f69a0dd7f11f0e5b72 (diff) | |
| download | plan9front-677746244dbf8309971fca39f69fbffa89a27cce.tar.xz | |
wifi: have to check for both, bssid/essid in wifictl too
| -rw-r--r-- | sys/src/9/pc/wifi.c | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/sys/src/9/pc/wifi.c b/sys/src/9/pc/wifi.c index 127a5efb8..0bb8137d9 100644 --- a/sys/src/9/pc/wifi.c +++ b/sys/src/9/pc/wifi.c @@ -644,31 +644,38 @@ wifictl(Wifi *wifi, void *buf, long n) print("#l%d: debug: %d\n", wifi->ether->ctlrno, wifi->debug); break; case CMessid: - if(cb->f[1] == nil){ - wifi->essid[0] = 0; - wifi->bss = nil; - setstatus(wifi, Snone); - } else { + if(cb->f[1] != nil){ strncpy(wifi->essid, cb->f[1], Essidlen); for(wn = wifi->node; wn != &wifi->node[nelem(wifi->node)]; wn++) if(strcmp(wifi->essid, wn->ssid) == 0){ + /* both must match if specifid */ + if(memcmp(wifi->bssid, wifi->ether->bcast, Eaddrlen) != 0 + && memcmp(wifi->bssid, wn->bssid, Eaddrlen) != 0) + continue; + wifi->bss = wn; setstatus(wifi, Sconn); sendauth(wifi, wn); - break; + goto done; } - } + } else + wifi->essid[0] = 0; + wifi->bss = nil; + setstatus(wifi, Snone); break; case CMbssid: memmove(wifi->bssid, addr, Eaddrlen); - if(wn == nil){ - wifi->bss = nil; - setstatus(wifi, Snone); - } else { - wifi->bss = wn; - setstatus(wifi, Sconn); - sendauth(wifi, wn); + if(wn != nil){ + /* both must match if specifid */ + if(wifi->essid[0] == 0 || strcmp(wifi->essid, wn->ssid) == 0){ + wifi->bss = wn; + setstatus(wifi, Sconn); + sendauth(wifi, wn); + goto done; + } } + wifi->bss = nil; + setstatus(wifi, Snone); break; case CMauth: setstatus(wifi, Sauth); @@ -692,6 +699,7 @@ wifictl(Wifi *wifi, void *buf, long n) setstatus(wifi, Sassoc); break; } +done: poperror(); free(cb); return n; |
