123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- /*
- * Common driver-related functions
- * Copyright (c) 2003-2011, Jouni Malinen <j@w1.fi>
- *
- * This software may be distributed under the terms of the BSD license.
- * See README for more details.
- */
- #include "includes.h"
- #include "utils/common.h"
- #include "driver.h"
- void wpa_scan_results_free(struct wpa_scan_results *res)
- {
- size_t i;
- if (res == NULL)
- return;
- for (i = 0; i < res->num; i++)
- os_free(res->res[i]);
- os_free(res->res);
- os_free(res);
- }
- const char * event_to_string(enum wpa_event_type event)
- {
- #define E2S(n) case EVENT_ ## n: return #n
- switch (event) {
- E2S(ASSOC);
- E2S(DISASSOC);
- E2S(MICHAEL_MIC_FAILURE);
- E2S(SCAN_RESULTS);
- E2S(ASSOCINFO);
- E2S(INTERFACE_STATUS);
- E2S(PMKID_CANDIDATE);
- E2S(STKSTART);
- E2S(TDLS);
- E2S(FT_RESPONSE);
- E2S(IBSS_RSN_START);
- E2S(AUTH);
- E2S(DEAUTH);
- E2S(ASSOC_REJECT);
- E2S(AUTH_TIMED_OUT);
- E2S(ASSOC_TIMED_OUT);
- E2S(WPS_BUTTON_PUSHED);
- E2S(TX_STATUS);
- E2S(RX_FROM_UNKNOWN);
- E2S(RX_MGMT);
- E2S(REMAIN_ON_CHANNEL);
- E2S(CANCEL_REMAIN_ON_CHANNEL);
- E2S(MLME_RX);
- E2S(RX_PROBE_REQ);
- E2S(NEW_STA);
- E2S(EAPOL_RX);
- E2S(SIGNAL_CHANGE);
- E2S(INTERFACE_ENABLED);
- E2S(INTERFACE_DISABLED);
- E2S(CHANNEL_LIST_CHANGED);
- E2S(INTERFACE_UNAVAILABLE);
- E2S(BEST_CHANNEL);
- E2S(UNPROT_DEAUTH);
- E2S(UNPROT_DISASSOC);
- E2S(STATION_LOW_ACK);
- E2S(IBSS_PEER_LOST);
- E2S(DRIVER_GTK_REKEY);
- E2S(SCHED_SCAN_STOPPED);
- E2S(DRIVER_CLIENT_POLL_OK);
- E2S(EAPOL_TX_STATUS);
- E2S(CH_SWITCH);
- E2S(WNM);
- E2S(CONNECT_FAILED_REASON);
- E2S(DFS_RADAR_DETECTED);
- E2S(DFS_CAC_FINISHED);
- E2S(DFS_CAC_ABORTED);
- E2S(DFS_NOP_FINISHED);
- E2S(SURVEY);
- E2S(SCAN_STARTED);
- E2S(AVOID_FREQUENCIES);
- E2S(NEW_PEER_CANDIDATE);
- }
- return "UNKNOWN";
- #undef E2S
- }
- const char * channel_width_to_string(enum chan_width width)
- {
- switch (width) {
- case CHAN_WIDTH_20_NOHT:
- return "20 MHz (no HT)";
- case CHAN_WIDTH_20:
- return "20 MHz";
- case CHAN_WIDTH_40:
- return "40 MHz";
- case CHAN_WIDTH_80:
- return "80 MHz";
- case CHAN_WIDTH_80P80:
- return "80+80 MHz";
- case CHAN_WIDTH_160:
- return "160 MHz";
- default:
- return "unknown";
- }
- }
- int ht_supported(const struct hostapd_hw_modes *mode)
- {
- if (!(mode->flags & HOSTAPD_MODE_FLAG_HT_INFO_KNOWN)) {
- /*
- * The driver did not indicate whether it supports HT. Assume
- * it does to avoid connection issues.
- */
- return 1;
- }
- /*
- * IEEE Std 802.11n-2009 20.1.1:
- * An HT non-AP STA shall support all EQM rates for one spatial stream.
- */
- return mode->mcs_set[0] == 0xff;
- }
- int vht_supported(const struct hostapd_hw_modes *mode)
- {
- if (!(mode->flags & HOSTAPD_MODE_FLAG_VHT_INFO_KNOWN)) {
- /*
- * The driver did not indicate whether it supports VHT. Assume
- * it does to avoid connection issues.
- */
- return 1;
- }
- /*
- * A VHT non-AP STA shall support MCS 0-7 for one spatial stream.
- * TODO: Verify if this complies with the standard
- */
- return (mode->vht_mcs_set[0] & 0x3) != 3;
- }
|