Merge wpa_supplicant and hostapd driver wrapper implementations
[wpasupplicant] / hostapd / hostapd.h
index d989820..03123f8 100644 (file)
@@ -1,7 +1,8 @@
 /*
  * hostapd / Initialization and configuration
  * Host AP kernel driver
- * Copyright (c) 2002-2007, Jouni Malinen <j@w1.fi>
+ * 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
 #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;
-};
+#include "hostapd_defs.h"
 
 struct wpa_driver_ops;
 struct wpa_ctrl_dst;
 struct radius_server_data;
+struct upnp_wps_device_sm;
 
 #ifdef CONFIG_FULL_DYNAMIC_VLAN
 struct full_dynamic_vlan;
@@ -117,13 +42,17 @@ struct hostapd_data {
 
        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;
@@ -137,12 +66,6 @@ struct hostapd_data {
 
        struct iapp_data *iapp;
 
-       enum { DO_NOT_ASSOC = 0, WAIT_BEACON, AUTHENTICATE, ASSOCIATE,
-              ASSOCIATED } assoc_ap_state;
-       char assoc_ap_ssid[33];
-       int assoc_ap_ssid_len;
-       u16 assoc_ap_aid;
-
        struct hostapd_cached_radius_acl *acl_cache;
        struct hostapd_acl_query_data *acl_queries;
 
@@ -168,28 +91,27 @@ struct hostapd_data {
 #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 */
 };
 
 
 /**
- * hostapd_iface_cb - Generic callback type for per-iface asynchronous requests
- * @iface: the interface the event occured on.
- * @status: 0 if the request succeeded; -1 if the request failed.
- */
-typedef void (*hostapd_iface_cb)(struct hostapd_iface *iface, int status);
-
-
-struct hostapd_config_change;
-
-/**
  * struct hostapd_iface - hostapd per-interface data structure
  */
 struct hostapd_iface {
+       void *owner;
        char *config_fname;
        struct hostapd_config *conf;
 
-       hostapd_iface_cb setup_cb;
-
        size_t num_bss;
        struct hostapd_data **bss;
 
@@ -205,7 +127,6 @@ struct hostapd_iface {
         * current_mode->channels */
        int num_rates;
        struct hostapd_rate_data *current_rates;
-       hostapd_iface_cb hw_mode_sel_cb;
 
        u16 hw_flags;
 
@@ -233,19 +154,22 @@ struct hostapd_iface {
        /* Overlapping BSS information */
        int olbc_ht;
 
-       int dfs_enable;
-       u8 pwr_const;
-       unsigned int tx_power;
-       unsigned int sta_max_power;
-
-       unsigned int channel_switch;
-
-       struct hostapd_config_change *change;
-       hostapd_iface_cb reload_iface_cb;
-       hostapd_iface_cb config_reload_cb;
+#ifdef CONFIG_IEEE80211N
+       u16 ht_op_mode;
+#endif /* CONFIG_IEEE80211N */
 };
 
-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);
+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(int (*cb)(struct hostapd_iface *iface,
+                                        void *ctx), void *ctx);
 
 #endif /* HOSTAPD_H */