]> Pileus Git - ~andy/linux/commitdiff
iwlwifi: support explicit monitor interface
authorJohannes Berg <johannes.berg@intel.com>
Fri, 11 May 2012 08:53:18 +0000 (10:53 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 16 May 2012 17:08:21 +0000 (13:08 -0400)
Support explicit monitor interface to keep
injection working after the HW queue changes.
This also finally enables sniffer mode.

Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
drivers/net/wireless/iwlwifi/iwl-agn.c
drivers/net/wireless/iwlwifi/iwl-mac80211.c

index 0f7c444f2440e54e46bd6296e25a83e033f68036..89ccddcf023069c41cd47d9f4d7ba32cf474845c 100644 (file)
@@ -61,6 +61,10 @@ void iwl_connection_init_rx_config(struct iwl_priv *priv,
                                                  RXON_FILTER_ACCEPT_GRP_MSK;
                break;
 
+       case NL80211_IFTYPE_MONITOR:
+               ctx->staging.dev_type = RXON_DEV_TYPE_SNIFFER;
+               break;
+
        default:
                IWL_ERR(priv, "Unsupported interface type %d\n",
                        ctx->vif->type);
index 8d7637083fcfa49087771096d2052e91cc897056..ec36e2b020b6e9227935ca85fff855c58f5fd894 100644 (file)
@@ -603,7 +603,7 @@ void iwl_init_context(struct iwl_priv *priv, u32 ucode_flags)
        priv->contexts[IWL_RXON_CTX_BSS].wep_key_cmd = REPLY_WEPKEY;
        priv->contexts[IWL_RXON_CTX_BSS].bcast_sta_id = IWLAGN_BROADCAST_ID;
        priv->contexts[IWL_RXON_CTX_BSS].exclusive_interface_modes =
-               BIT(NL80211_IFTYPE_ADHOC);
+               BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_MONITOR);
        priv->contexts[IWL_RXON_CTX_BSS].interface_modes =
                BIT(NL80211_IFTYPE_STATION);
        priv->contexts[IWL_RXON_CTX_BSS].ap_devtype = RXON_DEV_TYPE_AP;
index 9abe07abcd3f68cdb0546f8f5826b6d8d7ec2825..ab2f4d7500a40df03d68293986d8c6ae46fc9969 100644 (file)
@@ -150,6 +150,7 @@ int iwlagn_mac_setup_register(struct iwl_priv *priv,
                    IEEE80211_HW_QUEUE_CONTROL |
                    IEEE80211_HW_SUPPORTS_PS |
                    IEEE80211_HW_SUPPORTS_DYNAMIC_PS |
+                   IEEE80211_HW_WANT_MONITOR_VIF |
                    IEEE80211_HW_SCAN_WHILE_IDLE;
 
        hw->offchannel_tx_hw_queue = IWL_AUX_QUEUE;