1 /* 2 * hostapd / AP table 3 * Copyright (c) 2002-2003, Jouni Malinen <j@w1.fi> 4 * Copyright (c) 2003-2004, Instant802 Networks, Inc. 5 * Copyright (c) 2006, Devicescape Software, Inc. 6 * 7 * This software may be distributed under the terms of the BSD license. 8 * See README for more details. 9 */ 10 11 #ifndef AP_LIST_H 12 #define AP_LIST_H 13 14 struct ap_info { 15 /* Note: next/prev pointers are updated whenever a new beacon is 16 * received because these are used to find the least recently used 17 * entries. iter_next/iter_prev are updated only when adding new BSSes 18 * and when removing old ones. These should be used when iterating 19 * through the table in a manner that allows beacons to be received 20 * during the iteration. */ 21 struct ap_info *next; /* next entry in AP list */ 22 struct ap_info *prev; /* previous entry in AP list */ 23 struct ap_info *hnext; /* next entry in hash table list */ 24 struct ap_info *iter_next; /* next entry in AP iteration list */ 25 struct ap_info *iter_prev; /* previous entry in AP iteration list */ 26 u8 addr[6]; 27 u16 beacon_int; 28 u16 capability; 29 u8 supported_rates[WLAN_SUPP_RATES_MAX]; 30 u8 ssid[33]; 31 size_t ssid_len; 32 int wpa; 33 int erp; /* ERP Info or -1 if ERP info element not present */ 34 35 int channel; 36 int datarate; /* in 100 kbps */ 37 38 int ht_support; 39 40 unsigned int num_beacons; /* number of beacon frames received */ 41 os_time_t last_beacon; 42 43 int already_seen; /* whether API call AP-NEW has already fetched 44 * information about this AP */ 45 }; 46 47 struct ieee802_11_elems; 48 struct hostapd_frame_info; 49 50 struct ap_info * ap_get_ap(struct hostapd_iface *iface, const u8 *sta); 51 int ap_ap_for_each(struct hostapd_iface *iface, 52 int (*func)(struct ap_info *s, void *data), void *data); 53 void ap_list_process_beacon(struct hostapd_iface *iface, 54 const struct ieee80211_mgmt *mgmt, 55 struct ieee802_11_elems *elems, 56 struct hostapd_frame_info *fi); 57 #ifdef NEED_AP_MLME 58 int ap_list_init(struct hostapd_iface *iface); 59 void ap_list_deinit(struct hostapd_iface *iface); 60 #else /* NEED_AP_MLME */ 61 static inline int ap_list_init(struct hostapd_iface *iface) 62 { 63 return 0; 64 } 65 66 static inline void ap_list_deinit(struct hostapd_iface *iface) 67 { 68 } 69 #endif /* NEED_AP_MLME */ 70 71 #endif /* AP_LIST_H */ 72