Changeset 8a64320e in mainline for uspace/lib/ieee80211/include
- Timestamp:
- 2015-04-23T23:40:14Z (10 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- dcba819
- Parents:
- 09044cb
- Location:
- uspace/lib/ieee80211/include
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ieee80211/include/ieee80211.h
r09044cb r8a64320e 27 27 */ 28 28 29 /** 29 /** 30 30 * @addtogroup libieee80211 31 31 * @{ … … 43 43 #include <ops/ieee80211.h> 44 44 45 #define DEVICE_CATEGORY_IEEE80211 "ieee80211"45 #define DEVICE_CATEGORY_IEEE80211 "ieee80211" 46 46 47 47 struct ieee80211_dev; … … 49 49 50 50 /** Initial channel frequency. */ 51 #define IEEE80211_FIRST_FREQ 241251 #define IEEE80211_FIRST_FREQ 2412 52 52 53 53 /** Max supported channel frequency. */ 54 #define IEEE80211_MAX_FREQ 247255 56 /* Gap between IEEE80211 channels in MHz. */57 #define IEEE80211_CHANNEL_GAP 558 59 /* Max AMPDU factor. */60 #define IEEE80211_MAX_AMPDU_FACTOR 1361 62 /* Max authentication password length. */63 #define IEEE80211_MAX_PASSW_LEN 6454 #define IEEE80211_MAX_FREQ 2472 55 56 /** Gap between IEEE80211 channels in MHz. */ 57 #define IEEE80211_CHANNEL_GAP 5 58 59 /** Max AMPDU factor. */ 60 #define IEEE80211_MAX_AMPDU_FACTOR 13 61 62 /** Max authentication password length. */ 63 #define IEEE80211_MAX_PASSW_LEN 64 64 64 65 65 /** IEEE 802.11 b/g supported data rates in units of 500 kb/s. */ … … 97 97 /** IEEE 802.11 callback functions. */ 98 98 typedef struct { 99 /** 100 * Function that is called at device initalization. This should 101 * get device into running state. 102 * 103 * @param ieee80211_dev Pointer to IEEE 802.11 device structure. 104 * 105 * @return EOK if succeed, negative error code otherwise. 99 /** unction that is called at device initalization. 100 * 101 * This should get device into running state. 102 * 103 * @param ieee80211_dev Pointer to IEEE 802.11 device structure. 104 * 105 * @return EOK if succeed, negative error code otherwise. 106 * 106 107 */ 107 108 int (*start)(struct ieee80211_dev *); 108 109 109 /** 110 * Scan neighborhood for networks. There should be implemented 111 * scanning of whole bandwidth. Incoming results are processed by 112 * IEEE 802.11 framework itself. 113 * 114 * @param ieee80211_dev Pointer to IEEE 802.11 device structure. 115 * 116 * @return EOK if succeed, negative error code otherwise. 110 /** Scan neighborhood for networks. 111 * 112 * There should be implemented scanning of whole bandwidth. 113 * Incoming results are processed by IEEE 802.11 framework itself. 114 * 115 * @param ieee80211_dev Pointer to IEEE 802.11 device structure. 116 * 117 * @return EOK if succeed, negative error code otherwise. 118 * 117 119 */ 118 120 int (*scan)(struct ieee80211_dev *); 119 121 120 /** 121 * Handler for TX frames to be send from device. This should be 122 * called for every frame that has to be send from IEEE 802.11 device. 123 * 124 * @param ieee80211_dev Pointer to IEEE 802.11 device structure. 125 * @param buffer Buffer with data to be send. 126 * @param buffer_size Size of buffer. 127 * 128 * @return EOK if succeed, negative error code otherwise. 122 /** Handler for TX frames to be send from device. 123 * 124 * This should be called for every frame that has to be send 125 * from IEEE 802.11 device. 126 * 127 * @param ieee80211_dev Pointer to IEEE 802.11 device structure. 128 * @param buffer Buffer with data to be send. 129 * @param buffer_size Size of buffer. 130 * 131 * @return EOK if succeed, negative error code otherwise. 132 * 129 133 */ 130 134 int (*tx_handler)(struct ieee80211_dev *, void *, size_t); 131 135 132 /** 133 * Set device operating frequency to given value.134 * 135 * @param ieee80211_dev Pointer to IEEE 802.11 device structure.136 * @param freq New device operating frequency.137 * 138 * @return EOK if succeed, negative error code otherwise.136 /** Set device operating frequency to given value. 137 * 138 * @param ieee80211_dev Pointer to IEEE 802.11 device structure. 139 * @param freq New device operating frequency. 140 * 141 * @return EOK if succeed, negative error code otherwise. 142 * 139 143 */ 140 144 int (*set_freq)(struct ieee80211_dev *, uint16_t); 141 145 142 /** 143 * Callback to inform device about BSSID change.144 * 145 * @param ieee80211_dev Pointer to IEEE 802.11 device structure.146 * @param connected True if connected to new BSSID, otherwise false.147 * 148 * @return EOK if succeed, negative error code otherwise.146 /** Callback to inform device about BSSID change. 147 * 148 * @param ieee80211_dev Pointer to IEEE 802.11 device structure. 149 * @param connected True if connected to new BSSID, otherwise false. 150 * 151 * @return EOK if succeed, negative error code otherwise. 152 * 149 153 */ 150 154 int (*bssid_change)(struct ieee80211_dev *, bool); 151 155 152 /** 153 * Callback to setup encryption key in IEEE 802.11 device. 154 * 155 * @param ieee80211_dev Pointer to IEEE 802.11 device structure. 156 * @param key_conf Key config structure. 157 * @param insert True to insert this key to device, false to remove it. 158 * 159 * @return EOK if succeed, negative error code otherwise. 160 */ 161 int (*key_config)(struct ieee80211_dev *, 162 ieee80211_key_config_t *key_conf, bool); 156 /** Callback to setup encryption key in IEEE 802.11 device. 157 * 158 * @param ieee80211_dev Pointer to IEEE 802.11 device structure. 159 * @param key_conf Key config structure. 160 * @param insert True to insert this key to device, 161 * false to remove it. 162 * 163 * @return EOK if succeed, negative error code otherwise. 164 * 165 */ 166 int (*key_config)(struct ieee80211_dev *, 167 ieee80211_key_config_t *key_conf, bool); 163 168 } ieee80211_ops_t; 164 169 165 170 /* Initialization functions. */ 166 171 extern ieee80211_dev_t *ieee80211_device_create(void); 167 extern int ieee80211_device_init(ieee80211_dev_t *ieee80211_dev, 168 ddf_dev_t *ddf_dev); 169 extern int ieee80211_init(ieee80211_dev_t *ieee80211_dev, 170 ieee80211_ops_t *ieee80211_ops, ieee80211_iface_t *ieee80211_iface, 171 nic_iface_t *ieee80211_nic_iface, ddf_dev_ops_t *ieee80211_dev_ops); 172 extern int ieee80211_device_init(ieee80211_dev_t *, ddf_dev_t *); 173 extern int ieee80211_init(ieee80211_dev_t *, ieee80211_ops_t *, 174 ieee80211_iface_t *, nic_iface_t *, ddf_dev_ops_t *); 172 175 173 176 /* Getters & setters, queries & reports. */ 174 extern void *ieee80211_get_specific(ieee80211_dev_t *ieee80211_dev); 175 extern void ieee80211_set_specific(ieee80211_dev_t *ieee80211_dev, 176 void *specific); 177 extern ddf_dev_t *ieee80211_get_ddf_dev(ieee80211_dev_t* ieee80211_dev); 178 extern ieee80211_operating_mode_t 179 ieee80211_query_current_op_mode(ieee80211_dev_t *ieee80211_dev); 180 extern uint16_t ieee80211_query_current_freq(ieee80211_dev_t *ieee80211_dev); 181 extern void ieee80211_query_bssid(ieee80211_dev_t* ieee80211_dev, 182 nic_address_t *bssid); 183 extern bool ieee80211_is_connected(ieee80211_dev_t* ieee80211_dev); 184 extern void ieee80211_report_current_op_mode(ieee80211_dev_t *ieee80211_dev, 185 ieee80211_operating_mode_t op_mode); 186 extern void ieee80211_report_current_freq(ieee80211_dev_t *ieee80211_dev, 187 uint16_t freq); 188 extern uint16_t ieee80211_get_aid(ieee80211_dev_t* ieee80211_dev); 189 extern int ieee80211_get_pairwise_security(ieee80211_dev_t* ieee80211_dev); 190 extern bool ieee80211_is_ready(ieee80211_dev_t* ieee80211_dev); 191 extern void ieee80211_set_ready(ieee80211_dev_t* ieee80211_dev, bool ready); 192 extern bool ieee80211_query_using_key(ieee80211_dev_t* ieee80211_dev); 193 extern void ieee80211_setup_key_confirm(ieee80211_dev_t* ieee80211_dev, 194 bool using_key); 195 196 extern bool ieee80211_is_data_frame(uint16_t frame_ctrl); 197 extern bool ieee80211_is_mgmt_frame(uint16_t frame_ctrl); 198 extern bool ieee80211_is_beacon_frame(uint16_t frame_ctrl); 199 extern bool ieee80211_is_probe_response_frame(uint16_t frame_ctrl); 200 extern bool ieee80211_is_auth_frame(uint16_t frame_ctrl); 201 extern bool ieee80211_is_assoc_response_frame(uint16_t frame_ctrl); 177 extern void *ieee80211_get_specific(ieee80211_dev_t *); 178 extern void ieee80211_set_specific(ieee80211_dev_t *, void *); 179 extern ddf_dev_t *ieee80211_get_ddf_dev(ieee80211_dev_t *); 180 extern ieee80211_operating_mode_t 181 ieee80211_query_current_op_mode(ieee80211_dev_t *); 182 extern uint16_t ieee80211_query_current_freq(ieee80211_dev_t *); 183 extern void ieee80211_query_bssid(ieee80211_dev_t *, nic_address_t *); 184 extern bool ieee80211_is_connected(ieee80211_dev_t *); 185 extern void ieee80211_report_current_op_mode(ieee80211_dev_t *, 186 ieee80211_operating_mode_t); 187 extern void ieee80211_report_current_freq(ieee80211_dev_t *, uint16_t); 188 extern uint16_t ieee80211_get_aid(ieee80211_dev_t *); 189 extern int ieee80211_get_pairwise_security(ieee80211_dev_t *); 190 extern bool ieee80211_is_ready(ieee80211_dev_t *); 191 extern void ieee80211_set_ready(ieee80211_dev_t *, bool); 192 extern bool ieee80211_query_using_key(ieee80211_dev_t *); 193 extern void ieee80211_setup_key_confirm(ieee80211_dev_t *, bool); 194 195 extern bool ieee80211_is_data_frame(uint16_t); 196 extern bool ieee80211_is_mgmt_frame(uint16_t); 197 extern bool ieee80211_is_beacon_frame(uint16_t); 198 extern bool ieee80211_is_probe_response_frame(uint16_t); 199 extern bool ieee80211_is_auth_frame(uint16_t); 200 extern bool ieee80211_is_assoc_response_frame(uint16_t); 202 201 203 202 /* Worker functions. */ 204 extern int ieee80211_rx_handler(ieee80211_dev_t *ieee80211_dev, void *buffer, 205 size_t buffer_size); 206 207 #endif // LIB_IEEE80211_H 203 extern int ieee80211_rx_handler(ieee80211_dev_t *, void *, size_t); 204 205 #endif 208 206 209 207 /** @} -
uspace/lib/ieee80211/include/ieee80211_iface_impl.h
r09044cb r8a64320e 27 27 */ 28 28 29 /** 29 /** 30 30 * @addtogroup libieee80211 31 31 * @{ … … 33 33 34 34 /** @file ieee80211_iface_impl.h 35 * 35 * 36 36 * IEEE 802.11 default interface functions definition. 37 37 */ 38 38 39 39 #ifndef LIB_IEEE80211_IFACE_IMPL_H 40 #define 40 #define LIB_IEEE80211_IFACE_IMPL_H 41 41 42 42 #include <ddf/driver.h> 43 44 43 #include "ieee80211.h" 45 44 46 extern int ieee80211_get_scan_results_impl(ddf_fun_t *fun, 47 ieee80211_scan_results_t *results, bool now); 48 extern int ieee80211_connect_impl(ddf_fun_t *fun, char *ssid_start, 49 char *password); 50 extern int ieee80211_disconnect_impl(ddf_fun_t *fun); 45 extern int ieee80211_get_scan_results_impl(ddf_fun_t *, 46 ieee80211_scan_results_t *, bool); 47 extern int ieee80211_connect_impl(ddf_fun_t *, char *, char *); 48 extern int ieee80211_disconnect_impl(ddf_fun_t *); 51 49 52 #endif 50 #endif /* LIB_IEEE80211_IFACE_IMPL_H */ 53 51 54 52 /** @} -
uspace/lib/ieee80211/include/ieee80211_impl.h
r09044cb r8a64320e 27 27 */ 28 28 29 /** 29 /** 30 30 * @addtogroup libieee80211 31 31 * @{ … … 33 33 34 34 /** @file ieee80211_impl.h 35 * 35 * 36 36 * IEEE 802.11 default device functions definition. 37 37 */ 38 38 39 39 #ifndef LIB_IEEE80211_IMPL_H 40 #define 40 #define LIB_IEEE80211_IMPL_H 41 41 42 42 #include "ieee80211_private.h" 43 43 44 extern int ieee80211_start_impl(ieee80211_dev_t *ieee80211_dev); 45 extern int ieee80211_tx_handler_impl(ieee80211_dev_t *ieee80211_dev, 46 void *buffer, size_t buffer_size); 47 extern int ieee80211_set_freq_impl(ieee80211_dev_t *ieee80211_dev, 48 uint16_t freq); 49 extern int ieee80211_bssid_change_impl(ieee80211_dev_t *ieee80211_dev, 50 bool connected); 51 extern int ieee80211_key_config_impl(ieee80211_dev_t *ieee80211_dev, 52 ieee80211_key_config_t *key_conf, bool insert); 53 extern int ieee80211_scan_impl(ieee80211_dev_t *ieee80211_dev); 54 extern int ieee80211_prf(uint8_t *key, uint8_t *data, uint8_t *hash, 55 size_t output_size); 56 extern int ieee80211_rc4_key_unwrap(uint8_t *key, uint8_t *data, 57 size_t data_size, uint8_t *output); 58 extern int ieee80211_aes_key_unwrap(uint8_t *kek, uint8_t *data, 59 size_t data_size, uint8_t *output); 60 extern int ieee80211_michael_mic(uint8_t *key, uint8_t *data, size_t data_size, 61 uint8_t *mic); 62 extern uint16_t uint16le_from_seq(void *seq); 63 extern uint32_t uint32le_from_seq(void *seq); 64 extern uint16_t uint16be_from_seq(void *seq); 65 extern uint32_t uint32be_from_seq(void *seq); 66 extern int rnd_sequence(uint8_t *sequence, size_t length); 67 extern uint8_t *min_sequence(uint8_t *seq1, uint8_t *seq2, size_t size); 68 extern uint8_t *max_sequence(uint8_t *seq1, uint8_t *seq2, size_t size); 44 extern int ieee80211_start_impl(ieee80211_dev_t *); 45 extern int ieee80211_tx_handler_impl(ieee80211_dev_t *, void *, size_t); 46 extern int ieee80211_set_freq_impl(ieee80211_dev_t *, uint16_t); 47 extern int ieee80211_bssid_change_impl(ieee80211_dev_t *, bool); 48 extern int ieee80211_key_config_impl(ieee80211_dev_t *, 49 ieee80211_key_config_t *, bool); 50 extern int ieee80211_scan_impl(ieee80211_dev_t *); 51 extern int ieee80211_prf(uint8_t *, uint8_t *, uint8_t *, size_t); 52 extern int ieee80211_rc4_key_unwrap(uint8_t *, uint8_t *, size_t, uint8_t *); 53 extern int ieee80211_aes_key_unwrap(uint8_t *, uint8_t *, size_t, uint8_t *); 54 extern int ieee80211_michael_mic(uint8_t *, uint8_t *, size_t, uint8_t *); 55 extern uint16_t uint16le_from_seq(void *); 56 extern uint32_t uint32le_from_seq(void *); 57 extern uint16_t uint16be_from_seq(void *); 58 extern uint32_t uint32be_from_seq(void *); 59 extern int rnd_sequence(uint8_t *, size_t); 60 extern uint8_t *min_sequence(uint8_t *, uint8_t *, size_t); 61 extern uint8_t *max_sequence(uint8_t *, uint8_t *, size_t); 69 62 70 #endif 63 #endif /* LIB_IEEE80211_IMPL_H */ 71 64 72 65 /** @} -
uspace/lib/ieee80211/include/ieee80211_private.h
r09044cb r8a64320e 27 27 */ 28 28 29 /** 29 /** 30 30 * @addtogroup libieee80211 31 31 * @{ … … 33 33 34 34 /** @file ieee80211.h 35 * 35 * 36 36 * Internal IEEE 802.11 header that should not be included. 37 37 */ 38 38 39 #ifndef LIB NET_IEEE80211_PRIVATE_H40 #define LIB NET_IEEE80211_PRIVATE_H39 #ifndef LIB_IEEE80211_PRIVATE_H 40 #define LIB_IEEE80211_PRIVATE_H 41 41 42 42 #include <fibril_synch.h> … … 44 44 #include <ddf/driver.h> 45 45 #include <sys/types.h> 46 47 46 #include <ieee80211/ieee80211.h> 48 47 #include "ieee80211.h" 49 48 50 /* Timeout in us for waiting to authentication/association response. */ 51 #define AUTH_TIMEOUT 200000 52 53 /* Timeout in us for waiting to finish 4-way handshake process. */ 54 #define HANDSHAKE_TIMEOUT 5000000 55 56 /* Scanning period. */ 57 #define SCAN_PERIOD_USEC 35000000 58 59 /* Time to wait for beacons on channel. */ 60 #define SCAN_CHANNEL_WAIT_USEC 200000 61 62 /* Max time to keep scan result. */ 63 #define MAX_KEEP_SCAN_SPAN_SEC 120 64 65 /* Security bit in capability info field. */ 66 #define CAP_SECURITY 0x10 67 68 /* Protocol type used in EAPOL frames. */ 69 #define ETH_TYPE_PAE 0x888E 70 71 /* WPA OUI used in vendor specific IE. */ 72 #define WPA_OUI 0x0050F201 73 74 /* GTK OUI used in vendor specific IE. */ 75 #define GTK_OUI 0x000FAC01 76 77 /* Max PTK key length. */ 78 #define MAX_PTK_LENGTH 64 79 80 /* Max GTK key length. */ 81 #define MAX_GTK_LENGTH 64 82 83 /* KEK offset inside PTK. */ 84 #define KEK_OFFSET 16 85 86 /* TK offset inside PTK. */ 87 #define TK_OFFSET 32 88 89 /* Length of Michael MIC code used in TKIP security suite. */ 90 #define MIC_LENGTH 8 91 92 /* 93 * Length of data to be encrypted by PRF function: 94 * NONCE + SNONCE (2 * 32) + DEST_MAC + SOURCE_MAC (2 * ETH_ADDR) 49 /** Timeout in us for waiting to authentication/association response. */ 50 #define AUTH_TIMEOUT 200000 51 52 /** Timeout in us for waiting to finish 4-way handshake process. */ 53 #define HANDSHAKE_TIMEOUT 5000000 54 55 /** Scanning period. */ 56 #define SCAN_PERIOD_USEC 35000000 57 58 /** Time to wait for beacons on channel. */ 59 #define SCAN_CHANNEL_WAIT_USEC 200000 60 61 /** Max time to keep scan result. */ 62 #define MAX_KEEP_SCAN_SPAN_SEC 120 63 64 /** Security bit in capability info field. */ 65 #define CAP_SECURITY 0x10 66 67 /** Protocol type used in EAPOL frames. */ 68 #define ETH_TYPE_PAE 0x888e 69 70 /** WPA OUI used in vendor specific IE. */ 71 #define WPA_OUI 0x0050f201 72 73 /** GTK OUI used in vendor specific IE. */ 74 #define GTK_OUI 0x000fac01 75 76 /** Max PTK key length. */ 77 #define MAX_PTK_LENGTH 64 78 79 /** Max GTK key length. */ 80 #define MAX_GTK_LENGTH 64 81 82 /** KEK offset inside PTK. */ 83 #define KEK_OFFSET 16 84 85 /** TK offset inside PTK. */ 86 #define TK_OFFSET 32 87 88 /** Length of Michael MIC code used in TKIP security suite. */ 89 #define MIC_LENGTH 8 90 91 /** Length of data to be encrypted by PRF function. 92 * 93 * NONCE + SNONCE (2 * 32) + DEST_MAC + SOURCE_MAC (2 * ETH_ADDR) 94 * 95 95 */ 96 #define PRF_CRYPT_DATA_LENGTH 2*32 + 2*ETH_ADDR97 98 /* Special room in header reserved for encryption. */96 #define PRF_CRYPT_DATA_LENGTH (2 * 32 + 2 * ETH_ADDR) 97 98 /** Special room in header reserved for encryption. */ 99 99 typedef enum { 100 100 IEEE80211_TKIP_HEADER_LENGTH = 8, … … 184 184 /** IEEE 802.11 information element types. */ 185 185 typedef enum { 186 IEEE80211_SSID_IE = 0, 187 IEEE80211_RATES_IE = 1, 188 IEEE80211_CHANNEL_IE = 3, 189 IEEE80211_CHALLENGE_IE = 16, 190 IEEE80211_RSN_IE = 48, 191 IEEE80211_EXT_RATES_IE = 50, 192 IEEE80211_VENDOR_IE = 221 186 IEEE80211_SSID_IE = 0, /**< Target SSID. */ 187 IEEE80211_RATES_IE = 1, /**< Supported data rates. */ 188 IEEE80211_CHANNEL_IE = 3, /**< Current channel number. */ 189 IEEE80211_CHALLENGE_IE = 16, /**< Challenge text. */ 190 IEEE80211_RSN_IE = 48, /**< RSN. */ 191 IEEE80211_EXT_RATES_IE = 50, /**< Extended data rates. */ 192 IEEE80211_VENDOR_IE = 221 /**< Vendor specific IE. */ 193 193 } ieee80211_ie_type_t; 194 194 … … 249 249 ieee80211_bssid_info_t bssid_info; 250 250 251 /** 251 /** 252 252 * Flag indicating that data traffic is encrypted by HW key 253 * that is set up in device. 253 * that is set up in device. 254 254 */ 255 255 bool using_hw_key; … … 290 290 uint8_t dest_addr[ETH_ADDR]; 291 291 uint8_t src_addr[ETH_ADDR]; 292 uint16_t proto; 293 } __attribute__((packed)) __attribute__ ((aligned(2)))294 292 uint16_t proto; /**< Big Endian value! */ 293 } __attribute__((packed)) __attribute__((aligned(2))) 294 eth_header_t; 295 295 296 296 /** IEEE 802.11 management header structure. */ 297 297 typedef struct { 298 uint16_t frame_ctrl; 299 uint16_t duration_id; 298 uint16_t frame_ctrl; /**< Little Endian value! */ 299 uint16_t duration_id; /**< Little Endian value! */ 300 300 uint8_t dest_addr[ETH_ADDR]; 301 301 uint8_t src_addr[ETH_ADDR]; 302 302 uint8_t bssid[ETH_ADDR]; 303 uint16_t seq_ctrl; 304 } __attribute__((packed)) __attribute__ ((aligned(2)))305 303 uint16_t seq_ctrl; /**< Little Endian value! */ 304 } __attribute__((packed)) __attribute__((aligned(2))) 305 ieee80211_mgmt_header_t; 306 306 307 307 /** IEEE 802.11 data header structure. */ 308 308 typedef struct { 309 uint16_t frame_ctrl; 310 uint16_t duration_id; 309 uint16_t frame_ctrl; /**< Little Endian value! */ 310 uint16_t duration_id; /**< Little Endian value! */ 311 311 uint8_t address1[ETH_ADDR]; 312 312 uint8_t address2[ETH_ADDR]; 313 313 uint8_t address3[ETH_ADDR]; 314 uint16_t seq_ctrl; 315 } __attribute__((packed)) __attribute__ ((aligned(2)))316 314 uint16_t seq_ctrl; /**< Little Endian value! */ 315 } __attribute__((packed)) __attribute__((aligned(2))) 316 ieee80211_data_header_t; 317 317 318 318 /** IEEE 802.11 information element header. */ … … 320 320 uint8_t element_id; 321 321 uint8_t length; 322 } __attribute__((packed)) __attribute__ ((aligned(2)))323 322 } __attribute__((packed)) __attribute__((aligned(2))) 323 ieee80211_ie_header_t; 324 324 325 325 /** IEEE 802.11 authentication frame body. */ 326 326 typedef struct { 327 uint16_t auth_alg; 328 uint16_t auth_trans_no; 329 uint16_t status; 330 } __attribute__((packed)) __attribute__ ((aligned(2)))331 327 uint16_t auth_alg; /**< Little Endian value! */ 328 uint16_t auth_trans_no; /**< Little Endian value! */ 329 uint16_t status; /**< Little Endian value! */ 330 } __attribute__((packed)) __attribute__((aligned(2))) 331 ieee80211_auth_body_t; 332 332 333 333 /** IEEE 802.11 deauthentication frame body. */ 334 334 typedef struct { 335 uint16_t reason; 336 } __attribute__((packed)) __attribute__ ((aligned(2)))337 335 uint16_t reason; /**< Little Endian value! */ 336 } __attribute__((packed)) __attribute__((aligned(2))) 337 ieee80211_deauth_body_t; 338 338 339 339 /** IEEE 802.11 association request frame body. */ 340 340 typedef struct { 341 uint16_t capability; 342 uint16_t listen_interval; 343 } __attribute__((packed)) __attribute__ ((aligned(2)))344 341 uint16_t capability; /**< Little Endian value! */ 342 uint16_t listen_interval; /**< Little Endian value! */ 343 } __attribute__((packed)) __attribute__((aligned(2))) 344 ieee80211_assoc_req_body_t; 345 345 346 346 /** IEEE 802.11 association response frame body. */ 347 347 typedef struct { 348 uint16_t capability; 349 uint16_t status; 350 uint16_t aid; 351 } __attribute__((packed)) __attribute__ ((aligned(2)))352 348 uint16_t capability; /**< Little Endian value! */ 349 uint16_t status; /**< Little Endian value! */ 350 uint16_t aid; /**< Little Endian value! */ 351 } __attribute__((packed)) __attribute__((aligned(2))) 352 ieee80211_assoc_resp_body_t; 353 353 354 354 /** IEEE 802.11 beacon frame body start. */ 355 355 typedef struct { 356 356 uint8_t timestamp[8]; 357 uint16_t beacon_interval; 358 uint16_t capability; 359 } __attribute__((packed)) __attribute__ ((aligned(2)))360 357 uint16_t beacon_interval; /**< Little Endian value! */ 358 uint16_t capability; /**< Little Endian value! */ 359 } __attribute__((packed)) __attribute__((aligned(2))) 360 ieee80211_beacon_start_t; 361 361 362 362 /** IEEE 802.11i EAPOL-Key frame format. */ … … 364 364 uint8_t proto_version; 365 365 uint8_t packet_type; 366 uint16_t body_length; 366 uint16_t body_length; /**< Big Endian value! */ 367 367 uint8_t descriptor_type; 368 uint16_t key_info; 369 uint16_t key_length; 368 uint16_t key_info; /**< Big Endian value! */ 369 uint16_t key_length; /**< Big Endian value! */ 370 370 uint8_t key_replay_counter[8]; 371 371 uint8_t key_nonce[32]; … … 374 374 uint8_t reserved[8]; 375 375 uint8_t key_mic[16]; 376 uint16_t key_data_length; 376 uint16_t key_data_length; /**< Big Endian value! */ 377 377 } __attribute__((packed)) ieee80211_eapol_key_frame_t; 378 378 379 379 #define ieee80211_scan_result_list_foreach(results, iter) \ 380 381 382 static inline void ieee80211_scan_result_list_init(383 ieee80211_scan_result_list_t *results) 380 list_foreach((results).list, link, ieee80211_scan_result_link_t, (iter)) 381 382 static inline void 383 ieee80211_scan_result_list_init(ieee80211_scan_result_list_t *results) 384 384 { 385 385 list_initialize(&results->list); … … 387 387 } 388 388 389 static inline void ieee80211_scan_result_list_remove(390 391 389 static inline void 390 ieee80211_scan_result_list_remove(ieee80211_scan_result_list_t *results, 391 ieee80211_scan_result_link_t *result) 392 392 { 393 393 list_remove(&result->link); … … 395 395 } 396 396 397 static inline void ieee80211_scan_result_list_append(398 399 397 static inline void 398 ieee80211_scan_result_list_append(ieee80211_scan_result_list_t *results, 399 ieee80211_scan_result_link_t *result) 400 400 { 401 401 list_append(&result->link, &results->list); … … 403 403 } 404 404 405 extern bool ieee80211_is_fromds_frame(uint16_t frame_ctrl); 406 extern bool ieee80211_is_tods_frame(uint16_t frame_ctrl); 407 extern void ieee80211_set_connect_request(ieee80211_dev_t *ieee80211_dev); 408 extern bool ieee80211_pending_connect_request(ieee80211_dev_t *ieee80211_dev); 409 extern ieee80211_auth_phase_t ieee80211_get_auth_phase(ieee80211_dev_t 410 *ieee80211_dev); 411 extern void ieee80211_set_auth_phase(ieee80211_dev_t *ieee80211_dev, 412 ieee80211_auth_phase_t auth_phase); 413 extern int ieee80211_probe_request(ieee80211_dev_t *ieee80211_dev, 414 char *ssid); 415 extern int ieee80211_authenticate(ieee80211_dev_t *ieee80211_dev); 416 extern int ieee80211_associate(ieee80211_dev_t *ieee80211_dev, 417 char *password); 418 extern int ieee80211_deauthenticate(ieee80211_dev_t *ieee80211_dev); 419 420 #endif /* LIBN_IEEE80211_H */ 405 extern bool ieee80211_is_fromds_frame(uint16_t); 406 extern bool ieee80211_is_tods_frame(uint16_t); 407 extern void ieee80211_set_connect_request(ieee80211_dev_t *); 408 extern bool ieee80211_pending_connect_request(ieee80211_dev_t *); 409 extern ieee80211_auth_phase_t ieee80211_get_auth_phase(ieee80211_dev_t *); 410 extern void ieee80211_set_auth_phase(ieee80211_dev_t *, ieee80211_auth_phase_t); 411 extern int ieee80211_probe_request(ieee80211_dev_t *, char *); 412 extern int ieee80211_authenticate(ieee80211_dev_t *); 413 extern int ieee80211_associate(ieee80211_dev_t *, char *); 414 extern int ieee80211_deauthenticate(ieee80211_dev_t *); 415 416 #endif 421 417 422 418 /** @}
Note:
See TracChangeset
for help on using the changeset viewer.