1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef HOSTAP_80211_H 3*4882a593Smuzhiyun #define HOSTAP_80211_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <linux/types.h> 6*4882a593Smuzhiyun #include <linux/skbuff.h> 7*4882a593Smuzhiyun #include <linux/netdevice.h> 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun struct hostap_ieee80211_mgmt { 10*4882a593Smuzhiyun __le16 frame_control; 11*4882a593Smuzhiyun __le16 duration; 12*4882a593Smuzhiyun u8 da[6]; 13*4882a593Smuzhiyun u8 sa[6]; 14*4882a593Smuzhiyun u8 bssid[6]; 15*4882a593Smuzhiyun __le16 seq_ctrl; 16*4882a593Smuzhiyun union { 17*4882a593Smuzhiyun struct { 18*4882a593Smuzhiyun __le16 auth_alg; 19*4882a593Smuzhiyun __le16 auth_transaction; 20*4882a593Smuzhiyun __le16 status_code; 21*4882a593Smuzhiyun /* possibly followed by Challenge text */ 22*4882a593Smuzhiyun u8 variable[0]; 23*4882a593Smuzhiyun } __packed auth; 24*4882a593Smuzhiyun struct { 25*4882a593Smuzhiyun __le16 reason_code; 26*4882a593Smuzhiyun } __packed deauth; 27*4882a593Smuzhiyun struct { 28*4882a593Smuzhiyun __le16 capab_info; 29*4882a593Smuzhiyun __le16 listen_interval; 30*4882a593Smuzhiyun /* followed by SSID and Supported rates */ 31*4882a593Smuzhiyun u8 variable[0]; 32*4882a593Smuzhiyun } __packed assoc_req; 33*4882a593Smuzhiyun struct { 34*4882a593Smuzhiyun __le16 capab_info; 35*4882a593Smuzhiyun __le16 status_code; 36*4882a593Smuzhiyun __le16 aid; 37*4882a593Smuzhiyun /* followed by Supported rates */ 38*4882a593Smuzhiyun u8 variable[0]; 39*4882a593Smuzhiyun } __packed assoc_resp, reassoc_resp; 40*4882a593Smuzhiyun struct { 41*4882a593Smuzhiyun __le16 capab_info; 42*4882a593Smuzhiyun __le16 listen_interval; 43*4882a593Smuzhiyun u8 current_ap[6]; 44*4882a593Smuzhiyun /* followed by SSID and Supported rates */ 45*4882a593Smuzhiyun u8 variable[0]; 46*4882a593Smuzhiyun } __packed reassoc_req; 47*4882a593Smuzhiyun struct { 48*4882a593Smuzhiyun __le16 reason_code; 49*4882a593Smuzhiyun } __packed disassoc; 50*4882a593Smuzhiyun struct { 51*4882a593Smuzhiyun } __packed probe_req; 52*4882a593Smuzhiyun struct { 53*4882a593Smuzhiyun u8 timestamp[8]; 54*4882a593Smuzhiyun __le16 beacon_int; 55*4882a593Smuzhiyun __le16 capab_info; 56*4882a593Smuzhiyun /* followed by some of SSID, Supported rates, 57*4882a593Smuzhiyun * FH Params, DS Params, CF Params, IBSS Params, TIM */ 58*4882a593Smuzhiyun u8 variable[0]; 59*4882a593Smuzhiyun } __packed beacon, probe_resp; 60*4882a593Smuzhiyun } u; 61*4882a593Smuzhiyun } __packed; 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun #define IEEE80211_MGMT_HDR_LEN 24 65*4882a593Smuzhiyun #define IEEE80211_DATA_HDR3_LEN 24 66*4882a593Smuzhiyun #define IEEE80211_DATA_HDR4_LEN 30 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun struct hostap_80211_rx_status { 70*4882a593Smuzhiyun u32 mac_time; 71*4882a593Smuzhiyun u8 signal; 72*4882a593Smuzhiyun u8 noise; 73*4882a593Smuzhiyun u16 rate; /* in 100 kbps */ 74*4882a593Smuzhiyun }; 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun /* prism2_rx_80211 'type' argument */ 77*4882a593Smuzhiyun enum { 78*4882a593Smuzhiyun PRISM2_RX_MONITOR, PRISM2_RX_MGMT, PRISM2_RX_NON_ASSOC, 79*4882a593Smuzhiyun PRISM2_RX_NULLFUNC_ACK 80*4882a593Smuzhiyun }; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun int prism2_rx_80211(struct net_device *dev, struct sk_buff *skb, 83*4882a593Smuzhiyun struct hostap_80211_rx_status *rx_stats, int type); 84*4882a593Smuzhiyun void hostap_80211_rx(struct net_device *dev, struct sk_buff *skb, 85*4882a593Smuzhiyun struct hostap_80211_rx_status *rx_stats); 86*4882a593Smuzhiyun void hostap_dump_rx_80211(const char *name, struct sk_buff *skb, 87*4882a593Smuzhiyun struct hostap_80211_rx_status *rx_stats); 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun void hostap_dump_tx_80211(const char *name, struct sk_buff *skb); 90*4882a593Smuzhiyun netdev_tx_t hostap_data_start_xmit(struct sk_buff *skb, 91*4882a593Smuzhiyun struct net_device *dev); 92*4882a593Smuzhiyun netdev_tx_t hostap_mgmt_start_xmit(struct sk_buff *skb, 93*4882a593Smuzhiyun struct net_device *dev); 94*4882a593Smuzhiyun netdev_tx_t hostap_master_start_xmit(struct sk_buff *skb, 95*4882a593Smuzhiyun struct net_device *dev); 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun #endif /* HOSTAP_80211_H */ 98