aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAvinash Patil <patila@marvell.com>2014-12-05 12:53:42 -0500
committerJohn W. Linville <linville@tuxdriver.com>2014-12-05 14:15:25 -0500
commitfc99dd0829fd4d080b78141ade9a79bcc3dcd160 (patch)
tree5210e90d67e3b9de583201e67a82ebe97692a124
parentc11fb9857f8c7951e30509c5af72ada8e121be8b (diff)
mwifiex: do not process broadcast mac address for del_sta
Generally broadcast mac address deauth is followed by stop_ap or start_ap. In both cases, FW already has provision to send deauth; so there is no need to handle broadcast mac deauthentication. Signed-off-by: Avinash Patil <patila@marvell.com> Signed-off-by: Cathy Luo <cluo@marvell.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/mwifiex/cfg80211.c39
1 files changed, 19 insertions, 20 deletions
diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c
index e111ff51cbc1..4a66a6555366 100644
--- a/drivers/net/wireless/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/mwifiex/cfg80211.c
@@ -1296,31 +1296,30 @@ mwifiex_cfg80211_del_station(struct wiphy *wiphy, struct net_device *dev,
1296{ 1296{
1297 struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev); 1297 struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
1298 struct mwifiex_sta_node *sta_node; 1298 struct mwifiex_sta_node *sta_node;
1299 u8 deauth_mac[ETH_ALEN];
1299 unsigned long flags; 1300 unsigned long flags;
1300 1301
1301 if (list_empty(&priv->sta_list) || !priv->bss_started) 1302 if (list_empty(&priv->sta_list) || !priv->bss_started)
1302 return 0; 1303 return 0;
1303 1304
1304 if (!params->mac || is_broadcast_ether_addr(params->mac)) { 1305 if (!params->mac || is_broadcast_ether_addr(params->mac))
1305 wiphy_dbg(wiphy, "%s: NULL/broadcast mac address\n", __func__); 1306 return 0;
1306 list_for_each_entry(sta_node, &priv->sta_list, list) { 1307
1307 if (mwifiex_send_cmd(priv, HostCmd_CMD_UAP_STA_DEAUTH, 1308 wiphy_dbg(wiphy, "%s: mac address %pM\n", __func__, params->mac);
1308 HostCmd_ACT_GEN_SET, 0, 1309
1309 sta_node->mac_addr, true)) 1310 memset(deauth_mac, 0, ETH_ALEN);
1310 return -1; 1311
1311 } 1312 spin_lock_irqsave(&priv->sta_list_spinlock, flags);
1312 } else { 1313 sta_node = mwifiex_get_sta_entry(priv, params->mac);
1313 wiphy_dbg(wiphy, "%s: mac address %pM\n", __func__, 1314 if (sta_node)
1314 params->mac); 1315 ether_addr_copy(deauth_mac, params->mac);
1315 spin_lock_irqsave(&priv->sta_list_spinlock, flags); 1316 spin_unlock_irqrestore(&priv->sta_list_spinlock, flags);
1316 sta_node = mwifiex_get_sta_entry(priv, params->mac); 1317
1317 spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); 1318 if (is_valid_ether_addr(deauth_mac)) {
1318 if (sta_node) { 1319 if (mwifiex_send_cmd(priv, HostCmd_CMD_UAP_STA_DEAUTH,
1319 if (mwifiex_send_cmd(priv, HostCmd_CMD_UAP_STA_DEAUTH, 1320 HostCmd_ACT_GEN_SET, 0,
1320 HostCmd_ACT_GEN_SET, 0, 1321 deauth_mac, true))
1321 sta_node->mac_addr, true)) 1322 return -1;
1322 return -1;
1323 }
1324 } 1323 }
1325 1324
1326 return 0; 1325 return 0;