xref: /freebsd/contrib/wpa/src/ap/ap_list.h (revision 884a2a699669ec61e2366e3e358342dbc94be24a)
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 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 	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