[PATCH] mac80211: revamp interface and filter configuration
[safe/jmp/linux-2.6] / net / mac80211 / ieee80211_i.h
index c557d57..74deecd 100644 (file)
@@ -113,6 +113,15 @@ typedef enum {
        TXRX_CONTINUE, TXRX_DROP, TXRX_QUEUED
 } ieee80211_txrx_result;
 
+/* flags used in struct ieee80211_txrx_data.flags */
+/* whether the MSDU was fragmented */
+#define IEEE80211_TXRXD_FRAGMENTED             BIT(0)
+#define IEEE80211_TXRXD_TXUNICAST              BIT(1)
+#define IEEE80211_TXRXD_TXPS_BUFFERED          BIT(2)
+#define IEEE80211_TXRXD_TXPROBE_LAST_FRAG      BIT(3)
+#define IEEE80211_TXRXD_RXIN_SCAN              BIT(4)
+/* frame is destined to interface currently processed (incl. multicast frames) */
+#define IEEE80211_TXRXD_RXRA_MATCH             BIT(5)
 struct ieee80211_txrx_data {
        struct sk_buff *skb;
        struct net_device *dev;
@@ -121,13 +130,10 @@ struct ieee80211_txrx_data {
        struct sta_info *sta;
        u16 fc, ethertype;
        struct ieee80211_key *key;
-       unsigned int fragmented:1; /* whether the MSDU was fragmented */
+       unsigned int flags;
        union {
                struct {
                        struct ieee80211_tx_control *control;
-                       unsigned int unicast:1;
-                       unsigned int ps_buffered:1;
-                       unsigned int probe_last_frag:1;
                        struct ieee80211_hw_mode *mode;
                        struct ieee80211_rate *rate;
                        /* use this rate (if set) for last fragment; rate can
@@ -147,23 +153,21 @@ struct ieee80211_txrx_data {
                        int sent_ps_buffered;
                        int queue;
                        int load;
-                       unsigned int in_scan:1;
-                       /* frame is destined to interface currently processed
-                        * (including multicast frames) */
-                       unsigned int ra_match:1;
                } rx;
        } u;
 };
 
+/* flags used in struct ieee80211_tx_packet_data.flags */
+#define IEEE80211_TXPD_REQ_TX_STATUS   BIT(0)
+#define IEEE80211_TXPD_DO_NOT_ENCRYPT  BIT(1)
+#define IEEE80211_TXPD_REQUEUE         BIT(2)
+#define IEEE80211_TXPD_MGMT_IFACE      BIT(3)
 /* Stored in sk_buff->cb */
 struct ieee80211_tx_packet_data {
        int ifindex;
        unsigned long jiffies;
-       unsigned int req_tx_status:1;
-       unsigned int do_not_encrypt:1;
-       unsigned int requeue:1;
-       unsigned int mgmt_iface:1;
-       unsigned int queue:4;
+       unsigned int flags;
+       u8 queue;
 };
 
 struct ieee80211_tx_stored_packet {
@@ -174,7 +178,7 @@ struct ieee80211_tx_stored_packet {
        int last_frag_rateidx;
        int last_frag_hwrate;
        struct ieee80211_rate *last_frag_rate;
-       unsigned int last_frag_rate_ctrl_probe:1;
+       unsigned int last_frag_rate_ctrl_probe;
 };
 
 typedef ieee80211_txrx_result (*ieee80211_tx_handler)
@@ -213,6 +217,19 @@ struct ieee80211_if_vlan {
        u8 id;
 };
 
+/* flags used in struct ieee80211_if_sta.flags */
+#define IEEE80211_STA_SSID_SET         BIT(0)
+#define IEEE80211_STA_BSSID_SET                BIT(1)
+#define IEEE80211_STA_PREV_BSSID_SET   BIT(2)
+#define IEEE80211_STA_AUTHENTICATED    BIT(3)
+#define IEEE80211_STA_ASSOCIATED       BIT(4)
+#define IEEE80211_STA_PROBEREQ_POLL    BIT(5)
+#define IEEE80211_STA_CREATE_IBSS      BIT(6)
+#define IEEE80211_STA_MIXED_CELL       BIT(7)
+#define IEEE80211_STA_WMM_ENABLED      BIT(8)
+#define IEEE80211_STA_AUTO_SSID_SEL    BIT(10)
+#define IEEE80211_STA_AUTO_BSSID_SEL   BIT(11)
+#define IEEE80211_STA_AUTO_CHANNEL_SEL BIT(12)
 struct ieee80211_if_sta {
        enum {
                IEEE80211_DISABLED, IEEE80211_AUTHENTICATE,
@@ -235,25 +252,14 @@ struct ieee80211_if_sta {
 
        int auth_tries, assoc_tries;
 
-       unsigned int ssid_set:1;
-       unsigned int bssid_set:1;
-       unsigned int prev_bssid_set:1;
-       unsigned int authenticated:1;
-       unsigned int associated:1;
-       unsigned int probereq_poll:1;
-       unsigned int create_ibss:1;
-       unsigned int mixed_cell:1;
-       unsigned int wmm_enabled:1;
-       unsigned int auto_ssid_sel:1;
-       unsigned int auto_bssid_sel:1;
-       unsigned int auto_channel_sel:1;
+       unsigned int flags;
 #define IEEE80211_STA_REQ_SCAN 0
 #define IEEE80211_STA_REQ_AUTH 1
 #define IEEE80211_STA_REQ_RUN  2
        unsigned long request;
        struct sk_buff_head skb_queue;
 
-       int key_mgmt;
+       int key_management_enabled;
        unsigned long last_probe;
 
 #define IEEE80211_AUTH_ALG_OPEN BIT(0)
@@ -271,26 +277,28 @@ struct ieee80211_if_sta {
 };
 
 
+/* flags used in struct ieee80211_sub_if_data.flags */
+#define IEEE80211_SDATA_ALLMULTI       BIT(0)
+#define IEEE80211_SDATA_PROMISC                BIT(1)
+#define IEEE80211_SDATA_USE_PROTECTION BIT(2) /* CTS protect ERP frames */
+/* use short preamble with IEEE 802.11b: this flag is set when the AP or beacon
+ * generator reports that there are no present stations that cannot support short
+ * preambles */
+#define IEEE80211_SDATA_SHORT_PREAMBLE BIT(3)
 struct ieee80211_sub_if_data {
        struct list_head list;
        unsigned int type;
 
        struct wireless_dev wdev;
 
+       /* keys */
+       struct list_head key_list;
+
        struct net_device *dev;
        struct ieee80211_local *local;
 
-       int mc_count;
-       unsigned int allmulti:1;
-       unsigned int promisc:1;
-       unsigned int use_protection:1; /* CTS protect ERP frames */
-
-       /* use short preamble with IEEE 802.11b: this flag is set when the AP
-        * or beacon generator reports that there are no present stations that
-        * cannot support short preambles */
-       unsigned int short_preamble:1;
+       unsigned int flags;
 
-       struct net_device_stats stats;
        int drop_unencrypted;
        int eapol; /* 0 = process EAPOL frames as normal data frames,
                    * 1 = send EAPOL frames through wlan#ap to hostapd
@@ -401,6 +409,7 @@ struct ieee80211_local {
        struct net_device *apdev; /* wlan#ap - management frames (hostapd) */
        int open_count;
        int monitors;
+       unsigned int filter_flags; /* FIF_* */
        struct iw_statistics wstats;
        u8 wstats_flags;
        int tx_headroom; /* required headroom for hardware/radiotap */
@@ -455,9 +464,6 @@ struct ieee80211_local {
        struct crypto_blkcipher *wep_tx_tfm;
        struct crypto_blkcipher *wep_rx_tfm;
        u32 wep_iv;
-       int key_tx_rx_threshold; /* number of times any key can be used in TX
-                                 * or RX before generating a rekey
-                                 * notification; 0 = notification disabled. */
 
        int bridge_packets; /* bridge packets between associated stations and
                             * deliver multicast frames both back to wireless
@@ -543,9 +549,6 @@ struct ieee80211_local {
 #endif /* CONFIG_MAC80211_DEBUG_COUNTERS */
 
 
-       int default_wep_only; /* only default WEP keys are used with this
-                              * interface; this is used to decide when hwaccel
-                              * can be used with default keys */
        int total_ps_buffered; /* total number of all buffered unicast and
                                * multicast packets for power saving stations
                                */
@@ -566,7 +569,6 @@ struct ieee80211_local {
                struct dentry *antenna_sel_tx;
                struct dentry *antenna_sel_rx;
                struct dentry *bridge_packets;
-               struct dentry *key_tx_rx_threshold;
                struct dentry *rts_threshold;
                struct dentry *fragmentation_threshold;
                struct dentry *short_retry_limit;
@@ -715,18 +717,12 @@ void ieee80211_tx_set_iswep(struct ieee80211_txrx_data *tx);
 int ieee80211_if_update_wds(struct net_device *dev, u8 *remote_addr);
 void ieee80211_if_setup(struct net_device *dev);
 void ieee80211_if_mgmt_setup(struct net_device *dev);
-struct net_device_stats *ieee80211_dev_stats(struct net_device *dev);
 struct ieee80211_rate *ieee80211_get_rate(struct ieee80211_local *local,
                                          int phymode, int hwrate);
-void ieee80211_key_threshold_notify(struct net_device *dev,
-                                   struct ieee80211_key *key,
-                                   struct sta_info *sta);
 
 /* ieee80211_ioctl.c */
 extern const struct iw_handler_def ieee80211_iw_handler_def;
 
-void ieee80211_update_default_wep_only(struct ieee80211_local *local);
-
 
 /* Least common multiple of the used rates (in 100 kbps). This is used to
  * calculate rate_inv values for each rate so that only integers are needed. */
@@ -807,14 +803,6 @@ int ieee80211_monitor_start_xmit(struct sk_buff *skb, struct net_device *dev);
 int ieee80211_subif_start_xmit(struct sk_buff *skb, struct net_device *dev);
 int ieee80211_mgmt_start_xmit(struct sk_buff *skb, struct net_device *dev);
 
-/* key handling */
-struct ieee80211_key_conf *
-ieee80211_key_data2conf(struct ieee80211_local *local,
-                       const struct ieee80211_key *data);
-struct ieee80211_key *ieee80211_key_alloc(struct ieee80211_sub_if_data *sdata,
-                                         int idx, size_t key_len, gfp_t flags);
-void ieee80211_key_free(struct ieee80211_key *key);
-
 /* utility functions/constants */
 extern void *mac80211_wiphy_privid; /* for wiphy privid */
 extern const unsigned char rfc1042_header[6];
@@ -823,5 +811,7 @@ u8 *ieee80211_get_bssid(struct ieee80211_hdr *hdr, size_t len);
 int ieee80211_is_eapol(const struct sk_buff *skb);
 int ieee80211_frame_duration(struct ieee80211_local *local, size_t len,
                             int rate, int erp, int short_preamble);
+void mac80211_ev_michael_mic_failure(struct net_device *dev, int keyidx,
+                                    struct ieee80211_hdr *hdr);
 
 #endif /* IEEE80211_I_H */