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