wifi: signal ap deassociation to aux/wpa with a zero length read.
aux/wpa needs to reset its reply counter on deassociation to properly restart key negotiation. we signal this with a zero length read on the connections filtering for eapol protocol.
This commit is contained in:
parent
5c0106b7cf
commit
4da4785412
|
@ -346,6 +346,25 @@ recvbeacon(Wifi *, Wnode *wn, uchar *d, int len)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* notify aux/wpa with a zero length write that we got deassociated from the ap */
|
||||||
|
static void
|
||||||
|
wifideassoc(Wifi *wifi)
|
||||||
|
{
|
||||||
|
Ether *ether;
|
||||||
|
Netfile *f;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
ether = wifi->ether;
|
||||||
|
for(i=0; i<ether->nfile; i++){
|
||||||
|
f = ether->f[i];
|
||||||
|
if(f == nil || f->in == nil || f->inuse == 0 || f->type != 0x888e)
|
||||||
|
continue;
|
||||||
|
if(wifi->debug)
|
||||||
|
print("#%d: wifideassoc: %#p\n", ether->ctlrno, f);
|
||||||
|
qwrite(f->in, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* check if a node qualifies as our bss matching bssid and essid */
|
/* check if a node qualifies as our bss matching bssid and essid */
|
||||||
static int
|
static int
|
||||||
goodbss(Wifi *wifi, Wnode *wn)
|
goodbss(Wifi *wifi, Wnode *wn)
|
||||||
|
@ -429,6 +448,7 @@ wifiproc(void *arg)
|
||||||
memset(wn->rxkey, 0, sizeof(wn->rxkey));
|
memset(wn->rxkey, 0, sizeof(wn->rxkey));
|
||||||
memset(wn->txkey, 0, sizeof(wn->txkey));
|
memset(wn->txkey, 0, sizeof(wn->txkey));
|
||||||
wn->aid = 0;
|
wn->aid = 0;
|
||||||
|
wifideassoc(wifi);
|
||||||
sendauth(wifi, wn);
|
sendauth(wifi, wn);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue