AP: Expire STA without entry in kernel
authorMasashi Honma <masashi.honma@gmail.com>
Fri, 16 Jan 2015 11:19:23 +0000 (20:19 +0900)
committerJouni Malinen <j@w1.fi>
Mon, 19 Jan 2015 00:35:43 +0000 (02:35 +0200)
If the inactivity check returns that there is no entry remaining for the
STA in the kernel, drop the STA in hostapd as well.

Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
src/ap/sta_info.c
src/drivers/driver_nl80211.c

index 3eca82d..bb43218 100644 (file)
@@ -370,6 +370,13 @@ void ap_handle_timer(void *eloop_ctx, void *timeout_ctx)
                         * but do not disconnect the station now.
                         */
                        next_time = hapd->conf->ap_max_inactivity + fuzz;
+               } else if (inactive_sec == -ENOENT) {
+                       wpa_msg(hapd->msg_ctx, MSG_DEBUG,
+                               "Station " MACSTR " has lost its driver entry",
+                               MAC2STR(sta->addr));
+
+                       if (hapd->conf->skip_inactivity_poll)
+                               sta->timeout_next = STA_DISASSOC;
                } else if (inactive_sec < hapd->conf->ap_max_inactivity) {
                        /* station activity detected; reset timeout state */
                        wpa_msg(hapd->msg_ctx, MSG_DEBUG,
index c180f15..e278c87 100644 (file)
@@ -5219,6 +5219,8 @@ static int i802_get_inact_sec(void *priv, const u8 *addr)
 
        data.inactive_msec = (unsigned long) -1;
        ret = i802_read_sta_data(priv, &data, addr);
+       if (ret == -ENOENT)
+               return -ENOENT;
        if (ret || data.inactive_msec == (unsigned long) -1)
                return -1;
        return data.inactive_msec / 1000;