wil6210: Derive IE's for AP
When starting secure AP, in some cases wpa_s provides probe template but not probe/assoc IE's. In this case, derive missing IE's from probe. Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
f27dbf78c6
commit
92646c9f1f
1 changed files with 27 additions and 0 deletions
|
@ -402,6 +402,30 @@ static int wil_cfg80211_set_default_key(struct wiphy *wiphy,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int wil_fix_bcon(struct wil6210_priv *wil,
|
||||||
|
struct cfg80211_beacon_data *bcon)
|
||||||
|
{
|
||||||
|
struct ieee80211_mgmt *f = (struct ieee80211_mgmt *)bcon->probe_resp;
|
||||||
|
size_t hlen = offsetof(struct ieee80211_mgmt, u.probe_resp.variable);
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
|
if (bcon->probe_resp_len <= hlen)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (!bcon->proberesp_ies) {
|
||||||
|
bcon->proberesp_ies = f->u.probe_resp.variable;
|
||||||
|
bcon->proberesp_ies_len = bcon->probe_resp_len - hlen;
|
||||||
|
rc = 1;
|
||||||
|
}
|
||||||
|
if (!bcon->assocresp_ies) {
|
||||||
|
bcon->assocresp_ies = f->u.probe_resp.variable;
|
||||||
|
bcon->assocresp_ies_len = bcon->probe_resp_len - hlen;
|
||||||
|
rc = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
static int wil_cfg80211_start_ap(struct wiphy *wiphy,
|
static int wil_cfg80211_start_ap(struct wiphy *wiphy,
|
||||||
struct net_device *ndev,
|
struct net_device *ndev,
|
||||||
struct cfg80211_ap_settings *info)
|
struct cfg80211_ap_settings *info)
|
||||||
|
@ -423,6 +447,9 @@ static int wil_cfg80211_start_ap(struct wiphy *wiphy,
|
||||||
print_hex_dump_bytes("SSID ", DUMP_PREFIX_OFFSET,
|
print_hex_dump_bytes("SSID ", DUMP_PREFIX_OFFSET,
|
||||||
info->ssid, info->ssid_len);
|
info->ssid, info->ssid_len);
|
||||||
|
|
||||||
|
if (wil_fix_bcon(wil, bcon))
|
||||||
|
wil_dbg_misc(wil, "Fixed bcon\n");
|
||||||
|
|
||||||
rc = wil_reset(wil);
|
rc = wil_reset(wil);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
Loading…
Reference in a new issue