Changeset 9e5a51c in mainline for uspace/lib/net/include/ieee80211.h


Ignore:
Timestamp:
2015-03-08T22:20:34Z (9 years ago)
Author:
Jan Kolarik <kolarik@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
864762a
Parents:
4cb0148
Message:

Fixed PLL initialization value that blocked communication with external devices. Started implementing IEEE802.11 scanning and authentication functions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/net/include/ieee80211.h

    r4cb0148 r9e5a51c  
    5252#define IEEE80211_CHANNEL_GAP 5
    5353
    54 #define IEEE80211_FRAME_CTRL_FRAME_TYPE 0x000C
    55 #define IEEE80211_FRAME_CTRL_DATA_FRAME 0x0008
    56 
    5754struct ieee80211_dev;
    5855
     
    6562} ieee80211_operating_mode_t;
    6663
     64/** IEEE 802.11 frame types. */
     65typedef enum {
     66        IEEE80211_MGMT_FRAME = 0x0,
     67        IEEE80211_CTRL_FRAME = 0x4,
     68        IEEE80211_DATA_FRAME = 0x8,
     69        IEEE80211_EXT_FRAME = 0xC
     70} ieee80211_frame_type_t;
     71
     72/** IEEE 802.11 frame subtypes. */
     73typedef enum {
     74        IEEE80211_MGMT_ASSOC_REQ_FRAME = 0x00,
     75        IEEE80211_MGMT_ASSOC_RESP_FRAME = 0x10,
     76        IEEE80211_MGMT_REASSOC_REQ_FRAME = 0x20,
     77        IEEE80211_MGMT_REASSOC_RESP_FRAME = 0x30,
     78        IEEE80211_MGMT_PROBE_REQ_FRAME = 0x40,
     79        IEEE80211_MGMT_PROBE_RESP_FRAME = 0x50,
     80        IEEE80211_MGMT_BEACON_FRAME = 0x80,
     81        IEEE80211_MGMT_DIASSOC_FRAME = 0xA0,
     82        IEEE80211_MGMT_AUTH_FRAME = 0xB0,
     83        IEEE80211_MGMT_DEAUTH_FRAME = 0xC0,
     84} ieee80211_frame_subtype_t;
     85
     86/** IEEE 802.11 information element types. */
     87typedef enum {
     88        IEEE80211_SSID_IE = 0,          /**< Target SSID. */
     89        IEEE80211_RATES_IE = 1,         /**< Supported data rates. */
     90        IEEE80211_CHANNEL_IE = 3,       /**< Current channel number. */
     91        IEEE80211_EXT_RATES_IE = 50     /**< Extended data rates. */
     92} ieee80211_ie_type_t;
     93
    6794/** IEEE 802.11 functions. */
    6895typedef struct {
     
    7097        int (*scan)(struct ieee80211_dev *);
    7198        int (*tx_handler)(struct ieee80211_dev *, void *, size_t);
     99        int (*set_freq)(struct ieee80211_dev *, uint16_t);
    72100} ieee80211_ops_t;
    73101
     
    89117        ieee80211_operating_mode_t current_op_mode;
    90118       
     119        /** BSSIDs we listen to. */
     120        uint8_t bssid_mask[ETH_ADDR];
     121       
    91122        /* TODO: Probably to be removed later - nic.open function is now
    92123         * executed multiple times, have to find out reason and fix it.
     
    96127} ieee80211_dev_t;
    97128
    98 /** IEEE 802.11 header structure. */
     129/** IEEE 802.11 management header structure. */
     130typedef struct {
     131        uint16_t frame_ctrl;            /**< Little Endian value! */
     132        uint16_t duration_id;           /**< Little Endian value! */
     133        uint8_t dest_addr[ETH_ADDR];
     134        uint8_t src_addr[ETH_ADDR];
     135        uint8_t bssid[ETH_ADDR];
     136        uint16_t seq_ctrl;              /**< Little Endian value! */
     137} __attribute__((packed)) __attribute__ ((aligned(2))) ieee80211_mgmt_header_t;
     138
     139/** IEEE 802.11 data header structure. */
    99140typedef struct {
    100141        uint16_t frame_ctrl;            /**< Little Endian value! */
     
    105146        uint16_t seq_ctrl;              /**< Little Endian value! */
    106147        uint8_t address4[ETH_ADDR];
    107 } __attribute__((packed)) __attribute__ ((aligned(2))) ieee80211_header_t;
     148        uint16_t qos_ctrl;              /**< Little Endian value! */
     149} __attribute__((packed)) __attribute__ ((aligned(2))) ieee80211_data_header_t;
    108150
    109 extern bool ieee80211_is_data_frame(ieee80211_header_t *header);
     151/** IEEE 802.11 information element header. */
     152typedef struct {
     153        uint8_t element_id;
     154        uint8_t length;
     155} __attribute__((packed)) __attribute__ ((aligned(2))) ieee80211_ie_header_t;
     156
     157/** IEEE 802.11 authentication frame body. */
     158typedef struct {
     159        uint16_t auth_alg;              /**< Little Endian value! */
     160        uint16_t auth_trans_no;         /**< Little Endian value! */
     161        uint16_t status;                /**< Little Endian value! */
     162} __attribute__((packed)) __attribute__ ((aligned(2))) ieee80211_auth_body_t;
     163
     164typedef struct {
     165        uint8_t bssid[ETH_ADDR];
     166        uint16_t auth_alg;
     167} __attribute__((packed)) __attribute__ ((aligned(2))) ieee80211_auth_data_t;
     168
    110169extern int ieee80211_device_init(ieee80211_dev_t *ieee80211_dev,
    111170        void *driver_data, ddf_dev_t *ddf_dev);
    112171extern int ieee80211_init(ieee80211_dev_t *ieee80211_dev,
    113172        ieee80211_ops_t *ieee80211_ops);
     173extern int ieee80211_probe_request(ieee80211_dev_t *ieee80211_dev);
     174extern int ieee80211_probe_auth(ieee80211_dev_t *ieee80211_dev);
    114175
    115176#endif /* LIBNET_IEEE80211_H */
Note: See TracChangeset for help on using the changeset viewer.