nl80211: Dump scan results in debug log if association command fails

This may help in debugging why cfg80211 refused the association
command since the scan results should include information about all
pending authentication and association states.
This commit is contained in:
Jouni Malinen 2010-01-24 18:11:30 -08:00
parent b85e772449
commit 8856462d61

View file

@ -1654,15 +1654,9 @@ static void wpa_scan_results_free(struct wpa_scan_results *res)
} }
/**
* wpa_driver_nl80211_get_scan_results - Fetch the latest scan results
* @priv: Pointer to private wext data from wpa_driver_nl80211_init()
* Returns: Scan results on success, -1 on failure
*/
static struct wpa_scan_results * static struct wpa_scan_results *
wpa_driver_nl80211_get_scan_results(void *priv) nl80211_get_scan_results(struct wpa_driver_nl80211_data *drv)
{ {
struct wpa_driver_nl80211_data *drv = priv;
struct nl_msg *msg; struct nl_msg *msg;
struct wpa_scan_results *res; struct wpa_scan_results *res;
int ret; int ret;
@ -1683,7 +1677,6 @@ wpa_driver_nl80211_get_scan_results(void *priv)
if (ret == 0) { if (ret == 0) {
wpa_printf(MSG_DEBUG, "Received scan results (%lu BSSes)", wpa_printf(MSG_DEBUG, "Received scan results (%lu BSSes)",
(unsigned long) res->num); (unsigned long) res->num);
wpa_driver_nl80211_check_bss_status(drv, res);
return res; return res;
} }
wpa_printf(MSG_DEBUG, "nl80211: Scan result fetch failed: ret=%d " wpa_printf(MSG_DEBUG, "nl80211: Scan result fetch failed: ret=%d "
@ -1695,6 +1688,48 @@ nla_put_failure:
} }
/**
* wpa_driver_nl80211_get_scan_results - Fetch the latest scan results
* @priv: Pointer to private wext data from wpa_driver_nl80211_init()
* Returns: Scan results on success, -1 on failure
*/
static struct wpa_scan_results *
wpa_driver_nl80211_get_scan_results(void *priv)
{
struct wpa_driver_nl80211_data *drv = priv;
struct wpa_scan_results *res;
res = nl80211_get_scan_results(drv);
if (res)
wpa_driver_nl80211_check_bss_status(drv, res);
return res;
}
static void nl80211_dump_scan(struct wpa_driver_nl80211_data *drv)
{
struct wpa_scan_results *res;
size_t i;
res = nl80211_get_scan_results(drv);
if (res == NULL) {
wpa_printf(MSG_DEBUG, "nl80211: Failed to get scan results");
return;
}
wpa_printf(MSG_DEBUG, "nl80211: Scan result dump");
for (i = 0; i < res->num; i++) {
struct wpa_scan_res *r = res->res[i];
wpa_printf(MSG_DEBUG, "nl80211: %d/%d " MACSTR "%s%s",
(int) i, (int) res->num, MAC2STR(r->bssid),
r->flags & WPA_SCAN_AUTHENTICATED ? " [auth]" : "",
r->flags & WPA_SCAN_ASSOCIATED ? " [assoc]" : "");
}
wpa_scan_results_free(res);
}
static int wpa_driver_nl80211_set_key(const char *ifname, void *priv, static int wpa_driver_nl80211_set_key(const char *ifname, void *priv,
enum wpa_alg alg, const u8 *addr, enum wpa_alg alg, const u8 *addr,
int key_idx, int set_tx, int key_idx, int set_tx,
@ -3572,6 +3607,7 @@ static int wpa_driver_nl80211_associate(
if (ret) { if (ret) {
wpa_printf(MSG_DEBUG, "nl80211: MLME command failed: ret=%d " wpa_printf(MSG_DEBUG, "nl80211: MLME command failed: ret=%d "
"(%s)", ret, strerror(-ret)); "(%s)", ret, strerror(-ret));
nl80211_dump_scan(drv);
goto nla_put_failure; goto nla_put_failure;
} }
ret = 0; ret = 0;