From e46daac3ce5e3d0d9c43f21fd895ecbab247d00e Mon Sep 17 00:00:00 2001 From: Sven Eckelmann 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 Tested-by: Simon Wunderlich --- src/drivers/driver.h | 1 + src/drivers/driver_nl80211.c | 13 +++++++++++++ wpa_supplicant/mesh.c | 1 + 3 files changed, 15 insertions(+) diff --git a/src/drivers/driver.h b/src/drivers/driver.h index 3c2a25ce8..836c16b91 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -1660,6 +1660,7 @@ struct wpa_driver_mesh_join_params { #define WPA_DRIVER_MESH_FLAG_AMPE 0x00000008 unsigned int flags; bool handle_dfs; + int mcast_rate; }; struct wpa_driver_set_key_params { diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index 17875670d..69afdabbc 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -10611,6 +10611,18 @@ static int nl80211_put_mesh_id(struct nl_msg *msg, const u8 *mesh_id, } +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) { @@ -10672,6 +10684,7 @@ static int nl80211_join_mesh(struct i802_bss *bss, 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; diff --git a/wpa_supplicant/mesh.c b/wpa_supplicant/mesh.c index ad067da67..2cbe8e366 100644 --- a/wpa_supplicant/mesh.c +++ b/wpa_supplicant/mesh.c @@ -632,6 +632,7 @@ int wpa_supplicant_join_mesh(struct wpa_supplicant *wpa_s, 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;