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