Message ID | 20170511065650.29522-1-sven.eckelmann@openmesh.com |
---|---|
State | Accepted |
Delegated to: | Felix Fietkau |
Headers | show |
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(¶ms, 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, ¶ms.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
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(¶ms, 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, ¶ms.freq); + wpa_s->mesh_ht_enabled = !!params.freq.ht_enabled; + wpa_s->mesh_vht_enabled = !!params.freq.vht_enabled;