Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
key.h
Go to the documentation of this file.
1 /*
2  * Copyright 2002-2004, Instant802 Networks, Inc.
3  * Copyright 2005, Devicescape Software, Inc.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation.
8  */
9 
10 #ifndef IEEE80211_KEY_H
11 #define IEEE80211_KEY_H
12 
13 #include <linux/types.h>
14 #include <linux/list.h>
15 #include <linux/crypto.h>
16 #include <linux/rcupdate.h>
17 #include <net/mac80211.h>
18 
19 #define NUM_DEFAULT_KEYS 4
20 #define NUM_DEFAULT_MGMT_KEYS 2
21 
22 #define WEP_IV_LEN 4
23 #define WEP_ICV_LEN 4
24 #define ALG_CCMP_KEY_LEN 16
25 #define CCMP_HDR_LEN 8
26 #define CCMP_MIC_LEN 8
27 #define CCMP_TK_LEN 16
28 #define CCMP_PN_LEN 6
29 #define TKIP_IV_LEN 8
30 #define TKIP_ICV_LEN 4
31 #define CMAC_PN_LEN 6
32 
33 #define NUM_RX_DATA_QUEUES 16
34 
35 struct ieee80211_local;
37 struct sta_info;
38 
49 };
50 
55 };
56 
57 struct tkip_ctx {
58  u32 iv32; /* current iv32 */
59  u16 iv16; /* current iv16 */
60  u16 p1k[5]; /* p1k cache */
61  u32 p1k_iv32; /* iv32 for which p1k computed */
63 };
64 
65 struct ieee80211_key {
68  struct sta_info *sta;
69 
70  /* for sdata list */
71  struct list_head list;
72 
73  /* protected by key mutex */
74  unsigned int flags;
75 
76  union {
77  struct {
78  /* protects tx context */
80 
81  /* last used TSC */
82  struct tkip_ctx tx;
83 
84  /* last received RSC */
86  } tkip;
87  struct {
89  /*
90  * Last received packet number. The first
91  * NUM_RX_DATA_QUEUES counters are used with Data
92  * frames and the last counter is used with Robust
93  * Management frames.
94  */
96  struct crypto_cipher *tfm;
97  u32 replays; /* dot11RSNAStatsCCMPReplays */
98  } ccmp;
99  struct {
102  struct crypto_cipher *tfm;
103  u32 replays; /* dot11RSNAStatsCMACReplays */
104  u32 icverrors; /* dot11RSNAStatsCMACICVErrors */
105  } aes_cmac;
106  } u;
107 
108  /* number of times this key has been used */
110 
111 #ifdef CONFIG_MAC80211_DEBUGFS
112  struct {
113  struct dentry *stalink;
114  struct dentry *dir;
115  int cnt;
116  } debugfs;
117 #endif
118 
119  /*
120  * key config, must be last because it contains key
121  * material as variable length member
122  */
124 };
125 
127  const u8 *key_data,
128  size_t seq_len, const u8 *seq);
129 /*
130  * Insert a key into data structures (sdata, sta if necessary)
131  * to make it used, free old key.
132  */
135  struct sta_info *sta);
138  struct ieee80211_key *key);
140  bool uni, bool multi);
142  int idx);
146 
147 #define key_mtx_dereference(local, ref) \
148  rcu_dereference_protected(ref, lockdep_is_held(&((local)->key_mtx)))
149 
150 #endif /* IEEE80211_KEY_H */