Loading include/net/ieee80211.h +165 −3 Original line number Diff line number Diff line Loading @@ -300,6 +300,23 @@ enum ieee80211_reasoncode { 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_RSSI (1<<1) #define IEEE80211_STATMASK_NOISE (1<<2) Loading Loading @@ -378,6 +395,8 @@ struct ieee80211_rx_stats { u8 mask; u8 freq; u16 len; u64 tsf; u32 beacon_time; }; /* IEEE 802.11 requires that STA supports concurrent reception of at least Loading Loading @@ -609,6 +628,28 @@ struct ieee80211_auth { struct ieee80211_info_element info_element[0]; } __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_hdr_3addr header; __le16 reason; Loading Loading @@ -693,7 +734,15 @@ struct ieee80211_txb { /* QoS structure */ #define NETWORK_HAS_QOS_PARAMETERS (1<<3) #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_OUI_LEN 3 Loading Loading @@ -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 { /* These entries are used to identify a unique network */ u8 bssid[ETH_ALEN]; Loading @@ -768,7 +902,7 @@ struct ieee80211_network { u8 rates_ex_len; unsigned long last_scanned; u8 mode; u8 flags; u32 flags; u32 last_associate; u32 time_stamp[2]; u16 beacon_interval; Loading @@ -780,6 +914,25 @@ struct ieee80211_network { u8 rsn_ie[MAX_WPA_IE_LEN]; size_t rsn_ie_len; 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; }; Loading Loading @@ -925,7 +1078,10 @@ struct ieee80211_device { int (*handle_auth) (struct net_device * dev, struct ieee80211_auth * auth); 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, struct ieee80211_disassoc * assoc); int (*handle_beacon) (struct net_device * dev, Loading Loading @@ -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, struct ieee80211_hdr_4addr *header, struct ieee80211_rx_stats *stats); extern void ieee80211_network_reset(struct ieee80211_network *network); /* ieee80211_geo.c */ extern const struct ieee80211_geo *ieee80211_get_geo(struct ieee80211_device Loading @@ -1106,6 +1263,11 @@ extern int ieee80211_is_valid_channel(struct ieee80211_device *ieee, extern int ieee80211_channel_to_index(struct ieee80211_device *ieee, u8 channel); 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 */ extern int ieee80211_wx_get_scan(struct ieee80211_device *ieee, Loading net/ieee80211/ieee80211_rx.c +1 −1 Original line number Diff line number Diff line Loading @@ -1514,7 +1514,7 @@ void ieee80211_rx_mgt(struct ieee80211_device *ieee, case IEEE80211_STYPE_DEAUTH: printk("DEAUTH from AP\n"); if (ieee->handle_deauth != NULL) ieee->handle_deauth(ieee->dev, (struct ieee80211_auth *) ieee->handle_deauth(ieee->dev, (struct ieee80211_deauth *) header); break; default: Loading Loading
include/net/ieee80211.h +165 −3 Original line number Diff line number Diff line Loading @@ -300,6 +300,23 @@ enum ieee80211_reasoncode { 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_RSSI (1<<1) #define IEEE80211_STATMASK_NOISE (1<<2) Loading Loading @@ -378,6 +395,8 @@ struct ieee80211_rx_stats { u8 mask; u8 freq; u16 len; u64 tsf; u32 beacon_time; }; /* IEEE 802.11 requires that STA supports concurrent reception of at least Loading Loading @@ -609,6 +628,28 @@ struct ieee80211_auth { struct ieee80211_info_element info_element[0]; } __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_hdr_3addr header; __le16 reason; Loading Loading @@ -693,7 +734,15 @@ struct ieee80211_txb { /* QoS structure */ #define NETWORK_HAS_QOS_PARAMETERS (1<<3) #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_OUI_LEN 3 Loading Loading @@ -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 { /* These entries are used to identify a unique network */ u8 bssid[ETH_ALEN]; Loading @@ -768,7 +902,7 @@ struct ieee80211_network { u8 rates_ex_len; unsigned long last_scanned; u8 mode; u8 flags; u32 flags; u32 last_associate; u32 time_stamp[2]; u16 beacon_interval; Loading @@ -780,6 +914,25 @@ struct ieee80211_network { u8 rsn_ie[MAX_WPA_IE_LEN]; size_t rsn_ie_len; 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; }; Loading Loading @@ -925,7 +1078,10 @@ struct ieee80211_device { int (*handle_auth) (struct net_device * dev, struct ieee80211_auth * auth); 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, struct ieee80211_disassoc * assoc); int (*handle_beacon) (struct net_device * dev, Loading Loading @@ -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, struct ieee80211_hdr_4addr *header, struct ieee80211_rx_stats *stats); extern void ieee80211_network_reset(struct ieee80211_network *network); /* ieee80211_geo.c */ extern const struct ieee80211_geo *ieee80211_get_geo(struct ieee80211_device Loading @@ -1106,6 +1263,11 @@ extern int ieee80211_is_valid_channel(struct ieee80211_device *ieee, extern int ieee80211_channel_to_index(struct ieee80211_device *ieee, u8 channel); 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 */ extern int ieee80211_wx_get_scan(struct ieee80211_device *ieee, Loading
net/ieee80211/ieee80211_rx.c +1 −1 Original line number Diff line number Diff line Loading @@ -1514,7 +1514,7 @@ void ieee80211_rx_mgt(struct ieee80211_device *ieee, case IEEE80211_STYPE_DEAUTH: printk("DEAUTH from AP\n"); if (ieee->handle_deauth != NULL) ieee->handle_deauth(ieee->dev, (struct ieee80211_auth *) ieee->handle_deauth(ieee->dev, (struct ieee80211_deauth *) header); break; default: Loading