Updated through tag hostap_2_5 from git://w1.fi/hostap.git
[mech_eap.git] / libeap / wpa_supplicant / blacklist.c
index 4ffb220..e53dc38 100644 (file)
@@ -2,14 +2,8 @@
  * wpa_supplicant - Temporary BSSID blacklist
  * Copyright (c) 2003-2007, Jouni Malinen <j@w1.fi>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * Alternatively, this software may be distributed under the terms of BSD
- * license.
- *
- * See README and COPYING for more details.
+ * This software may be distributed under the terms of the BSD license.
+ * See README for more details.
  */
 
 #include "includes.h"
@@ -29,6 +23,9 @@ struct wpa_blacklist * wpa_blacklist_get(struct wpa_supplicant *wpa_s,
 {
        struct wpa_blacklist *e;
 
+       if (wpa_s == NULL || bssid == NULL)
+               return NULL;
+
        e = wpa_s->blacklist;
        while (e) {
                if (os_memcmp(e->bssid, bssid, ETH_ALEN) == 0)
@@ -44,7 +41,7 @@ struct wpa_blacklist * wpa_blacklist_get(struct wpa_supplicant *wpa_s,
  * wpa_blacklist_add - Add an BSSID to the blacklist
  * @wpa_s: Pointer to wpa_supplicant data
  * @bssid: BSSID to be added to the blacklist
- * Returns: 0 on success, -1 on failure
+ * Returns: Current blacklist count on success, -1 on failure
  *
  * This function adds the specified BSSID to the blacklist or increases the
  * blacklist count if the BSSID was already listed. It should be called when
@@ -60,13 +57,16 @@ int wpa_blacklist_add(struct wpa_supplicant *wpa_s, const u8 *bssid)
 {
        struct wpa_blacklist *e;
 
+       if (wpa_s == NULL || bssid == NULL)
+               return -1;
+
        e = wpa_blacklist_get(wpa_s, bssid);
        if (e) {
                e->count++;
                wpa_printf(MSG_DEBUG, "BSSID " MACSTR " blacklist count "
                           "incremented to %d",
                           MAC2STR(bssid), e->count);
-               return 0;
+               return e->count;
        }
 
        e = os_zalloc(sizeof(*e));
@@ -79,7 +79,7 @@ int wpa_blacklist_add(struct wpa_supplicant *wpa_s, const u8 *bssid)
        wpa_printf(MSG_DEBUG, "Added BSSID " MACSTR " into blacklist",
                   MAC2STR(bssid));
 
-       return 0;
+       return e->count;
 }
 
 
@@ -93,6 +93,9 @@ int wpa_blacklist_del(struct wpa_supplicant *wpa_s, const u8 *bssid)
 {
        struct wpa_blacklist *e, *prev = NULL;
 
+       if (wpa_s == NULL || bssid == NULL)
+               return -1;
+
        e = wpa_s->blacklist;
        while (e) {
                if (os_memcmp(e->bssid, bssid, ETH_ALEN) == 0) {
@@ -120,14 +123,19 @@ int wpa_blacklist_del(struct wpa_supplicant *wpa_s, const u8 *bssid)
 void wpa_blacklist_clear(struct wpa_supplicant *wpa_s)
 {
        struct wpa_blacklist *e, *prev;
+       int max_count = 0;
 
        e = wpa_s->blacklist;
        wpa_s->blacklist = NULL;
        while (e) {
+               if (e->count > max_count)
+                       max_count = e->count;
                prev = e;
                e = e->next;
                wpa_printf(MSG_DEBUG, "Removed BSSID " MACSTR " from "
                           "blacklist (clear)", MAC2STR(prev->bssid));
                os_free(prev);
        }
+
+       wpa_s->extra_blacklist_count += max_count;
 }