1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
25 
26 #ifndef _LIBDLWLAN_H
27 #define	_LIBDLWLAN_H
28 
29 /*
30  * This file includes structures, macros and routines used by WLAN link
31  * administration.
32  */
33 
34 #include <sys/types.h>
35 #include <libdladm.h>
36 
37 /*
38  * General libdlwlan definitions and functions.
39  *
40  * These interfaces are ON consolidation-private.
41  * For documentation, refer to PSARC/2006/623.
42  */
43 
44 #ifdef	__cplusplus
45 extern "C" {
46 #endif
47 
48 #define	DLADM_WLAN_MAX_ESSID_LEN    (32 + 1)	/* per 802.11 spec */
49 						/* max essid length is 32 */
50 						/* one more for '\0' */
51 #define	DLADM_WLAN_BSSID_LEN		6	/* per 802.11 spec */
52 #define	DLADM_WLAN_WPA_KEY_LEN		32	/* per 802.11i spec */
53 #define	DLADM_WLAN_MAX_WPA_IE_LEN	40	/* per 802.11i spec */
54 
55 #define	DLADM_WLAN_CONNECT_TIMEOUT_DEFAULT	10
56 #define	DLADM_WLAN_CONNECT_CREATEIBSS		0x00000001
57 #define	DLADM_WLAN_CONNECT_NOSCAN		0x00000002
58 
59 typedef struct dladm_wlan_essid {
60 	char	we_bytes[DLADM_WLAN_MAX_ESSID_LEN];
61 } dladm_wlan_essid_t;
62 
63 typedef struct dladm_wlan_bssid {
64 	uint8_t	wb_bytes[DLADM_WLAN_BSSID_LEN];
65 } dladm_wlan_bssid_t;
66 
67 typedef struct dladm_wlan_ess {
68 	dladm_wlan_bssid_t	we_bssid;
69 	dladm_wlan_essid_t	we_ssid;
70 	uint_t			we_ssid_len;
71 	uint8_t			we_wpa_ie[DLADM_WLAN_MAX_WPA_IE_LEN];
72 	uint_t			we_wpa_ie_len;
73 	int			we_freq;
74 } dladm_wlan_ess_t;
75 
76 typedef enum {
77 	DLADM_WLAN_CIPHER_WEP		= 0,
78 	DLADM_WLAN_CIPHER_TKIP,
79 	DLADM_WLAN_CIPHER_AES_OCB,
80 	DLADM_WLAN_CIPHER_AES_CCM,
81 	DLADM_WLAN_CIPHER_CKIP,
82 	DLADM_WLAN_CIPHER_NONE
83 } dladm_wlan_cipher_t;
84 
85 typedef enum {
86 	DLADM_WLAN_MLME_ASSOC		= 1,	/* associate station */
87 	DLADM_WLAN_MLME_DISASSOC	= 2	/* disassociate station */
88 } dladm_wlan_mlme_op_t;
89 
90 typedef enum {
91 	DLADM_WLAN_REASON_UNSPECIFIED	= 1,
92 	DLADM_WLAN_REASON_DISASSOC_LEAVING	= 5
93 } dladm_wlan_reason_t;
94 
95 typedef enum {
96 	DLADM_WLAN_SECMODE_NONE = 1,
97 	DLADM_WLAN_SECMODE_WEP,
98 	DLADM_WLAN_SECMODE_WPA
99 } dladm_wlan_secmode_t;
100 
101 typedef enum {
102 	DLADM_WLAN_STRENGTH_VERY_WEAK = 1,
103 	DLADM_WLAN_STRENGTH_WEAK,
104 	DLADM_WLAN_STRENGTH_GOOD,
105 	DLADM_WLAN_STRENGTH_VERY_GOOD,
106 	DLADM_WLAN_STRENGTH_EXCELLENT
107 } dladm_wlan_strength_t;
108 
109 typedef enum {
110 	DLADM_WLAN_MODE_NONE = 0,
111 	DLADM_WLAN_MODE_80211A,
112 	DLADM_WLAN_MODE_80211B,
113 	DLADM_WLAN_MODE_80211G
114 } dladm_wlan_mode_t;
115 
116 typedef enum {
117 	DLADM_WLAN_AUTH_OPEN = 1,
118 	DLADM_WLAN_AUTH_SHARED
119 } dladm_wlan_auth_t;
120 
121 typedef enum {
122 	DLADM_WLAN_BSSTYPE_BSS = 1,
123 	DLADM_WLAN_BSSTYPE_IBSS,
124 	DLADM_WLAN_BSSTYPE_ANY
125 } dladm_wlan_bsstype_t;
126 
127 typedef enum {
128 	DLADM_WLAN_LINK_DISCONNECTED = 1,
129 	DLADM_WLAN_LINK_CONNECTED
130 } dladm_wlan_linkstatus_t;
131 
132 typedef uint32_t dladm_wlan_speed_t;
133 typedef	uint32_t dladm_wlan_channel_t;
134 
135 enum {
136 	DLADM_WLAN_ATTR_ESSID	= 0x00000001,
137 	DLADM_WLAN_ATTR_BSSID	= 0x00000002,
138 	DLADM_WLAN_ATTR_SECMODE	= 0x00000004,
139 	DLADM_WLAN_ATTR_STRENGTH = 0x00000008,
140 	DLADM_WLAN_ATTR_MODE	= 0x00000010,
141 	DLADM_WLAN_ATTR_SPEED	= 0x00000020,
142 	DLADM_WLAN_ATTR_AUTH	= 0x00000040,
143 	DLADM_WLAN_ATTR_BSSTYPE	= 0x00000080,
144 	DLADM_WLAN_ATTR_CHANNEL	= 0x00000100
145 };
146 typedef struct dladm_wlan_attr {
147 	uint_t			wa_valid;
148 	dladm_wlan_essid_t	wa_essid;
149 	dladm_wlan_bssid_t	wa_bssid;
150 	dladm_wlan_secmode_t	wa_secmode;
151 	dladm_wlan_strength_t	wa_strength;
152 	dladm_wlan_mode_t	wa_mode;
153 	dladm_wlan_speed_t	wa_speed;
154 	dladm_wlan_auth_t	wa_auth;
155 	dladm_wlan_bsstype_t	wa_bsstype;
156 	dladm_wlan_channel_t	wa_channel;
157 } dladm_wlan_attr_t;
158 
159 enum {
160 	DLADM_WLAN_LINKATTR_STATUS	= 0x00000001,
161 	DLADM_WLAN_LINKATTR_WLAN	= 0x00000002
162 };
163 typedef struct dladm_wlan_linkattr {
164 	uint_t			la_valid;
165 	dladm_wlan_linkstatus_t	la_status;
166 	dladm_wlan_attr_t	la_wlan_attr;
167 } dladm_wlan_linkattr_t;
168 
169 #define	DLADM_WLAN_WEPKEY64_LEN		5 	/* per WEP spec */
170 #define	DLADM_WLAN_WEPKEY128_LEN	13 	/* per WEP spec */
171 #define	DLADM_WLAN_MAX_KEY_LEN		64	/* per WEP/WPA spec */
172 #define	DLADM_WLAN_MAX_WEPKEYS		4 	/* MAX_NWEPKEYS */
173 #define	DLADM_WLAN_MAX_KEYNAME_LEN	64
174 typedef struct dladm_wlan_key {
175 	uint_t		wk_idx;
176 	uint_t		wk_len;
177 	uint8_t		wk_val[DLADM_WLAN_MAX_KEY_LEN];
178 	char		wk_name[DLADM_WLAN_MAX_KEYNAME_LEN];
179 	uint_t		wk_class;
180 } dladm_wlan_key_t;
181 
182 extern dladm_status_t	dladm_wlan_scan(dladm_handle_t, datalink_id_t, void *,
183 			    boolean_t (*)(void *, dladm_wlan_attr_t *));
184 extern dladm_status_t	dladm_wlan_connect(dladm_handle_t, datalink_id_t,
185 			    dladm_wlan_attr_t *, int, void *, uint_t, uint_t);
186 extern dladm_status_t	dladm_wlan_disconnect(dladm_handle_t, datalink_id_t);
187 extern dladm_status_t	dladm_wlan_get_linkattr(dladm_handle_t, datalink_id_t,
188 			    dladm_wlan_linkattr_t *);
189 /* WPA support routines */
190 extern dladm_status_t	dladm_wlan_wpa_get_sr(dladm_handle_t, datalink_id_t,
191 			    dladm_wlan_ess_t *, uint_t, uint_t *);
192 extern dladm_status_t	dladm_wlan_wpa_set_ie(dladm_handle_t, datalink_id_t,
193 			    uint8_t *, uint_t);
194 extern dladm_status_t	dladm_wlan_wpa_set_wpa(dladm_handle_t, datalink_id_t,
195 			    boolean_t);
196 extern dladm_status_t	dladm_wlan_wpa_del_key(dladm_handle_t, datalink_id_t,
197 			    uint_t, const dladm_wlan_bssid_t *);
198 extern dladm_status_t	dladm_wlan_wpa_set_key(dladm_handle_t, datalink_id_t,
199 			    dladm_wlan_cipher_t, const dladm_wlan_bssid_t *,
200 			    boolean_t, uint64_t, uint_t, uint8_t *, uint_t);
201 extern dladm_status_t	dladm_wlan_wpa_set_mlme(dladm_handle_t, datalink_id_t,
202 			    dladm_wlan_mlme_op_t,
203 			    dladm_wlan_reason_t, dladm_wlan_bssid_t *);
204 
205 extern const char	*dladm_wlan_essid2str(dladm_wlan_essid_t *, char *);
206 extern const char	*dladm_wlan_bssid2str(dladm_wlan_bssid_t *, char *);
207 extern const char	*dladm_wlan_secmode2str(dladm_wlan_secmode_t *, char *);
208 extern const char	*dladm_wlan_strength2str(dladm_wlan_strength_t *,
209 			    char *);
210 extern const char	*dladm_wlan_mode2str(dladm_wlan_mode_t *, char *);
211 extern const char	*dladm_wlan_speed2str(dladm_wlan_speed_t *, char *);
212 extern const char	*dladm_wlan_auth2str(dladm_wlan_auth_t *, char *);
213 extern const char	*dladm_wlan_bsstype2str(dladm_wlan_bsstype_t *, char *);
214 extern const char	*dladm_wlan_linkstatus2str(dladm_wlan_linkstatus_t *,
215 			    char *);
216 
217 extern dladm_status_t	dladm_wlan_str2essid(const char *,
218 			    dladm_wlan_essid_t *);
219 extern dladm_status_t	dladm_wlan_str2bssid(const char *,
220 			    dladm_wlan_bssid_t *);
221 extern dladm_status_t	dladm_wlan_str2secmode(const char *,
222 			    dladm_wlan_secmode_t *);
223 extern dladm_status_t	dladm_wlan_str2strength(const char *,
224 			    dladm_wlan_strength_t *);
225 extern dladm_status_t	dladm_wlan_str2mode(const char *,
226 			    dladm_wlan_mode_t *);
227 extern dladm_status_t	dladm_wlan_str2speed(const char *,
228 			    dladm_wlan_speed_t *);
229 extern dladm_status_t	dladm_wlan_str2auth(const char *,
230 			    dladm_wlan_auth_t *);
231 extern dladm_status_t	dladm_wlan_str2bsstype(const char *,
232 			    dladm_wlan_bsstype_t *);
233 extern dladm_status_t	dladm_wlan_str2linkstatus(const char *,
234 			    dladm_wlan_linkstatus_t *);
235 
236 #ifdef	__cplusplus
237 }
238 #endif
239 
240 #endif	/* _LIBDLWLAN_H */
241