| /*SH0 |
| ******************************************************************************* |
| ** ** |
| ** Copyright (c) 2010-2013 Quantenna Communications, Inc. ** |
| ** All Rights Reserved ** |
| ** ** |
| ** File : ieee80211_tdls.h ** |
| ** Description : Tunnelled Direct-Link Setup ** |
| ** ** |
| ** This module implements portions of the IEEE Std 802.11z specification, ** |
| ** as well as a proprietary discovery mechanism. ** |
| ** ** |
| ******************************************************************************* |
| ** ** |
| ** 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. ** |
| ** 3. The name of the author may not be used to endorse or promote products ** |
| ** derived from this software without specific prior written permission. ** |
| ** ** |
| ** Alternatively, this software may be distributed under the terms of the ** |
| ** GNU General Public License ("GPL") version 2, or (at your option) any ** |
| ** later version as published by the Free Software Foundation. ** |
| ** ** |
| ** In the case this software is distributed under the GPL license, ** |
| ** you should have received a copy of the GNU General Public License ** |
| ** along with this software; if not, write to the Free Software ** |
| ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ** |
| ** ** |
| ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR "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 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. ** |
| ** ** |
| ******************************************************************************* |
| EH0*/ |
| |
| #ifndef _NET80211_IEEE80211_TDLS_H_ |
| #define _NET80211_IEEE80211_TDLS_H_ |
| |
| #include <linux/version.h> |
| #include <linux/module.h> |
| #include <linux/skbuff.h> |
| #include <linux/netdevice.h> |
| |
| #include "net80211/if_llc.h" |
| #include "net80211/if_ethersubr.h" |
| #include "net80211/if_media.h" |
| |
| #include "net80211/ieee80211.h" |
| #include "net80211/ieee80211_var.h" |
| #include "net80211/ieee80211_dot11_msg.h" |
| #include "net80211/ieee80211_linux.h" |
| |
| |
| struct ieee80211_tdls_params { |
| /* Header fields */ |
| u_int8_t *sa; |
| u_int8_t *da; |
| /* action code */ |
| u_int8_t act; |
| |
| /* Fixed length parameters */ |
| u_int16_t caps; |
| u_int16_t reason; |
| u_int16_t status; |
| u_int8_t diag_token; |
| u_int8_t target_chan; |
| u_int8_t reg_class; |
| |
| /* TLVs from 802.11z */ |
| u_int8_t *rates; |
| u_int8_t *country; |
| u_int8_t *xrates; |
| u_int8_t *supp_chan; |
| u_int8_t *sec_chan_off; |
| u_int8_t *rsn; |
| u_int8_t *ext_cap; |
| u_int8_t *edca; |
| u_int8_t *qos_cap; |
| u_int8_t *ftie; |
| u_int8_t *tpk_timeout; |
| u_int8_t *sup_reg_class; |
| u_int8_t *htcap; |
| u_int8_t *htinfo; |
| u_int8_t *vhtcap; |
| u_int8_t *vhtop; |
| |
| u_int8_t *bss_2040_coex; |
| struct ieee80211_ie_aid *aid; |
| struct ieee80211_tdls_link_id *link_id; |
| struct ieee80211_tdls_wkup_sched *wkup_sched; |
| struct ieee80211_tdls_cs_timing *cs_timing; |
| struct ieee80211_tdls_pti_ctrl *pti_ctrl; |
| struct ieee80211_tdls_pu_buf_stat *pu_buf_stat; |
| struct ieee80211_ie_wbchansw *wide_bw_cs; |
| struct ieee80211_ie_vtxpwren *vht_tx_pw_env; |
| |
| /* Proprietary TLVs */ |
| u_int8_t *qtn_info; |
| u_int8_t *qtn_brmacs; |
| }; |
| |
| #define DEFAULT_TDLS_TIMEOUT_TIME 30 |
| #define DEFAULT_TDLS_DISCOVER_INTERVAL 60 |
| #define DEFAULT_TDLS_LIFE_CYCLE (6 * DEFAULT_TDLS_DISCOVER_INTERVAL) |
| |
| #define DEFAULT_TDLS_PATH_SEL_MODE 0 |
| #define DEFAULT_TDLS_PATH_SEL_PPS_THRSHLD 20 |
| #define DEFAULT_TDLS_PATH_SEL_RATE_THRSHLD 24 |
| #define DEFAULT_TDLS_RATE_DETECTION_PKT_CNT 1024 |
| #define DEFAULT_TDLS_RATE_DETECTION_BURST_CNT 4 |
| #define DEFAULT_TDLS_RATE_DETECTION_WAITING_T 12 |
| #define DEFAULT_TDLS_LINK_WEIGHT 5 |
| #define DEFAULT_TDLS_LINK_DISABLE_SCALE 2 |
| #define DEFAULT_TDLS_LINK_SWITCH_INV 2 |
| #define DEFAULT_TDLS_PHY_RATE_WEIGHT 6 |
| |
| #define TDLS_INVALID_CHANNEL_NUM 0 |
| |
| #define DEFAULT_TDLS_VERBOSE 1 |
| #define DEFAULT_TDLS_MIN_RSSI (-900) |
| #define DEFAULT_TDLS_CH_SW_NEGO_TIME 10000 |
| #define DEFAULT_TDLS_CH_SW_PROC_TIME 6000 |
| #define DEFAULT_TDLS_CH_SW_MIN_TIME 2000 |
| #define DEFAULT_TDLS_CH_SW_TX_TIME 1500 |
| #define DEFAULT_TDLS_FIXED_OFF_CHAN TDLS_INVALID_CHANNEL_NUM |
| |
| #define DEFAULT_TDLS_UAPSD_INDICATION_WND (150) |
| #define DEFAULT_TDLS_SETUP_EXPIRE_DURATION (20) |
| |
| const char * |
| ieee80211_tdls_action_name_get(u_int8_t action); |
| |
| const char * |
| ieee80211_tdls_status_string_get(uint8_t stats); |
| |
| int |
| ieee80211_cfg_tdls_add(struct ieee80211vap *vap, u_int8_t *mac); |
| |
| int |
| ieee80211_tdls_cfg_disc_int(struct ieee80211vap *vap, int value); |
| |
| int |
| ieee80211_tdls_get_smoothed_rssi(struct ieee80211vap *vap, struct ieee80211_node *ni); |
| |
| int |
| ieee80211_tdls_add_bridge_entry_for_peer(struct ieee80211_node *peer_ni); |
| |
| int |
| ieee80211_tdls_disable_peer_link(struct ieee80211_node *ni); |
| |
| void |
| ieee80211_tdls_chan_switch_timeout(unsigned long arg); |
| |
| int |
| ieee80211_tdls_send_chan_switch_req(struct ieee80211_node *peer_ni, |
| struct ieee80211_tdls_action_data *data); |
| |
| int |
| ieee80211_tdls_send_chan_switch_resp(struct ieee80211_node *peer_ni, |
| struct ieee80211_tdls_action_data *data); |
| |
| void |
| ieee80211_tdls_recv_disc_req(struct ieee80211_node *ni, struct sk_buff *skb, |
| int rssi, struct ieee80211_tdls_params *tdls); |
| |
| void |
| ieee80211_tdls_recv_disc_resp(struct ieee80211_node *ni, struct sk_buff *skb, |
| int rssi, struct ieee80211_tdls_params *tdls); |
| |
| void |
| ieee80211_tdls_recv_setup_req(struct ieee80211_node *ni, struct sk_buff *skb, |
| int rssi, struct ieee80211_tdls_params *tdls); |
| |
| void |
| ieee80211_tdls_recv_setup_resp(struct ieee80211_node *ni, struct sk_buff *skb, |
| int rssi, struct ieee80211_tdls_params *tdls); |
| |
| void |
| ieee80211_tdls_recv_setup_confirm(struct ieee80211_node *ni, struct sk_buff *skb, |
| int rssi, struct ieee80211_tdls_params *tdls); |
| |
| void |
| ieee80211_tdls_recv_teardown(struct ieee80211_node *ni, struct sk_buff *skb, |
| int rssi, struct ieee80211_tdls_params *tdls); |
| |
| void |
| ieee80211_tdls_recv_chan_switch_req(struct ieee80211_node *ni, struct sk_buff *skb, |
| int rssi, struct ieee80211_tdls_params *tdls); |
| |
| void |
| ieee80211_tdls_recv_chan_switch_resp(struct ieee80211_node *ni, struct sk_buff *skb, |
| int rssi, struct ieee80211_tdls_params *tdls); |
| |
| int |
| ieee80211_tdls_send_action_frame(struct net_device *ndev, |
| struct ieee80211_tdls_action_data *data); |
| |
| int |
| ieee80211_tdls_send_event(struct ieee80211_node *peer_ni, |
| enum ieee80211_tdls_event event, void *data); |
| |
| int |
| ieee80211_tdls_return_to_base_channel(struct ieee80211vap *vap, int ap_disassoc); |
| |
| int |
| ieee80211_tdls_del_key(struct ieee80211vap *vap, struct ieee80211_node *ni); |
| |
| void |
| ieee80211_tdls_free_peer_ps_info(struct ieee80211vap *vap); |
| |
| void |
| ieee80211_tdls_vattach(struct ieee80211vap *vap); |
| |
| void |
| ieee80211_tdls_vdetach(struct ieee80211vap *vap); |
| |
| int |
| ieee80211_tdls_node_join(struct ieee80211vap *vap, struct ieee80211_node *ni); |
| |
| int |
| ieee80211_tdls_node_leave(struct ieee80211vap *vap, struct ieee80211_node *ni); |
| |
| int |
| ieee80211_tdls_teardown_all_link(struct ieee80211vap *vap); |
| |
| int |
| ieee80211_tdls_free_all_peers(struct ieee80211vap *vap); |
| |
| int |
| ieee80211_tdls_free_all_inactive_peers(struct ieee80211vap *vap); |
| |
| int |
| ieee80211_tdls_clear_disc_timer(struct ieee80211vap *vap); |
| |
| int |
| ieee80211_tdls_start_disc_timer(struct ieee80211vap *vap); |
| |
| void |
| ieee80211_tdls_node_expire(unsigned long arg); |
| |
| int |
| ieee80211_tdls_start_node_expire_timer(struct ieee80211vap *vap); |
| |
| int |
| ieee80211_tdls_init_node_expire_timer(struct ieee80211vap *vap); |
| |
| int |
| ieee80211_tdls_clear_node_expire_timer(struct ieee80211vap *vap); |
| |
| int |
| ieee80211_tdls_set_link_timeout(struct ieee80211vap *vap, |
| struct ieee80211_node *ni); |
| |
| int |
| ieee80211_tdls_pend_disassociation(struct ieee80211vap *vap, |
| enum ieee80211_state nstate, int arg); |
| |
| int |
| ieee80211_tdls_init_chan_switch_timer(struct ieee80211vap *vap); |
| |
| int |
| ieee80211_tdls_start_channel_switch(struct ieee80211vap *vap, |
| struct ieee80211_node *peer_ni); |
| |
| void |
| ieee80211_tdls_update_node_status(struct ieee80211_node *ni, |
| enum ni_tdls_status stats); |
| |
| void |
| ieee80211_tdls_update_uapsd_indicication_windows(struct ieee80211vap *vap); |
| |
| int ieee80211_tdls_update_link_timeout(struct ieee80211vap *vap); |
| |
| void ieee80211_tdls_trigger_rate_detection(unsigned long arg); |
| |
| #endif |