|
@@ -59,8 +59,8 @@ int hostapd_notif_assoc(struct hostapd_data *hapd, const u8 *addr,
|
|
|
* running, so better make sure we stop processing such an
|
|
|
* event here.
|
|
|
*/
|
|
|
- wpa_printf(MSG_DEBUG, "hostapd_notif_assoc: Skip event with "
|
|
|
- "no address");
|
|
|
+ wpa_printf(MSG_DEBUG,
|
|
|
+ "hostapd_notif_assoc: Skip event with no address");
|
|
|
return -1;
|
|
|
}
|
|
|
random_add_randomness(addr, ETH_ALEN);
|
|
@@ -90,8 +90,8 @@ int hostapd_notif_assoc(struct hostapd_data *hapd, const u8 *addr,
|
|
|
} else {
|
|
|
ie = NULL;
|
|
|
ielen = 0;
|
|
|
- wpa_printf(MSG_DEBUG, "STA did not include WPS/RSN/WPA IE in "
|
|
|
- "(Re)AssocReq");
|
|
|
+ wpa_printf(MSG_DEBUG,
|
|
|
+ "STA did not include WPS/RSN/WPA IE in (Re)AssocReq");
|
|
|
}
|
|
|
|
|
|
sta = ap_get_sta(hapd, addr);
|
|
@@ -168,9 +168,8 @@ int hostapd_notif_assoc(struct hostapd_data *hapd, const u8 *addr,
|
|
|
if (ie == NULL || ielen == 0) {
|
|
|
#ifdef CONFIG_WPS
|
|
|
if (hapd->conf->wps_state) {
|
|
|
- wpa_printf(MSG_DEBUG, "STA did not include "
|
|
|
- "WPA/RSN IE in (Re)Association "
|
|
|
- "Request - possible WPS use");
|
|
|
+ wpa_printf(MSG_DEBUG,
|
|
|
+ "STA did not include WPA/RSN IE in (Re)Association Request - possible WPS use");
|
|
|
sta->flags |= WLAN_STA_MAYBE_WPS;
|
|
|
goto skip_wpa_check;
|
|
|
}
|
|
@@ -183,13 +182,14 @@ int hostapd_notif_assoc(struct hostapd_data *hapd, const u8 *addr,
|
|
|
if (hapd->conf->wps_state && ie[0] == 0xdd && ie[1] >= 4 &&
|
|
|
os_memcmp(ie + 2, "\x00\x50\xf2\x04", 4) == 0) {
|
|
|
struct wpabuf *wps;
|
|
|
+
|
|
|
sta->flags |= WLAN_STA_WPS;
|
|
|
wps = ieee802_11_vendor_ie_concat(ie, ielen,
|
|
|
WPS_IE_VENDOR_TYPE);
|
|
|
if (wps) {
|
|
|
if (wps_is_20(wps)) {
|
|
|
- wpa_printf(MSG_DEBUG, "WPS: STA "
|
|
|
- "supports WPS 2.0");
|
|
|
+ wpa_printf(MSG_DEBUG,
|
|
|
+ "WPS: STA supports WPS 2.0");
|
|
|
sta->flags |= WLAN_STA_WPS2;
|
|
|
}
|
|
|
wpabuf_free(wps);
|
|
@@ -203,16 +203,17 @@ int hostapd_notif_assoc(struct hostapd_data *hapd, const u8 *addr,
|
|
|
sta->addr,
|
|
|
p2p_dev_addr);
|
|
|
if (sta->wpa_sm == NULL) {
|
|
|
- wpa_printf(MSG_ERROR, "Failed to initialize WPA state "
|
|
|
- "machine");
|
|
|
+ wpa_printf(MSG_ERROR,
|
|
|
+ "Failed to initialize WPA state machine");
|
|
|
return -1;
|
|
|
}
|
|
|
res = wpa_validate_wpa_ie(hapd->wpa_auth, sta->wpa_sm,
|
|
|
ie, ielen,
|
|
|
elems.mdie, elems.mdie_len);
|
|
|
if (res != WPA_IE_OK) {
|
|
|
- wpa_printf(MSG_DEBUG, "WPA/RSN information element "
|
|
|
- "rejected? (res %u)", res);
|
|
|
+ wpa_printf(MSG_DEBUG,
|
|
|
+ "WPA/RSN information element rejected? (res %u)",
|
|
|
+ res);
|
|
|
wpa_hexdump(MSG_DEBUG, "IE", ie, ielen);
|
|
|
if (res == WPA_INVALID_GROUP) {
|
|
|
reason = WLAN_REASON_GROUP_CIPHER_NOT_VALID;
|
|
@@ -290,6 +291,7 @@ int hostapd_notif_assoc(struct hostapd_data *hapd, const u8 *addr,
|
|
|
} else if (hapd->conf->wps_state) {
|
|
|
#ifdef CONFIG_WPS
|
|
|
struct wpabuf *wps;
|
|
|
+
|
|
|
if (req_ies)
|
|
|
wps = ieee802_11_vendor_ie_concat(req_ies, req_ies_len,
|
|
|
WPS_IE_VENDOR_TYPE);
|
|
@@ -306,8 +308,8 @@ int hostapd_notif_assoc(struct hostapd_data *hapd, const u8 *addr,
|
|
|
if (wps) {
|
|
|
sta->flags |= WLAN_STA_WPS;
|
|
|
if (wps_is_20(wps)) {
|
|
|
- wpa_printf(MSG_DEBUG, "WPS: STA supports "
|
|
|
- "WPS 2.0");
|
|
|
+ wpa_printf(MSG_DEBUG,
|
|
|
+ "WPS: STA supports WPS 2.0");
|
|
|
sta->flags |= WLAN_STA_WPS2;
|
|
|
}
|
|
|
} else
|
|
@@ -329,8 +331,8 @@ int hostapd_notif_assoc(struct hostapd_data *hapd, const u8 *addr,
|
|
|
sta->wpa_sm = wpa_auth_sta_init(hapd->wpa_auth,
|
|
|
sta->addr, NULL);
|
|
|
if (sta->wpa_sm == NULL) {
|
|
|
- wpa_printf(MSG_WARNING, "Failed to initialize WPA "
|
|
|
- "state machine");
|
|
|
+ wpa_printf(MSG_WARNING,
|
|
|
+ "Failed to initialize WPA state machine");
|
|
|
return WLAN_STATUS_UNSPECIFIED_FAILURE;
|
|
|
}
|
|
|
if (wpa_validate_osen(hapd->wpa_auth, sta->wpa_sm,
|
|
@@ -402,8 +404,8 @@ void hostapd_notif_disassoc(struct hostapd_data *hapd, const u8 *addr)
|
|
|
* was running, so better make sure we stop processing such an
|
|
|
* event here.
|
|
|
*/
|
|
|
- wpa_printf(MSG_DEBUG, "hostapd_notif_disassoc: Skip event "
|
|
|
- "with no address");
|
|
|
+ wpa_printf(MSG_DEBUG,
|
|
|
+ "hostapd_notif_disassoc: Skip event with no address");
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -412,8 +414,9 @@ void hostapd_notif_disassoc(struct hostapd_data *hapd, const u8 *addr)
|
|
|
|
|
|
sta = ap_get_sta(hapd, addr);
|
|
|
if (sta == NULL) {
|
|
|
- wpa_printf(MSG_DEBUG, "Disassociation notification for "
|
|
|
- "unknown STA " MACSTR, MAC2STR(addr));
|
|
|
+ wpa_printf(MSG_DEBUG,
|
|
|
+ "Disassociation notification for unknown STA "
|
|
|
+ MACSTR, MAC2STR(addr));
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -434,8 +437,8 @@ void hostapd_event_sta_low_ack(struct hostapd_data *hapd, const u8 *addr)
|
|
|
return;
|
|
|
|
|
|
hostapd_logger(hapd, addr, HOSTAPD_MODULE_IEEE80211,
|
|
|
- HOSTAPD_LEVEL_INFO, "disconnected due to excessive "
|
|
|
- "missing ACKs");
|
|
|
+ HOSTAPD_LEVEL_INFO,
|
|
|
+ "disconnected due to excessive missing ACKs");
|
|
|
hostapd_drv_sta_disassoc(hapd, addr, WLAN_REASON_DISASSOC_LOW_ACK);
|
|
|
if (sta)
|
|
|
ap_sta_disassociate(hapd, sta, WLAN_REASON_DISASSOC_LOW_ACK);
|
|
@@ -459,8 +462,8 @@ void hostapd_event_ch_switch(struct hostapd_data *hapd, int freq, int ht,
|
|
|
channel = hostapd_hw_get_channel(hapd, freq);
|
|
|
if (!channel) {
|
|
|
hostapd_logger(hapd, NULL, HOSTAPD_MODULE_IEEE80211,
|
|
|
- HOSTAPD_LEVEL_WARNING, "driver switched to "
|
|
|
- "bad channel!");
|
|
|
+ HOSTAPD_LEVEL_WARNING,
|
|
|
+ "driver switched to bad channel!");
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -697,8 +700,8 @@ static void hostapd_notif_auth(struct hostapd_data *hapd,
|
|
|
sta->wpa_sm = wpa_auth_sta_init(hapd->wpa_auth,
|
|
|
sta->addr, NULL);
|
|
|
if (sta->wpa_sm == NULL) {
|
|
|
- wpa_printf(MSG_DEBUG, "FT: Failed to initialize WPA "
|
|
|
- "state machine");
|
|
|
+ wpa_printf(MSG_DEBUG,
|
|
|
+ "FT: Failed to initialize WPA state machine");
|
|
|
status = WLAN_STATUS_UNSPECIFIED_FAILURE;
|
|
|
goto fail;
|
|
|
}
|
|
@@ -733,7 +736,7 @@ static void hostapd_action_rx(struct hostapd_data *hapd,
|
|
|
if (WLAN_FC_GET_STYPE(fc) != WLAN_FC_STYPE_ACTION)
|
|
|
return; /* handled by the driver */
|
|
|
|
|
|
- wpa_printf(MSG_DEBUG, "RX_ACTION cat %d action plen %d",
|
|
|
+ wpa_printf(MSG_DEBUG, "RX_ACTION cat %d action plen %d",
|
|
|
mgmt->u.action.category, (int) plen);
|
|
|
|
|
|
sta = ap_get_sta(hapd, mgmt->sa);
|
|
@@ -744,6 +747,7 @@ static void hostapd_action_rx(struct hostapd_data *hapd,
|
|
|
#ifdef CONFIG_IEEE80211R
|
|
|
if (mgmt->u.action.category == WLAN_ACTION_FT) {
|
|
|
const u8 *payload = drv_mgmt->frame + 24 + 1;
|
|
|
+
|
|
|
wpa_ft_action_rx(sta->wpa_sm, payload, plen);
|
|
|
}
|
|
|
#endif /* CONFIG_IEEE80211R */
|
|
@@ -818,6 +822,7 @@ static int hostapd_mgmt_rx(struct hostapd_data *hapd, struct rx_mgmt *rx_mgmt)
|
|
|
if (hapd->ext_mgmt_frame_handling) {
|
|
|
size_t hex_len = 2 * rx_mgmt->frame_len + 1;
|
|
|
char *hex = os_malloc(hex_len);
|
|
|
+
|
|
|
if (hex) {
|
|
|
wpa_snprintf_hex(hex, hex_len, rx_mgmt->frame,
|
|
|
rx_mgmt->frame_len);
|
|
@@ -835,8 +840,7 @@ static int hostapd_mgmt_rx(struct hostapd_data *hapd, struct rx_mgmt *rx_mgmt)
|
|
|
|
|
|
hapd = get_hapd_bssid(iface, bssid);
|
|
|
if (hapd == NULL) {
|
|
|
- u16 fc;
|
|
|
- fc = le_to_host16(hdr->frame_control);
|
|
|
+ u16 fc = le_to_host16(hdr->frame_control);
|
|
|
|
|
|
/*
|
|
|
* Drop frames to unknown BSSIDs except for Beacon frames which
|
|
@@ -855,6 +859,7 @@ static int hostapd_mgmt_rx(struct hostapd_data *hapd, struct rx_mgmt *rx_mgmt)
|
|
|
|
|
|
if (hapd == HAPD_BROADCAST) {
|
|
|
size_t i;
|
|
|
+
|
|
|
ret = 0;
|
|
|
for (i = 0; i < iface->num_bss; i++) {
|
|
|
/* if bss is set, driver will call this function for
|
|
@@ -881,6 +886,7 @@ static void hostapd_mgmt_tx_cb(struct hostapd_data *hapd, const u8 *buf,
|
|
|
size_t len, u16 stype, int ok)
|
|
|
{
|
|
|
struct ieee80211_hdr *hdr;
|
|
|
+
|
|
|
hdr = (struct ieee80211_hdr *) buf;
|
|
|
hapd = get_hapd_bssid(hapd->iface, get_hdr_bssid(hdr, len));
|
|
|
if (hapd == NULL || hapd == HAPD_BROADCAST)
|
|
@@ -894,6 +900,7 @@ static void hostapd_mgmt_tx_cb(struct hostapd_data *hapd, const u8 *buf,
|
|
|
static int hostapd_event_new_sta(struct hostapd_data *hapd, const u8 *addr)
|
|
|
{
|
|
|
struct sta_info *sta = ap_get_sta(hapd, addr);
|
|
|
+
|
|
|
if (sta)
|
|
|
return 0;
|
|
|
|
|
@@ -920,11 +927,10 @@ static void hostapd_event_eapol_rx(struct hostapd_data *hapd, const u8 *src,
|
|
|
size_t j;
|
|
|
|
|
|
for (j = 0; j < iface->num_bss; j++) {
|
|
|
- if ((sta = ap_get_sta(iface->bss[j], src))) {
|
|
|
- if (sta->flags & WLAN_STA_ASSOC) {
|
|
|
- hapd = iface->bss[j];
|
|
|
- break;
|
|
|
- }
|
|
|
+ sta = ap_get_sta(iface->bss[j], src);
|
|
|
+ if (sta && sta->flags & WLAN_STA_ASSOC) {
|
|
|
+ hapd = iface->bss[j];
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -984,7 +990,8 @@ static void hostapd_single_channel_get_survey(struct hostapd_iface *iface,
|
|
|
if (!chan || chan->flag & HOSTAPD_CHAN_DISABLED)
|
|
|
return;
|
|
|
|
|
|
- wpa_printf(MSG_DEBUG, "Single Channel Survey: (freq=%d channel_time=%ld channel_time_busy=%ld)",
|
|
|
+ wpa_printf(MSG_DEBUG,
|
|
|
+ "Single Channel Survey: (freq=%d channel_time=%ld channel_time_busy=%ld)",
|
|
|
survey->freq,
|
|
|
(unsigned long int) survey->channel_time,
|
|
|
(unsigned long int) survey->channel_time_busy);
|
|
@@ -1118,6 +1125,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
|
|
|
data->rx_mgmt.frame_len >= 24) {
|
|
|
const struct ieee80211_hdr *hdr;
|
|
|
u16 fc;
|
|
|
+
|
|
|
hdr = (const struct ieee80211_hdr *) data->rx_mgmt.frame;
|
|
|
fc = le_to_host16(hdr->frame_control);
|
|
|
if (WLAN_FC_GET_TYPE(fc) == WLAN_FC_TYPE_MGMT &&
|