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