nl80211/cfg80211: add STA WME parameters
Add new NL80211_ATTR_STA_WME nested attribute that contains wme params needed by the low-level driver (uapsd_queues and max_sp). Add these params to the station_parameters struct as well. Signed-off-by: Eliad Peller <eliad@wizery.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:

committed by
John W. Linville

parent
a21fa87e3a
commit
c75786c9ef
@@ -2545,6 +2545,12 @@ static int nl80211_set_station(struct sk_buff *skb, struct genl_info *info)
|
||||
return err;
|
||||
}
|
||||
|
||||
static struct nla_policy
|
||||
nl80211_sta_wme_policy[NL80211_STA_WME_MAX + 1] __read_mostly = {
|
||||
[NL80211_STA_WME_UAPSD_QUEUES] = { .type = NLA_U8 },
|
||||
[NL80211_STA_WME_MAX_SP] = { .type = NLA_U8 },
|
||||
};
|
||||
|
||||
static int nl80211_new_station(struct sk_buff *skb, struct genl_info *info)
|
||||
{
|
||||
struct cfg80211_registered_device *rdev = info->user_ptr[0];
|
||||
@@ -2590,6 +2596,27 @@ static int nl80211_new_station(struct sk_buff *skb, struct genl_info *info)
|
||||
if (parse_station_flags(info, ¶ms))
|
||||
return -EINVAL;
|
||||
|
||||
/* parse WME attributes if sta is WME capable */
|
||||
if ((params.sta_flags_set & NL80211_STA_FLAG_WME) &&
|
||||
info->attrs[NL80211_ATTR_STA_WME]) {
|
||||
struct nlattr *tb[NL80211_STA_WME_MAX + 1];
|
||||
struct nlattr *nla;
|
||||
|
||||
nla = info->attrs[NL80211_ATTR_STA_WME];
|
||||
err = nla_parse_nested(tb, NL80211_STA_WME_MAX, nla,
|
||||
nl80211_sta_wme_policy);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (tb[NL80211_STA_WME_UAPSD_QUEUES])
|
||||
params.uapsd_queues =
|
||||
nla_get_u8(tb[NL80211_STA_WME_UAPSD_QUEUES]);
|
||||
|
||||
if (tb[NL80211_STA_WME_MAX_SP])
|
||||
params.max_sp =
|
||||
nla_get_u8(tb[NL80211_STA_WME_MAX_SP]);
|
||||
}
|
||||
|
||||
if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP &&
|
||||
dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP_VLAN &&
|
||||
dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT &&
|
||||
|
Reference in New Issue
Block a user