nl80211: Pass probe response data to drivers
Pass probe-response data from usermode via beacon parameters. Signed-off-by: Guy Eilam <guy@wizery.com> Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
87bbbe22f8
commit
00f740e1a3
@@ -1166,6 +1166,10 @@ enum nl80211_commands {
|
|||||||
* This attribute holds a bitmap of the supported protocols for
|
* This attribute holds a bitmap of the supported protocols for
|
||||||
* offloading (see &enum nl80211_probe_resp_offload_support_attr).
|
* offloading (see &enum nl80211_probe_resp_offload_support_attr).
|
||||||
*
|
*
|
||||||
|
* @NL80211_ATTR_PROBE_RESP: Probe Response template data. Contains the entire
|
||||||
|
* probe-response frame. The DA field in the 802.11 header is zero-ed out,
|
||||||
|
* to be filled by the FW.
|
||||||
|
*
|
||||||
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
||||||
* @__NL80211_ATTR_AFTER_LAST: internal use
|
* @__NL80211_ATTR_AFTER_LAST: internal use
|
||||||
*/
|
*/
|
||||||
@@ -1402,6 +1406,8 @@ enum nl80211_attrs {
|
|||||||
|
|
||||||
NL80211_ATTR_PROBE_RESP_OFFLOAD,
|
NL80211_ATTR_PROBE_RESP_OFFLOAD,
|
||||||
|
|
||||||
|
NL80211_ATTR_PROBE_RESP,
|
||||||
|
|
||||||
/* add attributes here, update the policy in nl80211.c */
|
/* add attributes here, update the policy in nl80211.c */
|
||||||
|
|
||||||
__NL80211_ATTR_AFTER_LAST,
|
__NL80211_ATTR_AFTER_LAST,
|
||||||
|
@@ -391,6 +391,8 @@ struct cfg80211_crypto_settings {
|
|||||||
* @assocresp_ies: extra information element(s) to add into (Re)Association
|
* @assocresp_ies: extra information element(s) to add into (Re)Association
|
||||||
* Response frames or %NULL
|
* Response frames or %NULL
|
||||||
* @assocresp_ies_len: length of assocresp_ies in octets
|
* @assocresp_ies_len: length of assocresp_ies in octets
|
||||||
|
* @probe_resp_len: length of probe response template (@probe_resp)
|
||||||
|
* @probe_resp: probe response template (AP mode only)
|
||||||
*/
|
*/
|
||||||
struct beacon_parameters {
|
struct beacon_parameters {
|
||||||
u8 *head, *tail;
|
u8 *head, *tail;
|
||||||
@@ -408,6 +410,8 @@ struct beacon_parameters {
|
|||||||
size_t proberesp_ies_len;
|
size_t proberesp_ies_len;
|
||||||
const u8 *assocresp_ies;
|
const u8 *assocresp_ies;
|
||||||
size_t assocresp_ies_len;
|
size_t assocresp_ies_len;
|
||||||
|
int probe_resp_len;
|
||||||
|
u8 *probe_resp;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -197,6 +197,8 @@ static const struct nla_policy nl80211_policy[NL80211_ATTR_MAX+1] = {
|
|||||||
[NL80211_ATTR_TDLS_SUPPORT] = { .type = NLA_FLAG },
|
[NL80211_ATTR_TDLS_SUPPORT] = { .type = NLA_FLAG },
|
||||||
[NL80211_ATTR_TDLS_EXTERNAL_SETUP] = { .type = NLA_FLAG },
|
[NL80211_ATTR_TDLS_EXTERNAL_SETUP] = { .type = NLA_FLAG },
|
||||||
[NL80211_ATTR_DONT_WAIT_FOR_ACK] = { .type = NLA_FLAG },
|
[NL80211_ATTR_DONT_WAIT_FOR_ACK] = { .type = NLA_FLAG },
|
||||||
|
[NL80211_ATTR_PROBE_RESP] = { .type = NLA_BINARY,
|
||||||
|
.len = IEEE80211_MAX_DATA_LEN },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* policy for the key attributes */
|
/* policy for the key attributes */
|
||||||
@@ -2171,6 +2173,13 @@ static int nl80211_addset_beacon(struct sk_buff *skb, struct genl_info *info)
|
|||||||
nla_len(info->attrs[NL80211_ATTR_IE_ASSOC_RESP]);
|
nla_len(info->attrs[NL80211_ATTR_IE_ASSOC_RESP]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (info->attrs[NL80211_ATTR_PROBE_RESP]) {
|
||||||
|
params.probe_resp =
|
||||||
|
nla_data(info->attrs[NL80211_ATTR_PROBE_RESP]);
|
||||||
|
params.probe_resp_len =
|
||||||
|
nla_len(info->attrs[NL80211_ATTR_PROBE_RESP]);
|
||||||
|
}
|
||||||
|
|
||||||
err = call(&rdev->wiphy, dev, ¶ms);
|
err = call(&rdev->wiphy, dev, ¶ms);
|
||||||
if (!err && params.interval)
|
if (!err && params.interval)
|
||||||
wdev->beacon_interval = params.interval;
|
wdev->beacon_interval = params.interval;
|
||||||
|
Reference in New Issue
Block a user