/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2010 The FreeBSD Foundation * * This software was developed by Shteryana Sotirova Shopova under * sponsorship from the FreeBSD Foundation. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #define WLAN_IFMODE_MAX WlanIfaceOperatingModeType_tdma #define WLAN_COUNTRY_CODE_SIZE 3 #define WLAN_BGSCAN_IDLE_MIN 100 /* XXX */ #define WLAN_SCAN_VALID_MIN 10 /* XXX */ #define WLAN_TDMA_MAXSLOTS 2 /* XXX */ struct wlan_iface; struct wlan_peer { uint8_t pmac[IEEE80211_ADDR_LEN]; /* key */ uint16_t associd; uint16_t vlan; uint16_t frequency; uint32_t fflags; uint8_t txrate; int8_t rssi; uint16_t idle; uint16_t txseqs; uint16_t rxseqs; uint16_t txpower; uint8_t capinfo; uint32_t state; uint16_t local_id; uint16_t peer_id; SLIST_ENTRY(wlan_peer) wp; }; SLIST_HEAD(wlan_peerlist, wlan_peer); struct wlan_scan_result { uint8_t ssid[IEEE80211_NWID_LEN + 1]; uint8_t bssid[IEEE80211_ADDR_LEN]; uint8_t opchannel; int8_t rssi; uint16_t frequency; int8_t noise; uint16_t bintval; uint8_t capinfo; struct wlan_iface *pwif; SLIST_ENTRY(wlan_scan_result) wsr; }; SLIST_HEAD(wlan_scanlist, wlan_scan_result); struct wlan_mac_mac { uint8_t mac[IEEE80211_ADDR_LEN]; enum RowStatus mac_status; SLIST_ENTRY(wlan_mac_mac) wm; }; SLIST_HEAD(wlan_maclist, wlan_mac_mac); struct wlan_mesh_route { struct ieee80211req_mesh_route imroute; enum RowStatus mroute_status; SLIST_ENTRY(wlan_mesh_route) wr; }; SLIST_HEAD(wlan_mesh_routes, wlan_mesh_route); struct wlan_iface { char wname[IFNAMSIZ]; uint32_t index; char pname[IFNAMSIZ]; enum WlanIfaceOperatingModeType mode; uint32_t flags; uint8_t dbssid[IEEE80211_ADDR_LEN]; uint8_t dlmac[IEEE80211_ADDR_LEN]; enum RowStatus status; enum wlanIfaceState state; uint8_t internal; uint32_t drivercaps; uint32_t cryptocaps; uint32_t htcaps; uint32_t packet_burst; uint8_t country_code[WLAN_COUNTRY_CODE_SIZE]; enum WlanRegDomainCode reg_domain; uint8_t desired_ssid[IEEE80211_NWID_LEN + 1]; uint32_t desired_channel; enum TruthValue dyn_frequency; enum TruthValue fast_frames; enum TruthValue dturbo; int32_t tx_power; int32_t frag_threshold; int32_t rts_threshold; enum TruthValue priv_subscribe; enum TruthValue bg_scan; int32_t bg_scan_idle; int32_t bg_scan_interval; int32_t beacons_missed; uint8_t desired_bssid[IEEE80211_ADDR_LEN]; enum wlanIfaceRoamingMode roam_mode; enum TruthValue dot11d; enum TruthValue dot11h; enum TruthValue dynamic_wds; enum TruthValue power_save; enum TruthValue ap_bridge; int32_t beacon_interval; int32_t dtim_period; enum TruthValue hide_ssid; enum TruthValue inact_process; enum wlanIfaceDot11gProtMode do11g_protect; enum TruthValue dot11g_pure; enum TruthValue dot11n_pure; enum WlanIfaceDot11nPduType ampdu; int32_t ampdu_density; int32_t ampdu_limit; enum WlanIfaceDot11nPduType amsdu; int32_t amsdu_limit; enum TruthValue ht_enabled; enum TruthValue ht_compatible; enum wlanIfaceDot11nHTProtMode ht_prot_mode; enum TruthValue rifs; enum TruthValue short_gi; enum wlanIfaceDot11nSMPSMode smps_mode; int32_t tdma_slot; int32_t tdma_slot_count; int32_t tdma_slot_length; int32_t tdma_binterval; struct wlan_peerlist peerlist; struct ieee80211_stats stats; uint32_t nchannels; struct ieee80211_channel *chanlist; struct ieee80211_roamparams_req roamparams; struct ieee80211_txparams_req txparams; uint32_t scan_flags; uint32_t scan_duration; uint32_t scan_mindwell; uint32_t scan_maxdwell; enum wlanScanConfigStatus scan_status; struct wlan_scanlist scanlist; uint8_t wepsupported; enum wlanWepMode wepmode; int32_t weptxkey; uint8_t macsupported; enum wlanMACAccessControlPolicy mac_policy; uint32_t mac_nacls; struct wlan_maclist mac_maclist; uint32_t mesh_ttl; enum wlanMeshPeeringEnabled mesh_peering; enum wlanMeshForwardingEnabled mesh_forwarding; enum wlanMeshMetric mesh_metric; enum wlanMeshPath mesh_path; enum wlanHWMPRootMode hwmp_root_mode; uint32_t hwmp_max_hops; struct wlan_mesh_routes mesh_routelist; SLIST_ENTRY(wlan_iface) w_if; }; enum wlan_syscl { WLAN_MESH_RETRY_TO = 0, WLAN_MESH_HOLDING_TO, WLAN_MESH_CONFIRM_TO, WLAN_MESH_MAX_RETRIES, WLAN_HWMP_TARGET_ONLY, WLAN_HWMP_REPLY_FORWARD, WLAN_HWMP_PATH_LIFETIME, WLAN_HWMP_ROOT_TO, WLAN_HWMP_ROOT_INT, WLAN_HWMP_RANN_INT, WLAN_HWMP_INACTIVITY_TO, WLAN_SYSCTL_MAX }; struct wlan_config { int32_t mesh_retryto; int32_t mesh_holdingto; int32_t mesh_confirmto; int32_t mesh_maxretries; int32_t hwmp_targetonly; int32_t hwmp_replyforward; int32_t hwmp_pathlifetime; int32_t hwmp_roottimeout; int32_t hwmp_rootint; int32_t hwmp_rannint; int32_t hwmp_inact; }; int wlan_ioctl_init(void); int wlan_kmodules_load(void); int wlan_check_media(char *); int wlan_config_state(struct wlan_iface *, uint8_t); int wlan_get_opmode(struct wlan_iface *wif); int wlan_get_local_addr(struct wlan_iface *wif); int wlan_get_parent(struct wlan_iface *wif); int wlan_get_driver_caps(struct wlan_iface *wif); uint8_t wlan_channel_state_to_snmp(uint8_t cstate); uint32_t wlan_channel_flags_to_snmp(uint32_t cflags); int wlan_get_channel_list(struct wlan_iface *wif); int wlan_get_roam_params(struct wlan_iface *wif); int wlan_get_tx_params(struct wlan_iface *wif); int wlan_set_tx_params(struct wlan_iface *wif, int32_t pmode); int wlan_clone_create(struct wlan_iface *); int wlan_clone_destroy(struct wlan_iface *wif); int wlan_config_get_dssid(struct wlan_iface *wif); int wlan_config_set_dssid(struct wlan_iface *wif, char *ssid, int slen); int wlan_config_get_ioctl(struct wlan_iface *wif, int which); int wlan_config_set_ioctl(struct wlan_iface *wif, int which, int val, char *strval, int len); int wlan_set_scan_config(struct wlan_iface *wif); int wlan_get_scan_results(struct wlan_iface *wif); int wlan_get_stats(struct wlan_iface *wif); int wlan_get_wepmode(struct wlan_iface *wif); int wlan_set_wepmode(struct wlan_iface *wif); int wlan_get_weptxkey(struct wlan_iface *wif); int wlan_set_weptxkey(struct wlan_iface *wif); int wlan_get_wepkeys(struct wlan_iface *wif); int wlan_set_wepkeys(struct wlan_iface *wif); int wlan_get_mac_policy(struct wlan_iface *wif); int wlan_set_mac_policy(struct wlan_iface *wif); int wlan_flush_mac_mac(struct wlan_iface *wif); int wlan_get_mac_acl_macs(struct wlan_iface *wif); int wlan_add_mac_acl_mac(struct wlan_iface *wif, struct wlan_mac_mac *mmac); int wlan_del_mac_acl_mac(struct wlan_iface *wif, struct wlan_mac_mac *mmac); int32_t wlan_do_sysctl(struct wlan_config *cfg, enum wlan_syscl which, int set); int wlan_mesh_config_get(struct wlan_iface *wif, int which); int wlan_mesh_config_set(struct wlan_iface *wif, int which); int wlan_mesh_flush_routes(struct wlan_iface *wif); int wlan_mesh_add_route(struct wlan_iface *wif, struct wlan_mesh_route *wmr); int wlan_mesh_del_route(struct wlan_iface *wif, struct wlan_mesh_route *wmr); int wlan_mesh_get_routelist(struct wlan_iface *wif); int wlan_hwmp_config_get(struct wlan_iface *wif, int which); int wlan_hwmp_config_set(struct wlan_iface *wif, int which); /* XXX: static */ int wlan_peer_set_vlan(struct wlan_iface *wif, struct wlan_peer *wip, int vlan); int wlan_get_peerinfo(struct wlan_iface *wif); /* XXX*/ struct wlan_peer *wlan_new_peer(const uint8_t *pmac); void wlan_free_peer(struct wlan_peer *wip); int wlan_add_peer(struct wlan_iface *wif, struct wlan_peer *wip); struct wlan_scan_result * wlan_scan_new_result(const uint8_t *ssid, const uint8_t *bssid); void wlan_scan_free_result(struct wlan_scan_result *sr); int wlan_scan_add_result(struct wlan_iface *wif, struct wlan_scan_result *sr); struct wlan_mac_mac *wlan_mac_new_mac(const uint8_t *mac); void wlan_mac_free_mac(struct wlan_mac_mac *wmm); int wlan_mac_add_mac(struct wlan_iface *wif, struct wlan_mac_mac *wmm); struct wlan_mesh_route *wlan_mesh_new_route(const uint8_t *dstmac); int wlan_mesh_add_rtentry(struct wlan_iface *wif, struct wlan_mesh_route *wmr); void wlan_mesh_free_route(struct wlan_mesh_route *wmr);