|
@@ -300,6 +300,23 @@ enum ieee80211_reasoncode {
|
|
WLAN_REASON_CIPHER_SUITE_REJECTED = 24,
|
|
WLAN_REASON_CIPHER_SUITE_REJECTED = 24,
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+/* Action categories - 802.11h */
|
|
|
|
+enum ieee80211_actioncategories {
|
|
|
|
+ WLAN_ACTION_SPECTRUM_MGMT = 0,
|
|
|
|
+ /* Reserved 1-127 */
|
|
|
|
+ /* Error 128-255 */
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* Action details - 802.11h */
|
|
|
|
+enum ieee80211_actiondetails {
|
|
|
|
+ WLAN_ACTION_CATEGORY_MEASURE_REQUEST = 0,
|
|
|
|
+ WLAN_ACTION_CATEGORY_MEASURE_REPORT = 1,
|
|
|
|
+ WLAN_ACTION_CATEGORY_TPC_REQUEST = 2,
|
|
|
|
+ WLAN_ACTION_CATEGORY_TPC_REPORT = 3,
|
|
|
|
+ WLAN_ACTION_CATEGORY_CHANNEL_SWITCH = 4,
|
|
|
|
+ /* 5 - 255 Reserved */
|
|
|
|
+};
|
|
|
|
+
|
|
#define IEEE80211_STATMASK_SIGNAL (1<<0)
|
|
#define IEEE80211_STATMASK_SIGNAL (1<<0)
|
|
#define IEEE80211_STATMASK_RSSI (1<<1)
|
|
#define IEEE80211_STATMASK_RSSI (1<<1)
|
|
#define IEEE80211_STATMASK_NOISE (1<<2)
|
|
#define IEEE80211_STATMASK_NOISE (1<<2)
|
|
@@ -378,6 +395,8 @@ struct ieee80211_rx_stats {
|
|
u8 mask;
|
|
u8 mask;
|
|
u8 freq;
|
|
u8 freq;
|
|
u16 len;
|
|
u16 len;
|
|
|
|
+ u64 tsf;
|
|
|
|
+ u32 beacon_time;
|
|
};
|
|
};
|
|
|
|
|
|
/* IEEE 802.11 requires that STA supports concurrent reception of at least
|
|
/* IEEE 802.11 requires that STA supports concurrent reception of at least
|
|
@@ -609,6 +628,28 @@ struct ieee80211_auth {
|
|
struct ieee80211_info_element info_element[0];
|
|
struct ieee80211_info_element info_element[0];
|
|
} __attribute__ ((packed));
|
|
} __attribute__ ((packed));
|
|
|
|
|
|
|
|
+struct ieee80211_channel_switch {
|
|
|
|
+ u8 id;
|
|
|
|
+ u8 len;
|
|
|
|
+ u8 mode;
|
|
|
|
+ u8 channel;
|
|
|
|
+ u8 count;
|
|
|
|
+} __attribute__ ((packed));
|
|
|
|
+
|
|
|
|
+struct ieee80211_action {
|
|
|
|
+ struct ieee80211_hdr_3addr header;
|
|
|
|
+ u8 category;
|
|
|
|
+ u8 action;
|
|
|
|
+ union {
|
|
|
|
+ struct ieee80211_action_exchange {
|
|
|
|
+ u8 token;
|
|
|
|
+ struct ieee80211_info_element info_element[0];
|
|
|
|
+ } exchange;
|
|
|
|
+ struct ieee80211_channel_switch channel_switch;
|
|
|
|
+
|
|
|
|
+ } format;
|
|
|
|
+} __attribute__ ((packed));
|
|
|
|
+
|
|
struct ieee80211_disassoc {
|
|
struct ieee80211_disassoc {
|
|
struct ieee80211_hdr_3addr header;
|
|
struct ieee80211_hdr_3addr header;
|
|
__le16 reason;
|
|
__le16 reason;
|
|
@@ -693,7 +734,15 @@ struct ieee80211_txb {
|
|
/* QoS structure */
|
|
/* QoS structure */
|
|
#define NETWORK_HAS_QOS_PARAMETERS (1<<3)
|
|
#define NETWORK_HAS_QOS_PARAMETERS (1<<3)
|
|
#define NETWORK_HAS_QOS_INFORMATION (1<<4)
|
|
#define NETWORK_HAS_QOS_INFORMATION (1<<4)
|
|
-#define NETWORK_HAS_QOS_MASK (NETWORK_HAS_QOS_PARAMETERS | NETWORK_HAS_QOS_INFORMATION)
|
|
|
|
|
|
+#define NETWORK_HAS_QOS_MASK (NETWORK_HAS_QOS_PARAMETERS | \
|
|
|
|
+ NETWORK_HAS_QOS_INFORMATION)
|
|
|
|
+
|
|
|
|
+/* 802.11h */
|
|
|
|
+#define NETWORK_HAS_POWER_CONSTRAINT (1<<5)
|
|
|
|
+#define NETWORK_HAS_CSA (1<<6)
|
|
|
|
+#define NETWORK_HAS_QUIET (1<<7)
|
|
|
|
+#define NETWORK_HAS_IBSS_DFS (1<<8)
|
|
|
|
+#define NETWORK_HAS_TPC_REPORT (1<<9)
|
|
|
|
|
|
#define QOS_QUEUE_NUM 4
|
|
#define QOS_QUEUE_NUM 4
|
|
#define QOS_OUI_LEN 3
|
|
#define QOS_OUI_LEN 3
|
|
@@ -749,6 +798,91 @@ struct ieee80211_tim_parameters {
|
|
|
|
|
|
/*******************************************************/
|
|
/*******************************************************/
|
|
|
|
|
|
|
|
+enum { /* ieee80211_basic_report.map */
|
|
|
|
+ IEEE80211_BASIC_MAP_BSS = (1 << 0),
|
|
|
|
+ IEEE80211_BASIC_MAP_OFDM = (1 << 1),
|
|
|
|
+ IEEE80211_BASIC_MAP_UNIDENTIFIED = (1 << 2),
|
|
|
|
+ IEEE80211_BASIC_MAP_RADAR = (1 << 3),
|
|
|
|
+ IEEE80211_BASIC_MAP_UNMEASURED = (1 << 4),
|
|
|
|
+ /* Bits 5-7 are reserved */
|
|
|
|
+
|
|
|
|
+};
|
|
|
|
+struct ieee80211_basic_report {
|
|
|
|
+ u8 channel;
|
|
|
|
+ __le64 start_time;
|
|
|
|
+ __le16 duration;
|
|
|
|
+ u8 map;
|
|
|
|
+} __attribute__ ((packed));
|
|
|
|
+
|
|
|
|
+enum { /* ieee80211_measurement_request.mode */
|
|
|
|
+ /* Bit 0 is reserved */
|
|
|
|
+ IEEE80211_MEASUREMENT_ENABLE = (1 << 1),
|
|
|
|
+ IEEE80211_MEASUREMENT_REQUEST = (1 << 2),
|
|
|
|
+ IEEE80211_MEASUREMENT_REPORT = (1 << 3),
|
|
|
|
+ /* Bits 4-7 are reserved */
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+enum {
|
|
|
|
+ IEEE80211_REPORT_BASIC = 0, /* required */
|
|
|
|
+ IEEE80211_REPORT_CCA = 1, /* optional */
|
|
|
|
+ IEEE80211_REPORT_RPI = 2, /* optional */
|
|
|
|
+ /* 3-255 reserved */
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+struct ieee80211_measurement_params {
|
|
|
|
+ u8 channel;
|
|
|
|
+ __le64 start_time;
|
|
|
|
+ __le16 duration;
|
|
|
|
+} __attribute__ ((packed));
|
|
|
|
+
|
|
|
|
+struct ieee80211_measurement_request {
|
|
|
|
+ struct ieee80211_info_element ie;
|
|
|
|
+ u8 token;
|
|
|
|
+ u8 mode;
|
|
|
|
+ u8 type;
|
|
|
|
+ struct ieee80211_measurement_params params[0];
|
|
|
|
+} __attribute__ ((packed));
|
|
|
|
+
|
|
|
|
+struct ieee80211_measurement_report {
|
|
|
|
+ struct ieee80211_info_element ie;
|
|
|
|
+ u8 token;
|
|
|
|
+ u8 mode;
|
|
|
|
+ u8 type;
|
|
|
|
+ union {
|
|
|
|
+ struct ieee80211_basic_report basic[0];
|
|
|
|
+ } u;
|
|
|
|
+} __attribute__ ((packed));
|
|
|
|
+
|
|
|
|
+struct ieee80211_tpc_report {
|
|
|
|
+ u8 transmit_power;
|
|
|
|
+ u8 link_margin;
|
|
|
|
+} __attribute__ ((packed));
|
|
|
|
+
|
|
|
|
+struct ieee80211_channel_map {
|
|
|
|
+ u8 channel;
|
|
|
|
+ u8 map;
|
|
|
|
+} __attribute__ ((packed));
|
|
|
|
+
|
|
|
|
+struct ieee80211_ibss_dfs {
|
|
|
|
+ struct ieee80211_info_element ie;
|
|
|
|
+ u8 owner[ETH_ALEN];
|
|
|
|
+ u8 recovery_interval;
|
|
|
|
+ struct ieee80211_channel_map channel_map[0];
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+struct ieee80211_csa {
|
|
|
|
+ u8 mode;
|
|
|
|
+ u8 channel;
|
|
|
|
+ u8 count;
|
|
|
|
+} __attribute__ ((packed));
|
|
|
|
+
|
|
|
|
+struct ieee80211_quiet {
|
|
|
|
+ u8 count;
|
|
|
|
+ u8 period;
|
|
|
|
+ u8 duration;
|
|
|
|
+ u8 offset;
|
|
|
|
+} __attribute__ ((packed));
|
|
|
|
+
|
|
struct ieee80211_network {
|
|
struct ieee80211_network {
|
|
/* These entries are used to identify a unique network */
|
|
/* These entries are used to identify a unique network */
|
|
u8 bssid[ETH_ALEN];
|
|
u8 bssid[ETH_ALEN];
|
|
@@ -768,7 +902,7 @@ struct ieee80211_network {
|
|
u8 rates_ex_len;
|
|
u8 rates_ex_len;
|
|
unsigned long last_scanned;
|
|
unsigned long last_scanned;
|
|
u8 mode;
|
|
u8 mode;
|
|
- u8 flags;
|
|
|
|
|
|
+ u32 flags;
|
|
u32 last_associate;
|
|
u32 last_associate;
|
|
u32 time_stamp[2];
|
|
u32 time_stamp[2];
|
|
u16 beacon_interval;
|
|
u16 beacon_interval;
|
|
@@ -780,6 +914,25 @@ struct ieee80211_network {
|
|
u8 rsn_ie[MAX_WPA_IE_LEN];
|
|
u8 rsn_ie[MAX_WPA_IE_LEN];
|
|
size_t rsn_ie_len;
|
|
size_t rsn_ie_len;
|
|
struct ieee80211_tim_parameters tim;
|
|
struct ieee80211_tim_parameters tim;
|
|
|
|
+
|
|
|
|
+ /* 802.11h info */
|
|
|
|
+
|
|
|
|
+ /* Power Constraint - mandatory if spctrm mgmt required */
|
|
|
|
+ u8 power_constraint;
|
|
|
|
+
|
|
|
|
+ /* TPC Report - mandatory if spctrm mgmt required */
|
|
|
|
+ struct ieee80211_tpc_report tpc_report;
|
|
|
|
+
|
|
|
|
+ /* IBSS DFS - mandatory if spctrm mgmt required and IBSS
|
|
|
|
+ * NOTE: This is variable length and so must be allocated dynamically */
|
|
|
|
+ struct ieee80211_ibss_dfs *ibss_dfs;
|
|
|
|
+
|
|
|
|
+ /* Channel Switch Announcement - optional if spctrm mgmt required */
|
|
|
|
+ struct ieee80211_csa csa;
|
|
|
|
+
|
|
|
|
+ /* Quiet - optional if spctrm mgmt required */
|
|
|
|
+ struct ieee80211_quiet quiet;
|
|
|
|
+
|
|
struct list_head list;
|
|
struct list_head list;
|
|
};
|
|
};
|
|
|
|
|
|
@@ -925,7 +1078,10 @@ struct ieee80211_device {
|
|
int (*handle_auth) (struct net_device * dev,
|
|
int (*handle_auth) (struct net_device * dev,
|
|
struct ieee80211_auth * auth);
|
|
struct ieee80211_auth * auth);
|
|
int (*handle_deauth) (struct net_device * dev,
|
|
int (*handle_deauth) (struct net_device * dev,
|
|
- struct ieee80211_auth * auth);
|
|
|
|
|
|
+ struct ieee80211_deauth * auth);
|
|
|
|
+ int (*handle_action) (struct net_device * dev,
|
|
|
|
+ struct ieee80211_action * action,
|
|
|
|
+ struct ieee80211_rx_stats * stats);
|
|
int (*handle_disassoc) (struct net_device * dev,
|
|
int (*handle_disassoc) (struct net_device * dev,
|
|
struct ieee80211_disassoc * assoc);
|
|
struct ieee80211_disassoc * assoc);
|
|
int (*handle_beacon) (struct net_device * dev,
|
|
int (*handle_beacon) (struct net_device * dev,
|
|
@@ -1094,6 +1250,7 @@ extern int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
|
|
extern void ieee80211_rx_mgt(struct ieee80211_device *ieee,
|
|
extern void ieee80211_rx_mgt(struct ieee80211_device *ieee,
|
|
struct ieee80211_hdr_4addr *header,
|
|
struct ieee80211_hdr_4addr *header,
|
|
struct ieee80211_rx_stats *stats);
|
|
struct ieee80211_rx_stats *stats);
|
|
|
|
+extern void ieee80211_network_reset(struct ieee80211_network *network);
|
|
|
|
|
|
/* ieee80211_geo.c */
|
|
/* ieee80211_geo.c */
|
|
extern const struct ieee80211_geo *ieee80211_get_geo(struct ieee80211_device
|
|
extern const struct ieee80211_geo *ieee80211_get_geo(struct ieee80211_device
|
|
@@ -1106,6 +1263,11 @@ extern int ieee80211_is_valid_channel(struct ieee80211_device *ieee,
|
|
extern int ieee80211_channel_to_index(struct ieee80211_device *ieee,
|
|
extern int ieee80211_channel_to_index(struct ieee80211_device *ieee,
|
|
u8 channel);
|
|
u8 channel);
|
|
extern u8 ieee80211_freq_to_channel(struct ieee80211_device *ieee, u32 freq);
|
|
extern u8 ieee80211_freq_to_channel(struct ieee80211_device *ieee, u32 freq);
|
|
|
|
+extern u8 ieee80211_get_channel_flags(struct ieee80211_device *ieee,
|
|
|
|
+ u8 channel);
|
|
|
|
+extern const struct ieee80211_channel *ieee80211_get_channel(struct
|
|
|
|
+ ieee80211_device
|
|
|
|
+ *ieee, u8 channel);
|
|
|
|
|
|
/* ieee80211_wx.c */
|
|
/* ieee80211_wx.c */
|
|
extern int ieee80211_wx_get_scan(struct ieee80211_device *ieee,
|
|
extern int ieee80211_wx_get_scan(struct ieee80211_device *ieee,
|