diff --git a/src/drivers/driver.h b/src/drivers/driver.h index 2ab0667f8..6486ed816 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -1920,6 +1920,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 499362bfe..419ad3ddd 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -12142,6 +12142,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) { @@ -12203,6 +12215,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 d0669d033..dabbb0334 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;