1/* 2 * wpa_supplicant - WPA2/RSN PMKSA cache functions 3 * Copyright (c) 2003-2006, Jouni Malinen <j@w1.fi> 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 * Alternatively, this software may be distributed under the terms of BSD 10 * license. 11 * 12 * See README and COPYING for more details. 13 */ 14 15#ifndef PMKSA_CACHE_H 16#define PMKSA_CACHE_H 17 18/** 19 * struct rsn_pmksa_cache_entry - PMKSA cache entry 20 */ 21struct rsn_pmksa_cache_entry { 22 struct rsn_pmksa_cache_entry *next; 23 u8 pmkid[PMKID_LEN]; 24 u8 pmk[PMK_LEN]; 25 size_t pmk_len; 26 os_time_t expiration; 27 int akmp; /* WPA_KEY_MGMT_* */ 28 u8 aa[ETH_ALEN]; 29 30 os_time_t reauth_time; 31 struct wpa_ssid *ssid; 32 int opportunistic; 33}; 34 35struct rsn_pmksa_cache; 36 37#if defined(IEEE8021X_EAPOL) && !defined(CONFIG_NO_WPA2) 38 39struct rsn_pmksa_cache * 40pmksa_cache_init(void (*free_cb)(struct rsn_pmksa_cache_entry *entry, 41 void *ctx, int replace), 42 void *ctx, struct wpa_sm *sm); 43void pmksa_cache_deinit(struct rsn_pmksa_cache *pmksa); 44struct rsn_pmksa_cache_entry * pmksa_cache_get(struct rsn_pmksa_cache *pmksa, 45 const u8 *aa, const u8 *pmkid); 46int pmksa_cache_list(struct wpa_sm *sm, char *buf, size_t len); 47struct rsn_pmksa_cache_entry * 48pmksa_cache_add(struct rsn_pmksa_cache *pmksa, const u8 *pmk, size_t pmk_len, 49 const u8 *aa, const u8 *spa, struct wpa_ssid *ssid); 50void pmksa_cache_notify_reconfig(struct rsn_pmksa_cache *pmksa); 51struct rsn_pmksa_cache_entry * pmksa_cache_get_current(struct wpa_sm *sm); 52void pmksa_cache_clear_current(struct wpa_sm *sm); 53int pmksa_cache_set_current(struct wpa_sm *sm, const u8 *pmkid, 54 const u8 *bssid, struct wpa_ssid *ssid, 55 int try_opportunistic); 56struct rsn_pmksa_cache_entry * 57pmksa_cache_get_opportunistic(struct rsn_pmksa_cache *pmksa, 58 struct wpa_ssid *ssid, const u8 *aa); 59 60#else /* IEEE8021X_EAPOL and !CONFIG_NO_WPA2 */ 61 62static inline struct rsn_pmksa_cache * 63pmksa_cache_init(void (*free_cb)(struct rsn_pmksa_cache_entry *entry, 64 void *ctx, int replace), 65 void *ctx, struct wpa_sm *sm) 66{ 67 return (void *) -1; 68} 69 70static inline void pmksa_cache_deinit(struct rsn_pmksa_cache *pmksa) 71{ 72} 73 74static inline struct rsn_pmksa_cache_entry * 75pmksa_cache_get(struct rsn_pmksa_cache *pmksa, const u8 *aa, const u8 *pmkid) 76{ 77 return NULL; 78} 79 80static inline struct rsn_pmksa_cache_entry * 81pmksa_cache_get_current(struct wpa_sm *sm) 82{ 83 return NULL; 84} 85 86static inline int pmksa_cache_list(struct wpa_sm *sm, char *buf, size_t len) 87{ 88 return -1; 89} 90 91static inline struct rsn_pmksa_cache_entry * 92pmksa_cache_add(struct rsn_pmksa_cache *pmksa, const u8 *pmk, size_t pmk_len, 93 const u8 *aa, const u8 *spa, struct wpa_ssid *ssid) 94{ 95 return NULL; 96} 97 98static inline void pmksa_cache_notify_reconfig(struct rsn_pmksa_cache *pmksa) 99{ 100} 101 102static inline void pmksa_cache_clear_current(struct wpa_sm *sm) 103{ 104} 105 106static inline int pmksa_cache_set_current(struct wpa_sm *sm, const u8 *pmkid, 107 const u8 *bssid, 108 struct wpa_ssid *ssid, 109 int try_opportunistic) 110{ 111 return -1; 112} 113 114#endif /* IEEE8021X_EAPOL and !CONFIG_NO_WPA2 */ 115 116#endif /* PMKSA_CACHE_H */ 117