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