]> git.lizzy.rs Git - plan9front.git/commitdiff
etheriwl: remove stations *after* disabling binding quotas, drain all queues in rxoff...
authorcinap_lenrek <cinap_lenrek@felloff.net>
Mon, 5 Oct 2020 20:42:13 +0000 (22:42 +0200)
committercinap_lenrek <cinap_lenrek@felloff.net>
Mon, 5 Oct 2020 20:42:13 +0000 (22:42 +0200)
sys/src/9/pc/etheriwl.c

index 96f35639260cecbff537b47e9c4319530e5c4d75..6aba5023e4c9c6e56b145c9809fa84bcee0ef60e 100644 (file)
@@ -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)