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 22b00044a2SJames Carlson /* 23b00044a2SJames Carlson * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 24b00044a2SJames Carlson * Use is subject to license terms. 25b00044a2SJames Carlson */ 26b00044a2SJames Carlson 27b00044a2SJames Carlson #ifndef _LIBNWAM_H 28b00044a2SJames Carlson #define _LIBNWAM_H 29b00044a2SJames Carlson 30b00044a2SJames Carlson #include <netinet/in.h> 31b00044a2SJames Carlson 32b00044a2SJames Carlson /* 33b00044a2SJames Carlson * This file defines the programming interface for libnwam. It is a private 34b00044a2SJames Carlson * (undocumented, subject to change) interface shared between the NWAM GUI and 35b00044a2SJames Carlson * nwamd. 36b00044a2SJames Carlson */ 37b00044a2SJames Carlson 38b00044a2SJames Carlson #ifdef __cplusplus 39b00044a2SJames Carlson extern "C" { 40b00044a2SJames Carlson #endif 41b00044a2SJames Carlson 42b00044a2SJames Carlson typedef struct libnwam_wlan_attr_s { 43b00044a2SJames Carlson const char *wla_essid; 44b00044a2SJames Carlson const char *wla_bssid; 45b00044a2SJames Carlson const char *wla_secmode; 46b00044a2SJames Carlson const char *wla_strength; 47b00044a2SJames Carlson const char *wla_mode; 48b00044a2SJames Carlson const char *wla_speed; 49b00044a2SJames Carlson const char *wla_auth; 50b00044a2SJames Carlson const char *wla_bsstype; 51b00044a2SJames Carlson int wla_channel; 52b00044a2SJames Carlson } libnwam_wlan_attr_t; 53b00044a2SJames Carlson 54b00044a2SJames Carlson /* Number of strings above; used for internal allocation purposes */ 55b00044a2SJames Carlson #define WLA_NUM_STRS 8 56b00044a2SJames Carlson 57b00044a2SJames Carlson /* 58b00044a2SJames Carlson * The descriptive event types shared with nwamd and with the GUI client. With 59b00044a2SJames Carlson * all events other than deInitial, led_interface is always valid. The other 60b00044a2SJames Carlson * fields are present when indicated, and otherwise must be left unused. 61b00044a2SJames Carlson */ 62b00044a2SJames Carlson typedef enum libnwam_descr_evtype_e { 63b00044a2SJames Carlson deInitial, /* no other fields; new active client */ 64b00044a2SJames Carlson deInterfaceUp, /* led_v4address led_prefixlen */ 65b00044a2SJames Carlson deInterfaceDown, /* led_cause */ 66b00044a2SJames Carlson deInterfaceAdded, 67b00044a2SJames Carlson deInterfaceRemoved, 68b00044a2SJames Carlson deWlanConnectFail, 69b00044a2SJames Carlson deWlanDisconnect, /* led_wlan */ 70b00044a2SJames Carlson deWlanConnected, /* led_wlan */ 71b00044a2SJames Carlson deLLPSelected, 72b00044a2SJames Carlson deLLPUnselected, /* led_cause */ 73b00044a2SJames Carlson deULPActivated, 74b00044a2SJames Carlson deULPDeactivated, 75b00044a2SJames Carlson deScanChange, 76b00044a2SJames Carlson deScanSame, 77b00044a2SJames Carlson deWlanKeyNeeded, /* led_wlan */ 78b00044a2SJames Carlson deWlanSelectionNeeded 79b00044a2SJames Carlson } libnwam_descr_evtype_t; 80b00044a2SJames Carlson 81b00044a2SJames Carlson typedef enum libnwam_diag_cause_e { 82b00044a2SJames Carlson dcNone = 0, /* no cause */ 83b00044a2SJames Carlson dcDHCP, /* DHCP left interface down or with zero addr */ 84b00044a2SJames Carlson dcTimer, /* gave up on DHCP; switching to next best */ 85b00044a2SJames Carlson dcUnplugged, /* interface lost RUNNING flag */ 86b00044a2SJames Carlson dcUser, /* user changed priority */ 87b00044a2SJames Carlson dcBetter, /* higher-priority interface became RUNNING */ 88b00044a2SJames Carlson dcNewAP, /* scan completed on higher-priority i/f */ 89b00044a2SJames Carlson dcGone, /* periodic wireless scan showed disconnect */ 90b00044a2SJames Carlson dcFaded, /* periodic scan showed "very weak" signal */ 91b00044a2SJames Carlson dcAllDown, /* all-but-one taken down (initial LLP) */ 92b00044a2SJames Carlson dcUnwanted, /* another higher-priority interface is up */ 93b00044a2SJames Carlson dcShutdown, /* daemon is being shut down */ 94b00044a2SJames Carlson dcSelect, /* different AP selected (forced down/up) */ 95b00044a2SJames Carlson dcRemoved, /* interface removed from system */ 96b00044a2SJames Carlson dcFailed /* interface bring-up failed */ 97b00044a2SJames Carlson } libnwam_diag_cause_t; 98b00044a2SJames Carlson 99b00044a2SJames Carlson typedef struct libnwam_event_data_s { 100b00044a2SJames Carlson libnwam_descr_evtype_t led_type; 101b00044a2SJames Carlson libnwam_diag_cause_t led_cause; 102b00044a2SJames Carlson struct in_addr led_v4address; /* deInterfaceUp only */ 103b00044a2SJames Carlson int led_prefixlen; /* deInterfaceUp only */ 104b00044a2SJames Carlson libnwam_wlan_attr_t led_wlan; 105b00044a2SJames Carlson char *led_interface; 106b00044a2SJames Carlson } libnwam_event_data_t; 107b00044a2SJames Carlson 108b00044a2SJames Carlson typedef enum libnwam_ipv4src_e { 109b00044a2SJames Carlson IPV4SRC_STATIC, 110b00044a2SJames Carlson IPV4SRC_DHCP 111b00044a2SJames Carlson } libnwam_ipv4src_t; 112b00044a2SJames Carlson 113b00044a2SJames Carlson typedef enum libnwam_interface_type_e { 114b00044a2SJames Carlson IF_UNKNOWN, 115b00044a2SJames Carlson IF_WIRED, 116b00044a2SJames Carlson IF_WIRELESS, 117b00044a2SJames Carlson IF_TUN 118b00044a2SJames Carlson } libnwam_interface_type_t; 119b00044a2SJames Carlson 120b00044a2SJames Carlson typedef struct libnwam_llp_s { 121b00044a2SJames Carlson const char *llp_interface; 122b00044a2SJames Carlson int llp_pri; /* lower number => higher priority */ 123b00044a2SJames Carlson libnwam_interface_type_t llp_type; 124b00044a2SJames Carlson libnwam_ipv4src_t llp_ipv4src; 125b00044a2SJames Carlson boolean_t llp_primary; /* selected primary interface */ 126b00044a2SJames Carlson boolean_t llp_locked; /* selected is locked */ 127b00044a2SJames Carlson boolean_t llp_link_failed; /* unusable due to link failure */ 128b00044a2SJames Carlson boolean_t llp_dhcp_failed; /* unusable due to DHCP failure */ 129b00044a2SJames Carlson boolean_t llp_link_up; /* datalink layer is up */ 130b00044a2SJames Carlson boolean_t llp_need_wlan; /* wlan/AP not yet selected */ 131b00044a2SJames Carlson boolean_t llp_need_key; /* wlan key not set */ 132b00044a2SJames Carlson } libnwam_llp_t; 133b00044a2SJames Carlson 134b00044a2SJames Carlson typedef struct libnwam_wlan_s { 135b00044a2SJames Carlson libnwam_wlan_attr_t wlan_attrs; 136b00044a2SJames Carlson const char *wlan_interface; 137b00044a2SJames Carlson boolean_t wlan_known; 138b00044a2SJames Carlson boolean_t wlan_haskey; 139b00044a2SJames Carlson boolean_t wlan_connected; 140b00044a2SJames Carlson } libnwam_wlan_t; 141b00044a2SJames Carlson 142b00044a2SJames Carlson typedef struct libnwam_known_ap_s { 143b00044a2SJames Carlson const char *ka_essid; 144b00044a2SJames Carlson const char *ka_bssid; 145b00044a2SJames Carlson boolean_t ka_haskey; 146b00044a2SJames Carlson } libnwam_known_ap_t; 147b00044a2SJames Carlson 148b00044a2SJames Carlson extern libnwam_event_data_t *libnwam_wait_event(void); 149b00044a2SJames Carlson extern void libnwam_free_event(libnwam_event_data_t *); 150b00044a2SJames Carlson extern libnwam_llp_t *libnwam_get_llp_list(uint_t *); 151b00044a2SJames Carlson extern void libnwam_free_llp_list(libnwam_llp_t *); 152b00044a2SJames Carlson extern int libnwam_set_llp_priority(const char *, int); 153b00044a2SJames Carlson extern int libnwam_lock_llp(const char *); 154b00044a2SJames Carlson extern libnwam_wlan_t *libnwam_get_wlan_list(uint_t *); 155b00044a2SJames Carlson extern void libnwam_free_wlan_list(libnwam_wlan_t *); 156b00044a2SJames Carlson extern libnwam_known_ap_t *libnwam_get_known_ap_list(uint_t *); 157b00044a2SJames Carlson extern void libnwam_free_known_ap_list(libnwam_known_ap_t *); 158b00044a2SJames Carlson extern int libnwam_add_known_ap(const char *, const char *); 159b00044a2SJames Carlson extern int libnwam_delete_known_ap(const char *, const char *); 160b00044a2SJames Carlson extern int libnwam_select_wlan(const char *, const char *, const char *); 161b00044a2SJames Carlson extern int libnwam_wlan_key(const char *, const char *, const char *, 162b00044a2SJames Carlson const char *); 163*ab32bdf2SJames Carlson #pragma weak libnwam_wlan_key_secmode 164*ab32bdf2SJames Carlson extern int libnwam_wlan_key_secmode(const char *, const char *, const char *, 165*ab32bdf2SJames Carlson const char *, const char *); 166b00044a2SJames Carlson extern int libnwam_start_rescan(const char *); 167b00044a2SJames Carlson extern int libnwam_fini(void); 168b00044a2SJames Carlson extern int libnwam_init(int); 169b00044a2SJames Carlson 170b00044a2SJames Carlson #ifdef __cplusplus 171b00044a2SJames Carlson } 172b00044a2SJames Carlson #endif 173b00044a2SJames Carlson 174b00044a2SJames Carlson #endif /* _LIBNWAM_H */ 175