ref: 1b09060f468f530af2f4ef75441a40084e912e54
dir: /sys/src/9/port/wifi.h/
typedef struct Wkey Wkey; typedef struct Wnode Wnode; typedef struct Wifi Wifi; typedef struct Wifipkt Wifipkt; enum { Essidlen = 32, }; /* cipher */ enum { TKIP = 1, CCMP = 2, }; struct Wkey { int cipher; int len; uvlong tsc; uchar key[]; }; struct Wnode { uchar bssid[Eaddrlen]; char ssid[Essidlen+2]; char *status; int rsnelen; uchar rsne[258]; Wkey *txkey[1]; Wkey *rxkey[5]; int aid; /* association id */ ulong lastsend; ulong lastseen; uchar *minrate; /* pointers into wifi->rates */ uchar *maxrate; uchar *actrate; ulong validrates; /* bitmap on wifi->rates */ ulong basicrates; ulong txcount; /* statistics for rate adaption */ ulong txerror; /* stuff from beacon */ uvlong rs; uvlong ts; uchar dtimcount; uchar dtimperiod; int ival; int cap; int channel; int brsnelen; uchar brsne[258]; }; struct Wifi { Ether *ether; int debug; RWlock crypt; Queue *iq; ulong watchdog; ulong lastauth; Ref txseq; void (*transmit)(Wifi*, Wnode*, Block*); /* for searching */ uchar bssid[Eaddrlen]; char essid[Essidlen+2]; /* supported data rates by hardware */ uchar *rates; /* effective base station */ Wnode *bss; Wnode node[32]; }; struct Wifipkt { uchar fc[2]; uchar dur[2]; uchar a1[Eaddrlen]; uchar a2[Eaddrlen]; uchar a3[Eaddrlen]; uchar seq[2]; uchar a4[Eaddrlen]; }; enum { Btimestamp = 1<<15, }; Wifi *wifiattach(Ether *ether, void (*transmit)(Wifi*, Wnode*, Block*)); void wifiiq(Wifi*, Block*); int wifihdrlen(Wifipkt*); void wifitxfail(Wifi*, Block*); long wifistat(Wifi*, void*, long, ulong); long wifictl(Wifi*, void*, long); void wificfg(Wifi*, char*);