xref: /plan9-contrib/sys/src/9/pc/wifi.h (revision 43f728cba48694b0a42c538a38fdf975a0ae5433)
1*43f728cbSDavid du Colombier typedef struct Wkey Wkey;
2*43f728cbSDavid du Colombier typedef struct Wnode Wnode;
3*43f728cbSDavid du Colombier typedef struct Wifi Wifi;
4*43f728cbSDavid du Colombier typedef struct Wifipkt Wifipkt;
5*43f728cbSDavid du Colombier 
6*43f728cbSDavid du Colombier enum {
7*43f728cbSDavid du Colombier 	Essidlen = 32,
8*43f728cbSDavid du Colombier };
9*43f728cbSDavid du Colombier 
10*43f728cbSDavid du Colombier /* cipher */
11*43f728cbSDavid du Colombier enum {
12*43f728cbSDavid du Colombier 	TKIP	= 1,
13*43f728cbSDavid du Colombier 	CCMP	= 2,
14*43f728cbSDavid du Colombier };
15*43f728cbSDavid du Colombier 
16*43f728cbSDavid du Colombier struct Wkey
17*43f728cbSDavid du Colombier {
18*43f728cbSDavid du Colombier 	int		cipher;
19*43f728cbSDavid du Colombier 	int		len;
20*43f728cbSDavid du Colombier 	uvlong		tsc;
21*43f728cbSDavid du Colombier 	uchar		key[];
22*43f728cbSDavid du Colombier };
23*43f728cbSDavid du Colombier 
24*43f728cbSDavid du Colombier struct Wnode
25*43f728cbSDavid du Colombier {
26*43f728cbSDavid du Colombier 	uchar	bssid[Eaddrlen];
27*43f728cbSDavid du Colombier 	char	ssid[Essidlen+2];
28*43f728cbSDavid du Colombier 
29*43f728cbSDavid du Colombier 	char	*status;
30*43f728cbSDavid du Colombier 
31*43f728cbSDavid du Colombier 	int	rsnelen;
32*43f728cbSDavid du Colombier 	uchar	rsne[258];
33*43f728cbSDavid du Colombier 	Wkey	*txkey[1];
34*43f728cbSDavid du Colombier 	Wkey	*rxkey[5];
35*43f728cbSDavid du Colombier 
36*43f728cbSDavid du Colombier 	int	aid;		/* association id */
37*43f728cbSDavid du Colombier 	ulong	lastsend;
38*43f728cbSDavid du Colombier 	ulong	lastseen;
39*43f728cbSDavid du Colombier 
40*43f728cbSDavid du Colombier 	uchar	*minrate;	/* pointers into wifi->rates */
41*43f728cbSDavid du Colombier 	uchar	*maxrate;
42*43f728cbSDavid du Colombier 	uchar	*actrate;
43*43f728cbSDavid du Colombier 
44*43f728cbSDavid du Colombier 	ulong	txcount;	/* statistics for rate adaption */
45*43f728cbSDavid du Colombier 	ulong	txerror;
46*43f728cbSDavid du Colombier 
47*43f728cbSDavid du Colombier 	/* stuff from beacon */
48*43f728cbSDavid du Colombier 	int	ival;
49*43f728cbSDavid du Colombier 	int	cap;
50*43f728cbSDavid du Colombier 	int	channel;
51*43f728cbSDavid du Colombier 	int	brsnelen;
52*43f728cbSDavid du Colombier 	uchar	brsne[258];
53*43f728cbSDavid du Colombier };
54*43f728cbSDavid du Colombier 
55*43f728cbSDavid du Colombier struct Wifi
56*43f728cbSDavid du Colombier {
57*43f728cbSDavid du Colombier 	Ether	*ether;
58*43f728cbSDavid du Colombier 
59*43f728cbSDavid du Colombier 	int	debug;
60*43f728cbSDavid du Colombier 
61*43f728cbSDavid du Colombier 	RWlock	crypt;
62*43f728cbSDavid du Colombier 	Queue	*iq;
63*43f728cbSDavid du Colombier 	ulong	watchdog;
64*43f728cbSDavid du Colombier 	ulong	lastauth;
65*43f728cbSDavid du Colombier 	Ref	txseq;
66*43f728cbSDavid du Colombier 	void	(*transmit)(Wifi*, Wnode*, Block*);
67*43f728cbSDavid du Colombier 
68*43f728cbSDavid du Colombier 	/* for searching */
69*43f728cbSDavid du Colombier 	uchar	bssid[Eaddrlen];
70*43f728cbSDavid du Colombier 	char	essid[Essidlen+2];
71*43f728cbSDavid du Colombier 
72*43f728cbSDavid du Colombier 	/* supported data rates by hardware */
73*43f728cbSDavid du Colombier 	uchar	*rates;
74*43f728cbSDavid du Colombier 
75*43f728cbSDavid du Colombier 	/* effective base station */
76*43f728cbSDavid du Colombier 	Wnode	*bss;
77*43f728cbSDavid du Colombier 
78*43f728cbSDavid du Colombier 	Wnode	node[32];
79*43f728cbSDavid du Colombier };
80*43f728cbSDavid du Colombier 
81*43f728cbSDavid du Colombier struct Wifipkt
82*43f728cbSDavid du Colombier {
83*43f728cbSDavid du Colombier 	uchar	fc[2];
84*43f728cbSDavid du Colombier 	uchar	dur[2];
85*43f728cbSDavid du Colombier 	uchar	a1[Eaddrlen];
86*43f728cbSDavid du Colombier 	uchar	a2[Eaddrlen];
87*43f728cbSDavid du Colombier 	uchar	a3[Eaddrlen];
88*43f728cbSDavid du Colombier 	uchar	seq[2];
89*43f728cbSDavid du Colombier 	uchar	a4[Eaddrlen];
90*43f728cbSDavid du Colombier };
91*43f728cbSDavid du Colombier 
92*43f728cbSDavid du Colombier Wifi *wifiattach(Ether *ether, void (*transmit)(Wifi*, Wnode*, Block*));
93*43f728cbSDavid du Colombier void wifiiq(Wifi*, Block*);
94*43f728cbSDavid du Colombier int wifihdrlen(Wifipkt*);
95*43f728cbSDavid du Colombier void wifitxfail(Wifi*, Block*);
96*43f728cbSDavid du Colombier 
97*43f728cbSDavid du Colombier long wifistat(Wifi*, void*, long, ulong);
98*43f728cbSDavid du Colombier long wifictl(Wifi*, void*, long);
99*43f728cbSDavid du Colombier void wificfg(Wifi*, char*);
100