aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless/nl80211.c
diff options
context:
space:
mode:
authorSimon Wunderlich <simon.wunderlich@s2003.tu-chemnitz.de>2011-11-18 08:20:43 -0500
committerJohn W. Linville <linville@tuxdriver.com>2011-11-28 14:36:21 -0500
commit1d9d9213d526f2f4ef9a3aa198a29a0b1a670fa1 (patch)
tree34eadd9e3544cbb01c6768dee820d5430db10edc /net/wireless/nl80211.c
parent6fd67e937ece538e0ab766df96a9895e6fd622df (diff)
wireless: Add NoAck per tid support
This patch contains the configuration changes in nl80211/cfg80211. Signed-off-by: Simon Wunderlich <siwu@hrz.tu-chemnitz.de> Signed-off-by: Mathias Kretschmer <mathias.kretschmer@fokus.fraunhofer.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless/nl80211.c')
-rw-r--r--net/wireless/nl80211.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index a1cabde7cb5f..6026c29c338d 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -204,6 +204,7 @@ static const struct nla_policy nl80211_policy[NL80211_ATTR_MAX+1] = {
204 [NL80211_ATTR_HT_CAPABILITY_MASK] = { 204 [NL80211_ATTR_HT_CAPABILITY_MASK] = {
205 .len = NL80211_HT_CAPABILITY_LEN 205 .len = NL80211_HT_CAPABILITY_LEN
206 }, 206 },
207 [NL80211_ATTR_NOACK_MAP] = { .type = NLA_U16 },
207}; 208};
208 209
209/* policy for the key attributes */ 210/* policy for the key attributes */
@@ -904,6 +905,7 @@ static int nl80211_send_wiphy(struct sk_buff *msg, u32 pid, u32 seq, int flags,
904 if (dev->wiphy.flags & WIPHY_FLAG_SUPPORTS_SCHED_SCAN) 905 if (dev->wiphy.flags & WIPHY_FLAG_SUPPORTS_SCHED_SCAN)
905 CMD(sched_scan_start, START_SCHED_SCAN); 906 CMD(sched_scan_start, START_SCHED_SCAN);
906 CMD(probe_client, PROBE_CLIENT); 907 CMD(probe_client, PROBE_CLIENT);
908 CMD(set_noack_map, SET_NOACK_MAP);
907 if (dev->wiphy.flags & WIPHY_FLAG_REPORTS_OBSS) { 909 if (dev->wiphy.flags & WIPHY_FLAG_REPORTS_OBSS) {
908 i++; 910 i++;
909 NLA_PUT_U32(msg, i, NL80211_CMD_REGISTER_BEACONS); 911 NLA_PUT_U32(msg, i, NL80211_CMD_REGISTER_BEACONS);
@@ -1759,6 +1761,23 @@ static int nl80211_del_interface(struct sk_buff *skb, struct genl_info *info)
1759 return rdev->ops->del_virtual_intf(&rdev->wiphy, dev); 1761 return rdev->ops->del_virtual_intf(&rdev->wiphy, dev);
1760} 1762}
1761 1763
1764static int nl80211_set_noack_map(struct sk_buff *skb, struct genl_info *info)
1765{
1766 struct cfg80211_registered_device *rdev = info->user_ptr[0];
1767 struct net_device *dev = info->user_ptr[1];
1768 u16 noack_map;
1769
1770 if (!info->attrs[NL80211_ATTR_NOACK_MAP])
1771 return -EINVAL;
1772
1773 if (!rdev->ops->set_noack_map)
1774 return -EOPNOTSUPP;
1775
1776 noack_map = nla_get_u16(info->attrs[NL80211_ATTR_NOACK_MAP]);
1777
1778 return rdev->ops->set_noack_map(&rdev->wiphy, dev, noack_map);
1779}
1780
1762struct get_key_cookie { 1781struct get_key_cookie {
1763 struct sk_buff *msg; 1782 struct sk_buff *msg;
1764 int error; 1783 int error;
@@ -6604,6 +6623,15 @@ static struct genl_ops nl80211_ops[] = {
6604 .internal_flags = NL80211_FLAG_NEED_WIPHY | 6623 .internal_flags = NL80211_FLAG_NEED_WIPHY |
6605 NL80211_FLAG_NEED_RTNL, 6624 NL80211_FLAG_NEED_RTNL,
6606 }, 6625 },
6626 {
6627 .cmd = NL80211_CMD_SET_NOACK_MAP,
6628 .doit = nl80211_set_noack_map,
6629 .policy = nl80211_policy,
6630 .flags = GENL_ADMIN_PERM,
6631 .internal_flags = NL80211_FLAG_NEED_NETDEV |
6632 NL80211_FLAG_NEED_RTNL,
6633 },
6634
6607}; 6635};
6608 6636
6609static struct genl_multicast_group nl80211_mlme_mcgrp = { 6637static struct genl_multicast_group nl80211_mlme_mcgrp = {