1b00044a2SJames Carlson /*
2b00044a2SJames Carlson  * CDDL HEADER START
3b00044a2SJames Carlson  *
4b00044a2SJames Carlson  * The contents of this file are subject to the terms of the
5b00044a2SJames Carlson  * Common Development and Distribution License (the "License").
6b00044a2SJames Carlson  * You may not use this file except in compliance with the License.
7b00044a2SJames Carlson  *
8b00044a2SJames Carlson  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9b00044a2SJames Carlson  * or http://www.opensolaris.org/os/licensing.
10b00044a2SJames Carlson  * See the License for the specific language governing permissions
11b00044a2SJames Carlson  * and limitations under the License.
12b00044a2SJames Carlson  *
13b00044a2SJames Carlson  * When distributing Covered Code, include this CDDL HEADER in each
14b00044a2SJames Carlson  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15b00044a2SJames Carlson  * If applicable, add the following below this CDDL HEADER, with the
16b00044a2SJames Carlson  * fields enclosed by brackets "[]" replaced with your own identifying
17b00044a2SJames Carlson  * information: Portions Copyright [yyyy] [name of copyright owner]
18b00044a2SJames Carlson  *
19b00044a2SJames Carlson  * CDDL HEADER END
20b00044a2SJames Carlson  */
21b00044a2SJames Carlson /*
22f6da83d4SAnurag S. Maskey  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
23*b31320a7SChris Fraire  * Copyright (c) 2016, Chris Fraire <cfraire@me.com>.
24b00044a2SJames Carlson  */
25b00044a2SJames Carlson 
266ba597c5SAnurag S. Maskey /*
276ba597c5SAnurag S. Maskey  * This file contains data structures and APIs of libnwam.
286ba597c5SAnurag S. Maskey  * Implementation is MT safe.
296ba597c5SAnurag S. Maskey  */
30b00044a2SJames Carlson #ifndef _LIBNWAM_H
31b00044a2SJames Carlson #define	_LIBNWAM_H
32b00044a2SJames Carlson 
336ba597c5SAnurag S. Maskey #ifdef	__cplusplus
346ba597c5SAnurag S. Maskey extern "C" {
356ba597c5SAnurag S. Maskey #endif
366ba597c5SAnurag S. Maskey 
376ba597c5SAnurag S. Maskey #include <bsm/adt.h>
386ba597c5SAnurag S. Maskey #include <net/if.h>
396ba597c5SAnurag S. Maskey #include <inet/ip.h>
406ba597c5SAnurag S. Maskey #include <inet/ip6.h>
416ba597c5SAnurag S. Maskey #include <sys/types.h>
426ba597c5SAnurag S. Maskey #include <sys/socket.h>
43b00044a2SJames Carlson 
44b00044a2SJames Carlson /*
456ba597c5SAnurag S. Maskey  * Note - several interface functions below are not utilized in ON, but are
466ba597c5SAnurag S. Maskey  * used by the GNOME nwam-manager.  One example is nwam_enm_get_name().
47b00044a2SJames Carlson  */
48b00044a2SJames Carlson 
496ba597c5SAnurag S. Maskey /*
506ba597c5SAnurag S. Maskey  * Common definitions
516ba597c5SAnurag S. Maskey  */
526ba597c5SAnurag S. Maskey 
536ba597c5SAnurag S. Maskey /* nwam FMRI and properties */
546ba597c5SAnurag S. Maskey #define	NWAM_FMRI		"svc:/network/physical:nwam"
556ba597c5SAnurag S. Maskey #define	NWAM_PG			"nwamd"
566ba597c5SAnurag S. Maskey #define	NWAM_PROP_ACTIVE_NCP	"active_ncp"
576ba597c5SAnurag S. Maskey 
586ba597c5SAnurag S. Maskey /* nwam flags used for read/commit */
596ba597c5SAnurag S. Maskey /* Block waiting for commit if necessary */
606ba597c5SAnurag S. Maskey #define	NWAM_FLAG_BLOCKING		0x00000001
616ba597c5SAnurag S. Maskey /* Committed object must be new */
626ba597c5SAnurag S. Maskey #define	NWAM_FLAG_CREATE		0x00000002
636ba597c5SAnurag S. Maskey /* Tell destroy functions not to free handle */
646ba597c5SAnurag S. Maskey #define	NWAM_FLAG_DO_NOT_FREE		0x00000004
656ba597c5SAnurag S. Maskey /* Object is being enabled/disabled */
666ba597c5SAnurag S. Maskey #define	NWAM_FLAG_ENTITY_ENABLE		0x00000008
676ba597c5SAnurag S. Maskey /* Known WLAN being read, committed or destroyed */
686ba597c5SAnurag S. Maskey #define	NWAM_FLAG_ENTITY_KNOWN_WLAN	0x00000010
696ba597c5SAnurag S. Maskey 
706ba597c5SAnurag S. Maskey /* nwam flags used for selecting ncu type for walk */
716ba597c5SAnurag S. Maskey #define	NWAM_FLAG_NCU_TYPE_LINK		0x00000001ULL << 32
726ba597c5SAnurag S. Maskey #define	NWAM_FLAG_NCU_TYPE_INTERFACE	0x00000002ULL << 32
736ba597c5SAnurag S. Maskey #define	NWAM_FLAG_NCU_TYPE_ALL		(NWAM_FLAG_NCU_TYPE_LINK | \
746ba597c5SAnurag S. Maskey 					NWAM_FLAG_NCU_TYPE_INTERFACE)
756ba597c5SAnurag S. Maskey 
766ba597c5SAnurag S. Maskey /* nwam flags used for selecting ncu class for walk */
776ba597c5SAnurag S. Maskey #define	NWAM_FLAG_NCU_CLASS_PHYS		0x00000100ULL << 32
786ba597c5SAnurag S. Maskey #define	NWAM_FLAG_NCU_CLASS_IP			0x00010000ULL << 32
796ba597c5SAnurag S. Maskey #define	NWAM_FLAG_NCU_CLASS_ALL_LINK		NWAM_FLAG_NCU_CLASS_PHYS
806ba597c5SAnurag S. Maskey #define	NWAM_FLAG_NCU_CLASS_ALL_INTERFACE	NWAM_FLAG_NCU_CLASS_IP
816ba597c5SAnurag S. Maskey #define	NWAM_FLAG_NCU_CLASS_ALL		(NWAM_FLAG_NCU_CLASS_ALL_INTERFACE | \
826ba597c5SAnurag S. Maskey 					NWAM_FLAG_NCU_CLASS_ALL_LINK)
836ba597c5SAnurag S. Maskey #define	NWAM_FLAG_NCU_TYPE_CLASS_ALL		(NWAM_FLAG_NCU_CLASS_ALL | \
846ba597c5SAnurag S. Maskey 						NWAM_FLAG_NCU_TYPE_ALL)
856ba597c5SAnurag S. Maskey 
866ba597c5SAnurag S. Maskey /* flags used for selecting activation for walk */
876ba597c5SAnurag S. Maskey #define	NWAM_FLAG_ACTIVATION_MODE_MANUAL		0x000000001ULL << 32
886ba597c5SAnurag S. Maskey #define	NWAM_FLAG_ACTIVATION_MODE_SYSTEM		0x000000002ULL << 32
896ba597c5SAnurag S. Maskey #define	NWAM_FLAG_ACTIVATION_MODE_PRIORITIZED		0x000000004ULL << 32
906ba597c5SAnurag S. Maskey #define	NWAM_FLAG_ACTIVATION_MODE_CONDITIONAL_ANY	0x000000008ULL << 32
916ba597c5SAnurag S. Maskey #define	NWAM_FLAG_ACTIVATION_MODE_CONDITIONAL_ALL	0x000000010ULL << 32
926ba597c5SAnurag S. Maskey #define	NWAM_FLAG_ACTIVATION_MODE_ALL	(NWAM_FLAG_ACTIVATION_MODE_MANUAL |\
936ba597c5SAnurag S. Maskey 					NWAM_FLAG_ACTIVATION_MODE_SYSTEM |\
946ba597c5SAnurag S. Maskey 					NWAM_FLAG_ACTIVATION_MODE_PRIORITIZED |\
956ba597c5SAnurag S. Maskey 				NWAM_FLAG_ACTIVATION_MODE_CONDITIONAL_ANY |\
966ba597c5SAnurag S. Maskey 				NWAM_FLAG_ACTIVATION_MODE_CONDITIONAL_ALL)
976ba597c5SAnurag S. Maskey 
986ba597c5SAnurag S. Maskey /* Walk known WLANs in order of priority (lowest first) */
996ba597c5SAnurag S. Maskey #define	NWAM_FLAG_KNOWN_WLAN_WALK_PRIORITY_ORDER	0x000010000ULL << 32
1006ba597c5SAnurag S. Maskey /* Do not perform priority collision checking for known WLANs */
1016ba597c5SAnurag S. Maskey #define	NWAM_FLAG_KNOWN_WLAN_NO_COLLISION_CHECK		0x000020000ULL << 32
1026ba597c5SAnurag S. Maskey 
1036ba597c5SAnurag S. Maskey /* nwam return codes */
1046ba597c5SAnurag S. Maskey typedef enum {
1056ba597c5SAnurag S. Maskey 	NWAM_SUCCESS,			/* No error occured */
1066ba597c5SAnurag S. Maskey 	NWAM_LIST_END,			/* End of list reached */
1076ba597c5SAnurag S. Maskey 	NWAM_INVALID_HANDLE,		/* Entity handle is invalid */
1086ba597c5SAnurag S. Maskey 	NWAM_HANDLE_UNBOUND,		/* Handle not bound to entity */
1096ba597c5SAnurag S. Maskey 	NWAM_INVALID_ARG,		/* Argument is invalid */
1106ba597c5SAnurag S. Maskey 	NWAM_PERMISSION_DENIED,		/* Insufficient privileges for action */
1116ba597c5SAnurag S. Maskey 	NWAM_NO_MEMORY,			/* Out of memory */
1126ba597c5SAnurag S. Maskey 	NWAM_ENTITY_EXISTS,		/* Entity already exists */
1136ba597c5SAnurag S. Maskey 	NWAM_ENTITY_IN_USE,		/* Entity in use */
1146ba597c5SAnurag S. Maskey 	NWAM_ENTITY_COMMITTED,		/* Entity already committed */
1156ba597c5SAnurag S. Maskey 	NWAM_ENTITY_NOT_FOUND,		/* Entity not found */
1166ba597c5SAnurag S. Maskey 	NWAM_ENTITY_TYPE_MISMATCH,	/* Entity type mismatch */
1176ba597c5SAnurag S. Maskey 	NWAM_ENTITY_INVALID,		/* Validation of entity failed */
1186ba597c5SAnurag S. Maskey 	NWAM_ENTITY_INVALID_MEMBER,	/* Entity member invalid */
1196ba597c5SAnurag S. Maskey 	NWAM_ENTITY_INVALID_STATE,	/* Entity is not in appropriate state */
1206ba597c5SAnurag S. Maskey 	NWAM_ENTITY_INVALID_VALUE,	/* Validation of entity value failed */
1216ba597c5SAnurag S. Maskey 	NWAM_ENTITY_MISSING_MEMBER,	/* Required member is missing */
1226ba597c5SAnurag S. Maskey 	NWAM_ENTITY_NO_VALUE,		/* No value associated with entity */
1236ba597c5SAnurag S. Maskey 	NWAM_ENTITY_MULTIPLE_VALUES,	/* Multiple values for entity */
1246ba597c5SAnurag S. Maskey 	NWAM_ENTITY_READ_ONLY,		/* Entity is marked read only */
1256ba597c5SAnurag S. Maskey 	NWAM_ENTITY_NOT_DESTROYABLE,	/* Entity cannot be destroyed */
1266ba597c5SAnurag S. Maskey 	NWAM_ENTITY_NOT_MANUAL,	/* Entity cannot be manually enabled/disabled */
1276ba597c5SAnurag S. Maskey 	NWAM_WALK_HALTED,		/* Callback function returned nonzero */
1286ba597c5SAnurag S. Maskey 	NWAM_ERROR_BIND,		/* Could not bind to backend */
1296ba597c5SAnurag S. Maskey 	NWAM_ERROR_BACKEND_INIT,	/* Could not initialize backend */
1306ba597c5SAnurag S. Maskey 	NWAM_ERROR_INTERNAL		/* Internal error */
1316ba597c5SAnurag S. Maskey } nwam_error_t;
1326ba597c5SAnurag S. Maskey 
1336ba597c5SAnurag S. Maskey #define	NWAM_MAX_NAME_LEN		128
1346ba597c5SAnurag S. Maskey #define	NWAM_MAX_VALUE_LEN		256
1356ba597c5SAnurag S. Maskey #define	NWAM_MAX_FMRI_LEN		NWAM_MAX_VALUE_LEN
1366ba597c5SAnurag S. Maskey #define	NWAM_MAX_NUM_VALUES		32
1376ba597c5SAnurag S. Maskey #define	NWAM_MAX_NUM_PROPERTIES		32
1386ba597c5SAnurag S. Maskey 
1396ba597c5SAnurag S. Maskey /* used for getting and setting of properties */
1406ba597c5SAnurag S. Maskey typedef enum {
1416ba597c5SAnurag S. Maskey 	NWAM_VALUE_TYPE_BOOLEAN,
1426ba597c5SAnurag S. Maskey 	NWAM_VALUE_TYPE_INT64,
1436ba597c5SAnurag S. Maskey 	NWAM_VALUE_TYPE_UINT64,
1446ba597c5SAnurag S. Maskey 	NWAM_VALUE_TYPE_STRING,
1456ba597c5SAnurag S. Maskey 	NWAM_VALUE_TYPE_UNKNOWN
1466ba597c5SAnurag S. Maskey } nwam_value_type_t;
1476ba597c5SAnurag S. Maskey 
1486ba597c5SAnurag S. Maskey /* Holds values of various types for getting and setting of properties */
1496ba597c5SAnurag S. Maskey /* Forward definition */
1506ba597c5SAnurag S. Maskey struct nwam_value;
1516ba597c5SAnurag S. Maskey typedef struct nwam_value *nwam_value_t;
1526ba597c5SAnurag S. Maskey 
1536ba597c5SAnurag S. Maskey /* Value-related functions. */
1546ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_create_boolean(boolean_t, nwam_value_t *);
1556ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_create_boolean_array(boolean_t *, uint_t,
1566ba597c5SAnurag S. Maskey     nwam_value_t *);
1576ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_create_int64(int64_t, nwam_value_t *);
1586ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_create_int64_array(int64_t *, uint_t,
1596ba597c5SAnurag S. Maskey     nwam_value_t *);
1606ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_create_uint64(uint64_t, nwam_value_t *);
1616ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_create_uint64_array(uint64_t *, uint_t,
1626ba597c5SAnurag S. Maskey     nwam_value_t *);
1636ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_create_string(char *, nwam_value_t *);
1646ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_create_string_array(char **, uint_t,
1656ba597c5SAnurag S. Maskey     nwam_value_t *);
1666ba597c5SAnurag S. Maskey 
1676ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_get_boolean(nwam_value_t, boolean_t *);
1686ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_get_boolean_array(nwam_value_t, boolean_t **,
1696ba597c5SAnurag S. Maskey     uint_t *);
1706ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_get_int64(nwam_value_t, int64_t *);
1716ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_get_int64_array(nwam_value_t, int64_t **,
1726ba597c5SAnurag S. Maskey     uint_t *);
1736ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_get_uint64(nwam_value_t, uint64_t *);
1746ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_get_uint64_array(nwam_value_t, uint64_t **,
1756ba597c5SAnurag S. Maskey     uint_t *);
1766ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_get_string(nwam_value_t, char **);
1776ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_get_string_array(nwam_value_t, char ***,
1786ba597c5SAnurag S. Maskey     uint_t *);
1796ba597c5SAnurag S. Maskey 
1806ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_get_type(nwam_value_t, nwam_value_type_t *);
1816ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_get_numvalues(nwam_value_t, uint_t *);
1826ba597c5SAnurag S. Maskey 
1836ba597c5SAnurag S. Maskey extern void nwam_value_free(nwam_value_t);
1846ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_copy(nwam_value_t, nwam_value_t *);
1856ba597c5SAnurag S. Maskey 
1866ba597c5SAnurag S. Maskey extern nwam_error_t nwam_uint64_get_value_string(const char *, uint64_t,
1876ba597c5SAnurag S. Maskey     const char **);
1886ba597c5SAnurag S. Maskey extern nwam_error_t nwam_value_string_get_uint64(const char *, const char *,
1896ba597c5SAnurag S. Maskey     uint64_t *);
1906ba597c5SAnurag S. Maskey 
1916ba597c5SAnurag S. Maskey /*
1926ba597c5SAnurag S. Maskey  * To retrieve a localized error string
1936ba597c5SAnurag S. Maskey  */
1946ba597c5SAnurag S. Maskey extern const char *nwam_strerror(nwam_error_t);
1956ba597c5SAnurag S. Maskey 
1966ba597c5SAnurag S. Maskey /*
1976ba597c5SAnurag S. Maskey  * State and auxiliary state describe the state of ENMs, NCUs and locations.
1986ba597c5SAnurag S. Maskey  */
1996ba597c5SAnurag S. Maskey typedef enum {
2006ba597c5SAnurag S. Maskey 	NWAM_STATE_UNINITIALIZED = 0x0,
2016ba597c5SAnurag S. Maskey 	NWAM_STATE_INITIALIZED = 0x1,
2026ba597c5SAnurag S. Maskey 	NWAM_STATE_OFFLINE = 0x2,
2036ba597c5SAnurag S. Maskey 	NWAM_STATE_OFFLINE_TO_ONLINE = 0x4,
2046ba597c5SAnurag S. Maskey 	NWAM_STATE_ONLINE_TO_OFFLINE = 0x8,
2056ba597c5SAnurag S. Maskey 	NWAM_STATE_ONLINE = 0x10,
2066ba597c5SAnurag S. Maskey 	NWAM_STATE_MAINTENANCE = 0x20,
2076ba597c5SAnurag S. Maskey 	NWAM_STATE_DEGRADED = 0x40,
2086ba597c5SAnurag S. Maskey 	NWAM_STATE_DISABLED = 0x80
2096ba597c5SAnurag S. Maskey } nwam_state_t;
2106ba597c5SAnurag S. Maskey 
2116ba597c5SAnurag S. Maskey #define	NWAM_STATE_ANY	(NWAM_STATE_UNINITIALIZED | \
2126ba597c5SAnurag S. Maskey 			NWAM_STATE_INITIALIZED | \
2136ba597c5SAnurag S. Maskey 			NWAM_STATE_OFFLINE | \
2146ba597c5SAnurag S. Maskey 			NWAM_STATE_OFFLINE_TO_ONLINE | \
2156ba597c5SAnurag S. Maskey 			NWAM_STATE_ONLINE_TO_OFFLINE | \
2166ba597c5SAnurag S. Maskey 			NWAM_STATE_ONLINE | \
2176ba597c5SAnurag S. Maskey 			NWAM_STATE_MAINTENANCE | \
2186ba597c5SAnurag S. Maskey 			NWAM_STATE_DEGRADED | \
2196ba597c5SAnurag S. Maskey 			NWAM_STATE_DISABLED)
2206ba597c5SAnurag S. Maskey 
2216ba597c5SAnurag S. Maskey /*
2226ba597c5SAnurag S. Maskey  * The auxiliary state denotes specific reasons why an object is in a particular
2236ba597c5SAnurag S. Maskey  * state (e.g. "script failed", "disabled by administrator", "waiting for DHCP
2246ba597c5SAnurag S. Maskey  * response").
2256ba597c5SAnurag S. Maskey  */
2266ba597c5SAnurag S. Maskey typedef enum {
2276ba597c5SAnurag S. Maskey 	/* General auxiliary states */
2286ba597c5SAnurag S. Maskey 	NWAM_AUX_STATE_UNINITIALIZED,
2296ba597c5SAnurag S. Maskey 	NWAM_AUX_STATE_INITIALIZED,
2306ba597c5SAnurag S. Maskey 	NWAM_AUX_STATE_CONDITIONS_NOT_MET,
2316ba597c5SAnurag S. Maskey 	NWAM_AUX_STATE_MANUAL_DISABLE,
2326ba597c5SAnurag S. Maskey 	NWAM_AUX_STATE_METHOD_FAILED,
2336ba597c5SAnurag S. Maskey 	NWAM_AUX_STATE_METHOD_MISSING,
2346ba597c5SAnurag S. Maskey 	NWAM_AUX_STATE_METHOD_RUNNING,
2356ba597c5SAnurag S. Maskey 	NWAM_AUX_STATE_INVALID_CONFIG,
2366ba597c5SAnurag S. Maskey 	NWAM_AUX_STATE_ACTIVE,
2376ba597c5SAnurag S. Maskey 	/* Link-specific auxiliary states */
2386ba597c5SAnurag S. Maskey 	NWAM_AUX_STATE_LINK_WIFI_SCANNING,
2396ba597c5SAnurag S. Maskey 	NWAM_AUX_STATE_LINK_WIFI_NEED_SELECTION,
2406ba597c5SAnurag S. Maskey 	NWAM_AUX_STATE_LINK_WIFI_NEED_KEY,
2416ba597c5SAnurag S. Maskey 	NWAM_AUX_STATE_LINK_WIFI_CONNECTING,
2426ba597c5SAnurag S. Maskey 	/* IP interface-specific auxiliary states */
2436ba597c5SAnurag S. Maskey 	NWAM_AUX_STATE_IF_WAITING_FOR_ADDR,
2446ba597c5SAnurag S. Maskey 	NWAM_AUX_STATE_IF_DHCP_TIMED_OUT,
2456ba597c5SAnurag S. Maskey 	NWAM_AUX_STATE_IF_DUPLICATE_ADDR,
2466ba597c5SAnurag S. Maskey 	/* Common link/interface auxiliary states */
2476ba597c5SAnurag S. Maskey 	NWAM_AUX_STATE_UP,
2486ba597c5SAnurag S. Maskey 	NWAM_AUX_STATE_DOWN,
2496ba597c5SAnurag S. Maskey 	NWAM_AUX_STATE_NOT_FOUND
2506ba597c5SAnurag S. Maskey } nwam_aux_state_t;
2516ba597c5SAnurag S. Maskey 
2526ba597c5SAnurag S. Maskey /* Activation modes */
2536ba597c5SAnurag S. Maskey typedef enum {
2546ba597c5SAnurag S. Maskey 	NWAM_ACTIVATION_MODE_MANUAL,
2556ba597c5SAnurag S. Maskey 	NWAM_ACTIVATION_MODE_SYSTEM,
2566ba597c5SAnurag S. Maskey 	NWAM_ACTIVATION_MODE_CONDITIONAL_ANY,
2576ba597c5SAnurag S. Maskey 	NWAM_ACTIVATION_MODE_CONDITIONAL_ALL,
2586ba597c5SAnurag S. Maskey 	NWAM_ACTIVATION_MODE_PRIORITIZED
2596ba597c5SAnurag S. Maskey } nwam_activation_mode_t;
2606ba597c5SAnurag S. Maskey 
2616ba597c5SAnurag S. Maskey /*
2626ba597c5SAnurag S. Maskey  * Conditions are of the form
2636ba597c5SAnurag S. Maskey  *
2646ba597c5SAnurag S. Maskey  * ncu|enm|loc name is|is-not active
2656ba597c5SAnurag S. Maskey  * ip-address is|is-not|is-in-range|is-not-in-range ipaddr[/prefixlen]
2666ba597c5SAnurag S. Maskey  * advertised-domain is|is-not|contains|does-not-contain string
2676ba597c5SAnurag S. Maskey  * system-domain is|is-not|contains|does-not-contain string
2686ba597c5SAnurag S. Maskey  * essid is|is-not|contains|does-not-contain string
2696ba597c5SAnurag S. Maskey  * bssid is|is-not <string>
2706ba597c5SAnurag S. Maskey  */
2716ba597c5SAnurag S. Maskey 
2726ba597c5SAnurag S. Maskey typedef enum {
2736ba597c5SAnurag S. Maskey 	NWAM_CONDITION_IS,
2746ba597c5SAnurag S. Maskey 	NWAM_CONDITION_IS_NOT,
2756ba597c5SAnurag S. Maskey 	NWAM_CONDITION_IS_IN_RANGE,
2766ba597c5SAnurag S. Maskey 	NWAM_CONDITION_IS_NOT_IN_RANGE,
2776ba597c5SAnurag S. Maskey 	NWAM_CONDITION_CONTAINS,
2786ba597c5SAnurag S. Maskey 	NWAM_CONDITION_DOES_NOT_CONTAIN
2796ba597c5SAnurag S. Maskey } nwam_condition_t;
2806ba597c5SAnurag S. Maskey 
2816ba597c5SAnurag S. Maskey typedef enum {
2826ba597c5SAnurag S. Maskey 	NWAM_CONDITION_OBJECT_TYPE_NCP,
2836ba597c5SAnurag S. Maskey 	NWAM_CONDITION_OBJECT_TYPE_NCU,
2846ba597c5SAnurag S. Maskey 	NWAM_CONDITION_OBJECT_TYPE_ENM,
2856ba597c5SAnurag S. Maskey 	NWAM_CONDITION_OBJECT_TYPE_LOC,
2866ba597c5SAnurag S. Maskey 	NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS,
2876ba597c5SAnurag S. Maskey 	NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN,
2886ba597c5SAnurag S. Maskey 	NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN,
2896ba597c5SAnurag S. Maskey 	NWAM_CONDITION_OBJECT_TYPE_ESSID,
2906ba597c5SAnurag S. Maskey 	NWAM_CONDITION_OBJECT_TYPE_BSSID
2916ba597c5SAnurag S. Maskey } nwam_condition_object_type_t;
2926ba597c5SAnurag S. Maskey 
2936ba597c5SAnurag S. Maskey /*
2946ba597c5SAnurag S. Maskey  * Activation condition-related functions that convert activation
2956ba597c5SAnurag S. Maskey  * values to an appropriate string and back.
2966ba597c5SAnurag S. Maskey  */
2976ba597c5SAnurag S. Maskey extern nwam_error_t nwam_condition_to_condition_string(
2986ba597c5SAnurag S. Maskey     nwam_condition_object_type_t, nwam_condition_t, const char *, char **);
2996ba597c5SAnurag S. Maskey extern nwam_error_t nwam_condition_string_to_condition(const char *,
3006ba597c5SAnurag S. Maskey     nwam_condition_object_type_t *, nwam_condition_t *, char **);
3016ba597c5SAnurag S. Maskey 
3026ba597c5SAnurag S. Maskey /*
3036ba597c5SAnurag S. Maskey  * Only one location can be active at one time. As a
3046ba597c5SAnurag S. Maskey  * consequence, if the activation conditions of multiple
3056ba597c5SAnurag S. Maskey  * locations are satisfied, we need to compare activation
3066ba597c5SAnurag S. Maskey  * conditions to see if one is more specific than another.
3076ba597c5SAnurag S. Maskey  *
3086ba597c5SAnurag S. Maskey  * The following heuristics are applied to rate an
3096ba597c5SAnurag S. Maskey  * activation condition:
3106ba597c5SAnurag S. Maskey  * - "is" is the most specific condition
3116ba597c5SAnurag S. Maskey  * - it is followed by "is-in-range" and "contains"
3126ba597c5SAnurag S. Maskey  * - "is-not-in-range" and "does-not-contain" are next
3136ba597c5SAnurag S. Maskey  * - finally "is-not" is least specific
3146ba597c5SAnurag S. Maskey  *
3156ba597c5SAnurag S. Maskey  * Regarding the objects these conditions apply to:
3166ba597c5SAnurag S. Maskey  * - NCU, ENM and locations are most specific
3176ba597c5SAnurag S. Maskey  * - system-domain is next
3186ba597c5SAnurag S. Maskey  * - advertised-domain is next
3196ba597c5SAnurag S. Maskey  * - IP address is next
3206ba597c5SAnurag S. Maskey  * - wireless BSSID is next
3216ba597c5SAnurag S. Maskey  * - wireless ESSID is least specific
3226ba597c5SAnurag S. Maskey  *
3236ba597c5SAnurag S. Maskey  */
3246ba597c5SAnurag S. Maskey extern nwam_error_t nwam_condition_rate(nwam_condition_object_type_t,
3256ba597c5SAnurag S. Maskey     nwam_condition_t, uint64_t *);
3266ba597c5SAnurag S. Maskey 
3276ba597c5SAnurag S. Maskey /*
3286ba597c5SAnurag S. Maskey  * Location definitions.
3296ba597c5SAnurag S. Maskey  */
3306ba597c5SAnurag S. Maskey 
3316ba597c5SAnurag S. Maskey #define	NWAM_LOC_NAME_AUTOMATIC		"Automatic"
3326ba597c5SAnurag S. Maskey #define	NWAM_LOC_NAME_NO_NET		"NoNet"
3336ba597c5SAnurag S. Maskey #define	NWAM_LOC_NAME_LEGACY		"Legacy"
3346ba597c5SAnurag S. Maskey 
3356ba597c5SAnurag S. Maskey #define	NWAM_LOC_NAME_PRE_DEFINED(name)	\
3366ba597c5SAnurag S. Maskey 			(strcasecmp(name, NWAM_LOC_NAME_AUTOMATIC) == 0 || \
3376ba597c5SAnurag S. Maskey 			strcasecmp(name, NWAM_LOC_NAME_NO_NET) == 0 || \
3386ba597c5SAnurag S. Maskey 			strcasecmp(name, NWAM_LOC_NAME_LEGACY) == 0)
3396ba597c5SAnurag S. Maskey 
3406ba597c5SAnurag S. Maskey /* Forward definition */
3416ba597c5SAnurag S. Maskey struct nwam_handle;
3426ba597c5SAnurag S. Maskey 
3436ba597c5SAnurag S. Maskey typedef struct nwam_handle *nwam_loc_handle_t;
3446ba597c5SAnurag S. Maskey 
3456ba597c5SAnurag S. Maskey /* Location properties */
3466ba597c5SAnurag S. Maskey 
3476ba597c5SAnurag S. Maskey typedef enum {
3486ba597c5SAnurag S. Maskey 	NWAM_NAMESERVICES_DNS,
3496ba597c5SAnurag S. Maskey 	NWAM_NAMESERVICES_FILES,
3506ba597c5SAnurag S. Maskey 	NWAM_NAMESERVICES_NIS,
3516ba597c5SAnurag S. Maskey 	NWAM_NAMESERVICES_LDAP
3526ba597c5SAnurag S. Maskey } nwam_nameservices_t;
3536ba597c5SAnurag S. Maskey 
3546ba597c5SAnurag S. Maskey typedef enum {
3556ba597c5SAnurag S. Maskey 	NWAM_CONFIGSRC_MANUAL,
3566ba597c5SAnurag S. Maskey 	NWAM_CONFIGSRC_DHCP
3576ba597c5SAnurag S. Maskey } nwam_configsrc_t;
3586ba597c5SAnurag S. Maskey 
3596ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_ACTIVATION_MODE		"activation-mode"
3606ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_CONDITIONS		"conditions"
3616ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_ENABLED			"enabled"
362b00044a2SJames Carlson 
3636ba597c5SAnurag S. Maskey /* Nameservice location properties */
3646ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_NAMESERVICES		"nameservices"
3656ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_NAMESERVICES_CONFIG_FILE	"nameservices-config-file"
3666ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_DNS_NAMESERVICE_CONFIGSRC	"dns-nameservice-configsrc"
3676ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_DNS_NAMESERVICE_DOMAIN	"dns-nameservice-domain"
3686ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_DNS_NAMESERVICE_SERVERS	"dns-nameservice-servers"
3696ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_DNS_NAMESERVICE_SEARCH	"dns-nameservice-search"
3706ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_NIS_NAMESERVICE_CONFIGSRC	"nis-nameservice-configsrc"
3716ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_NIS_NAMESERVICE_SERVERS	"nis-nameservice-servers"
3726ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_LDAP_NAMESERVICE_CONFIGSRC "ldap-nameservice-configsrc"
3736ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_LDAP_NAMESERVICE_SERVERS	"ldap-nameservice-servers"
3746ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_DEFAULT_DOMAIN		"default-domain"
3756ba597c5SAnurag S. Maskey 
3766ba597c5SAnurag S. Maskey /* NFSv4 domain */
3776ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_NFSV4_DOMAIN		"nfsv4-domain"
3786ba597c5SAnurag S. Maskey 
3796ba597c5SAnurag S. Maskey /* IPfilter configuration */
3806ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_IPFILTER_CONFIG_FILE	"ipfilter-config-file"
3816ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_IPFILTER_V6_CONFIG_FILE	"ipfilter-v6-config-file"
3826ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_IPNAT_CONFIG_FILE		"ipnat-config-file"
3836ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_IPPOOL_CONFIG_FILE	"ippool-config-file"
3846ba597c5SAnurag S. Maskey 
3856ba597c5SAnurag S. Maskey /* IPsec configuration */
3866ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_IKE_CONFIG_FILE		"ike-config-file"
3876ba597c5SAnurag S. Maskey #define	NWAM_LOC_PROP_IPSECPOLICY_CONFIG_FILE	"ipsecpolicy-config-file"
3886ba597c5SAnurag S. Maskey 
3896ba597c5SAnurag S. Maskey /*
3906ba597c5SAnurag S. Maskey  * NCP/NCU definitions.
3916ba597c5SAnurag S. Maskey  */
3926ba597c5SAnurag S. Maskey 
3936ba597c5SAnurag S. Maskey #define	NWAM_NCP_NAME_AUTOMATIC		"Automatic"
3946ba597c5SAnurag S. Maskey #define	NWAM_NCP_NAME_USER		"User"
3956ba597c5SAnurag S. Maskey 
3966ba597c5SAnurag S. Maskey #define	NWAM_NCP_AUTOMATIC(name)	\
3976ba597c5SAnurag S. Maskey 			(strcasecmp(name, NWAM_NCP_NAME_AUTOMATIC) == 0)
3986ba597c5SAnurag S. Maskey 
3996ba597c5SAnurag S. Maskey typedef struct nwam_handle *nwam_ncp_handle_t;
4006ba597c5SAnurag S. Maskey 
4016ba597c5SAnurag S. Maskey typedef struct nwam_handle *nwam_ncu_handle_t;
4026ba597c5SAnurag S. Maskey 
4036ba597c5SAnurag S. Maskey typedef enum {
4046ba597c5SAnurag S. Maskey 	NWAM_NCU_TYPE_UNKNOWN = -1,
4056ba597c5SAnurag S. Maskey 	NWAM_NCU_TYPE_LINK,
4066ba597c5SAnurag S. Maskey 	NWAM_NCU_TYPE_INTERFACE,
4076ba597c5SAnurag S. Maskey 	NWAM_NCU_TYPE_ANY
4086ba597c5SAnurag S. Maskey } nwam_ncu_type_t;
4096ba597c5SAnurag S. Maskey 
4106ba597c5SAnurag S. Maskey typedef enum {
4116ba597c5SAnurag S. Maskey 	NWAM_NCU_CLASS_UNKNOWN = -1,
4126ba597c5SAnurag S. Maskey 	NWAM_NCU_CLASS_PHYS,
4136ba597c5SAnurag S. Maskey 	NWAM_NCU_CLASS_IP,
4146ba597c5SAnurag S. Maskey 	NWAM_NCU_CLASS_ANY
4156ba597c5SAnurag S. Maskey } nwam_ncu_class_t;
4166ba597c5SAnurag S. Maskey 
4176ba597c5SAnurag S. Maskey typedef enum {
4186ba597c5SAnurag S. Maskey 	NWAM_ADDRSRC_DHCP,
4196ba597c5SAnurag S. Maskey 	NWAM_ADDRSRC_AUTOCONF,
4206ba597c5SAnurag S. Maskey 	NWAM_ADDRSRC_STATIC
4216ba597c5SAnurag S. Maskey } nwam_addrsrc_t;
4226ba597c5SAnurag S. Maskey 
4236ba597c5SAnurag S. Maskey typedef enum {
4246ba597c5SAnurag S. Maskey 	NWAM_PRIORITY_MODE_EXCLUSIVE,
4256ba597c5SAnurag S. Maskey 	NWAM_PRIORITY_MODE_SHARED,
4266ba597c5SAnurag S. Maskey 	NWAM_PRIORITY_MODE_ALL
4276ba597c5SAnurag S. Maskey } nwam_priority_mode_t;
4286ba597c5SAnurag S. Maskey 
4296ba597c5SAnurag S. Maskey /* NCU properties common to all type/classes */
4306ba597c5SAnurag S. Maskey #define	NWAM_NCU_PROP_TYPE			"type"
4316ba597c5SAnurag S. Maskey #define	NWAM_NCU_PROP_CLASS			"class"
4326ba597c5SAnurag S. Maskey #define	NWAM_NCU_PROP_PARENT_NCP		"parent"
4336ba597c5SAnurag S. Maskey #define	NWAM_NCU_PROP_ACTIVATION_MODE		"activation-mode"
4346ba597c5SAnurag S. Maskey #define	NWAM_NCU_PROP_ENABLED			"enabled"
4356ba597c5SAnurag S. Maskey #define	NWAM_NCU_PROP_PRIORITY_GROUP		"priority-group"
4366ba597c5SAnurag S. Maskey #define	NWAM_NCU_PROP_PRIORITY_MODE		"priority-mode"
4376ba597c5SAnurag S. Maskey 
4386ba597c5SAnurag S. Maskey /* Link NCU properties */
4396ba597c5SAnurag S. Maskey #define	NWAM_NCU_PROP_LINK_MAC_ADDR		"link-mac-addr"
4406ba597c5SAnurag S. Maskey #define	NWAM_NCU_PROP_LINK_AUTOPUSH		"link-autopush"
4416ba597c5SAnurag S. Maskey #define	NWAM_NCU_PROP_LINK_MTU			"link-mtu"
4426ba597c5SAnurag S. Maskey 
4436ba597c5SAnurag S. Maskey /* IP NCU properties */
4446ba597c5SAnurag S. Maskey #define	NWAM_NCU_PROP_IP_VERSION		"ip-version"
4456ba597c5SAnurag S. Maskey #define	NWAM_NCU_PROP_IPV4_ADDRSRC		"ipv4-addrsrc"
4466ba597c5SAnurag S. Maskey #define	NWAM_NCU_PROP_IPV4_ADDR			"ipv4-addr"
4476ba597c5SAnurag S. Maskey #define	NWAM_NCU_PROP_IPV4_DEFAULT_ROUTE	"ipv4-default-route"
4486ba597c5SAnurag S. Maskey #define	NWAM_NCU_PROP_IPV6_ADDRSRC		"ipv6-addrsrc"
4496ba597c5SAnurag S. Maskey #define	NWAM_NCU_PROP_IPV6_ADDR			"ipv6-addr"
4506ba597c5SAnurag S. Maskey #define	NWAM_NCU_PROP_IPV6_DEFAULT_ROUTE	"ipv6-default-route"
451*b31320a7SChris Fraire #define	NWAM_NCU_PROP_IP_PRIMARY		"ip-primary"
452*b31320a7SChris Fraire #define	NWAM_NCU_PROP_IP_REQHOST		"ip-reqhost"
4536ba597c5SAnurag S. Maskey 
4546ba597c5SAnurag S. Maskey /* Some properties should only be set on creation */
4556ba597c5SAnurag S. Maskey #define	NWAM_NCU_PROP_SETONCE(prop)	\
4566ba597c5SAnurag S. Maskey 				(strcmp(prop, NWAM_NCU_PROP_TYPE) == 0 || \
4576ba597c5SAnurag S. Maskey 				strcmp(prop, NWAM_NCU_PROP_CLASS) == 0 || \
4586ba597c5SAnurag S. Maskey 				strcmp(prop, NWAM_NCU_PROP_PARENT_NCP) == 0)
4596ba597c5SAnurag S. Maskey /*
4606ba597c5SAnurag S. Maskey  * ENM definitions
4616ba597c5SAnurag S. Maskey  */
4626ba597c5SAnurag S. Maskey 
4636ba597c5SAnurag S. Maskey typedef struct nwam_handle *nwam_enm_handle_t;
4646ba597c5SAnurag S. Maskey 
4656ba597c5SAnurag S. Maskey #define	NWAM_ENM_PROP_ACTIVATION_MODE	"activation-mode"
4666ba597c5SAnurag S. Maskey #define	NWAM_ENM_PROP_CONDITIONS	"conditions"
4676ba597c5SAnurag S. Maskey #define	NWAM_ENM_PROP_ENABLED		"enabled"
4686ba597c5SAnurag S. Maskey 
4696ba597c5SAnurag S. Maskey /* FMRI associated with ENM */
4706ba597c5SAnurag S. Maskey #define	NWAM_ENM_PROP_FMRI		"fmri"
4716ba597c5SAnurag S. Maskey 
4726ba597c5SAnurag S. Maskey /* Start/stop scripts associated with ENM */
4736ba597c5SAnurag S. Maskey #define	NWAM_ENM_PROP_START		"start"
4746ba597c5SAnurag S. Maskey #define	NWAM_ENM_PROP_STOP		"stop"
4756ba597c5SAnurag S. Maskey 
4766ba597c5SAnurag S. Maskey /*
4776ba597c5SAnurag S. Maskey  * Known Wireless LAN info (known WLAN) definitions.
4786ba597c5SAnurag S. Maskey  */
4796ba597c5SAnurag S. Maskey 
4806ba597c5SAnurag S. Maskey typedef struct nwam_handle *nwam_known_wlan_handle_t;
4816ba597c5SAnurag S. Maskey 
4826ba597c5SAnurag S. Maskey #define	NWAM_KNOWN_WLAN_PROP_BSSIDS		"bssids"
4836ba597c5SAnurag S. Maskey #define	NWAM_KNOWN_WLAN_PROP_PRIORITY		"priority"
4846ba597c5SAnurag S. Maskey #define	NWAM_KNOWN_WLAN_PROP_KEYNAME		"keyname"
4856ba597c5SAnurag S. Maskey #define	NWAM_KNOWN_WLAN_PROP_KEYSLOT		"keyslot"
4866ba597c5SAnurag S. Maskey #define	NWAM_KNOWN_WLAN_PROP_SECURITY_MODE	"security-mode"
4876ba597c5SAnurag S. Maskey 
4886ba597c5SAnurag S. Maskey /*
4896ba597c5SAnurag S. Maskey  * Location Functions
4906ba597c5SAnurag S. Maskey  */
4916ba597c5SAnurag S. Maskey 
4926ba597c5SAnurag S. Maskey /* Create a location */
4936ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_create(const char *, nwam_loc_handle_t *);
4946ba597c5SAnurag S. Maskey 
4956ba597c5SAnurag S. Maskey /* Copy a location */
4966ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_copy(nwam_loc_handle_t, const char *,
4976ba597c5SAnurag S. Maskey     nwam_loc_handle_t *);
4986ba597c5SAnurag S. Maskey 
4996ba597c5SAnurag S. Maskey /* Read a location from persistent storage */
5006ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_read(const char *, uint64_t,
5016ba597c5SAnurag S. Maskey     nwam_loc_handle_t *);
5026ba597c5SAnurag S. Maskey 
5036ba597c5SAnurag S. Maskey /* Validate in-memory representation of a location */
5046ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_validate(nwam_loc_handle_t, const char **);
5056ba597c5SAnurag S. Maskey 
5066ba597c5SAnurag S. Maskey /* Commit in-memory representation of a location to persistent storage */
5076ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_commit(nwam_loc_handle_t, uint64_t);
5086ba597c5SAnurag S. Maskey 
5096ba597c5SAnurag S. Maskey /* Destroy a location in persistent storage */
5106ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_destroy(nwam_loc_handle_t, uint64_t);
5116ba597c5SAnurag S. Maskey 
5126ba597c5SAnurag S. Maskey /* Free in-memory representation of a location */
5136ba597c5SAnurag S. Maskey extern void nwam_loc_free(nwam_loc_handle_t);
5146ba597c5SAnurag S. Maskey 
5156ba597c5SAnurag S. Maskey /* read all locs from persistent storage and walk through each at a time */
5166ba597c5SAnurag S. Maskey extern nwam_error_t nwam_walk_locs(int (*)(nwam_loc_handle_t, void *), void *,
5176ba597c5SAnurag S. Maskey     uint64_t, int *);
5186ba597c5SAnurag S. Maskey 
5196ba597c5SAnurag S. Maskey /* get/set loc name */
5206ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_get_name(nwam_loc_handle_t, char **);
5216ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_set_name(nwam_loc_handle_t, const char *);
5226ba597c5SAnurag S. Maskey extern boolean_t nwam_loc_can_set_name(nwam_loc_handle_t);
5236ba597c5SAnurag S. Maskey 
5246ba597c5SAnurag S. Maskey /* activate/deactivate loc */
5256ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_enable(nwam_loc_handle_t);
5266ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_disable(nwam_loc_handle_t);
5276ba597c5SAnurag S. Maskey 
5286ba597c5SAnurag S. Maskey /* walk all properties of an in-memory loc */
5296ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_walk_props(nwam_loc_handle_t,
5306ba597c5SAnurag S. Maskey 	int (*)(const char *, nwam_value_t, void *),
5316ba597c5SAnurag S. Maskey 	void *, uint64_t, int *);
5326ba597c5SAnurag S. Maskey 
5336ba597c5SAnurag S. Maskey /* delete/get/set validate loc property */
5346ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_delete_prop(nwam_loc_handle_t,
535b00044a2SJames Carlson     const char *);
5366ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_get_prop_value(nwam_loc_handle_t,
5376ba597c5SAnurag S. Maskey     const char *, nwam_value_t *);
5386ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_set_prop_value(nwam_loc_handle_t,
5396ba597c5SAnurag S. Maskey     const char *, nwam_value_t);
5406ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_validate_prop(nwam_loc_handle_t, const char *,
5416ba597c5SAnurag S. Maskey     nwam_value_t);
5426ba597c5SAnurag S. Maskey 
5436ba597c5SAnurag S. Maskey /* Get the read-only value for a particular loc property */
5446ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_prop_read_only(const char *, boolean_t *);
5456ba597c5SAnurag S. Maskey 
5466ba597c5SAnurag S. Maskey /* Whether the property is multi-valued or not */
5476ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_prop_multivalued(const char *, boolean_t *);
5486ba597c5SAnurag S. Maskey 
5496ba597c5SAnurag S. Maskey /* Retrieve data type */
5506ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_get_prop_type(const char *, nwam_value_type_t *);
5516ba597c5SAnurag S. Maskey 
5526ba597c5SAnurag S. Maskey /* Retrieve description */
5536ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_get_prop_description(const char *, const char **);
5546ba597c5SAnurag S. Maskey 
5556ba597c5SAnurag S. Maskey /* get default loc props */
5566ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_get_default_proplist(const char ***, uint_t *);
5576ba597c5SAnurag S. Maskey 
5586ba597c5SAnurag S. Maskey /* get sstate of loc from nwamd */
5596ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_get_state(nwam_loc_handle_t, nwam_state_t *,
5606ba597c5SAnurag S. Maskey 	nwam_aux_state_t *);
5616ba597c5SAnurag S. Maskey 
5626ba597c5SAnurag S. Maskey /* Get whether the loc has manual activation-mode or not */
5636ba597c5SAnurag S. Maskey extern nwam_error_t nwam_loc_is_manual(nwam_loc_handle_t, boolean_t *);
5646ba597c5SAnurag S. Maskey 
5656ba597c5SAnurag S. Maskey /*
5666ba597c5SAnurag S. Maskey  * NCP/NCU functions
5676ba597c5SAnurag S. Maskey  */
5686ba597c5SAnurag S. Maskey 
5696ba597c5SAnurag S. Maskey /* Create an ncp */
5706ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncp_create(const char *, uint64_t,
5716ba597c5SAnurag S. Maskey 	nwam_ncp_handle_t *);
5726ba597c5SAnurag S. Maskey 
5736ba597c5SAnurag S. Maskey /* Read an ncp from persistent storage */
5746ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncp_read(const char *, uint64_t, nwam_ncp_handle_t *);
5756ba597c5SAnurag S. Maskey 
5766ba597c5SAnurag S. Maskey /* Make a copy of existing ncp */
5776ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncp_copy(nwam_ncp_handle_t, const char *,
5786ba597c5SAnurag S. Maskey 	nwam_ncp_handle_t *);
5796ba597c5SAnurag S. Maskey 
5806ba597c5SAnurag S. Maskey /* Walk ncps */
5816ba597c5SAnurag S. Maskey extern nwam_error_t nwam_walk_ncps(int (*)(nwam_ncp_handle_t, void *),
5826ba597c5SAnurag S. Maskey 	void *, uint64_t, int *);
5836ba597c5SAnurag S. Maskey 
5846ba597c5SAnurag S. Maskey /* Get ncp name */
5856ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncp_get_name(nwam_ncp_handle_t, char **);
5866ba597c5SAnurag S. Maskey 
5876ba597c5SAnurag S. Maskey /* Get the read-only value for this ncp */
5886ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncp_get_read_only(nwam_ncp_handle_t, boolean_t *);
5896ba597c5SAnurag S. Maskey 
5906ba597c5SAnurag S. Maskey /* Destroy ncp */
5916ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncp_destroy(nwam_ncp_handle_t, uint64_t);
5926ba597c5SAnurag S. Maskey 
5936ba597c5SAnurag S. Maskey /*
5946ba597c5SAnurag S. Maskey  * Walk all ncus associated with ncp.  Specific types/classes of ncu can
5956ba597c5SAnurag S. Maskey  * be selected via flags, or all via NWAM_FLAG_ALL.
5966ba597c5SAnurag S. Maskey  */
5976ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncp_walk_ncus(nwam_ncp_handle_t,
5986ba597c5SAnurag S. Maskey     int(*)(nwam_ncu_handle_t, void *), void *, uint64_t, int *);
5996ba597c5SAnurag S. Maskey 
6006ba597c5SAnurag S. Maskey /* Activate ncp */
6016ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncp_enable(nwam_ncp_handle_t);
6026ba597c5SAnurag S. Maskey 
6036ba597c5SAnurag S. Maskey /* Free in-memory representation of ncp */
6046ba597c5SAnurag S. Maskey extern void nwam_ncp_free(nwam_ncp_handle_t);
6056ba597c5SAnurag S. Maskey 
6066ba597c5SAnurag S. Maskey /* Get state of NCP from nwamd */
6076ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncp_get_state(nwam_ncp_handle_t, nwam_state_t *,
6086ba597c5SAnurag S. Maskey 	nwam_aux_state_t *);
6096ba597c5SAnurag S. Maskey 
6106ba597c5SAnurag S. Maskey /* Get the active priority-group */
6116ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncp_get_active_priority_group(int64_t *);
6126ba597c5SAnurag S. Maskey 
6136ba597c5SAnurag S. Maskey /* Create an ncu or read it from persistent storage */
6146ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_create(nwam_ncp_handle_t, const char *,
6156ba597c5SAnurag S. Maskey 	nwam_ncu_type_t, nwam_ncu_class_t, nwam_ncu_handle_t *);
6166ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_read(nwam_ncp_handle_t, const char *,
6176ba597c5SAnurag S. Maskey 	nwam_ncu_type_t, uint64_t, nwam_ncu_handle_t *);
6186ba597c5SAnurag S. Maskey 
6196ba597c5SAnurag S. Maskey /* Destroy an ncu in persistent storage or free the in-memory representation */
6206ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_destroy(nwam_ncu_handle_t, uint64_t);
6216ba597c5SAnurag S. Maskey extern void nwam_ncu_free(nwam_ncu_handle_t);
6226ba597c5SAnurag S. Maskey 
6236ba597c5SAnurag S. Maskey /* make a copy of existing ncu */
6246ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_copy(nwam_ncu_handle_t, const char *,
6256ba597c5SAnurag S. Maskey 	nwam_ncu_handle_t *);
6266ba597c5SAnurag S. Maskey 
6276ba597c5SAnurag S. Maskey /* Commit ncu changes to persistent storage */
6286ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_commit(nwam_ncu_handle_t, uint64_t);
6296ba597c5SAnurag S. Maskey 
6306ba597c5SAnurag S. Maskey /* activate/deactivate an individual NCU (must be part of the active NCP) */
6316ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_enable(nwam_ncu_handle_t);
6326ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_disable(nwam_ncu_handle_t);
6336ba597c5SAnurag S. Maskey 
6346ba597c5SAnurag S. Maskey /* Get state of NCU from nwamd */
6356ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_get_state(nwam_ncu_handle_t, nwam_state_t *,
6366ba597c5SAnurag S. Maskey 	nwam_aux_state_t *);
6376ba597c5SAnurag S. Maskey 
6386ba597c5SAnurag S. Maskey /* Get NCU type */
6396ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_get_ncu_type(nwam_ncu_handle_t, nwam_ncu_type_t *);
6406ba597c5SAnurag S. Maskey 
6416ba597c5SAnurag S. Maskey /* Get NCU class */
6426ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_get_ncu_class(nwam_ncu_handle_t,
6436ba597c5SAnurag S. Maskey 	nwam_ncu_class_t *);
6446ba597c5SAnurag S. Maskey 
6456ba597c5SAnurag S. Maskey /* Validate ncu content */
6466ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_validate(nwam_ncu_handle_t, const char **);
6476ba597c5SAnurag S. Maskey 
6486ba597c5SAnurag S. Maskey /* Walk all properties in in-memory representation of ncu */
6496ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_walk_props(nwam_ncu_handle_t,
6506ba597c5SAnurag S. Maskey 	int (*)(const char *, nwam_value_t, void *),
6516ba597c5SAnurag S. Maskey 	void *, uint64_t, int *);
6526ba597c5SAnurag S. Maskey 
6536ba597c5SAnurag S. Maskey /* Get/set name of ncu, get parent ncp */
6546ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_get_name(nwam_ncu_handle_t, char **);
6556ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_name_to_typed_name(const char *, nwam_ncu_type_t,
6566ba597c5SAnurag S. Maskey     char **);
6576ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_typed_name_to_name(const char *, nwam_ncu_type_t *,
6586ba597c5SAnurag S. Maskey     char **);
6596ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_get_default_proplist(nwam_ncu_type_t,
6606ba597c5SAnurag S. Maskey     nwam_ncu_class_t, const char ***, uint_t *);
6616ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_get_ncp(nwam_ncu_handle_t, nwam_ncp_handle_t *);
6626ba597c5SAnurag S. Maskey 
6636ba597c5SAnurag S. Maskey /* delete/get/set/validate property from/in in-memory representation of ncu */
6646ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_delete_prop(nwam_ncu_handle_t,
6656ba597c5SAnurag S. Maskey 	const char *);
6666ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_get_prop_value(nwam_ncu_handle_t,
6676ba597c5SAnurag S. Maskey 	const char *, nwam_value_t *);
6686ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_set_prop_value(nwam_ncu_handle_t,
6696ba597c5SAnurag S. Maskey 	const char *, nwam_value_t);
6706ba597c5SAnurag S. Maskey 
6716ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_validate_prop(nwam_ncu_handle_t, const char *,
6726ba597c5SAnurag S. Maskey 	nwam_value_t);
6736ba597c5SAnurag S. Maskey 
6746ba597c5SAnurag S. Maskey /* Retrieve data type */
6756ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_get_prop_type(const char *, nwam_value_type_t *);
6766ba597c5SAnurag S. Maskey /* Retrieve prop description */
6776ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_get_prop_description(const char *, const char **);
6786ba597c5SAnurag S. Maskey 
6796ba597c5SAnurag S. Maskey /* Get the read-only value from the handle or parent NCP */
6806ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_get_read_only(nwam_ncu_handle_t, boolean_t *);
6816ba597c5SAnurag S. Maskey 
6826ba597c5SAnurag S. Maskey /* Get the read-only value for a particular NCU property */
6836ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_prop_read_only(const char *, boolean_t *);
6846ba597c5SAnurag S. Maskey 
6856ba597c5SAnurag S. Maskey /* Whether the property is multi-valued or not */
6866ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_prop_multivalued(const char *, boolean_t *);
6876ba597c5SAnurag S. Maskey 
6886ba597c5SAnurag S. Maskey /* Get whether the NCU has manual activation-mode or not */
6896ba597c5SAnurag S. Maskey extern nwam_error_t nwam_ncu_is_manual(nwam_ncu_handle_t, boolean_t *);
6906ba597c5SAnurag S. Maskey 
6916ba597c5SAnurag S. Maskey /* Get the flag from the given class for walks */
6926ba597c5SAnurag S. Maskey extern uint64_t nwam_ncu_class_to_flag(nwam_ncu_class_t);
6936ba597c5SAnurag S. Maskey 
6946ba597c5SAnurag S. Maskey /* Get the NCU type from the given class */
6956ba597c5SAnurag S. Maskey extern nwam_ncu_type_t nwam_ncu_class_to_type(nwam_ncu_class_t);
6966ba597c5SAnurag S. Maskey 
6976ba597c5SAnurag S. Maskey /* ENM functions */
6986ba597c5SAnurag S. Maskey /*
6996ba597c5SAnurag S. Maskey  * Obtain a specific enm handle, either be creating a new enm
7006ba597c5SAnurag S. Maskey  * or reading an existing one from persistent storage.
7016ba597c5SAnurag S. Maskey  */
7026ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_create(const char *, const char *,
7036ba597c5SAnurag S. Maskey 	nwam_enm_handle_t *);
7046ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_read(const char *, uint64_t, nwam_enm_handle_t *);
7056ba597c5SAnurag S. Maskey 
7066ba597c5SAnurag S. Maskey /* Make a copy of existing enm */
7076ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_copy(nwam_enm_handle_t, const char *,
7086ba597c5SAnurag S. Maskey 	nwam_enm_handle_t *);
7096ba597c5SAnurag S. Maskey 
7106ba597c5SAnurag S. Maskey /*
7116ba597c5SAnurag S. Maskey  * Obtain handles for all existing enms.  Caller-specified callback
7126ba597c5SAnurag S. Maskey  * function will be called once for each enm, passing the handle and
7136ba597c5SAnurag S. Maskey  * the caller-specified arg.
7146ba597c5SAnurag S. Maskey  */
7156ba597c5SAnurag S. Maskey extern nwam_error_t nwam_walk_enms(int (*)(nwam_enm_handle_t, void *), void *,
7166ba597c5SAnurag S. Maskey 	uint64_t, int *);
7176ba597c5SAnurag S. Maskey 
7186ba597c5SAnurag S. Maskey /*
7196ba597c5SAnurag S. Maskey  * Commit an enm to persistent storage.  Does not free the handle.
7206ba597c5SAnurag S. Maskey  */
7216ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_commit(nwam_enm_handle_t, uint64_t);
7226ba597c5SAnurag S. Maskey 
7236ba597c5SAnurag S. Maskey /*
7246ba597c5SAnurag S. Maskey  * Remove an enm from persistent storage.
7256ba597c5SAnurag S. Maskey  */
7266ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_destroy(nwam_enm_handle_t, uint64_t);
7276ba597c5SAnurag S. Maskey 
7286ba597c5SAnurag S. Maskey /*
7296ba597c5SAnurag S. Maskey  * Free an enm handle
7306ba597c5SAnurag S. Maskey  */
7316ba597c5SAnurag S. Maskey extern void nwam_enm_free(nwam_enm_handle_t);
7326ba597c5SAnurag S. Maskey 
7336ba597c5SAnurag S. Maskey /*
7346ba597c5SAnurag S. Maskey  * Validate an enm, or a specific enm property.  If validating
7356ba597c5SAnurag S. Maskey  * an entire enm, the invalid property type is returned.
7366ba597c5SAnurag S. Maskey  */
7376ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_validate(nwam_enm_handle_t, const char **);
7386ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_validate_prop(nwam_enm_handle_t, const char *,
7396ba597c5SAnurag S. Maskey 	nwam_value_t);
7406ba597c5SAnurag S. Maskey 
7416ba597c5SAnurag S. Maskey /* Retrieve data type */
7426ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_get_prop_type(const char *, nwam_value_type_t *);
7436ba597c5SAnurag S. Maskey /* Retrieve prop description */
7446ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_get_prop_description(const char *, const char **);
7456ba597c5SAnurag S. Maskey 
7466ba597c5SAnurag S. Maskey /*
7476ba597c5SAnurag S. Maskey  * Delete/get/set enm property values.
7486ba597c5SAnurag S. Maskey  */
7496ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_delete_prop(nwam_enm_handle_t,
7506ba597c5SAnurag S. Maskey 	const char *);
7516ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_get_prop_value(nwam_enm_handle_t,
7526ba597c5SAnurag S. Maskey 	const char *, nwam_value_t *);
7536ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_set_prop_value(nwam_enm_handle_t,
7546ba597c5SAnurag S. Maskey 	const char *, nwam_value_t);
7556ba597c5SAnurag S. Maskey 
7566ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_get_default_proplist(const char ***, uint_t *);
7576ba597c5SAnurag S. Maskey 
7586ba597c5SAnurag S. Maskey /* Get the read-only value for a particular ENM property */
7596ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_prop_read_only(const char *, boolean_t *);
7606ba597c5SAnurag S. Maskey 
7616ba597c5SAnurag S. Maskey /* Whether the property is multi-valued or not */
7626ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_prop_multivalued(const char *, boolean_t *);
7636ba597c5SAnurag S. Maskey 
7646ba597c5SAnurag S. Maskey /*
7656ba597c5SAnurag S. Maskey  * Walk all properties of a specific enm.  For each property, specified
7666ba597c5SAnurag S. Maskey  * callback function is called.  Caller is responsible for freeing memory
7676ba597c5SAnurag S. Maskey  * allocated for each property.
7686ba597c5SAnurag S. Maskey  */
7696ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_walk_props(nwam_enm_handle_t,
7706ba597c5SAnurag S. Maskey     int (*)(const char *, nwam_value_t, void *),
7716ba597c5SAnurag S. Maskey     void *, uint64_t, int *);
7726ba597c5SAnurag S. Maskey 
7736ba597c5SAnurag S. Maskey /*
7746ba597c5SAnurag S. Maskey  * Get/set the name of an enm.  When getting the name, the library will
7756ba597c5SAnurag S. Maskey  * allocate a buffer; the caller is responsible for freeing the memory.
7766ba597c5SAnurag S. Maskey  */
7776ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_get_name(nwam_enm_handle_t, char **);
7786ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_set_name(nwam_enm_handle_t, const char *);
7796ba597c5SAnurag S. Maskey extern boolean_t nwam_enm_can_set_name(nwam_enm_handle_t);
7806ba597c5SAnurag S. Maskey 
7816ba597c5SAnurag S. Maskey /*
7826ba597c5SAnurag S. Maskey  * Start/stop an enm.
7836ba597c5SAnurag S. Maskey  */
7846ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_enable(nwam_enm_handle_t);
7856ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_disable(nwam_enm_handle_t);
7866ba597c5SAnurag S. Maskey 
7876ba597c5SAnurag S. Maskey /*
7886ba597c5SAnurag S. Maskey  * Get state of ENM from nwamd.
7896ba597c5SAnurag S. Maskey  */
7906ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_get_state(nwam_enm_handle_t, nwam_state_t *,
7916ba597c5SAnurag S. Maskey 	nwam_aux_state_t *);
7926ba597c5SAnurag S. Maskey 
7936ba597c5SAnurag S. Maskey /*
7946ba597c5SAnurag S. Maskey  * Get whether the ENM has manual activation-mode or not.
7956ba597c5SAnurag S. Maskey  */
7966ba597c5SAnurag S. Maskey extern nwam_error_t nwam_enm_is_manual(nwam_enm_handle_t, boolean_t *);
7976ba597c5SAnurag S. Maskey 
7986ba597c5SAnurag S. Maskey /*
7996ba597c5SAnurag S. Maskey  * Known Wireless LAN (WLAN) info.
8006ba597c5SAnurag S. Maskey  */
8016ba597c5SAnurag S. Maskey 
8026ba597c5SAnurag S. Maskey /* Create a known WLAN */
8036ba597c5SAnurag S. Maskey extern nwam_error_t nwam_known_wlan_create(const char *,
8046ba597c5SAnurag S. Maskey     nwam_known_wlan_handle_t *);
8056ba597c5SAnurag S. Maskey 
8066ba597c5SAnurag S. Maskey /* Read a known WLAN from persistent storage */
8076ba597c5SAnurag S. Maskey extern nwam_error_t nwam_known_wlan_read(const char *, uint64_t,
8086ba597c5SAnurag S. Maskey     nwam_known_wlan_handle_t *);
8096ba597c5SAnurag S. Maskey 
8106ba597c5SAnurag S. Maskey /*
8116ba597c5SAnurag S. Maskey  * Destroy a known WLAN in persistent storage or free the in-memory
8126ba597c5SAnurag S. Maskey  * representation.
8136ba597c5SAnurag S. Maskey  */
8146ba597c5SAnurag S. Maskey extern nwam_error_t nwam_known_wlan_destroy(nwam_known_wlan_handle_t, uint64_t);
8156ba597c5SAnurag S. Maskey extern void nwam_known_wlan_free(nwam_known_wlan_handle_t);
8166ba597c5SAnurag S. Maskey 
8176ba597c5SAnurag S. Maskey /* make a copy of existing known WLAN */
8186ba597c5SAnurag S. Maskey extern nwam_error_t nwam_known_wlan_copy(nwam_known_wlan_handle_t, const char *,
8196ba597c5SAnurag S. Maskey     nwam_known_wlan_handle_t *);
8206ba597c5SAnurag S. Maskey 
8216ba597c5SAnurag S. Maskey /* Commit known WLAN changes to persistent storage */
8226ba597c5SAnurag S. Maskey extern nwam_error_t nwam_known_wlan_commit(nwam_known_wlan_handle_t, uint64_t);
8236ba597c5SAnurag S. Maskey 
8246ba597c5SAnurag S. Maskey /* Validate known WLAN content */
8256ba597c5SAnurag S. Maskey extern nwam_error_t nwam_known_wlan_validate(nwam_known_wlan_handle_t,
8266ba597c5SAnurag S. Maskey     const char **);
8276ba597c5SAnurag S. Maskey 
8286ba597c5SAnurag S. Maskey /* Walk known WLANs */
8296ba597c5SAnurag S. Maskey extern nwam_error_t nwam_walk_known_wlans
8306ba597c5SAnurag S. Maskey 	(int(*)(nwam_known_wlan_handle_t, void *), void *, uint64_t, int *);
8316ba597c5SAnurag S. Maskey 
8326ba597c5SAnurag S. Maskey /* get/set known WLAN name */
8336ba597c5SAnurag S. Maskey extern nwam_error_t nwam_known_wlan_get_name(nwam_known_wlan_handle_t, char **);
8346ba597c5SAnurag S. Maskey extern nwam_error_t nwam_known_wlan_set_name(nwam_known_wlan_handle_t,
8356ba597c5SAnurag S. Maskey     const char *);
8366ba597c5SAnurag S. Maskey extern boolean_t nwam_known_wlan_can_set_name(nwam_known_wlan_handle_t);
8376ba597c5SAnurag S. Maskey 
8386ba597c5SAnurag S. Maskey /* walk all properties of an in-memory known WLAN */
8396ba597c5SAnurag S. Maskey extern nwam_error_t nwam_known_wlan_walk_props(nwam_known_wlan_handle_t,
8406ba597c5SAnurag S. Maskey     int (*)(const char *, nwam_value_t, void *),
8416ba597c5SAnurag S. Maskey     void *, uint64_t, int *);
8426ba597c5SAnurag S. Maskey 
8436ba597c5SAnurag S. Maskey /* delete/get/set/validate known WLAN property */
8446ba597c5SAnurag S. Maskey extern nwam_error_t nwam_known_wlan_delete_prop(nwam_known_wlan_handle_t,
8456ba597c5SAnurag S. Maskey     const char *);
8466ba597c5SAnurag S. Maskey extern nwam_error_t nwam_known_wlan_get_prop_value(nwam_known_wlan_handle_t,
8476ba597c5SAnurag S. Maskey     const char *, nwam_value_t *);
8486ba597c5SAnurag S. Maskey extern nwam_error_t nwam_known_wlan_set_prop_value(nwam_known_wlan_handle_t,
8496ba597c5SAnurag S. Maskey     const char *, nwam_value_t);
8506ba597c5SAnurag S. Maskey extern nwam_error_t nwam_known_wlan_validate_prop(nwam_known_wlan_handle_t,
8516ba597c5SAnurag S. Maskey     const char *, nwam_value_t);
8526ba597c5SAnurag S. Maskey 
8536ba597c5SAnurag S. Maskey /* Retrieve data type */
8546ba597c5SAnurag S. Maskey extern nwam_error_t nwam_known_wlan_get_prop_type(const char *,
8556ba597c5SAnurag S. Maskey     nwam_value_type_t *);
8566ba597c5SAnurag S. Maskey /* Retrieve prop description */
8576ba597c5SAnurag S. Maskey extern nwam_error_t nwam_known_wlan_get_prop_description(const char *,
8586ba597c5SAnurag S. Maskey     const char **);
8596ba597c5SAnurag S. Maskey 
8606ba597c5SAnurag S. Maskey /* get default known WLAN props */
8616ba597c5SAnurag S. Maskey extern nwam_error_t nwam_known_wlan_get_default_proplist(const char ***,
8626ba597c5SAnurag S. Maskey     uint_t *);
8636ba597c5SAnurag S. Maskey 
8646ba597c5SAnurag S. Maskey /* Whether the property is multi-valued or not */
8656ba597c5SAnurag S. Maskey extern nwam_error_t nwam_known_wlan_prop_multivalued(const char *, boolean_t *);
8666ba597c5SAnurag S. Maskey 
8676ba597c5SAnurag S. Maskey /* Add a bssid to the known WLANs */
8686ba597c5SAnurag S. Maskey extern nwam_error_t nwam_known_wlan_add_to_known_wlans(const char *,
8696ba597c5SAnurag S. Maskey     const char *, uint32_t, uint_t, const char *);
8706ba597c5SAnurag S. Maskey 
8716ba597c5SAnurag S. Maskey /* Remove a bssid from known WLANs */
8726ba597c5SAnurag S. Maskey extern nwam_error_t nwam_known_wlan_remove_from_known_wlans(const char *,
873ab32bdf2SJames Carlson     const char *, const char *);
874b00044a2SJames Carlson 
8756ba597c5SAnurag S. Maskey /*
8766ba597c5SAnurag S. Maskey  * nwam_wlan_t is used for scan/need choice/need key events and by
8776ba597c5SAnurag S. Maskey  * nwam_wlan_get_scan_results().  The following fields are valid:
8786ba597c5SAnurag S. Maskey  *
8796ba597c5SAnurag S. Maskey  * - for scan and need choice event, ESSID, BSSID, signal strength, security
8806ba597c5SAnurag S. Maskey  * mode, speed, channel, bsstype, key index, and if we already have a key
8816ba597c5SAnurag S. Maskey  * (have_key), if the WLAN is the current selection (selected) and
8826ba597c5SAnurag S. Maskey  * if the current WLAN is connected (connected).
8836ba597c5SAnurag S. Maskey  * - for need key events, ESSID, security mode, have_key, selected and connected
8846ba597c5SAnurag S. Maskey  * values are set.  The rest of the fields are not set since multiple WLANs
8856ba597c5SAnurag S. Maskey  * may match the ESSID and have different speeds, channels etc.  If an
8866ba597c5SAnurag S. Maskey  * ESSID/BSSID selection is specified, the BSSID will be set also.
8876ba597c5SAnurag S. Maskey  *
8886ba597c5SAnurag S. Maskey  */
8896ba597c5SAnurag S. Maskey typedef struct {
8906ba597c5SAnurag S. Maskey 	char nww_essid[NWAM_MAX_NAME_LEN];
8916ba597c5SAnurag S. Maskey 	char nww_bssid[NWAM_MAX_NAME_LEN];
8926ba597c5SAnurag S. Maskey 	char nww_signal_strength[NWAM_MAX_NAME_LEN];
8936ba597c5SAnurag S. Maskey 	uint32_t nww_security_mode; /* a dladm_wlan_secmode_t */
8946ba597c5SAnurag S. Maskey 	uint32_t nww_speed; /* a dladm_wlan_speed_t */
8956ba597c5SAnurag S. Maskey 	uint32_t nww_channel; /* a dladm_wlan_channel_t */
8966ba597c5SAnurag S. Maskey 	uint32_t nww_bsstype; /* a dladm_wlan_bsstype_t */
8976ba597c5SAnurag S. Maskey 	uint_t nww_keyindex;
8986ba597c5SAnurag S. Maskey 	boolean_t nww_have_key;
8996ba597c5SAnurag S. Maskey 	boolean_t nww_selected;
9006ba597c5SAnurag S. Maskey 	boolean_t nww_connected;
9016ba597c5SAnurag S. Maskey } nwam_wlan_t;
9026ba597c5SAnurag S. Maskey 
9036ba597c5SAnurag S. Maskey /*
9046ba597c5SAnurag S. Maskey  * Active WLAN definitions. Used to scan WLANs/choose a WLAN/set a WLAN key.
9056ba597c5SAnurag S. Maskey  */
9066ba597c5SAnurag S. Maskey extern nwam_error_t nwam_wlan_scan(const char *);
9076ba597c5SAnurag S. Maskey extern nwam_error_t nwam_wlan_get_scan_results(const char *, uint_t *,
9086ba597c5SAnurag S. Maskey     nwam_wlan_t **);
9096ba597c5SAnurag S. Maskey extern nwam_error_t nwam_wlan_select(const char *, const char *, const char *,
9106ba597c5SAnurag S. Maskey     uint32_t, boolean_t);
9116ba597c5SAnurag S. Maskey extern nwam_error_t nwam_wlan_set_key(const char *, const char *, const char *,
9126ba597c5SAnurag S. Maskey     uint32_t, uint_t, const char *);
9136ba597c5SAnurag S. Maskey 
9146ba597c5SAnurag S. Maskey /*
9156ba597c5SAnurag S. Maskey  * Event notification definitions
9166ba597c5SAnurag S. Maskey  */
9176ba597c5SAnurag S. Maskey #define	NWAM_EVENT_TYPE_NOOP			0
9186ba597c5SAnurag S. Maskey #define	NWAM_EVENT_TYPE_INIT			1
9196ba597c5SAnurag S. Maskey #define	NWAM_EVENT_TYPE_SHUTDOWN		2
9206ba597c5SAnurag S. Maskey #define	NWAM_EVENT_TYPE_OBJECT_ACTION		3
9216ba597c5SAnurag S. Maskey #define	NWAM_EVENT_TYPE_OBJECT_STATE		4
9226ba597c5SAnurag S. Maskey #define	NWAM_EVENT_TYPE_PRIORITY_GROUP		5
9236ba597c5SAnurag S. Maskey #define	NWAM_EVENT_TYPE_INFO			6
9246ba597c5SAnurag S. Maskey #define	NWAM_EVENT_TYPE_WLAN_SCAN_REPORT	7
9256ba597c5SAnurag S. Maskey #define	NWAM_EVENT_TYPE_WLAN_NEED_CHOICE	8
9266ba597c5SAnurag S. Maskey #define	NWAM_EVENT_TYPE_WLAN_NEED_KEY		9
9276ba597c5SAnurag S. Maskey #define	NWAM_EVENT_TYPE_WLAN_CONNECTION_REPORT	10
9286ba597c5SAnurag S. Maskey #define	NWAM_EVENT_TYPE_IF_ACTION		11
9296ba597c5SAnurag S. Maskey #define	NWAM_EVENT_TYPE_IF_STATE		12
9306ba597c5SAnurag S. Maskey #define	NWAM_EVENT_TYPE_LINK_ACTION		13
9316ba597c5SAnurag S. Maskey #define	NWAM_EVENT_TYPE_LINK_STATE		14
9326ba597c5SAnurag S. Maskey #define	NWAM_EVENT_MAX				NWAM_EVENT_TYPE_LINK_STATE
9336ba597c5SAnurag S. Maskey 
9346ba597c5SAnurag S. Maskey #define	NWAM_EVENT_STATUS_OK			0
9356ba597c5SAnurag S. Maskey #define	NWAM_EVENT_STATUS_NOT_HANDLED		1
9366ba597c5SAnurag S. Maskey 
9376ba597c5SAnurag S. Maskey #define	NWAM_EVENT_NETWORK_OBJECT_UNDEFINED	0
9386ba597c5SAnurag S. Maskey #define	NWAM_EVENT_NETWORK_OBJECT_LINK		1
9396ba597c5SAnurag S. Maskey #define	NWAM_EVENT_NETWORK_OBJECT_INTERFACE	2
9406ba597c5SAnurag S. Maskey 
9416ba597c5SAnurag S. Maskey #define	NWAM_EVENT_REQUEST_UNDEFINED		0
9426ba597c5SAnurag S. Maskey #define	NWAM_EVENT_REQUEST_WLAN			1
9436ba597c5SAnurag S. Maskey #define	NWAM_EVENT_REQUEST_KEY			2
9446ba597c5SAnurag S. Maskey 
9456ba597c5SAnurag S. Maskey /*
9466ba597c5SAnurag S. Maskey  * Actions for nwamd to perform, used in conjunction with
9476ba597c5SAnurag S. Maskey  * nwam_request_type_t in nwam_door_arg_t.
9486ba597c5SAnurag S. Maskey  * Add string representations to nwam_action_to_string() in libnwam_util.c.
9496ba597c5SAnurag S. Maskey  */
9506ba597c5SAnurag S. Maskey typedef enum {
9516ba597c5SAnurag S. Maskey 	NWAM_ACTION_UNKNOWN = -1,
9526ba597c5SAnurag S. Maskey 	NWAM_ACTION_ADD,
9536ba597c5SAnurag S. Maskey 	NWAM_ACTION_REMOVE,
9546ba597c5SAnurag S. Maskey 	NWAM_ACTION_REFRESH,
9556ba597c5SAnurag S. Maskey 	NWAM_ACTION_ENABLE,
9566ba597c5SAnurag S. Maskey 	NWAM_ACTION_DISABLE,
9576ba597c5SAnurag S. Maskey 	NWAM_ACTION_DESTROY
9586ba597c5SAnurag S. Maskey } nwam_action_t;
9596ba597c5SAnurag S. Maskey 
9606ba597c5SAnurag S. Maskey typedef enum {
9616ba597c5SAnurag S. Maskey 	NWAM_OBJECT_TYPE_UNKNOWN = -1,
9626ba597c5SAnurag S. Maskey 	NWAM_OBJECT_TYPE_NCP = 0,
9636ba597c5SAnurag S. Maskey 	NWAM_OBJECT_TYPE_NCU = 1,
9646ba597c5SAnurag S. Maskey 	NWAM_OBJECT_TYPE_LOC = 2,
9656ba597c5SAnurag S. Maskey 	NWAM_OBJECT_TYPE_ENM = 3,
9666ba597c5SAnurag S. Maskey 	NWAM_OBJECT_TYPE_KNOWN_WLAN = 4
9676ba597c5SAnurag S. Maskey } nwam_object_type_t;
9686ba597c5SAnurag S. Maskey 
9696ba597c5SAnurag S. Maskey typedef struct nwam_event *nwam_event_t;
9706ba597c5SAnurag S. Maskey struct nwam_event {
9716ba597c5SAnurag S. Maskey 	int nwe_type;
9726ba597c5SAnurag S. Maskey 	uint32_t nwe_size;
9736ba597c5SAnurag S. Maskey 
9746ba597c5SAnurag S. Maskey 	union {
9756ba597c5SAnurag S. Maskey 		struct nwam_event_object_action {
9766ba597c5SAnurag S. Maskey 			nwam_object_type_t nwe_object_type;
9776ba597c5SAnurag S. Maskey 			char nwe_name[NWAM_MAX_NAME_LEN];
9786ba597c5SAnurag S. Maskey 			char nwe_parent[NWAM_MAX_NAME_LEN];
9796ba597c5SAnurag S. Maskey 			nwam_action_t nwe_action;
9806ba597c5SAnurag S. Maskey 		} nwe_object_action;
9816ba597c5SAnurag S. Maskey 
9826ba597c5SAnurag S. Maskey 		struct nwam_event_object_state {
9836ba597c5SAnurag S. Maskey 			nwam_object_type_t nwe_object_type;
9846ba597c5SAnurag S. Maskey 			char nwe_name[NWAM_MAX_NAME_LEN];
9856ba597c5SAnurag S. Maskey 			char nwe_parent[NWAM_MAX_NAME_LEN];
9866ba597c5SAnurag S. Maskey 			nwam_state_t nwe_state;
9876ba597c5SAnurag S. Maskey 			nwam_aux_state_t nwe_aux_state;
9886ba597c5SAnurag S. Maskey 		} nwe_object_state;
9896ba597c5SAnurag S. Maskey 
9906ba597c5SAnurag S. Maskey 		struct nwam_event_priority_group_info {
9916ba597c5SAnurag S. Maskey 			int64_t nwe_priority;
9926ba597c5SAnurag S. Maskey 		} nwe_priority_group_info;
9936ba597c5SAnurag S. Maskey 
9946ba597c5SAnurag S. Maskey 		struct nwam_event_info {
9956ba597c5SAnurag S. Maskey 			char nwe_message[NWAM_MAX_VALUE_LEN];
9966ba597c5SAnurag S. Maskey 		} nwe_info;
9976ba597c5SAnurag S. Maskey 
9986ba597c5SAnurag S. Maskey 		/*
9996ba597c5SAnurag S. Maskey 		 * wlan_info stores both scan results and the single
10006ba597c5SAnurag S. Maskey 		 * WLAN we require a key for in the case of _WLAN_NEED_KEY
10016ba597c5SAnurag S. Maskey 		 * events.  For _WLAN_CONNECTION_REPORT events, it stores
10026ba597c5SAnurag S. Maskey 		 * the WLAN the connection succeeded/failed for, indicating
10036ba597c5SAnurag S. Maskey 		 * success/failure using the 'connected' boolean.
10046ba597c5SAnurag S. Maskey 		 */
10056ba597c5SAnurag S. Maskey 		struct nwam_event_wlan_info {
10066ba597c5SAnurag S. Maskey 			char nwe_name[NWAM_MAX_NAME_LEN];
10076ba597c5SAnurag S. Maskey 			boolean_t nwe_connected;
10086ba597c5SAnurag S. Maskey 			uint16_t nwe_num_wlans;
10096ba597c5SAnurag S. Maskey 			nwam_wlan_t nwe_wlans[1];
10106ba597c5SAnurag S. Maskey 			/*
10116ba597c5SAnurag S. Maskey 			 * space may be allocated by user here for the
10126ba597c5SAnurag S. Maskey 			 * number of wlans
10136ba597c5SAnurag S. Maskey 			 */
10146ba597c5SAnurag S. Maskey 		} nwe_wlan_info;
10156ba597c5SAnurag S. Maskey 
10166ba597c5SAnurag S. Maskey 		struct nwam_event_if_action {
10176ba597c5SAnurag S. Maskey 			char nwe_name[NWAM_MAX_NAME_LEN];
10186ba597c5SAnurag S. Maskey 			nwam_action_t nwe_action;
10196ba597c5SAnurag S. Maskey 		} nwe_if_action;
10206ba597c5SAnurag S. Maskey 
10216ba597c5SAnurag S. Maskey 		struct nwam_event_if_state {
10226ba597c5SAnurag S. Maskey 			char nwe_name[NWAM_MAX_NAME_LEN];
10236ba597c5SAnurag S. Maskey 			uint32_t nwe_flags;
10246ba597c5SAnurag S. Maskey 			uint32_t nwe_addr_valid; /* boolean */
10256ba597c5SAnurag S. Maskey 			uint32_t nwe_addr_added; /* boolean */
10266ba597c5SAnurag S. Maskey 			struct sockaddr_storage nwe_addr;
1027f6da83d4SAnurag S. Maskey 			struct sockaddr_storage nwe_netmask;
10286ba597c5SAnurag S. Maskey 		} nwe_if_state;
10296ba597c5SAnurag S. Maskey 
10306ba597c5SAnurag S. Maskey 		struct nwam_event_link_state {
10316ba597c5SAnurag S. Maskey 			char nwe_name[NWAM_MAX_NAME_LEN];
10326ba597c5SAnurag S. Maskey 			boolean_t nwe_link_up;
10336ba597c5SAnurag S. Maskey 			/* link_state_t from sys/mac.h */
10346ba597c5SAnurag S. Maskey 		} nwe_link_state;
10356ba597c5SAnurag S. Maskey 
10366ba597c5SAnurag S. Maskey 		struct nwam_event_link_action {
10376ba597c5SAnurag S. Maskey 			char nwe_name[NWAM_MAX_NAME_LEN];
10386ba597c5SAnurag S. Maskey 			nwam_action_t nwe_action;
10396ba597c5SAnurag S. Maskey 		} nwe_link_action;
10406ba597c5SAnurag S. Maskey 	} nwe_data;
10416ba597c5SAnurag S. Maskey };
10426ba597c5SAnurag S. Maskey 
10436ba597c5SAnurag S. Maskey /* NWAM client functions, used to register/unregister and receive events */
10446ba597c5SAnurag S. Maskey extern nwam_error_t nwam_events_init(void);
10456ba597c5SAnurag S. Maskey extern void nwam_events_fini(void);
10466ba597c5SAnurag S. Maskey extern nwam_error_t nwam_event_wait(nwam_event_t *);
10476ba597c5SAnurag S. Maskey extern void nwam_event_free(nwam_event_t);
10486ba597c5SAnurag S. Maskey 
10496ba597c5SAnurag S. Maskey /* Event-related string conversion functions */
10506ba597c5SAnurag S. Maskey extern const char *nwam_action_to_string(nwam_action_t);
10516ba597c5SAnurag S. Maskey extern const char *nwam_event_type_to_string(int);
10526ba597c5SAnurag S. Maskey extern const char *nwam_state_to_string(nwam_state_t);
10536ba597c5SAnurag S. Maskey extern const char *nwam_aux_state_to_string(nwam_aux_state_t);
10546ba597c5SAnurag S. Maskey 
10556ba597c5SAnurag S. Maskey extern const char *nwam_object_type_to_string(nwam_object_type_t);
10566ba597c5SAnurag S. Maskey extern nwam_object_type_t nwam_string_to_object_type(const char *);
10576ba597c5SAnurag S. Maskey 
10586ba597c5SAnurag S. Maskey /* Utility strtok_r-like function */
10596ba597c5SAnurag S. Maskey extern char *nwam_tokenize_by_unescaped_delim(char *, char, char **);
10606ba597c5SAnurag S. Maskey 
10616ba597c5SAnurag S. Maskey #ifdef	__cplusplus
1062b00044a2SJames Carlson }
1063b00044a2SJames Carlson #endif
1064b00044a2SJames Carlson 
10656ba597c5SAnurag S. Maskey #endif	/* _LIBNWAM_H */
1066