mesh: Add no_auto_peer config option
authorThomas Pedersen <thomas@noack.us>
Mon, 1 Sep 2014 04:23:26 +0000 (00:23 -0400)
committerJouni Malinen <j@w1.fi>
Sat, 25 Oct 2014 14:45:35 +0000 (17:45 +0300)
Add no_auto_peer parameter, which controls wheter a station will
automatically initiate peering to another mesh peer that comes into
range.

Signed-off-by: Javier Lopez <jlopex@gmail.com>
Signed-off-by: Jason Mobarak <x@jason.mobarak.name>
Signed-off-by: Thomas Pedersen <thomas@noack.us>
wpa_supplicant/config.c
wpa_supplicant/config_ssid.h
wpa_supplicant/ctrl_iface.c
wpa_supplicant/mesh_mpm.c

index f6ec4a1..8d1e1e0 100644 (file)
@@ -1732,6 +1732,7 @@ static const struct parse_data ssid_fields[] = {
 #endif /* IEEE8021X_EAPOL */
 #ifdef CONFIG_MESH
        { INT_RANGE(mode, 0, 5) },
+       { INT_RANGE(no_auto_peer, 0, 1) },
 #else /* CONFIG_MESH */
        { INT_RANGE(mode, 0, 4) },
 #endif /* CONFIG_MESH */
index 82fa2c5..a4910d0 100644 (file)
@@ -669,6 +669,14 @@ struct wpa_ssid {
         * followed).
         */
        int mac_addr;
+
+       /**
+        * no_auto_peer - Do not automatically peer with compatible mesh peers
+        *
+        * When unset, the reception of a beacon from a another mesh peer in
+        * this MBSS will trigger a peering attempt.
+        */
+       int no_auto_peer;
 };
 
 #endif /* CONFIG_SSID_H */
index f2715af..cb23a45 100644 (file)
@@ -2610,6 +2610,8 @@ static int wpa_supplicant_ctrl_iface_update_network(
                wpa_config_update_psk(ssid);
        else if (os_strcmp(name, "priority") == 0)
                wpa_config_update_prio_list(wpa_s->conf);
+       else if (os_strcmp(name, "no_auto_peer") == 0)
+               ssid->no_auto_peer = atoi(value);
 
        return 0;
 }
index aa28324..02bb32c 100644 (file)
@@ -490,6 +490,7 @@ void wpa_mesh_new_mesh_peer(struct wpa_supplicant *wpa_s, const u8 *addr,
        struct mesh_conf *conf = wpa_s->ifmsh->mconf;
        struct hostapd_data *data = wpa_s->ifmsh->bss[0];
        struct sta_info *sta;
+       struct wpa_ssid *ssid = wpa_s->current_ssid;
        int ret = 0;
 
        sta = ap_get_sta(data, addr);
@@ -532,6 +533,12 @@ void wpa_mesh_new_mesh_peer(struct wpa_supplicant *wpa_s, const u8 *addr,
                return;
        }
 
+       if (ssid && ssid->no_auto_peer) {
+               wpa_msg(wpa_s, MSG_INFO, "will not initiate new peer link with "
+                       MACSTR " because of no_auto_peer", MAC2STR(addr));
+               return;
+       }
+
        mesh_mpm_plink_open(wpa_s, sta, PLINK_OPEN_SENT);
 }