diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-07-04 00:04:47 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-07-04 00:04:47 +0200 |
commit | 3fbf35112fbfb6737688d64647c560357917085c (patch) | |
tree | dd841cf2680a8a85d30938969e799991123643f1 /sys/src/9/pc/etheriwl.c | |
parent | 82ccf5b26a8cc6b15216823f7694cb8570f2ccc4 (diff) |
wifi: move scanning/probe into wifi layer, avoid associating with wpa network until rsne is setup
Diffstat (limited to 'sys/src/9/pc/etheriwl.c')
-rw-r--r-- | sys/src/9/pc/etheriwl.c | 64 |
1 files changed, 7 insertions, 57 deletions
diff --git a/sys/src/9/pc/etheriwl.c b/sys/src/9/pc/etheriwl.c index e61d725d7..9bf90ef07 100644 --- a/sys/src/9/pc/etheriwl.c +++ b/sys/src/9/pc/etheriwl.c @@ -1745,6 +1745,13 @@ rxon(Ether *edev, Wnode *bss) } flags = RFlagTSF | RFlagCTSToSelf | RFlag24Ghz | RFlagAuto; + if(ctlr->aid != 0) + setled(ctlr, 2, 0, 1); /* on when associated */ + else if(memcmp(ctlr->bssid, edev->bcast, Eaddrlen) != 0) + setled(ctlr, 2, 10, 10); /* slow blink when connecting */ + else + setled(ctlr, 2, 5, 5); /* fast blink when scanning */ + if(ctlr->wifi->debug) print("#l%d: rxon: bssid %E, aid %x, channel %d, filter %x, flags %x\n", edev->ctlrno, ctlr->bssid, ctlr->aid, ctlr->channel, filter, flags); @@ -1846,7 +1853,6 @@ transmit(Wifi *wifi, Wnode *wn, Block *b) return; } - if(wn != nil) if((wn->channel != ctlr->channel) || (!ctlr->prom && (wn->aid != ctlr->aid || memcmp(wn->bssid, ctlr->bssid, Eaddrlen) != 0))) rxon(edev, wn); @@ -1989,61 +1995,8 @@ iwlpromiscuous(void *arg, int on) } static void -iwlproc(void *arg) -{ - Ether *edev; - Ctlr *ctlr; - Wifi *wifi; - Wnode *bss; - - edev = arg; - ctlr = edev->ctlr; - wifi = ctlr->wifi; - - for(;;){ - /* hop channels for catching beacons */ - setled(ctlr, 2, 5, 5); - while(wifi->bss == nil){ - qlock(ctlr); - if(wifi->bss != nil){ - qunlock(ctlr); - break; - } - ctlr->channel = 1 + ctlr->channel % 11; - ctlr->aid = 0; - rxon(edev, nil); - qunlock(ctlr); - wifiprobe(ctlr->wifi, ctlr->channel); - tsleep(&up->sleep, return0, 0, 1000); - } - - /* wait for association */ - setled(ctlr, 2, 10, 10); - while(wifichecklink(wifi) && (bss = wifi->bss) != nil){ - if(bss->aid != 0) - break; - tsleep(&up->sleep, return0, 0, 1000); - } - - if(wifi->bss == nil) - continue; - - /* wait for disassociation */ - edev->link = 1; - setled(ctlr, 2, 0, 1); - while(wifichecklink(wifi) && (bss = wifi->bss) != nil){ - if(bss->aid == 0) - break; - tsleep(&up->sleep, return0, 0, 1000); - } - edev->link = 0; - } -} - -static void iwlattach(Ether *edev) { - char name[32]; FWImage *fw; Ctlr *ctlr; char *err; @@ -2088,9 +2041,6 @@ iwlattach(Ether *edev) setoptions(edev); - snprint(name, sizeof(name), "#l%diwl", edev->ctlrno); - kproc(name, iwlproc, edev); - ctlr->attached = 1; } qunlock(ctlr); |