xref: /onnv-gate/usr/src/lib/libnwam/README (revision 11767:8f30d0e611c6)
1*11767SAnurag.Maskey@Sun.COM#
2*11767SAnurag.Maskey@Sun.COM# CDDL HEADER START
3*11767SAnurag.Maskey@Sun.COM#
4*11767SAnurag.Maskey@Sun.COM# The contents of this file are subject to the terms of the
5*11767SAnurag.Maskey@Sun.COM# Common Development and Distribution License (the "License").
6*11767SAnurag.Maskey@Sun.COM# You may not use this file except in compliance with the License.
7*11767SAnurag.Maskey@Sun.COM#
8*11767SAnurag.Maskey@Sun.COM# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*11767SAnurag.Maskey@Sun.COM# or http://www.opensolaris.org/os/licensing.
10*11767SAnurag.Maskey@Sun.COM# See the License for the specific language governing permissions
11*11767SAnurag.Maskey@Sun.COM# and limitations under the License.
12*11767SAnurag.Maskey@Sun.COM#
13*11767SAnurag.Maskey@Sun.COM# When distributing Covered Code, include this CDDL HEADER in each
14*11767SAnurag.Maskey@Sun.COM# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*11767SAnurag.Maskey@Sun.COM# If applicable, add the following below this CDDL HEADER, with the
16*11767SAnurag.Maskey@Sun.COM# fields enclosed by brackets "[]" replaced with your own identifying
17*11767SAnurag.Maskey@Sun.COM# information: Portions Copyright [yyyy] [name of copyright owner]
18*11767SAnurag.Maskey@Sun.COM#
19*11767SAnurag.Maskey@Sun.COM# CDDL HEADER END
20*11767SAnurag.Maskey@Sun.COM#
21*11767SAnurag.Maskey@Sun.COM#
22*11767SAnurag.Maskey@Sun.COM# Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
23*11767SAnurag.Maskey@Sun.COM# Use is subject to license terms.
24*11767SAnurag.Maskey@Sun.COM#
25*11767SAnurag.Maskey@Sun.COM# lib/libnwam/README
26*11767SAnurag.Maskey@Sun.COM#
27*11767SAnurag.Maskey@Sun.COM
28*11767SAnurag.Maskey@Sun.COMNAME
29*11767SAnurag.Maskey@Sun.COM	libnwam - Network Auto-Magic (NWAM) configuration and event
30*11767SAnurag.Maskey@Sun.COM	management library
31*11767SAnurag.Maskey@Sun.COM
32*11767SAnurag.Maskey@Sun.COMDESCRIPTION
33*11767SAnurag.Maskey@Sun.COM
34*11767SAnurag.Maskey@Sun.COMThe libnwam library is provided so that the various consumers of
35*11767SAnurag.Maskey@Sun.COMNetwork Auto-Magic (NWAM) configuration information - i.e. the NWAM
36*11767SAnurag.Maskey@Sun.COMGUI, the nwamcfg CLI and the NWAM daemon - have a consistent interface
37*11767SAnurag.Maskey@Sun.COMfor retrieving and updating NWAM-related configuration data, abstracted
38*11767SAnurag.Maskey@Sun.COMfrom the actual manner in which the data is persistently stored. It
39*11767SAnurag.Maskey@Sun.COMprovides functionality to interact with the key components of NWAM
40*11767SAnurag.Maskey@Sun.COMconfiguration, as described below.  Additionally the library provides
41*11767SAnurag.Maskey@Sun.COMfunctionality for system events to flow from the NWAM daemon to a
42*11767SAnurag.Maskey@Sun.COMclient (like the GUI panel applet).
43*11767SAnurag.Maskey@Sun.COM
44*11767SAnurag.Maskey@Sun.COMEach of these configuration components is referred to as an 'entity'.
45*11767SAnurag.Maskey@Sun.COM
46*11767SAnurag.Maskey@Sun.COMNetwork Configuration Units (NCUs): units that specify either link or
47*11767SAnurag.Maskey@Sun.COMinterface (IP) configuration. An NCP consists of a set of NCUs, one for
48*11767SAnurag.Maskey@Sun.COMeach datalink (physical, tunnel, aggregation etc), and one for each IP
49*11767SAnurag.Maskey@Sun.COMinterface.
50*11767SAnurag.Maskey@Sun.COM
51*11767SAnurag.Maskey@Sun.COMNetwork Configuration Profiles (NCPs): A network configuration profile (NCP)
52*11767SAnurag.Maskey@Sun.COMcomprises of a set of NCUs specifying configuration preferences to be applied
53*11767SAnurag.Maskey@Sun.COMwhen that profile is active.
54*11767SAnurag.Maskey@Sun.COM
55*11767SAnurag.Maskey@Sun.COMLocations: A location consists of additional configuration preferences
56*11767SAnurag.Maskey@Sun.COMto be applied when basic IP configuration is complete.  Information
57*11767SAnurag.Maskey@Sun.COMsuch as name service specification, proxies, etc. can be specified.
58*11767SAnurag.Maskey@Sun.COM
59*11767SAnurag.Maskey@Sun.COMExternal Network Modifiers (ENMs): units that specify an external service
60*11767SAnurag.Maskey@Sun.COMor executable that modifies the network configuration.  Properties of an
61*11767SAnurag.Maskey@Sun.COMENM include an FMRI or Start and Stop exec strings, an optional environment
62*11767SAnurag.Maskey@Sun.COMwhich will be activated when the ENM is started, an activation type specifying
63*11767SAnurag.Maskey@Sun.COMwhen the ENM should be started (e.g. on user input, dependent on an NCU--
64*11767SAnurag.Maskey@Sun.COMeither requiring or excluding a particular NCU, or always-on).  Each ENM
65*11767SAnurag.Maskey@Sun.COMalso has a read-only state property, which indicates whether or not the
66*11767SAnurag.Maskey@Sun.COMENM has been activated by nwam.
67*11767SAnurag.Maskey@Sun.COM
68*11767SAnurag.Maskey@Sun.COMKnown WiFi Networks (known WLANs): units that specify configuration
69*11767SAnurag.Maskey@Sun.COMdata associated with known WiFi access points that the user visits.  If
70*11767SAnurag.Maskey@Sun.COMa WLAN found by scanning is one of the known WLANs, NWAM will automatically
71*11767SAnurag.Maskey@Sun.COMconnect.  Priorities associated with known WLANs can also be manipulated
72*11767SAnurag.Maskey@Sun.COMallowing users to prioritize particular WLANs.
73*11767SAnurag.Maskey@Sun.COM
74*11767SAnurag.Maskey@Sun.COMEvents
75*11767SAnurag.Maskey@Sun.COM
76*11767SAnurag.Maskey@Sun.COMThe event interface allows a client of NWAM (usu. the GUI) to subscribe
77*11767SAnurag.Maskey@Sun.COMto a stream of system events such as link and interface up/down,
78*11767SAnurag.Maskey@Sun.COMwireless scans, and times when NWAM needs the user to be queried.
79*11767SAnurag.Maskey@Sun.COM
80*11767SAnurag.Maskey@Sun.COMEvents types are in libnwam.h as NWAM_EVENTS_* and the actual bodies of
81*11767SAnurag.Maskey@Sun.COMthe events are in nwam_events_msg_t.  The semantics of the events have
82*11767SAnurag.Maskey@Sun.COMbeen simplified so that none require response.  They are all
83*11767SAnurag.Maskey@Sun.COMnotification.
84*11767SAnurag.Maskey@Sun.COM
85*11767SAnurag.Maskey@Sun.COMNWAM_EVENTS_SOURCE_{DEAD,BACK} provide notification that the nwam
86*11767SAnurag.Maskey@Sun.COMdaemon has died or has reappeared.  These are synthetic events in that
87*11767SAnurag.Maskey@Sun.COMthey come from the library and not from nwamd.
88*11767SAnurag.Maskey@Sun.COM
89*11767SAnurag.Maskey@Sun.COMNWAM_EVENTS_NO_MAGIC provides notification that nwam couldn't make a
90*11767SAnurag.Maskey@Sun.COMdetermination of what to do without user guidance.  This event provides
91*11767SAnurag.Maskey@Sun.COMinformation that can be used to ask the user if he wants to pick a
92*11767SAnurag.Maskey@Sun.COMwireless lan although in some cases nwam might have no idea what is
93*11767SAnurag.Maskey@Sun.COMintended.
94*11767SAnurag.Maskey@Sun.COM
95*11767SAnurag.Maskey@Sun.COMNWAM_EVENTS_IF_{STATE,REMOVED} provide information about changes in
96*11767SAnurag.Maskey@Sun.COMinterface state or the removal of an interface.
97*11767SAnurag.Maskey@Sun.COM
98*11767SAnurag.Maskey@Sun.COMNWAM_EVENTS_LINK_{STATE, REMOVED} provides information about changes in
99*11767SAnurag.Maskey@Sun.COMlink state or the removal of a link.
100*11767SAnurag.Maskey@Sun.COM
101*11767SAnurag.Maskey@Sun.COMNWAM_EVENTS_SCAN_REPORT is used to communicate information about
102*11767SAnurag.Maskey@Sun.COMwireless networks encountered.
103*11767SAnurag.Maskey@Sun.COM
104*11767SAnurag.Maskey@Sun.COMPersistent configuration state of entities is stored in project-private
105*11767SAnurag.Maskey@Sun.COM/etc/nwam configuration files, and the details of storage are hidden
106*11767SAnurag.Maskey@Sun.COMfrom libnwam consumers.
107*11767SAnurag.Maskey@Sun.COM
108*11767SAnurag.Maskey@Sun.COMAccess to entities is attained via an entity-specific handle. These
109*11767SAnurag.Maskey@Sun.COMhandles can be obtained via calls to nwam_<entity>_create() or
110*11767SAnurag.Maskey@Sun.COMnwam_<entity>_read(), and freed (in memory) via calls to nwam_<entity>_free().
111*11767SAnurag.Maskey@Sun.COMnwam_<entity>_create() will create an in-memory representation of the
112*11767SAnurag.Maskey@Sun.COMentity, but that entity will not be stored until nwam_<entity>_commit() is
113*11767SAnurag.Maskey@Sun.COMcalled.  Persistently stored entitites are retrieved via nwam_<entity>_read(),
114*11767SAnurag.Maskey@Sun.COMcan be modified in-memory, and later persistently committed to storage
115*11767SAnurag.Maskey@Sun.COMvia nwam_<entity>_commit().  Entities can also be copied with
116*11767SAnurag.Maskey@Sun.COMnwam_<entity>_copy().
117*11767SAnurag.Maskey@Sun.COM
118*11767SAnurag.Maskey@Sun.COMAll changes made after binding a handle to an entity, and prior to calling
119*11767SAnurag.Maskey@Sun.COMnwam_<entity>_commit() are carried out on the in-memory representation of that
120*11767SAnurag.Maskey@Sun.COMentity. nwam_<entity>_commit() updates persistent storage in an all-or-none
121*11767SAnurag.Maskey@Sun.COMtransactional manner, applying the (possibly changed) in-memory representation
122*11767SAnurag.Maskey@Sun.COMto persistent storage atomically.
123*11767SAnurag.Maskey@Sun.COM
124*11767SAnurag.Maskey@Sun.COMTo destroy an entity in persistent storage, nwam_<entity>_destroy() is
125*11767SAnurag.Maskey@Sun.COMused. This is distinct from nwam_<entity>_free(), which simply frees
126*11767SAnurag.Maskey@Sun.COMthe in-memory representation - destroy both removes the object from
127*11767SAnurag.Maskey@Sun.COMpersistent storage, and frees it in memory.
128*11767SAnurag.Maskey@Sun.COM
129*11767SAnurag.Maskey@Sun.COMTo summarize, the pattern of interactions with an entity is
130*11767SAnurag.Maskey@Sun.COM - nwam_<entity>_read(), nwam_<entity>_create() or nwam_<entity>_copy()
131*11767SAnurag.Maskey@Sun.COM - possibly modify entity properties
132*11767SAnurag.Maskey@Sun.COM - nwam_<entity>_commit() or nwam_<entity>_destroy()
133*11767SAnurag.Maskey@Sun.COM - nwam_<entity>_handle_free()
134*11767SAnurag.Maskey@Sun.COM
135*11767SAnurag.Maskey@Sun.COMUnless otherwise stated functions in libnwam are MT-safe.  The
136*11767SAnurag.Maskey@Sun.COMatomicity of _commit() and _read() operations is guaranteed - i.e.
137*11767SAnurag.Maskey@Sun.COM_commit() is guaranteed to deliver all property changes to persistent
138*11767SAnurag.Maskey@Sun.COMstorage, while _read() is guaranteed to read a consistent view of the
139*11767SAnurag.Maskey@Sun.COMentity (i.e. _read() cannot collide with another entity _commit()ting
140*11767SAnurag.Maskey@Sun.COMchanges). However, it is possible that a _read() will retrieve an
141*11767SAnurag.Maskey@Sun.COMoutdated view of an entity, if after the _read() completes, another
142*11767SAnurag.Maskey@Sun.COMentity _commit()s changes. In other words, lost updates are possible.
143*11767SAnurag.Maskey@Sun.COMThese are permitted given the nature of the entities changing NWAM
144*11767SAnurag.Maskey@Sun.COMconfiguration (the CLI and GUI) - it seems intuitive that the most
145*11767SAnurag.Maskey@Sun.COMrecent update best captures user intent.
146*11767SAnurag.Maskey@Sun.COM
147*11767SAnurag.Maskey@Sun.COMEntity validation on an in-memory representation can be explicitly requested
148*11767SAnurag.Maskey@Sun.COMvia a call to nwam_<entity>_validate(), and individual property values
149*11767SAnurag.Maskey@Sun.COMcan be validated via nwam_<entity>_validate_prop().
150*11767SAnurag.Maskey@Sun.COM
151*11767SAnurag.Maskey@Sun.COMStorage and retrieval of properties is done via nwam_<entity>_set_prop_value()
152*11767SAnurag.Maskey@Sun.COMand nwam_<entity>_get_prop_value().  These functions require an nwam_value_t as
153*11767SAnurag.Maskey@Sun.COMa parameter,  which is created via the nwam_value_create_<type>() family
154*11767SAnurag.Maskey@Sun.COMof functions.  Data can be retrieved from the nwam_value_t via the
155*11767SAnurag.Maskey@Sun.COMnwam_value_get_<type>() family of functions.  Once a property has been
156*11767SAnurag.Maskey@Sun.COMset, the associated nwam_value_t can be immediately freed.  For retrieval,
157*11767SAnurag.Maskey@Sun.COMthe nwam_value_t should be freed when the value(s) are no longer needed.
158*11767SAnurag.Maskey@Sun.COMA property can also be delete with nwam_<entity>_delete_prop().
159*11767SAnurag.Maskey@Sun.COM
160*11767SAnurag.Maskey@Sun.COMImplicit validation occurs as part of the nwam_<entity>_set_prop_value()
161*11767SAnurag.Maskey@Sun.COMand nwam_<entity>_commit() functions.
162*11767SAnurag.Maskey@Sun.COM
163*11767SAnurag.Maskey@Sun.COMINTERFACES
164*11767SAnurag.Maskey@Sun.COM
165*11767SAnurag.Maskey@Sun.COMFor error handling:
166*11767SAnurag.Maskey@Sun.COM
167*11767SAnurag.Maskey@Sun.COMconst char *nwam_strerror(nwam_error_t error);
168*11767SAnurag.Maskey@Sun.COM
169*11767SAnurag.Maskey@Sun.COMFor values:
170*11767SAnurag.Maskey@Sun.COM
171*11767SAnurag.Maskey@Sun.COMValues can be any of the following types:
172*11767SAnurag.Maskey@Sun.COM
173*11767SAnurag.Maskey@Sun.COM	NWAM_VALUE_TYPE_BOOLEAN
174*11767SAnurag.Maskey@Sun.COM	NWAM_VALUE_TYPE_UINT64
175*11767SAnurag.Maskey@Sun.COM	NWAM_VALUE_TYPE_INT64
176*11767SAnurag.Maskey@Sun.COM        NWAM_VALUE_TYPE_STRING
177*11767SAnurag.Maskey@Sun.COM
178*11767SAnurag.Maskey@Sun.COMand are possibly multi-valued. An nwam_value_t must be created in order
179*11767SAnurag.Maskey@Sun.COMto set property values in libnwam, this is done via the follwing functions:
180*11767SAnurag.Maskey@Sun.COM
181*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_value_create_boolean(boolean_t, nwam_value_t *);
182*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_value_create_boolean_array(boolean_t *, uint_t,
183*11767SAnurag.Maskey@Sun.COM    nwam_value_t *);
184*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_value_create_uint64(uint64_t, nwam_value_t *);
185*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_value_create_uint64_array(uint64_t *, uint_t, nwam_value_t *);
186*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_value_create_int64(int64_t, nwam_value_t *);
187*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_value_create_int64_array(int64_t *, uint_t, nwam_value_t *);
188*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_value_create_string(char *, nwam_value_t *);
189*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_value_create_string_array(char **, uint_t, nwam_value_t *);
190*11767SAnurag.Maskey@Sun.COM
191*11767SAnurag.Maskey@Sun.COMValues are returned from the _get_prop_value() functions, and the data
192*11767SAnurag.Maskey@Sun.COMcontained in them can be retrieved via the following functions:
193*11767SAnurag.Maskey@Sun.COM
194*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_value_get_boolean(nwam_value_t, boolean_t *);
195*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_value_get_boolean_array(nwam_value_t, boolean_t **, uint_t *);
196*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_value_get_uint64(nwam_value_t, uint64_t *);
197*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_value_get_uint64_array(nwam_value_t, uint64_t **, uint_t *);
198*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_value_get_int64(nwam_value_t, int64_t *);
199*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_value_get_int64_array(nwam_value_t, int64_t **, uint_t *);
200*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_value_get_string(nwam_value_t, char **);
201*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_value_get_string_array(nwam_value_t, char ***, uint_t *);
202*11767SAnurag.Maskey@Sun.COM
203*11767SAnurag.Maskey@Sun.COMType and number of value can be retrieved via:
204*11767SAnurag.Maskey@Sun.COM
205*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_value_get_type(nwam_value_t, nwam_value_type_t *);
206*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_value_get_numvalues(nwam_value_t, uint_t *);
207*11767SAnurag.Maskey@Sun.COM
208*11767SAnurag.Maskey@Sun.COMand a value is freed using:
209*11767SAnurag.Maskey@Sun.COM
210*11767SAnurag.Maskey@Sun.COMvoid nwam_value_free(nwam_value_t);
211*11767SAnurag.Maskey@Sun.COM
212*11767SAnurag.Maskey@Sun.COMFor property setting,  a typical set of events is to create the value,
213*11767SAnurag.Maskey@Sun.COMcall the appropriate set_prop_value() function, then free the value (values
214*11767SAnurag.Maskey@Sun.COMcan be safely freed prior to commit).  For retrieval, the type and
215*11767SAnurag.Maskey@Sun.COMnumber of values usually need to be tested before calling the appropriate
216*11767SAnurag.Maskey@Sun.COMretrieval function.  In this case, the value should not be freed until
217*11767SAnurag.Maskey@Sun.COMthe associated data is no longer needed.
218*11767SAnurag.Maskey@Sun.COM
219*11767SAnurag.Maskey@Sun.COMNCUs,  locations and ENMs can all specify conditional activation conditions.
220*11767SAnurag.Maskey@Sun.COMInterfaces are provided to convert a conditional activation predicate into
221*11767SAnurag.Maskey@Sun.COMa string,  or from a string to a parsed set of variables that comprise the
222*11767SAnurag.Maskey@Sun.COMcondition.  Additionally a function is provided to rate the specificity of
223*11767SAnurag.Maskey@Sun.COMthe activation condition, used to compare location conditions to choose
224*11767SAnurag.Maskey@Sun.COMthe most specific condition to activate in the case where the activation
225*11767SAnurag.Maskey@Sun.COMconditions of multiple locations are specified.
226*11767SAnurag.Maskey@Sun.COM
227*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_condition_to_condition_string(nwam_condition_object_type_t,
228*11767SAnurag.Maskey@Sun.COM    nwam_condition_t, const char *, char **);
229*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_condition_string_to_condition(const char *,
230*11767SAnurag.Maskey@Sun.COM    nwam_condition_object_type_t *, nwam_condition_t *, char **);
231*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_condition_rate(nwam_condition_object_type_t,
232*11767SAnurag.Maskey@Sun.COM    nwam_condition_t, uint64_t *);
233*11767SAnurag.Maskey@Sun.COM
234*11767SAnurag.Maskey@Sun.COMFor NCP entities:
235*11767SAnurag.Maskey@Sun.COM
236*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncp_create(const char *name, uint64_t flags,
237*11767SAnurag.Maskey@Sun.COM    nwam_ncp_handle_t *ncp);
238*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncp_read(const char *name, uint64_t flags,
239*11767SAnurag.Maskey@Sun.COM    nwam_ncp_handle_t *ncp);
240*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncp_copy(nwam_ncp_handle_t ncp, const char *newname,
241*11767SAnurag.Maskey@Sun.COM    nwam_ncp_handle_t *newncp);
242*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncp_walk_ncus(nwam_ncp_handle_t ncp,
243*11767SAnurag.Maskey@Sun.COM    int(*cb)(nwam_ncu_handle_t, void *), void *data, uint64_t flags, int *ret);
244*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncp_get_name(nwam_ncp_handle_t ncp, char **name);
245*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncp_activate(nwam_ncp_handle_t ncp);
246*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncp_deactivate(nwam_ncp_handle_t ncp);
247*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncp_destroy(nwam_ncp_handle_t ncp, uint64_t flags);
248*11767SAnurag.Maskey@Sun.COMvoid nwam_ncp_free(nwam_ncp_handle_t ncp);
249*11767SAnurag.Maskey@Sun.COM
250*11767SAnurag.Maskey@Sun.COMSince the NCP simply consists of the NCUs that comprise it, there is
251*11767SAnurag.Maskey@Sun.COMno NCP-specific commit() function - we simply read the NCP, walk the
252*11767SAnurag.Maskey@Sun.COMconstituent NCUs, reading, changing or committing them in turn.  The
253*11767SAnurag.Maskey@Sun.COMwalk can be modified via the flags option to only select specific NCU types
254*11767SAnurag.Maskey@Sun.COMand classes.
255*11767SAnurag.Maskey@Sun.COM
256*11767SAnurag.Maskey@Sun.COMEach NCP has a set of NCUs associated with it, each of which is created/modifed
257*11767SAnurag.Maskey@Sun.COMusing the functions below.
258*11767SAnurag.Maskey@Sun.COM
259*11767SAnurag.Maskey@Sun.COMFor NCU entities:
260*11767SAnurag.Maskey@Sun.COM
261*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncu_create(nwam_ncp_handle_t ncp, const char *name,
262*11767SAnurag.Maskey@Sun.COM    nwam_ncu_type_t type, nwam_ncu_class_t class, nwam_ncu_handle_t *ncu);
263*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncu_read(nwam_ncp_handle_t ncp, const char *name,
264*11767SAnurag.Maskey@Sun.COM    nwam_ncu_type_t type, uint64_t flags, nwam_ncu_handle_t *ncu);
265*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncu_copy(nwam_ncu_handle_t ncu, const char *newname,
266*11767SAnurag.Maskey@Sun.COM    nwam_ncu_handle_t *newncu);
267*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncu_commit(nwam_ncu_handle_t ncu, uint64_t flags);
268*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncu_destroy(nwam_ncu_handle_t ncu, uint64_t flags);
269*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncu_free(nwam_ncu_handle_t ncu);
270*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncu_validate(nwam_ncu_handle_t ncu, const char **errprop);
271*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncu_get_prop_value(nwam_ncu_handle_t ncu, const char *prop,
272*11767SAnurag.Maskey@Sun.COM    nwam_value_t *value);
273*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncu_get_prop_description(const char *prop,
274*11767SAnurag.Maskey@Sun.COM    const char **description);
275*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncu_delete_prop(nwam_ncu_handle_t ncu, const char *prop);
276*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncu_set_prop_value(nwam_ncu_handle_t ncu, const char *prop,
277*11767SAnurag.Maskey@Sun.COM    nwam_value_t value);
278*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncu_get_name(nwam_ncu_handle_t ncu, char **name);
279*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncu_set_name(nwam_ncu_handle_t ncu, const char *name);
280*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncu_get_read_only(nwam_ncu_handle_t ncu, boolean_t *readp);
281*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncu_validate_prop(nwam_ncu_handle_t ncu, const char *prop,
282*11767SAnurag.Maskey@Sun.COM    nwam_value_t value);
283*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncu_walk_props(nwam_ncu_handle_t ncu,
284*11767SAnurag.Maskey@Sun.COM    int (*func)(void *, const char *, nwam_value_t), void *data,
285*11767SAnurag.Maskey@Sun.COM    uint64_t flags, int *ret);
286*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncu_prop_get_type(const char *prop,
287*11767SAnurag.Maskey@Sun.COM    nwam_value_type_t *value_type);
288*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_ncu_get_ncp(nwam_ncu_handle_t ncu, nwam_ncp_handle_t *ncp);
289*11767SAnurag.Maskey@Sun.COM
290*11767SAnurag.Maskey@Sun.COMNCUs are manipulated via an nwam_ncu_handle_t.
291*11767SAnurag.Maskey@Sun.COM
292*11767SAnurag.Maskey@Sun.COMEach NCU has a set of properties associated with it. Each property can
293*11767SAnurag.Maskey@Sun.COMhave mutiple values associated with it, which are set or retrieved via an
294*11767SAnurag.Maskey@Sun.COMnwam_value_t.  The approach is similar to that used for Locations,   with
295*11767SAnurag.Maskey@Sun.COMthe difference that read/commit/destroy must specify an NCP.  Only two
296*11767SAnurag.Maskey@Sun.COMNCPs are supported at present, the automatic and user NCPs. Modification
297*11767SAnurag.Maskey@Sun.COMof the former is restricted to nwamd itself,  and attempts to modify
298*11767SAnurag.Maskey@Sun.COMthe automatic NCP's consituent NCUs will result in an NWAM_ENTITY_READ_ONLY
299*11767SAnurag.Maskey@Sun.COMerror.
300*11767SAnurag.Maskey@Sun.COM
301*11767SAnurag.Maskey@Sun.COMFor Location entities:
302*11767SAnurag.Maskey@Sun.COM
303*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_loc_create(const char *name, nwam_loc_handle_t *loc);
304*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_loc_read(const char *name, uint64_t flags,
305*11767SAnurag.Maskey@Sun.COM    nwam_loc_handle_t *loc);
306*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_loc_copy(nwam_loc_handle_t loc, const char *newname,
307*11767SAnurag.Maskey@Sun.COM    nwam_loc_handle_t *newloc);
308*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_walk_locs(int (*cb)(nwam_loc_handle_t loc, void *arg),
309*11767SAnurag.Maskey@Sun.COM    void *arg, uint64_t flags, int *cbretp);
310*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_loc_commit(nwam_loc_handle_t loc, uint64_t flags);
311*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_loc_destroy(nwam_loc_handle_t loc, uint64_t flags);
312*11767SAnurag.Maskey@Sun.COMvoid nwam_loc_free(nwam_loc_handle_t loc);
313*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_loc_validate(nwam_loc_handle_t loc, const char *errprop);
314*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_loc_walk_props(nwam_loc_handle_t loc,
315*11767SAnurag.Maskey@Sun.COM    int (*cb)(const char *, nwam_value_t **, void *),
316*11767SAnurag.Maskey@Sun.COM    void *arg, uint64_t flags, int *cbret);
317*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_loc_validate_prop(nwam_loc_handle_t loc,
318*11767SAnurag.Maskey@Sun.COM    const char *prop, nwam_value_t value);
319*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_loc_prop_get_type(const char *prop,
320*11767SAnurag.Maskey@Sun.COM    nwam_value_type_t *value_type);
321*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_loc_get_prop_value(nwam_loc_handle_t loc, const char *prop,
322*11767SAnurag.Maskey@Sun.COM    nwam_value_t *value);
323*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_loc_get_prop_description(const char *prop,
324*11767SAnurag.Maskey@Sun.COM    const char **description);
325*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_loc_delete_prop(nwam_loc_handle_t loc, const char *prop);
326*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_loc_set_prop_value(nwam_loc_handle_t loc, const char *prop,
327*11767SAnurag.Maskey@Sun.COM    nwam_value_t value);
328*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_loc_get_name(nwam_loc_handle_t loc, char **name);
329*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_loc_set_name(nwam_loc_handle_t loc, const char *name);
330*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_loc_activate(nwam_loc_handle_t loc);
331*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_loc_deactivate(nwam_loc_handle_t loc);
332*11767SAnurag.Maskey@Sun.COM
333*11767SAnurag.Maskey@Sun.COMLocations are manipulated via an nwam_loc_handle_t.
334*11767SAnurag.Maskey@Sun.COM
335*11767SAnurag.Maskey@Sun.COMA loc handle maps to an in-memory representation of a location; operations via
336*11767SAnurag.Maskey@Sun.COMthis interface manipulate the in-memory data.  In-memory data is read from
337*11767SAnurag.Maskey@Sun.COMpersistant storage via the nwam_loc_read() or nwam_walk_locs() functions, and
338*11767SAnurag.Maskey@Sun.COMwritten out to persistent storage via the nwam_loc_commit() function.  A loc
339*11767SAnurag.Maskey@Sun.COMmay be permanently removed from persistent storage with the nwam_loc_destroy()
340*11767SAnurag.Maskey@Sun.COMfunction.  Interactions with persistent storage will be nonblocking by default;
341*11767SAnurag.Maskey@Sun.COMthis behavior can be changed by passing the NWAM_FLAG_BLOCKING in the flags
342*11767SAnurag.Maskey@Sun.COMparameter.
343*11767SAnurag.Maskey@Sun.COM
344*11767SAnurag.Maskey@Sun.COMA typical sequence would be to allocate a loc handle, either by creating a
345*11767SAnurag.Maskey@Sun.COMnew loc (nwam_loc_create()) or by reading one from persistent storage (nwam_
346*11767SAnurag.Maskey@Sun.COMloc_read() or nwam_walk_locs()).  The various set/get/walk/validate/(de)activate
347*11767SAnurag.Maskey@Sun.COMfunctions may then be used to manipulate the loc; any changes made may then be
348*11767SAnurag.Maskey@Sun.COMcommitted to persistent storage via nwam_loc_commit().  A call to nwam_loc_
349*11767SAnurag.Maskey@Sun.COMfree() is required to release in-memory resources associated with the handle.
350*11767SAnurag.Maskey@Sun.COM
351*11767SAnurag.Maskey@Sun.COMThe flags parameter in the walk functions allows filtering of the locs that
352*11767SAnurag.Maskey@Sun.COMwill be examined, depending on the state of each loc.  Passing in
353*11767SAnurag.Maskey@Sun.COMNWAM_FLAG_STATE_ALL will examine all locs; specific state flags are defined
354*11767SAnurag.Maskey@Sun.COMin <libnwam.h>.
355*11767SAnurag.Maskey@Sun.COM
356*11767SAnurag.Maskey@Sun.COMLike NCUs, each loc has a set of properties associated with it. Loc properties
357*11767SAnurag.Maskey@Sun.COMare stored in nwam_value_t structures; see the Values section for how to store/
358*11767SAnurag.Maskey@Sun.COMretrieve using these.
359*11767SAnurag.Maskey@Sun.COM
360*11767SAnurag.Maskey@Sun.COMFor ENM entities:
361*11767SAnurag.Maskey@Sun.COM
362*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_enm_create(const char *name, const char *fmri,
363*11767SAnurag.Maskey@Sun.COM    nwam_enm_handle_t *enm);
364*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_enm_read(const char *name, uint64_t flags,
365*11767SAnurag.Maskey@Sun.COM    nwam_enm_handle_t *enm);
366*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_enm_copy(nwam_enm_handle_t enm, const char *newname,
367*11767SAnurag.Maskey@Sun.COM    nwam_enm_handle_t *newenm);
368*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_walk_enms(int (*cb)(nwam_enm_handle_t enm, void *arg),
369*11767SAnurag.Maskey@Sun.COM    void *arg, uint64_t flags, int *cbretp);
370*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_enm_commit(nwam_enm_handle_t enm, uint64_t flags);
371*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_enm_destroy(nwam_enm_handle_t enm, uint64_t flags);
372*11767SAnurag.Maskey@Sun.COMvoid nwam_enm_free(nwam_enm_handle_t enm);
373*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_enm_validate(nwam_enm_handle_t enm, const char *errprop);
374*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_enm_walk_props(nwam_enm_handle_t enm,
375*11767SAnurag.Maskey@Sun.COM    int (*cb)(const char *, nwam_value_t **, void *),
376*11767SAnurag.Maskey@Sun.COM    void *arg, uint64_t flags, int *cbret);
377*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_enm_validate_prop(nwam_enm_handle_t enm,
378*11767SAnurag.Maskey@Sun.COM    const char *prop, nwam_value_t value);
379*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_enm_prop_get_type(const char *prop,
380*11767SAnurag.Maskey@Sun.COM    nwam_value_type_t *value_type);
381*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_enm_get_prop_value(nwam_enm_handle_t enm, const char *prop,
382*11767SAnurag.Maskey@Sun.COM    nwam_value_t *value);
383*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_enm_get_prop_description(const char *prop,
384*11767SAnurag.Maskey@Sun.COM    const char **description);
385*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_enm_delete_prop(nwam_enm_handle_t enm, const char *prop);
386*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_enm_set_prop_value(nwam_enm_handle_t enm, const char *prop,
387*11767SAnurag.Maskey@Sun.COM    nwam_value_t value);
388*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_enm_get_name(nwam_enm_handle_t enm, char **name);
389*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_enm_set_name(nwam_enm_handle_t enm, const char *name);
390*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_enm_activate(nwam_enm_handle_t enm);
391*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_enm_deactivate(nwam_enm_handle_t enm);
392*11767SAnurag.Maskey@Sun.COM
393*11767SAnurag.Maskey@Sun.COMENMs are manipulated via an nwam_enm_handle_t, in a similar manner to
394*11767SAnurag.Maskey@Sun.COMNCUs and locations.
395*11767SAnurag.Maskey@Sun.COM
396*11767SAnurag.Maskey@Sun.COMThe flags parameter in the walk functions allows filtering of the ENMs that
397*11767SAnurag.Maskey@Sun.COMwill be examined, depending on the state of each ENM.  Passing in
398*11767SAnurag.Maskey@Sun.COMNWAM_FLAG_STATE_ALL will examine all ENMs; specific state flags are defined
399*11767SAnurag.Maskey@Sun.COMin <libnwam.h>.
400*11767SAnurag.Maskey@Sun.COM
401*11767SAnurag.Maskey@Sun.COMLike NCUs, each ENM has a set of properties associated with it. ENM properties
402*11767SAnurag.Maskey@Sun.COMare all single valued, though the interface is aligned with the NCU interface,
403*11767SAnurag.Maskey@Sun.COMwhich allows for multi-valued properties.  ENM properties are stored in
404*11767SAnurag.Maskey@Sun.COMnwam_value_t structures; see the Values section for how to store/retrieve
405*11767SAnurag.Maskey@Sun.COMusing these.
406*11767SAnurag.Maskey@Sun.COM
407*11767SAnurag.Maskey@Sun.COMFor known WLAN entities:
408*11767SAnurag.Maskey@Sun.COM
409*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_known_wlan_create(const char *name,
410*11767SAnurag.Maskey@Sun.COM    nwam_known_wlan_handle_t *kwhp);
411*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_known_wlan_read(const char *name, uint64_t flags,
412*11767SAnurag.Maskey@Sun.COM    nwam_known_wlan_handle_t *kwhp);
413*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_known_wlan_copy(nwam_known_wlan_handle_t kwh,
414*11767SAnurag.Maskey@Sun.COM    const char *newname, nwam_known_wlan_handle_t *newkwh);
415*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_walk_known_wlans(int (*cb)(nwam_known_wlan_handle_t, void *),
416*11767SAnurag.Maskey@Sun.COM    void *arg, uint64_t flags, int *cbretp);
417*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_known_wlan_commit(nwam_known_wlan_handle_t kwh,
418*11767SAnurag.Maskey@Sun.COM    uint64_t flags);
419*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_known_wlan_destroy(nwam_known_wlan_handle_t kwh,
420*11767SAnurag.Maskey@Sun.COM    uint64_t flags);
421*11767SAnurag.Maskey@Sun.COMvoid nwam_known_wlan_free(nwam_known_wlan_handle_t kwh);
422*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_known_wlan_validate(nwam_known_wlan_handle_t kwh,
423*11767SAnurag.Maskey@Sun.COM    const char *errprop);
424*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_known_wlan_walk_props(nwam_known_wlan_handle_t kwh,
425*11767SAnurag.Maskey@Sun.COM    int (*cb)(const char *, nwam_value_t **, void *),
426*11767SAnurag.Maskey@Sun.COM    void *arg, uint64_t flags, int *cbret);
427*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_known_wlan_validate_prop(nwam_known_wlan_handle_t kwh,
428*11767SAnurag.Maskey@Sun.COM    const char *prop, nwam_value_t value);
429*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_known_wlan_prop_get_type(const char *prop,
430*11767SAnurag.Maskey@Sun.COM    nwam_value_type_t *value_type);
431*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_known_wlan_get_prop_value(nwam_known_wlan_handle_t kwh,
432*11767SAnurag.Maskey@Sun.COM    const char *prop, nwam_value_t *value);
433*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_known_wlan_get_prop_description(const char *prop,
434*11767SAnurag.Maskey@Sun.COM    const char **description);
435*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_known_wlan_delete_prop(nwam_known_wlan_handle_t kwh,
436*11767SAnurag.Maskey@Sun.COM    const char *prop);
437*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_known_wlan_set_prop_value(nwam_known_wlan_handle_t kwh,
438*11767SAnurag.Maskey@Sun.COM    const char *prop, nwam_value_t value);
439*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_known_wlan_get_name(nwam_known_wlan_handle_t kwh,
440*11767SAnurag.Maskey@Sun.COM    char **name);
441*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_known_wlan_set_name(nwam_known_wlan_handle_t kwh,
442*11767SAnurag.Maskey@Sun.COM    const char *name);
443*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_known_wlan_add_to_known_wlan(const char *essid,
444*11767SAnurag.Maskey@Sun.COM    const char *bssid);
445*11767SAnurag.Maskey@Sun.COMnwam_error_t nwam_known_wlan_remove_from_known_wlan(const char *essid,
446*11767SAnurag.Maskey@Sun.COM    const char *bssid);
447*11767SAnurag.Maskey@Sun.COM
448*11767SAnurag.Maskey@Sun.COMKnown WLANs are manipulated via an nwam_known_wlan_handle_t, in a similar
449*11767SAnurag.Maskey@Sun.COMmanner to NCUs, locations and ENMs.
450*11767SAnurag.Maskey@Sun.COM
451*11767SAnurag.Maskey@Sun.COMLike ENMs, each known WLAN has a set of properties associated with it.
452*11767SAnurag.Maskey@Sun.COMKnown WLAN properties are stored in nwam_value_t structures; see the Values
453*11767SAnurag.Maskey@Sun.COMsection for how to store/retrieve using these.
454*11767SAnurag.Maskey@Sun.COM
455*11767SAnurag.Maskey@Sun.COMFor WLANs, we define a set of functions to ask nwamd to initiate a scan,
456*11767SAnurag.Maskey@Sun.COMselect a WLAN (and possibly add it to the known WLAN list) or set a WLAN
457*11767SAnurag.Maskey@Sun.COMkey:
458*11767SAnurag.Maskey@Sun.COM
459*11767SAnurag.Maskey@Sun.COM
460*11767SAnurag.Maskey@Sun.COMextern nwam_error_t nwam_wlan_scan(const char *linkname);
461*11767SAnurag.Maskey@Sun.COMextern nwam_error_t nwam_wlan_get_scan_results(const char *linkname,
462*11767SAnurag.Maskey@Sun.COM    uint_t *num_resultsp, nwam_wlan_t **wlansp);
463*11767SAnurag.Maskey@Sun.COMextern nwam_error_t nwam_wlan_select(const char *linkname,
464*11767SAnurag.Maskey@Sun.COM    const char *essid, const char *bssid, boolean_t add_to_known_wlans);
465*11767SAnurag.Maskey@Sun.COMextern nwam_error_t nwam_wlan_set_key(const char *linkname, const char *essid,
466*11767SAnurag.Maskey@Sun.COM    const char *bssid, uint32_t security_mode, uint_t keyslot, const char *key);
467*11767SAnurag.Maskey@Sun.COM
468*11767SAnurag.Maskey@Sun.COMFor Events:
469*11767SAnurag.Maskey@Sun.COM
470*11767SAnurag.Maskey@Sun.COMtypedef struct nwam_event {
471*11767SAnurag.Maskey@Sun.COM	uint32_t type;
472*11767SAnurag.Maskey@Sun.COM
473*11767SAnurag.Maskey@Sun.COM	union {
474*11767SAnurag.Maskey@Sun.COM		struct {
475*11767SAnurag.Maskey@Sun.COM			nwam_object_type_t object_type;
476*11767SAnurag.Maskey@Sun.COM			char name[NWAM_MAX_NAME_LEN];
477*11767SAnurag.Maskey@Sun.COM			nwam_action_t action;
478*11767SAnurag.Maskey@Sun.COM		} object_action;
479*11767SAnurag.Maskey@Sun.COM
480*11767SAnurag.Maskey@Sun.COM
481*11767SAnurag.Maskey@Sun.COM		... and so on for each message ...
482*11767SAnurag.Maskey@Sun.COM
483*11767SAnurag.Maskey@Sun.COM	} data;
484*11767SAnurag.Maskey@Sun.COM
485*11767SAnurag.Maskey@Sun.COM} *nwam_event_t;
486*11767SAnurag.Maskey@Sun.COM
487*11767SAnurag.Maskey@Sun.COMtype comes from the set of constants NWAM_EVENT_TYPE_*.
488*11767SAnurag.Maskey@Sun.COM
489*11767SAnurag.Maskey@Sun.COMRegistration and cancellation of registration are done via
490*11767SAnurag.Maskey@Sun.COM_init and _fini functions:
491*11767SAnurag.Maskey@Sun.COM
492*11767SAnurag.Maskey@Sun.COMextern nwam_error_t nwam_events_init(void);
493*11767SAnurag.Maskey@Sun.COMextern void nwam_events_fini(void);
494*11767SAnurag.Maskey@Sun.COM
495*11767SAnurag.Maskey@Sun.COMEvents can then be recieved by calling nwam_event_wait():
496*11767SAnurag.Maskey@Sun.COM
497*11767SAnurag.Maskey@Sun.COMextern nwam_error_t nwam_event_wait(nwam_event_t *);
498*11767SAnurag.Maskey@Sun.COM
499*11767SAnurag.Maskey@Sun.COMThe event can then be processed, and free via nwam_event_free();
500*11767SAnurag.Maskey@Sun.COM
501*11767SAnurag.Maskey@Sun.COMRETURN VALUES
502*11767SAnurag.Maskey@Sun.COM
503*11767SAnurag.Maskey@Sun.COMAll functions return an nwam_error_t if they return an error. Possible
504*11767SAnurag.Maskey@Sun.COMerrors are:
505*11767SAnurag.Maskey@Sun.COM
506*11767SAnurag.Maskey@Sun.COM	NWAM_SUCCESS			No error occured
507*11767SAnurag.Maskey@Sun.COM	NWAM_LIST_END			End of list
508*11767SAnurag.Maskey@Sun.COM	NWAM_INVALID_HANDLE		Entity handle is invalid
509*11767SAnurag.Maskey@Sun.COM	NWAM_HANDLE_UNBOUND		Handle not bound to entity
510*11767SAnurag.Maskey@Sun.COM	NWAM_INVALID_ARG		Argument is invalid
511*11767SAnurag.Maskey@Sun.COM	NWAM_PERMISSION_DENIED		Insufficient privileges for action
512*11767SAnurag.Maskey@Sun.COM	NWAM_NO_MEMORY			Out of memory
513*11767SAnurag.Maskey@Sun.COM	NWAM_ENTITY_EXISTS		Entity already exists
514*11767SAnurag.Maskey@Sun.COM	NWAM_ENTITY_IN_USE		Another user is interacting with entity
515*11767SAnurag.Maskey@Sun.COM	NWAM_ENTITY_COMMITTED		Entity already committed
516*11767SAnurag.Maskey@Sun.COM	NWAM_ENTITY_NOT_FOUND		Entity not found
517*11767SAnurag.Maskey@Sun.COM	NWAM_ENTITY_TYPE_MISMATCH	Entity value-type mismatch
518*11767SAnurag.Maskey@Sun.COM	NWAM_ENTITY_INVALID		Validation of entity failed
519*11767SAnurag.Maskey@Sun.COM	NWAM_ENTITY_INVALID_MEMBER	Entity member invalid
520*11767SAnurag.Maskey@Sun.COM	NWAM_ENTITY_INVALID_VALUE	Validation of entity value failed
521*11767SAnurag.Maskey@Sun.COM	NWAM_ENTITY_NO_VALUE		No value associated with entity
522*11767SAnurag.Maskey@Sun.COM	NWAM_ENTITY_MULTIPLE_VALUES,	Multiple values for entity
523*11767SAnurag.Maskey@Sun.COM	NWAM_ENTITY_READ_ONLY,		Entity is marked read only
524*11767SAnurag.Maskey@Sun.COM	NWAM_WALK_HALTED,		Callback function returned nonzero
525*11767SAnurag.Maskey@Sun.COM	NWAM_ERROR_BIND,		Could not bind to backend
526*11767SAnurag.Maskey@Sun.COM	NWAM_ERROR_BACKEND_INIT,	Could not initialize backend
527*11767SAnurag.Maskey@Sun.COM	NWAM_ERROR_INTERNAL		Internal error
528*11767SAnurag.Maskey@Sun.COM
529*11767SAnurag.Maskey@Sun.COMFILES
530*11767SAnurag.Maskey@Sun.COM	/lib/libnwam.so.1	shared object
531*11767SAnurag.Maskey@Sun.COM
532*11767SAnurag.Maskey@Sun.COMATTRIBUTES
533*11767SAnurag.Maskey@Sun.COM
534*11767SAnurag.Maskey@Sun.COM
535*11767SAnurag.Maskey@Sun.COMSEE ALSO
536*11767SAnurag.Maskey@Sun.COM	nwamd(1M), nwamcfg(1M), nwamadm(1M)
537