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