Changeset 09044cb in mainline


Ignore:
Timestamp:
2015-04-22T09:42:36Z (9 years ago)
Author:
Jan Kolarik <kolarik@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
8a64320e
Parents:
cc575ef9
Message:

Fixed parsing RSN information, fixed inserting GTK of various index to device

Location:
uspace
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/nic/ar9271/ar9271.c

    rcc575ef9 r09044cb  
    463463                }
    464464               
    465                 if(key_conf->flags & IEEE80211_KEY_FLAG_TYPE_PAIRWISE) {
    466                         reg_ptr = AR9271_KEY_TABLE_STA;
    467                         mic_reg_ptr = AR9271_KEY_TABLE_MIC_STA;
    468                 } else {
    469                         reg_ptr = AR9271_KEY_TABLE_GRP;
    470                         mic_reg_ptr = AR9271_KEY_TABLE_MIC_GRP;
    471                 }
    472                
     465                uint8_t key_id =
     466                        (key_conf->flags & IEEE80211_KEY_FLAG_TYPE_PAIRWISE) ?
     467                                AR9271_STA_KEY_INDEX : key_conf->id;
     468               
     469                reg_ptr = AR9271_KEY_TABLE(key_id);
     470                mic_reg_ptr = AR9271_KEY_TABLE(key_id + 64);
    473471                data_start = (void *) key_conf->data;
    474472               
     
    558556                        ieee80211_setup_key_confirm(ieee80211_dev, true);
    559557        } else {
    560                 // TODO: Delete keys from device
     558                /* TODO: Delete keys from device */
    561559                ieee80211_setup_key_confirm(ieee80211_dev, false);
    562560        }
     
    591589                        (htc_tx_data_header_t *)
    592590                        (complete_buffer + sizeof(htc_frame_header_t));
    593                 /* TODO: Distinguish data type. */
    594591                data_header->data_type = HTC_DATA_NORMAL;
    595592                data_header->node_idx = 1;
    596593                data_header->vif_idx = 0;
    597                 /* TODO: There I should probably handle slot number. */
    598594                data_header->cookie = 0;
    599595               
     
    639635                mgmt_header->node_idx = 0;
    640636                mgmt_header->vif_idx = 0;
    641                 /* TODO: There I should probably handle slot number. */
    642637                mgmt_header->cookie = 0;
    643638                mgmt_header->keyix = 0xFF;
  • uspace/drv/nic/ar9271/ar9271.h

    rcc575ef9 r09044cb  
    136136               
    137137        /* Key related registers */
    138         AR9271_KEY_TABLE_GRP = 0x8820,
    139         AR9271_KEY_TABLE_STA = 0x8880,
    140         AR9271_KEY_TABLE_MIC_GRP = 0x9020,
    141         AR9271_KEY_TABLE_MIC_STA = 0x9080,
     138        AR9271_KEY_TABLE_BASE = 0x8800,
    142139        AR9271_KEY_TABLE_TYPE_WEP40 = 0x0,
    143140        AR9271_KEY_TABLE_TYPE_WEP104 = 0x1,
     
    186183        AR9271_FW_OFFSET = 0x903000,
    187184} ar9271_registers_t;
     185
     186/** Compute key table base position for key by its id. */
     187#define AR9271_KEY_TABLE(id) (AR9271_KEY_TABLE_BASE + (id)*32)
    188188
    189189/** AR9271 Requests */
  • uspace/lib/ieee80211/include/ieee80211_private.h

    rcc575ef9 r09044cb  
    174174typedef enum {
    175175        IEEE80211_EAPOL_KEY_KEYINFO_KEYTYPE = 0x0008,
     176        IEEE80211_EAPOL_KEY_KEYINFO_KEYID = 0x0010,
    176177        IEEE80211_EAPOL_KEY_KEYINFO_INSTALL = 0x0040,
    177178        IEEE80211_EAPOL_KEY_KEYINFO_ACK = 0x0080,
  • uspace/lib/ieee80211/src/ieee80211.c

    rcc575ef9 r09044cb  
    11811181                        (ieee80211_ie_header_t *) it;
    11821182                uint8_t *channel;
     1183                uint32_t oui;
    11831184                switch(ie_header->element_id) {
    11841185                        case IEEE80211_CHANNEL_IE:
     1186                                if(!ap_data)
     1187                                        break;
    11851188                                channel = (uint8_t *)
    11861189                                        (it + sizeof(ieee80211_ie_header_t));
     
    11971200                                break;
    11981201                        case IEEE80211_VENDOR_IE:
    1199                                 if(uint32be_from_seq(it +
    1200                                         sizeof(ieee80211_ie_header_t)) ==
    1201                                         WPA_OUI) {
     1202                                oui = uint32be_from_seq(it +
     1203                                        sizeof(ieee80211_ie_header_t));
     1204                                if(oui == WPA_OUI) {
     1205                                        if(!ap_data)
     1206                                                break;
    12021207                                        /* Prefering WPA2. */
    12031208                                        if(ap_data->scan_result.security.type ==
     
    12121217                                                sizeof(uint32_t));
    12131218                                        copy_auth_ie(ie_header, ap_data, it);
    1214                                 } else if(uint32be_from_seq(it +
    1215                                         sizeof(ieee80211_ie_header_t)) ==
    1216                                         GTK_OUI) {
     1219                                } else if(oui == GTK_OUI) {
    12171220                                        return it +
    12181221                                                sizeof(ieee80211_ie_header_t) +
    1219                                                 sizeof(uint32_t) + 2;
     1222                                                sizeof(uint32_t);
    12201223                                }
    12211224                }
     
    13901393        uint8_t *ptk = ieee80211_dev->bssid_info.ptk;
    13911394        uint8_t *gtk = ieee80211_dev->bssid_info.gtk;
     1395        uint8_t gtk_id = 1;
    13921396
    13931397        bool handshake_done = false;
     
    15031507                       
    15041508                        if(rc == EOK) {
    1505                                 uint8_t *key_ptr = old_wpa ? key_data :
     1509                                uint8_t *key_data_ptr = old_wpa ? key_data :
    15061510                                        ieee80211_process_ies(ieee80211_dev,
    15071511                                        NULL, key_data, key_data_length);
    15081512
    1509                                 if(key_ptr) {
     1513                                if(key_data_ptr) {
     1514                                        uint8_t *key_ptr;
     1515                                        if(old_wpa) {
     1516                                                key_ptr = key_data_ptr;
     1517                                        } else {
     1518                                                gtk_id = *key_data_ptr & 0x3;
     1519                                                key_ptr = key_data_ptr + 2;
     1520                                        }
     1521                                               
    15101522                                        memcpy(gtk, key_ptr, gtk_key_length);
    15111523                                        handshake_done = true;
     
    15881600        /* Insert Group key. */
    15891601        if(final_phase) {
     1602                key_config.id = gtk_id;
    15901603                key_config.suite = auth_data->security.group_alg;
    15911604                key_config.flags =
Note: See TracChangeset for help on using the changeset viewer.