From d49b9e1b845f0f815a87b2404bc351c1fdd8cd1b Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Mon, 5 Oct 2020 22:42:13 +0200 Subject: [PATCH] etheriwl: remove stations *after* disabling binding quotas, drain all queues in rxoff7000() --- sys/src/9/pc/etheriwl.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/sys/src/9/pc/etheriwl.c b/sys/src/9/pc/etheriwl.c index 96f356392..6aba5023e 100644 --- a/sys/src/9/pc/etheriwl.c +++ b/sys/src/9/pc/etheriwl.c @@ -3540,11 +3540,24 @@ static char* rxoff7000(Ether *edev, Ctlr *ctlr) { char *err; + int i; + + for(i = 0; i < nelem(ctlr->tx); i++) + flushq(ctlr, i); + settimeevent(ctlr, CmdRemove, 0); if((err = setbindingquotas(ctlr, -1)) != nil){ print("can't disable quotas: %s\n", err); return err; } + if((err = delstation(ctlr, &ctlr->bss)) != nil){ + print("can't remove bss station: %s\n", err); + return err; + } + if((err = delstation(ctlr, &ctlr->bcast)) != nil){ + print("can't remove bcast station: %s\n", err); + return err; + } if((err = setbindingcontext(ctlr, CmdRemove)) != nil){ print("removing bindingcontext: %s\n", err); return err; @@ -3638,14 +3651,9 @@ rxon(Ether *edev, Wnode *bss) Ctlr *ctlr = edev->ctlr; char *err; - if(ctlr->family >= 7000){ - flushq(ctlr, 0); - delstation(ctlr, &ctlr->bss); - delstation(ctlr, &ctlr->bcast); - settimeevent(ctlr, CmdRemove, 0); + if(ctlr->family >= 7000) if((err = rxoff7000(edev, ctlr)) != nil) goto Out; - } ctlr->rxfilter = FilterNoDecrypt | FilterMulticast | FilterBeacon; if(ctlr->family >= 7000)