$search
00001 /* 00002 * AP mode helper functions 00003 * Copyright (c) 2009, Jouni Malinen <j@w1.fi> 00004 * 00005 * This program is free software; you can redistribute it and/or modify 00006 * it under the terms of the GNU General Public License version 2 as 00007 * published by the Free Software Foundation. 00008 * 00009 * Alternatively, this software may be distributed under the terms of BSD 00010 * license. 00011 * 00012 * See README and COPYING for more details. 00013 */ 00014 00015 #include "includes.h" 00016 00017 #include "common.h" 00018 #include "common/ieee802_11_defs.h" 00019 #include "sta_info.h" 00020 #include "hostapd.h" 00021 00022 00023 int hostapd_register_probereq_cb(struct hostapd_data *hapd, 00024 int (*cb)(void *ctx, const u8 *sa, 00025 const u8 *ie, size_t ie_len), 00026 void *ctx) 00027 { 00028 struct hostapd_probereq_cb *n; 00029 00030 n = os_realloc(hapd->probereq_cb, (hapd->num_probereq_cb + 1) * 00031 sizeof(struct hostapd_probereq_cb)); 00032 if (n == NULL) 00033 return -1; 00034 00035 hapd->probereq_cb = n; 00036 n = &hapd->probereq_cb[hapd->num_probereq_cb]; 00037 hapd->num_probereq_cb++; 00038 00039 n->cb = cb; 00040 n->ctx = ctx; 00041 00042 return 0; 00043 } 00044 00045 00046 struct prune_data { 00047 struct hostapd_data *hapd; 00048 const u8 *addr; 00049 }; 00050 00051 static int prune_associations(struct hostapd_iface *iface, void *ctx) 00052 { 00053 struct prune_data *data = ctx; 00054 struct sta_info *osta; 00055 struct hostapd_data *ohapd; 00056 size_t j; 00057 00058 for (j = 0; j < iface->num_bss; j++) { 00059 ohapd = iface->bss[j]; 00060 if (ohapd == data->hapd) 00061 continue; 00062 osta = ap_get_sta(ohapd, data->addr); 00063 if (!osta) 00064 continue; 00065 00066 ap_sta_disassociate(ohapd, osta, WLAN_REASON_UNSPECIFIED); 00067 } 00068 00069 return 0; 00070 } 00071 00080 void hostapd_prune_associations(struct hostapd_data *hapd, const u8 *addr) 00081 { 00082 struct prune_data data; 00083 data.hapd = hapd; 00084 data.addr = addr; 00085 if (hapd->iface->for_each_interface) 00086 hapd->iface->for_each_interface(hapd->iface->interfaces, 00087 prune_associations, &data); 00088 }