mesh: Use WPA_DRIVER_MESH_CONF_FLAG_* as modification flag
authorMasashi Honma <masashi.honma@gmail.com>
Fri, 5 Aug 2016 08:35:30 +0000 (17:35 +0900)
committerJouni Malinen <j@w1.fi>
Thu, 18 Aug 2016 17:40:13 +0000 (20:40 +0300)
Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
src/drivers/driver.h
src/drivers/driver_nl80211.c
wpa_supplicant/mesh.c

index 4dd731f..ffe6f75 100644 (file)
@@ -1118,12 +1118,15 @@ struct wpa_driver_ap_params {
 };
 
 struct wpa_driver_mesh_bss_params {
 };
 
 struct wpa_driver_mesh_bss_params {
-#define WPA_DRIVER_MESH_CONF_FLAG_AUTO_PLINKS  0x00000001
+#define WPA_DRIVER_MESH_CONF_FLAG_AUTO_PLINKS          0x00000001
+#define WPA_DRIVER_MESH_CONF_FLAG_PEER_LINK_TIMEOUT    0x00000002
+#define WPA_DRIVER_MESH_CONF_FLAG_MAX_PEER_LINKS       0x00000004
        /*
         * TODO: Other mesh configuration parameters would go here.
         * See NL80211_MESHCONF_* for all the mesh config parameters.
         */
        unsigned int flags;
        /*
         * TODO: Other mesh configuration parameters would go here.
         * See NL80211_MESHCONF_* for all the mesh config parameters.
         */
        unsigned int flags;
+       int auto_plinks;
        int peer_link_timeout;
        int max_peer_links;
 };
        int peer_link_timeout;
        int max_peer_links;
 };
index cbbcf66..b801c9c 100644 (file)
@@ -8422,18 +8422,20 @@ static int nl80211_put_mesh_config(struct nl_msg *msg,
        if (!container)
                return -1;
 
        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))
+       if (((params->flags & WPA_DRIVER_MESH_CONF_FLAG_AUTO_PLINKS) &&
+            nla_put_u32(msg, NL80211_MESHCONF_AUTO_OPEN_PLINKS,
+                        params->auto_plinks)) ||
+           ((params->flags & WPA_DRIVER_MESH_CONF_FLAG_MAX_PEER_LINKS) &&
+            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.
         */
                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,
+       if ((params->flags & WPA_DRIVER_MESH_CONF_FLAG_PEER_LINK_TIMEOUT) &&
+           nla_put_u32(msg, NL80211_MESHCONF_PLINK_TIMEOUT,
                        params->peer_link_timeout)) {
                wpa_printf(MSG_ERROR, "nl80211: Failed to set PLINK_TIMEOUT");
                return -1;
                        params->peer_link_timeout)) {
                wpa_printf(MSG_ERROR, "nl80211: Failed to set PLINK_TIMEOUT");
                return -1;
@@ -8489,6 +8491,9 @@ static int nl80211_join_mesh(struct i802_bss *bss,
                goto fail;
        nla_nest_end(msg, container);
 
                goto fail;
        nla_nest_end(msg, container);
 
+       params->conf.flags |= WPA_DRIVER_MESH_CONF_FLAG_AUTO_PLINKS;
+       params->conf.flags |= WPA_DRIVER_MESH_CONF_FLAG_PEER_LINK_TIMEOUT;
+       params->conf.flags |= WPA_DRIVER_MESH_CONF_FLAG_MAX_PEER_LINKS;
        if (nl80211_put_mesh_config(msg, &params->conf) < 0)
                goto fail;
 
        if (nl80211_put_mesh_config(msg, &params->conf) < 0)
                goto fail;
 
index e3d9d62..3deeb49 100644 (file)
@@ -414,10 +414,10 @@ int wpa_supplicant_join_mesh(struct wpa_supplicant *wpa_s,
 
        if (wpa_s->conf->user_mpm) {
                params.flags |= WPA_DRIVER_MESH_FLAG_USER_MPM;
 
        if (wpa_s->conf->user_mpm) {
                params.flags |= WPA_DRIVER_MESH_FLAG_USER_MPM;
-               params.conf.flags &= ~WPA_DRIVER_MESH_CONF_FLAG_AUTO_PLINKS;
+               params.conf.auto_plinks = 0;
        } else {
                params.flags |= WPA_DRIVER_MESH_FLAG_DRIVER_MPM;
        } else {
                params.flags |= WPA_DRIVER_MESH_FLAG_DRIVER_MPM;
-               params.conf.flags |= WPA_DRIVER_MESH_CONF_FLAG_AUTO_PLINKS;
+               params.conf.auto_plinks = 1;
        }
        params.conf.peer_link_timeout = wpa_s->conf->mesh_max_inactivity;
 
        }
        params.conf.peer_link_timeout = wpa_s->conf->mesh_max_inactivity;