From 2bd62171737b45a094027378a6ad70f567cb68ff Mon Sep 17 00:00:00 2001 From: Masashi Honma Date: Fri, 5 Aug 2016 17:35:30 +0900 Subject: [PATCH] mesh: Use WPA_DRIVER_MESH_CONF_FLAG_* as modification flag Signed-off-by: Masashi Honma --- src/drivers/driver.h | 5 ++++- src/drivers/driver_nl80211.c | 17 +++++++++++------ wpa_supplicant/mesh.c | 4 ++-- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/drivers/driver.h b/src/drivers/driver.h index 4dd731f83..ffe6f7597 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -1118,12 +1118,15 @@ struct wpa_driver_ap_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; + int auto_plinks; int peer_link_timeout; int max_peer_links; }; diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index cbbcf6634..b801c9cfa 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -8422,18 +8422,20 @@ static int nl80211_put_mesh_config(struct nl_msg *msg, 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. */ - 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; @@ -8489,6 +8491,9 @@ static int nl80211_join_mesh(struct i802_bss *bss, 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, ¶ms->conf) < 0) goto fail; diff --git a/wpa_supplicant/mesh.c b/wpa_supplicant/mesh.c index e3d9d628e..3deeb4956 100644 --- a/wpa_supplicant/mesh.c +++ b/wpa_supplicant/mesh.c @@ -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; - params.conf.flags &= ~WPA_DRIVER_MESH_CONF_FLAG_AUTO_PLINKS; + params.conf.auto_plinks = 0; } 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;