/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef _LIBNWAM_H #define _LIBNWAM_H #include /* * This file defines the programming interface for libnwam. It is a private * (undocumented, subject to change) interface shared between the NWAM GUI and * nwamd. */ #ifdef __cplusplus extern "C" { #endif typedef struct libnwam_wlan_attr_s { const char *wla_essid; const char *wla_bssid; const char *wla_secmode; const char *wla_strength; const char *wla_mode; const char *wla_speed; const char *wla_auth; const char *wla_bsstype; int wla_channel; } libnwam_wlan_attr_t; /* Number of strings above; used for internal allocation purposes */ #define WLA_NUM_STRS 8 /* * The descriptive event types shared with nwamd and with the GUI client. With * all events other than deInitial, led_interface is always valid. The other * fields are present when indicated, and otherwise must be left unused. */ typedef enum libnwam_descr_evtype_e { deInitial, /* no other fields; new active client */ deInterfaceUp, /* led_v4address led_prefixlen */ deInterfaceDown, /* led_cause */ deInterfaceAdded, deInterfaceRemoved, deWlanConnectFail, deWlanDisconnect, /* led_wlan */ deWlanConnected, /* led_wlan */ deLLPSelected, deLLPUnselected, /* led_cause */ deULPActivated, deULPDeactivated, deScanChange, deScanSame, deWlanKeyNeeded, /* led_wlan */ deWlanSelectionNeeded } libnwam_descr_evtype_t; typedef enum libnwam_diag_cause_e { dcNone = 0, /* no cause */ dcDHCP, /* DHCP left interface down or with zero addr */ dcTimer, /* gave up on DHCP; switching to next best */ dcUnplugged, /* interface lost RUNNING flag */ dcUser, /* user changed priority */ dcBetter, /* higher-priority interface became RUNNING */ dcNewAP, /* scan completed on higher-priority i/f */ dcGone, /* periodic wireless scan showed disconnect */ dcFaded, /* periodic scan showed "very weak" signal */ dcAllDown, /* all-but-one taken down (initial LLP) */ dcUnwanted, /* another higher-priority interface is up */ dcShutdown, /* daemon is being shut down */ dcSelect, /* different AP selected (forced down/up) */ dcRemoved, /* interface removed from system */ dcFailed /* interface bring-up failed */ } libnwam_diag_cause_t; typedef struct libnwam_event_data_s { libnwam_descr_evtype_t led_type; libnwam_diag_cause_t led_cause; struct in_addr led_v4address; /* deInterfaceUp only */ int led_prefixlen; /* deInterfaceUp only */ libnwam_wlan_attr_t led_wlan; char *led_interface; } libnwam_event_data_t; typedef enum libnwam_ipv4src_e { IPV4SRC_STATIC, IPV4SRC_DHCP } libnwam_ipv4src_t; typedef enum libnwam_interface_type_e { IF_UNKNOWN, IF_WIRED, IF_WIRELESS, IF_TUN } libnwam_interface_type_t; typedef struct libnwam_llp_s { const char *llp_interface; int llp_pri; /* lower number => higher priority */ libnwam_interface_type_t llp_type; libnwam_ipv4src_t llp_ipv4src; boolean_t llp_primary; /* selected primary interface */ boolean_t llp_locked; /* selected is locked */ boolean_t llp_link_failed; /* unusable due to link failure */ boolean_t llp_dhcp_failed; /* unusable due to DHCP failure */ boolean_t llp_link_up; /* datalink layer is up */ boolean_t llp_need_wlan; /* wlan/AP not yet selected */ boolean_t llp_need_key; /* wlan key not set */ } libnwam_llp_t; typedef struct libnwam_wlan_s { libnwam_wlan_attr_t wlan_attrs; const char *wlan_interface; boolean_t wlan_known; boolean_t wlan_haskey; boolean_t wlan_connected; } libnwam_wlan_t; typedef struct libnwam_known_ap_s { const char *ka_essid; const char *ka_bssid; boolean_t ka_haskey; } libnwam_known_ap_t; extern libnwam_event_data_t *libnwam_wait_event(void); extern void libnwam_free_event(libnwam_event_data_t *); extern libnwam_llp_t *libnwam_get_llp_list(uint_t *); extern void libnwam_free_llp_list(libnwam_llp_t *); extern int libnwam_set_llp_priority(const char *, int); extern int libnwam_lock_llp(const char *); extern libnwam_wlan_t *libnwam_get_wlan_list(uint_t *); extern void libnwam_free_wlan_list(libnwam_wlan_t *); extern libnwam_known_ap_t *libnwam_get_known_ap_list(uint_t *); extern void libnwam_free_known_ap_list(libnwam_known_ap_t *); extern int libnwam_add_known_ap(const char *, const char *); extern int libnwam_delete_known_ap(const char *, const char *); extern int libnwam_select_wlan(const char *, const char *, const char *); extern int libnwam_wlan_key(const char *, const char *, const char *, const char *); #pragma weak libnwam_wlan_key_secmode extern int libnwam_wlan_key_secmode(const char *, const char *, const char *, const char *, const char *); extern int libnwam_start_rescan(const char *); extern int libnwam_fini(void); extern int libnwam_init(int); #ifdef __cplusplus } #endif #endif /* _LIBNWAM_H */