1 | /* |
---|
2 | * wpa_supplicant - WPA2/RSN PMKSA cache functions |
---|
3 | * Copyright (c) 2003-2009, 2011-2012, Jouni Malinen <j@w1.fi> |
---|
4 | * |
---|
5 | * This software may be distributed under the terms of the BSD license. |
---|
6 | * See README for more details. |
---|
7 | */ |
---|
8 | |
---|
9 | #ifndef PMKSA_CACHE_H |
---|
10 | #define PMKSA_CACHE_H |
---|
11 | |
---|
12 | /** |
---|
13 | * struct rsn_pmksa_cache_entry - PMKSA cache entry |
---|
14 | */ |
---|
15 | struct rsn_pmksa_cache_entry { |
---|
16 | struct rsn_pmksa_cache_entry *next; |
---|
17 | u8 pmkid[PMKID_LEN]; |
---|
18 | u8 pmk[PMK_LEN]; |
---|
19 | size_t pmk_len; |
---|
20 | os_time_t expiration; |
---|
21 | int akmp; /* WPA_KEY_MGMT_* */ |
---|
22 | u8 aa[ETH_ALEN]; |
---|
23 | |
---|
24 | os_time_t reauth_time; |
---|
25 | |
---|
26 | /** |
---|
27 | * network_ctx - Network configuration context |
---|
28 | * |
---|
29 | * This field is only used to match PMKSA cache entries to a specific |
---|
30 | * network configuration (e.g., a specific SSID and security policy). |
---|
31 | * This can be a pointer to the configuration entry, but PMKSA caching |
---|
32 | * code does not dereference the value and this could be any kind of |
---|
33 | * identifier. |
---|
34 | */ |
---|
35 | void *network_ctx; |
---|
36 | int opportunistic; |
---|
37 | }; |
---|
38 | |
---|
39 | struct rsn_pmksa_cache; |
---|
40 | |
---|
41 | enum pmksa_free_reason { |
---|
42 | PMKSA_FREE, |
---|
43 | PMKSA_REPLACE, |
---|
44 | PMKSA_EXPIRE, |
---|
45 | }; |
---|
46 | |
---|
47 | #ifdef IEEE8021X_EAPOL |
---|
48 | |
---|
49 | struct rsn_pmksa_cache * |
---|
50 | pmksa_cache_init(void (*free_cb)(struct rsn_pmksa_cache_entry *entry, |
---|
51 | void *ctx, enum pmksa_free_reason reason), |
---|
52 | void *ctx, struct wpa_sm *sm); |
---|
53 | void pmksa_cache_deinit(struct rsn_pmksa_cache *pmksa); |
---|
54 | struct rsn_pmksa_cache_entry * pmksa_cache_get(struct rsn_pmksa_cache *pmksa, |
---|
55 | const u8 *aa, const u8 *pmkid, |
---|
56 | const void *network_ctx); |
---|
57 | int pmksa_cache_list(struct rsn_pmksa_cache *pmksa, char *buf, size_t len); |
---|
58 | struct rsn_pmksa_cache_entry * |
---|
59 | pmksa_cache_add(struct rsn_pmksa_cache *pmksa, const u8 *pmk, size_t pmk_len, |
---|
60 | const u8 *kck, size_t kck_len, |
---|
61 | const u8 *aa, const u8 *spa, void *network_ctx, int akmp); |
---|
62 | struct rsn_pmksa_cache_entry * pmksa_cache_get_current(struct wpa_sm *sm); |
---|
63 | void pmksa_cache_clear_current(struct wpa_sm *sm); |
---|
64 | int pmksa_cache_set_current(struct wpa_sm *sm, const u8 *pmkid, |
---|
65 | const u8 *bssid, void *network_ctx, |
---|
66 | int try_opportunistic); |
---|
67 | struct rsn_pmksa_cache_entry * |
---|
68 | pmksa_cache_get_opportunistic(struct rsn_pmksa_cache *pmksa, |
---|
69 | void *network_ctx, const u8 *aa); |
---|
70 | void pmksa_cache_flush(struct rsn_pmksa_cache *pmksa, void *network_ctx, |
---|
71 | const u8 *pmk, size_t pmk_len); |
---|
72 | |
---|
73 | #else /* IEEE8021X_EAPOL */ |
---|
74 | |
---|
75 | static inline struct rsn_pmksa_cache * |
---|
76 | pmksa_cache_init(void (*free_cb)(struct rsn_pmksa_cache_entry *entry, |
---|
77 | void *ctx, enum pmksa_free_reason reason), |
---|
78 | void *ctx, struct wpa_sm *sm) |
---|
79 | { |
---|
80 | return (void *) -1; |
---|
81 | } |
---|
82 | |
---|
83 | static inline void pmksa_cache_deinit(struct rsn_pmksa_cache *pmksa) |
---|
84 | { |
---|
85 | } |
---|
86 | |
---|
87 | static inline struct rsn_pmksa_cache_entry * |
---|
88 | pmksa_cache_get(struct rsn_pmksa_cache *pmksa, const u8 *aa, const u8 *pmkid, |
---|
89 | const void *network_ctx) |
---|
90 | { |
---|
91 | return NULL; |
---|
92 | } |
---|
93 | |
---|
94 | static inline struct rsn_pmksa_cache_entry * |
---|
95 | pmksa_cache_get_current(struct wpa_sm *sm) |
---|
96 | { |
---|
97 | return NULL; |
---|
98 | } |
---|
99 | |
---|
100 | static inline int pmksa_cache_list(struct rsn_pmksa_cache *pmksa, char *buf, |
---|
101 | size_t len) |
---|
102 | { |
---|
103 | return -1; |
---|
104 | } |
---|
105 | |
---|
106 | static inline struct rsn_pmksa_cache_entry * |
---|
107 | pmksa_cache_add(struct rsn_pmksa_cache *pmksa, const u8 *pmk, size_t pmk_len, |
---|
108 | const u8 *kck, size_t kck_len, |
---|
109 | const u8 *aa, const u8 *spa, void *network_ctx, int akmp) |
---|
110 | { |
---|
111 | return NULL; |
---|
112 | } |
---|
113 | |
---|
114 | static inline void pmksa_cache_clear_current(struct wpa_sm *sm) |
---|
115 | { |
---|
116 | } |
---|
117 | |
---|
118 | static inline int pmksa_cache_set_current(struct wpa_sm *sm, const u8 *pmkid, |
---|
119 | const u8 *bssid, |
---|
120 | void *network_ctx, |
---|
121 | int try_opportunistic) |
---|
122 | { |
---|
123 | return -1; |
---|
124 | } |
---|
125 | |
---|
126 | static inline void pmksa_cache_flush(struct rsn_pmksa_cache *pmksa, |
---|
127 | void *network_ctx, |
---|
128 | const u8 *pmk, size_t pmk_len) |
---|
129 | { |
---|
130 | } |
---|
131 | |
---|
132 | #endif /* IEEE8021X_EAPOL */ |
---|
133 | |
---|
134 | #endif /* PMKSA_CACHE_H */ |
---|