xref: /openbsd/sys/dev/ic/if_wi_hostap.h (revision cfe90bb7)
1 /*	$OpenBSD: if_wi_hostap.h,v 1.10 2014/08/24 18:01:27 zhuk Exp $	*/
2 
3 /*
4  * Copyright (c) 2002
5  *	Thomas Skibo <skibo@pacbell.net>.  All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. All advertising materials mentioning features or use of this software
16  *    must display the following acknowledgement:
17  *	This product includes software developed by Thomas Skibo.
18  * 4. Neither the name of the author nor the names of any co-contributors
19  *    may be used to endorse or promote products derived from this software
20  *    without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY Thomas Skibo AND CONTRIBUTORS ``AS IS'' AND
23  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25  * ARE DISCLAIMED.  IN NO EVENT SHALL Thomas Skibo OR HIS DRINKING PALS
26  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
32  * THE POSSIBILITY OF SUCH DAMAGE.
33  *
34  * $FreeBSD: $
35  */
36 
37 #ifndef __WI_HOSTAP_H__
38 #define __WI_HOSTAP_H__
39 
40 #define WIHAP_MAX_STATIONS	1800
41 
42 struct hostap_sta {
43 	u_int8_t	addr[6];
44 	u_int16_t	asid;
45 	u_int16_t	flags;
46 	u_int16_t	sig_info;	/* 15:8 signal, 7:0 noise */
47 	u_int16_t	capinfo;
48 	u_int8_t	rates;
49 };
50 
51 #define HOSTAP_FLAGS_AUTHEN	0x0001
52 #define HOSTAP_FLAGS_ASSOC	0x0002
53 #define HOSTAP_FLAGS_PERM	0x0004
54 #define	HOSTAP_FLAGS_BITS	"\20\01AUTH\02ASSOC\03PERM"
55 
56 #define SIOCHOSTAP_GET		_IOWR('i', 200, struct ifreq)
57 #define SIOCHOSTAP_ADD		_IOWR('i', 201, struct ifreq)
58 #define SIOCHOSTAP_DEL		_IOWR('i', 202, struct ifreq)
59 #define SIOCHOSTAP_GETALL	_IOWR('i', 203, struct ifreq)
60 #define SIOCHOSTAP_GFLAGS	_IOWR('i', 204, struct ifreq)
61 #define SIOCHOSTAP_SFLAGS	_IOWR('i', 205, struct ifreq)
62 
63 /* Flags for SIOCHOSTAP_GFLAGS/SFLAGS */
64 #define WIHAPFL_ACTIVE		0x0001
65 #define WIHAPFL_MAC_FILT	0x0002
66 
67 /* Flags set internally only: */
68 #define WIHAPFL_CANTCHANGE	(WIHAPFL_ACTIVE)
69 
70 struct hostap_getall {
71 	int		nstations;
72 	struct hostap_sta *addr;
73 	int		size;
74 };
75 
76 
77 
78 #ifdef _KERNEL
79 struct wihap_sta_info {
80 	TAILQ_ENTRY(wihap_sta_info) list;
81 	LIST_ENTRY(wihap_sta_info) hash;
82 
83 	struct wi_softc	*sc;
84 	u_int8_t	addr[6];
85 	u_short		flags;
86 	struct timeout	tmo;
87 
88 	u_int16_t	asid;
89 	u_int16_t	capinfo;
90 	u_int16_t	sig_info;	/* 15:8 signal, 7:0 noise */
91 	u_int8_t	rates;
92 	u_int8_t	tx_curr_rate;
93 	u_int8_t	tx_max_rate;
94 	u_int32_t	*challenge;
95 };
96 
97 #define WI_SIFLAGS_ASSOC	HOSTAP_FLAGS_ASSOC
98 #define WI_SIFLAGS_AUTHEN	HOSTAP_FLAGS_AUTHEN
99 #define WI_SIFLAGS_PERM		HOSTAP_FLAGS_PERM
100 #define WI_SIFLAGS_DEAD		0x1000
101 
102 #define WI_STA_HASH_SIZE	113
103 
104 #if WI_STA_HASH_SIZE*16 >= 2007 /* will generate ASID's too large. */
105 #error "WI_STA_HASH_SIZE too big"
106 #endif
107 #if WI_STA_HASH_SIZE*16 < WIHAP_MAX_STATIONS
108 #error "WI_STA_HASH_SIZE too small"
109 #endif
110 
111 struct wihap_info {
112 	TAILQ_HEAD(sta_list, wihap_sta_info)	sta_list;
113 	LIST_HEAD(sta_hash, wihap_sta_info)	sta_hash[WI_STA_HASH_SIZE];
114 
115 	u_int16_t		apflags;
116 
117 	int			n_stations;
118 	u_int16_t		asid_inuse_mask[WI_STA_HASH_SIZE];
119 
120 	int			inactivity_time;
121 	struct timeout		tmo;
122 };
123 
124 #define WIHAP_DFLT_INACTIVITY_TIME	(120) /* 2 minutes */
125 
126 struct wi_softc;
127 struct wi_frame;
128 
129 int	wihap_check_tx(struct wihap_info *, u_int8_t [], u_int8_t *);
130 int	wihap_data_input(struct wi_softc *, struct wi_frame *, struct mbuf *);
131 int	wihap_ioctl(struct wi_softc *, u_long, caddr_t);
132 void	wihap_init(struct wi_softc *);
133 void	wihap_mgmt_input(struct wi_softc *, struct wi_frame *, struct mbuf *);
134 void	wihap_shutdown(struct wi_softc *);
135 
136 #endif /* _KERNEL */
137 #endif /* __WI_HOSTAP_H__ */
138