ap_list.h revision c5ec7f57ead87efa365800228aa0b09a12d9e6c4
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
14struct 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
48struct ieee802_11_elems;
49struct hostapd_frame_info;
50
51struct ap_info * ap_get_ap(struct hostapd_iface *iface, const u8 *sta);
52int ap_ap_for_each(struct hostapd_iface *iface,
53		   int (*func)(struct ap_info *s, void *data), void *data);
54void 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
59int ap_list_init(struct hostapd_iface *iface);
60void ap_list_deinit(struct hostapd_iface *iface);
61#else /* NEED_AP_MLME */
62static inline int ap_list_init(struct hostapd_iface *iface)
63{
64	return 0;
65}
66
67static inline void ap_list_deinit(struct hostapd_iface *iface)
68{
69}
70#endif /* NEED_AP_MLME */
71
72#endif /* AP_LIST_H */
73