aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless/nl80211.c
diff options
context:
space:
mode:
authorRajkumar Manoharan <rmanohar@qca.qualcomm.com>2011-09-25 05:23:30 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-09-27 14:34:10 -0400
commite9f935e3e8dc0bddd0df6d148165d95925422502 (patch)
treebbb5de5434d0dd0aa7a1b5894320b17ebee434b8 /net/wireless/nl80211.c
parent8ebafde00ed0c682fed8c34ac5ba90160ea0bb30 (diff)
nl80211/cfg80211: Add support to disable CCK rate for management frame
Add a new nl80211 attribute to specify whether to send the management frames in CCK rate or not. As of now the wpa_supplicant is disabling CCK rate at P2P init itself. So this patch helps to send P2P probe request/probe response/action frames being sent at non CCK rate in 2GHz without disabling 11b rates. This attribute is used with NL80211_CMD_TRIGGER_SCAN and NL80211_CMD_FRAME commands to disable CCK rate for management frame transmission. Cc: Jouni Malinen <jouni@qca.qualcomm.com> Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless/nl80211.c')
-rw-r--r--net/wireless/nl80211.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index a3e26951fd8b..48c1bf1a142d 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -191,6 +191,7 @@ static const struct nla_policy nl80211_policy[NL80211_ATTR_MAX+1] = {
191 .len = IEEE80211_MAX_DATA_LEN }, 191 .len = IEEE80211_MAX_DATA_LEN },
192 [NL80211_ATTR_ROAM_SUPPORT] = { .type = NLA_FLAG }, 192 [NL80211_ATTR_ROAM_SUPPORT] = { .type = NLA_FLAG },
193 [NL80211_ATTR_SCHED_SCAN_MATCH] = { .type = NLA_NESTED }, 193 [NL80211_ATTR_SCHED_SCAN_MATCH] = { .type = NLA_NESTED },
194 [NL80211_ATTR_TX_NO_CCK_RATE] = { .type = NLA_FLAG },
194}; 195};
195 196
196/* policy for the key attributes */ 197/* policy for the key attributes */
@@ -3620,6 +3621,9 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
3620 } 3621 }
3621 } 3622 }
3622 3623
3624 request->no_cck =
3625 nla_get_flag(info->attrs[NL80211_ATTR_TX_NO_CCK_RATE]);
3626
3623 request->dev = dev; 3627 request->dev = dev;
3624 request->wiphy = &rdev->wiphy; 3628 request->wiphy = &rdev->wiphy;
3625 3629
@@ -5171,6 +5175,7 @@ static int nl80211_tx_mgmt(struct sk_buff *skb, struct genl_info *info)
5171 struct sk_buff *msg; 5175 struct sk_buff *msg;
5172 unsigned int wait = 0; 5176 unsigned int wait = 0;
5173 bool offchan; 5177 bool offchan;
5178 bool no_cck;
5174 5179
5175 if (!info->attrs[NL80211_ATTR_FRAME] || 5180 if (!info->attrs[NL80211_ATTR_FRAME] ||
5176 !info->attrs[NL80211_ATTR_WIPHY_FREQ]) 5181 !info->attrs[NL80211_ATTR_WIPHY_FREQ])
@@ -5207,6 +5212,8 @@ static int nl80211_tx_mgmt(struct sk_buff *skb, struct genl_info *info)
5207 5212
5208 offchan = info->attrs[NL80211_ATTR_OFFCHANNEL_TX_OK]; 5213 offchan = info->attrs[NL80211_ATTR_OFFCHANNEL_TX_OK];
5209 5214
5215 no_cck = nla_get_flag(info->attrs[NL80211_ATTR_TX_NO_CCK_RATE]);
5216
5210 freq = nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ]); 5217 freq = nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ]);
5211 chan = rdev_freq_to_chan(rdev, freq, channel_type); 5218 chan = rdev_freq_to_chan(rdev, freq, channel_type);
5212 if (chan == NULL) 5219 if (chan == NULL)
@@ -5227,7 +5234,7 @@ static int nl80211_tx_mgmt(struct sk_buff *skb, struct genl_info *info)
5227 channel_type_valid, wait, 5234 channel_type_valid, wait,
5228 nla_data(info->attrs[NL80211_ATTR_FRAME]), 5235 nla_data(info->attrs[NL80211_ATTR_FRAME]),
5229 nla_len(info->attrs[NL80211_ATTR_FRAME]), 5236 nla_len(info->attrs[NL80211_ATTR_FRAME]),
5230 &cookie); 5237 no_cck, &cookie);
5231 if (err) 5238 if (err)
5232 goto free_msg; 5239 goto free_msg;
5233 5240