17645Sjames.d.carlson@sun.com /* 27645Sjames.d.carlson@sun.com * CDDL HEADER START 37645Sjames.d.carlson@sun.com * 47645Sjames.d.carlson@sun.com * The contents of this file are subject to the terms of the 57645Sjames.d.carlson@sun.com * Common Development and Distribution License (the "License"). 67645Sjames.d.carlson@sun.com * You may not use this file except in compliance with the License. 77645Sjames.d.carlson@sun.com * 87645Sjames.d.carlson@sun.com * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97645Sjames.d.carlson@sun.com * or http://www.opensolaris.org/os/licensing. 107645Sjames.d.carlson@sun.com * See the License for the specific language governing permissions 117645Sjames.d.carlson@sun.com * and limitations under the License. 127645Sjames.d.carlson@sun.com * 137645Sjames.d.carlson@sun.com * When distributing Covered Code, include this CDDL HEADER in each 147645Sjames.d.carlson@sun.com * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157645Sjames.d.carlson@sun.com * If applicable, add the following below this CDDL HEADER, with the 167645Sjames.d.carlson@sun.com * fields enclosed by brackets "[]" replaced with your own identifying 177645Sjames.d.carlson@sun.com * information: Portions Copyright [yyyy] [name of copyright owner] 187645Sjames.d.carlson@sun.com * 197645Sjames.d.carlson@sun.com * CDDL HEADER END 207645Sjames.d.carlson@sun.com */ 217645Sjames.d.carlson@sun.com /* 22*12576SAnurag.Maskey@Oracle.COM * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. 237645Sjames.d.carlson@sun.com */ 247645Sjames.d.carlson@sun.com 2511767SAnurag.Maskey@Sun.COM /* 2611767SAnurag.Maskey@Sun.COM * This file contains data structures and APIs of libnwam. 2711767SAnurag.Maskey@Sun.COM * Implementation is MT safe. 2811767SAnurag.Maskey@Sun.COM */ 297645Sjames.d.carlson@sun.com #ifndef _LIBNWAM_H 307645Sjames.d.carlson@sun.com #define _LIBNWAM_H 317645Sjames.d.carlson@sun.com 3211767SAnurag.Maskey@Sun.COM #ifdef __cplusplus 337645Sjames.d.carlson@sun.com extern "C" { 347645Sjames.d.carlson@sun.com #endif 357645Sjames.d.carlson@sun.com 3611767SAnurag.Maskey@Sun.COM #include <bsm/adt.h> 3711767SAnurag.Maskey@Sun.COM #include <net/if.h> 3811767SAnurag.Maskey@Sun.COM #include <inet/ip.h> 3911767SAnurag.Maskey@Sun.COM #include <inet/ip6.h> 4011767SAnurag.Maskey@Sun.COM #include <sys/types.h> 4111767SAnurag.Maskey@Sun.COM #include <sys/socket.h> 4211767SAnurag.Maskey@Sun.COM 4311767SAnurag.Maskey@Sun.COM /* 4411767SAnurag.Maskey@Sun.COM * Note - several interface functions below are not utilized in ON, but are 4511767SAnurag.Maskey@Sun.COM * used by the GNOME nwam-manager. One example is nwam_enm_get_name(). 4611767SAnurag.Maskey@Sun.COM */ 4711767SAnurag.Maskey@Sun.COM 4811767SAnurag.Maskey@Sun.COM /* 4911767SAnurag.Maskey@Sun.COM * Common definitions 5011767SAnurag.Maskey@Sun.COM */ 5111767SAnurag.Maskey@Sun.COM 5211767SAnurag.Maskey@Sun.COM /* nwam FMRI and properties */ 5311767SAnurag.Maskey@Sun.COM #define NWAM_FMRI "svc:/network/physical:nwam" 5411767SAnurag.Maskey@Sun.COM #define NWAM_PG "nwamd" 5511767SAnurag.Maskey@Sun.COM #define NWAM_PROP_ACTIVE_NCP "active_ncp" 5611767SAnurag.Maskey@Sun.COM 5711767SAnurag.Maskey@Sun.COM /* nwam flags used for read/commit */ 5811767SAnurag.Maskey@Sun.COM /* Block waiting for commit if necessary */ 5911767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_BLOCKING 0x00000001 6011767SAnurag.Maskey@Sun.COM /* Committed object must be new */ 6111767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_CREATE 0x00000002 6211767SAnurag.Maskey@Sun.COM /* Tell destroy functions not to free handle */ 6311767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_DO_NOT_FREE 0x00000004 6411767SAnurag.Maskey@Sun.COM /* Object is being enabled/disabled */ 6511767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_ENTITY_ENABLE 0x00000008 6611767SAnurag.Maskey@Sun.COM /* Known WLAN being read, committed or destroyed */ 6711767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_ENTITY_KNOWN_WLAN 0x00000010 6811767SAnurag.Maskey@Sun.COM 6911767SAnurag.Maskey@Sun.COM /* nwam flags used for selecting ncu type for walk */ 7011767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_NCU_TYPE_LINK 0x00000001ULL << 32 7111767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_NCU_TYPE_INTERFACE 0x00000002ULL << 32 7211767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_NCU_TYPE_ALL (NWAM_FLAG_NCU_TYPE_LINK | \ 7311767SAnurag.Maskey@Sun.COM NWAM_FLAG_NCU_TYPE_INTERFACE) 7411767SAnurag.Maskey@Sun.COM 7511767SAnurag.Maskey@Sun.COM /* nwam flags used for selecting ncu class for walk */ 7611767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_NCU_CLASS_PHYS 0x00000100ULL << 32 7711767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_NCU_CLASS_IP 0x00010000ULL << 32 7811767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_NCU_CLASS_ALL_LINK NWAM_FLAG_NCU_CLASS_PHYS 7911767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_NCU_CLASS_ALL_INTERFACE NWAM_FLAG_NCU_CLASS_IP 8011767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_NCU_CLASS_ALL (NWAM_FLAG_NCU_CLASS_ALL_INTERFACE | \ 8111767SAnurag.Maskey@Sun.COM NWAM_FLAG_NCU_CLASS_ALL_LINK) 8211767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_NCU_TYPE_CLASS_ALL (NWAM_FLAG_NCU_CLASS_ALL | \ 8311767SAnurag.Maskey@Sun.COM NWAM_FLAG_NCU_TYPE_ALL) 8411767SAnurag.Maskey@Sun.COM 8511767SAnurag.Maskey@Sun.COM /* flags used for selecting activation for walk */ 8611767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_ACTIVATION_MODE_MANUAL 0x000000001ULL << 32 8711767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_ACTIVATION_MODE_SYSTEM 0x000000002ULL << 32 8811767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_ACTIVATION_MODE_PRIORITIZED 0x000000004ULL << 32 8911767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_ACTIVATION_MODE_CONDITIONAL_ANY 0x000000008ULL << 32 9011767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_ACTIVATION_MODE_CONDITIONAL_ALL 0x000000010ULL << 32 9111767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_ACTIVATION_MODE_ALL (NWAM_FLAG_ACTIVATION_MODE_MANUAL |\ 9211767SAnurag.Maskey@Sun.COM NWAM_FLAG_ACTIVATION_MODE_SYSTEM |\ 9311767SAnurag.Maskey@Sun.COM NWAM_FLAG_ACTIVATION_MODE_PRIORITIZED |\ 9411767SAnurag.Maskey@Sun.COM NWAM_FLAG_ACTIVATION_MODE_CONDITIONAL_ANY |\ 9511767SAnurag.Maskey@Sun.COM NWAM_FLAG_ACTIVATION_MODE_CONDITIONAL_ALL) 9611767SAnurag.Maskey@Sun.COM 9711767SAnurag.Maskey@Sun.COM /* Walk known WLANs in order of priority (lowest first) */ 9811767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_KNOWN_WLAN_WALK_PRIORITY_ORDER 0x000010000ULL << 32 9911767SAnurag.Maskey@Sun.COM /* Do not perform priority collision checking for known WLANs */ 10011767SAnurag.Maskey@Sun.COM #define NWAM_FLAG_KNOWN_WLAN_NO_COLLISION_CHECK 0x000020000ULL << 32 10111767SAnurag.Maskey@Sun.COM 10211767SAnurag.Maskey@Sun.COM /* nwam return codes */ 10311767SAnurag.Maskey@Sun.COM typedef enum { 10411767SAnurag.Maskey@Sun.COM NWAM_SUCCESS, /* No error occured */ 10511767SAnurag.Maskey@Sun.COM NWAM_LIST_END, /* End of list reached */ 10611767SAnurag.Maskey@Sun.COM NWAM_INVALID_HANDLE, /* Entity handle is invalid */ 10711767SAnurag.Maskey@Sun.COM NWAM_HANDLE_UNBOUND, /* Handle not bound to entity */ 10811767SAnurag.Maskey@Sun.COM NWAM_INVALID_ARG, /* Argument is invalid */ 10911767SAnurag.Maskey@Sun.COM NWAM_PERMISSION_DENIED, /* Insufficient privileges for action */ 11011767SAnurag.Maskey@Sun.COM NWAM_NO_MEMORY, /* Out of memory */ 11111767SAnurag.Maskey@Sun.COM NWAM_ENTITY_EXISTS, /* Entity already exists */ 11211767SAnurag.Maskey@Sun.COM NWAM_ENTITY_IN_USE, /* Entity in use */ 11311767SAnurag.Maskey@Sun.COM NWAM_ENTITY_COMMITTED, /* Entity already committed */ 11411767SAnurag.Maskey@Sun.COM NWAM_ENTITY_NOT_FOUND, /* Entity not found */ 11511767SAnurag.Maskey@Sun.COM NWAM_ENTITY_TYPE_MISMATCH, /* Entity type mismatch */ 11611767SAnurag.Maskey@Sun.COM NWAM_ENTITY_INVALID, /* Validation of entity failed */ 11711767SAnurag.Maskey@Sun.COM NWAM_ENTITY_INVALID_MEMBER, /* Entity member invalid */ 11811767SAnurag.Maskey@Sun.COM NWAM_ENTITY_INVALID_STATE, /* Entity is not in appropriate state */ 11911767SAnurag.Maskey@Sun.COM NWAM_ENTITY_INVALID_VALUE, /* Validation of entity value failed */ 12011767SAnurag.Maskey@Sun.COM NWAM_ENTITY_MISSING_MEMBER, /* Required member is missing */ 12111767SAnurag.Maskey@Sun.COM NWAM_ENTITY_NO_VALUE, /* No value associated with entity */ 12211767SAnurag.Maskey@Sun.COM NWAM_ENTITY_MULTIPLE_VALUES, /* Multiple values for entity */ 12311767SAnurag.Maskey@Sun.COM NWAM_ENTITY_READ_ONLY, /* Entity is marked read only */ 12411767SAnurag.Maskey@Sun.COM NWAM_ENTITY_NOT_DESTROYABLE, /* Entity cannot be destroyed */ 12511767SAnurag.Maskey@Sun.COM NWAM_ENTITY_NOT_MANUAL, /* Entity cannot be manually enabled/disabled */ 12611767SAnurag.Maskey@Sun.COM NWAM_WALK_HALTED, /* Callback function returned nonzero */ 12711767SAnurag.Maskey@Sun.COM NWAM_ERROR_BIND, /* Could not bind to backend */ 12811767SAnurag.Maskey@Sun.COM NWAM_ERROR_BACKEND_INIT, /* Could not initialize backend */ 12911767SAnurag.Maskey@Sun.COM NWAM_ERROR_INTERNAL /* Internal error */ 13011767SAnurag.Maskey@Sun.COM } nwam_error_t; 13111767SAnurag.Maskey@Sun.COM 13211767SAnurag.Maskey@Sun.COM #define NWAM_MAX_NAME_LEN 128 13311767SAnurag.Maskey@Sun.COM #define NWAM_MAX_VALUE_LEN 256 13411767SAnurag.Maskey@Sun.COM #define NWAM_MAX_FMRI_LEN NWAM_MAX_VALUE_LEN 13511767SAnurag.Maskey@Sun.COM #define NWAM_MAX_NUM_VALUES 32 13611767SAnurag.Maskey@Sun.COM #define NWAM_MAX_NUM_PROPERTIES 32 13711767SAnurag.Maskey@Sun.COM 13811767SAnurag.Maskey@Sun.COM /* used for getting and setting of properties */ 13911767SAnurag.Maskey@Sun.COM typedef enum { 14011767SAnurag.Maskey@Sun.COM NWAM_VALUE_TYPE_BOOLEAN, 14111767SAnurag.Maskey@Sun.COM NWAM_VALUE_TYPE_INT64, 14211767SAnurag.Maskey@Sun.COM NWAM_VALUE_TYPE_UINT64, 14311767SAnurag.Maskey@Sun.COM NWAM_VALUE_TYPE_STRING, 14411767SAnurag.Maskey@Sun.COM NWAM_VALUE_TYPE_UNKNOWN 14511767SAnurag.Maskey@Sun.COM } nwam_value_type_t; 14611767SAnurag.Maskey@Sun.COM 14711767SAnurag.Maskey@Sun.COM /* Holds values of various types for getting and setting of properties */ 14811767SAnurag.Maskey@Sun.COM /* Forward definition */ 14911767SAnurag.Maskey@Sun.COM struct nwam_value; 15011767SAnurag.Maskey@Sun.COM typedef struct nwam_value *nwam_value_t; 15111767SAnurag.Maskey@Sun.COM 15211767SAnurag.Maskey@Sun.COM /* Value-related functions. */ 15311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_create_boolean(boolean_t, nwam_value_t *); 15411767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_create_boolean_array(boolean_t *, uint_t, 15511767SAnurag.Maskey@Sun.COM nwam_value_t *); 15611767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_create_int64(int64_t, nwam_value_t *); 15711767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_create_int64_array(int64_t *, uint_t, 15811767SAnurag.Maskey@Sun.COM nwam_value_t *); 15911767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_create_uint64(uint64_t, nwam_value_t *); 16011767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_create_uint64_array(uint64_t *, uint_t, 16111767SAnurag.Maskey@Sun.COM nwam_value_t *); 16211767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_create_string(char *, nwam_value_t *); 16311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_create_string_array(char **, uint_t, 16411767SAnurag.Maskey@Sun.COM nwam_value_t *); 16511767SAnurag.Maskey@Sun.COM 16611767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_boolean(nwam_value_t, boolean_t *); 16711767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_boolean_array(nwam_value_t, boolean_t **, 16811767SAnurag.Maskey@Sun.COM uint_t *); 16911767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_int64(nwam_value_t, int64_t *); 17011767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_int64_array(nwam_value_t, int64_t **, 17111767SAnurag.Maskey@Sun.COM uint_t *); 17211767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_uint64(nwam_value_t, uint64_t *); 17311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_uint64_array(nwam_value_t, uint64_t **, 17411767SAnurag.Maskey@Sun.COM uint_t *); 17511767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_string(nwam_value_t, char **); 17611767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_string_array(nwam_value_t, char ***, 17711767SAnurag.Maskey@Sun.COM uint_t *); 17811767SAnurag.Maskey@Sun.COM 17911767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_type(nwam_value_t, nwam_value_type_t *); 18011767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_get_numvalues(nwam_value_t, uint_t *); 18111767SAnurag.Maskey@Sun.COM 18211767SAnurag.Maskey@Sun.COM extern void nwam_value_free(nwam_value_t); 18311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_copy(nwam_value_t, nwam_value_t *); 18411767SAnurag.Maskey@Sun.COM 18511767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_uint64_get_value_string(const char *, uint64_t, 18611767SAnurag.Maskey@Sun.COM const char **); 18711767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_value_string_get_uint64(const char *, const char *, 18811767SAnurag.Maskey@Sun.COM uint64_t *); 18911767SAnurag.Maskey@Sun.COM 19011767SAnurag.Maskey@Sun.COM /* 19111767SAnurag.Maskey@Sun.COM * To retrieve a localized error string 19211767SAnurag.Maskey@Sun.COM */ 19311767SAnurag.Maskey@Sun.COM extern const char *nwam_strerror(nwam_error_t); 19411767SAnurag.Maskey@Sun.COM 19511767SAnurag.Maskey@Sun.COM /* 19611767SAnurag.Maskey@Sun.COM * State and auxiliary state describe the state of ENMs, NCUs and locations. 19711767SAnurag.Maskey@Sun.COM */ 19811767SAnurag.Maskey@Sun.COM typedef enum { 19911767SAnurag.Maskey@Sun.COM NWAM_STATE_UNINITIALIZED = 0x0, 20011767SAnurag.Maskey@Sun.COM NWAM_STATE_INITIALIZED = 0x1, 20111767SAnurag.Maskey@Sun.COM NWAM_STATE_OFFLINE = 0x2, 20211767SAnurag.Maskey@Sun.COM NWAM_STATE_OFFLINE_TO_ONLINE = 0x4, 20311767SAnurag.Maskey@Sun.COM NWAM_STATE_ONLINE_TO_OFFLINE = 0x8, 20411767SAnurag.Maskey@Sun.COM NWAM_STATE_ONLINE = 0x10, 20511767SAnurag.Maskey@Sun.COM NWAM_STATE_MAINTENANCE = 0x20, 20611767SAnurag.Maskey@Sun.COM NWAM_STATE_DEGRADED = 0x40, 20711767SAnurag.Maskey@Sun.COM NWAM_STATE_DISABLED = 0x80 20811767SAnurag.Maskey@Sun.COM } nwam_state_t; 20911767SAnurag.Maskey@Sun.COM 21011767SAnurag.Maskey@Sun.COM #define NWAM_STATE_ANY (NWAM_STATE_UNINITIALIZED | \ 21111767SAnurag.Maskey@Sun.COM NWAM_STATE_INITIALIZED | \ 21211767SAnurag.Maskey@Sun.COM NWAM_STATE_OFFLINE | \ 21311767SAnurag.Maskey@Sun.COM NWAM_STATE_OFFLINE_TO_ONLINE | \ 21411767SAnurag.Maskey@Sun.COM NWAM_STATE_ONLINE_TO_OFFLINE | \ 21511767SAnurag.Maskey@Sun.COM NWAM_STATE_ONLINE | \ 21611767SAnurag.Maskey@Sun.COM NWAM_STATE_MAINTENANCE | \ 21711767SAnurag.Maskey@Sun.COM NWAM_STATE_DEGRADED | \ 21811767SAnurag.Maskey@Sun.COM NWAM_STATE_DISABLED) 21911767SAnurag.Maskey@Sun.COM 22011767SAnurag.Maskey@Sun.COM /* 22111767SAnurag.Maskey@Sun.COM * The auxiliary state denotes specific reasons why an object is in a particular 22211767SAnurag.Maskey@Sun.COM * state (e.g. "script failed", "disabled by administrator", "waiting for DHCP 22311767SAnurag.Maskey@Sun.COM * response"). 22411767SAnurag.Maskey@Sun.COM */ 22511767SAnurag.Maskey@Sun.COM typedef enum { 22611767SAnurag.Maskey@Sun.COM /* General auxiliary states */ 22711767SAnurag.Maskey@Sun.COM NWAM_AUX_STATE_UNINITIALIZED, 22811767SAnurag.Maskey@Sun.COM NWAM_AUX_STATE_INITIALIZED, 22911767SAnurag.Maskey@Sun.COM NWAM_AUX_STATE_CONDITIONS_NOT_MET, 23011767SAnurag.Maskey@Sun.COM NWAM_AUX_STATE_MANUAL_DISABLE, 23111767SAnurag.Maskey@Sun.COM NWAM_AUX_STATE_METHOD_FAILED, 23211767SAnurag.Maskey@Sun.COM NWAM_AUX_STATE_METHOD_MISSING, 23311767SAnurag.Maskey@Sun.COM NWAM_AUX_STATE_METHOD_RUNNING, 23411767SAnurag.Maskey@Sun.COM NWAM_AUX_STATE_INVALID_CONFIG, 23511767SAnurag.Maskey@Sun.COM NWAM_AUX_STATE_ACTIVE, 23611767SAnurag.Maskey@Sun.COM /* Link-specific auxiliary states */ 23711767SAnurag.Maskey@Sun.COM NWAM_AUX_STATE_LINK_WIFI_SCANNING, 23811767SAnurag.Maskey@Sun.COM NWAM_AUX_STATE_LINK_WIFI_NEED_SELECTION, 23911767SAnurag.Maskey@Sun.COM NWAM_AUX_STATE_LINK_WIFI_NEED_KEY, 24011767SAnurag.Maskey@Sun.COM NWAM_AUX_STATE_LINK_WIFI_CONNECTING, 24111767SAnurag.Maskey@Sun.COM /* IP interface-specific auxiliary states */ 24211767SAnurag.Maskey@Sun.COM NWAM_AUX_STATE_IF_WAITING_FOR_ADDR, 24311767SAnurag.Maskey@Sun.COM NWAM_AUX_STATE_IF_DHCP_TIMED_OUT, 24411767SAnurag.Maskey@Sun.COM NWAM_AUX_STATE_IF_DUPLICATE_ADDR, 24511767SAnurag.Maskey@Sun.COM /* Common link/interface auxiliary states */ 24611767SAnurag.Maskey@Sun.COM NWAM_AUX_STATE_UP, 24711767SAnurag.Maskey@Sun.COM NWAM_AUX_STATE_DOWN, 24811767SAnurag.Maskey@Sun.COM NWAM_AUX_STATE_NOT_FOUND 24911767SAnurag.Maskey@Sun.COM } nwam_aux_state_t; 25011767SAnurag.Maskey@Sun.COM 25111767SAnurag.Maskey@Sun.COM /* Activation modes */ 25211767SAnurag.Maskey@Sun.COM typedef enum { 25311767SAnurag.Maskey@Sun.COM NWAM_ACTIVATION_MODE_MANUAL, 25411767SAnurag.Maskey@Sun.COM NWAM_ACTIVATION_MODE_SYSTEM, 25511767SAnurag.Maskey@Sun.COM NWAM_ACTIVATION_MODE_CONDITIONAL_ANY, 25611767SAnurag.Maskey@Sun.COM NWAM_ACTIVATION_MODE_CONDITIONAL_ALL, 25711767SAnurag.Maskey@Sun.COM NWAM_ACTIVATION_MODE_PRIORITIZED 25811767SAnurag.Maskey@Sun.COM } nwam_activation_mode_t; 2597645Sjames.d.carlson@sun.com 26011767SAnurag.Maskey@Sun.COM /* 26111767SAnurag.Maskey@Sun.COM * Conditions are of the form 26211767SAnurag.Maskey@Sun.COM * 26311767SAnurag.Maskey@Sun.COM * ncu|enm|loc name is|is-not active 26411767SAnurag.Maskey@Sun.COM * ip-address is|is-not|is-in-range|is-not-in-range ipaddr[/prefixlen] 26511767SAnurag.Maskey@Sun.COM * advertised-domain is|is-not|contains|does-not-contain string 26611767SAnurag.Maskey@Sun.COM * system-domain is|is-not|contains|does-not-contain string 26711767SAnurag.Maskey@Sun.COM * essid is|is-not|contains|does-not-contain string 26811767SAnurag.Maskey@Sun.COM * bssid is|is-not <string> 26911767SAnurag.Maskey@Sun.COM */ 27011767SAnurag.Maskey@Sun.COM 27111767SAnurag.Maskey@Sun.COM typedef enum { 27211767SAnurag.Maskey@Sun.COM NWAM_CONDITION_IS, 27311767SAnurag.Maskey@Sun.COM NWAM_CONDITION_IS_NOT, 27411767SAnurag.Maskey@Sun.COM NWAM_CONDITION_IS_IN_RANGE, 27511767SAnurag.Maskey@Sun.COM NWAM_CONDITION_IS_NOT_IN_RANGE, 27611767SAnurag.Maskey@Sun.COM NWAM_CONDITION_CONTAINS, 27711767SAnurag.Maskey@Sun.COM NWAM_CONDITION_DOES_NOT_CONTAIN 27811767SAnurag.Maskey@Sun.COM } nwam_condition_t; 27911767SAnurag.Maskey@Sun.COM 28011767SAnurag.Maskey@Sun.COM typedef enum { 28111767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_NCP, 28211767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_NCU, 28311767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_ENM, 28411767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_LOC, 28511767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_IP_ADDRESS, 28611767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_ADV_DOMAIN, 28711767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_SYS_DOMAIN, 28811767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_ESSID, 28911767SAnurag.Maskey@Sun.COM NWAM_CONDITION_OBJECT_TYPE_BSSID 29011767SAnurag.Maskey@Sun.COM } nwam_condition_object_type_t; 29111767SAnurag.Maskey@Sun.COM 29211767SAnurag.Maskey@Sun.COM /* 29311767SAnurag.Maskey@Sun.COM * Activation condition-related functions that convert activation 29411767SAnurag.Maskey@Sun.COM * values to an appropriate string and back. 29511767SAnurag.Maskey@Sun.COM */ 29611767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_condition_to_condition_string( 29711767SAnurag.Maskey@Sun.COM nwam_condition_object_type_t, nwam_condition_t, const char *, char **); 29811767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_condition_string_to_condition(const char *, 29911767SAnurag.Maskey@Sun.COM nwam_condition_object_type_t *, nwam_condition_t *, char **); 30011767SAnurag.Maskey@Sun.COM 30111767SAnurag.Maskey@Sun.COM /* 30211767SAnurag.Maskey@Sun.COM * Only one location can be active at one time. As a 30311767SAnurag.Maskey@Sun.COM * consequence, if the activation conditions of multiple 30411767SAnurag.Maskey@Sun.COM * locations are satisfied, we need to compare activation 30511767SAnurag.Maskey@Sun.COM * conditions to see if one is more specific than another. 30611767SAnurag.Maskey@Sun.COM * 30711767SAnurag.Maskey@Sun.COM * The following heuristics are applied to rate an 30811767SAnurag.Maskey@Sun.COM * activation condition: 30911767SAnurag.Maskey@Sun.COM * - "is" is the most specific condition 31011767SAnurag.Maskey@Sun.COM * - it is followed by "is-in-range" and "contains" 31111767SAnurag.Maskey@Sun.COM * - "is-not-in-range" and "does-not-contain" are next 31211767SAnurag.Maskey@Sun.COM * - finally "is-not" is least specific 31311767SAnurag.Maskey@Sun.COM * 31411767SAnurag.Maskey@Sun.COM * Regarding the objects these conditions apply to: 31511767SAnurag.Maskey@Sun.COM * - NCU, ENM and locations are most specific 31611767SAnurag.Maskey@Sun.COM * - system-domain is next 31711767SAnurag.Maskey@Sun.COM * - advertised-domain is next 31811767SAnurag.Maskey@Sun.COM * - IP address is next 31911767SAnurag.Maskey@Sun.COM * - wireless BSSID is next 32011767SAnurag.Maskey@Sun.COM * - wireless ESSID is least specific 32111767SAnurag.Maskey@Sun.COM * 32211767SAnurag.Maskey@Sun.COM */ 32311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_condition_rate(nwam_condition_object_type_t, 32411767SAnurag.Maskey@Sun.COM nwam_condition_t, uint64_t *); 32511767SAnurag.Maskey@Sun.COM 32611767SAnurag.Maskey@Sun.COM /* 32711767SAnurag.Maskey@Sun.COM * Location definitions. 32811767SAnurag.Maskey@Sun.COM */ 32911767SAnurag.Maskey@Sun.COM 33011767SAnurag.Maskey@Sun.COM #define NWAM_LOC_NAME_AUTOMATIC "Automatic" 33111767SAnurag.Maskey@Sun.COM #define NWAM_LOC_NAME_NO_NET "NoNet" 33211767SAnurag.Maskey@Sun.COM #define NWAM_LOC_NAME_LEGACY "Legacy" 33311767SAnurag.Maskey@Sun.COM 33411767SAnurag.Maskey@Sun.COM #define NWAM_LOC_NAME_PRE_DEFINED(name) \ 33511767SAnurag.Maskey@Sun.COM (strcasecmp(name, NWAM_LOC_NAME_AUTOMATIC) == 0 || \ 33611767SAnurag.Maskey@Sun.COM strcasecmp(name, NWAM_LOC_NAME_NO_NET) == 0 || \ 33711767SAnurag.Maskey@Sun.COM strcasecmp(name, NWAM_LOC_NAME_LEGACY) == 0) 33811767SAnurag.Maskey@Sun.COM 33911767SAnurag.Maskey@Sun.COM /* Forward definition */ 34011767SAnurag.Maskey@Sun.COM struct nwam_handle; 34111767SAnurag.Maskey@Sun.COM 34211767SAnurag.Maskey@Sun.COM typedef struct nwam_handle *nwam_loc_handle_t; 34311767SAnurag.Maskey@Sun.COM 34411767SAnurag.Maskey@Sun.COM /* Location properties */ 34511767SAnurag.Maskey@Sun.COM 34611767SAnurag.Maskey@Sun.COM typedef enum { 34711767SAnurag.Maskey@Sun.COM NWAM_NAMESERVICES_DNS, 34811767SAnurag.Maskey@Sun.COM NWAM_NAMESERVICES_FILES, 34911767SAnurag.Maskey@Sun.COM NWAM_NAMESERVICES_NIS, 35011767SAnurag.Maskey@Sun.COM NWAM_NAMESERVICES_LDAP 35111767SAnurag.Maskey@Sun.COM } nwam_nameservices_t; 35211767SAnurag.Maskey@Sun.COM 35311767SAnurag.Maskey@Sun.COM typedef enum { 35411767SAnurag.Maskey@Sun.COM NWAM_CONFIGSRC_MANUAL, 35511767SAnurag.Maskey@Sun.COM NWAM_CONFIGSRC_DHCP 35611767SAnurag.Maskey@Sun.COM } nwam_configsrc_t; 35711767SAnurag.Maskey@Sun.COM 35811767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_ACTIVATION_MODE "activation-mode" 35911767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_CONDITIONS "conditions" 36011767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_ENABLED "enabled" 36111767SAnurag.Maskey@Sun.COM 36211767SAnurag.Maskey@Sun.COM /* Nameservice location properties */ 36311767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_NAMESERVICES "nameservices" 36411767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_NAMESERVICES_CONFIG_FILE "nameservices-config-file" 36511767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_DNS_NAMESERVICE_CONFIGSRC "dns-nameservice-configsrc" 36611767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_DNS_NAMESERVICE_DOMAIN "dns-nameservice-domain" 36711767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_DNS_NAMESERVICE_SERVERS "dns-nameservice-servers" 36811767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_DNS_NAMESERVICE_SEARCH "dns-nameservice-search" 36911767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_NIS_NAMESERVICE_CONFIGSRC "nis-nameservice-configsrc" 37011767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_NIS_NAMESERVICE_SERVERS "nis-nameservice-servers" 37111767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_LDAP_NAMESERVICE_CONFIGSRC "ldap-nameservice-configsrc" 37211767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_LDAP_NAMESERVICE_SERVERS "ldap-nameservice-servers" 37311767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_DEFAULT_DOMAIN "default-domain" 37411767SAnurag.Maskey@Sun.COM 37511767SAnurag.Maskey@Sun.COM /* NFSv4 domain */ 37611767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_NFSV4_DOMAIN "nfsv4-domain" 37711767SAnurag.Maskey@Sun.COM 37811767SAnurag.Maskey@Sun.COM /* IPfilter configuration */ 37911767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_IPFILTER_CONFIG_FILE "ipfilter-config-file" 38011767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_IPFILTER_V6_CONFIG_FILE "ipfilter-v6-config-file" 38111767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_IPNAT_CONFIG_FILE "ipnat-config-file" 38211767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_IPPOOL_CONFIG_FILE "ippool-config-file" 38311767SAnurag.Maskey@Sun.COM 38411767SAnurag.Maskey@Sun.COM /* IPsec configuration */ 38511767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_IKE_CONFIG_FILE "ike-config-file" 38611767SAnurag.Maskey@Sun.COM #define NWAM_LOC_PROP_IPSECPOLICY_CONFIG_FILE "ipsecpolicy-config-file" 38711767SAnurag.Maskey@Sun.COM 38811767SAnurag.Maskey@Sun.COM /* 38911767SAnurag.Maskey@Sun.COM * NCP/NCU definitions. 39011767SAnurag.Maskey@Sun.COM */ 39111767SAnurag.Maskey@Sun.COM 39211767SAnurag.Maskey@Sun.COM #define NWAM_NCP_NAME_AUTOMATIC "Automatic" 39311767SAnurag.Maskey@Sun.COM #define NWAM_NCP_NAME_USER "User" 39411767SAnurag.Maskey@Sun.COM 39511767SAnurag.Maskey@Sun.COM #define NWAM_NCP_AUTOMATIC(name) \ 39611767SAnurag.Maskey@Sun.COM (strcasecmp(name, NWAM_NCP_NAME_AUTOMATIC) == 0) 39711767SAnurag.Maskey@Sun.COM 39811767SAnurag.Maskey@Sun.COM typedef struct nwam_handle *nwam_ncp_handle_t; 39911767SAnurag.Maskey@Sun.COM 40011767SAnurag.Maskey@Sun.COM typedef struct nwam_handle *nwam_ncu_handle_t; 40111767SAnurag.Maskey@Sun.COM 40211767SAnurag.Maskey@Sun.COM typedef enum { 40311767SAnurag.Maskey@Sun.COM NWAM_NCU_TYPE_UNKNOWN = -1, 40411767SAnurag.Maskey@Sun.COM NWAM_NCU_TYPE_LINK, 40511767SAnurag.Maskey@Sun.COM NWAM_NCU_TYPE_INTERFACE, 40611767SAnurag.Maskey@Sun.COM NWAM_NCU_TYPE_ANY 40711767SAnurag.Maskey@Sun.COM } nwam_ncu_type_t; 40811767SAnurag.Maskey@Sun.COM 40911767SAnurag.Maskey@Sun.COM typedef enum { 41011767SAnurag.Maskey@Sun.COM NWAM_NCU_CLASS_UNKNOWN = -1, 41111767SAnurag.Maskey@Sun.COM NWAM_NCU_CLASS_PHYS, 41211767SAnurag.Maskey@Sun.COM NWAM_NCU_CLASS_IP, 41311767SAnurag.Maskey@Sun.COM NWAM_NCU_CLASS_ANY 41411767SAnurag.Maskey@Sun.COM } nwam_ncu_class_t; 41511767SAnurag.Maskey@Sun.COM 41611767SAnurag.Maskey@Sun.COM typedef enum { 41711767SAnurag.Maskey@Sun.COM NWAM_ADDRSRC_DHCP, 41811767SAnurag.Maskey@Sun.COM NWAM_ADDRSRC_AUTOCONF, 41911767SAnurag.Maskey@Sun.COM NWAM_ADDRSRC_STATIC 42011767SAnurag.Maskey@Sun.COM } nwam_addrsrc_t; 42111767SAnurag.Maskey@Sun.COM 42211767SAnurag.Maskey@Sun.COM typedef enum { 42311767SAnurag.Maskey@Sun.COM NWAM_PRIORITY_MODE_EXCLUSIVE, 42411767SAnurag.Maskey@Sun.COM NWAM_PRIORITY_MODE_SHARED, 42511767SAnurag.Maskey@Sun.COM NWAM_PRIORITY_MODE_ALL 42611767SAnurag.Maskey@Sun.COM } nwam_priority_mode_t; 42711767SAnurag.Maskey@Sun.COM 42811767SAnurag.Maskey@Sun.COM /* NCU properties common to all type/classes */ 42911767SAnurag.Maskey@Sun.COM #define NWAM_NCU_PROP_TYPE "type" 43011767SAnurag.Maskey@Sun.COM #define NWAM_NCU_PROP_CLASS "class" 43111767SAnurag.Maskey@Sun.COM #define NWAM_NCU_PROP_PARENT_NCP "parent" 43211767SAnurag.Maskey@Sun.COM #define NWAM_NCU_PROP_ACTIVATION_MODE "activation-mode" 43311767SAnurag.Maskey@Sun.COM #define NWAM_NCU_PROP_ENABLED "enabled" 43411767SAnurag.Maskey@Sun.COM #define NWAM_NCU_PROP_PRIORITY_GROUP "priority-group" 43511767SAnurag.Maskey@Sun.COM #define NWAM_NCU_PROP_PRIORITY_MODE "priority-mode" 43611767SAnurag.Maskey@Sun.COM 43711767SAnurag.Maskey@Sun.COM /* Link NCU properties */ 43811767SAnurag.Maskey@Sun.COM #define NWAM_NCU_PROP_LINK_MAC_ADDR "link-mac-addr" 43911767SAnurag.Maskey@Sun.COM #define NWAM_NCU_PROP_LINK_AUTOPUSH "link-autopush" 44011767SAnurag.Maskey@Sun.COM #define NWAM_NCU_PROP_LINK_MTU "link-mtu" 44111767SAnurag.Maskey@Sun.COM 44211767SAnurag.Maskey@Sun.COM /* IP NCU properties */ 44311767SAnurag.Maskey@Sun.COM #define NWAM_NCU_PROP_IP_VERSION "ip-version" 44411767SAnurag.Maskey@Sun.COM #define NWAM_NCU_PROP_IPV4_ADDRSRC "ipv4-addrsrc" 44511767SAnurag.Maskey@Sun.COM #define NWAM_NCU_PROP_IPV4_ADDR "ipv4-addr" 44611767SAnurag.Maskey@Sun.COM #define NWAM_NCU_PROP_IPV4_DEFAULT_ROUTE "ipv4-default-route" 44711767SAnurag.Maskey@Sun.COM #define NWAM_NCU_PROP_IPV6_ADDRSRC "ipv6-addrsrc" 44811767SAnurag.Maskey@Sun.COM #define NWAM_NCU_PROP_IPV6_ADDR "ipv6-addr" 44911767SAnurag.Maskey@Sun.COM #define NWAM_NCU_PROP_IPV6_DEFAULT_ROUTE "ipv6-default-route" 45011767SAnurag.Maskey@Sun.COM 45111767SAnurag.Maskey@Sun.COM /* Some properties should only be set on creation */ 45211767SAnurag.Maskey@Sun.COM #define NWAM_NCU_PROP_SETONCE(prop) \ 45311767SAnurag.Maskey@Sun.COM (strcmp(prop, NWAM_NCU_PROP_TYPE) == 0 || \ 45411767SAnurag.Maskey@Sun.COM strcmp(prop, NWAM_NCU_PROP_CLASS) == 0 || \ 45511767SAnurag.Maskey@Sun.COM strcmp(prop, NWAM_NCU_PROP_PARENT_NCP) == 0) 45611767SAnurag.Maskey@Sun.COM /* 45711767SAnurag.Maskey@Sun.COM * ENM definitions 45811767SAnurag.Maskey@Sun.COM */ 45911767SAnurag.Maskey@Sun.COM 46011767SAnurag.Maskey@Sun.COM typedef struct nwam_handle *nwam_enm_handle_t; 46111767SAnurag.Maskey@Sun.COM 46211767SAnurag.Maskey@Sun.COM #define NWAM_ENM_PROP_ACTIVATION_MODE "activation-mode" 46311767SAnurag.Maskey@Sun.COM #define NWAM_ENM_PROP_CONDITIONS "conditions" 46411767SAnurag.Maskey@Sun.COM #define NWAM_ENM_PROP_ENABLED "enabled" 46511767SAnurag.Maskey@Sun.COM 46611767SAnurag.Maskey@Sun.COM /* FMRI associated with ENM */ 46711767SAnurag.Maskey@Sun.COM #define NWAM_ENM_PROP_FMRI "fmri" 46811767SAnurag.Maskey@Sun.COM 46911767SAnurag.Maskey@Sun.COM /* Start/stop scripts associated with ENM */ 47011767SAnurag.Maskey@Sun.COM #define NWAM_ENM_PROP_START "start" 47111767SAnurag.Maskey@Sun.COM #define NWAM_ENM_PROP_STOP "stop" 47211767SAnurag.Maskey@Sun.COM 47311767SAnurag.Maskey@Sun.COM /* 47411767SAnurag.Maskey@Sun.COM * Known Wireless LAN info (known WLAN) definitions. 47511767SAnurag.Maskey@Sun.COM */ 47611767SAnurag.Maskey@Sun.COM 47711767SAnurag.Maskey@Sun.COM typedef struct nwam_handle *nwam_known_wlan_handle_t; 47811767SAnurag.Maskey@Sun.COM 47911767SAnurag.Maskey@Sun.COM #define NWAM_KNOWN_WLAN_PROP_BSSIDS "bssids" 48011767SAnurag.Maskey@Sun.COM #define NWAM_KNOWN_WLAN_PROP_PRIORITY "priority" 48111767SAnurag.Maskey@Sun.COM #define NWAM_KNOWN_WLAN_PROP_KEYNAME "keyname" 48211767SAnurag.Maskey@Sun.COM #define NWAM_KNOWN_WLAN_PROP_KEYSLOT "keyslot" 48311767SAnurag.Maskey@Sun.COM #define NWAM_KNOWN_WLAN_PROP_SECURITY_MODE "security-mode" 4847645Sjames.d.carlson@sun.com 4857645Sjames.d.carlson@sun.com /* 48611767SAnurag.Maskey@Sun.COM * Location Functions 4877645Sjames.d.carlson@sun.com */ 48811767SAnurag.Maskey@Sun.COM 48911767SAnurag.Maskey@Sun.COM /* Create a location */ 49011767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_create(const char *, nwam_loc_handle_t *); 49111767SAnurag.Maskey@Sun.COM 49211767SAnurag.Maskey@Sun.COM /* Copy a location */ 49311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_copy(nwam_loc_handle_t, const char *, 49411767SAnurag.Maskey@Sun.COM nwam_loc_handle_t *); 49511767SAnurag.Maskey@Sun.COM 49611767SAnurag.Maskey@Sun.COM /* Read a location from persistent storage */ 49711767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_read(const char *, uint64_t, 49811767SAnurag.Maskey@Sun.COM nwam_loc_handle_t *); 49911767SAnurag.Maskey@Sun.COM 50011767SAnurag.Maskey@Sun.COM /* Validate in-memory representation of a location */ 50111767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_validate(nwam_loc_handle_t, const char **); 50211767SAnurag.Maskey@Sun.COM 50311767SAnurag.Maskey@Sun.COM /* Commit in-memory representation of a location to persistent storage */ 50411767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_commit(nwam_loc_handle_t, uint64_t); 50511767SAnurag.Maskey@Sun.COM 50611767SAnurag.Maskey@Sun.COM /* Destroy a location in persistent storage */ 50711767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_destroy(nwam_loc_handle_t, uint64_t); 50811767SAnurag.Maskey@Sun.COM 50911767SAnurag.Maskey@Sun.COM /* Free in-memory representation of a location */ 51011767SAnurag.Maskey@Sun.COM extern void nwam_loc_free(nwam_loc_handle_t); 51111767SAnurag.Maskey@Sun.COM 51211767SAnurag.Maskey@Sun.COM /* read all locs from persistent storage and walk through each at a time */ 51311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_walk_locs(int (*)(nwam_loc_handle_t, void *), void *, 51411767SAnurag.Maskey@Sun.COM uint64_t, int *); 51511767SAnurag.Maskey@Sun.COM 51611767SAnurag.Maskey@Sun.COM /* get/set loc name */ 51711767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_get_name(nwam_loc_handle_t, char **); 51811767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_set_name(nwam_loc_handle_t, const char *); 51911767SAnurag.Maskey@Sun.COM extern boolean_t nwam_loc_can_set_name(nwam_loc_handle_t); 52011767SAnurag.Maskey@Sun.COM 52111767SAnurag.Maskey@Sun.COM /* activate/deactivate loc */ 52211767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_enable(nwam_loc_handle_t); 52311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_disable(nwam_loc_handle_t); 52411767SAnurag.Maskey@Sun.COM 52511767SAnurag.Maskey@Sun.COM /* walk all properties of an in-memory loc */ 52611767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_walk_props(nwam_loc_handle_t, 52711767SAnurag.Maskey@Sun.COM int (*)(const char *, nwam_value_t, void *), 52811767SAnurag.Maskey@Sun.COM void *, uint64_t, int *); 52911767SAnurag.Maskey@Sun.COM 53011767SAnurag.Maskey@Sun.COM /* delete/get/set validate loc property */ 53111767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_delete_prop(nwam_loc_handle_t, 53211767SAnurag.Maskey@Sun.COM const char *); 53311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_get_prop_value(nwam_loc_handle_t, 53411767SAnurag.Maskey@Sun.COM const char *, nwam_value_t *); 53511767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_set_prop_value(nwam_loc_handle_t, 53611767SAnurag.Maskey@Sun.COM const char *, nwam_value_t); 53711767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_validate_prop(nwam_loc_handle_t, const char *, 53811767SAnurag.Maskey@Sun.COM nwam_value_t); 53911767SAnurag.Maskey@Sun.COM 54011767SAnurag.Maskey@Sun.COM /* Get the read-only value for a particular loc property */ 54111767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_prop_read_only(const char *, boolean_t *); 54211767SAnurag.Maskey@Sun.COM 54311767SAnurag.Maskey@Sun.COM /* Whether the property is multi-valued or not */ 54411767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_prop_multivalued(const char *, boolean_t *); 54511767SAnurag.Maskey@Sun.COM 54611767SAnurag.Maskey@Sun.COM /* Retrieve data type */ 54711767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_get_prop_type(const char *, nwam_value_type_t *); 54811767SAnurag.Maskey@Sun.COM 54911767SAnurag.Maskey@Sun.COM /* Retrieve description */ 55011767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_get_prop_description(const char *, const char **); 55111767SAnurag.Maskey@Sun.COM 55211767SAnurag.Maskey@Sun.COM /* get default loc props */ 55311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_get_default_proplist(const char ***, uint_t *); 55411767SAnurag.Maskey@Sun.COM 55511767SAnurag.Maskey@Sun.COM /* get sstate of loc from nwamd */ 55611767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_get_state(nwam_loc_handle_t, nwam_state_t *, 55711767SAnurag.Maskey@Sun.COM nwam_aux_state_t *); 55811767SAnurag.Maskey@Sun.COM 55911767SAnurag.Maskey@Sun.COM /* Get whether the loc has manual activation-mode or not */ 56011767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_loc_is_manual(nwam_loc_handle_t, boolean_t *); 56111767SAnurag.Maskey@Sun.COM 56211767SAnurag.Maskey@Sun.COM /* 56311767SAnurag.Maskey@Sun.COM * NCP/NCU functions 56411767SAnurag.Maskey@Sun.COM */ 56511767SAnurag.Maskey@Sun.COM 56611767SAnurag.Maskey@Sun.COM /* Create an ncp */ 56711767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_create(const char *, uint64_t, 56811767SAnurag.Maskey@Sun.COM nwam_ncp_handle_t *); 56911767SAnurag.Maskey@Sun.COM 57011767SAnurag.Maskey@Sun.COM /* Read an ncp from persistent storage */ 57111767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_read(const char *, uint64_t, nwam_ncp_handle_t *); 57211767SAnurag.Maskey@Sun.COM 57311767SAnurag.Maskey@Sun.COM /* Make a copy of existing ncp */ 57411767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_copy(nwam_ncp_handle_t, const char *, 57511767SAnurag.Maskey@Sun.COM nwam_ncp_handle_t *); 57611767SAnurag.Maskey@Sun.COM 57711767SAnurag.Maskey@Sun.COM /* Walk ncps */ 57811767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_walk_ncps(int (*)(nwam_ncp_handle_t, void *), 57911767SAnurag.Maskey@Sun.COM void *, uint64_t, int *); 58011767SAnurag.Maskey@Sun.COM 58111767SAnurag.Maskey@Sun.COM /* Get ncp name */ 58211767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_get_name(nwam_ncp_handle_t, char **); 58311767SAnurag.Maskey@Sun.COM 58411767SAnurag.Maskey@Sun.COM /* Get the read-only value for this ncp */ 58511767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_get_read_only(nwam_ncp_handle_t, boolean_t *); 58611767SAnurag.Maskey@Sun.COM 58711767SAnurag.Maskey@Sun.COM /* Destroy ncp */ 58811767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_destroy(nwam_ncp_handle_t, uint64_t); 58911767SAnurag.Maskey@Sun.COM 59011767SAnurag.Maskey@Sun.COM /* 59111767SAnurag.Maskey@Sun.COM * Walk all ncus associated with ncp. Specific types/classes of ncu can 59211767SAnurag.Maskey@Sun.COM * be selected via flags, or all via NWAM_FLAG_ALL. 59311767SAnurag.Maskey@Sun.COM */ 59411767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_walk_ncus(nwam_ncp_handle_t, 59511767SAnurag.Maskey@Sun.COM int(*)(nwam_ncu_handle_t, void *), void *, uint64_t, int *); 59611767SAnurag.Maskey@Sun.COM 59711767SAnurag.Maskey@Sun.COM /* Activate ncp */ 59811767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_enable(nwam_ncp_handle_t); 59911767SAnurag.Maskey@Sun.COM 60011767SAnurag.Maskey@Sun.COM /* Free in-memory representation of ncp */ 60111767SAnurag.Maskey@Sun.COM extern void nwam_ncp_free(nwam_ncp_handle_t); 60211767SAnurag.Maskey@Sun.COM 60311767SAnurag.Maskey@Sun.COM /* Get state of NCP from nwamd */ 60411767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_get_state(nwam_ncp_handle_t, nwam_state_t *, 60511767SAnurag.Maskey@Sun.COM nwam_aux_state_t *); 60611767SAnurag.Maskey@Sun.COM 60711767SAnurag.Maskey@Sun.COM /* Get the active priority-group */ 60811767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncp_get_active_priority_group(int64_t *); 60911767SAnurag.Maskey@Sun.COM 61011767SAnurag.Maskey@Sun.COM /* Create an ncu or read it from persistent storage */ 61111767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_create(nwam_ncp_handle_t, const char *, 61211767SAnurag.Maskey@Sun.COM nwam_ncu_type_t, nwam_ncu_class_t, nwam_ncu_handle_t *); 61311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_read(nwam_ncp_handle_t, const char *, 61411767SAnurag.Maskey@Sun.COM nwam_ncu_type_t, uint64_t, nwam_ncu_handle_t *); 61511767SAnurag.Maskey@Sun.COM 61611767SAnurag.Maskey@Sun.COM /* Destroy an ncu in persistent storage or free the in-memory representation */ 61711767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_destroy(nwam_ncu_handle_t, uint64_t); 61811767SAnurag.Maskey@Sun.COM extern void nwam_ncu_free(nwam_ncu_handle_t); 61911767SAnurag.Maskey@Sun.COM 62011767SAnurag.Maskey@Sun.COM /* make a copy of existing ncu */ 62111767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_copy(nwam_ncu_handle_t, const char *, 62211767SAnurag.Maskey@Sun.COM nwam_ncu_handle_t *); 62311767SAnurag.Maskey@Sun.COM 62411767SAnurag.Maskey@Sun.COM /* Commit ncu changes to persistent storage */ 62511767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_commit(nwam_ncu_handle_t, uint64_t); 6267645Sjames.d.carlson@sun.com 62711767SAnurag.Maskey@Sun.COM /* activate/deactivate an individual NCU (must be part of the active NCP) */ 62811767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_enable(nwam_ncu_handle_t); 62911767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_disable(nwam_ncu_handle_t); 63011767SAnurag.Maskey@Sun.COM 63111767SAnurag.Maskey@Sun.COM /* Get state of NCU from nwamd */ 63211767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_state(nwam_ncu_handle_t, nwam_state_t *, 63311767SAnurag.Maskey@Sun.COM nwam_aux_state_t *); 63411767SAnurag.Maskey@Sun.COM 63511767SAnurag.Maskey@Sun.COM /* Get NCU type */ 63611767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_ncu_type(nwam_ncu_handle_t, nwam_ncu_type_t *); 63711767SAnurag.Maskey@Sun.COM 63811767SAnurag.Maskey@Sun.COM /* Get NCU class */ 63911767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_ncu_class(nwam_ncu_handle_t, 64011767SAnurag.Maskey@Sun.COM nwam_ncu_class_t *); 64111767SAnurag.Maskey@Sun.COM 64211767SAnurag.Maskey@Sun.COM /* Validate ncu content */ 64311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_validate(nwam_ncu_handle_t, const char **); 64411767SAnurag.Maskey@Sun.COM 64511767SAnurag.Maskey@Sun.COM /* Walk all properties in in-memory representation of ncu */ 64611767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_walk_props(nwam_ncu_handle_t, 64711767SAnurag.Maskey@Sun.COM int (*)(const char *, nwam_value_t, void *), 64811767SAnurag.Maskey@Sun.COM void *, uint64_t, int *); 64911767SAnurag.Maskey@Sun.COM 65011767SAnurag.Maskey@Sun.COM /* Get/set name of ncu, get parent ncp */ 65111767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_name(nwam_ncu_handle_t, char **); 65211767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_name_to_typed_name(const char *, nwam_ncu_type_t, 65311767SAnurag.Maskey@Sun.COM char **); 65411767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_typed_name_to_name(const char *, nwam_ncu_type_t *, 65511767SAnurag.Maskey@Sun.COM char **); 65611767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_default_proplist(nwam_ncu_type_t, 65711767SAnurag.Maskey@Sun.COM nwam_ncu_class_t, const char ***, uint_t *); 65811767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_ncp(nwam_ncu_handle_t, nwam_ncp_handle_t *); 65911767SAnurag.Maskey@Sun.COM 66011767SAnurag.Maskey@Sun.COM /* delete/get/set/validate property from/in in-memory representation of ncu */ 66111767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_delete_prop(nwam_ncu_handle_t, 66211767SAnurag.Maskey@Sun.COM const char *); 66311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_prop_value(nwam_ncu_handle_t, 66411767SAnurag.Maskey@Sun.COM const char *, nwam_value_t *); 66511767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_set_prop_value(nwam_ncu_handle_t, 66611767SAnurag.Maskey@Sun.COM const char *, nwam_value_t); 66711767SAnurag.Maskey@Sun.COM 66811767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_validate_prop(nwam_ncu_handle_t, const char *, 66911767SAnurag.Maskey@Sun.COM nwam_value_t); 67011767SAnurag.Maskey@Sun.COM 67111767SAnurag.Maskey@Sun.COM /* Retrieve data type */ 67211767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_prop_type(const char *, nwam_value_type_t *); 67311767SAnurag.Maskey@Sun.COM /* Retrieve prop description */ 67411767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_prop_description(const char *, const char **); 67511767SAnurag.Maskey@Sun.COM 67611767SAnurag.Maskey@Sun.COM /* Get the read-only value from the handle or parent NCP */ 67711767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_get_read_only(nwam_ncu_handle_t, boolean_t *); 67811767SAnurag.Maskey@Sun.COM 67911767SAnurag.Maskey@Sun.COM /* Get the read-only value for a particular NCU property */ 68011767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_prop_read_only(const char *, boolean_t *); 68111767SAnurag.Maskey@Sun.COM 68211767SAnurag.Maskey@Sun.COM /* Whether the property is multi-valued or not */ 68311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_prop_multivalued(const char *, boolean_t *); 68411767SAnurag.Maskey@Sun.COM 68511767SAnurag.Maskey@Sun.COM /* Get whether the NCU has manual activation-mode or not */ 68611767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_ncu_is_manual(nwam_ncu_handle_t, boolean_t *); 68711767SAnurag.Maskey@Sun.COM 68811767SAnurag.Maskey@Sun.COM /* Get the flag from the given class for walks */ 68911767SAnurag.Maskey@Sun.COM extern uint64_t nwam_ncu_class_to_flag(nwam_ncu_class_t); 69011767SAnurag.Maskey@Sun.COM 69111767SAnurag.Maskey@Sun.COM /* Get the NCU type from the given class */ 69211767SAnurag.Maskey@Sun.COM extern nwam_ncu_type_t nwam_ncu_class_to_type(nwam_ncu_class_t); 6937645Sjames.d.carlson@sun.com 69411767SAnurag.Maskey@Sun.COM /* ENM functions */ 69511767SAnurag.Maskey@Sun.COM /* 69611767SAnurag.Maskey@Sun.COM * Obtain a specific enm handle, either be creating a new enm 69711767SAnurag.Maskey@Sun.COM * or reading an existing one from persistent storage. 69811767SAnurag.Maskey@Sun.COM */ 69911767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_create(const char *, const char *, 70011767SAnurag.Maskey@Sun.COM nwam_enm_handle_t *); 70111767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_read(const char *, uint64_t, nwam_enm_handle_t *); 70211767SAnurag.Maskey@Sun.COM 70311767SAnurag.Maskey@Sun.COM /* Make a copy of existing enm */ 70411767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_copy(nwam_enm_handle_t, const char *, 70511767SAnurag.Maskey@Sun.COM nwam_enm_handle_t *); 70611767SAnurag.Maskey@Sun.COM 70711767SAnurag.Maskey@Sun.COM /* 70811767SAnurag.Maskey@Sun.COM * Obtain handles for all existing enms. Caller-specified callback 70911767SAnurag.Maskey@Sun.COM * function will be called once for each enm, passing the handle and 71011767SAnurag.Maskey@Sun.COM * the caller-specified arg. 71111767SAnurag.Maskey@Sun.COM */ 71211767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_walk_enms(int (*)(nwam_enm_handle_t, void *), void *, 71311767SAnurag.Maskey@Sun.COM uint64_t, int *); 71411767SAnurag.Maskey@Sun.COM 71511767SAnurag.Maskey@Sun.COM /* 71611767SAnurag.Maskey@Sun.COM * Commit an enm to persistent storage. Does not free the handle. 71711767SAnurag.Maskey@Sun.COM */ 71811767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_commit(nwam_enm_handle_t, uint64_t); 71911767SAnurag.Maskey@Sun.COM 72011767SAnurag.Maskey@Sun.COM /* 72111767SAnurag.Maskey@Sun.COM * Remove an enm from persistent storage. 72211767SAnurag.Maskey@Sun.COM */ 72311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_destroy(nwam_enm_handle_t, uint64_t); 72411767SAnurag.Maskey@Sun.COM 72511767SAnurag.Maskey@Sun.COM /* 72611767SAnurag.Maskey@Sun.COM * Free an enm handle 72711767SAnurag.Maskey@Sun.COM */ 72811767SAnurag.Maskey@Sun.COM extern void nwam_enm_free(nwam_enm_handle_t); 7297645Sjames.d.carlson@sun.com 73011767SAnurag.Maskey@Sun.COM /* 73111767SAnurag.Maskey@Sun.COM * Validate an enm, or a specific enm property. If validating 73211767SAnurag.Maskey@Sun.COM * an entire enm, the invalid property type is returned. 73311767SAnurag.Maskey@Sun.COM */ 73411767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_validate(nwam_enm_handle_t, const char **); 73511767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_validate_prop(nwam_enm_handle_t, const char *, 73611767SAnurag.Maskey@Sun.COM nwam_value_t); 73711767SAnurag.Maskey@Sun.COM 73811767SAnurag.Maskey@Sun.COM /* Retrieve data type */ 73911767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_get_prop_type(const char *, nwam_value_type_t *); 74011767SAnurag.Maskey@Sun.COM /* Retrieve prop description */ 74111767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_get_prop_description(const char *, const char **); 74211767SAnurag.Maskey@Sun.COM 74311767SAnurag.Maskey@Sun.COM /* 74411767SAnurag.Maskey@Sun.COM * Delete/get/set enm property values. 74511767SAnurag.Maskey@Sun.COM */ 74611767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_delete_prop(nwam_enm_handle_t, 74711767SAnurag.Maskey@Sun.COM const char *); 74811767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_get_prop_value(nwam_enm_handle_t, 74911767SAnurag.Maskey@Sun.COM const char *, nwam_value_t *); 75011767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_set_prop_value(nwam_enm_handle_t, 75111767SAnurag.Maskey@Sun.COM const char *, nwam_value_t); 75211767SAnurag.Maskey@Sun.COM 75311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_get_default_proplist(const char ***, uint_t *); 75411767SAnurag.Maskey@Sun.COM 75511767SAnurag.Maskey@Sun.COM /* Get the read-only value for a particular ENM property */ 75611767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_prop_read_only(const char *, boolean_t *); 75711767SAnurag.Maskey@Sun.COM 75811767SAnurag.Maskey@Sun.COM /* Whether the property is multi-valued or not */ 75911767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_prop_multivalued(const char *, boolean_t *); 76011767SAnurag.Maskey@Sun.COM 76111767SAnurag.Maskey@Sun.COM /* 76211767SAnurag.Maskey@Sun.COM * Walk all properties of a specific enm. For each property, specified 76311767SAnurag.Maskey@Sun.COM * callback function is called. Caller is responsible for freeing memory 76411767SAnurag.Maskey@Sun.COM * allocated for each property. 76511767SAnurag.Maskey@Sun.COM */ 76611767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_walk_props(nwam_enm_handle_t, 76711767SAnurag.Maskey@Sun.COM int (*)(const char *, nwam_value_t, void *), 76811767SAnurag.Maskey@Sun.COM void *, uint64_t, int *); 7697645Sjames.d.carlson@sun.com 77011767SAnurag.Maskey@Sun.COM /* 77111767SAnurag.Maskey@Sun.COM * Get/set the name of an enm. When getting the name, the library will 77211767SAnurag.Maskey@Sun.COM * allocate a buffer; the caller is responsible for freeing the memory. 77311767SAnurag.Maskey@Sun.COM */ 77411767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_get_name(nwam_enm_handle_t, char **); 77511767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_set_name(nwam_enm_handle_t, const char *); 77611767SAnurag.Maskey@Sun.COM extern boolean_t nwam_enm_can_set_name(nwam_enm_handle_t); 77711767SAnurag.Maskey@Sun.COM 77811767SAnurag.Maskey@Sun.COM /* 77911767SAnurag.Maskey@Sun.COM * Start/stop an enm. 78011767SAnurag.Maskey@Sun.COM */ 78111767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_enable(nwam_enm_handle_t); 78211767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_disable(nwam_enm_handle_t); 78311767SAnurag.Maskey@Sun.COM 78411767SAnurag.Maskey@Sun.COM /* 78511767SAnurag.Maskey@Sun.COM * Get state of ENM from nwamd. 78611767SAnurag.Maskey@Sun.COM */ 78711767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_get_state(nwam_enm_handle_t, nwam_state_t *, 78811767SAnurag.Maskey@Sun.COM nwam_aux_state_t *); 78911767SAnurag.Maskey@Sun.COM 79011767SAnurag.Maskey@Sun.COM /* 79111767SAnurag.Maskey@Sun.COM * Get whether the ENM has manual activation-mode or not. 79211767SAnurag.Maskey@Sun.COM */ 79311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_enm_is_manual(nwam_enm_handle_t, boolean_t *); 79411767SAnurag.Maskey@Sun.COM 79511767SAnurag.Maskey@Sun.COM /* 79611767SAnurag.Maskey@Sun.COM * Known Wireless LAN (WLAN) info. 79711767SAnurag.Maskey@Sun.COM */ 79811767SAnurag.Maskey@Sun.COM 79911767SAnurag.Maskey@Sun.COM /* Create a known WLAN */ 80011767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_create(const char *, 80111767SAnurag.Maskey@Sun.COM nwam_known_wlan_handle_t *); 80211767SAnurag.Maskey@Sun.COM 80311767SAnurag.Maskey@Sun.COM /* Read a known WLAN from persistent storage */ 80411767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_read(const char *, uint64_t, 80511767SAnurag.Maskey@Sun.COM nwam_known_wlan_handle_t *); 80611767SAnurag.Maskey@Sun.COM 80711767SAnurag.Maskey@Sun.COM /* 80811767SAnurag.Maskey@Sun.COM * Destroy a known WLAN in persistent storage or free the in-memory 80911767SAnurag.Maskey@Sun.COM * representation. 81011767SAnurag.Maskey@Sun.COM */ 81111767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_destroy(nwam_known_wlan_handle_t, uint64_t); 81211767SAnurag.Maskey@Sun.COM extern void nwam_known_wlan_free(nwam_known_wlan_handle_t); 81311767SAnurag.Maskey@Sun.COM 81411767SAnurag.Maskey@Sun.COM /* make a copy of existing known WLAN */ 81511767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_copy(nwam_known_wlan_handle_t, const char *, 81611767SAnurag.Maskey@Sun.COM nwam_known_wlan_handle_t *); 81711767SAnurag.Maskey@Sun.COM 81811767SAnurag.Maskey@Sun.COM /* Commit known WLAN changes to persistent storage */ 81911767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_commit(nwam_known_wlan_handle_t, uint64_t); 82011767SAnurag.Maskey@Sun.COM 82111767SAnurag.Maskey@Sun.COM /* Validate known WLAN content */ 82211767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_validate(nwam_known_wlan_handle_t, 82311767SAnurag.Maskey@Sun.COM const char **); 82411767SAnurag.Maskey@Sun.COM 82511767SAnurag.Maskey@Sun.COM /* Walk known WLANs */ 82611767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_walk_known_wlans 82711767SAnurag.Maskey@Sun.COM (int(*)(nwam_known_wlan_handle_t, void *), void *, uint64_t, int *); 82811767SAnurag.Maskey@Sun.COM 82911767SAnurag.Maskey@Sun.COM /* get/set known WLAN name */ 83011767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_get_name(nwam_known_wlan_handle_t, char **); 83111767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_set_name(nwam_known_wlan_handle_t, 83211767SAnurag.Maskey@Sun.COM const char *); 83311767SAnurag.Maskey@Sun.COM extern boolean_t nwam_known_wlan_can_set_name(nwam_known_wlan_handle_t); 83411767SAnurag.Maskey@Sun.COM 83511767SAnurag.Maskey@Sun.COM /* walk all properties of an in-memory known WLAN */ 83611767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_walk_props(nwam_known_wlan_handle_t, 83711767SAnurag.Maskey@Sun.COM int (*)(const char *, nwam_value_t, void *), 83811767SAnurag.Maskey@Sun.COM void *, uint64_t, int *); 8397645Sjames.d.carlson@sun.com 84011767SAnurag.Maskey@Sun.COM /* delete/get/set/validate known WLAN property */ 84111767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_delete_prop(nwam_known_wlan_handle_t, 84211767SAnurag.Maskey@Sun.COM const char *); 84311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_get_prop_value(nwam_known_wlan_handle_t, 84411767SAnurag.Maskey@Sun.COM const char *, nwam_value_t *); 84511767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_set_prop_value(nwam_known_wlan_handle_t, 84611767SAnurag.Maskey@Sun.COM const char *, nwam_value_t); 84711767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_validate_prop(nwam_known_wlan_handle_t, 84811767SAnurag.Maskey@Sun.COM const char *, nwam_value_t); 84911767SAnurag.Maskey@Sun.COM 85011767SAnurag.Maskey@Sun.COM /* Retrieve data type */ 85111767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_get_prop_type(const char *, 85211767SAnurag.Maskey@Sun.COM nwam_value_type_t *); 85311767SAnurag.Maskey@Sun.COM /* Retrieve prop description */ 85411767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_get_prop_description(const char *, 85511767SAnurag.Maskey@Sun.COM const char **); 85611767SAnurag.Maskey@Sun.COM 85711767SAnurag.Maskey@Sun.COM /* get default known WLAN props */ 85811767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_get_default_proplist(const char ***, 85911767SAnurag.Maskey@Sun.COM uint_t *); 86011767SAnurag.Maskey@Sun.COM 86111767SAnurag.Maskey@Sun.COM /* Whether the property is multi-valued or not */ 86211767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_prop_multivalued(const char *, boolean_t *); 86311767SAnurag.Maskey@Sun.COM 86411767SAnurag.Maskey@Sun.COM /* Add a bssid to the known WLANs */ 86511767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_add_to_known_wlans(const char *, 86611767SAnurag.Maskey@Sun.COM const char *, uint32_t, uint_t, const char *); 86711767SAnurag.Maskey@Sun.COM 86811767SAnurag.Maskey@Sun.COM /* Remove a bssid from known WLANs */ 86911767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_known_wlan_remove_from_known_wlans(const char *, 87011767SAnurag.Maskey@Sun.COM const char *, const char *); 8717645Sjames.d.carlson@sun.com 87211767SAnurag.Maskey@Sun.COM /* 87311767SAnurag.Maskey@Sun.COM * nwam_wlan_t is used for scan/need choice/need key events and by 87411767SAnurag.Maskey@Sun.COM * nwam_wlan_get_scan_results(). The following fields are valid: 87511767SAnurag.Maskey@Sun.COM * 87611767SAnurag.Maskey@Sun.COM * - for scan and need choice event, ESSID, BSSID, signal strength, security 87711767SAnurag.Maskey@Sun.COM * mode, speed, channel, bsstype, key index, and if we already have a key 87811767SAnurag.Maskey@Sun.COM * (have_key), if the WLAN is the current selection (selected) and 87911767SAnurag.Maskey@Sun.COM * if the current WLAN is connected (connected). 88011767SAnurag.Maskey@Sun.COM * - for need key events, ESSID, security mode, have_key, selected and connected 88111767SAnurag.Maskey@Sun.COM * values are set. The rest of the fields are not set since multiple WLANs 88211767SAnurag.Maskey@Sun.COM * may match the ESSID and have different speeds, channels etc. If an 88311767SAnurag.Maskey@Sun.COM * ESSID/BSSID selection is specified, the BSSID will be set also. 88411767SAnurag.Maskey@Sun.COM * 88511767SAnurag.Maskey@Sun.COM */ 88611767SAnurag.Maskey@Sun.COM typedef struct { 88711767SAnurag.Maskey@Sun.COM char nww_essid[NWAM_MAX_NAME_LEN]; 88811767SAnurag.Maskey@Sun.COM char nww_bssid[NWAM_MAX_NAME_LEN]; 88911767SAnurag.Maskey@Sun.COM char nww_signal_strength[NWAM_MAX_NAME_LEN]; 89011767SAnurag.Maskey@Sun.COM uint32_t nww_security_mode; /* a dladm_wlan_secmode_t */ 89111767SAnurag.Maskey@Sun.COM uint32_t nww_speed; /* a dladm_wlan_speed_t */ 89211767SAnurag.Maskey@Sun.COM uint32_t nww_channel; /* a dladm_wlan_channel_t */ 89311767SAnurag.Maskey@Sun.COM uint32_t nww_bsstype; /* a dladm_wlan_bsstype_t */ 89411767SAnurag.Maskey@Sun.COM uint_t nww_keyindex; 89511767SAnurag.Maskey@Sun.COM boolean_t nww_have_key; 89611767SAnurag.Maskey@Sun.COM boolean_t nww_selected; 89711767SAnurag.Maskey@Sun.COM boolean_t nww_connected; 89811767SAnurag.Maskey@Sun.COM } nwam_wlan_t; 89911767SAnurag.Maskey@Sun.COM 90011767SAnurag.Maskey@Sun.COM /* 90111767SAnurag.Maskey@Sun.COM * Active WLAN definitions. Used to scan WLANs/choose a WLAN/set a WLAN key. 90211767SAnurag.Maskey@Sun.COM */ 90311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_wlan_scan(const char *); 90411767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_wlan_get_scan_results(const char *, uint_t *, 90511767SAnurag.Maskey@Sun.COM nwam_wlan_t **); 90611767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_wlan_select(const char *, const char *, const char *, 90711767SAnurag.Maskey@Sun.COM uint32_t, boolean_t); 90811767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_wlan_set_key(const char *, const char *, const char *, 90911767SAnurag.Maskey@Sun.COM uint32_t, uint_t, const char *); 9107645Sjames.d.carlson@sun.com 91111767SAnurag.Maskey@Sun.COM /* 91211767SAnurag.Maskey@Sun.COM * Event notification definitions 91311767SAnurag.Maskey@Sun.COM */ 91411767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_TYPE_NOOP 0 91511767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_TYPE_INIT 1 91611767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_TYPE_SHUTDOWN 2 91711767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_TYPE_OBJECT_ACTION 3 91811767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_TYPE_OBJECT_STATE 4 91911767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_TYPE_PRIORITY_GROUP 5 92011767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_TYPE_INFO 6 92111767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_TYPE_WLAN_SCAN_REPORT 7 92211767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_TYPE_WLAN_NEED_CHOICE 8 92311767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_TYPE_WLAN_NEED_KEY 9 92411767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_TYPE_WLAN_CONNECTION_REPORT 10 92511767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_TYPE_IF_ACTION 11 92611767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_TYPE_IF_STATE 12 92711767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_TYPE_LINK_ACTION 13 92811767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_TYPE_LINK_STATE 14 92911767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_MAX NWAM_EVENT_TYPE_LINK_STATE 93011767SAnurag.Maskey@Sun.COM 93111767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_STATUS_OK 0 93211767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_STATUS_NOT_HANDLED 1 93311767SAnurag.Maskey@Sun.COM 93411767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_NETWORK_OBJECT_UNDEFINED 0 93511767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_NETWORK_OBJECT_LINK 1 93611767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_NETWORK_OBJECT_INTERFACE 2 93711767SAnurag.Maskey@Sun.COM 93811767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_REQUEST_UNDEFINED 0 93911767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_REQUEST_WLAN 1 94011767SAnurag.Maskey@Sun.COM #define NWAM_EVENT_REQUEST_KEY 2 94111767SAnurag.Maskey@Sun.COM 94211767SAnurag.Maskey@Sun.COM /* 94311767SAnurag.Maskey@Sun.COM * Actions for nwamd to perform, used in conjunction with 94411767SAnurag.Maskey@Sun.COM * nwam_request_type_t in nwam_door_arg_t. 94511767SAnurag.Maskey@Sun.COM * Add string representations to nwam_action_to_string() in libnwam_util.c. 94611767SAnurag.Maskey@Sun.COM */ 94711767SAnurag.Maskey@Sun.COM typedef enum { 94811767SAnurag.Maskey@Sun.COM NWAM_ACTION_UNKNOWN = -1, 94911767SAnurag.Maskey@Sun.COM NWAM_ACTION_ADD, 95011767SAnurag.Maskey@Sun.COM NWAM_ACTION_REMOVE, 95111767SAnurag.Maskey@Sun.COM NWAM_ACTION_REFRESH, 95211767SAnurag.Maskey@Sun.COM NWAM_ACTION_ENABLE, 95311767SAnurag.Maskey@Sun.COM NWAM_ACTION_DISABLE, 95411767SAnurag.Maskey@Sun.COM NWAM_ACTION_DESTROY 95511767SAnurag.Maskey@Sun.COM } nwam_action_t; 95611767SAnurag.Maskey@Sun.COM 95711767SAnurag.Maskey@Sun.COM typedef enum { 95811767SAnurag.Maskey@Sun.COM NWAM_OBJECT_TYPE_UNKNOWN = -1, 95911767SAnurag.Maskey@Sun.COM NWAM_OBJECT_TYPE_NCP = 0, 96011767SAnurag.Maskey@Sun.COM NWAM_OBJECT_TYPE_NCU = 1, 96111767SAnurag.Maskey@Sun.COM NWAM_OBJECT_TYPE_LOC = 2, 96211767SAnurag.Maskey@Sun.COM NWAM_OBJECT_TYPE_ENM = 3, 96311767SAnurag.Maskey@Sun.COM NWAM_OBJECT_TYPE_KNOWN_WLAN = 4 96411767SAnurag.Maskey@Sun.COM } nwam_object_type_t; 96511767SAnurag.Maskey@Sun.COM 96611767SAnurag.Maskey@Sun.COM typedef struct nwam_event *nwam_event_t; 96711767SAnurag.Maskey@Sun.COM struct nwam_event { 96811767SAnurag.Maskey@Sun.COM int nwe_type; 96911767SAnurag.Maskey@Sun.COM uint32_t nwe_size; 97011767SAnurag.Maskey@Sun.COM 97111767SAnurag.Maskey@Sun.COM union { 97211767SAnurag.Maskey@Sun.COM struct nwam_event_object_action { 97311767SAnurag.Maskey@Sun.COM nwam_object_type_t nwe_object_type; 97411767SAnurag.Maskey@Sun.COM char nwe_name[NWAM_MAX_NAME_LEN]; 97511767SAnurag.Maskey@Sun.COM char nwe_parent[NWAM_MAX_NAME_LEN]; 97611767SAnurag.Maskey@Sun.COM nwam_action_t nwe_action; 97711767SAnurag.Maskey@Sun.COM } nwe_object_action; 9787645Sjames.d.carlson@sun.com 97911767SAnurag.Maskey@Sun.COM struct nwam_event_object_state { 98011767SAnurag.Maskey@Sun.COM nwam_object_type_t nwe_object_type; 98111767SAnurag.Maskey@Sun.COM char nwe_name[NWAM_MAX_NAME_LEN]; 98211767SAnurag.Maskey@Sun.COM char nwe_parent[NWAM_MAX_NAME_LEN]; 98311767SAnurag.Maskey@Sun.COM nwam_state_t nwe_state; 98411767SAnurag.Maskey@Sun.COM nwam_aux_state_t nwe_aux_state; 98511767SAnurag.Maskey@Sun.COM } nwe_object_state; 98611767SAnurag.Maskey@Sun.COM 98711767SAnurag.Maskey@Sun.COM struct nwam_event_priority_group_info { 98811767SAnurag.Maskey@Sun.COM int64_t nwe_priority; 98911767SAnurag.Maskey@Sun.COM } nwe_priority_group_info; 99011767SAnurag.Maskey@Sun.COM 99111767SAnurag.Maskey@Sun.COM struct nwam_event_info { 99211767SAnurag.Maskey@Sun.COM char nwe_message[NWAM_MAX_VALUE_LEN]; 99311767SAnurag.Maskey@Sun.COM } nwe_info; 99411767SAnurag.Maskey@Sun.COM 99511767SAnurag.Maskey@Sun.COM /* 99611767SAnurag.Maskey@Sun.COM * wlan_info stores both scan results and the single 99711767SAnurag.Maskey@Sun.COM * WLAN we require a key for in the case of _WLAN_NEED_KEY 99811767SAnurag.Maskey@Sun.COM * events. For _WLAN_CONNECTION_REPORT events, it stores 99911767SAnurag.Maskey@Sun.COM * the WLAN the connection succeeded/failed for, indicating 100011767SAnurag.Maskey@Sun.COM * success/failure using the 'connected' boolean. 100111767SAnurag.Maskey@Sun.COM */ 100211767SAnurag.Maskey@Sun.COM struct nwam_event_wlan_info { 100311767SAnurag.Maskey@Sun.COM char nwe_name[NWAM_MAX_NAME_LEN]; 100411767SAnurag.Maskey@Sun.COM boolean_t nwe_connected; 100511767SAnurag.Maskey@Sun.COM uint16_t nwe_num_wlans; 100611767SAnurag.Maskey@Sun.COM nwam_wlan_t nwe_wlans[1]; 100711767SAnurag.Maskey@Sun.COM /* 100811767SAnurag.Maskey@Sun.COM * space may be allocated by user here for the 100911767SAnurag.Maskey@Sun.COM * number of wlans 101011767SAnurag.Maskey@Sun.COM */ 101111767SAnurag.Maskey@Sun.COM } nwe_wlan_info; 101211767SAnurag.Maskey@Sun.COM 101311767SAnurag.Maskey@Sun.COM struct nwam_event_if_action { 101411767SAnurag.Maskey@Sun.COM char nwe_name[NWAM_MAX_NAME_LEN]; 101511767SAnurag.Maskey@Sun.COM nwam_action_t nwe_action; 101611767SAnurag.Maskey@Sun.COM } nwe_if_action; 10177645Sjames.d.carlson@sun.com 101811767SAnurag.Maskey@Sun.COM struct nwam_event_if_state { 101911767SAnurag.Maskey@Sun.COM char nwe_name[NWAM_MAX_NAME_LEN]; 102011767SAnurag.Maskey@Sun.COM uint32_t nwe_flags; 102111767SAnurag.Maskey@Sun.COM uint32_t nwe_addr_valid; /* boolean */ 102211767SAnurag.Maskey@Sun.COM uint32_t nwe_addr_added; /* boolean */ 102311767SAnurag.Maskey@Sun.COM struct sockaddr_storage nwe_addr; 1024*12576SAnurag.Maskey@Oracle.COM struct sockaddr_storage nwe_netmask; 102511767SAnurag.Maskey@Sun.COM } nwe_if_state; 102611767SAnurag.Maskey@Sun.COM 102711767SAnurag.Maskey@Sun.COM struct nwam_event_link_state { 102811767SAnurag.Maskey@Sun.COM char nwe_name[NWAM_MAX_NAME_LEN]; 102911767SAnurag.Maskey@Sun.COM boolean_t nwe_link_up; 103011767SAnurag.Maskey@Sun.COM /* link_state_t from sys/mac.h */ 103111767SAnurag.Maskey@Sun.COM } nwe_link_state; 103211767SAnurag.Maskey@Sun.COM 103311767SAnurag.Maskey@Sun.COM struct nwam_event_link_action { 103411767SAnurag.Maskey@Sun.COM char nwe_name[NWAM_MAX_NAME_LEN]; 103511767SAnurag.Maskey@Sun.COM nwam_action_t nwe_action; 103611767SAnurag.Maskey@Sun.COM } nwe_link_action; 103711767SAnurag.Maskey@Sun.COM } nwe_data; 103811767SAnurag.Maskey@Sun.COM }; 103911767SAnurag.Maskey@Sun.COM 104011767SAnurag.Maskey@Sun.COM /* NWAM client functions, used to register/unregister and receive events */ 104111767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_events_init(void); 104211767SAnurag.Maskey@Sun.COM extern void nwam_events_fini(void); 104311767SAnurag.Maskey@Sun.COM extern nwam_error_t nwam_event_wait(nwam_event_t *); 104411767SAnurag.Maskey@Sun.COM extern void nwam_event_free(nwam_event_t); 104511767SAnurag.Maskey@Sun.COM 104611767SAnurag.Maskey@Sun.COM /* Event-related string conversion functions */ 104711767SAnurag.Maskey@Sun.COM extern const char *nwam_action_to_string(nwam_action_t); 104811767SAnurag.Maskey@Sun.COM extern const char *nwam_event_type_to_string(int); 104911767SAnurag.Maskey@Sun.COM extern const char *nwam_state_to_string(nwam_state_t); 105011767SAnurag.Maskey@Sun.COM extern const char *nwam_aux_state_to_string(nwam_aux_state_t); 105111767SAnurag.Maskey@Sun.COM 105211767SAnurag.Maskey@Sun.COM extern const char *nwam_object_type_to_string(nwam_object_type_t); 105311767SAnurag.Maskey@Sun.COM extern nwam_object_type_t nwam_string_to_object_type(const char *); 105411767SAnurag.Maskey@Sun.COM 105511767SAnurag.Maskey@Sun.COM /* Utility strtok_r-like function */ 105611767SAnurag.Maskey@Sun.COM extern char *nwam_tokenize_by_unescaped_delim(char *, char, char **); 105711767SAnurag.Maskey@Sun.COM 105811767SAnurag.Maskey@Sun.COM #ifdef __cplusplus 10597645Sjames.d.carlson@sun.com } 10607645Sjames.d.carlson@sun.com #endif 10617645Sjames.d.carlson@sun.com 106211767SAnurag.Maskey@Sun.COM #endif /* _LIBNWAM_H */ 1063