1ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen#ifndef HOSTAP_80211_H 2ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen#define HOSTAP_80211_H 3ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen 45fad5a2e1f34b333a801b749c4e143c2ac3e8a4fAdrian Bunk#include <linux/types.h> 51ea893fde29d8cf1639da8989f4b843dc3283ca8Dan Williams#include <linux/skbuff.h> 6d0cf9c0dadcdc89a755bcb301cfc9c796eb28ccfStephen Hemminger#include <linux/netdevice.h> 75fad5a2e1f34b333a801b749c4e143c2ac3e8a4fAdrian Bunk 8ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinenstruct hostap_ieee80211_mgmt { 98a9faf3cd08b91aca1502dbe18e3b5063fda2e87Al Viro __le16 frame_control; 108a9faf3cd08b91aca1502dbe18e3b5063fda2e87Al Viro __le16 duration; 11ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen u8 da[6]; 12ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen u8 sa[6]; 13ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen u8 bssid[6]; 148a9faf3cd08b91aca1502dbe18e3b5063fda2e87Al Viro __le16 seq_ctrl; 15ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen union { 16ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen struct { 178a9faf3cd08b91aca1502dbe18e3b5063fda2e87Al Viro __le16 auth_alg; 188a9faf3cd08b91aca1502dbe18e3b5063fda2e87Al Viro __le16 auth_transaction; 198a9faf3cd08b91aca1502dbe18e3b5063fda2e87Al Viro __le16 status_code; 20ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen /* possibly followed by Challenge text */ 21ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen u8 variable[0]; 22ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet } __packed auth; 23ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen struct { 248a9faf3cd08b91aca1502dbe18e3b5063fda2e87Al Viro __le16 reason_code; 25ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet } __packed deauth; 26ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen struct { 278a9faf3cd08b91aca1502dbe18e3b5063fda2e87Al Viro __le16 capab_info; 288a9faf3cd08b91aca1502dbe18e3b5063fda2e87Al Viro __le16 listen_interval; 29ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen /* followed by SSID and Supported rates */ 30ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen u8 variable[0]; 31ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet } __packed assoc_req; 32ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen struct { 338a9faf3cd08b91aca1502dbe18e3b5063fda2e87Al Viro __le16 capab_info; 348a9faf3cd08b91aca1502dbe18e3b5063fda2e87Al Viro __le16 status_code; 358a9faf3cd08b91aca1502dbe18e3b5063fda2e87Al Viro __le16 aid; 36ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen /* followed by Supported rates */ 37ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen u8 variable[0]; 38ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet } __packed assoc_resp, reassoc_resp; 39ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen struct { 408a9faf3cd08b91aca1502dbe18e3b5063fda2e87Al Viro __le16 capab_info; 418a9faf3cd08b91aca1502dbe18e3b5063fda2e87Al Viro __le16 listen_interval; 42ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen u8 current_ap[6]; 43ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen /* followed by SSID and Supported rates */ 44ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen u8 variable[0]; 45ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet } __packed reassoc_req; 46ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen struct { 478a9faf3cd08b91aca1502dbe18e3b5063fda2e87Al Viro __le16 reason_code; 48ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet } __packed disassoc; 49ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen struct { 50ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet } __packed probe_req; 51ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen struct { 52ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen u8 timestamp[8]; 538a9faf3cd08b91aca1502dbe18e3b5063fda2e87Al Viro __le16 beacon_int; 548a9faf3cd08b91aca1502dbe18e3b5063fda2e87Al Viro __le16 capab_info; 55ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen /* followed by some of SSID, Supported rates, 56ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen * FH Params, DS Params, CF Params, IBSS Params, TIM */ 57ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen u8 variable[0]; 58ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet } __packed beacon, probe_resp; 59ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen } u; 60ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet} __packed; 61ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen 62ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen 63ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen#define IEEE80211_MGMT_HDR_LEN 24 64ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen#define IEEE80211_DATA_HDR3_LEN 24 65ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen#define IEEE80211_DATA_HDR4_LEN 30 66ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen 67ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen 68ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinenstruct hostap_80211_rx_status { 69ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen u32 mac_time; 70ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen u8 signal; 71ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen u8 noise; 72ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen u16 rate; /* in 100 kbps */ 73ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen}; 74ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen 75ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen/* prism2_rx_80211 'type' argument */ 76ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinenenum { 77ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen PRISM2_RX_MONITOR, PRISM2_RX_MGMT, PRISM2_RX_NON_ASSOC, 78ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen PRISM2_RX_NULLFUNC_ACK 79ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen}; 80ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen 81ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinenint prism2_rx_80211(struct net_device *dev, struct sk_buff *skb, 82ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen struct hostap_80211_rx_status *rx_stats, int type); 83ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinenvoid hostap_80211_rx(struct net_device *dev, struct sk_buff *skb, 84ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen struct hostap_80211_rx_status *rx_stats); 85ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinenvoid hostap_dump_rx_80211(const char *name, struct sk_buff *skb, 86ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen struct hostap_80211_rx_status *rx_stats); 87ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen 88ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinenvoid hostap_dump_tx_80211(const char *name, struct sk_buff *skb); 89d0cf9c0dadcdc89a755bcb301cfc9c796eb28ccfStephen Hemmingernetdev_tx_t hostap_data_start_xmit(struct sk_buff *skb, 90d0cf9c0dadcdc89a755bcb301cfc9c796eb28ccfStephen Hemminger struct net_device *dev); 91d0cf9c0dadcdc89a755bcb301cfc9c796eb28ccfStephen Hemmingernetdev_tx_t hostap_mgmt_start_xmit(struct sk_buff *skb, 92d0cf9c0dadcdc89a755bcb301cfc9c796eb28ccfStephen Hemminger struct net_device *dev); 93d0cf9c0dadcdc89a755bcb301cfc9c796eb28ccfStephen Hemmingernetdev_tx_t hostap_master_start_xmit(struct sk_buff *skb, 94d0cf9c0dadcdc89a755bcb301cfc9c796eb28ccfStephen Hemminger struct net_device *dev); 95ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen 96ff1d2767d5a43c85f944e86a45284b721f66196cJouni Malinen#endif /* HOSTAP_80211_H */ 97