|
@@ -378,6 +378,7 @@ static const struct nla_policy nl80211_policy[NL80211_ATTR_MAX+1] = {
|
|
|
[NL80211_ATTR_MDID] = { .type = NLA_U16 },
|
|
|
[NL80211_ATTR_IE_RIC] = { .type = NLA_BINARY,
|
|
|
.len = IEEE80211_MAX_DATA_LEN },
|
|
|
+ [NL80211_ATTR_PEER_AID] = { .type = NLA_U16 },
|
|
|
};
|
|
|
|
|
|
/* policy for the key attributes */
|
|
@@ -3872,6 +3873,8 @@ static int nl80211_set_station_tdls(struct genl_info *info,
|
|
|
struct station_parameters *params)
|
|
|
{
|
|
|
/* Dummy STA entry gets updated once the peer capabilities are known */
|
|
|
+ if (info->attrs[NL80211_ATTR_PEER_AID])
|
|
|
+ params->aid = nla_get_u16(info->attrs[NL80211_ATTR_PEER_AID]);
|
|
|
if (info->attrs[NL80211_ATTR_HT_CAPABILITY])
|
|
|
params->ht_capa =
|
|
|
nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY]);
|
|
@@ -4012,7 +4015,8 @@ static int nl80211_new_station(struct sk_buff *skb, struct genl_info *info)
|
|
|
if (!info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES])
|
|
|
return -EINVAL;
|
|
|
|
|
|
- if (!info->attrs[NL80211_ATTR_STA_AID])
|
|
|
+ if (!info->attrs[NL80211_ATTR_STA_AID] &&
|
|
|
+ !info->attrs[NL80211_ATTR_PEER_AID])
|
|
|
return -EINVAL;
|
|
|
|
|
|
mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]);
|
|
@@ -4023,7 +4027,10 @@ static int nl80211_new_station(struct sk_buff *skb, struct genl_info *info)
|
|
|
params.listen_interval =
|
|
|
nla_get_u16(info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL]);
|
|
|
|
|
|
- params.aid = nla_get_u16(info->attrs[NL80211_ATTR_STA_AID]);
|
|
|
+ if (info->attrs[NL80211_ATTR_STA_AID])
|
|
|
+ params.aid = nla_get_u16(info->attrs[NL80211_ATTR_STA_AID]);
|
|
|
+ else
|
|
|
+ params.aid = nla_get_u16(info->attrs[NL80211_ATTR_PEER_AID]);
|
|
|
if (!params.aid || params.aid > IEEE80211_MAX_AID)
|
|
|
return -EINVAL;
|
|
|
|