mesh: Make maximum number of peer links configurable
authorMasashi Honma <masashi.honma@gmail.com>
Fri, 19 Dec 2014 05:59:52 +0000 (14:59 +0900)
committerJouni Malinen <j@w1.fi>
Sun, 21 Dec 2014 21:52:31 +0000 (23:52 +0200)
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>
src/drivers/driver.h
src/drivers/driver_nl80211.c
wpa_supplicant/config.c
wpa_supplicant/config.h
wpa_supplicant/config_file.c
wpa_supplicant/mesh.c
wpa_supplicant/wpa_supplicant.conf

index 4fcc648..b8ee825 100644 (file)
@@ -953,6 +953,7 @@ struct wpa_driver_mesh_join_params {
        int ie_len;
        int freq;
        int beacon_int;
+       int max_peer_links;
        enum ht_mode ht_mode;
        struct wpa_driver_mesh_bss_params conf;
 #define WPA_DRIVER_MESH_FLAG_USER_MPM  0x00000001
index f7ab6fc..cff7b0d 100644 (file)
@@ -7801,6 +7801,10 @@ wpa_driver_nl80211_join_mesh(void *priv,
        if (!(params->conf.flags & WPA_DRIVER_MESH_CONF_FLAG_AUTO_PLINKS) &&
            nla_put_u32(msg, NL80211_MESHCONF_AUTO_OPEN_PLINKS, 0))
                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);
 
        ret = send_and_recv_msgs(drv, msg, NULL, NULL);
index bd80b29..d3a8c86 100644 (file)
@@ -3450,6 +3450,7 @@ struct wpa_config * wpa_config_alloc_empty(const char *ctrl_interface,
        config->eapol_version = DEFAULT_EAPOL_VERSION;
        config->ap_scan = DEFAULT_AP_SCAN;
        config->user_mpm = DEFAULT_USER_MPM;
+       config->max_peer_links = DEFAULT_MAX_PEER_LINKS;
        config->fast_reauth = DEFAULT_FAST_REAUTH;
        config->p2p_go_intent = DEFAULT_P2P_GO_INTENT;
        config->p2p_intra_bss = DEFAULT_P2P_INTRA_BSS;
@@ -3998,6 +3999,7 @@ static const struct global_parse_data global_fields[] = {
        { FUNC(bgscan), 0 },
 #ifdef CONFIG_MESH
        { INT(user_mpm), 0 },
+       { INT_RANGE(max_peer_links, 0, 255), 0 },
 #endif /* CONFIG_MESH */
        { INT(disable_scan_offload), 0 },
        { INT(fast_reauth), 0 },
index 2c3d6f5..b3f7eef 100644 (file)
@@ -16,6 +16,7 @@
 #define DEFAULT_AP_SCAN 1
 #endif /* CONFIG_NO_SCAN_PROCESSING */
 #define DEFAULT_USER_MPM 1
+#define DEFAULT_MAX_PEER_LINKS 99
 #define DEFAULT_FAST_REAUTH 1
 #define DEFAULT_P2P_GO_INTENT 7
 #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.
         */
        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;
 };
 
 
index cc632b7..5c8b24b 100644 (file)
@@ -1216,6 +1216,9 @@ static void wpa_config_write_global(FILE *f, struct wpa_config *config)
 
        if (config->user_mpm != DEFAULT_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 */
index 7adfa63..7a4f3de 100644 (file)
@@ -169,7 +169,7 @@ static int wpa_supplicant_mesh_init(struct wpa_supplicant *wpa_s,
        bss->iconf = 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));
 
        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;
        else if (wpa_s->conf->beacon_int > 0)
                params.beacon_int = wpa_s->conf->beacon_int;
+       params.max_peer_links = wpa_s->conf->max_peer_links;
 #ifdef CONFIG_IEEE80211N
        params.ht_mode = ssid->mesh_ht_mode;
 #endif /* CONFIG_IEEE80211N */
index 95a212d..e78c0dd 100644 (file)
@@ -123,6 +123,10 @@ ap_scan=1
 # 1: wpa_supplicant provides an MPM which handles peering (default)
 #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
 # By default, fast re-authentication is enabled for all EAP methods that
 # support it. This variable can be used to disable fast re-authentication.