/*
* hostapd / Initialization and configuration
- * Host AP kernel driver
* Copyright (c) 2002-2008, Jouni Malinen <j@w1.fi>
- * Copyright (c) 2007-2008, Intel Corporation
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
#ifndef HOSTAPD_H
#define HOSTAPD_H
-#include "common.h"
-#include "ap.h"
-
-#ifndef ETH_ALEN
-#define ETH_ALEN 6
-#endif
-#ifndef IFNAMSIZ
-#define IFNAMSIZ 16
-#endif
-#ifndef ETH_P_ALL
-#define ETH_P_ALL 0x0003
-#endif
-#ifndef ETH_P_PAE
-#define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */
-#endif /* ETH_P_PAE */
-#ifndef ETH_P_EAPOL
-#define ETH_P_EAPOL ETH_P_PAE
-#endif /* ETH_P_EAPOL */
-
-#ifndef ETH_P_RRB
-#define ETH_P_RRB 0x890D
-#endif /* ETH_P_RRB */
-
-#include "config.h"
-
-#ifdef _MSC_VER
-#pragma pack(push, 1)
-#endif /* _MSC_VER */
-
#define MAX_VLAN_ID 4094
-struct ieee8023_hdr {
- u8 dest[6];
- u8 src[6];
- u16 ethertype;
-} STRUCT_PACKED;
-
-
-struct ieee80211_hdr {
- le16 frame_control;
- le16 duration_id;
- u8 addr1[6];
- u8 addr2[6];
- u8 addr3[6];
- le16 seq_ctrl;
- /* followed by 'u8 addr4[6];' if ToDS and FromDS is set in data frame
- */
-} STRUCT_PACKED;
-
-#ifdef _MSC_VER
-#pragma pack(pop)
-#endif /* _MSC_VER */
-
-#define IEEE80211_DA_FROMDS addr1
-#define IEEE80211_BSSID_FROMDS addr2
-#define IEEE80211_SA_FROMDS addr3
-
-#define IEEE80211_HDRLEN (sizeof(struct ieee80211_hdr))
-
-#define IEEE80211_FC(type, stype) host_to_le16((type << 2) | (stype << 4))
-
-/* MTU to be set for the wlan#ap device; this is mainly needed for IEEE 802.1X
- * frames that might be longer than normal default MTU and they are not
- * fragmented */
-#define HOSTAPD_MTU 2290
-
-extern unsigned char rfc1042_header[6];
-
-struct hostap_sta_driver_data {
- unsigned long rx_packets, tx_packets, rx_bytes, tx_bytes;
- unsigned long current_tx_rate;
- unsigned long inactive_msec;
- unsigned long flags;
- unsigned long num_ps_buf_frames;
- unsigned long tx_retry_failed;
- unsigned long tx_retry_count;
- int last_rssi;
- int last_ack_rssi;
-};
-
struct wpa_driver_ops;
struct wpa_ctrl_dst;
struct radius_server_data;
+struct upnp_wps_device_sm;
+struct hapd_interfaces;
#ifdef CONFIG_FULL_DYNAMIC_VLAN
struct full_dynamic_vlan;
#endif /* CONFIG_FULL_DYNAMIC_VLAN */
+struct hostapd_probereq_cb {
+ void (*cb)(void *ctx, const u8 *sa, const u8 *ie, size_t ie_len);
+ void *ctx;
+};
+
+#define HOSTAPD_RATE_BASIC 0x00000001
+
+struct hostapd_rate_data {
+ int rate; /* rate in 100 kbps */
+ int flags; /* HOSTAPD_RATE_ flags */
+};
+
+
/**
* struct hostapd_data - hostapd per-BSS data structure
*/
int num_sta; /* number of entries in sta_list */
struct sta_info *sta_list; /* STA info list head */
+#define STA_HASH_SIZE 256
+#define STA_HASH(sta) (sta[5])
struct sta_info *sta_hash[STA_HASH_SIZE];
- /* pointers to STA info; based on allocated AID or NULL if AID free
- * AID is in the range 1-2007, so sta_aid[0] corresponders to AID 1
- * and so on
+ /*
+ * Bitfield for indicating which AIDs are allocated. Only AID values
+ * 1-2007 are used and as such, the bit at index 0 corresponds to AID
+ * 1.
*/
- struct sta_info *sta_aid[MAX_AID_TABLE_SIZE];
+#define AID_WORDS ((2008 + 31) / 32)
+ u32 sta_aid[AID_WORDS];
const struct wpa_driver_ops *driver;
void *drv_priv;
- u8 *default_wep_key;
- u8 default_wep_key_idx;
+ void *msg_ctx; /* ctx for wpa_msg() calls */
struct radius_client_data *radius;
- int radius_client_reconfigured;
u32 acct_session_id_hi, acct_session_id_lo;
struct iapp_data *iapp;
#endif /* CONFIG_FULL_DYNAMIC_VLAN */
struct l2_packet_data *l2;
+ struct wps_context *wps;
+
+#ifdef CONFIG_WPS
+ u8 *wps_beacon_ie;
+ size_t wps_beacon_ie_len;
+ u8 *wps_probe_resp_ie;
+ size_t wps_probe_resp_ie_len;
+ unsigned int ap_pin_failures;
+ struct upnp_wps_device_sm *wps_upnp;
+#endif /* CONFIG_WPS */
+
+ struct hostapd_probereq_cb *probereq_cb;
+ size_t num_probereq_cb;
};
* struct hostapd_iface - hostapd per-interface data structure
*/
struct hostapd_iface {
+ struct hapd_interfaces *interfaces;
+ void *owner;
char *config_fname;
struct hostapd_config *conf;
/* Overlapping BSS information */
int olbc_ht;
-#ifdef CONFIG_IEEE80211N
u16 ht_op_mode;
-#endif /* CONFIG_IEEE80211N */
+ void (*scan_cb)(struct hostapd_iface *iface);
};
-void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta,
- int reassoc);
+int hostapd_reload_config(struct hostapd_iface *iface);
+struct hostapd_data *
+hostapd_alloc_bss_data(struct hostapd_iface *hapd_iface,
+ struct hostapd_config *conf,
+ struct hostapd_bss_config *bss);
+int hostapd_setup_interface(struct hostapd_iface *iface);
+int hostapd_setup_interface_complete(struct hostapd_iface *iface, int err);
+void hostapd_interface_deinit(struct hostapd_iface *iface);
+int handle_reload_iface(struct hostapd_iface *iface, void *ctx);
+int handle_dump_state_iface(struct hostapd_iface *iface, void *ctx);
+
+int hostapd_for_each_interface(struct hapd_interfaces *interfaces,
+ int (*cb)(struct hostapd_iface *iface,
+ void *ctx), void *ctx);
+
+int hostapd_register_probereq_cb(struct hostapd_data *hapd,
+ void (*cb)(void *ctx, const u8 *sa,
+ const u8 *ie, size_t ie_len),
+ void *ctx);
+int hostapd_set_drv_ieee8021x(struct hostapd_data *hapd, const char *ifname,
+ int enabled);
+int hostapd_sta_flags_to_drv(int flags);
+
+int eap_server_register_methods(void);
#endif /* HOSTAPD_H */