diff options
author | Simon Wunderlich <simon.wunderlich@s2003.tu-chemnitz.de> | 2011-11-18 08:20:43 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-11-28 14:36:21 -0500 |
commit | 1d9d9213d526f2f4ef9a3aa198a29a0b1a670fa1 (patch) | |
tree | 34eadd9e3544cbb01c6768dee820d5430db10edc /net/wireless/nl80211.c | |
parent | 6fd67e937ece538e0ab766df96a9895e6fd622df (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.c | 28 |
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 | ||
1764 | static 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 | |||
1762 | struct get_key_cookie { | 1781 | struct 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 | ||
6609 | static struct genl_multicast_group nl80211_mlme_mcgrp = { | 6637 | static struct genl_multicast_group nl80211_mlme_mcgrp = { |