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 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 	int ssi_signal;
     38 
     39 	int ht_support;
     40 
     41 	unsigned int num_beacons; /* number of beacon frames received */
     42 	os_time_t last_beacon;
     43 
     44 	int already_seen; /* whether API call AP-NEW has already fetched
     45 			   * information about this AP */
     46 };
     47 
     48 struct ieee802_11_elems;
     49 struct hostapd_frame_info;
     50 
     51 struct ap_info * ap_get_ap(struct hostapd_iface *iface, const u8 *sta);
     52 int ap_ap_for_each(struct hostapd_iface *iface,
     53 		   int (*func)(struct ap_info *s, void *data), void *data);
     54 void ap_list_process_beacon(struct hostapd_iface *iface,
     55 			    const struct ieee80211_mgmt *mgmt,
     56 			    struct ieee802_11_elems *elems,
     57 			    struct hostapd_frame_info *fi);
     58 #ifdef NEED_AP_MLME
     59 int ap_list_init(struct hostapd_iface *iface);
     60 void ap_list_deinit(struct hostapd_iface *iface);
     61 #else /* NEED_AP_MLME */
     62 static inline int ap_list_init(struct hostapd_iface *iface)
     63 {
     64 	return 0;
     65 }
     66 
     67 static inline void ap_list_deinit(struct hostapd_iface *iface)
     68 {
     69 }
     70 #endif /* NEED_AP_MLME */
     71 
     72 #endif /* AP_LIST_H */
     73