int ieee802_11_rx_wnm_action_ap(struct hostapd_data *hapd, const struct ieee80211_mgmt *mgmt, size_t len) { u8 action; const u8 *payload; size_t plen; if (len < IEEE80211_HDRLEN + 2) return -1; payload = ((const u8 *) mgmt) + IEEE80211_HDRLEN + 1; action = *payload++; plen = len - IEEE80211_HDRLEN - 2; switch (action) { case WNM_BSS_TRANS_MGMT_QUERY: ieee802_11_rx_bss_trans_mgmt_query(hapd, mgmt->sa, payload, plen); return 0; case WNM_BSS_TRANS_MGMT_RESP: ieee802_11_rx_bss_trans_mgmt_resp(hapd, mgmt->sa, payload, plen); return 0; case WNM_SLEEP_MODE_REQ: ieee802_11_rx_wnmsleep_req(hapd, mgmt->sa, payload, plen); return 0; } wpa_printf(MSG_DEBUG, "WNM: Unsupported WNM Action %u from " MACSTR, action, MAC2STR(mgmt->sa)); return -1; }
int ieee802_11_rx_wnm_action_ap(struct hostapd_data *hapd, struct rx_action *action) { if (action->len < 1 || action->data == NULL) return -1; switch (action->data[0]) { case WNM_BSS_TRANS_MGMT_QUERY: wpa_printf(MSG_DEBUG, "WNM: BSS Transition Management Query"); /* TODO */ return -1; case WNM_BSS_TRANS_MGMT_RESP: wpa_printf(MSG_DEBUG, "WNM: BSS Transition Management " "Response"); /* TODO */ return -1; case WNM_SLEEP_MODE_REQ: ieee802_11_rx_wnmsleep_req(hapd, action->sa, action->data + 1, action->len - 1); return 0; } wpa_printf(MSG_DEBUG, "WNM: Unsupported WNM Action %u from " MACSTR, action->data[0], MAC2STR(action->sa)); return -1; }