linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] iwlwifi: mvm: allow monitor mode capture in STA mode
@ 2017-09-15  5:11 gavinli
  2017-09-26  7:59 ` Coelho, Luciano
  0 siblings, 1 reply; 4+ messages in thread
From: gavinli @ 2017-09-15  5:11 UTC (permalink / raw)
  To: Johannes Berg, Emmanuel Grumbach, Luca Coelho,
	Intel Linux Wireless
  Cc: linux-wireless, Gavin Li

From: Gavin Li <git@thegavinli.com>

Open up the filter if there is a monitor interface configured; this
allows all packets on the channel to be captured even if the device is
in STA mode and associated to a BSS.

Signed-off-by: Gavin Li <git@thegavinli.com>
---
 drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c |  3 +-
 drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 42 +++++++++++++++++++----
 drivers/net/wireless/intel/iwlwifi/mvm/mvm.h      |  3 ++
 3 files changed, 40 insertions(+), 8 deletions(-)

diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
index fd2fc46e2fe5..ea98fc040aa8 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
@@ -752,7 +752,8 @@ static void iwl_mvm_mac_ctxt_cmd_common(struct iwl_mvm *mvm,
 		cpu_to_le32(vif->bss_conf.use_short_slot ?
 			    MAC_FLG_SHORT_SLOT : 0);
 
-	cmd->filter_flags = cpu_to_le32(MAC_FILTER_ACCEPT_GRP);
+	cmd->filter_flags = cpu_to_le32(mvm->addl_filter_flags |
+					MAC_FILTER_ACCEPT_GRP);
 
 	for (i = 0; i < IEEE80211_NUM_ACS; i++) {
 		u8 txf = iwl_mvm_ac_to_tx_fifo[i];
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
index db5ad222e5ea..7c6d30ea3cf1 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
@@ -1641,6 +1641,13 @@ static u64 iwl_mvm_prepare_multicast(struct ieee80211_hw *hw,
 	return (u64)(unsigned long)cmd;
 }
 
+static void iwl_mvm_addl_ff_iface_iterator(
+		void *_mvm, u8 *mac, struct ieee80211_vif *vif)
+{
+	struct iwl_mvm *mvm = _mvm;
+	iwl_mvm_mac_ctxt_changed(mvm, vif, false, NULL);
+}
+
 static void iwl_mvm_configure_filter(struct ieee80211_hw *hw,
 				     unsigned int changed_flags,
 				     unsigned int *total_flags,
@@ -1648,20 +1655,41 @@ static void iwl_mvm_configure_filter(struct ieee80211_hw *hw,
 {
 	struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
 	struct iwl_mcast_filter_cmd *cmd = (void *)(unsigned long)multicast;
+	const u32 supported_filters =
+		FIF_BCN_PRBRESP_PROMISC |
+		FIF_CONTROL |
+		FIF_OTHER_BSS |
+		FIF_PROBE_REQ;
+	u32 addl_filter_flags = 0;
+
+	*total_flags &= supported_filters;
+	if (*total_flags & FIF_BCN_PRBRESP_PROMISC)
+		addl_filter_flags |= MAC_FILTER_IN_BEACON;
+	if (*total_flags & FIF_CONTROL)
+		addl_filter_flags |= MAC_FILTER_IN_CONTROL_AND_MGMT;
+	if (*total_flags & FIF_OTHER_BSS)
+		addl_filter_flags |= MAC_FILTER_IN_CONTROL_AND_MGMT |
+			MAC_FILTER_IN_PROMISC |
+			MAC_FILTER_IN_BEACON;
+	if (*total_flags & FIF_PROBE_REQ)
+		addl_filter_flags |= MAC_FILTER_IN_PROBE_REQUEST;
 
+	/* replace previous configuration */
 	mutex_lock(&mvm->mutex);
 
-	/* replace previous configuration */
+	if (mvm->addl_filter_flags != addl_filter_flags) {
+		mvm->addl_filter_flags = addl_filter_flags;
+		ieee80211_iterate_active_interfaces(
+				mvm->hw, IEEE80211_IFACE_ITER_NORMAL,
+				iwl_mvm_addl_ff_iface_iterator, mvm);
+	}
+
 	kfree(mvm->mcast_filter_cmd);
 	mvm->mcast_filter_cmd = cmd;
+	if (cmd)
+		iwl_mvm_recalc_multicast(mvm);
 
-	if (!cmd)
-		goto out;
-
-	iwl_mvm_recalc_multicast(mvm);
-out:
 	mutex_unlock(&mvm->mutex);
-	*total_flags = 0;
 }
 
 static void iwl_mvm_config_iface_filter(struct ieee80211_hw *hw,
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
index 52f8d7a6a7dc..827c413157c7 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
@@ -832,6 +832,9 @@ struct iwl_mvm {
 	/* configured by mac80211 */
 	u32 rts_threshold;
 
+	/* packets to pass as requested by mac80211 */
+	u32 addl_filter_flags;
+
 	/* Scan status, cmd (pre-allocated) and auxiliary station */
 	unsigned int scan_status;
 	void *scan_cmd;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] iwlwifi: mvm: allow monitor mode capture in STA mode
  2017-09-15  5:11 [PATCH v2] iwlwifi: mvm: allow monitor mode capture in STA mode gavinli
@ 2017-09-26  7:59 ` Coelho, Luciano
  2017-09-26 17:29   ` Gavin Li
  0 siblings, 1 reply; 4+ messages in thread
From: Coelho, Luciano @ 2017-09-26  7:59 UTC (permalink / raw)
  To: linuxwifi, gavinli@thegavinli.com, Berg, Johannes,
	Grumbach, Emmanuel
  Cc: linux-wireless@vger.kernel.org, git@thegavinli.com

SGkgR2F2aW4sDQoNCk9uIFRodSwgMjAxNy0wOS0xNCBhdCAyMjoxMSAtMDcwMCwgZ2F2aW5saUB0
aGVnYXZpbmxpLmNvbSB3cm90ZToNCj4gRnJvbTogR2F2aW4gTGkgPGdpdEB0aGVnYXZpbmxpLmNv
bT4NCj4NCj4gT3BlbiB1cCB0aGUgZmlsdGVyIGlmIHRoZXJlIGlzIGEgbW9uaXRvciBpbnRlcmZh
Y2UgY29uZmlndXJlZDsgdGhpcw0KPiBhbGxvd3MgYWxsIHBhY2tldHMgb24gdGhlIGNoYW5uZWwg
dG8gYmUgY2FwdHVyZWQgZXZlbiBpZiB0aGUgZGV2aWNlIGlzDQo+IGluIFNUQSBtb2RlIGFuZCBh
c3NvY2lhdGVkIHRvIGEgQlNTLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogR2F2aW4gTGkgPGdpdEB0
aGVnYXZpbmxpLmNvbT4NCj4gLS0tDQoNClNvcnJ5IGZvciB0aGUgZGVsYXkgaW4gcmVzcG9uZGlu
Zywgd2Ugd2VyZSBkaXNjdXNzaW5nIHRoaXMgcGF0Y2gNCmludGVybmFsbHkuDQoNClVuZm9ydHVu
YXRlbHkgdGhpcyBpcyBub3Qgc29tZXRoaW5nIHRoYXQgb3VyIGZpcm13YXJlIG9mZmljaWFsbHkN
CnN1cHBvcnRzLCBzbyB3ZSBjYW5ub3QgYWxsb3cgaXQgaW4gdGhlIGRyaXZlci4gIFRoZSBmaXJt
d2FyZSBkb2Vzbid0DQoqYmxvY2sqIHRoaXMgZnJvbSB3b3JraW5nLCBidXQgdGhlcmUgYXJlIG5v
IGd1YXJhbnRlZXMgdGhhdCBpdCB3aWxsIHdvcmsNCmFuZCB0aGF0IHRoZXJlIHdpbGwgbm90IGJl
IGFueSBzaWRlLWVmZmVjdHMuDQoNCklmIHRoaXMgd29ya3MgZm9yIHlvdSwgZmVlbCBmcmVlIHRv
IHVzZSBpdCAodGhhdCdzIG9uZSBvZiB0aGUgYmVhdXRpZXMNCm9mIG9wZW4gc291cmNlKSwgYnV0
IEkgd29uJ3QgYXBwbHkgaXQgaW4gdGhlIG1haW5saW5lIGRyaXZlci4NCg0KDQotLQ0KQ2hlZXJz
LA0KTHVjYS4=

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] iwlwifi: mvm: allow monitor mode capture in STA mode
  2017-09-26  7:59 ` Coelho, Luciano
@ 2017-09-26 17:29   ` Gavin Li
  2017-09-27  6:39     ` Coelho, Luciano
  0 siblings, 1 reply; 4+ messages in thread
From: Gavin Li @ 2017-09-26 17:29 UTC (permalink / raw)
  To: Coelho, Luciano
  Cc: linuxwifi, Berg, Johannes, Grumbach, Emmanuel,
	linux-wireless@vger.kernel.org, git@thegavinli.com

Hi Luciano,

Thanks for the update. I was hoping that it would be supported since I
remember that iwldvm had no problem with it in the past.

Best,
Gavin

On Tue, Sep 26, 2017 at 12:59 AM, Coelho, Luciano
<luciano.coelho@intel.com> wrote:
> Hi Gavin,
>
> On Thu, 2017-09-14 at 22:11 -0700, gavinli@thegavinli.com wrote:
>> From: Gavin Li <git@thegavinli.com>
>>
>> Open up the filter if there is a monitor interface configured; this
>> allows all packets on the channel to be captured even if the device is
>> in STA mode and associated to a BSS.
>>
>> Signed-off-by: Gavin Li <git@thegavinli.com>
>> ---
>
> Sorry for the delay in responding, we were discussing this patch
> internally.
>
> Unfortunately this is not something that our firmware officially
> supports, so we cannot allow it in the driver.  The firmware doesn't
> *block* this from working, but there are no guarantees that it will work
> and that there will not be any side-effects.
>
> If this works for you, feel free to use it (that's one of the beauties
> of open source), but I won't apply it in the mainline driver.
>
>
> --
> Cheers,
> Luca.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] iwlwifi: mvm: allow monitor mode capture in STA mode
  2017-09-26 17:29   ` Gavin Li
@ 2017-09-27  6:39     ` Coelho, Luciano
  0 siblings, 0 replies; 4+ messages in thread
From: Coelho, Luciano @ 2017-09-27  6:39 UTC (permalink / raw)
  To: gavinli@thegavinli.com
  Cc: linuxwifi, linux-wireless@vger.kernel.org, git@thegavinli.com,
	Berg, Johannes, Grumbach, Emmanuel

T24gVHVlLCAyMDE3LTA5LTI2IGF0IDEwOjI5IC0wNzAwLCBHYXZpbiBMaSB3cm90ZToNCj4gSGkg
THVjaWFubywNCg0KSGksDQoNCj4gVGhhbmtzIGZvciB0aGUgdXBkYXRlLiBJIHdhcyBob3Bpbmcg
dGhhdCBpdCB3b3VsZCBiZSBzdXBwb3J0ZWQgc2luY2UgSQ0KPiByZW1lbWJlciB0aGF0IGl3bGR2
bSBoYWQgbm8gcHJvYmxlbSB3aXRoIGl0IGluIHRoZSBwYXN0Lg0KDQpBcyBJIHNhaWQsIGl0ICpt
YXkqIHdvcmsgZm9yIHlvdSBhcyBpdCBkaWQgd2l0aCBpd2xkdm0sIGJ1dCB3ZSBjYW5ub3QNCmd1
YXJhbnRlZSB0aGF0IGl0IHdpbGwgd29yayBhbmQgd2UgY2Fubm90IHN1cHBvcnQgaXQgb2ZmaWNp
YWxseS4gIFRodXMgSQ0KY2FuJ3QgYXBwbHkgdGhpcyB0byB0aGUgb2ZmaWNpYWwgZHJpdmVyLCBi
dXQgeW91IGNhbiB1c2UgaXQgYXQgeW91ciBvd24NCnJpc2suIDspDQoNCi0tDQpDaGVlcnMsDQpM
dWNhLg==

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-09-27  6:39 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-09-15  5:11 [PATCH v2] iwlwifi: mvm: allow monitor mode capture in STA mode gavinli
2017-09-26  7:59 ` Coelho, Luciano
2017-09-26 17:29   ` Gavin Li
2017-09-27  6:39     ` Coelho, Luciano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).