2013-03-09 16:28:41 +00:00
|
|
|
typedef struct Wkey Wkey;
|
2013-02-09 02:19:50 +00:00
|
|
|
typedef struct Wnode Wnode;
|
|
|
|
typedef struct Wifi Wifi;
|
|
|
|
typedef struct Wifipkt Wifipkt;
|
|
|
|
|
2013-03-09 16:28:41 +00:00
|
|
|
enum {
|
|
|
|
Essidlen = 32,
|
2013-02-09 02:19:50 +00:00
|
|
|
};
|
|
|
|
|
2013-03-09 16:28:41 +00:00
|
|
|
/* cipher */
|
2013-02-09 02:19:50 +00:00
|
|
|
enum {
|
2013-03-09 16:28:41 +00:00
|
|
|
TKIP = 1,
|
2013-03-23 03:30:20 +00:00
|
|
|
CCMP = 2,
|
2013-03-09 16:28:41 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct Wkey
|
|
|
|
{
|
|
|
|
int cipher;
|
|
|
|
int len;
|
|
|
|
uchar key[32];
|
|
|
|
uvlong tsc;
|
2013-02-09 02:19:50 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct Wnode
|
|
|
|
{
|
|
|
|
uchar bssid[Eaddrlen];
|
2013-03-09 16:28:41 +00:00
|
|
|
char ssid[Essidlen+2];
|
|
|
|
|
2013-07-01 21:32:21 +00:00
|
|
|
char *status;
|
|
|
|
|
2013-03-09 16:28:41 +00:00
|
|
|
int rsnelen;
|
2013-06-15 17:02:17 +00:00
|
|
|
uchar rsne[258];
|
2013-03-09 16:28:41 +00:00
|
|
|
Wkey txkey[1];
|
|
|
|
Wkey rxkey[5];
|
|
|
|
|
2013-07-01 21:32:21 +00:00
|
|
|
int aid; /* association id */
|
|
|
|
ulong lastsend;
|
|
|
|
ulong lastseen;
|
|
|
|
|
2014-04-21 01:43:51 +00:00
|
|
|
uchar *minrate; /* pointers into wifi->rates */
|
|
|
|
uchar *maxrate;
|
|
|
|
|
2013-06-15 17:02:17 +00:00
|
|
|
/* stuff from beacon */
|
2013-02-09 02:19:50 +00:00
|
|
|
int ival;
|
|
|
|
int cap;
|
2013-02-10 22:02:21 +00:00
|
|
|
int channel;
|
2013-06-15 17:02:17 +00:00
|
|
|
int brsnelen;
|
|
|
|
uchar brsne[258];
|
2013-02-09 02:19:50 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct Wifi
|
|
|
|
{
|
|
|
|
Ether *ether;
|
|
|
|
|
2013-06-23 20:09:16 +00:00
|
|
|
int debug;
|
|
|
|
|
2013-02-09 02:19:50 +00:00
|
|
|
Queue *iq;
|
2013-06-24 15:24:50 +00:00
|
|
|
ulong watchdog;
|
2013-02-10 23:09:41 +00:00
|
|
|
Ref txseq;
|
2013-02-09 02:19:50 +00:00
|
|
|
void (*transmit)(Wifi*, Wnode*, Block*);
|
|
|
|
|
2013-06-23 21:54:15 +00:00
|
|
|
/* for searching */
|
|
|
|
uchar bssid[Eaddrlen];
|
2013-03-09 16:28:41 +00:00
|
|
|
char essid[Essidlen+2];
|
2013-06-23 21:54:15 +00:00
|
|
|
|
2014-04-21 01:43:51 +00:00
|
|
|
/* supported data rates by hardware */
|
|
|
|
uchar *rates;
|
|
|
|
|
2013-06-23 21:54:15 +00:00
|
|
|
/* effective base station */
|
2013-02-09 02:19:50 +00:00
|
|
|
Wnode *bss;
|
|
|
|
|
2013-02-10 23:09:41 +00:00
|
|
|
Wnode node[32];
|
2013-02-09 02:19:50 +00:00
|
|
|
};
|
|
|
|
|
2013-03-09 16:28:41 +00:00
|
|
|
struct Wifipkt
|
|
|
|
{
|
|
|
|
uchar fc[2];
|
|
|
|
uchar dur[2];
|
|
|
|
uchar a1[Eaddrlen];
|
|
|
|
uchar a2[Eaddrlen];
|
|
|
|
uchar a3[Eaddrlen];
|
|
|
|
uchar seq[2];
|
2014-03-06 20:36:14 +00:00
|
|
|
uchar a4[Eaddrlen];
|
2013-03-09 16:28:41 +00:00
|
|
|
};
|
|
|
|
|
2013-02-09 02:19:50 +00:00
|
|
|
Wifi *wifiattach(Ether *ether, void (*transmit)(Wifi*, Wnode*, Block*));
|
|
|
|
void wifiiq(Wifi*, Block*);
|
2013-07-09 12:12:04 +00:00
|
|
|
int wifihdrlen(Wifipkt*);
|
2013-02-09 02:19:50 +00:00
|
|
|
|
|
|
|
long wifistat(Wifi*, void*, long, ulong);
|
|
|
|
long wifictl(Wifi*, void*, long);
|