|
@@ -8413,6 +8413,38 @@ static int nl80211_put_mesh_id(struct nl_msg *msg, const u8 *mesh_id,
|
|
|
}
|
|
|
|
|
|
|
|
|
+static int nl80211_put_mesh_config(struct nl_msg *msg,
|
|
|
+ struct wpa_driver_mesh_bss_params *params)
|
|
|
+{
|
|
|
+ struct nlattr *container;
|
|
|
+
|
|
|
+ container = nla_nest_start(msg, NL80211_ATTR_MESH_CONFIG);
|
|
|
+ if (!container)
|
|
|
+ return -1;
|
|
|
+
|
|
|
+ if (nla_put_u32(msg, NL80211_MESHCONF_AUTO_OPEN_PLINKS,
|
|
|
+ !!(params->flags &
|
|
|
+ WPA_DRIVER_MESH_CONF_FLAG_AUTO_PLINKS)) ||
|
|
|
+ nla_put_u16(msg, NL80211_MESHCONF_MAX_PEER_LINKS,
|
|
|
+ params->max_peer_links))
|
|
|
+ return -1;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Set NL80211_MESHCONF_PLINK_TIMEOUT even if user mpm is used because
|
|
|
+ * the timer could disconnect stations even in that case.
|
|
|
+ */
|
|
|
+ if (nla_put_u32(msg, NL80211_MESHCONF_PLINK_TIMEOUT,
|
|
|
+ params->peer_link_timeout)) {
|
|
|
+ wpa_printf(MSG_ERROR, "nl80211: Failed to set PLINK_TIMEOUT");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ nla_nest_end(msg, container);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
static int nl80211_join_mesh(struct i802_bss *bss,
|
|
|
struct wpa_driver_mesh_join_params *params)
|
|
|
{
|
|
@@ -8457,28 +8489,8 @@ static int nl80211_join_mesh(struct i802_bss *bss,
|
|
|
goto fail;
|
|
|
nla_nest_end(msg, container);
|
|
|
|
|
|
- container = nla_nest_start(msg, NL80211_ATTR_MESH_CONFIG);
|
|
|
- if (!container)
|
|
|
- goto fail;
|
|
|
-
|
|
|
- if (!(params->conf.flags & WPA_DRIVER_MESH_CONF_FLAG_AUTO_PLINKS) &&
|
|
|
- nla_put_u32(msg, NL80211_MESHCONF_AUTO_OPEN_PLINKS, 0))
|
|
|
- goto fail;
|
|
|
- if (nla_put_u16(msg, NL80211_MESHCONF_MAX_PEER_LINKS,
|
|
|
- params->conf.max_peer_links))
|
|
|
- goto fail;
|
|
|
-
|
|
|
- /*
|
|
|
- * Set NL80211_MESHCONF_PLINK_TIMEOUT even if user mpm is used because
|
|
|
- * the timer could disconnect stations even in that case.
|
|
|
- */
|
|
|
- if (nla_put_u32(msg, NL80211_MESHCONF_PLINK_TIMEOUT,
|
|
|
- params->conf.peer_link_timeout)) {
|
|
|
- wpa_printf(MSG_ERROR, "nl80211: Failed to set PLINK_TIMEOUT");
|
|
|
+ if (nl80211_put_mesh_config(msg, ¶ms->conf) < 0)
|
|
|
goto fail;
|
|
|
- }
|
|
|
-
|
|
|
- nla_nest_end(msg, container);
|
|
|
|
|
|
ret = send_and_recv_msgs(drv, msg, NULL, NULL);
|
|
|
msg = NULL;
|