+typedef struct Wkey Wkey;
typedef struct Wnode Wnode;
typedef struct Wifi Wifi;
-
typedef struct Wifipkt Wifipkt;
-struct Wifipkt
-{
- uchar fc[2];
- uchar dur[2];
- uchar a1[Eaddrlen];
- uchar a2[Eaddrlen];
- uchar a3[Eaddrlen];
- uchar seq[2];
+enum {
+ Essidlen = 32,
};
+/* cipher */
enum {
- WIFIHDRSIZE = 2+2+3*6+2,
+ TKIP = 1,
+ CCMP = 2,
+};
+
+struct Wkey
+{
+ int cipher;
+ int len;
+ uchar key[32];
+ uvlong tsc;
};
struct Wnode
{
uchar bssid[Eaddrlen];
- char ssid[32+2];
+ char ssid[Essidlen+2];
+
+ int rsnelen;
+ uchar rsne[258];
+ Wkey txkey[1];
+ Wkey rxkey[5];
+
+ /* stuff from beacon */
int ival;
int cap;
int aid;
int channel;
long lastseen;
+ int brsnelen;
+ uchar brsne[258];
};
struct Wifi
{
Ether *ether;
+ int debug;
+
Queue *iq;
char *status;
+ Ref txseq;
void (*transmit)(Wifi*, Wnode*, Block*);
- Wnode node[16];
+ /* for searching */
+ uchar bssid[Eaddrlen];
+ char essid[Essidlen+2];
+
+ /* effective base station */
Wnode *bss;
- uint txseq;
- char essid[32+2];
+ Wnode node[32];
+};
+
+struct Wifipkt
+{
+ uchar fc[2];
+ uchar dur[2];
+ uchar a1[Eaddrlen];
+ uchar a2[Eaddrlen];
+ uchar a3[Eaddrlen];
+ uchar seq[2];
};
Wifi *wifiattach(Ether *ether, void (*transmit)(Wifi*, Wnode*, Block*));
long wifistat(Wifi*, void*, long, ulong);
long wifictl(Wifi*, void*, long);
-