mesh: Make maximum number of peer links configurable

Maximum number of peer links is maximum number of connecting mesh peers
at the same time. This value is 0..255 based on the
dot11MeshNumberOfPeerings range.

Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
This commit is contained in:
Masashi Honma 2014-12-19 14:59:52 +09:00 committed by Jouni Malinen
parent 8b2600329f
commit 4b4093686b
7 changed files with 24 additions and 1 deletions

View file

@ -953,6 +953,7 @@ struct wpa_driver_mesh_join_params {
int ie_len; int ie_len;
int freq; int freq;
int beacon_int; int beacon_int;
int max_peer_links;
enum ht_mode ht_mode; enum ht_mode ht_mode;
struct wpa_driver_mesh_bss_params conf; struct wpa_driver_mesh_bss_params conf;
#define WPA_DRIVER_MESH_FLAG_USER_MPM 0x00000001 #define WPA_DRIVER_MESH_FLAG_USER_MPM 0x00000001

View file

@ -7801,6 +7801,10 @@ wpa_driver_nl80211_join_mesh(void *priv,
if (!(params->conf.flags & WPA_DRIVER_MESH_CONF_FLAG_AUTO_PLINKS) && if (!(params->conf.flags & WPA_DRIVER_MESH_CONF_FLAG_AUTO_PLINKS) &&
nla_put_u32(msg, NL80211_MESHCONF_AUTO_OPEN_PLINKS, 0)) nla_put_u32(msg, NL80211_MESHCONF_AUTO_OPEN_PLINKS, 0))
goto fail; goto fail;
if ((params->conf.flags & WPA_DRIVER_MESH_FLAG_DRIVER_MPM) &&
nla_put_u16(msg, NL80211_MESHCONF_MAX_PEER_LINKS,
params->max_peer_links))
goto fail;
nla_nest_end(msg, container); nla_nest_end(msg, container);
ret = send_and_recv_msgs(drv, msg, NULL, NULL); ret = send_and_recv_msgs(drv, msg, NULL, NULL);

View file

@ -3450,6 +3450,7 @@ struct wpa_config * wpa_config_alloc_empty(const char *ctrl_interface,
config->eapol_version = DEFAULT_EAPOL_VERSION; config->eapol_version = DEFAULT_EAPOL_VERSION;
config->ap_scan = DEFAULT_AP_SCAN; config->ap_scan = DEFAULT_AP_SCAN;
config->user_mpm = DEFAULT_USER_MPM; config->user_mpm = DEFAULT_USER_MPM;
config->max_peer_links = DEFAULT_MAX_PEER_LINKS;
config->fast_reauth = DEFAULT_FAST_REAUTH; config->fast_reauth = DEFAULT_FAST_REAUTH;
config->p2p_go_intent = DEFAULT_P2P_GO_INTENT; config->p2p_go_intent = DEFAULT_P2P_GO_INTENT;
config->p2p_intra_bss = DEFAULT_P2P_INTRA_BSS; config->p2p_intra_bss = DEFAULT_P2P_INTRA_BSS;
@ -3998,6 +3999,7 @@ static const struct global_parse_data global_fields[] = {
{ FUNC(bgscan), 0 }, { FUNC(bgscan), 0 },
#ifdef CONFIG_MESH #ifdef CONFIG_MESH
{ INT(user_mpm), 0 }, { INT(user_mpm), 0 },
{ INT_RANGE(max_peer_links, 0, 255), 0 },
#endif /* CONFIG_MESH */ #endif /* CONFIG_MESH */
{ INT(disable_scan_offload), 0 }, { INT(disable_scan_offload), 0 },
{ INT(fast_reauth), 0 }, { INT(fast_reauth), 0 },

View file

@ -16,6 +16,7 @@
#define DEFAULT_AP_SCAN 1 #define DEFAULT_AP_SCAN 1
#endif /* CONFIG_NO_SCAN_PROCESSING */ #endif /* CONFIG_NO_SCAN_PROCESSING */
#define DEFAULT_USER_MPM 1 #define DEFAULT_USER_MPM 1
#define DEFAULT_MAX_PEER_LINKS 99
#define DEFAULT_FAST_REAUTH 1 #define DEFAULT_FAST_REAUTH 1
#define DEFAULT_P2P_GO_INTENT 7 #define DEFAULT_P2P_GO_INTENT 7
#define DEFAULT_P2P_INTRA_BSS 1 #define DEFAULT_P2P_INTRA_BSS 1
@ -1111,6 +1112,13 @@ struct wpa_config {
* If AMPE or SAE is enabled, the MPM is always in userspace. * If AMPE or SAE is enabled, the MPM is always in userspace.
*/ */
int user_mpm; int user_mpm;
/**
* max_peer_links - Maximum number of peer links
*
* Maximum number of mesh peering currently maintained by the STA.
*/
int max_peer_links;
}; };

View file

@ -1216,6 +1216,9 @@ static void wpa_config_write_global(FILE *f, struct wpa_config *config)
if (config->user_mpm != DEFAULT_USER_MPM) if (config->user_mpm != DEFAULT_USER_MPM)
fprintf(f, "user_mpm=%d\n", config->user_mpm); fprintf(f, "user_mpm=%d\n", config->user_mpm);
if (config->max_peer_links != DEFAULT_MAX_PEER_LINKS)
fprintf(f, "max_peer_links=%d\n", config->max_peer_links);
} }
#endif /* CONFIG_NO_CONFIG_WRITE */ #endif /* CONFIG_NO_CONFIG_WRITE */

View file

@ -169,7 +169,7 @@ static int wpa_supplicant_mesh_init(struct wpa_supplicant *wpa_s,
bss->iconf = conf; bss->iconf = conf;
ifmsh->conf = conf; ifmsh->conf = conf;
ifmsh->bss[0]->max_plinks = 99; ifmsh->bss[0]->max_plinks = wpa_s->conf->max_peer_links;
os_strlcpy(bss->conf->iface, wpa_s->ifname, sizeof(bss->conf->iface)); os_strlcpy(bss->conf->iface, wpa_s->ifname, sizeof(bss->conf->iface));
mconf = mesh_config_create(ssid); mconf = mesh_config_create(ssid);
@ -323,6 +323,7 @@ int wpa_supplicant_join_mesh(struct wpa_supplicant *wpa_s,
params.beacon_int = ssid->beacon_int; params.beacon_int = ssid->beacon_int;
else if (wpa_s->conf->beacon_int > 0) else if (wpa_s->conf->beacon_int > 0)
params.beacon_int = wpa_s->conf->beacon_int; params.beacon_int = wpa_s->conf->beacon_int;
params.max_peer_links = wpa_s->conf->max_peer_links;
#ifdef CONFIG_IEEE80211N #ifdef CONFIG_IEEE80211N
params.ht_mode = ssid->mesh_ht_mode; params.ht_mode = ssid->mesh_ht_mode;
#endif /* CONFIG_IEEE80211N */ #endif /* CONFIG_IEEE80211N */

View file

@ -123,6 +123,10 @@ ap_scan=1
# 1: wpa_supplicant provides an MPM which handles peering (default) # 1: wpa_supplicant provides an MPM which handles peering (default)
#user_mpm=1 #user_mpm=1
# Maximum number of peer links (0-255; default: 99)
# Maximum number of mesh peering currently maintained by the STA.
#max_peer_links=99
# EAP fast re-authentication # EAP fast re-authentication
# By default, fast re-authentication is enabled for all EAP methods that # By default, fast re-authentication is enabled for all EAP methods that
# support it. This variable can be used to disable fast re-authentication. # support it. This variable can be used to disable fast re-authentication.