ctlr->channel = bss->channel;
bss = nil;
}
+ flags = RFlagTSF | RFlagCTSToSelf | RFlag24Ghz | RFlagAuto;
if(bss != nil){
+ if(bss->cap & (1<<5))
+ flags |= RFlagShPreamble;
+ if(bss->cap & (1<<10))
+ flags |= RFlagShSlot;
ctlr->channel = bss->channel;
memmove(ctlr->bssid, bss->bssid, Eaddrlen);
ctlr->aid = bss->aid;
ctlr->bcastnodeid = -1;
ctlr->bssnodeid = -1;
}
- flags = RFlagTSF | RFlagCTSToSelf | RFlag24Ghz | RFlagAuto;
if(ctlr->aid != 0)
setled(ctlr, 2, 0, 1); /* on when associated */
{
u32int tmp;
Ctlr *ctlr;
+ int cap;
ctlr = edev->ctlr;
if(bss != nil){
+ cap = bss->cap;
ctlr->channel = bss->channel;
memmove(ctlr->bssid, bss->bssid, Eaddrlen);
ctlr->aid = bss->aid;
}else
ctlr->bcastnodeid = -1;
}else{
+ cap = 0;
memmove(ctlr->bssid, edev->bcast, Eaddrlen);
ctlr->aid = 0;
ctlr->bcastnodeid = -1;
/* update slot */
tmp = csr32r(ctlr, BkoffSlotCfg);
tmp &= ~0xff;
- tmp |= /* (ic->ic_flags & IEEE80211_F_SHSLOT) ? 9 : */ 20;
+ tmp |= (cap & (1<<10)) ? 9 : 20;
csr32w(ctlr, BkoffSlotCfg, tmp);
/* set TX preamble */
tmp = csr32r(ctlr, AutoRspCfg);
tmp &= ~CckShortEn;
-/* if(sc->sc_ic.ic_flags & IEEE80211_F_SHPREAMBLE)
- tmp |= CckShortEn; */
+ if(cap & (1<<5)) tmp |= CckShortEn;
csr32w(ctlr, AutoRspCfg, tmp);
/* set basic rates */
ctlr->channel = bss->channel;
bss = nil;
}
+ flags = RFlagTSF | RFlag24Ghz | RFlagAuto;
if(bss != nil){
+ if(bss->cap & (1<<5))
+ flags |= RFlagShPreamble;
+ if(bss->cap & (1<<10))
+ flags |= RFlagShSlot;
ctlr->channel = bss->channel;
memmove(ctlr->bssid, bss->bssid, Eaddrlen);
ctlr->aid = bss->aid;
ctlr->bcastnodeid = -1;
ctlr->bssnodeid = -1;
}
- flags = RFlagTSF | RFlag24Ghz | RFlagAuto;
if(ctlr->aid != 0)
setled(ctlr, 2, 0, 1); /* on when associated */
Wifipkt *w;
Block *b;
uchar *p;
- int n;
+ int cap, n;
b = allocb(WIFIHDRSIZE + 512);
w = (Wifipkt*)b->wp;
memmove(w->a3, bss->bssid, Eaddrlen);
b->wp += WIFIHDRSIZE;
p = b->wp;
- *p++ = 1; /* capinfo */
- *p++ = 0;
- *p++ = 16; /* interval */
+
+ /* capinfo */
+ cap = 1; // ESS
+ cap |= (1<<5); // Short Preamble
+ cap |= (1<<10) & bss->cap; // Short Slot Time
+ *p++ = cap;
+ *p++ = cap>>8;
+
+ /* interval */
+ *p++ = 16;
*p++ = 16>>8;
n = strlen(bss->ssid);