[LEDE-DEV] hostapd: set mcast_rate in mesh mode

Submitted by Sven Eckelmann on May 11, 2017, 6:56 a.m.

Details

Message ID 20170511065650.29522-1-sven.eckelmann@openmesh.com
State New
Delegated to: Felix Fietkau
Headers show

Commit Message

Sven Eckelmann May 11, 2017, 6:56 a.m.
From: Sven Eckelmann <sven.eckelmann@open-mesh.com>

The wpa_supplicant code for IBSS allows to set the mcast rate. It is
recommended to increase this value from 1 or 6 Mbit/s to something higher
when using a mesh protocol on top which uses the multicast packet loss as
indicator for the link quality.

This setting was unfortunately not applied for mesh mode. But it would be
beneficial when wpa_supplicant would behave similar to IBSS mode and set
this argument during mesh join like authsae already does. At least it is
helpful for companies/projects which are currently switching to 802.11s
(without mesh_fwding and with mesh_ttl set to 1) as replacement for IBSS
because newer drivers seem to support 802.11s but not IBSS anymore.

Signed-off-by: Sven Eckelmann <sven.eckelmann@openmesh.com>
Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
---
 .../patches/463-add-mcast_rate-to-11s.patch        | 68 ++++++++++++++++++++++
 1 file changed, 68 insertions(+)
 create mode 100644 package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch

Comments

Daniel Golle July 16, 2017, 8:45 p.m.
On Thu, May 11, 2017 at 08:56:50AM +0200, Sven Eckelmann wrote:
> From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
> 
> The wpa_supplicant code for IBSS allows to set the mcast rate. It is
> recommended to increase this value from 1 or 6 Mbit/s to something higher
> when using a mesh protocol on top which uses the multicast packet loss as
> indicator for the link quality.
> 
> This setting was unfortunately not applied for mesh mode. But it would be
> beneficial when wpa_supplicant would behave similar to IBSS mode and set
> this argument during mesh join like authsae already does. At least it is
> helpful for companies/projects which are currently switching to 802.11s
> (without mesh_fwding and with mesh_ttl set to 1) as replacement for IBSS
> because newer drivers seem to support 802.11s but not IBSS anymore.

I do think this is needed, however, also note that 802.11s doesn't do
legacy CCK rates by spec. Hence the lowest possible rate is 6 Mbit/s
also on 2.4 GHz (and has always been 6 MBit/s for 5 GHz).

everyone: Should we merge this patch now?


> 
> Signed-off-by: Sven Eckelmann <sven.eckelmann@openmesh.com>
> Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
> ---
>  .../patches/463-add-mcast_rate-to-11s.patch        | 68 ++++++++++++++++++++++
>  1 file changed, 68 insertions(+)
>  create mode 100644 package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch
> 
> diff --git a/package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch b/package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch
> new file mode 100644
> index 0000000000..9cf9d51ff7
> --- /dev/null
> +++ b/package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch
> @@ -0,0 +1,68 @@
> +From: Sven Eckelmann <sven.eckelmann@openmesh.com>
> +Date: Thu, 11 May 2017 08:21:45 +0200
> +Subject: [PATCH] set mcast_rate in mesh mode
> +
> +The wpa_supplicant code for IBSS allows to set the mcast rate. It is
> +recommended to increase this value from 1 or 6 Mbit/s to something higher
> +when using a mesh protocol on top which uses the multicast packet loss as
> +indicator for the link quality.
> +
> +This setting was unfortunately not applied for mesh mode. But it would be
> +beneficial when wpa_supplicant would behave similar to IBSS mode and set
> +this argument during mesh join like authsae already does. At least it is
> +helpful for companies/projects which are currently switching to 802.11s
> +(without mesh_fwding and with mesh_ttl set to 1) as replacement for IBSS
> +because newer drivers seem to support 802.11s but not IBSS anymore.
> +
> +Signed-off-by: Sven Eckelmann <sven.eckelmann@openmesh.com>
> +Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
> +
> +--- a/src/drivers/driver.h
> ++++ b/src/drivers/driver.h
> +@@ -1230,6 +1230,7 @@ struct wpa_driver_mesh_join_params {
> + #define WPA_DRIVER_MESH_FLAG_SAE_AUTH	0x00000004
> + #define WPA_DRIVER_MESH_FLAG_AMPE	0x00000008
> + 	unsigned int flags;
> ++	int mcast_rate;
> + };
> + 
> + /**
> +--- a/src/drivers/driver_nl80211.c
> ++++ b/src/drivers/driver_nl80211.c
> +@@ -8764,6 +8764,18 @@ static int nl80211_put_mesh_id(struct nl
> + }
> + 
> + 
> ++static int nl80211_put_mcast_rate(struct nl_msg *msg, int mcast_rate)
> ++{
> ++	if (mcast_rate > 0) {
> ++		wpa_printf(MSG_DEBUG, "  * mcast_rate=%.1f",
> ++			   (double)mcast_rate / 10);
> ++		return nla_put_u32(msg, NL80211_ATTR_MCAST_RATE, mcast_rate);
> ++	}
> ++
> ++	return 0;
> ++}
> ++
> ++
> + static int nl80211_put_mesh_config(struct nl_msg *msg,
> + 				   struct wpa_driver_mesh_bss_params *params)
> + {
> +@@ -8819,6 +8831,7 @@ static int nl80211_join_mesh(struct i802
> + 	    nl80211_put_basic_rates(msg, params->basic_rates) ||
> + 	    nl80211_put_mesh_id(msg, params->meshid, params->meshid_len) ||
> + 	    nl80211_put_beacon_int(msg, params->beacon_int) ||
> ++	    nl80211_put_mcast_rate(msg, params->mcast_rate) ||
> + 	    nl80211_put_dtim_period(msg, params->dtim_period))
> + 		goto fail;
> + 
> +--- a/wpa_supplicant/mesh.c
> ++++ b/wpa_supplicant/mesh.c
> +@@ -380,6 +380,7 @@ int wpa_supplicant_join_mesh(struct wpa_
> + 	os_memset(&params, 0, sizeof(params));
> + 	params.meshid = ssid->ssid;
> + 	params.meshid_len = ssid->ssid_len;
> ++	params.mcast_rate = ssid->mcast_rate;
> + 	ibss_mesh_setup_freq(wpa_s, ssid, &params.freq);
> + 	wpa_s->mesh_ht_enabled = !!params.freq.ht_enabled;
> + 	wpa_s->mesh_vht_enabled = !!params.freq.vht_enabled;
> -- 
> 2.11.0
> 
> 
> _______________________________________________
> Lede-dev mailing list
> Lede-dev@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/lede-dev

Patch hide | download patch | download mbox

diff --git a/package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch b/package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch
new file mode 100644
index 0000000000..9cf9d51ff7
--- /dev/null
+++ b/package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch
@@ -0,0 +1,68 @@ 
+From: Sven Eckelmann <sven.eckelmann@openmesh.com>
+Date: Thu, 11 May 2017 08:21:45 +0200
+Subject: [PATCH] set mcast_rate in mesh mode
+
+The wpa_supplicant code for IBSS allows to set the mcast rate. It is
+recommended to increase this value from 1 or 6 Mbit/s to something higher
+when using a mesh protocol on top which uses the multicast packet loss as
+indicator for the link quality.
+
+This setting was unfortunately not applied for mesh mode. But it would be
+beneficial when wpa_supplicant would behave similar to IBSS mode and set
+this argument during mesh join like authsae already does. At least it is
+helpful for companies/projects which are currently switching to 802.11s
+(without mesh_fwding and with mesh_ttl set to 1) as replacement for IBSS
+because newer drivers seem to support 802.11s but not IBSS anymore.
+
+Signed-off-by: Sven Eckelmann <sven.eckelmann@openmesh.com>
+Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
+
+--- a/src/drivers/driver.h
++++ b/src/drivers/driver.h
+@@ -1230,6 +1230,7 @@ struct wpa_driver_mesh_join_params {
+ #define WPA_DRIVER_MESH_FLAG_SAE_AUTH	0x00000004
+ #define WPA_DRIVER_MESH_FLAG_AMPE	0x00000008
+ 	unsigned int flags;
++	int mcast_rate;
+ };
+ 
+ /**
+--- a/src/drivers/driver_nl80211.c
++++ b/src/drivers/driver_nl80211.c
+@@ -8764,6 +8764,18 @@ static int nl80211_put_mesh_id(struct nl
+ }
+ 
+ 
++static int nl80211_put_mcast_rate(struct nl_msg *msg, int mcast_rate)
++{
++	if (mcast_rate > 0) {
++		wpa_printf(MSG_DEBUG, "  * mcast_rate=%.1f",
++			   (double)mcast_rate / 10);
++		return nla_put_u32(msg, NL80211_ATTR_MCAST_RATE, mcast_rate);
++	}
++
++	return 0;
++}
++
++
+ static int nl80211_put_mesh_config(struct nl_msg *msg,
+ 				   struct wpa_driver_mesh_bss_params *params)
+ {
+@@ -8819,6 +8831,7 @@ static int nl80211_join_mesh(struct i802
+ 	    nl80211_put_basic_rates(msg, params->basic_rates) ||
+ 	    nl80211_put_mesh_id(msg, params->meshid, params->meshid_len) ||
+ 	    nl80211_put_beacon_int(msg, params->beacon_int) ||
++	    nl80211_put_mcast_rate(msg, params->mcast_rate) ||
+ 	    nl80211_put_dtim_period(msg, params->dtim_period))
+ 		goto fail;
+ 
+--- a/wpa_supplicant/mesh.c
++++ b/wpa_supplicant/mesh.c
+@@ -380,6 +380,7 @@ int wpa_supplicant_join_mesh(struct wpa_
+ 	os_memset(&params, 0, sizeof(params));
+ 	params.meshid = ssid->ssid;
+ 	params.meshid_len = ssid->ssid_len;
++	params.mcast_rate = ssid->mcast_rate;
+ 	ibss_mesh_setup_freq(wpa_s, ssid, &params.freq);
+ 	wpa_s->mesh_ht_enabled = !!params.freq.ht_enabled;
+ 	wpa_s->mesh_vht_enabled = !!params.freq.vht_enabled;