162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef HOSTAP_80211_H 362306a36Sopenharmony_ci#define HOSTAP_80211_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include <linux/types.h> 662306a36Sopenharmony_ci#include <linux/skbuff.h> 762306a36Sopenharmony_ci#include <linux/netdevice.h> 862306a36Sopenharmony_ci 962306a36Sopenharmony_cistruct hostap_ieee80211_mgmt { 1062306a36Sopenharmony_ci __le16 frame_control; 1162306a36Sopenharmony_ci __le16 duration; 1262306a36Sopenharmony_ci u8 da[6]; 1362306a36Sopenharmony_ci u8 sa[6]; 1462306a36Sopenharmony_ci u8 bssid[6]; 1562306a36Sopenharmony_ci __le16 seq_ctrl; 1662306a36Sopenharmony_ci union { 1762306a36Sopenharmony_ci struct { 1862306a36Sopenharmony_ci __le16 auth_alg; 1962306a36Sopenharmony_ci __le16 auth_transaction; 2062306a36Sopenharmony_ci __le16 status_code; 2162306a36Sopenharmony_ci /* possibly followed by Challenge text */ 2262306a36Sopenharmony_ci u8 variable[0]; 2362306a36Sopenharmony_ci } __packed auth; 2462306a36Sopenharmony_ci struct { 2562306a36Sopenharmony_ci __le16 reason_code; 2662306a36Sopenharmony_ci } __packed deauth; 2762306a36Sopenharmony_ci struct { 2862306a36Sopenharmony_ci __le16 capab_info; 2962306a36Sopenharmony_ci __le16 listen_interval; 3062306a36Sopenharmony_ci /* followed by SSID and Supported rates */ 3162306a36Sopenharmony_ci u8 variable[0]; 3262306a36Sopenharmony_ci } __packed assoc_req; 3362306a36Sopenharmony_ci struct { 3462306a36Sopenharmony_ci __le16 capab_info; 3562306a36Sopenharmony_ci __le16 status_code; 3662306a36Sopenharmony_ci __le16 aid; 3762306a36Sopenharmony_ci /* followed by Supported rates */ 3862306a36Sopenharmony_ci u8 variable[0]; 3962306a36Sopenharmony_ci } __packed assoc_resp, reassoc_resp; 4062306a36Sopenharmony_ci struct { 4162306a36Sopenharmony_ci __le16 capab_info; 4262306a36Sopenharmony_ci __le16 listen_interval; 4362306a36Sopenharmony_ci u8 current_ap[6]; 4462306a36Sopenharmony_ci /* followed by SSID and Supported rates */ 4562306a36Sopenharmony_ci u8 variable[0]; 4662306a36Sopenharmony_ci } __packed reassoc_req; 4762306a36Sopenharmony_ci struct { 4862306a36Sopenharmony_ci __le16 reason_code; 4962306a36Sopenharmony_ci } __packed disassoc; 5062306a36Sopenharmony_ci struct { 5162306a36Sopenharmony_ci } __packed probe_req; 5262306a36Sopenharmony_ci struct { 5362306a36Sopenharmony_ci u8 timestamp[8]; 5462306a36Sopenharmony_ci __le16 beacon_int; 5562306a36Sopenharmony_ci __le16 capab_info; 5662306a36Sopenharmony_ci /* followed by some of SSID, Supported rates, 5762306a36Sopenharmony_ci * FH Params, DS Params, CF Params, IBSS Params, TIM */ 5862306a36Sopenharmony_ci u8 variable[0]; 5962306a36Sopenharmony_ci } __packed beacon, probe_resp; 6062306a36Sopenharmony_ci } u; 6162306a36Sopenharmony_ci} __packed; 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci#define IEEE80211_MGMT_HDR_LEN 24 6562306a36Sopenharmony_ci#define IEEE80211_DATA_HDR3_LEN 24 6662306a36Sopenharmony_ci#define IEEE80211_DATA_HDR4_LEN 30 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_cistruct hostap_80211_rx_status { 7062306a36Sopenharmony_ci u32 mac_time; 7162306a36Sopenharmony_ci u8 signal; 7262306a36Sopenharmony_ci u8 noise; 7362306a36Sopenharmony_ci u16 rate; /* in 100 kbps */ 7462306a36Sopenharmony_ci}; 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci/* prism2_rx_80211 'type' argument */ 7762306a36Sopenharmony_cienum { 7862306a36Sopenharmony_ci PRISM2_RX_MONITOR, PRISM2_RX_MGMT, PRISM2_RX_NON_ASSOC, 7962306a36Sopenharmony_ci PRISM2_RX_NULLFUNC_ACK 8062306a36Sopenharmony_ci}; 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ciint prism2_rx_80211(struct net_device *dev, struct sk_buff *skb, 8362306a36Sopenharmony_ci struct hostap_80211_rx_status *rx_stats, int type); 8462306a36Sopenharmony_civoid hostap_80211_rx(struct net_device *dev, struct sk_buff *skb, 8562306a36Sopenharmony_ci struct hostap_80211_rx_status *rx_stats); 8662306a36Sopenharmony_civoid hostap_dump_rx_80211(const char *name, struct sk_buff *skb, 8762306a36Sopenharmony_ci struct hostap_80211_rx_status *rx_stats); 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_civoid hostap_dump_tx_80211(const char *name, struct sk_buff *skb); 9062306a36Sopenharmony_cinetdev_tx_t hostap_data_start_xmit(struct sk_buff *skb, 9162306a36Sopenharmony_ci struct net_device *dev); 9262306a36Sopenharmony_cinetdev_tx_t hostap_mgmt_start_xmit(struct sk_buff *skb, 9362306a36Sopenharmony_ci struct net_device *dev); 9462306a36Sopenharmony_cinetdev_tx_t hostap_master_start_xmit(struct sk_buff *skb, 9562306a36Sopenharmony_ci struct net_device *dev); 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci#endif /* HOSTAP_80211_H */ 98