mesh: Sync plink state with kernel
authorMasashi Honma <masashi.honma@gmail.com>
Thu, 22 Jan 2015 05:22:16 +0000 (14:22 +0900)
committerJouni Malinen <j@w1.fi>
Wed, 28 Jan 2015 11:09:31 +0000 (13:09 +0200)
The plink_state exists both wpa_supplicant and kernel. Synchronize them
with wpa_mesh_set_plink_state().

Signed-off-by: Kenzoh Nishikawa <Kenzoh.Nishikawa@jp.sony.com>
Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
wpa_supplicant/mesh_mpm.c
wpa_supplicant/mesh_mpm.h
wpa_supplicant/mesh_rsn.c

index 4a259ff..0da7e13 100644 (file)
@@ -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);
index 2f7f6a7..7ebaef0 100644 (file)
@@ -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
 
index aee325a..da4cb03 100644 (file)
@@ -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++;