From 07cb45ccb2baa6e9627e3d21a285b95d744a6c77 Mon Sep 17 00:00:00 2001 From: Thomas Pedersen Date: Mon, 1 Sep 2014 00:23:26 -0400 Subject: [PATCH] mesh: Add no_auto_peer config option 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 Signed-off-by: Jason Mobarak Signed-off-by: Thomas Pedersen --- wpa_supplicant/config.c | 1 + wpa_supplicant/config_ssid.h | 8 ++++++++ wpa_supplicant/ctrl_iface.c | 2 ++ wpa_supplicant/mesh_mpm.c | 7 +++++++ 4 files changed, 18 insertions(+) diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c index f6ec4a1e2..8d1e1e072 100644 --- a/wpa_supplicant/config.c +++ b/wpa_supplicant/config.c @@ -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 */ diff --git a/wpa_supplicant/config_ssid.h b/wpa_supplicant/config_ssid.h index 82fa2c5cb..a4910d0e5 100644 --- a/wpa_supplicant/config_ssid.h +++ b/wpa_supplicant/config_ssid.h @@ -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 */ diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c index f2715af55..cb23a454e 100644 --- a/wpa_supplicant/ctrl_iface.c +++ b/wpa_supplicant/ctrl_iface.c @@ -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; } diff --git a/wpa_supplicant/mesh_mpm.c b/wpa_supplicant/mesh_mpm.c index aa28324dd..02bb32c43 100644 --- a/wpa_supplicant/mesh_mpm.c +++ b/wpa_supplicant/mesh_mpm.c @@ -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); }