linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 1/2] mt76: mt7615: enable support for mesh
@ 2019-06-03  6:08 Ryder Lee
  2019-06-03  6:08 ` [PATCH v3 2/2] mt76: mt7615: fix slow performance when enable encryption Ryder Lee
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Ryder Lee @ 2019-06-03  6:08 UTC (permalink / raw)
  To: Felix Fietkau, Lorenzo Bianconi
  Cc: Roy Luo, YF Luo, Yiwei Chung, Sean Wang, Chih-Min Chen,
	linux-wireless, linux-mediatek, linux-kernel, Ryder Lee

Enable NL80211_IFTYPE_MESH_POINT and update its path.

Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
---
Changes since v3 - fix a wrong expression
Changes since v2 - remove unused definitions
---
 drivers/net/wireless/mediatek/mt76/mt7615/init.c | 6 ++++++
 drivers/net/wireless/mediatek/mt76/mt7615/main.c | 1 +
 drivers/net/wireless/mediatek/mt76/mt7615/mcu.c  | 4 +++-
 drivers/net/wireless/mediatek/mt76/mt7615/mcu.h  | 6 ------
 4 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/init.c b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
index 59f604f3161f..f860af6a42da 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
@@ -133,6 +133,9 @@ static const struct ieee80211_iface_limit if_limits[] = {
 	{
 		.max = MT7615_MAX_INTERFACES,
 		.types = BIT(NL80211_IFTYPE_AP) |
+#ifdef CONFIG_MAC80211_MESH
+			 BIT(NL80211_IFTYPE_MESH_POINT) |
+#endif
 			 BIT(NL80211_IFTYPE_STATION)
 	}
 };
@@ -195,6 +198,9 @@ int mt7615_register_device(struct mt7615_dev *dev)
 	dev->mt76.antenna_mask = 0xf;
 
 	wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
+#ifdef CONFIG_MAC80211_MESH
+				 BIT(NL80211_IFTYPE_MESH_POINT) |
+#endif
 				 BIT(NL80211_IFTYPE_AP);
 
 	ret = mt76_register_device(&dev->mt76, true, mt7615_rates,
diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/main.c b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
index b0bb7cc12385..585e67fa2728 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
@@ -37,6 +37,7 @@ static int get_omac_idx(enum nl80211_iftype type, u32 mask)
 
 	switch (type) {
 	case NL80211_IFTYPE_AP:
+	case NL80211_IFTYPE_MESH_POINT:
 		/* ap use hw bssid 0 and ext bssid */
 		if (~mask & BIT(HW_BSSID_0))
 			return HW_BSSID_0;
diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
index 43f70195244c..e82297048449 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
@@ -754,6 +754,7 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev *dev,
 
 	switch (vif->type) {
 	case NL80211_IFTYPE_AP:
+	case NL80211_IFTYPE_MESH_POINT:
 		tx_wlan_idx = mvif->sta.wcid.idx;
 		conn_type = CONNECTION_INFRA_AP;
 		break;
@@ -968,7 +969,7 @@ int mt7615_mcu_add_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif,
 		.rx_wtbl = {
 			.tag = cpu_to_le16(WTBL_RX),
 			.len = cpu_to_le16(sizeof(struct wtbl_rx)),
-			.rca1 = vif->type != NL80211_IFTYPE_AP,
+			.rca1 = vif->type == NL80211_IFTYPE_STATION,
 			.rca2 = 1,
 			.rv = 1,
 		},
@@ -1042,6 +1043,7 @@ static void sta_rec_convert_vif_type(enum nl80211_iftype type, u32 *conn_type)
 {
 	switch (type) {
 	case NL80211_IFTYPE_AP:
+	case NL80211_IFTYPE_MESH_POINT:
 		if (conn_type)
 			*conn_type = CONNECTION_INFRA_STA;
 		break;
diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
index e96efb13fa4d..0915cb735699 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
@@ -105,25 +105,19 @@ enum {
 #define STA_TYPE_STA		BIT(0)
 #define STA_TYPE_AP		BIT(1)
 #define STA_TYPE_ADHOC		BIT(2)
-#define STA_TYPE_TDLS		BIT(3)
 #define STA_TYPE_WDS		BIT(4)
 #define STA_TYPE_BC		BIT(5)
 
 #define NETWORK_INFRA		BIT(16)
 #define NETWORK_P2P		BIT(17)
 #define NETWORK_IBSS		BIT(18)
-#define NETWORK_MESH		BIT(19)
-#define NETWORK_BOW		BIT(20)
 #define NETWORK_WDS		BIT(21)
 
 #define CONNECTION_INFRA_STA	(STA_TYPE_STA | NETWORK_INFRA)
 #define CONNECTION_INFRA_AP	(STA_TYPE_AP | NETWORK_INFRA)
 #define CONNECTION_P2P_GC	(STA_TYPE_STA | NETWORK_P2P)
 #define CONNECTION_P2P_GO	(STA_TYPE_AP | NETWORK_P2P)
-#define CONNECTION_MESH_STA	(STA_TYPE_STA | NETWORK_MESH)
-#define CONNECTION_MESH_AP	(STA_TYPE_AP | NETWORK_MESH)
 #define CONNECTION_IBSS_ADHOC	(STA_TYPE_ADHOC | NETWORK_IBSS)
-#define CONNECTION_TDLS		(STA_TYPE_STA | NETWORK_INFRA | STA_TYPE_TDLS)
 #define CONNECTION_WDS		(STA_TYPE_WDS | NETWORK_WDS)
 #define CONNECTION_INFRA_BC	(STA_TYPE_BC | NETWORK_INFRA)
 
-- 
2.18.0


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

* [PATCH v3 2/2] mt76: mt7615: fix slow performance when enable encryption
  2019-06-03  6:08 [PATCH v3 1/2] mt76: mt7615: enable support for mesh Ryder Lee
@ 2019-06-03  6:08 ` Ryder Lee
  2019-06-07 17:02   ` Felix Fietkau
  2019-06-06 10:11 ` [PATCH v3 1/2] mt76: mt7615: enable support for mesh Sebastian Gottschall
  2019-06-06 10:14 ` [PATCH v3 1/2] mt76: mt7615: enable support for mesh Sebastian Gottschall
  2 siblings, 1 reply; 10+ messages in thread
From: Ryder Lee @ 2019-06-03  6:08 UTC (permalink / raw)
  To: Felix Fietkau, Lorenzo Bianconi
  Cc: Roy Luo, YF Luo, Yiwei Chung, Sean Wang, Chih-Min Chen,
	linux-wireless, linux-mediatek, linux-kernel, Ryder Lee

Fix wrong WCID assignment and add RKV (RX Key of this entry is valid)
flag to check if peer uses the same configuration with previous
handshaking.

If the configuration is mismatch, WTBL indicates a “cipher mismatch”
to stop SEC decryption to prevent the packet from damage.

Suggested-by: YF Luo <yf.luo@mediatek.com>
Suggested-by: Yiwei Chung <yiwei.chung@mediatek.com>
Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
---
Changes since v3 - none
Changes since v2 - none
---
 drivers/net/wireless/mediatek/mt76/mt7615/init.c | 16 ++++++++++------
 drivers/net/wireless/mediatek/mt76/mt7615/main.c |  2 +-
 drivers/net/wireless/mediatek/mt76/mt7615/mcu.c  |  1 +
 3 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/init.c b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
index f860af6a42da..b3e08154ccbe 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
@@ -62,16 +62,11 @@ static void mt7615_mac_init(struct mt7615_dev *dev)
 		 MT_AGG_ARCR_RATE_DOWN_RATIO_EN |
 		 FIELD_PREP(MT_AGG_ARCR_RATE_DOWN_RATIO, 1) |
 		 FIELD_PREP(MT_AGG_ARCR_RATE_UP_EXTRA_TH, 4)));
-
-	dev->mt76.global_wcid.idx = MT7615_WTBL_RESERVED;
-	dev->mt76.global_wcid.hw_key_idx = -1;
-	rcu_assign_pointer(dev->mt76.wcid[MT7615_WTBL_RESERVED],
-			   &dev->mt76.global_wcid);
 }
 
 static int mt7615_init_hardware(struct mt7615_dev *dev)
 {
-	int ret;
+	int ret, idx;
 
 	mt76_wr(dev, MT_INT_SOURCE_CSR, ~0);
 
@@ -98,6 +93,15 @@ static int mt7615_init_hardware(struct mt7615_dev *dev)
 	mt7615_mcu_ctrl_pm_state(dev, 0);
 	mt7615_mcu_del_wtbl_all(dev);
 
+	/* Beacon and mgmt frames should occupy wcid 0 */
+	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7615_WTBL_STA - 1);
+	if (idx)
+		return -ENOSPC;
+
+	dev->mt76.global_wcid.idx = idx;
+	dev->mt76.global_wcid.hw_key_idx = -1;
+	rcu_assign_pointer(dev->mt76.wcid[idx], &dev->mt76.global_wcid);
+
 	return 0;
 }
 
diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/main.c b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
index 585e67fa2728..2cdd339453c8 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
@@ -95,7 +95,7 @@ static int mt7615_add_interface(struct ieee80211_hw *hw,
 
 	dev->vif_mask |= BIT(mvif->idx);
 	dev->omac_mask |= BIT(mvif->omac_idx);
-	idx = MT7615_WTBL_RESERVED - 1 - mvif->idx;
+	idx = MT7615_WTBL_RESERVED - mvif->idx;
 	mvif->sta.wcid.idx = idx;
 	mvif->sta.wcid.hw_key_idx = -1;
 
diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
index e82297048449..b3802f18b37b 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
@@ -882,6 +882,7 @@ int mt7615_mcu_set_wtbl_key(struct mt7615_dev *dev, int wcid,
 		if (cipher == MT_CIPHER_NONE && key)
 			return -EOPNOTSUPP;
 
+		req.key.rkv = 1;
 		req.key.cipher_id = cipher;
 		req.key.key_id = key->keyidx;
 		req.key.key_len = key->keylen;
-- 
2.18.0


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

* Re: [PATCH v3 1/2] mt76: mt7615: enable support for mesh
  2019-06-03  6:08 [PATCH v3 1/2] mt76: mt7615: enable support for mesh Ryder Lee
  2019-06-03  6:08 ` [PATCH v3 2/2] mt76: mt7615: fix slow performance when enable encryption Ryder Lee
@ 2019-06-06 10:11 ` Sebastian Gottschall
  2019-06-06 16:19   ` Lorenzo Bianconi
  2019-06-06 10:14 ` [PATCH v3 1/2] mt76: mt7615: enable support for mesh Sebastian Gottschall
  2 siblings, 1 reply; 10+ messages in thread
From: Sebastian Gottschall @ 2019-06-06 10:11 UTC (permalink / raw)
  To: Ryder Lee, Felix Fietkau, Lorenzo Bianconi
  Cc: Roy Luo, YF Luo, Yiwei Chung, Sean Wang, Chih-Min Chen,
	linux-wireless, linux-mediatek, linux-kernel

i tested your patch against a qca 9984 chipset using SAE and without 
encryption. both did not work. the devices are connecting, but no data 
connection is possible


Sebastian

Am 03.06.2019 um 08:08 schrieb Ryder Lee:
> Enable NL80211_IFTYPE_MESH_POINT and update its path.
>
> Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
> ---
> Changes since v3 - fix a wrong expression
> Changes since v2 - remove unused definitions
> ---
>   drivers/net/wireless/mediatek/mt76/mt7615/init.c | 6 ++++++
>   drivers/net/wireless/mediatek/mt76/mt7615/main.c | 1 +
>   drivers/net/wireless/mediatek/mt76/mt7615/mcu.c  | 4 +++-
>   drivers/net/wireless/mediatek/mt76/mt7615/mcu.h  | 6 ------
>   4 files changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/init.c b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
> index 59f604f3161f..f860af6a42da 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7615/init.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
> @@ -133,6 +133,9 @@ static const struct ieee80211_iface_limit if_limits[] = {
>   	{
>   		.max = MT7615_MAX_INTERFACES,
>   		.types = BIT(NL80211_IFTYPE_AP) |
> +#ifdef CONFIG_MAC80211_MESH
> +			 BIT(NL80211_IFTYPE_MESH_POINT) |
> +#endif
>   			 BIT(NL80211_IFTYPE_STATION)
>   	}
>   };
> @@ -195,6 +198,9 @@ int mt7615_register_device(struct mt7615_dev *dev)
>   	dev->mt76.antenna_mask = 0xf;
>   
>   	wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
> +#ifdef CONFIG_MAC80211_MESH
> +				 BIT(NL80211_IFTYPE_MESH_POINT) |
> +#endif
>   				 BIT(NL80211_IFTYPE_AP);
>   
>   	ret = mt76_register_device(&dev->mt76, true, mt7615_rates,
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/main.c b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
> index b0bb7cc12385..585e67fa2728 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7615/main.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
> @@ -37,6 +37,7 @@ static int get_omac_idx(enum nl80211_iftype type, u32 mask)
>   
>   	switch (type) {
>   	case NL80211_IFTYPE_AP:
> +	case NL80211_IFTYPE_MESH_POINT:
>   		/* ap use hw bssid 0 and ext bssid */
>   		if (~mask & BIT(HW_BSSID_0))
>   			return HW_BSSID_0;
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
> index 43f70195244c..e82297048449 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
> @@ -754,6 +754,7 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev *dev,
>   
>   	switch (vif->type) {
>   	case NL80211_IFTYPE_AP:
> +	case NL80211_IFTYPE_MESH_POINT:
>   		tx_wlan_idx = mvif->sta.wcid.idx;
>   		conn_type = CONNECTION_INFRA_AP;
>   		break;
> @@ -968,7 +969,7 @@ int mt7615_mcu_add_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif,
>   		.rx_wtbl = {
>   			.tag = cpu_to_le16(WTBL_RX),
>   			.len = cpu_to_le16(sizeof(struct wtbl_rx)),
> -			.rca1 = vif->type != NL80211_IFTYPE_AP,
> +			.rca1 = vif->type == NL80211_IFTYPE_STATION,
>   			.rca2 = 1,
>   			.rv = 1,
>   		},
> @@ -1042,6 +1043,7 @@ static void sta_rec_convert_vif_type(enum nl80211_iftype type, u32 *conn_type)
>   {
>   	switch (type) {
>   	case NL80211_IFTYPE_AP:
> +	case NL80211_IFTYPE_MESH_POINT:
>   		if (conn_type)
>   			*conn_type = CONNECTION_INFRA_STA;
>   		break;
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
> index e96efb13fa4d..0915cb735699 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
> @@ -105,25 +105,19 @@ enum {
>   #define STA_TYPE_STA		BIT(0)
>   #define STA_TYPE_AP		BIT(1)
>   #define STA_TYPE_ADHOC		BIT(2)
> -#define STA_TYPE_TDLS		BIT(3)
>   #define STA_TYPE_WDS		BIT(4)
>   #define STA_TYPE_BC		BIT(5)
>   
>   #define NETWORK_INFRA		BIT(16)
>   #define NETWORK_P2P		BIT(17)
>   #define NETWORK_IBSS		BIT(18)
> -#define NETWORK_MESH		BIT(19)
> -#define NETWORK_BOW		BIT(20)
>   #define NETWORK_WDS		BIT(21)
>   
>   #define CONNECTION_INFRA_STA	(STA_TYPE_STA | NETWORK_INFRA)
>   #define CONNECTION_INFRA_AP	(STA_TYPE_AP | NETWORK_INFRA)
>   #define CONNECTION_P2P_GC	(STA_TYPE_STA | NETWORK_P2P)
>   #define CONNECTION_P2P_GO	(STA_TYPE_AP | NETWORK_P2P)
> -#define CONNECTION_MESH_STA	(STA_TYPE_STA | NETWORK_MESH)
> -#define CONNECTION_MESH_AP	(STA_TYPE_AP | NETWORK_MESH)
>   #define CONNECTION_IBSS_ADHOC	(STA_TYPE_ADHOC | NETWORK_IBSS)
> -#define CONNECTION_TDLS		(STA_TYPE_STA | NETWORK_INFRA | STA_TYPE_TDLS)
>   #define CONNECTION_WDS		(STA_TYPE_WDS | NETWORK_WDS)
>   #define CONNECTION_INFRA_BC	(STA_TYPE_BC | NETWORK_INFRA)
>   

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

* Re: [PATCH v3 1/2] mt76: mt7615: enable support for mesh
  2019-06-03  6:08 [PATCH v3 1/2] mt76: mt7615: enable support for mesh Ryder Lee
  2019-06-03  6:08 ` [PATCH v3 2/2] mt76: mt7615: fix slow performance when enable encryption Ryder Lee
  2019-06-06 10:11 ` [PATCH v3 1/2] mt76: mt7615: enable support for mesh Sebastian Gottschall
@ 2019-06-06 10:14 ` Sebastian Gottschall
  2019-06-06 15:18   ` Ryder Lee
  2 siblings, 1 reply; 10+ messages in thread
From: Sebastian Gottschall @ 2019-06-06 10:14 UTC (permalink / raw)
  To: Ryder Lee, Felix Fietkau, Lorenzo Bianconi
  Cc: Roy Luo, YF Luo, Yiwei Chung, Sean Wang, Chih-Min Chen,
	linux-wireless, linux-mediatek, linux-kernel

in addition you should take care about this problem which is raised up 
if SAE is used. since AES-CMAC required tid to be non zero

WARNING: CPU: 2 PID: 15324 at 
/home/seg/DEV/mt7621/src/router/private/compat-wireless-2017-09-03/net/mac80211/key.c:1096 
mt76_wcid_key_setup+0x58/0x9c [mt76]
Modules linked in: shortcut_fe gcm ghash_generic ctr gf128mul mt7615e 
mt76 mac80211 compat
CPU: 2 PID: 15324 Comm: wpa_supplicant Tainted: G        W 4.14.123 #106
Stack : 00000000 87c2d000 00000000 8007d8b4 80480000 80482b9c 80610000 
805a4390
         8057e2b4 854fb99c 87ed045c 805e4767 80578288 00000001 854fb940 
805e9f78
         00000000 00000000 80640000 00000000 81147bb8 00000584 00000007 
00000000
         00000000 80650000 80650000 20202020 80000000 00000000 80610000 
872b9fe0
         872a2b14 00000448 00000000 87c2d000 00000010 8022d660 00000008 
80640008
         ...
Call Trace:
[<800153e0>] show_stack+0x58/0x100
[<8042e83c>] dump_stack+0x9c/0xe0
[<800349f0>] __warn+0xe4/0x144
[<8003468c>] warn_slowpath_null+0x1c/0x30
[<872b9fe0>] mt76_wcid_key_setup+0x58/0x9c [mt76]
[<87611690>] mt7615_eeprom_init+0x7b4/0xe9c [mt7615e]
---[ end trace e24aeb4b542e0dea ]---

Am 03.06.2019 um 08:08 schrieb Ryder Lee:
> Enable NL80211_IFTYPE_MESH_POINT and update its path.
>
> Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
> ---
> Changes since v3 - fix a wrong expression
> Changes since v2 - remove unused definitions
> ---
>   drivers/net/wireless/mediatek/mt76/mt7615/init.c | 6 ++++++
>   drivers/net/wireless/mediatek/mt76/mt7615/main.c | 1 +
>   drivers/net/wireless/mediatek/mt76/mt7615/mcu.c  | 4 +++-
>   drivers/net/wireless/mediatek/mt76/mt7615/mcu.h  | 6 ------
>   4 files changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/init.c b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
> index 59f604f3161f..f860af6a42da 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7615/init.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
> @@ -133,6 +133,9 @@ static const struct ieee80211_iface_limit if_limits[] = {
>   	{
>   		.max = MT7615_MAX_INTERFACES,
>   		.types = BIT(NL80211_IFTYPE_AP) |
> +#ifdef CONFIG_MAC80211_MESH
> +			 BIT(NL80211_IFTYPE_MESH_POINT) |
> +#endif
>   			 BIT(NL80211_IFTYPE_STATION)
>   	}
>   };
> @@ -195,6 +198,9 @@ int mt7615_register_device(struct mt7615_dev *dev)
>   	dev->mt76.antenna_mask = 0xf;
>   
>   	wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
> +#ifdef CONFIG_MAC80211_MESH
> +				 BIT(NL80211_IFTYPE_MESH_POINT) |
> +#endif
>   				 BIT(NL80211_IFTYPE_AP);
>   
>   	ret = mt76_register_device(&dev->mt76, true, mt7615_rates,
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/main.c b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
> index b0bb7cc12385..585e67fa2728 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7615/main.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
> @@ -37,6 +37,7 @@ static int get_omac_idx(enum nl80211_iftype type, u32 mask)
>   
>   	switch (type) {
>   	case NL80211_IFTYPE_AP:
> +	case NL80211_IFTYPE_MESH_POINT:
>   		/* ap use hw bssid 0 and ext bssid */
>   		if (~mask & BIT(HW_BSSID_0))
>   			return HW_BSSID_0;
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
> index 43f70195244c..e82297048449 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
> @@ -754,6 +754,7 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev *dev,
>   
>   	switch (vif->type) {
>   	case NL80211_IFTYPE_AP:
> +	case NL80211_IFTYPE_MESH_POINT:
>   		tx_wlan_idx = mvif->sta.wcid.idx;
>   		conn_type = CONNECTION_INFRA_AP;
>   		break;
> @@ -968,7 +969,7 @@ int mt7615_mcu_add_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif,
>   		.rx_wtbl = {
>   			.tag = cpu_to_le16(WTBL_RX),
>   			.len = cpu_to_le16(sizeof(struct wtbl_rx)),
> -			.rca1 = vif->type != NL80211_IFTYPE_AP,
> +			.rca1 = vif->type == NL80211_IFTYPE_STATION,
>   			.rca2 = 1,
>   			.rv = 1,
>   		},
> @@ -1042,6 +1043,7 @@ static void sta_rec_convert_vif_type(enum nl80211_iftype type, u32 *conn_type)
>   {
>   	switch (type) {
>   	case NL80211_IFTYPE_AP:
> +	case NL80211_IFTYPE_MESH_POINT:
>   		if (conn_type)
>   			*conn_type = CONNECTION_INFRA_STA;
>   		break;
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
> index e96efb13fa4d..0915cb735699 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
> @@ -105,25 +105,19 @@ enum {
>   #define STA_TYPE_STA		BIT(0)
>   #define STA_TYPE_AP		BIT(1)
>   #define STA_TYPE_ADHOC		BIT(2)
> -#define STA_TYPE_TDLS		BIT(3)
>   #define STA_TYPE_WDS		BIT(4)
>   #define STA_TYPE_BC		BIT(5)
>   
>   #define NETWORK_INFRA		BIT(16)
>   #define NETWORK_P2P		BIT(17)
>   #define NETWORK_IBSS		BIT(18)
> -#define NETWORK_MESH		BIT(19)
> -#define NETWORK_BOW		BIT(20)
>   #define NETWORK_WDS		BIT(21)
>   
>   #define CONNECTION_INFRA_STA	(STA_TYPE_STA | NETWORK_INFRA)
>   #define CONNECTION_INFRA_AP	(STA_TYPE_AP | NETWORK_INFRA)
>   #define CONNECTION_P2P_GC	(STA_TYPE_STA | NETWORK_P2P)
>   #define CONNECTION_P2P_GO	(STA_TYPE_AP | NETWORK_P2P)
> -#define CONNECTION_MESH_STA	(STA_TYPE_STA | NETWORK_MESH)
> -#define CONNECTION_MESH_AP	(STA_TYPE_AP | NETWORK_MESH)
>   #define CONNECTION_IBSS_ADHOC	(STA_TYPE_ADHOC | NETWORK_IBSS)
> -#define CONNECTION_TDLS		(STA_TYPE_STA | NETWORK_INFRA | STA_TYPE_TDLS)
>   #define CONNECTION_WDS		(STA_TYPE_WDS | NETWORK_WDS)
>   #define CONNECTION_INFRA_BC	(STA_TYPE_BC | NETWORK_INFRA)
>   

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

* Re: [PATCH v3 1/2] mt76: mt7615: enable support for mesh
  2019-06-06 10:14 ` [PATCH v3 1/2] mt76: mt7615: enable support for mesh Sebastian Gottschall
@ 2019-06-06 15:18   ` Ryder Lee
  0 siblings, 0 replies; 10+ messages in thread
From: Ryder Lee @ 2019-06-06 15:18 UTC (permalink / raw)
  To: Sebastian Gottschall
  Cc: Felix Fietkau, Lorenzo Bianconi, Roy Luo, YF Luo, Yiwei Chung,
	Sean Wang, Chih-Min Chen, linux-wireless, linux-mediatek,
	linux-kernel

On Thu, 2019-06-06 at 12:14 +0200, Sebastian Gottschall wrote:
> in addition you should take care about this problem which is raised up 
> if SAE is used. since AES-CMAC required tid to be non zero
> 
> WARNING: CPU: 2 PID: 15324 at 
> /home/seg/DEV/mt7621/src/router/private/compat-wireless-2017-09-03/net/mac80211/key.c:1096 
> mt76_wcid_key_setup+0x58/0x9c [mt76]
> Modules linked in: shortcut_fe gcm ghash_generic ctr gf128mul mt7615e 
> mt76 mac80211 compat
> CPU: 2 PID: 15324 Comm: wpa_supplicant Tainted: G        W 4.14.123 #106
> Stack : 00000000 87c2d000 00000000 8007d8b4 80480000 80482b9c 80610000 
> 805a4390
>          8057e2b4 854fb99c 87ed045c 805e4767 80578288 00000001 854fb940 
> 805e9f78
>          00000000 00000000 80640000 00000000 81147bb8 00000584 00000007 
> 00000000
>          00000000 80650000 80650000 20202020 80000000 00000000 80610000 
> 872b9fe0
>          872a2b14 00000448 00000000 87c2d000 00000010 8022d660 00000008 
> 80640008
>          ...
> Call Trace:
> [<800153e0>] show_stack+0x58/0x100
> [<8042e83c>] dump_stack+0x9c/0xe0
> [<800349f0>] __warn+0xe4/0x144
> [<8003468c>] warn_slowpath_null+0x1c/0x30
> [<872b9fe0>] mt76_wcid_key_setup+0x58/0x9c [mt76]
> [<87611690>] mt7615_eeprom_init+0x7b4/0xe9c [mt7615e]
> ---[ end trace e24aeb4b542e0dea ]---

This is fixed by Lorenzo's patch -
https://patchwork.kernel.org/patch/10976191/

Thanks.
Ryder


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

* Re: [PATCH v3 1/2] mt76: mt7615: enable support for mesh
  2019-06-06 10:11 ` [PATCH v3 1/2] mt76: mt7615: enable support for mesh Sebastian Gottschall
@ 2019-06-06 16:19   ` Lorenzo Bianconi
  2019-06-07  6:03     ` Sebastian Gottschall
  2019-06-09 14:36     ` Sebastian Gottschall
  0 siblings, 2 replies; 10+ messages in thread
From: Lorenzo Bianconi @ 2019-06-06 16:19 UTC (permalink / raw)
  To: Sebastian Gottschall
  Cc: Ryder Lee, Felix Fietkau, Roy Luo, YF Luo, Yiwei Chung,
	Sean Wang, Chih-Min Chen, linux-wireless, linux-mediatek,
	Linux Kernel Mailing List

>
> i tested your patch against a qca 9984 chipset using SAE and without
> encryption. both did not work. the devices are connecting, but no data
> connection is possible

Hi Sebastian,

I tested Ryder's patch using mt76x2 as mesh peer and it works fine for me.
Could you please provide some more info?

Regards,
Lorenzo

>
>
> Sebastian
>
> Am 03.06.2019 um 08:08 schrieb Ryder Lee:
> > Enable NL80211_IFTYPE_MESH_POINT and update its path.
> >
> > Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
> > ---
> > Changes since v3 - fix a wrong expression
> > Changes since v2 - remove unused definitions
> > ---
> >   drivers/net/wireless/mediatek/mt76/mt7615/init.c | 6 ++++++
> >   drivers/net/wireless/mediatek/mt76/mt7615/main.c | 1 +
> >   drivers/net/wireless/mediatek/mt76/mt7615/mcu.c  | 4 +++-
> >   drivers/net/wireless/mediatek/mt76/mt7615/mcu.h  | 6 ------
> >   4 files changed, 10 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/init.c b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
> > index 59f604f3161f..f860af6a42da 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7615/init.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
> > @@ -133,6 +133,9 @@ static const struct ieee80211_iface_limit if_limits[] = {
> >       {
> >               .max = MT7615_MAX_INTERFACES,
> >               .types = BIT(NL80211_IFTYPE_AP) |
> > +#ifdef CONFIG_MAC80211_MESH
> > +                      BIT(NL80211_IFTYPE_MESH_POINT) |
> > +#endif
> >                        BIT(NL80211_IFTYPE_STATION)
> >       }
> >   };
> > @@ -195,6 +198,9 @@ int mt7615_register_device(struct mt7615_dev *dev)
> >       dev->mt76.antenna_mask = 0xf;
> >
> >       wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
> > +#ifdef CONFIG_MAC80211_MESH
> > +                              BIT(NL80211_IFTYPE_MESH_POINT) |
> > +#endif
> >                                BIT(NL80211_IFTYPE_AP);
> >
> >       ret = mt76_register_device(&dev->mt76, true, mt7615_rates,
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/main.c b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
> > index b0bb7cc12385..585e67fa2728 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7615/main.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
> > @@ -37,6 +37,7 @@ static int get_omac_idx(enum nl80211_iftype type, u32 mask)
> >
> >       switch (type) {
> >       case NL80211_IFTYPE_AP:
> > +     case NL80211_IFTYPE_MESH_POINT:
> >               /* ap use hw bssid 0 and ext bssid */
> >               if (~mask & BIT(HW_BSSID_0))
> >                       return HW_BSSID_0;
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
> > index 43f70195244c..e82297048449 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
> > @@ -754,6 +754,7 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev *dev,
> >
> >       switch (vif->type) {
> >       case NL80211_IFTYPE_AP:
> > +     case NL80211_IFTYPE_MESH_POINT:
> >               tx_wlan_idx = mvif->sta.wcid.idx;
> >               conn_type = CONNECTION_INFRA_AP;
> >               break;
> > @@ -968,7 +969,7 @@ int mt7615_mcu_add_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif,
> >               .rx_wtbl = {
> >                       .tag = cpu_to_le16(WTBL_RX),
> >                       .len = cpu_to_le16(sizeof(struct wtbl_rx)),
> > -                     .rca1 = vif->type != NL80211_IFTYPE_AP,
> > +                     .rca1 = vif->type == NL80211_IFTYPE_STATION,
> >                       .rca2 = 1,
> >                       .rv = 1,
> >               },
> > @@ -1042,6 +1043,7 @@ static void sta_rec_convert_vif_type(enum nl80211_iftype type, u32 *conn_type)
> >   {
> >       switch (type) {
> >       case NL80211_IFTYPE_AP:
> > +     case NL80211_IFTYPE_MESH_POINT:
> >               if (conn_type)
> >                       *conn_type = CONNECTION_INFRA_STA;
> >               break;
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
> > index e96efb13fa4d..0915cb735699 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
> > @@ -105,25 +105,19 @@ enum {
> >   #define STA_TYPE_STA                BIT(0)
> >   #define STA_TYPE_AP         BIT(1)
> >   #define STA_TYPE_ADHOC              BIT(2)
> > -#define STA_TYPE_TDLS                BIT(3)
> >   #define STA_TYPE_WDS                BIT(4)
> >   #define STA_TYPE_BC         BIT(5)
> >
> >   #define NETWORK_INFRA               BIT(16)
> >   #define NETWORK_P2P         BIT(17)
> >   #define NETWORK_IBSS                BIT(18)
> > -#define NETWORK_MESH         BIT(19)
> > -#define NETWORK_BOW          BIT(20)
> >   #define NETWORK_WDS         BIT(21)
> >
> >   #define CONNECTION_INFRA_STA        (STA_TYPE_STA | NETWORK_INFRA)
> >   #define CONNECTION_INFRA_AP (STA_TYPE_AP | NETWORK_INFRA)
> >   #define CONNECTION_P2P_GC   (STA_TYPE_STA | NETWORK_P2P)
> >   #define CONNECTION_P2P_GO   (STA_TYPE_AP | NETWORK_P2P)
> > -#define CONNECTION_MESH_STA  (STA_TYPE_STA | NETWORK_MESH)
> > -#define CONNECTION_MESH_AP   (STA_TYPE_AP | NETWORK_MESH)
> >   #define CONNECTION_IBSS_ADHOC       (STA_TYPE_ADHOC | NETWORK_IBSS)
> > -#define CONNECTION_TDLS              (STA_TYPE_STA | NETWORK_INFRA | STA_TYPE_TDLS)
> >   #define CONNECTION_WDS              (STA_TYPE_WDS | NETWORK_WDS)
> >   #define CONNECTION_INFRA_BC (STA_TYPE_BC | NETWORK_INFRA)
> >

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

* Re: [PATCH v3 1/2] mt76: mt7615: enable support for mesh
  2019-06-06 16:19   ` Lorenzo Bianconi
@ 2019-06-07  6:03     ` Sebastian Gottschall
  2019-06-09 14:36     ` Sebastian Gottschall
  1 sibling, 0 replies; 10+ messages in thread
From: Sebastian Gottschall @ 2019-06-07  6:03 UTC (permalink / raw)
  To: Lorenzo Bianconi
  Cc: Ryder Lee, Felix Fietkau, Roy Luo, YF Luo, Yiwei Chung,
	Sean Wang, Chih-Min Chen, linux-wireless, linux-mediatek,
	Linux Kernel Mailing List


Am 06.06.2019 um 18:19 schrieb Lorenzo Bianconi:
>> i tested your patch against a qca 9984 chipset using SAE and without
>> encryption. both did not work. the devices are connecting, but no data
>> connection is possible
> Hi Sebastian,
>
> I tested Ryder's patch using mt76x2 as mesh peer and it works fine for me.
> Could you please provide some more info?

the peer was a QCA9984 chipset running ath10k. the following wpa 
supplicant config was used
and encryption clearly cannot work since mt76_wcid_key_setup does 
trigger a bug  since ieeee_get_key_rx_seq does not accept tid as 
argument != 0 for aes_cmac (which is used for sae)
consider the same setup works with ath5k, 9k and 10k perfect with no 
issues. in my test setup i also connected now 3 devices. 2 9984 and 1 
mt7615 to ensure that all is working. the qca 9984 devices can ping each 
other, only the mt7615 does not work. the setups are all identical 
(except for ips)

fast_reauth=1
eapol_version=1
sae_groups=19 20 21
network={
         disable_ht40=1
         ssid="mt7615-24"
         mode=5
         frequency=2452
         htmode=HT20
         scan_ssid=1
         key_mgmt=SAE
         ieee80211w=2
         noscan=1
         pairwise=CCMP
         group=CCMP
         proto=RSN
         sae_password="12345678"
}

and the bug again

WARNING: CPU: 2 PID: 22086 at 
/home/seg/DEV/mt7621/src/router/private/compat-wireless-2017-09-03/net/mac80211/key.c:1096 
mt76_wcid_key_setup+0x58/0x9c [mt76]
Modules linked in: shortcut_fe gcm ghash_generic ctr gf128mul mt7615e 
mt76 mac80211 compat
CPU: 2 PID: 22086 Comm: wpa_supplicant Tainted: G        W 4.14.123 #106
Stack : 00000000 87c2d000 00000000 8007d8b4 80480000 80482b9c 80610000 
805a4390
         8057e2b4 87c4b99c 870a59dc 805e4767 80578288 00000001 87c4b940 
805e9f78
         00000000 00000000 80640000 00000000 81147bb8 000006ce 00000007 
00000000
         00000000 80650000 80650000 20202020 80000000 00000000 80610000 
872b9fe0
         872a2b14 00000448 00000000 87c2d000 00000010 8022d660 00000008 
80640008
         ...
Call Trace:
[<800153e0>] show_stack+0x58/0x100
[<8042e83c>] dump_stack+0x9c/0xe0
[<800349f0>] __warn+0xe4/0x144
[<8003468c>] warn_slowpath_null+0x1c/0x30
[<872b9fe0>] mt76_wcid_key_setup+0x58/0x9c [mt76]
[<87611690>] mt7615_eeprom_init+0x7b4/0xe9c [mt7615e]
---[ end trace e24aeb4b542e0df9 ]---


>
> Regards,
> Lorenzo
>
>>
>> Sebastian
>>
>> Am 03.06.2019 um 08:08 schrieb Ryder Lee:
>>> Enable NL80211_IFTYPE_MESH_POINT and update its path.
>>>
>>> Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
>>> ---
>>> Changes since v3 - fix a wrong expression
>>> Changes since v2 - remove unused definitions
>>> ---
>>>    drivers/net/wireless/mediatek/mt76/mt7615/init.c | 6 ++++++
>>>    drivers/net/wireless/mediatek/mt76/mt7615/main.c | 1 +
>>>    drivers/net/wireless/mediatek/mt76/mt7615/mcu.c  | 4 +++-
>>>    drivers/net/wireless/mediatek/mt76/mt7615/mcu.h  | 6 ------
>>>    4 files changed, 10 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/init.c b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
>>> index 59f604f3161f..f860af6a42da 100644
>>> --- a/drivers/net/wireless/mediatek/mt76/mt7615/init.c
>>> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
>>> @@ -133,6 +133,9 @@ static const struct ieee80211_iface_limit if_limits[] = {
>>>        {
>>>                .max = MT7615_MAX_INTERFACES,
>>>                .types = BIT(NL80211_IFTYPE_AP) |
>>> +#ifdef CONFIG_MAC80211_MESH
>>> +                      BIT(NL80211_IFTYPE_MESH_POINT) |
>>> +#endif
>>>                         BIT(NL80211_IFTYPE_STATION)
>>>        }
>>>    };
>>> @@ -195,6 +198,9 @@ int mt7615_register_device(struct mt7615_dev *dev)
>>>        dev->mt76.antenna_mask = 0xf;
>>>
>>>        wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
>>> +#ifdef CONFIG_MAC80211_MESH
>>> +                              BIT(NL80211_IFTYPE_MESH_POINT) |
>>> +#endif
>>>                                 BIT(NL80211_IFTYPE_AP);
>>>
>>>        ret = mt76_register_device(&dev->mt76, true, mt7615_rates,
>>> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/main.c b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
>>> index b0bb7cc12385..585e67fa2728 100644
>>> --- a/drivers/net/wireless/mediatek/mt76/mt7615/main.c
>>> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
>>> @@ -37,6 +37,7 @@ static int get_omac_idx(enum nl80211_iftype type, u32 mask)
>>>
>>>        switch (type) {
>>>        case NL80211_IFTYPE_AP:
>>> +     case NL80211_IFTYPE_MESH_POINT:
>>>                /* ap use hw bssid 0 and ext bssid */
>>>                if (~mask & BIT(HW_BSSID_0))
>>>                        return HW_BSSID_0;
>>> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
>>> index 43f70195244c..e82297048449 100644
>>> --- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
>>> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
>>> @@ -754,6 +754,7 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev *dev,
>>>
>>>        switch (vif->type) {
>>>        case NL80211_IFTYPE_AP:
>>> +     case NL80211_IFTYPE_MESH_POINT:
>>>                tx_wlan_idx = mvif->sta.wcid.idx;
>>>                conn_type = CONNECTION_INFRA_AP;
>>>                break;
>>> @@ -968,7 +969,7 @@ int mt7615_mcu_add_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif,
>>>                .rx_wtbl = {
>>>                        .tag = cpu_to_le16(WTBL_RX),
>>>                        .len = cpu_to_le16(sizeof(struct wtbl_rx)),
>>> -                     .rca1 = vif->type != NL80211_IFTYPE_AP,
>>> +                     .rca1 = vif->type == NL80211_IFTYPE_STATION,
>>>                        .rca2 = 1,
>>>                        .rv = 1,
>>>                },
>>> @@ -1042,6 +1043,7 @@ static void sta_rec_convert_vif_type(enum nl80211_iftype type, u32 *conn_type)
>>>    {
>>>        switch (type) {
>>>        case NL80211_IFTYPE_AP:
>>> +     case NL80211_IFTYPE_MESH_POINT:
>>>                if (conn_type)
>>>                        *conn_type = CONNECTION_INFRA_STA;
>>>                break;
>>> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
>>> index e96efb13fa4d..0915cb735699 100644
>>> --- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
>>> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
>>> @@ -105,25 +105,19 @@ enum {
>>>    #define STA_TYPE_STA                BIT(0)
>>>    #define STA_TYPE_AP         BIT(1)
>>>    #define STA_TYPE_ADHOC              BIT(2)
>>> -#define STA_TYPE_TDLS                BIT(3)
>>>    #define STA_TYPE_WDS                BIT(4)
>>>    #define STA_TYPE_BC         BIT(5)
>>>
>>>    #define NETWORK_INFRA               BIT(16)
>>>    #define NETWORK_P2P         BIT(17)
>>>    #define NETWORK_IBSS                BIT(18)
>>> -#define NETWORK_MESH         BIT(19)
>>> -#define NETWORK_BOW          BIT(20)
>>>    #define NETWORK_WDS         BIT(21)
>>>
>>>    #define CONNECTION_INFRA_STA        (STA_TYPE_STA | NETWORK_INFRA)
>>>    #define CONNECTION_INFRA_AP (STA_TYPE_AP | NETWORK_INFRA)
>>>    #define CONNECTION_P2P_GC   (STA_TYPE_STA | NETWORK_P2P)
>>>    #define CONNECTION_P2P_GO   (STA_TYPE_AP | NETWORK_P2P)
>>> -#define CONNECTION_MESH_STA  (STA_TYPE_STA | NETWORK_MESH)
>>> -#define CONNECTION_MESH_AP   (STA_TYPE_AP | NETWORK_MESH)
>>>    #define CONNECTION_IBSS_ADHOC       (STA_TYPE_ADHOC | NETWORK_IBSS)
>>> -#define CONNECTION_TDLS              (STA_TYPE_STA | NETWORK_INFRA | STA_TYPE_TDLS)
>>>    #define CONNECTION_WDS              (STA_TYPE_WDS | NETWORK_WDS)
>>>    #define CONNECTION_INFRA_BC (STA_TYPE_BC | NETWORK_INFRA)
>>>

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

* Re: [PATCH v3 2/2] mt76: mt7615: fix slow performance when enable encryption
  2019-06-03  6:08 ` [PATCH v3 2/2] mt76: mt7615: fix slow performance when enable encryption Ryder Lee
@ 2019-06-07 17:02   ` Felix Fietkau
  0 siblings, 0 replies; 10+ messages in thread
From: Felix Fietkau @ 2019-06-07 17:02 UTC (permalink / raw)
  To: Ryder Lee, Lorenzo Bianconi
  Cc: Roy Luo, YF Luo, Yiwei Chung, Sean Wang, Chih-Min Chen,
	linux-wireless, linux-mediatek, linux-kernel

On 2019-06-03 08:08, Ryder Lee wrote:
> Fix wrong WCID assignment and add RKV (RX Key of this entry is valid)
> flag to check if peer uses the same configuration with previous
> handshaking.
> 
> If the configuration is mismatch, WTBL indicates a “cipher mismatch”
> to stop SEC decryption to prevent the packet from damage.
> 
> Suggested-by: YF Luo <yf.luo@mediatek.com>
> Suggested-by: Yiwei Chung <yiwei.chung@mediatek.com>
> Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>

Applied, thanks.

- Felix

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

* Re: [PATCH v3 1/2] mt76: mt7615: enable support for mesh
  2019-06-06 16:19   ` Lorenzo Bianconi
  2019-06-07  6:03     ` Sebastian Gottschall
@ 2019-06-09 14:36     ` Sebastian Gottschall
  2019-06-10  5:11       ` possible fix for broken cmac crypto support Sebastian Gottschall
  1 sibling, 1 reply; 10+ messages in thread
From: Sebastian Gottschall @ 2019-06-09 14:36 UTC (permalink / raw)
  To: Lorenzo Bianconi
  Cc: Ryder Lee, Felix Fietkau, Roy Luo, YF Luo, Yiwei Chung,
	Sean Wang, Chih-Min Chen, linux-wireless, linux-mediatek,
	Linux Kernel Mailing List

by the way. this big fat kernel warning exists in all operation modes 
unless anything else but aes-128 ccmp is used. since the chipset is 
capable of doing gcmp etc. as well
it would be nice if this issue can be fixed. otherwise encryption 
support can be defined as "broken" for mt7615

Am 06.06.2019 um 18:19 schrieb Lorenzo Bianconi:
>> i tested your patch against a qca 9984 chipset using SAE and without
>> encryption. both did not work. the devices are connecting, but no data
>> connection is possible
> Hi Sebastian,
>
> I tested Ryder's patch using mt76x2 as mesh peer and it works fine for me.
> Could you please provide some more info?
>
> Regards,
> Lorenzo
>
>>
>> Sebastian
>>
>> Am 03.06.2019 um 08:08 schrieb Ryder Lee:
>>> Enable NL80211_IFTYPE_MESH_POINT and update its path.
>>>
>>> Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
>>> ---
>>> Changes since v3 - fix a wrong expression
>>> Changes since v2 - remove unused definitions
>>> ---
>>>    drivers/net/wireless/mediatek/mt76/mt7615/init.c | 6 ++++++
>>>    drivers/net/wireless/mediatek/mt76/mt7615/main.c | 1 +
>>>    drivers/net/wireless/mediatek/mt76/mt7615/mcu.c  | 4 +++-
>>>    drivers/net/wireless/mediatek/mt76/mt7615/mcu.h  | 6 ------
>>>    4 files changed, 10 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/init.c b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
>>> index 59f604f3161f..f860af6a42da 100644
>>> --- a/drivers/net/wireless/mediatek/mt76/mt7615/init.c
>>> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
>>> @@ -133,6 +133,9 @@ static const struct ieee80211_iface_limit if_limits[] = {
>>>        {
>>>                .max = MT7615_MAX_INTERFACES,
>>>                .types = BIT(NL80211_IFTYPE_AP) |
>>> +#ifdef CONFIG_MAC80211_MESH
>>> +                      BIT(NL80211_IFTYPE_MESH_POINT) |
>>> +#endif
>>>                         BIT(NL80211_IFTYPE_STATION)
>>>        }
>>>    };
>>> @@ -195,6 +198,9 @@ int mt7615_register_device(struct mt7615_dev *dev)
>>>        dev->mt76.antenna_mask = 0xf;
>>>
>>>        wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
>>> +#ifdef CONFIG_MAC80211_MESH
>>> +                              BIT(NL80211_IFTYPE_MESH_POINT) |
>>> +#endif
>>>                                 BIT(NL80211_IFTYPE_AP);
>>>
>>>        ret = mt76_register_device(&dev->mt76, true, mt7615_rates,
>>> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/main.c b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
>>> index b0bb7cc12385..585e67fa2728 100644
>>> --- a/drivers/net/wireless/mediatek/mt76/mt7615/main.c
>>> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
>>> @@ -37,6 +37,7 @@ static int get_omac_idx(enum nl80211_iftype type, u32 mask)
>>>
>>>        switch (type) {
>>>        case NL80211_IFTYPE_AP:
>>> +     case NL80211_IFTYPE_MESH_POINT:
>>>                /* ap use hw bssid 0 and ext bssid */
>>>                if (~mask & BIT(HW_BSSID_0))
>>>                        return HW_BSSID_0;
>>> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
>>> index 43f70195244c..e82297048449 100644
>>> --- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
>>> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
>>> @@ -754,6 +754,7 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev *dev,
>>>
>>>        switch (vif->type) {
>>>        case NL80211_IFTYPE_AP:
>>> +     case NL80211_IFTYPE_MESH_POINT:
>>>                tx_wlan_idx = mvif->sta.wcid.idx;
>>>                conn_type = CONNECTION_INFRA_AP;
>>>                break;
>>> @@ -968,7 +969,7 @@ int mt7615_mcu_add_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif,
>>>                .rx_wtbl = {
>>>                        .tag = cpu_to_le16(WTBL_RX),
>>>                        .len = cpu_to_le16(sizeof(struct wtbl_rx)),
>>> -                     .rca1 = vif->type != NL80211_IFTYPE_AP,
>>> +                     .rca1 = vif->type == NL80211_IFTYPE_STATION,
>>>                        .rca2 = 1,
>>>                        .rv = 1,
>>>                },
>>> @@ -1042,6 +1043,7 @@ static void sta_rec_convert_vif_type(enum nl80211_iftype type, u32 *conn_type)
>>>    {
>>>        switch (type) {
>>>        case NL80211_IFTYPE_AP:
>>> +     case NL80211_IFTYPE_MESH_POINT:
>>>                if (conn_type)
>>>                        *conn_type = CONNECTION_INFRA_STA;
>>>                break;
>>> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
>>> index e96efb13fa4d..0915cb735699 100644
>>> --- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
>>> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
>>> @@ -105,25 +105,19 @@ enum {
>>>    #define STA_TYPE_STA                BIT(0)
>>>    #define STA_TYPE_AP         BIT(1)
>>>    #define STA_TYPE_ADHOC              BIT(2)
>>> -#define STA_TYPE_TDLS                BIT(3)
>>>    #define STA_TYPE_WDS                BIT(4)
>>>    #define STA_TYPE_BC         BIT(5)
>>>
>>>    #define NETWORK_INFRA               BIT(16)
>>>    #define NETWORK_P2P         BIT(17)
>>>    #define NETWORK_IBSS                BIT(18)
>>> -#define NETWORK_MESH         BIT(19)
>>> -#define NETWORK_BOW          BIT(20)
>>>    #define NETWORK_WDS         BIT(21)
>>>
>>>    #define CONNECTION_INFRA_STA        (STA_TYPE_STA | NETWORK_INFRA)
>>>    #define CONNECTION_INFRA_AP (STA_TYPE_AP | NETWORK_INFRA)
>>>    #define CONNECTION_P2P_GC   (STA_TYPE_STA | NETWORK_P2P)
>>>    #define CONNECTION_P2P_GO   (STA_TYPE_AP | NETWORK_P2P)
>>> -#define CONNECTION_MESH_STA  (STA_TYPE_STA | NETWORK_MESH)
>>> -#define CONNECTION_MESH_AP   (STA_TYPE_AP | NETWORK_MESH)
>>>    #define CONNECTION_IBSS_ADHOC       (STA_TYPE_ADHOC | NETWORK_IBSS)
>>> -#define CONNECTION_TDLS              (STA_TYPE_STA | NETWORK_INFRA | STA_TYPE_TDLS)
>>>    #define CONNECTION_WDS              (STA_TYPE_WDS | NETWORK_WDS)
>>>    #define CONNECTION_INFRA_BC (STA_TYPE_BC | NETWORK_INFRA)
>>>

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

* possible fix for broken cmac crypto support
  2019-06-09 14:36     ` Sebastian Gottschall
@ 2019-06-10  5:11       ` Sebastian Gottschall
  0 siblings, 0 replies; 10+ messages in thread
From: Sebastian Gottschall @ 2019-06-10  5:11 UTC (permalink / raw)
  To: Lorenzo Bianconi
  Cc: Ryder Lee, Felix Fietkau, Roy Luo, YF Luo, Yiwei Chung,
	Sean Wang, Chih-Min Chen, linux-wireless, linux-mediatek,
	Linux Kernel Mailing List

this is no real patch for this mailing list since i havent cloned yet a 
git tree. take it as a hint
this fixes the BUG WARN if SAE encryption is used (mandatory for mesh / 
802.11s crypto)
that will not fix that mesh is not working (likelly just with other 
vendors), but it will fix crypto at least

Sebastian

Index: main.c
===================================================================
--- main.c      (revision 4584)
+++ main.c      (revision 4585)
@@ -180,6 +180,20 @@ static int mt7615_set_key(struct ieee80211_hw *hw,
             !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
                 return -EOPNOTSUPP;

+       switch (key->cipher) {
+       case WLAN_CIPHER_SUITE_WEP40:
+       case WLAN_CIPHER_SUITE_WEP104:
+       case WLAN_CIPHER_SUITE_TKIP:
+       case WLAN_CIPHER_SUITE_CCMP:
+       case WLAN_CIPHER_SUITE_CCMP_256:
+       case WLAN_CIPHER_SUITE_GCMP:
+       case WLAN_CIPHER_SUITE_GCMP_256:
+       case WLAN_CIPHER_SUITE_SMS4:
+               break;
+       default:
+               return -EOPNOTSUPP;
+       }
+
         if (cmd == SET_KEY) {
                 key->hw_key_idx = wcid->idx;
                 wcid->hw_key_idx = idx;

Am 09.06.2019 um 16:36 schrieb Sebastian Gottschall:
> by the way. this big fat kernel warning exists in all operation modes 
> unless anything else but aes-128 ccmp is used. since the chipset is 
> capable of doing gcmp etc. as well
> it would be nice if this issue can be fixed. otherwise encryption 
> support can be defined as "broken" for mt7615
>
> Am 06.06.2019 um 18:19 schrieb Lorenzo Bianconi:
>>> i tested your patch against a qca 9984 chipset using SAE and without
>>> encryption. both did not work. the devices are connecting, but no data
>>> connection is possible
>> Hi Sebastian,
>>
>> I tested Ryder's patch using mt76x2 as mesh peer and it works fine 
>> for me.
>> Could you please provide some more info?
>>
>> Regards,
>> Lorenzo
>>
>>>
>>> Sebastian
>>>
>>> Am 03.06.2019 um 08:08 schrieb Ryder Lee:
>>>> Enable NL80211_IFTYPE_MESH_POINT and update its path.
>>>>
>>>> Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
>>>> ---
>>>> Changes since v3 - fix a wrong expression
>>>> Changes since v2 - remove unused definitions
>>>> ---
>>>>    drivers/net/wireless/mediatek/mt76/mt7615/init.c | 6 ++++++
>>>>    drivers/net/wireless/mediatek/mt76/mt7615/main.c | 1 +
>>>>    drivers/net/wireless/mediatek/mt76/mt7615/mcu.c  | 4 +++-
>>>>    drivers/net/wireless/mediatek/mt76/mt7615/mcu.h  | 6 ------
>>>>    4 files changed, 10 insertions(+), 7 deletions(-)
>>>>
>>>> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/init.c 
>>>> b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
>>>> index 59f604f3161f..f860af6a42da 100644
>>>> --- a/drivers/net/wireless/mediatek/mt76/mt7615/init.c
>>>> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
>>>> @@ -133,6 +133,9 @@ static const struct ieee80211_iface_limit 
>>>> if_limits[] = {
>>>>        {
>>>>                .max = MT7615_MAX_INTERFACES,
>>>>                .types = BIT(NL80211_IFTYPE_AP) |
>>>> +#ifdef CONFIG_MAC80211_MESH
>>>> +                      BIT(NL80211_IFTYPE_MESH_POINT) |
>>>> +#endif
>>>>                         BIT(NL80211_IFTYPE_STATION)
>>>>        }
>>>>    };
>>>> @@ -195,6 +198,9 @@ int mt7615_register_device(struct mt7615_dev *dev)
>>>>        dev->mt76.antenna_mask = 0xf;
>>>>
>>>>        wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
>>>> +#ifdef CONFIG_MAC80211_MESH
>>>> + BIT(NL80211_IFTYPE_MESH_POINT) |
>>>> +#endif
>>>>                                 BIT(NL80211_IFTYPE_AP);
>>>>
>>>>        ret = mt76_register_device(&dev->mt76, true, mt7615_rates,
>>>> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/main.c 
>>>> b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
>>>> index b0bb7cc12385..585e67fa2728 100644
>>>> --- a/drivers/net/wireless/mediatek/mt76/mt7615/main.c
>>>> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
>>>> @@ -37,6 +37,7 @@ static int get_omac_idx(enum nl80211_iftype type, 
>>>> u32 mask)
>>>>
>>>>        switch (type) {
>>>>        case NL80211_IFTYPE_AP:
>>>> +     case NL80211_IFTYPE_MESH_POINT:
>>>>                /* ap use hw bssid 0 and ext bssid */
>>>>                if (~mask & BIT(HW_BSSID_0))
>>>>                        return HW_BSSID_0;
>>>> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c 
>>>> b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
>>>> index 43f70195244c..e82297048449 100644
>>>> --- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
>>>> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
>>>> @@ -754,6 +754,7 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev 
>>>> *dev,
>>>>
>>>>        switch (vif->type) {
>>>>        case NL80211_IFTYPE_AP:
>>>> +     case NL80211_IFTYPE_MESH_POINT:
>>>>                tx_wlan_idx = mvif->sta.wcid.idx;
>>>>                conn_type = CONNECTION_INFRA_AP;
>>>>                break;
>>>> @@ -968,7 +969,7 @@ int mt7615_mcu_add_wtbl(struct mt7615_dev *dev, 
>>>> struct ieee80211_vif *vif,
>>>>                .rx_wtbl = {
>>>>                        .tag = cpu_to_le16(WTBL_RX),
>>>>                        .len = cpu_to_le16(sizeof(struct wtbl_rx)),
>>>> -                     .rca1 = vif->type != NL80211_IFTYPE_AP,
>>>> +                     .rca1 = vif->type == NL80211_IFTYPE_STATION,
>>>>                        .rca2 = 1,
>>>>                        .rv = 1,
>>>>                },
>>>> @@ -1042,6 +1043,7 @@ static void sta_rec_convert_vif_type(enum 
>>>> nl80211_iftype type, u32 *conn_type)
>>>>    {
>>>>        switch (type) {
>>>>        case NL80211_IFTYPE_AP:
>>>> +     case NL80211_IFTYPE_MESH_POINT:
>>>>                if (conn_type)
>>>>                        *conn_type = CONNECTION_INFRA_STA;
>>>>                break;
>>>> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h 
>>>> b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
>>>> index e96efb13fa4d..0915cb735699 100644
>>>> --- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
>>>> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
>>>> @@ -105,25 +105,19 @@ enum {
>>>>    #define STA_TYPE_STA                BIT(0)
>>>>    #define STA_TYPE_AP         BIT(1)
>>>>    #define STA_TYPE_ADHOC              BIT(2)
>>>> -#define STA_TYPE_TDLS                BIT(3)
>>>>    #define STA_TYPE_WDS                BIT(4)
>>>>    #define STA_TYPE_BC         BIT(5)
>>>>
>>>>    #define NETWORK_INFRA               BIT(16)
>>>>    #define NETWORK_P2P         BIT(17)
>>>>    #define NETWORK_IBSS                BIT(18)
>>>> -#define NETWORK_MESH         BIT(19)
>>>> -#define NETWORK_BOW          BIT(20)
>>>>    #define NETWORK_WDS         BIT(21)
>>>>
>>>>    #define CONNECTION_INFRA_STA        (STA_TYPE_STA | NETWORK_INFRA)
>>>>    #define CONNECTION_INFRA_AP (STA_TYPE_AP | NETWORK_INFRA)
>>>>    #define CONNECTION_P2P_GC   (STA_TYPE_STA | NETWORK_P2P)
>>>>    #define CONNECTION_P2P_GO   (STA_TYPE_AP | NETWORK_P2P)
>>>> -#define CONNECTION_MESH_STA  (STA_TYPE_STA | NETWORK_MESH)
>>>> -#define CONNECTION_MESH_AP   (STA_TYPE_AP | NETWORK_MESH)
>>>>    #define CONNECTION_IBSS_ADHOC       (STA_TYPE_ADHOC | NETWORK_IBSS)
>>>> -#define CONNECTION_TDLS              (STA_TYPE_STA | NETWORK_INFRA 
>>>> | STA_TYPE_TDLS)
>>>>    #define CONNECTION_WDS              (STA_TYPE_WDS | NETWORK_WDS)
>>>>    #define CONNECTION_INFRA_BC (STA_TYPE_BC | NETWORK_INFRA)
>>>>
>

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

end of thread, other threads:[~2019-06-10  5:11 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-03  6:08 [PATCH v3 1/2] mt76: mt7615: enable support for mesh Ryder Lee
2019-06-03  6:08 ` [PATCH v3 2/2] mt76: mt7615: fix slow performance when enable encryption Ryder Lee
2019-06-07 17:02   ` Felix Fietkau
2019-06-06 10:11 ` [PATCH v3 1/2] mt76: mt7615: enable support for mesh Sebastian Gottschall
2019-06-06 16:19   ` Lorenzo Bianconi
2019-06-07  6:03     ` Sebastian Gottschall
2019-06-09 14:36     ` Sebastian Gottschall
2019-06-10  5:11       ` possible fix for broken cmac crypto support Sebastian Gottschall
2019-06-06 10:14 ` [PATCH v3 1/2] mt76: mt7615: enable support for mesh Sebastian Gottschall
2019-06-06 15:18   ` Ryder Lee

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).