xref: /onnv-gate/usr/src/lib/libnwam/common/libnwam.h (revision 11767:8f30d0e611c6)
17645Sjames.d.carlson@sun.com /*
27645Sjames.d.carlson@sun.com  * CDDL HEADER START
37645Sjames.d.carlson@sun.com  *
47645Sjames.d.carlson@sun.com  * The contents of this file are subject to the terms of the
57645Sjames.d.carlson@sun.com  * Common Development and Distribution License (the "License").
67645Sjames.d.carlson@sun.com  * You may not use this file except in compliance with the License.
77645Sjames.d.carlson@sun.com  *
87645Sjames.d.carlson@sun.com  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97645Sjames.d.carlson@sun.com  * or http://www.opensolaris.org/os/licensing.
107645Sjames.d.carlson@sun.com  * See the License for the specific language governing permissions
117645Sjames.d.carlson@sun.com  * and limitations under the License.
127645Sjames.d.carlson@sun.com  *
137645Sjames.d.carlson@sun.com  * When distributing Covered Code, include this CDDL HEADER in each
147645Sjames.d.carlson@sun.com  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157645Sjames.d.carlson@sun.com  * If applicable, add the following below this CDDL HEADER, with the
167645Sjames.d.carlson@sun.com  * fields enclosed by brackets "[]" replaced with your own identifying
177645Sjames.d.carlson@sun.com  * information: Portions Copyright [yyyy] [name of copyright owner]
187645Sjames.d.carlson@sun.com  *
197645Sjames.d.carlson@sun.com  * CDDL HEADER END
207645Sjames.d.carlson@sun.com  */
217645Sjames.d.carlson@sun.com /*
22*11767SAnurag.Maskey@Sun.COM  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
237645Sjames.d.carlson@sun.com  * Use is subject to license terms.
247645Sjames.d.carlson@sun.com  */
257645Sjames.d.carlson@sun.com 
26*11767SAnurag.Maskey@Sun.COM /*
27*11767SAnurag.Maskey@Sun.COM  * This file contains data structures and APIs of libnwam.
28*11767SAnurag.Maskey@Sun.COM  * Implementation is MT safe.
29*11767SAnurag.Maskey@Sun.COM  */
307645Sjames.d.carlson@sun.com #ifndef _LIBNWAM_H
317645Sjames.d.carlson@sun.com #define	_LIBNWAM_H
327645Sjames.d.carlson@sun.com 
33*11767SAnurag.Maskey@Sun.COM #ifdef	__cplusplus
347645Sjames.d.carlson@sun.com extern "C" {
357645Sjames.d.carlson@sun.com #endif
367645Sjames.d.carlson@sun.com 
37*11767SAnurag.Maskey@Sun.COM #include <bsm/adt.h>
38*11767SAnurag.Maskey@Sun.COM #include <net/if.h>
39*11767SAnurag.Maskey@Sun.COM #include <inet/ip.h>
40*11767SAnurag.Maskey@Sun.COM #include <inet/ip6.h>
41*11767SAnurag.Maskey@Sun.COM #include <sys/types.h>
42*11767SAnurag.Maskey@Sun.COM #include <sys/socket.h>
43*11767SAnurag.Maskey@Sun.COM 
44*11767SAnurag.Maskey@Sun.COM /*
45*11767SAnurag.Maskey@Sun.COM  * Note - several interface functions below are not utilized in ON, but are
46*11767SAnurag.Maskey@Sun.COM  * used by the GNOME nwam-manager.  One example is nwam_enm_get_name().
47*11767SAnurag.Maskey@Sun.COM  */
48*11767SAnurag.Maskey@Sun.COM 
49*11767SAnurag.Maskey@Sun.COM /*
50*11767SAnurag.Maskey@Sun.COM  * Common definitions
51*11767SAnurag.Maskey@Sun.COM  */
52*11767SAnurag.Maskey@Sun.COM 
53*11767SAnurag.Maskey@Sun.COM /* nwam FMRI and properties */
54*11767SAnurag.Maskey@Sun.COM #define	NWAM_FMRI		"svc:/network/physical:nwam"
55*11767SAnurag.Maskey@Sun.COM #define	NWAM_PG			"nwamd"
56*11767SAnurag.Maskey@Sun.COM #define	NWAM_PROP_ACTIVE_NCP	"active_ncp"
57*11767SAnurag.Maskey@Sun.COM 
58*11767SAnurag.Maskey@Sun.COM /* nwam flags used for read/commit */
59*11767SAnurag.Maskey@Sun.COM /* Block waiting for commit if necessary */
60*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_BLOCKING		0x00000001
61*11767SAnurag.Maskey@Sun.COM /* Committed object must be new */
62*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_CREATE		0x00000002
63*11767SAnurag.Maskey@Sun.COM /* Tell destroy functions not to free handle */
64*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_DO_NOT_FREE		0x00000004
65*11767SAnurag.Maskey@Sun.COM /* Object is being enabled/disabled */
66*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_ENTITY_ENABLE		0x00000008
67*11767SAnurag.Maskey@Sun.COM /* Known WLAN being read, committed or destroyed */
68*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_ENTITY_KNOWN_WLAN	0x00000010
69*11767SAnurag.Maskey@Sun.COM 
70*11767SAnurag.Maskey@Sun.COM /* nwam flags used for selecting ncu type for walk */
71*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_NCU_TYPE_LINK		0x00000001ULL << 32
72*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_NCU_TYPE_INTERFACE	0x00000002ULL << 32
73*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_NCU_TYPE_ALL		(NWAM_FLAG_NCU_TYPE_LINK | \
74*11767SAnurag.Maskey@Sun.COM 					NWAM_FLAG_NCU_TYPE_INTERFACE)
75*11767SAnurag.Maskey@Sun.COM 
76*11767SAnurag.Maskey@Sun.COM /* nwam flags used for selecting ncu class for walk */
77*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_NCU_CLASS_PHYS		0x00000100ULL << 32
78*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_NCU_CLASS_IP			0x00010000ULL << 32
79*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_NCU_CLASS_ALL_LINK		NWAM_FLAG_NCU_CLASS_PHYS
80*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_NCU_CLASS_ALL_INTERFACE	NWAM_FLAG_NCU_CLASS_IP
81*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_NCU_CLASS_ALL		(NWAM_FLAG_NCU_CLASS_ALL_INTERFACE | \
82*11767SAnurag.Maskey@Sun.COM 					NWAM_FLAG_NCU_CLASS_ALL_LINK)
83*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_NCU_TYPE_CLASS_ALL		(NWAM_FLAG_NCU_CLASS_ALL | \
84*11767SAnurag.Maskey@Sun.COM 						NWAM_FLAG_NCU_TYPE_ALL)
85*11767SAnurag.Maskey@Sun.COM 
86*11767SAnurag.Maskey@Sun.COM /* flags used for selecting activation for walk */
87*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_ACTIVATION_MODE_MANUAL		0x000000001ULL << 32
88*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_ACTIVATION_MODE_SYSTEM		0x000000002ULL << 32
89*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_ACTIVATION_MODE_PRIORITIZED		0x000000004ULL << 32
90*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_ACTIVATION_MODE_CONDITIONAL_ANY	0x000000008ULL << 32
91*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_ACTIVATION_MODE_CONDITIONAL_ALL	0x000000010ULL << 32
92*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_ACTIVATION_MODE_ALL	(NWAM_FLAG_ACTIVATION_MODE_MANUAL |\
93*11767SAnurag.Maskey@Sun.COM 					NWAM_FLAG_ACTIVATION_MODE_SYSTEM |\
94*11767SAnurag.Maskey@Sun.COM 					NWAM_FLAG_ACTIVATION_MODE_PRIORITIZED |\
95*11767SAnurag.Maskey@Sun.COM 				NWAM_FLAG_ACTIVATION_MODE_CONDITIONAL_ANY |\
96*11767SAnurag.Maskey@Sun.COM 				NWAM_FLAG_ACTIVATION_MODE_CONDITIONAL_ALL)
97*11767SAnurag.Maskey@Sun.COM 
98*11767SAnurag.Maskey@Sun.COM /* Walk known WLANs in order of priority (lowest first) */
99*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_KNOWN_WLAN_WALK_PRIORITY_ORDER	0x000010000ULL << 32
100*11767SAnurag.Maskey@Sun.COM /* Do not perform priority collision checking for known WLANs */
101*11767SAnurag.Maskey@Sun.COM #define	NWAM_FLAG_KNOWN_WLAN_NO_COLLISION_CHECK		0x000020000ULL << 32
102*11767SAnurag.Maskey@Sun.COM 
103*11767SAnurag.Maskey@Sun.COM /* nwam return codes */
104*11767SAnurag.Maskey@Sun.COM typedef enum {
105*11767SAnurag.Maskey@Sun.COM 	NWAM_SUCCESS,			/* No error occured */
106*11767SAnurag.Maskey@Sun.COM 	NWAM_LIST_END,			/* End of list reached */
107*11767SAnurag.Maskey@Sun.COM 	NWAM_INVALID_HANDLE,		/* Entity handle is invalid */
108*11767SAnurag.Maskey@Sun.COM 	NWAM_HANDLE_UNBOUND,		/* Handle not bound to entity */
109*11767SAnurag.Maskey@Sun.COM 	NWAM_INVALID_ARG,		/* Argument is invalid */
110*11767SAnurag.Maskey@Sun.COM 	NWAM_PERMISSION_DENIED,		/* Insufficient privileges for action */
111*11767SAnurag.Maskey@Sun.COM 	NWAM_NO_MEMORY,			/* Out of memory */
112*11767SAnurag.Maskey@Sun.COM 	NWAM_ENTITY_EXISTS,		/* Entity already exists */
113*11767SAnurag.Maskey@Sun.COM 	NWAM_ENTITY_IN_USE,		/* Entity in use */
114*11767SAnurag.Maskey@Sun.COM 	NWAM_ENTITY_COMMITTED,		/* Entity already committed */
115*11767SAnurag.Maskey@Sun.COM 	NWAM_ENTITY_NOT_FOUND,		/* Entity not found */
116*11767SAnurag.Maskey@Sun.COM 	NWAM_ENTITY_TYPE_MISMATCH,	/* Entity type mismatch */
117*11767SAnurag.Maskey@Sun.COM 	NWAM_ENTITY_INVALID,		/* Validation of entity failed */
118*11767SAnurag.Maskey@Sun.COM 	NWAM_ENTITY_INVALID_MEMBER,	/* Entity member invalid */
119*11767SAnurag.Maskey@Sun.COM 	NWAM_ENTITY_INVALID_STATE,	/* Entity is not in appropriate state */
120*11767SAnurag.Maskey@Sun.COM 	NWAM_ENTITY_INVALID_VALUE,	/* Validation of entity value failed */
121*11767SAnurag.Maskey@Sun.COM 	NWAM_ENTITY_MISSING_MEMBER,	/* Required member is missing */
122*11767SAnurag.Maskey@Sun.COM 	NWAM_ENTITY_NO_VALUE,		/* No value associated with entity */
123*11767SAnurag.Maskey@Sun.COM 	NWAM_ENTITY_MULTIPLE_VALUES,	/* Multiple values for entity */
124*11767SAnurag.Maskey@Sun.COM 	NWAM_ENTITY_READ_ONLY,		/* Entity is marked read only */
125*11767SAnurag.Maskey@Sun.COM 	NWAM_ENTITY_NOT_DESTROYABLE,	/* Entity cannot be destroyed */
126*11767SAnurag.Maskey@Sun.COM 	NWAM_ENTITY_NOT_MANUAL,	/* Entity cannot be manually enabled/disabled */
127*11767SAnurag.Maskey@Sun.COM 	NWAM_WALK_HALTED,		/* Callback function returned nonzero */
128*11767SAnurag.Maskey@Sun.COM 	NWAM_ERROR_BIND,		/* Could not bind to backend */
129*11767SAnurag.Maskey@Sun.COM 	NWAM_ERROR_BACKEND_INIT,	/* Could not initialize backend */
130*11767SAnurag.Maskey@Sun.COM 	NWAM_ERROR_INTERNAL		/* Internal error */
131*11767SAnurag.Maskey@Sun.COM } nwam_error_t;
132*11767SAnurag.Maskey@Sun.COM 
133*11767SAnurag.Maskey@Sun.COM #define	NWAM_MAX_NAME_LEN		128
134*11767SAnurag.Maskey@Sun.COM #define	NWAM_MAX_VALUE_LEN		256
135*11767SAnurag.Maskey@Sun.COM #define	NWAM_MAX_FMRI_LEN		NWAM_MAX_VALUE_LEN
136*11767SAnurag.Maskey@Sun.COM #define	NWAM_MAX_NUM_VALUES		32
137*11767SAnurag.Maskey@Sun.COM #define	NWAM_MAX_NUM_PROPERTIES		32
138*11767SAnurag.Maskey@Sun.COM 
139*11767SAnurag.Maskey@Sun.COM /* used for getting and setting of properties */
140*11767SAnurag.Maskey@Sun.COM typedef enum {
141*11767SAnurag.Maskey@Sun.COM 	NWAM_VALUE_TYPE_BOOLEAN,
142*11767SAnurag.Maskey@Sun.COM 	NWAM_VALUE_TYPE_INT64,
143*11767SAnurag.Maskey@Sun.COM 	NWAM_VALUE_TYPE_UINT64,
144*11767SAnurag.Maskey@Sun.COM 	NWAM_VALUE_TYPE_STRING,
145*11767SAnurag.Maskey@Sun.COM 	NWAM_VALUE_TYPE_UNKNOWN
146*11767SAnurag.Maskey@Sun.COM } nwam_value_type_t;
147*11767SAnurag.Maskey@Sun.COM 
148*11767SAnurag.Maskey@Sun.COM /* Holds values of various types for getting and setting of properties */
149*11767SAnurag.Maskey@Sun.COM /* Forward definition */
150*11767SAnurag.Maskey@Sun.COM struct nwam_value;
151*11767SAnurag.Maskey@Sun.COM typedef struct nwam_value *nwam_value_t;
152*11767SAnurag.Maskey@Sun.COM 
153*11767SAnurag.Maskey@Sun.COM /* Value-related functions. */
154*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_create_boolean(boolean_t, nwam_value_t *);
155*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_create_boolean_array(boolean_t *, uint_t,
156*11767SAnurag.Maskey@Sun.COM     nwam_value_t *);
157*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_create_int64(int64_t, nwam_value_t *);
158*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_create_int64_array(int64_t *, uint_t,
159*11767SAnurag.Maskey@Sun.COM     nwam_value_t *);
160*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_create_uint64(uint64_t, nwam_value_t *);
161*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_create_uint64_array(uint64_t *, uint_t,
162*11767SAnurag.Maskey@Sun.COM     nwam_value_t *);
163*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_create_string(char *, nwam_value_t *);
164*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_create_string_array(char **, uint_t,
165*11767SAnurag.Maskey@Sun.COM     nwam_value_t *);
166*11767SAnurag.Maskey@Sun.COM 
167*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_boolean(nwam_value_t, boolean_t *);
168*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_boolean_array(nwam_value_t, boolean_t **,
169*11767SAnurag.Maskey@Sun.COM     uint_t *);
170*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_int64(nwam_value_t, int64_t *);
171*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_int64_array(nwam_value_t, int64_t **,
172*11767SAnurag.Maskey@Sun.COM     uint_t *);
173*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_uint64(nwam_value_t, uint64_t *);
174*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_uint64_array(nwam_value_t, uint64_t **,
175*11767SAnurag.Maskey@Sun.COM     uint_t *);
176*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_string(nwam_value_t, char **);
177*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_string_array(nwam_value_t, char ***,
178*11767SAnurag.Maskey@Sun.COM     uint_t *);
179*11767SAnurag.Maskey@Sun.COM 
180*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_type(nwam_value_t, nwam_value_type_t *);
181*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_numvalues(nwam_value_t, uint_t *);
182*11767SAnurag.Maskey@Sun.COM 
183*11767SAnurag.Maskey@Sun.COM extern void nwam_value_free(nwam_value_t);
184*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_copy(nwam_value_t, nwam_value_t *);
185*11767SAnurag.Maskey@Sun.COM 
186*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_uint64_get_value_string(const char *, uint64_t,
187*11767SAnurag.Maskey@Sun.COM     const char **);
188*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_string_get_uint64(const char *, const char *,
189*11767SAnurag.Maskey@Sun.COM     uint64_t *);
190*11767SAnurag.Maskey@Sun.COM 
191*11767SAnurag.Maskey@Sun.COM /*
192*11767SAnurag.Maskey@Sun.COM  * To retrieve a localized error string
193*11767SAnurag.Maskey@Sun.COM  */
194*11767SAnurag.Maskey@Sun.COM extern const char *nwam_strerror(nwam_error_t);
195*11767SAnurag.Maskey@Sun.COM 
196*11767SAnurag.Maskey@Sun.COM /*
197*11767SAnurag.Maskey@Sun.COM  * State and auxiliary state describe the state of ENMs, NCUs and locations.
198*11767SAnurag.Maskey@Sun.COM  */
199*11767SAnurag.Maskey@Sun.COM typedef enum {
200*11767SAnurag.Maskey@Sun.COM 	NWAM_STATE_UNINITIALIZED = 0x0,
201*11767SAnurag.Maskey@Sun.COM 	NWAM_STATE_INITIALIZED = 0x1,
202*11767SAnurag.Maskey@Sun.COM 	NWAM_STATE_OFFLINE = 0x2,
203*11767SAnurag.Maskey@Sun.COM 	NWAM_STATE_OFFLINE_TO_ONLINE = 0x4,
204*11767SAnurag.Maskey@Sun.COM 	NWAM_STATE_ONLINE_TO_OFFLINE = 0x8,
205*11767SAnurag.Maskey@Sun.COM 	NWAM_STATE_ONLINE = 0x10,
206*11767SAnurag.Maskey@Sun.COM 	NWAM_STATE_MAINTENANCE = 0x20,
207*11767SAnurag.Maskey@Sun.COM 	NWAM_STATE_DEGRADED = 0x40,
208*11767SAnurag.Maskey@Sun.COM 	NWAM_STATE_DISABLED = 0x80
209*11767SAnurag.Maskey@Sun.COM } nwam_state_t;
210*11767SAnurag.Maskey@Sun.COM 
211*11767SAnurag.Maskey@Sun.COM #define	NWAM_STATE_ANY	(NWAM_STATE_UNINITIALIZED | \
212*11767SAnurag.Maskey@Sun.COM 			NWAM_STATE_INITIALIZED | \
213*11767SAnurag.Maskey@Sun.COM 			NWAM_STATE_OFFLINE | \
214*11767SAnurag.Maskey@Sun.COM 			NWAM_STATE_OFFLINE_TO_ONLINE | \
215*11767SAnurag.Maskey@Sun.COM 			NWAM_STATE_ONLINE_TO_OFFLINE | \
216*11767SAnurag.Maskey@Sun.COM 			NWAM_STATE_ONLINE | \
217*11767SAnurag.Maskey@Sun.COM 			NWAM_STATE_MAINTENANCE | \
218*11767SAnurag.Maskey@Sun.COM 			NWAM_STATE_DEGRADED | \
219*11767SAnurag.Maskey@Sun.COM 			NWAM_STATE_DISABLED)
220*11767SAnurag.Maskey@Sun.COM 
221*11767SAnurag.Maskey@Sun.COM /*
222*11767SAnurag.Maskey@Sun.COM  * The auxiliary state denotes specific reasons why an object is in a particular
223*11767SAnurag.Maskey@Sun.COM  * state (e.g. "script failed", "disabled by administrator", "waiting for DHCP
224*11767SAnurag.Maskey@Sun.COM  * response").
225*11767SAnurag.Maskey@Sun.COM  */
226*11767SAnurag.Maskey@Sun.COM typedef enum {
227*11767SAnurag.Maskey@Sun.COM 	/* General auxiliary states */
228*11767SAnurag.Maskey@Sun.COM 	NWAM_AUX_STATE_UNINITIALIZED,
229*11767SAnurag.Maskey@Sun.COM 	NWAM_AUX_STATE_INITIALIZED,
230*11767SAnurag.Maskey@Sun.COM 	NWAM_AUX_STATE_CONDITIONS_NOT_MET,
231*11767SAnurag.Maskey@Sun.COM 	NWAM_AUX_STATE_MANUAL_DISABLE,
232*11767SAnurag.Maskey@Sun.COM 	NWAM_AUX_STATE_METHOD_FAILED,
233*11767SAnurag.Maskey@Sun.COM 	NWAM_AUX_STATE_METHOD_MISSING,
234*11767SAnurag.Maskey@Sun.COM 	NWAM_AUX_STATE_METHOD_RUNNING,
235*11767SAnurag.Maskey@Sun.COM 	NWAM_AUX_STATE_INVALID_CONFIG,
236*11767SAnurag.Maskey@Sun.COM 	NWAM_AUX_STATE_ACTIVE,
237*11767SAnurag.Maskey@Sun.COM 	/* Link-specific auxiliary states */
238*11767SAnurag.Maskey@Sun.COM 	NWAM_AUX_STATE_LINK_WIFI_SCANNING,
239*11767SAnurag.Maskey@Sun.COM 	NWAM_AUX_STATE_LINK_WIFI_NEED_SELECTION,
240*11767SAnurag.Maskey@Sun.COM 	NWAM_AUX_STATE_LINK_WIFI_NEED_KEY,
241*11767SAnurag.Maskey@Sun.COM 	NWAM_AUX_STATE_LINK_WIFI_CONNECTING,
242*11767SAnurag.Maskey@Sun.COM 	/* IP interface-specific auxiliary states */
243*11767SAnurag.Maskey@Sun.COM 	NWAM_AUX_STATE_IF_WAITING_FOR_ADDR,
244*11767SAnurag.Maskey@Sun.COM 	NWAM_AUX_STATE_IF_DHCP_TIMED_OUT,
245*11767SAnurag.Maskey@Sun.COM 	NWAM_AUX_STATE_IF_DUPLICATE_ADDR,
246*11767SAnurag.Maskey@Sun.COM 	/* Common link/interface auxiliary states */
247*11767SAnurag.Maskey@Sun.COM 	NWAM_AUX_STATE_UP,
248*11767SAnurag.Maskey@Sun.COM 	NWAM_AUX_STATE_DOWN,
249*11767SAnurag.Maskey@Sun.COM 	NWAM_AUX_STATE_NOT_FOUND
250*11767SAnurag.Maskey@Sun.COM } nwam_aux_state_t;
251*11767SAnurag.Maskey@Sun.COM 
252*11767SAnurag.Maskey@Sun.COM /* Activation modes */
253*11767SAnurag.Maskey@Sun.COM typedef enum {
254*11767SAnurag.Maskey@Sun.COM 	NWAM_ACTIVATION_MODE_MANUAL,
255*11767SAnurag.Maskey@Sun.COM 	NWAM_ACTIVATION_MODE_SYSTEM,
256*11767SAnurag.Maskey@Sun.COM 	NWAM_ACTIVATION_MODE_CONDITIONAL_ANY,
257*11767SAnurag.Maskey@Sun.COM 	NWAM_ACTIVATION_MODE_CONDITIONAL_ALL,
258*11767SAnurag.Maskey@Sun.COM 	NWAM_ACTIVATION_MODE_PRIORITIZED
259*11767SAnurag.Maskey@Sun.COM } nwam_activation_mode_t;
2607645Sjames.d.carlson@sun.com 
261*11767SAnurag.Maskey@Sun.COM /*
262*11767SAnurag.Maskey@Sun.COM  * Conditions are of the form
263*11767SAnurag.Maskey@Sun.COM  *
264*11767SAnurag.Maskey@Sun.COM  * ncu|enm|loc name is|is-not active
265*11767SAnurag.Maskey@Sun.COM  * ip-address is|is-not|is-in-range|is-not-in-range ipaddr[/prefixlen]
266*11767SAnurag.Maskey@Sun.COM  * advertised-domain is|is-not|contains|does-not-contain string
267*11767SAnurag.Maskey@Sun.COM  * system-domain is|is-not|contains|does-not-contain string
268*11767SAnurag.Maskey@Sun.COM  * essid is|is-not|contains|does-not-contain string
269*11767SAnurag.Maskey@Sun.COM  * bssid is|is-not <string>
270*11767SAnurag.Maskey@Sun.COM  */
271*11767SAnurag.Maskey@Sun.COM 
272*11767SAnurag.Maskey@Sun.COM typedef enum {
273*11767SAnurag.Maskey@Sun.COM 	NWAM_CONDITION_IS,
274*11767SAnurag.Maskey@Sun.COM 	NWAM_CONDITION_IS_NOT,
275*11767SAnurag.Maskey@Sun.COM 	NWAM_CONDITION_IS_IN_RANGE,
276*11767SAnurag.Maskey@Sun.COM 	NWAM_CONDITION_IS_NOT_IN_RANGE,
277*11767SAnurag.Maskey@Sun.COM 	NWAM_CONDITION_CONTAINS,
278*11767SAnurag.Maskey@Sun.COM 	NWAM_CONDITION_DOES_NOT_CONTAIN
279*11767SAnurag.Maskey@Sun.COM } nwam_condition_t;
280*11767SAnurag.Maskey@Sun.COM 
281*11767SAnurag.Maskey@Sun.COM typedef enum {
282*11767SAnurag.Maskey@Sun.COM 	NWAM_CONDITION_OBJECT_TYPE_NCP,
283*11767SAnurag.Maskey@Sun.COM 	NWAM_CONDITION_OBJECT_TYPE_NCU,
284*11767SAnurag.Maskey@Sun.COM 	NWAM_CONDITION_OBJECT_TYPE_ENM,
285*11767SAnurag.Maskey@Sun.COM 	NWAM_CONDITION_OBJECT_TYPE_LOC,
286*11767SAnurag.Maskey@Sun.COM 	NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS,
287*11767SAnurag.Maskey@Sun.COM 	NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN,
288*11767SAnurag.Maskey@Sun.COM 	NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN,
289*11767SAnurag.Maskey@Sun.COM 	NWAM_CONDITION_OBJECT_TYPE_ESSID,
290*11767SAnurag.Maskey@Sun.COM 	NWAM_CONDITION_OBJECT_TYPE_BSSID
291*11767SAnurag.Maskey@Sun.COM } nwam_condition_object_type_t;
292*11767SAnurag.Maskey@Sun.COM 
293*11767SAnurag.Maskey@Sun.COM /*
294*11767SAnurag.Maskey@Sun.COM  * Activation condition-related functions that convert activation
295*11767SAnurag.Maskey@Sun.COM  * values to an appropriate string and back.
296*11767SAnurag.Maskey@Sun.COM  */
297*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_condition_to_condition_string(
298*11767SAnurag.Maskey@Sun.COM     nwam_condition_object_type_t, nwam_condition_t, const char *, char **);
299*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_condition_string_to_condition(const char *,
300*11767SAnurag.Maskey@Sun.COM     nwam_condition_object_type_t *, nwam_condition_t *, char **);
301*11767SAnurag.Maskey@Sun.COM 
302*11767SAnurag.Maskey@Sun.COM /*
303*11767SAnurag.Maskey@Sun.COM  * Only one location can be active at one time. As a
304*11767SAnurag.Maskey@Sun.COM  * consequence, if the activation conditions of multiple
305*11767SAnurag.Maskey@Sun.COM  * locations are satisfied, we need to compare activation
306*11767SAnurag.Maskey@Sun.COM  * conditions to see if one is more specific than another.
307*11767SAnurag.Maskey@Sun.COM  *
308*11767SAnurag.Maskey@Sun.COM  * The following heuristics are applied to rate an
309*11767SAnurag.Maskey@Sun.COM  * activation condition:
310*11767SAnurag.Maskey@Sun.COM  * - "is" is the most specific condition
311*11767SAnurag.Maskey@Sun.COM  * - it is followed by "is-in-range" and "contains"
312*11767SAnurag.Maskey@Sun.COM  * - "is-not-in-range" and "does-not-contain" are next
313*11767SAnurag.Maskey@Sun.COM  * - finally "is-not" is least specific
314*11767SAnurag.Maskey@Sun.COM  *
315*11767SAnurag.Maskey@Sun.COM  * Regarding the objects these conditions apply to:
316*11767SAnurag.Maskey@Sun.COM  * - NCU, ENM and locations are most specific
317*11767SAnurag.Maskey@Sun.COM  * - system-domain is next
318*11767SAnurag.Maskey@Sun.COM  * - advertised-domain is next
319*11767SAnurag.Maskey@Sun.COM  * - IP address is next
320*11767SAnurag.Maskey@Sun.COM  * - wireless BSSID is next
321*11767SAnurag.Maskey@Sun.COM  * - wireless ESSID is least specific
322*11767SAnurag.Maskey@Sun.COM  *
323*11767SAnurag.Maskey@Sun.COM  */
324*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_condition_rate(nwam_condition_object_type_t,
325*11767SAnurag.Maskey@Sun.COM     nwam_condition_t, uint64_t *);
326*11767SAnurag.Maskey@Sun.COM 
327*11767SAnurag.Maskey@Sun.COM /*
328*11767SAnurag.Maskey@Sun.COM  * Location definitions.
329*11767SAnurag.Maskey@Sun.COM  */
330*11767SAnurag.Maskey@Sun.COM 
331*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_NAME_AUTOMATIC		"Automatic"
332*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_NAME_NO_NET		"NoNet"
333*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_NAME_LEGACY		"Legacy"
334*11767SAnurag.Maskey@Sun.COM 
335*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_NAME_PRE_DEFINED(name)	\
336*11767SAnurag.Maskey@Sun.COM 			(strcasecmp(name, NWAM_LOC_NAME_AUTOMATIC) == 0 || \
337*11767SAnurag.Maskey@Sun.COM 			strcasecmp(name, NWAM_LOC_NAME_NO_NET) == 0 || \
338*11767SAnurag.Maskey@Sun.COM 			strcasecmp(name, NWAM_LOC_NAME_LEGACY) == 0)
339*11767SAnurag.Maskey@Sun.COM 
340*11767SAnurag.Maskey@Sun.COM /* Forward definition */
341*11767SAnurag.Maskey@Sun.COM struct nwam_handle;
342*11767SAnurag.Maskey@Sun.COM 
343*11767SAnurag.Maskey@Sun.COM typedef struct nwam_handle *nwam_loc_handle_t;
344*11767SAnurag.Maskey@Sun.COM 
345*11767SAnurag.Maskey@Sun.COM /* Location properties */
346*11767SAnurag.Maskey@Sun.COM 
347*11767SAnurag.Maskey@Sun.COM typedef enum {
348*11767SAnurag.Maskey@Sun.COM 	NWAM_NAMESERVICES_DNS,
349*11767SAnurag.Maskey@Sun.COM 	NWAM_NAMESERVICES_FILES,
350*11767SAnurag.Maskey@Sun.COM 	NWAM_NAMESERVICES_NIS,
351*11767SAnurag.Maskey@Sun.COM 	NWAM_NAMESERVICES_LDAP
352*11767SAnurag.Maskey@Sun.COM } nwam_nameservices_t;
353*11767SAnurag.Maskey@Sun.COM 
354*11767SAnurag.Maskey@Sun.COM typedef enum {
355*11767SAnurag.Maskey@Sun.COM 	NWAM_CONFIGSRC_MANUAL,
356*11767SAnurag.Maskey@Sun.COM 	NWAM_CONFIGSRC_DHCP
357*11767SAnurag.Maskey@Sun.COM } nwam_configsrc_t;
358*11767SAnurag.Maskey@Sun.COM 
359*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_ACTIVATION_MODE		"activation-mode"
360*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_CONDITIONS		"conditions"
361*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_ENABLED			"enabled"
362*11767SAnurag.Maskey@Sun.COM 
363*11767SAnurag.Maskey@Sun.COM /* Nameservice location properties */
364*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_NAMESERVICES		"nameservices"
365*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_NAMESERVICES_CONFIG_FILE	"nameservices-config-file"
366*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_DNS_NAMESERVICE_CONFIGSRC	"dns-nameservice-configsrc"
367*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_DNS_NAMESERVICE_DOMAIN	"dns-nameservice-domain"
368*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_DNS_NAMESERVICE_SERVERS	"dns-nameservice-servers"
369*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_DNS_NAMESERVICE_SEARCH	"dns-nameservice-search"
370*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_NIS_NAMESERVICE_CONFIGSRC	"nis-nameservice-configsrc"
371*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_NIS_NAMESERVICE_SERVERS	"nis-nameservice-servers"
372*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_LDAP_NAMESERVICE_CONFIGSRC "ldap-nameservice-configsrc"
373*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_LDAP_NAMESERVICE_SERVERS	"ldap-nameservice-servers"
374*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_DEFAULT_DOMAIN		"default-domain"
375*11767SAnurag.Maskey@Sun.COM 
376*11767SAnurag.Maskey@Sun.COM /* NFSv4 domain */
377*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_NFSV4_DOMAIN		"nfsv4-domain"
378*11767SAnurag.Maskey@Sun.COM 
379*11767SAnurag.Maskey@Sun.COM /* IPfilter configuration */
380*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_IPFILTER_CONFIG_FILE	"ipfilter-config-file"
381*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_IPFILTER_V6_CONFIG_FILE	"ipfilter-v6-config-file"
382*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_IPNAT_CONFIG_FILE		"ipnat-config-file"
383*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_IPPOOL_CONFIG_FILE	"ippool-config-file"
384*11767SAnurag.Maskey@Sun.COM 
385*11767SAnurag.Maskey@Sun.COM /* IPsec configuration */
386*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_IKE_CONFIG_FILE		"ike-config-file"
387*11767SAnurag.Maskey@Sun.COM #define	NWAM_LOC_PROP_IPSECPOLICY_CONFIG_FILE	"ipsecpolicy-config-file"
388*11767SAnurag.Maskey@Sun.COM 
389*11767SAnurag.Maskey@Sun.COM /*
390*11767SAnurag.Maskey@Sun.COM  * NCP/NCU definitions.
391*11767SAnurag.Maskey@Sun.COM  */
392*11767SAnurag.Maskey@Sun.COM 
393*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCP_NAME_AUTOMATIC		"Automatic"
394*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCP_NAME_USER		"User"
395*11767SAnurag.Maskey@Sun.COM 
396*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCP_AUTOMATIC(name)	\
397*11767SAnurag.Maskey@Sun.COM 			(strcasecmp(name, NWAM_NCP_NAME_AUTOMATIC) == 0)
398*11767SAnurag.Maskey@Sun.COM 
399*11767SAnurag.Maskey@Sun.COM typedef struct nwam_handle *nwam_ncp_handle_t;
400*11767SAnurag.Maskey@Sun.COM 
401*11767SAnurag.Maskey@Sun.COM typedef struct nwam_handle *nwam_ncu_handle_t;
402*11767SAnurag.Maskey@Sun.COM 
403*11767SAnurag.Maskey@Sun.COM typedef enum {
404*11767SAnurag.Maskey@Sun.COM 	NWAM_NCU_TYPE_UNKNOWN = -1,
405*11767SAnurag.Maskey@Sun.COM 	NWAM_NCU_TYPE_LINK,
406*11767SAnurag.Maskey@Sun.COM 	NWAM_NCU_TYPE_INTERFACE,
407*11767SAnurag.Maskey@Sun.COM 	NWAM_NCU_TYPE_ANY
408*11767SAnurag.Maskey@Sun.COM } nwam_ncu_type_t;
409*11767SAnurag.Maskey@Sun.COM 
410*11767SAnurag.Maskey@Sun.COM typedef enum {
411*11767SAnurag.Maskey@Sun.COM 	NWAM_NCU_CLASS_UNKNOWN = -1,
412*11767SAnurag.Maskey@Sun.COM 	NWAM_NCU_CLASS_PHYS,
413*11767SAnurag.Maskey@Sun.COM 	NWAM_NCU_CLASS_IP,
414*11767SAnurag.Maskey@Sun.COM 	NWAM_NCU_CLASS_ANY
415*11767SAnurag.Maskey@Sun.COM } nwam_ncu_class_t;
416*11767SAnurag.Maskey@Sun.COM 
417*11767SAnurag.Maskey@Sun.COM typedef enum {
418*11767SAnurag.Maskey@Sun.COM 	NWAM_ADDRSRC_DHCP,
419*11767SAnurag.Maskey@Sun.COM 	NWAM_ADDRSRC_AUTOCONF,
420*11767SAnurag.Maskey@Sun.COM 	NWAM_ADDRSRC_STATIC
421*11767SAnurag.Maskey@Sun.COM } nwam_addrsrc_t;
422*11767SAnurag.Maskey@Sun.COM 
423*11767SAnurag.Maskey@Sun.COM typedef enum {
424*11767SAnurag.Maskey@Sun.COM 	NWAM_PRIORITY_MODE_EXCLUSIVE,
425*11767SAnurag.Maskey@Sun.COM 	NWAM_PRIORITY_MODE_SHARED,
426*11767SAnurag.Maskey@Sun.COM 	NWAM_PRIORITY_MODE_ALL
427*11767SAnurag.Maskey@Sun.COM } nwam_priority_mode_t;
428*11767SAnurag.Maskey@Sun.COM 
429*11767SAnurag.Maskey@Sun.COM /* NCU properties common to all type/classes */
430*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCU_PROP_TYPE			"type"
431*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCU_PROP_CLASS			"class"
432*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCU_PROP_PARENT_NCP		"parent"
433*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCU_PROP_ACTIVATION_MODE		"activation-mode"
434*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCU_PROP_ENABLED			"enabled"
435*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCU_PROP_PRIORITY_GROUP		"priority-group"
436*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCU_PROP_PRIORITY_MODE		"priority-mode"
437*11767SAnurag.Maskey@Sun.COM 
438*11767SAnurag.Maskey@Sun.COM /* Link NCU properties */
439*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCU_PROP_LINK_MAC_ADDR		"link-mac-addr"
440*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCU_PROP_LINK_AUTOPUSH		"link-autopush"
441*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCU_PROP_LINK_MTU			"link-mtu"
442*11767SAnurag.Maskey@Sun.COM 
443*11767SAnurag.Maskey@Sun.COM /* IP NCU properties */
444*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCU_PROP_IP_VERSION		"ip-version"
445*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCU_PROP_IPV4_ADDRSRC		"ipv4-addrsrc"
446*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCU_PROP_IPV4_ADDR			"ipv4-addr"
447*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCU_PROP_IPV4_DEFAULT_ROUTE	"ipv4-default-route"
448*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCU_PROP_IPV6_ADDRSRC		"ipv6-addrsrc"
449*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCU_PROP_IPV6_ADDR			"ipv6-addr"
450*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCU_PROP_IPV6_DEFAULT_ROUTE	"ipv6-default-route"
451*11767SAnurag.Maskey@Sun.COM 
452*11767SAnurag.Maskey@Sun.COM /* Some properties should only be set on creation */
453*11767SAnurag.Maskey@Sun.COM #define	NWAM_NCU_PROP_SETONCE(prop)	\
454*11767SAnurag.Maskey@Sun.COM 				(strcmp(prop, NWAM_NCU_PROP_TYPE) == 0 || \
455*11767SAnurag.Maskey@Sun.COM 				strcmp(prop, NWAM_NCU_PROP_CLASS) == 0 || \
456*11767SAnurag.Maskey@Sun.COM 				strcmp(prop, NWAM_NCU_PROP_PARENT_NCP) == 0)
457*11767SAnurag.Maskey@Sun.COM /*
458*11767SAnurag.Maskey@Sun.COM  * ENM definitions
459*11767SAnurag.Maskey@Sun.COM  */
460*11767SAnurag.Maskey@Sun.COM 
461*11767SAnurag.Maskey@Sun.COM typedef struct nwam_handle *nwam_enm_handle_t;
462*11767SAnurag.Maskey@Sun.COM 
463*11767SAnurag.Maskey@Sun.COM #define	NWAM_ENM_PROP_ACTIVATION_MODE	"activation-mode"
464*11767SAnurag.Maskey@Sun.COM #define	NWAM_ENM_PROP_CONDITIONS	"conditions"
465*11767SAnurag.Maskey@Sun.COM #define	NWAM_ENM_PROP_ENABLED		"enabled"
466*11767SAnurag.Maskey@Sun.COM 
467*11767SAnurag.Maskey@Sun.COM /* FMRI associated with ENM */
468*11767SAnurag.Maskey@Sun.COM #define	NWAM_ENM_PROP_FMRI		"fmri"
469*11767SAnurag.Maskey@Sun.COM 
470*11767SAnurag.Maskey@Sun.COM /* Start/stop scripts associated with ENM */
471*11767SAnurag.Maskey@Sun.COM #define	NWAM_ENM_PROP_START		"start"
472*11767SAnurag.Maskey@Sun.COM #define	NWAM_ENM_PROP_STOP		"stop"
473*11767SAnurag.Maskey@Sun.COM 
474*11767SAnurag.Maskey@Sun.COM /*
475*11767SAnurag.Maskey@Sun.COM  * Known Wireless LAN info (known WLAN) definitions.
476*11767SAnurag.Maskey@Sun.COM  */
477*11767SAnurag.Maskey@Sun.COM 
478*11767SAnurag.Maskey@Sun.COM typedef struct nwam_handle *nwam_known_wlan_handle_t;
479*11767SAnurag.Maskey@Sun.COM 
480*11767SAnurag.Maskey@Sun.COM #define	NWAM_KNOWN_WLAN_PROP_BSSIDS		"bssids"
481*11767SAnurag.Maskey@Sun.COM #define	NWAM_KNOWN_WLAN_PROP_PRIORITY		"priority"
482*11767SAnurag.Maskey@Sun.COM #define	NWAM_KNOWN_WLAN_PROP_KEYNAME		"keyname"
483*11767SAnurag.Maskey@Sun.COM #define	NWAM_KNOWN_WLAN_PROP_KEYSLOT		"keyslot"
484*11767SAnurag.Maskey@Sun.COM #define	NWAM_KNOWN_WLAN_PROP_SECURITY_MODE	"security-mode"
4857645Sjames.d.carlson@sun.com 
4867645Sjames.d.carlson@sun.com /*
487*11767SAnurag.Maskey@Sun.COM  * Location Functions
4887645Sjames.d.carlson@sun.com  */
489*11767SAnurag.Maskey@Sun.COM 
490*11767SAnurag.Maskey@Sun.COM /* Create a location */
491*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_create(const char *, nwam_loc_handle_t *);
492*11767SAnurag.Maskey@Sun.COM 
493*11767SAnurag.Maskey@Sun.COM /* Copy a location */
494*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_copy(nwam_loc_handle_t, const char *,
495*11767SAnurag.Maskey@Sun.COM     nwam_loc_handle_t *);
496*11767SAnurag.Maskey@Sun.COM 
497*11767SAnurag.Maskey@Sun.COM /* Read a location from persistent storage */
498*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_read(const char *, uint64_t,
499*11767SAnurag.Maskey@Sun.COM     nwam_loc_handle_t *);
500*11767SAnurag.Maskey@Sun.COM 
501*11767SAnurag.Maskey@Sun.COM /* Validate in-memory representation of a location */
502*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_validate(nwam_loc_handle_t, const char **);
503*11767SAnurag.Maskey@Sun.COM 
504*11767SAnurag.Maskey@Sun.COM /* Commit in-memory representation of a location to persistent storage */
505*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_commit(nwam_loc_handle_t, uint64_t);
506*11767SAnurag.Maskey@Sun.COM 
507*11767SAnurag.Maskey@Sun.COM /* Destroy a location in persistent storage */
508*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_destroy(nwam_loc_handle_t, uint64_t);
509*11767SAnurag.Maskey@Sun.COM 
510*11767SAnurag.Maskey@Sun.COM /* Free in-memory representation of a location */
511*11767SAnurag.Maskey@Sun.COM extern void nwam_loc_free(nwam_loc_handle_t);
512*11767SAnurag.Maskey@Sun.COM 
513*11767SAnurag.Maskey@Sun.COM /* read all locs from persistent storage and walk through each at a time */
514*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_walk_locs(int (*)(nwam_loc_handle_t, void *), void *,
515*11767SAnurag.Maskey@Sun.COM     uint64_t, int *);
516*11767SAnurag.Maskey@Sun.COM 
517*11767SAnurag.Maskey@Sun.COM /* get/set loc name */
518*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_get_name(nwam_loc_handle_t, char **);
519*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_set_name(nwam_loc_handle_t, const char *);
520*11767SAnurag.Maskey@Sun.COM extern boolean_t nwam_loc_can_set_name(nwam_loc_handle_t);
521*11767SAnurag.Maskey@Sun.COM 
522*11767SAnurag.Maskey@Sun.COM /* activate/deactivate loc */
523*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_enable(nwam_loc_handle_t);
524*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_disable(nwam_loc_handle_t);
525*11767SAnurag.Maskey@Sun.COM 
526*11767SAnurag.Maskey@Sun.COM /* walk all properties of an in-memory loc */
527*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_walk_props(nwam_loc_handle_t,
528*11767SAnurag.Maskey@Sun.COM 	int (*)(const char *, nwam_value_t, void *),
529*11767SAnurag.Maskey@Sun.COM 	void *, uint64_t, int *);
530*11767SAnurag.Maskey@Sun.COM 
531*11767SAnurag.Maskey@Sun.COM /* delete/get/set validate loc property */
532*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_delete_prop(nwam_loc_handle_t,
533*11767SAnurag.Maskey@Sun.COM     const char *);
534*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_get_prop_value(nwam_loc_handle_t,
535*11767SAnurag.Maskey@Sun.COM     const char *, nwam_value_t *);
536*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_set_prop_value(nwam_loc_handle_t,
537*11767SAnurag.Maskey@Sun.COM     const char *, nwam_value_t);
538*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_validate_prop(nwam_loc_handle_t, const char *,
539*11767SAnurag.Maskey@Sun.COM     nwam_value_t);
540*11767SAnurag.Maskey@Sun.COM 
541*11767SAnurag.Maskey@Sun.COM /* Get the read-only value for a particular loc property */
542*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_prop_read_only(const char *, boolean_t *);
543*11767SAnurag.Maskey@Sun.COM 
544*11767SAnurag.Maskey@Sun.COM /* Whether the property is multi-valued or not */
545*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_prop_multivalued(const char *, boolean_t *);
546*11767SAnurag.Maskey@Sun.COM 
547*11767SAnurag.Maskey@Sun.COM /* Retrieve data type */
548*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_get_prop_type(const char *, nwam_value_type_t *);
549*11767SAnurag.Maskey@Sun.COM 
550*11767SAnurag.Maskey@Sun.COM /* Retrieve description */
551*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_get_prop_description(const char *, const char **);
552*11767SAnurag.Maskey@Sun.COM 
553*11767SAnurag.Maskey@Sun.COM /* get default loc props */
554*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_get_default_proplist(const char ***, uint_t *);
555*11767SAnurag.Maskey@Sun.COM 
556*11767SAnurag.Maskey@Sun.COM /* get sstate of loc from nwamd */
557*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_get_state(nwam_loc_handle_t, nwam_state_t *,
558*11767SAnurag.Maskey@Sun.COM 	nwam_aux_state_t *);
559*11767SAnurag.Maskey@Sun.COM 
560*11767SAnurag.Maskey@Sun.COM /* Get whether the loc has manual activation-mode or not */
561*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_is_manual(nwam_loc_handle_t, boolean_t *);
562*11767SAnurag.Maskey@Sun.COM 
563*11767SAnurag.Maskey@Sun.COM /*
564*11767SAnurag.Maskey@Sun.COM  * NCP/NCU functions
565*11767SAnurag.Maskey@Sun.COM  */
566*11767SAnurag.Maskey@Sun.COM 
567*11767SAnurag.Maskey@Sun.COM /* Create an ncp */
568*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_create(const char *, uint64_t,
569*11767SAnurag.Maskey@Sun.COM 	nwam_ncp_handle_t *);
570*11767SAnurag.Maskey@Sun.COM 
571*11767SAnurag.Maskey@Sun.COM /* Read an ncp from persistent storage */
572*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_read(const char *, uint64_t, nwam_ncp_handle_t *);
573*11767SAnurag.Maskey@Sun.COM 
574*11767SAnurag.Maskey@Sun.COM /* Make a copy of existing ncp */
575*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_copy(nwam_ncp_handle_t, const char *,
576*11767SAnurag.Maskey@Sun.COM 	nwam_ncp_handle_t *);
577*11767SAnurag.Maskey@Sun.COM 
578*11767SAnurag.Maskey@Sun.COM /* Walk ncps */
579*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_walk_ncps(int (*)(nwam_ncp_handle_t, void *),
580*11767SAnurag.Maskey@Sun.COM 	void *, uint64_t, int *);
581*11767SAnurag.Maskey@Sun.COM 
582*11767SAnurag.Maskey@Sun.COM /* Get ncp name */
583*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_get_name(nwam_ncp_handle_t, char **);
584*11767SAnurag.Maskey@Sun.COM 
585*11767SAnurag.Maskey@Sun.COM /* Get the read-only value for this ncp */
586*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_get_read_only(nwam_ncp_handle_t, boolean_t *);
587*11767SAnurag.Maskey@Sun.COM 
588*11767SAnurag.Maskey@Sun.COM /* Destroy ncp */
589*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_destroy(nwam_ncp_handle_t, uint64_t);
590*11767SAnurag.Maskey@Sun.COM 
591*11767SAnurag.Maskey@Sun.COM /*
592*11767SAnurag.Maskey@Sun.COM  * Walk all ncus associated with ncp.  Specific types/classes of ncu can
593*11767SAnurag.Maskey@Sun.COM  * be selected via flags, or all via NWAM_FLAG_ALL.
594*11767SAnurag.Maskey@Sun.COM  */
595*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_walk_ncus(nwam_ncp_handle_t,
596*11767SAnurag.Maskey@Sun.COM     int(*)(nwam_ncu_handle_t, void *), void *, uint64_t, int *);
597*11767SAnurag.Maskey@Sun.COM 
598*11767SAnurag.Maskey@Sun.COM /* Activate ncp */
599*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_enable(nwam_ncp_handle_t);
600*11767SAnurag.Maskey@Sun.COM 
601*11767SAnurag.Maskey@Sun.COM /* Free in-memory representation of ncp */
602*11767SAnurag.Maskey@Sun.COM extern void nwam_ncp_free(nwam_ncp_handle_t);
603*11767SAnurag.Maskey@Sun.COM 
604*11767SAnurag.Maskey@Sun.COM /* Get state of NCP from nwamd */
605*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_get_state(nwam_ncp_handle_t, nwam_state_t *,
606*11767SAnurag.Maskey@Sun.COM 	nwam_aux_state_t *);
607*11767SAnurag.Maskey@Sun.COM 
608*11767SAnurag.Maskey@Sun.COM /* Get the active priority-group */
609*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_get_active_priority_group(int64_t *);
610*11767SAnurag.Maskey@Sun.COM 
611*11767SAnurag.Maskey@Sun.COM /* Create an ncu or read it from persistent storage */
612*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_create(nwam_ncp_handle_t, const char *,
613*11767SAnurag.Maskey@Sun.COM 	nwam_ncu_type_t, nwam_ncu_class_t, nwam_ncu_handle_t *);
614*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_read(nwam_ncp_handle_t, const char *,
615*11767SAnurag.Maskey@Sun.COM 	nwam_ncu_type_t, uint64_t, nwam_ncu_handle_t *);
616*11767SAnurag.Maskey@Sun.COM 
617*11767SAnurag.Maskey@Sun.COM /* Destroy an ncu in persistent storage or free the in-memory representation */
618*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_destroy(nwam_ncu_handle_t, uint64_t);
619*11767SAnurag.Maskey@Sun.COM extern void nwam_ncu_free(nwam_ncu_handle_t);
620*11767SAnurag.Maskey@Sun.COM 
621*11767SAnurag.Maskey@Sun.COM /* make a copy of existing ncu */
622*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_copy(nwam_ncu_handle_t, const char *,
623*11767SAnurag.Maskey@Sun.COM 	nwam_ncu_handle_t *);
624*11767SAnurag.Maskey@Sun.COM 
625*11767SAnurag.Maskey@Sun.COM /* Commit ncu changes to persistent storage */
626*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_commit(nwam_ncu_handle_t, uint64_t);
6277645Sjames.d.carlson@sun.com 
628*11767SAnurag.Maskey@Sun.COM /* activate/deactivate an individual NCU (must be part of the active NCP) */
629*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_enable(nwam_ncu_handle_t);
630*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_disable(nwam_ncu_handle_t);
631*11767SAnurag.Maskey@Sun.COM 
632*11767SAnurag.Maskey@Sun.COM /* Get state of NCU from nwamd */
633*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_state(nwam_ncu_handle_t, nwam_state_t *,
634*11767SAnurag.Maskey@Sun.COM 	nwam_aux_state_t *);
635*11767SAnurag.Maskey@Sun.COM 
636*11767SAnurag.Maskey@Sun.COM /* Get NCU type */
637*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_ncu_type(nwam_ncu_handle_t, nwam_ncu_type_t *);
638*11767SAnurag.Maskey@Sun.COM 
639*11767SAnurag.Maskey@Sun.COM /* Get NCU class */
640*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_ncu_class(nwam_ncu_handle_t,
641*11767SAnurag.Maskey@Sun.COM 	nwam_ncu_class_t *);
642*11767SAnurag.Maskey@Sun.COM 
643*11767SAnurag.Maskey@Sun.COM /* Validate ncu content */
644*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_validate(nwam_ncu_handle_t, const char **);
645*11767SAnurag.Maskey@Sun.COM 
646*11767SAnurag.Maskey@Sun.COM /* Walk all properties in in-memory representation of ncu */
647*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_walk_props(nwam_ncu_handle_t,
648*11767SAnurag.Maskey@Sun.COM 	int (*)(const char *, nwam_value_t, void *),
649*11767SAnurag.Maskey@Sun.COM 	void *, uint64_t, int *);
650*11767SAnurag.Maskey@Sun.COM 
651*11767SAnurag.Maskey@Sun.COM /* Get/set name of ncu, get parent ncp */
652*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_name(nwam_ncu_handle_t, char **);
653*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_name_to_typed_name(const char *, nwam_ncu_type_t,
654*11767SAnurag.Maskey@Sun.COM     char **);
655*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_typed_name_to_name(const char *, nwam_ncu_type_t *,
656*11767SAnurag.Maskey@Sun.COM     char **);
657*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_default_proplist(nwam_ncu_type_t,
658*11767SAnurag.Maskey@Sun.COM     nwam_ncu_class_t, const char ***, uint_t *);
659*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_ncp(nwam_ncu_handle_t, nwam_ncp_handle_t *);
660*11767SAnurag.Maskey@Sun.COM 
661*11767SAnurag.Maskey@Sun.COM /* delete/get/set/validate property from/in in-memory representation of ncu */
662*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_delete_prop(nwam_ncu_handle_t,
663*11767SAnurag.Maskey@Sun.COM 	const char *);
664*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_prop_value(nwam_ncu_handle_t,
665*11767SAnurag.Maskey@Sun.COM 	const char *, nwam_value_t *);
666*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_set_prop_value(nwam_ncu_handle_t,
667*11767SAnurag.Maskey@Sun.COM 	const char *, nwam_value_t);
668*11767SAnurag.Maskey@Sun.COM 
669*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_validate_prop(nwam_ncu_handle_t, const char *,
670*11767SAnurag.Maskey@Sun.COM 	nwam_value_t);
671*11767SAnurag.Maskey@Sun.COM 
672*11767SAnurag.Maskey@Sun.COM /* Retrieve data type */
673*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_prop_type(const char *, nwam_value_type_t *);
674*11767SAnurag.Maskey@Sun.COM /* Retrieve prop description */
675*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_prop_description(const char *, const char **);
676*11767SAnurag.Maskey@Sun.COM 
677*11767SAnurag.Maskey@Sun.COM /* Get the read-only value from the handle or parent NCP */
678*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_read_only(nwam_ncu_handle_t, boolean_t *);
679*11767SAnurag.Maskey@Sun.COM 
680*11767SAnurag.Maskey@Sun.COM /* Get the read-only value for a particular NCU property */
681*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_prop_read_only(const char *, boolean_t *);
682*11767SAnurag.Maskey@Sun.COM 
683*11767SAnurag.Maskey@Sun.COM /* Whether the property is multi-valued or not */
684*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_prop_multivalued(const char *, boolean_t *);
685*11767SAnurag.Maskey@Sun.COM 
686*11767SAnurag.Maskey@Sun.COM /* Get whether the NCU has manual activation-mode or not */
687*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_is_manual(nwam_ncu_handle_t, boolean_t *);
688*11767SAnurag.Maskey@Sun.COM 
689*11767SAnurag.Maskey@Sun.COM /* Get the flag from the given class for walks */
690*11767SAnurag.Maskey@Sun.COM extern uint64_t nwam_ncu_class_to_flag(nwam_ncu_class_t);
691*11767SAnurag.Maskey@Sun.COM 
692*11767SAnurag.Maskey@Sun.COM /* Get the NCU type from the given class */
693*11767SAnurag.Maskey@Sun.COM extern nwam_ncu_type_t nwam_ncu_class_to_type(nwam_ncu_class_t);
6947645Sjames.d.carlson@sun.com 
695*11767SAnurag.Maskey@Sun.COM /* ENM functions */
696*11767SAnurag.Maskey@Sun.COM /*
697*11767SAnurag.Maskey@Sun.COM  * Obtain a specific enm handle, either be creating a new enm
698*11767SAnurag.Maskey@Sun.COM  * or reading an existing one from persistent storage.
699*11767SAnurag.Maskey@Sun.COM  */
700*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_create(const char *, const char *,
701*11767SAnurag.Maskey@Sun.COM 	nwam_enm_handle_t *);
702*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_read(const char *, uint64_t, nwam_enm_handle_t *);
703*11767SAnurag.Maskey@Sun.COM 
704*11767SAnurag.Maskey@Sun.COM /* Make a copy of existing enm */
705*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_copy(nwam_enm_handle_t, const char *,
706*11767SAnurag.Maskey@Sun.COM 	nwam_enm_handle_t *);
707*11767SAnurag.Maskey@Sun.COM 
708*11767SAnurag.Maskey@Sun.COM /*
709*11767SAnurag.Maskey@Sun.COM  * Obtain handles for all existing enms.  Caller-specified callback
710*11767SAnurag.Maskey@Sun.COM  * function will be called once for each enm, passing the handle and
711*11767SAnurag.Maskey@Sun.COM  * the caller-specified arg.
712*11767SAnurag.Maskey@Sun.COM  */
713*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_walk_enms(int (*)(nwam_enm_handle_t, void *), void *,
714*11767SAnurag.Maskey@Sun.COM 	uint64_t, int *);
715*11767SAnurag.Maskey@Sun.COM 
716*11767SAnurag.Maskey@Sun.COM /*
717*11767SAnurag.Maskey@Sun.COM  * Commit an enm to persistent storage.  Does not free the handle.
718*11767SAnurag.Maskey@Sun.COM  */
719*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_commit(nwam_enm_handle_t, uint64_t);
720*11767SAnurag.Maskey@Sun.COM 
721*11767SAnurag.Maskey@Sun.COM /*
722*11767SAnurag.Maskey@Sun.COM  * Remove an enm from persistent storage.
723*11767SAnurag.Maskey@Sun.COM  */
724*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_destroy(nwam_enm_handle_t, uint64_t);
725*11767SAnurag.Maskey@Sun.COM 
726*11767SAnurag.Maskey@Sun.COM /*
727*11767SAnurag.Maskey@Sun.COM  * Free an enm handle
728*11767SAnurag.Maskey@Sun.COM  */
729*11767SAnurag.Maskey@Sun.COM extern void nwam_enm_free(nwam_enm_handle_t);
7307645Sjames.d.carlson@sun.com 
731*11767SAnurag.Maskey@Sun.COM /*
732*11767SAnurag.Maskey@Sun.COM  * Validate an enm, or a specific enm property.  If validating
733*11767SAnurag.Maskey@Sun.COM  * an entire enm, the invalid property type is returned.
734*11767SAnurag.Maskey@Sun.COM  */
735*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_validate(nwam_enm_handle_t, const char **);
736*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_validate_prop(nwam_enm_handle_t, const char *,
737*11767SAnurag.Maskey@Sun.COM 	nwam_value_t);
738*11767SAnurag.Maskey@Sun.COM 
739*11767SAnurag.Maskey@Sun.COM /* Retrieve data type */
740*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_get_prop_type(const char *, nwam_value_type_t *);
741*11767SAnurag.Maskey@Sun.COM /* Retrieve prop description */
742*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_get_prop_description(const char *, const char **);
743*11767SAnurag.Maskey@Sun.COM 
744*11767SAnurag.Maskey@Sun.COM /*
745*11767SAnurag.Maskey@Sun.COM  * Delete/get/set enm property values.
746*11767SAnurag.Maskey@Sun.COM  */
747*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_delete_prop(nwam_enm_handle_t,
748*11767SAnurag.Maskey@Sun.COM 	const char *);
749*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_get_prop_value(nwam_enm_handle_t,
750*11767SAnurag.Maskey@Sun.COM 	const char *, nwam_value_t *);
751*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_set_prop_value(nwam_enm_handle_t,
752*11767SAnurag.Maskey@Sun.COM 	const char *, nwam_value_t);
753*11767SAnurag.Maskey@Sun.COM 
754*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_get_default_proplist(const char ***, uint_t *);
755*11767SAnurag.Maskey@Sun.COM 
756*11767SAnurag.Maskey@Sun.COM /* Get the read-only value for a particular ENM property */
757*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_prop_read_only(const char *, boolean_t *);
758*11767SAnurag.Maskey@Sun.COM 
759*11767SAnurag.Maskey@Sun.COM /* Whether the property is multi-valued or not */
760*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_prop_multivalued(const char *, boolean_t *);
761*11767SAnurag.Maskey@Sun.COM 
762*11767SAnurag.Maskey@Sun.COM /*
763*11767SAnurag.Maskey@Sun.COM  * Walk all properties of a specific enm.  For each property, specified
764*11767SAnurag.Maskey@Sun.COM  * callback function is called.  Caller is responsible for freeing memory
765*11767SAnurag.Maskey@Sun.COM  * allocated for each property.
766*11767SAnurag.Maskey@Sun.COM  */
767*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_walk_props(nwam_enm_handle_t,
768*11767SAnurag.Maskey@Sun.COM     int (*)(const char *, nwam_value_t, void *),
769*11767SAnurag.Maskey@Sun.COM     void *, uint64_t, int *);
7707645Sjames.d.carlson@sun.com 
771*11767SAnurag.Maskey@Sun.COM /*
772*11767SAnurag.Maskey@Sun.COM  * Get/set the name of an enm.  When getting the name, the library will
773*11767SAnurag.Maskey@Sun.COM  * allocate a buffer; the caller is responsible for freeing the memory.
774*11767SAnurag.Maskey@Sun.COM  */
775*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_get_name(nwam_enm_handle_t, char **);
776*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_set_name(nwam_enm_handle_t, const char *);
777*11767SAnurag.Maskey@Sun.COM extern boolean_t nwam_enm_can_set_name(nwam_enm_handle_t);
778*11767SAnurag.Maskey@Sun.COM 
779*11767SAnurag.Maskey@Sun.COM /*
780*11767SAnurag.Maskey@Sun.COM  * Start/stop an enm.
781*11767SAnurag.Maskey@Sun.COM  */
782*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_enable(nwam_enm_handle_t);
783*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_disable(nwam_enm_handle_t);
784*11767SAnurag.Maskey@Sun.COM 
785*11767SAnurag.Maskey@Sun.COM /*
786*11767SAnurag.Maskey@Sun.COM  * Get state of ENM from nwamd.
787*11767SAnurag.Maskey@Sun.COM  */
788*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_get_state(nwam_enm_handle_t, nwam_state_t *,
789*11767SAnurag.Maskey@Sun.COM 	nwam_aux_state_t *);
790*11767SAnurag.Maskey@Sun.COM 
791*11767SAnurag.Maskey@Sun.COM /*
792*11767SAnurag.Maskey@Sun.COM  * Get whether the ENM has manual activation-mode or not.
793*11767SAnurag.Maskey@Sun.COM  */
794*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_is_manual(nwam_enm_handle_t, boolean_t *);
795*11767SAnurag.Maskey@Sun.COM 
796*11767SAnurag.Maskey@Sun.COM /*
797*11767SAnurag.Maskey@Sun.COM  * Known Wireless LAN (WLAN) info.
798*11767SAnurag.Maskey@Sun.COM  */
799*11767SAnurag.Maskey@Sun.COM 
800*11767SAnurag.Maskey@Sun.COM /* Create a known WLAN */
801*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_create(const char *,
802*11767SAnurag.Maskey@Sun.COM     nwam_known_wlan_handle_t *);
803*11767SAnurag.Maskey@Sun.COM 
804*11767SAnurag.Maskey@Sun.COM /* Read a known WLAN from persistent storage */
805*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_read(const char *, uint64_t,
806*11767SAnurag.Maskey@Sun.COM     nwam_known_wlan_handle_t *);
807*11767SAnurag.Maskey@Sun.COM 
808*11767SAnurag.Maskey@Sun.COM /*
809*11767SAnurag.Maskey@Sun.COM  * Destroy a known WLAN in persistent storage or free the in-memory
810*11767SAnurag.Maskey@Sun.COM  * representation.
811*11767SAnurag.Maskey@Sun.COM  */
812*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_destroy(nwam_known_wlan_handle_t, uint64_t);
813*11767SAnurag.Maskey@Sun.COM extern void nwam_known_wlan_free(nwam_known_wlan_handle_t);
814*11767SAnurag.Maskey@Sun.COM 
815*11767SAnurag.Maskey@Sun.COM /* make a copy of existing known WLAN */
816*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_copy(nwam_known_wlan_handle_t, const char *,
817*11767SAnurag.Maskey@Sun.COM     nwam_known_wlan_handle_t *);
818*11767SAnurag.Maskey@Sun.COM 
819*11767SAnurag.Maskey@Sun.COM /* Commit known WLAN changes to persistent storage */
820*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_commit(nwam_known_wlan_handle_t, uint64_t);
821*11767SAnurag.Maskey@Sun.COM 
822*11767SAnurag.Maskey@Sun.COM /* Validate known WLAN content */
823*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_validate(nwam_known_wlan_handle_t,
824*11767SAnurag.Maskey@Sun.COM     const char **);
825*11767SAnurag.Maskey@Sun.COM 
826*11767SAnurag.Maskey@Sun.COM /* Walk known WLANs */
827*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_walk_known_wlans
828*11767SAnurag.Maskey@Sun.COM 	(int(*)(nwam_known_wlan_handle_t, void *), void *, uint64_t, int *);
829*11767SAnurag.Maskey@Sun.COM 
830*11767SAnurag.Maskey@Sun.COM /* get/set known WLAN name */
831*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_get_name(nwam_known_wlan_handle_t, char **);
832*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_set_name(nwam_known_wlan_handle_t,
833*11767SAnurag.Maskey@Sun.COM     const char *);
834*11767SAnurag.Maskey@Sun.COM extern boolean_t nwam_known_wlan_can_set_name(nwam_known_wlan_handle_t);
835*11767SAnurag.Maskey@Sun.COM 
836*11767SAnurag.Maskey@Sun.COM /* walk all properties of an in-memory known WLAN */
837*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_walk_props(nwam_known_wlan_handle_t,
838*11767SAnurag.Maskey@Sun.COM     int (*)(const char *, nwam_value_t, void *),
839*11767SAnurag.Maskey@Sun.COM     void *, uint64_t, int *);
8407645Sjames.d.carlson@sun.com 
841*11767SAnurag.Maskey@Sun.COM /* delete/get/set/validate known WLAN property */
842*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_delete_prop(nwam_known_wlan_handle_t,
843*11767SAnurag.Maskey@Sun.COM     const char *);
844*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_get_prop_value(nwam_known_wlan_handle_t,
845*11767SAnurag.Maskey@Sun.COM     const char *, nwam_value_t *);
846*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_set_prop_value(nwam_known_wlan_handle_t,
847*11767SAnurag.Maskey@Sun.COM     const char *, nwam_value_t);
848*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_validate_prop(nwam_known_wlan_handle_t,
849*11767SAnurag.Maskey@Sun.COM     const char *, nwam_value_t);
850*11767SAnurag.Maskey@Sun.COM 
851*11767SAnurag.Maskey@Sun.COM /* Retrieve data type */
852*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_get_prop_type(const char *,
853*11767SAnurag.Maskey@Sun.COM     nwam_value_type_t *);
854*11767SAnurag.Maskey@Sun.COM /* Retrieve prop description */
855*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_get_prop_description(const char *,
856*11767SAnurag.Maskey@Sun.COM     const char **);
857*11767SAnurag.Maskey@Sun.COM 
858*11767SAnurag.Maskey@Sun.COM /* get default known WLAN props */
859*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_get_default_proplist(const char ***,
860*11767SAnurag.Maskey@Sun.COM     uint_t *);
861*11767SAnurag.Maskey@Sun.COM 
862*11767SAnurag.Maskey@Sun.COM /* Whether the property is multi-valued or not */
863*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_prop_multivalued(const char *, boolean_t *);
864*11767SAnurag.Maskey@Sun.COM 
865*11767SAnurag.Maskey@Sun.COM /* Add a bssid to the known WLANs */
866*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_add_to_known_wlans(const char *,
867*11767SAnurag.Maskey@Sun.COM     const char *, uint32_t, uint_t, const char *);
868*11767SAnurag.Maskey@Sun.COM 
869*11767SAnurag.Maskey@Sun.COM /* Remove a bssid from known WLANs */
870*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_remove_from_known_wlans(const char *,
871*11767SAnurag.Maskey@Sun.COM     const char *, const char *);
8727645Sjames.d.carlson@sun.com 
873*11767SAnurag.Maskey@Sun.COM /*
874*11767SAnurag.Maskey@Sun.COM  * nwam_wlan_t is used for scan/need choice/need key events and by
875*11767SAnurag.Maskey@Sun.COM  * nwam_wlan_get_scan_results().  The following fields are valid:
876*11767SAnurag.Maskey@Sun.COM  *
877*11767SAnurag.Maskey@Sun.COM  * - for scan and need choice event, ESSID, BSSID, signal strength, security
878*11767SAnurag.Maskey@Sun.COM  * mode, speed, channel, bsstype, key index, and if we already have a key
879*11767SAnurag.Maskey@Sun.COM  * (have_key), if the WLAN is the current selection (selected) and
880*11767SAnurag.Maskey@Sun.COM  * if the current WLAN is connected (connected).
881*11767SAnurag.Maskey@Sun.COM  * - for need key events, ESSID, security mode, have_key, selected and connected
882*11767SAnurag.Maskey@Sun.COM  * values are set.  The rest of the fields are not set since multiple WLANs
883*11767SAnurag.Maskey@Sun.COM  * may match the ESSID and have different speeds, channels etc.  If an
884*11767SAnurag.Maskey@Sun.COM  * ESSID/BSSID selection is specified, the BSSID will be set also.
885*11767SAnurag.Maskey@Sun.COM  *
886*11767SAnurag.Maskey@Sun.COM  */
887*11767SAnurag.Maskey@Sun.COM typedef struct {
888*11767SAnurag.Maskey@Sun.COM 	char nww_essid[NWAM_MAX_NAME_LEN];
889*11767SAnurag.Maskey@Sun.COM 	char nww_bssid[NWAM_MAX_NAME_LEN];
890*11767SAnurag.Maskey@Sun.COM 	char nww_signal_strength[NWAM_MAX_NAME_LEN];
891*11767SAnurag.Maskey@Sun.COM 	uint32_t nww_security_mode; /* a dladm_wlan_secmode_t */
892*11767SAnurag.Maskey@Sun.COM 	uint32_t nww_speed; /* a dladm_wlan_speed_t */
893*11767SAnurag.Maskey@Sun.COM 	uint32_t nww_channel; /* a dladm_wlan_channel_t */
894*11767SAnurag.Maskey@Sun.COM 	uint32_t nww_bsstype; /* a dladm_wlan_bsstype_t */
895*11767SAnurag.Maskey@Sun.COM 	uint_t nww_keyindex;
896*11767SAnurag.Maskey@Sun.COM 	boolean_t nww_have_key;
897*11767SAnurag.Maskey@Sun.COM 	boolean_t nww_selected;
898*11767SAnurag.Maskey@Sun.COM 	boolean_t nww_connected;
899*11767SAnurag.Maskey@Sun.COM } nwam_wlan_t;
900*11767SAnurag.Maskey@Sun.COM 
901*11767SAnurag.Maskey@Sun.COM /*
902*11767SAnurag.Maskey@Sun.COM  * Active WLAN definitions. Used to scan WLANs/choose a WLAN/set a WLAN key.
903*11767SAnurag.Maskey@Sun.COM  */
904*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_wlan_scan(const char *);
905*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_wlan_get_scan_results(const char *, uint_t *,
906*11767SAnurag.Maskey@Sun.COM     nwam_wlan_t **);
907*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_wlan_select(const char *, const char *, const char *,
908*11767SAnurag.Maskey@Sun.COM     uint32_t, boolean_t);
909*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_wlan_set_key(const char *, const char *, const char *,
910*11767SAnurag.Maskey@Sun.COM     uint32_t, uint_t, const char *);
9117645Sjames.d.carlson@sun.com 
912*11767SAnurag.Maskey@Sun.COM /*
913*11767SAnurag.Maskey@Sun.COM  * Event notification definitions
914*11767SAnurag.Maskey@Sun.COM  */
915*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_TYPE_NOOP			0
916*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_TYPE_INIT			1
917*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_TYPE_SHUTDOWN		2
918*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_TYPE_OBJECT_ACTION		3
919*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_TYPE_OBJECT_STATE		4
920*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_TYPE_PRIORITY_GROUP		5
921*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_TYPE_INFO			6
922*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_TYPE_WLAN_SCAN_REPORT	7
923*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_TYPE_WLAN_NEED_CHOICE	8
924*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_TYPE_WLAN_NEED_KEY		9
925*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_TYPE_WLAN_CONNECTION_REPORT	10
926*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_TYPE_IF_ACTION		11
927*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_TYPE_IF_STATE		12
928*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_TYPE_LINK_ACTION		13
929*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_TYPE_LINK_STATE		14
930*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_MAX				NWAM_EVENT_TYPE_LINK_STATE
931*11767SAnurag.Maskey@Sun.COM 
932*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_STATUS_OK			0
933*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_STATUS_NOT_HANDLED		1
934*11767SAnurag.Maskey@Sun.COM 
935*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_NETWORK_OBJECT_UNDEFINED	0
936*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_NETWORK_OBJECT_LINK		1
937*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_NETWORK_OBJECT_INTERFACE	2
938*11767SAnurag.Maskey@Sun.COM 
939*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_REQUEST_UNDEFINED		0
940*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_REQUEST_WLAN			1
941*11767SAnurag.Maskey@Sun.COM #define	NWAM_EVENT_REQUEST_KEY			2
942*11767SAnurag.Maskey@Sun.COM 
943*11767SAnurag.Maskey@Sun.COM /*
944*11767SAnurag.Maskey@Sun.COM  * Actions for nwamd to perform, used in conjunction with
945*11767SAnurag.Maskey@Sun.COM  * nwam_request_type_t in nwam_door_arg_t.
946*11767SAnurag.Maskey@Sun.COM  * Add string representations to nwam_action_to_string() in libnwam_util.c.
947*11767SAnurag.Maskey@Sun.COM  */
948*11767SAnurag.Maskey@Sun.COM typedef enum {
949*11767SAnurag.Maskey@Sun.COM 	NWAM_ACTION_UNKNOWN = -1,
950*11767SAnurag.Maskey@Sun.COM 	NWAM_ACTION_ADD,
951*11767SAnurag.Maskey@Sun.COM 	NWAM_ACTION_REMOVE,
952*11767SAnurag.Maskey@Sun.COM 	NWAM_ACTION_REFRESH,
953*11767SAnurag.Maskey@Sun.COM 	NWAM_ACTION_ENABLE,
954*11767SAnurag.Maskey@Sun.COM 	NWAM_ACTION_DISABLE,
955*11767SAnurag.Maskey@Sun.COM 	NWAM_ACTION_DESTROY
956*11767SAnurag.Maskey@Sun.COM } nwam_action_t;
957*11767SAnurag.Maskey@Sun.COM 
958*11767SAnurag.Maskey@Sun.COM typedef enum {
959*11767SAnurag.Maskey@Sun.COM 	NWAM_OBJECT_TYPE_UNKNOWN = -1,
960*11767SAnurag.Maskey@Sun.COM 	NWAM_OBJECT_TYPE_NCP = 0,
961*11767SAnurag.Maskey@Sun.COM 	NWAM_OBJECT_TYPE_NCU = 1,
962*11767SAnurag.Maskey@Sun.COM 	NWAM_OBJECT_TYPE_LOC = 2,
963*11767SAnurag.Maskey@Sun.COM 	NWAM_OBJECT_TYPE_ENM = 3,
964*11767SAnurag.Maskey@Sun.COM 	NWAM_OBJECT_TYPE_KNOWN_WLAN = 4
965*11767SAnurag.Maskey@Sun.COM } nwam_object_type_t;
966*11767SAnurag.Maskey@Sun.COM 
967*11767SAnurag.Maskey@Sun.COM typedef struct nwam_event *nwam_event_t;
968*11767SAnurag.Maskey@Sun.COM struct nwam_event {
969*11767SAnurag.Maskey@Sun.COM 	int nwe_type;
970*11767SAnurag.Maskey@Sun.COM 	uint32_t nwe_size;
971*11767SAnurag.Maskey@Sun.COM 
972*11767SAnurag.Maskey@Sun.COM 	union {
973*11767SAnurag.Maskey@Sun.COM 		struct nwam_event_object_action {
974*11767SAnurag.Maskey@Sun.COM 			nwam_object_type_t nwe_object_type;
975*11767SAnurag.Maskey@Sun.COM 			char nwe_name[NWAM_MAX_NAME_LEN];
976*11767SAnurag.Maskey@Sun.COM 			char nwe_parent[NWAM_MAX_NAME_LEN];
977*11767SAnurag.Maskey@Sun.COM 			nwam_action_t nwe_action;
978*11767SAnurag.Maskey@Sun.COM 		} nwe_object_action;
9797645Sjames.d.carlson@sun.com 
980*11767SAnurag.Maskey@Sun.COM 		struct nwam_event_object_state {
981*11767SAnurag.Maskey@Sun.COM 			nwam_object_type_t nwe_object_type;
982*11767SAnurag.Maskey@Sun.COM 			char nwe_name[NWAM_MAX_NAME_LEN];
983*11767SAnurag.Maskey@Sun.COM 			char nwe_parent[NWAM_MAX_NAME_LEN];
984*11767SAnurag.Maskey@Sun.COM 			nwam_state_t nwe_state;
985*11767SAnurag.Maskey@Sun.COM 			nwam_aux_state_t nwe_aux_state;
986*11767SAnurag.Maskey@Sun.COM 		} nwe_object_state;
987*11767SAnurag.Maskey@Sun.COM 
988*11767SAnurag.Maskey@Sun.COM 		struct nwam_event_priority_group_info {
989*11767SAnurag.Maskey@Sun.COM 			int64_t nwe_priority;
990*11767SAnurag.Maskey@Sun.COM 		} nwe_priority_group_info;
991*11767SAnurag.Maskey@Sun.COM 
992*11767SAnurag.Maskey@Sun.COM 		struct nwam_event_info {
993*11767SAnurag.Maskey@Sun.COM 			char nwe_message[NWAM_MAX_VALUE_LEN];
994*11767SAnurag.Maskey@Sun.COM 		} nwe_info;
995*11767SAnurag.Maskey@Sun.COM 
996*11767SAnurag.Maskey@Sun.COM 		/*
997*11767SAnurag.Maskey@Sun.COM 		 * wlan_info stores both scan results and the single
998*11767SAnurag.Maskey@Sun.COM 		 * WLAN we require a key for in the case of _WLAN_NEED_KEY
999*11767SAnurag.Maskey@Sun.COM 		 * events.  For _WLAN_CONNECTION_REPORT events, it stores
1000*11767SAnurag.Maskey@Sun.COM 		 * the WLAN the connection succeeded/failed for, indicating
1001*11767SAnurag.Maskey@Sun.COM 		 * success/failure using the 'connected' boolean.
1002*11767SAnurag.Maskey@Sun.COM 		 */
1003*11767SAnurag.Maskey@Sun.COM 		struct nwam_event_wlan_info {
1004*11767SAnurag.Maskey@Sun.COM 			char nwe_name[NWAM_MAX_NAME_LEN];
1005*11767SAnurag.Maskey@Sun.COM 			boolean_t nwe_connected;
1006*11767SAnurag.Maskey@Sun.COM 			uint16_t nwe_num_wlans;
1007*11767SAnurag.Maskey@Sun.COM 			nwam_wlan_t nwe_wlans[1];
1008*11767SAnurag.Maskey@Sun.COM 			/*
1009*11767SAnurag.Maskey@Sun.COM 			 * space may be allocated by user here for the
1010*11767SAnurag.Maskey@Sun.COM 			 * number of wlans
1011*11767SAnurag.Maskey@Sun.COM 			 */
1012*11767SAnurag.Maskey@Sun.COM 		} nwe_wlan_info;
1013*11767SAnurag.Maskey@Sun.COM 
1014*11767SAnurag.Maskey@Sun.COM 		struct nwam_event_if_action {
1015*11767SAnurag.Maskey@Sun.COM 			char nwe_name[NWAM_MAX_NAME_LEN];
1016*11767SAnurag.Maskey@Sun.COM 			nwam_action_t nwe_action;
1017*11767SAnurag.Maskey@Sun.COM 		} nwe_if_action;
10187645Sjames.d.carlson@sun.com 
1019*11767SAnurag.Maskey@Sun.COM 		struct nwam_event_if_state {
1020*11767SAnurag.Maskey@Sun.COM 			char nwe_name[NWAM_MAX_NAME_LEN];
1021*11767SAnurag.Maskey@Sun.COM 			uint32_t nwe_flags;
1022*11767SAnurag.Maskey@Sun.COM 			uint32_t nwe_index;
1023*11767SAnurag.Maskey@Sun.COM 			uint32_t nwe_addr_valid; /* boolean */
1024*11767SAnurag.Maskey@Sun.COM 			uint32_t nwe_addr_added; /* boolean */
1025*11767SAnurag.Maskey@Sun.COM 			struct sockaddr_storage nwe_addr;
1026*11767SAnurag.Maskey@Sun.COM 			/* might be longer then sizeof(if_state) for addr */
1027*11767SAnurag.Maskey@Sun.COM 		} nwe_if_state;
1028*11767SAnurag.Maskey@Sun.COM 
1029*11767SAnurag.Maskey@Sun.COM 		struct nwam_event_link_state {
1030*11767SAnurag.Maskey@Sun.COM 			char nwe_name[NWAM_MAX_NAME_LEN];
1031*11767SAnurag.Maskey@Sun.COM 			boolean_t nwe_link_up;
1032*11767SAnurag.Maskey@Sun.COM 			/* link_state_t from sys/mac.h */
1033*11767SAnurag.Maskey@Sun.COM 		} nwe_link_state;
1034*11767SAnurag.Maskey@Sun.COM 
1035*11767SAnurag.Maskey@Sun.COM 		struct nwam_event_link_action {
1036*11767SAnurag.Maskey@Sun.COM 			char nwe_name[NWAM_MAX_NAME_LEN];
1037*11767SAnurag.Maskey@Sun.COM 			nwam_action_t nwe_action;
1038*11767SAnurag.Maskey@Sun.COM 		} nwe_link_action;
1039*11767SAnurag.Maskey@Sun.COM 	} nwe_data;
1040*11767SAnurag.Maskey@Sun.COM };
1041*11767SAnurag.Maskey@Sun.COM 
1042*11767SAnurag.Maskey@Sun.COM /* NWAM client functions, used to register/unregister and receive events */
1043*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_events_init(void);
1044*11767SAnurag.Maskey@Sun.COM extern void nwam_events_fini(void);
1045*11767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_event_wait(nwam_event_t *);
1046*11767SAnurag.Maskey@Sun.COM extern void nwam_event_free(nwam_event_t);
1047*11767SAnurag.Maskey@Sun.COM 
1048*11767SAnurag.Maskey@Sun.COM /* Event-related string conversion functions */
1049*11767SAnurag.Maskey@Sun.COM extern const char *nwam_action_to_string(nwam_action_t);
1050*11767SAnurag.Maskey@Sun.COM extern const char *nwam_event_type_to_string(int);
1051*11767SAnurag.Maskey@Sun.COM extern const char *nwam_state_to_string(nwam_state_t);
1052*11767SAnurag.Maskey@Sun.COM extern const char *nwam_aux_state_to_string(nwam_aux_state_t);
1053*11767SAnurag.Maskey@Sun.COM 
1054*11767SAnurag.Maskey@Sun.COM extern const char *nwam_object_type_to_string(nwam_object_type_t);
1055*11767SAnurag.Maskey@Sun.COM extern nwam_object_type_t nwam_string_to_object_type(const char *);
1056*11767SAnurag.Maskey@Sun.COM 
1057*11767SAnurag.Maskey@Sun.COM /* Utility strtok_r-like function */
1058*11767SAnurag.Maskey@Sun.COM extern char *nwam_tokenize_by_unescaped_delim(char *, char, char **);
1059*11767SAnurag.Maskey@Sun.COM 
1060*11767SAnurag.Maskey@Sun.COM #ifdef	__cplusplus
10617645Sjames.d.carlson@sun.com }
10627645Sjames.d.carlson@sun.com #endif
10637645Sjames.d.carlson@sun.com 
1064*11767SAnurag.Maskey@Sun.COM #endif	/* _LIBNWAM_H */
1065