nl80211: (Re)Association Request frame IEs from association event
Process NL80211_ATTR_REQ_IE from the NL80211_CMD_ASSOCIATE event to allow request IEs to be made available for the SME-in-wpa_supplicant case similarly to how this is done with SME-in-driver with NL80211_CMD_CONNECT. Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
This commit is contained in:
parent
dd12e58e5f
commit
5d68c0acd2
1 changed files with 13 additions and 5 deletions
|
@ -206,7 +206,8 @@ static void nl80211_parse_wmm_params(struct nlattr *wmm_attr,
|
||||||
|
|
||||||
|
|
||||||
static void mlme_event_assoc(struct wpa_driver_nl80211_data *drv,
|
static void mlme_event_assoc(struct wpa_driver_nl80211_data *drv,
|
||||||
const u8 *frame, size_t len, struct nlattr *wmm)
|
const u8 *frame, size_t len, struct nlattr *wmm,
|
||||||
|
struct nlattr *req_ie)
|
||||||
{
|
{
|
||||||
const struct ieee80211_mgmt *mgmt;
|
const struct ieee80211_mgmt *mgmt;
|
||||||
union wpa_event_data event;
|
union wpa_event_data event;
|
||||||
|
@ -261,6 +262,11 @@ static void mlme_event_assoc(struct wpa_driver_nl80211_data *drv,
|
||||||
len - 24 - sizeof(mgmt->u.assoc_resp);
|
len - 24 - sizeof(mgmt->u.assoc_resp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (req_ie) {
|
||||||
|
event.assoc_info.req_ies = nla_data(req_ie);
|
||||||
|
event.assoc_info.req_ies_len = nla_len(req_ie);
|
||||||
|
}
|
||||||
|
|
||||||
event.assoc_info.freq = drv->assoc_freq;
|
event.assoc_info.freq = drv->assoc_freq;
|
||||||
|
|
||||||
/* When this association was initiated outside of wpa_supplicant,
|
/* When this association was initiated outside of wpa_supplicant,
|
||||||
|
@ -868,7 +874,7 @@ static void mlme_event(struct i802_bss *bss,
|
||||||
struct nlattr *addr, struct nlattr *timed_out,
|
struct nlattr *addr, struct nlattr *timed_out,
|
||||||
struct nlattr *freq, struct nlattr *ack,
|
struct nlattr *freq, struct nlattr *ack,
|
||||||
struct nlattr *cookie, struct nlattr *sig,
|
struct nlattr *cookie, struct nlattr *sig,
|
||||||
struct nlattr *wmm)
|
struct nlattr *wmm, struct nlattr *req_ie)
|
||||||
{
|
{
|
||||||
struct wpa_driver_nl80211_data *drv = bss->drv;
|
struct wpa_driver_nl80211_data *drv = bss->drv;
|
||||||
const u8 *data;
|
const u8 *data;
|
||||||
|
@ -917,7 +923,8 @@ static void mlme_event(struct i802_bss *bss,
|
||||||
mlme_event_auth(drv, nla_data(frame), nla_len(frame));
|
mlme_event_auth(drv, nla_data(frame), nla_len(frame));
|
||||||
break;
|
break;
|
||||||
case NL80211_CMD_ASSOCIATE:
|
case NL80211_CMD_ASSOCIATE:
|
||||||
mlme_event_assoc(drv, nla_data(frame), nla_len(frame), wmm);
|
mlme_event_assoc(drv, nla_data(frame), nla_len(frame), wmm,
|
||||||
|
req_ie);
|
||||||
break;
|
break;
|
||||||
case NL80211_CMD_DEAUTHENTICATE:
|
case NL80211_CMD_DEAUTHENTICATE:
|
||||||
mlme_event_deauth_disassoc(drv, EVENT_DEAUTH,
|
mlme_event_deauth_disassoc(drv, EVENT_DEAUTH,
|
||||||
|
@ -2475,7 +2482,8 @@ static void do_process_drv_event(struct i802_bss *bss, int cmd,
|
||||||
tb[NL80211_ATTR_WIPHY_FREQ], tb[NL80211_ATTR_ACK],
|
tb[NL80211_ATTR_WIPHY_FREQ], tb[NL80211_ATTR_ACK],
|
||||||
tb[NL80211_ATTR_COOKIE],
|
tb[NL80211_ATTR_COOKIE],
|
||||||
tb[NL80211_ATTR_RX_SIGNAL_DBM],
|
tb[NL80211_ATTR_RX_SIGNAL_DBM],
|
||||||
tb[NL80211_ATTR_STA_WME]);
|
tb[NL80211_ATTR_STA_WME],
|
||||||
|
tb[NL80211_ATTR_REQ_IE]);
|
||||||
break;
|
break;
|
||||||
case NL80211_CMD_CONNECT:
|
case NL80211_CMD_CONNECT:
|
||||||
case NL80211_CMD_ROAM:
|
case NL80211_CMD_ROAM:
|
||||||
|
@ -2648,7 +2656,7 @@ int process_bss_event(struct nl_msg *msg, void *arg)
|
||||||
tb[NL80211_ATTR_WIPHY_FREQ], tb[NL80211_ATTR_ACK],
|
tb[NL80211_ATTR_WIPHY_FREQ], tb[NL80211_ATTR_ACK],
|
||||||
tb[NL80211_ATTR_COOKIE],
|
tb[NL80211_ATTR_COOKIE],
|
||||||
tb[NL80211_ATTR_RX_SIGNAL_DBM],
|
tb[NL80211_ATTR_RX_SIGNAL_DBM],
|
||||||
tb[NL80211_ATTR_STA_WME]);
|
tb[NL80211_ATTR_STA_WME], NULL);
|
||||||
break;
|
break;
|
||||||
case NL80211_CMD_UNEXPECTED_FRAME:
|
case NL80211_CMD_UNEXPECTED_FRAME:
|
||||||
nl80211_spurious_frame(bss, tb, 0);
|
nl80211_spurious_frame(bss, tb, 0);
|
||||||
|
|
Loading…
Reference in a new issue