mesh: Do NL80211_MESHCONF_* setting in single function
authorMasashi Honma <masashi.honma@gmail.com>
Fri, 5 Aug 2016 08:35:29 +0000 (17:35 +0900)
committerJouni Malinen <j@w1.fi>
Thu, 18 Aug 2016 17:37:38 +0000 (20:37 +0300)
Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
src/drivers/driver_nl80211.c

index f27b149..cbbcf66 100644 (file)
@@ -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, &params->conf) < 0)
                goto fail;
-       }
-
-       nla_nest_end(msg, container);
 
        ret = send_and_recv_msgs(drv, msg, NULL, NULL);
        msg = NULL;