/*
 * hostapd / AP table
 * Copyright (c) 2002-2003, Jouni Malinen <j@w1.fi>
 * Copyright (c) 2003-2004, Instant802 Networks, Inc.
 * Copyright (c) 2006, Devicescape Software, Inc.
 *
 * This software may be distributed under the terms of the BSD license.
 * See README for more details.
 */

#ifndef AP_LIST_H
#define AP_LIST_H

struct ap_info {
	/* Note: next/prev pointers are updated whenever a new beacon is
	 * received because these are used to find the least recently used
	 * entries. iter_next/iter_prev are updated only when adding new BSSes
	 * and when removing old ones. These should be used when iterating
	 * through the table in a manner that allows beacons to be received
	 * during the iteration. */
	struct ap_info *next; /* next entry in AP list */
	struct ap_info *prev; /* previous entry in AP list */
	struct ap_info *hnext; /* next entry in hash table list */
	struct ap_info *iter_next; /* next entry in AP iteration list */
	struct ap_info *iter_prev; /* previous entry in AP iteration list */
	u8 addr[6];
	u16 beacon_int;
	u16 capability;
	u8 supported_rates[WLAN_SUPP_RATES_MAX];
	u8 ssid[33];
	size_t ssid_len;
	int wpa;
	int erp; /* ERP Info or -1 if ERP info element not present */

	int channel;
	int datarate; /* in 100 kbps */

	int ht_support;

	unsigned int num_beacons; /* number of beacon frames received */
	os_time_t last_beacon;

	int already_seen; /* whether API call AP-NEW has already fetched
			   * information about this AP */
};

struct ieee802_11_elems;
struct hostapd_frame_info;

struct ap_info * ap_get_ap(struct hostapd_iface *iface, const u8 *sta);
int ap_ap_for_each(struct hostapd_iface *iface,
		   int (*func)(struct ap_info *s, void *data), void *data);
void ap_list_process_beacon(struct hostapd_iface *iface,
			    const struct ieee80211_mgmt *mgmt,
			    struct ieee802_11_elems *elems,
			    struct hostapd_frame_info *fi);
#ifdef NEED_AP_MLME
int ap_list_init(struct hostapd_iface *iface);
void ap_list_deinit(struct hostapd_iface *iface);
#else /* NEED_AP_MLME */
static inline int ap_list_init(struct hostapd_iface *iface)
{
	return 0;
}

static inline void ap_list_deinit(struct hostapd_iface *iface)
{
}
#endif /* NEED_AP_MLME */

#endif /* AP_LIST_H */
