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;
}
Пример #2
0
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;
}