18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * hostapd / IEEE 802.11 MLME 38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright 2003-2006, Jouni Malinen <j@w1.fi> 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright 2003-2004, Instant802 Networks, Inc. 58d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright 2005-2006, Devicescape Software, Inc. 68d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 7c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license. 8c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details. 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "utils/includes.h" 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "utils/common.h" 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "common/ieee802_11_defs.h" 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "ieee802_11.h" 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "wpa_auth.h" 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "sta_info.h" 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "ap_mlme.h" 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef CONFIG_NO_HOSTAPD_LOGGER 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic const char * mlme_auth_alg_str(int alg) 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt switch (alg) { 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case WLAN_AUTH_OPEN: 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return "OPEN_SYSTEM"; 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case WLAN_AUTH_SHARED_KEY: 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return "SHARED_KEY"; 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt case WLAN_AUTH_FT: 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return "FT"; 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return "unknown"; 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_NO_HOSTAPD_LOGGER */ 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * mlme_authenticate_indication - Report the establishment of an authentication 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * relationship with a specific peer MAC entity 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @hapd: BSS data 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @sta: peer STA data 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * MLME calls this function as a result of the establishment of an 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * authentication relationship with a specific peer MAC entity that 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * resulted from an authentication procedure that was initiated by 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * that specific peer MAC entity. 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * PeerSTAAddress = sta->addr 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * AuthenticationType = sta->auth_alg (WLAN_AUTH_OPEN / WLAN_AUTH_SHARED_KEY) 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid mlme_authenticate_indication(struct hostapd_data *hapd, 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct sta_info *sta) 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_MLME, 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt HOSTAPD_LEVEL_DEBUG, 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "MLME-AUTHENTICATE.indication(" MACSTR ", %s)", 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt MAC2STR(sta->addr), mlme_auth_alg_str(sta->auth_alg)); 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (sta->auth_alg != WLAN_AUTH_FT && !(sta->flags & WLAN_STA_MFP)) 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt mlme_deletekeys_request(hapd, sta); 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * mlme_deauthenticate_indication - Report the invalidation of an 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * authentication relationship with a specific peer MAC entity 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @hapd: BSS data 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @sta: Peer STA data 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @reason_code: ReasonCode from Deauthentication frame 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * MLME calls this function as a result of the invalidation of an 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * authentication relationship with a specific peer MAC entity. 738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * PeerSTAAddress = sta->addr 758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid mlme_deauthenticate_indication(struct hostapd_data *hapd, 778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct sta_info *sta, u16 reason_code) 788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_MLME, 808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt HOSTAPD_LEVEL_DEBUG, 818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "MLME-DEAUTHENTICATE.indication(" MACSTR ", %d)", 828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt MAC2STR(sta->addr), reason_code); 838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt mlme_deletekeys_request(hapd, sta); 848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * mlme_associate_indication - Report the establishment of an association with 898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * a specific peer MAC entity 908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @hapd: BSS data 918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @sta: peer STA data 928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * MLME calls this function as a result of the establishment of an 948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * association with a specific peer MAC entity that resulted from an 958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * association procedure that was initiated by that specific peer MAC entity. 968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * PeerSTAAddress = sta->addr 988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid mlme_associate_indication(struct hostapd_data *hapd, struct sta_info *sta) 1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_MLME, 1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt HOSTAPD_LEVEL_DEBUG, 1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "MLME-ASSOCIATE.indication(" MACSTR ")", 1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt MAC2STR(sta->addr)); 1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (sta->auth_alg != WLAN_AUTH_FT) 1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt mlme_deletekeys_request(hapd, sta); 1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * mlme_reassociate_indication - Report the establishment of an reassociation 1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * with a specific peer MAC entity 1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @hapd: BSS data 1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @sta: peer STA data 1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * MLME calls this function as a result of the establishment of an 1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * reassociation with a specific peer MAC entity that resulted from a 1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * reassociation procedure that was initiated by that specific peer MAC entity. 1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * PeerSTAAddress = sta->addr 1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * sta->previous_ap contains the "Current AP" information from ReassocReq. 1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid mlme_reassociate_indication(struct hostapd_data *hapd, 1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct sta_info *sta) 1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_MLME, 1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt HOSTAPD_LEVEL_DEBUG, 1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "MLME-REASSOCIATE.indication(" MACSTR ")", 1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt MAC2STR(sta->addr)); 1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (sta->auth_alg != WLAN_AUTH_FT) 1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt mlme_deletekeys_request(hapd, sta); 1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * mlme_disassociate_indication - Report disassociation with a specific peer 1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * MAC entity 1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @hapd: BSS data 1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @sta: Peer STA data 1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @reason_code: ReasonCode from Disassociation frame 1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * MLME calls this function as a result of the invalidation of an association 1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * relationship with a specific peer MAC entity. 1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * PeerSTAAddress = sta->addr 1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid mlme_disassociate_indication(struct hostapd_data *hapd, 1498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct sta_info *sta, u16 reason_code) 1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_MLME, 1528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt HOSTAPD_LEVEL_DEBUG, 1538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "MLME-DISASSOCIATE.indication(" MACSTR ", %d)", 1548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt MAC2STR(sta->addr), reason_code); 1558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt mlme_deletekeys_request(hapd, sta); 1568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid mlme_michaelmicfailure_indication(struct hostapd_data *hapd, 1608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr) 1618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt hostapd_logger(hapd, addr, HOSTAPD_MODULE_MLME, 1638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt HOSTAPD_LEVEL_DEBUG, 1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "MLME-MichaelMICFailure.indication(" MACSTR ")", 1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt MAC2STR(addr)); 1668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid mlme_deletekeys_request(struct hostapd_data *hapd, struct sta_info *sta) 1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_MLME, 1728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt HOSTAPD_LEVEL_DEBUG, 1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "MLME-DELETEKEYS.request(" MACSTR ")", 1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt MAC2STR(sta->addr)); 1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (sta->wpa_sm) 1778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_remove_ptk(sta->wpa_sm); 1788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 179