From 871ff0b7466a9fa62a9980deb30949e495dea095 Mon Sep 17 00:00:00 2001 From: Masashi Honma Date: Thu, 22 Jan 2015 14:22:16 +0900 Subject: [PATCH] mesh: Sync plink state with kernel The plink_state exists both wpa_supplicant and kernel. Synchronize them with wpa_mesh_set_plink_state(). Signed-off-by: Kenzoh Nishikawa Signed-off-by: Masashi Honma --- wpa_supplicant/mesh_mpm.c | 13 +++++++++---- wpa_supplicant/mesh_mpm.h | 3 +++ wpa_supplicant/mesh_rsn.c | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/wpa_supplicant/mesh_mpm.c b/wpa_supplicant/mesh_mpm.c index 4a259ff4e..0da7e1373 100644 --- a/wpa_supplicant/mesh_mpm.c +++ b/wpa_supplicant/mesh_mpm.c @@ -193,6 +193,11 @@ static void mesh_mpm_init_link(struct wpa_supplicant *wpa_s, sta->my_lid = llid; sta->peer_lid = 0; + + /* + * We do not use wpa_mesh_set_plink_state() here because there is no + * entry in kernel yet. + */ sta->plink_state = PLINK_LISTEN; } @@ -348,9 +353,9 @@ fail: /* configure peering state in ours and driver's station entry */ -static void -wpa_mesh_set_plink_state(struct wpa_supplicant *wpa_s, struct sta_info *sta, - enum mesh_plink_state state) +void wpa_mesh_set_plink_state(struct wpa_supplicant *wpa_s, + struct sta_info *sta, + enum mesh_plink_state state) { struct hostapd_sta_add_params params; int ret; @@ -417,7 +422,7 @@ static void plink_timer(void *eloop_ctx, void *user_data) /* confirm timer */ if (!reason) reason = WLAN_REASON_MESH_CONFIRM_TIMEOUT; - sta->plink_state = PLINK_HOLDING; + wpa_mesh_set_plink_state(wpa_s, sta, PLINK_HOLDING); eloop_register_timeout(conf->dot11MeshHoldingTimeout / 1000, (conf->dot11MeshHoldingTimeout % 1000) * 1000, plink_timer, wpa_s, sta); diff --git a/wpa_supplicant/mesh_mpm.h b/wpa_supplicant/mesh_mpm.h index 2f7f6a783..7ebaef0cd 100644 --- a/wpa_supplicant/mesh_mpm.h +++ b/wpa_supplicant/mesh_mpm.h @@ -15,6 +15,9 @@ void wpa_mesh_new_mesh_peer(struct wpa_supplicant *wpa_s, const u8 *addr, void mesh_mpm_deinit(struct wpa_supplicant *wpa_s, struct hostapd_iface *ifmsh); void mesh_mpm_auth_peer(struct wpa_supplicant *wpa_s, const u8 *addr); void mesh_mpm_free_sta(struct sta_info *sta); +void wpa_mesh_set_plink_state(struct wpa_supplicant *wpa_s, + struct sta_info *sta, + enum mesh_plink_state state); #ifdef CONFIG_MESH diff --git a/wpa_supplicant/mesh_rsn.c b/wpa_supplicant/mesh_rsn.c index aee325a3e..da4cb03ca 100644 --- a/wpa_supplicant/mesh_rsn.c +++ b/wpa_supplicant/mesh_rsn.c @@ -41,7 +41,7 @@ void mesh_auth_timer(void *eloop_ctx, void *user_data) mesh_rsn_auth_sae_sta(wpa_s, sta); } else { /* block the STA if exceeded the number of attempts */ - sta->plink_state = PLINK_BLOCKED; + wpa_mesh_set_plink_state(wpa_s, sta, PLINK_BLOCKED); sta->sae->state = SAE_NOTHING; } sta->sae_auth_retry++;