6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey# CDDL HEADER START
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey# The contents of this file are subject to the terms of the
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey# Common Development and Distribution License (the "License").
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey# You may not use this file except in compliance with the License.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey# or http://www.opensolaris.org/os/licensing.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey# See the License for the specific language governing permissions
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey# and limitations under the License.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey# When distributing Covered Code, include this CDDL HEADER in each
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey# If applicable, add the following below this CDDL HEADER, with the
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey# fields enclosed by brackets "[]" replaced with your own identifying
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey# information: Portions Copyright [yyyy] [name of copyright owner]
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey# CDDL HEADER END
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey# Copyright 2010 Sun Microsystems, Inc. All rights reserved.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey# Use is subject to license terms.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey# lib/libnwam/README
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyNAME
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey libnwam - Network Auto-Magic (NWAM) configuration and event
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey management library
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyDESCRIPTION
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyThe libnwam library is provided so that the various consumers of
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyNetwork Auto-Magic (NWAM) configuration information - i.e. the NWAM
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyGUI, the nwamcfg CLI and the NWAM daemon - have a consistent interface
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyfor retrieving and updating NWAM-related configuration data, abstracted
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyfrom the actual manner in which the data is persistently stored. It
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyprovides functionality to interact with the key components of NWAM
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyconfiguration, as described below. Additionally the library provides
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyfunctionality for system events to flow from the NWAM daemon to a
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyclient (like the GUI panel applet).
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyEach of these configuration components is referred to as an 'entity'.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyNetwork Configuration Units (NCUs): units that specify either link or
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyinterface (IP) configuration. An NCP consists of a set of NCUs, one for
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyeach datalink (physical, tunnel, aggregation etc), and one for each IP
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyinterface.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyNetwork Configuration Profiles (NCPs): A network configuration profile (NCP)
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeycomprises of a set of NCUs specifying configuration preferences to be applied
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeywhen that profile is active.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyLocations: A location consists of additional configuration preferences
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyto be applied when basic IP configuration is complete. Information
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeysuch as name service specification, proxies, etc. can be specified.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyExternal Network Modifiers (ENMs): units that specify an external service
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyor executable that modifies the network configuration. Properties of an
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyENM include an FMRI or Start and Stop exec strings, an optional environment
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeywhich will be activated when the ENM is started, an activation type specifying
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeywhen the ENM should be started (e.g. on user input, dependent on an NCU--
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyeither requiring or excluding a particular NCU, or always-on). Each ENM
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyalso has a read-only state property, which indicates whether or not the
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyENM has been activated by nwam.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyKnown WiFi Networks (known WLANs): units that specify configuration
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeydata associated with known WiFi access points that the user visits. If
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeya WLAN found by scanning is one of the known WLANs, NWAM will automatically
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyconnect. Priorities associated with known WLANs can also be manipulated
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyallowing users to prioritize particular WLANs.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyEvents
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyThe event interface allows a client of NWAM (usu. the GUI) to subscribe
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyto a stream of system events such as link and interface up/down,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeywireless scans, and times when NWAM needs the user to be queried.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyEvents types are in libnwam.h as NWAM_EVENTS_* and the actual bodies of
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeythe events are in nwam_events_msg_t. The semantics of the events have
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeybeen simplified so that none require response. They are all
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynotification.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyNWAM_EVENTS_SOURCE_{DEAD,BACK} provide notification that the nwam
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeydaemon has died or has reappeared. These are synthetic events in that
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeythey come from the library and not from nwamd.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyNWAM_EVENTS_NO_MAGIC provides notification that nwam couldn't make a
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeydetermination of what to do without user guidance. This event provides
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyinformation that can be used to ask the user if he wants to pick a
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeywireless lan although in some cases nwam might have no idea what is
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyintended.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyNWAM_EVENTS_IF_{STATE,REMOVED} provide information about changes in
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyinterface state or the removal of an interface.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyNWAM_EVENTS_LINK_{STATE, REMOVED} provides information about changes in
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeylink state or the removal of a link.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyNWAM_EVENTS_SCAN_REPORT is used to communicate information about
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeywireless networks encountered.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyPersistent configuration state of entities is stored in project-private
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/etc/nwam configuration files, and the details of storage are hidden
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyfrom libnwam consumers.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyAccess to entities is attained via an entity-specific handle. These
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyhandles can be obtained via calls to nwam_<entity>_create() or
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_<entity>_read(), and freed (in memory) via calls to nwam_<entity>_free().
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_<entity>_create() will create an in-memory representation of the
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyentity, but that entity will not be stored until nwam_<entity>_commit() is
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeycalled. Persistently stored entitites are retrieved via nwam_<entity>_read(),
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeycan be modified in-memory, and later persistently committed to storage
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyvia nwam_<entity>_commit(). Entities can also be copied with
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_<entity>_copy().
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyAll changes made after binding a handle to an entity, and prior to calling
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_<entity>_commit() are carried out on the in-memory representation of that
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyentity. nwam_<entity>_commit() updates persistent storage in an all-or-none
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeytransactional manner, applying the (possibly changed) in-memory representation
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyto persistent storage atomically.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyTo destroy an entity in persistent storage, nwam_<entity>_destroy() is
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyused. This is distinct from nwam_<entity>_free(), which simply frees
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeythe in-memory representation - destroy both removes the object from
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeypersistent storage, and frees it in memory.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyTo summarize, the pattern of interactions with an entity is
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey - nwam_<entity>_read(), nwam_<entity>_create() or nwam_<entity>_copy()
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey - possibly modify entity properties
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey - nwam_<entity>_commit() or nwam_<entity>_destroy()
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey - nwam_<entity>_handle_free()
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyUnless otherwise stated functions in libnwam are MT-safe. The
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyatomicity of _commit() and _read() operations is guaranteed - i.e.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey_commit() is guaranteed to deliver all property changes to persistent
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeystorage, while _read() is guaranteed to read a consistent view of the
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyentity (i.e. _read() cannot collide with another entity _commit()ting
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeychanges). However, it is possible that a _read() will retrieve an
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyoutdated view of an entity, if after the _read() completes, another
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyentity _commit()s changes. In other words, lost updates are possible.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyThese are permitted given the nature of the entities changing NWAM
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyconfiguration (the CLI and GUI) - it seems intuitive that the most
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyrecent update best captures user intent.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyEntity validation on an in-memory representation can be explicitly requested
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyvia a call to nwam_<entity>_validate(), and individual property values
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeycan be validated via nwam_<entity>_validate_prop().
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyStorage and retrieval of properties is done via nwam_<entity>_set_prop_value()
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyand nwam_<entity>_get_prop_value(). These functions require an nwam_value_t as
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeya parameter, which is created via the nwam_value_create_<type>() family
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyof functions. Data can be retrieved from the nwam_value_t via the
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_get_<type>() family of functions. Once a property has been
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyset, the associated nwam_value_t can be immediately freed. For retrieval,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeythe nwam_value_t should be freed when the value(s) are no longer needed.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyA property can also be delete with nwam_<entity>_delete_prop().
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyImplicit validation occurs as part of the nwam_<entity>_set_prop_value()
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyand nwam_<entity>_commit() functions.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyINTERFACES
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyFor error handling:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyconst char *nwam_strerror(nwam_error_t error);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyFor values:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyValues can be any of the following types:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_VALUE_TYPE_BOOLEAN
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_VALUE_TYPE_UINT64
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_VALUE_TYPE_INT64
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_VALUE_TYPE_STRING
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyand are possibly multi-valued. An nwam_value_t must be created in order
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyto set property values in libnwam, this is done via the follwing functions:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_value_create_boolean(boolean_t, nwam_value_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_value_create_boolean_array(boolean_t *, uint_t,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_value_create_uint64(uint64_t, nwam_value_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_value_create_uint64_array(uint64_t *, uint_t, nwam_value_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_value_create_int64(int64_t, nwam_value_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_value_create_int64_array(int64_t *, uint_t, nwam_value_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_value_create_string(char *, nwam_value_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_value_create_string_array(char **, uint_t, nwam_value_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyValues are returned from the _get_prop_value() functions, and the data
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeycontained in them can be retrieved via the following functions:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_value_get_boolean(nwam_value_t, boolean_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_value_get_boolean_array(nwam_value_t, boolean_t **, uint_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_value_get_uint64(nwam_value_t, uint64_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_value_get_uint64_array(nwam_value_t, uint64_t **, uint_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_value_get_int64(nwam_value_t, int64_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_value_get_int64_array(nwam_value_t, int64_t **, uint_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_value_get_string(nwam_value_t, char **);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_value_get_string_array(nwam_value_t, char ***, uint_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyType and number of value can be retrieved via:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_value_get_type(nwam_value_t, nwam_value_type_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_value_get_numvalues(nwam_value_t, uint_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyand a value is freed using:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyvoid nwam_value_free(nwam_value_t);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyFor property setting, a typical set of events is to create the value,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeycall the appropriate set_prop_value() function, then free the value (values
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeycan be safely freed prior to commit). For retrieval, the type and
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynumber of values usually need to be tested before calling the appropriate
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyretrieval function. In this case, the value should not be freed until
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeythe associated data is no longer needed.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyNCUs, locations and ENMs can all specify conditional activation conditions.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyInterfaces are provided to convert a conditional activation predicate into
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeya string, or from a string to a parsed set of variables that comprise the
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeycondition. Additionally a function is provided to rate the specificity of
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeythe activation condition, used to compare location conditions to choose
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeythe most specific condition to activate in the case where the activation
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyconditions of multiple locations are specified.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_condition_to_condition_string(nwam_condition_object_type_t,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_condition_t, const char *, char **);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_condition_string_to_condition(const char *,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_condition_object_type_t *, nwam_condition_t *, char **);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_condition_rate(nwam_condition_object_type_t,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_condition_t, uint64_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyFor NCP entities:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncp_create(const char *name, uint64_t flags,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_ncp_handle_t *ncp);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncp_read(const char *name, uint64_t flags,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_ncp_handle_t *ncp);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncp_copy(nwam_ncp_handle_t ncp, const char *newname,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_ncp_handle_t *newncp);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncp_walk_ncus(nwam_ncp_handle_t ncp,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int(*cb)(nwam_ncu_handle_t, void *), void *data, uint64_t flags, int *ret);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncp_get_name(nwam_ncp_handle_t ncp, char **name);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncp_activate(nwam_ncp_handle_t ncp);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncp_deactivate(nwam_ncp_handle_t ncp);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncp_destroy(nwam_ncp_handle_t ncp, uint64_t flags);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyvoid nwam_ncp_free(nwam_ncp_handle_t ncp);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeySince the NCP simply consists of the NCUs that comprise it, there is
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyno NCP-specific commit() function - we simply read the NCP, walk the
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyconstituent NCUs, reading, changing or committing them in turn. The
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeywalk can be modified via the flags option to only select specific NCU types
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyand classes.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyEach NCP has a set of NCUs associated with it, each of which is created/modifed
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyusing the functions below.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyFor NCU entities:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncu_create(nwam_ncp_handle_t ncp, const char *name,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_ncu_type_t type, nwam_ncu_class_t class, nwam_ncu_handle_t *ncu);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncu_read(nwam_ncp_handle_t ncp, const char *name,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_ncu_type_t type, uint64_t flags, nwam_ncu_handle_t *ncu);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncu_copy(nwam_ncu_handle_t ncu, const char *newname,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_ncu_handle_t *newncu);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncu_commit(nwam_ncu_handle_t ncu, uint64_t flags);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncu_destroy(nwam_ncu_handle_t ncu, uint64_t flags);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncu_free(nwam_ncu_handle_t ncu);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncu_validate(nwam_ncu_handle_t ncu, const char **errprop);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncu_get_prop_value(nwam_ncu_handle_t ncu, const char *prop,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_t *value);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncu_get_prop_description(const char *prop,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char **description);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncu_delete_prop(nwam_ncu_handle_t ncu, const char *prop);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncu_set_prop_value(nwam_ncu_handle_t ncu, const char *prop,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_t value);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncu_get_name(nwam_ncu_handle_t ncu, char **name);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncu_set_name(nwam_ncu_handle_t ncu, const char *name);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncu_get_read_only(nwam_ncu_handle_t ncu, boolean_t *readp);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncu_validate_prop(nwam_ncu_handle_t ncu, const char *prop,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_t value);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncu_walk_props(nwam_ncu_handle_t ncu,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int (*func)(void *, const char *, nwam_value_t), void *data,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint64_t flags, int *ret);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncu_prop_get_type(const char *prop,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_type_t *value_type);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_ncu_get_ncp(nwam_ncu_handle_t ncu, nwam_ncp_handle_t *ncp);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyNCUs are manipulated via an nwam_ncu_handle_t.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyEach NCU has a set of properties associated with it. Each property can
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyhave mutiple values associated with it, which are set or retrieved via an
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_t. The approach is similar to that used for Locations, with
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeythe difference that read/commit/destroy must specify an NCP. Only two
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyNCPs are supported at present, the automatic and user NCPs. Modification
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyof the former is restricted to nwamd itself, and attempts to modify
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeythe automatic NCP's consituent NCUs will result in an NWAM_ENTITY_READ_ONLY
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyerror.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyFor Location entities:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_loc_create(const char *name, nwam_loc_handle_t *loc);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_loc_read(const char *name, uint64_t flags,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_loc_handle_t *loc);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_loc_copy(nwam_loc_handle_t loc, const char *newname,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_loc_handle_t *newloc);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_walk_locs(int (*cb)(nwam_loc_handle_t loc, void *arg),
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey void *arg, uint64_t flags, int *cbretp);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_loc_commit(nwam_loc_handle_t loc, uint64_t flags);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_loc_destroy(nwam_loc_handle_t loc, uint64_t flags);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyvoid nwam_loc_free(nwam_loc_handle_t loc);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_loc_validate(nwam_loc_handle_t loc, const char *errprop);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_loc_walk_props(nwam_loc_handle_t loc,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int (*cb)(const char *, nwam_value_t **, void *),
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey void *arg, uint64_t flags, int *cbret);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_loc_validate_prop(nwam_loc_handle_t loc,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char *prop, nwam_value_t value);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_loc_prop_get_type(const char *prop,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_type_t *value_type);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_loc_get_prop_value(nwam_loc_handle_t loc, const char *prop,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_t *value);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_loc_get_prop_description(const char *prop,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char **description);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_loc_delete_prop(nwam_loc_handle_t loc, const char *prop);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_loc_set_prop_value(nwam_loc_handle_t loc, const char *prop,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_t value);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_loc_get_name(nwam_loc_handle_t loc, char **name);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_loc_set_name(nwam_loc_handle_t loc, const char *name);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_loc_activate(nwam_loc_handle_t loc);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_loc_deactivate(nwam_loc_handle_t loc);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyLocations are manipulated via an nwam_loc_handle_t.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyA loc handle maps to an in-memory representation of a location; operations via
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeythis interface manipulate the in-memory data. In-memory data is read from
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeypersistant storage via the nwam_loc_read() or nwam_walk_locs() functions, and
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeywritten out to persistent storage via the nwam_loc_commit() function. A loc
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeymay be permanently removed from persistent storage with the nwam_loc_destroy()
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyfunction. Interactions with persistent storage will be nonblocking by default;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeythis behavior can be changed by passing the NWAM_FLAG_BLOCKING in the flags
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyparameter.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyA typical sequence would be to allocate a loc handle, either by creating a
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynew loc (nwam_loc_create()) or by reading one from persistent storage (nwam_
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyloc_read() or nwam_walk_locs()). The various set/get/walk/validate/(de)activate
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyfunctions may then be used to manipulate the loc; any changes made may then be
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeycommitted to persistent storage via nwam_loc_commit(). A call to nwam_loc_
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyfree() is required to release in-memory resources associated with the handle.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyThe flags parameter in the walk functions allows filtering of the locs that
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeywill be examined, depending on the state of each loc. Passing in
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyNWAM_FLAG_STATE_ALL will examine all locs; specific state flags are defined
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyin <libnwam.h>.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyLike NCUs, each loc has a set of properties associated with it. Loc properties
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyare stored in nwam_value_t structures; see the Values section for how to store/
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyretrieve using these.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyFor ENM entities:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_enm_create(const char *name, const char *fmri,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_enm_handle_t *enm);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_enm_read(const char *name, uint64_t flags,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_enm_handle_t *enm);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_enm_copy(nwam_enm_handle_t enm, const char *newname,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_enm_handle_t *newenm);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_walk_enms(int (*cb)(nwam_enm_handle_t enm, void *arg),
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey void *arg, uint64_t flags, int *cbretp);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_enm_commit(nwam_enm_handle_t enm, uint64_t flags);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_enm_destroy(nwam_enm_handle_t enm, uint64_t flags);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyvoid nwam_enm_free(nwam_enm_handle_t enm);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_enm_validate(nwam_enm_handle_t enm, const char *errprop);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_enm_walk_props(nwam_enm_handle_t enm,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int (*cb)(const char *, nwam_value_t **, void *),
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey void *arg, uint64_t flags, int *cbret);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_enm_validate_prop(nwam_enm_handle_t enm,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char *prop, nwam_value_t value);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_enm_prop_get_type(const char *prop,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_type_t *value_type);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_enm_get_prop_value(nwam_enm_handle_t enm, const char *prop,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_t *value);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_enm_get_prop_description(const char *prop,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char **description);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_enm_delete_prop(nwam_enm_handle_t enm, const char *prop);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_enm_set_prop_value(nwam_enm_handle_t enm, const char *prop,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_t value);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_enm_get_name(nwam_enm_handle_t enm, char **name);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_enm_set_name(nwam_enm_handle_t enm, const char *name);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_enm_activate(nwam_enm_handle_t enm);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_enm_deactivate(nwam_enm_handle_t enm);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyENMs are manipulated via an nwam_enm_handle_t, in a similar manner to
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyNCUs and locations.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyThe flags parameter in the walk functions allows filtering of the ENMs that
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeywill be examined, depending on the state of each ENM. Passing in
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyNWAM_FLAG_STATE_ALL will examine all ENMs; specific state flags are defined
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyin <libnwam.h>.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyLike NCUs, each ENM has a set of properties associated with it. ENM properties
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyare all single valued, though the interface is aligned with the NCU interface,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeywhich allows for multi-valued properties. ENM properties are stored in
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_value_t structures; see the Values section for how to store/retrieve
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyusing these.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyFor known WLAN entities:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_known_wlan_create(const char *name,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_known_wlan_handle_t *kwhp);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_known_wlan_read(const char *name, uint64_t flags,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_known_wlan_handle_t *kwhp);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_known_wlan_copy(nwam_known_wlan_handle_t kwh,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char *newname, nwam_known_wlan_handle_t *newkwh);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_walk_known_wlans(int (*cb)(nwam_known_wlan_handle_t, void *),
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey void *arg, uint64_t flags, int *cbretp);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_known_wlan_commit(nwam_known_wlan_handle_t kwh,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint64_t flags);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_known_wlan_destroy(nwam_known_wlan_handle_t kwh,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint64_t flags);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyvoid nwam_known_wlan_free(nwam_known_wlan_handle_t kwh);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_known_wlan_validate(nwam_known_wlan_handle_t kwh,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char *errprop);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_known_wlan_walk_props(nwam_known_wlan_handle_t kwh,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey int (*cb)(const char *, nwam_value_t **, void *),
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey void *arg, uint64_t flags, int *cbret);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_known_wlan_validate_prop(nwam_known_wlan_handle_t kwh,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char *prop, nwam_value_t value);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_known_wlan_prop_get_type(const char *prop,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_value_type_t *value_type);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_known_wlan_get_prop_value(nwam_known_wlan_handle_t kwh,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char *prop, nwam_value_t *value);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_known_wlan_get_prop_description(const char *prop,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char **description);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_known_wlan_delete_prop(nwam_known_wlan_handle_t kwh,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char *prop);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_known_wlan_set_prop_value(nwam_known_wlan_handle_t kwh,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char *prop, nwam_value_t value);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_known_wlan_get_name(nwam_known_wlan_handle_t kwh,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey char **name);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_known_wlan_set_name(nwam_known_wlan_handle_t kwh,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char *name);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_known_wlan_add_to_known_wlan(const char *essid,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char *bssid);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeynwam_error_t nwam_known_wlan_remove_from_known_wlan(const char *essid,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char *bssid);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyKnown WLANs are manipulated via an nwam_known_wlan_handle_t, in a similar
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeymanner to NCUs, locations and ENMs.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyLike ENMs, each known WLAN has a set of properties associated with it.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyKnown WLAN properties are stored in nwam_value_t structures; see the Values
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeysection for how to store/retrieve using these.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyFor WLANs, we define a set of functions to ask nwamd to initiate a scan,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyselect a WLAN (and possibly add it to the known WLAN list) or set a WLAN
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeykey:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern nwam_error_t nwam_wlan_scan(const char *linkname);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern nwam_error_t nwam_wlan_get_scan_results(const char *linkname,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint_t *num_resultsp, nwam_wlan_t **wlansp);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern nwam_error_t nwam_wlan_select(const char *linkname,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char *essid, const char *bssid, boolean_t add_to_known_wlans);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern nwam_error_t nwam_wlan_set_key(const char *linkname, const char *essid,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char *bssid, uint32_t security_mode, uint_t keyslot, const char *key);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyFor Events:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeytypedef struct nwam_event {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey uint32_t type;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey union {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey struct {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_object_type_t object_type;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey char name[NWAM_MAX_NAME_LEN];
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_action_t action;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey } object_action;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey ... and so on for each message ...
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey } data;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey} *nwam_event_t;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeytype comes from the set of constants NWAM_EVENT_TYPE_*.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyRegistration and cancellation of registration are done via
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey_init and _fini functions:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern nwam_error_t nwam_events_init(void);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern void nwam_events_fini(void);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyEvents can then be recieved by calling nwam_event_wait():
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern nwam_error_t nwam_event_wait(nwam_event_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyThe event can then be processed, and free via nwam_event_free();
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyRETURN VALUES
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyAll functions return an nwam_error_t if they return an error. Possible
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyerrors are:
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_SUCCESS No error occured
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_LIST_END End of list
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_INVALID_HANDLE Entity handle is invalid
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_HANDLE_UNBOUND Handle not bound to entity
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_INVALID_ARG Argument is invalid
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_PERMISSION_DENIED Insufficient privileges for action
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_NO_MEMORY Out of memory
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_ENTITY_EXISTS Entity already exists
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_ENTITY_IN_USE Another user is interacting with entity
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_ENTITY_COMMITTED Entity already committed
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_ENTITY_NOT_FOUND Entity not found
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_ENTITY_TYPE_MISMATCH Entity value-type mismatch
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_ENTITY_INVALID Validation of entity failed
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_ENTITY_INVALID_MEMBER Entity member invalid
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_ENTITY_INVALID_VALUE Validation of entity value failed
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_ENTITY_NO_VALUE No value associated with entity
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_ENTITY_MULTIPLE_VALUES, Multiple values for entity
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_ENTITY_READ_ONLY, Entity is marked read only
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_WALK_HALTED, Callback function returned nonzero
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_ERROR_BIND, Could not bind to backend
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_ERROR_BACKEND_INIT, Could not initialize backend
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey NWAM_ERROR_INTERNAL Internal error
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyFILES
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey /lib/libnwam.so.1 shared object
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeyATTRIBUTES
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. MaskeySEE ALSO
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwamd(1M), nwamcfg(1M), nwamadm(1M)