pmksa_cache.h revision 526fc2a7dc09b4450086cdec313a5c44d36b10fd
1526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/* 2526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * wpa_supplicant - WPA2/RSN PMKSA cache functions 3526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Copyright (c) 2003-2008, Jouni Malinen <j@w1.fi> 4526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 5526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This program is free software; you can redistribute it and/or modify 6526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * it under the terms of the GNU General Public License version 2 as 7526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * published by the Free Software Foundation. 8526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 9526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Alternatively, this software may be distributed under the terms of BSD 10526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * license. 11526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 12526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * See README and COPYING for more details. 13526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 14526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 15526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifndef PMKSA_CACHE_H 16526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define PMKSA_CACHE_H 17526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 18526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/** 19526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * struct rsn_pmksa_cache_entry - PMKSA cache entry 20526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 21526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct rsn_pmksa_cache_entry { 22526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt struct rsn_pmksa_cache_entry *next; 23526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt u8 pmkid[PMKID_LEN]; 24526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt u8 pmk[PMK_LEN]; 25526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt size_t pmk_len; 26526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt os_time_t expiration; 27526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int akmp; /* WPA_KEY_MGMT_* */ 28526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt u8 aa[ETH_ALEN]; 29526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 30526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt os_time_t reauth_time; 31526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 32526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 33526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * network_ctx - Network configuration context 34526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 35526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This field is only used to match PMKSA cache entries to a specific 36526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * network configuration (e.g., a specific SSID and security policy). 37526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This can be a pointer to the configuration entry, but PMKSA caching 38526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * code does not dereference the value and this could be any kind of 39526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * identifier. 40526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 41526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt void *network_ctx; 42526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int opportunistic; 43526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}; 44526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 45526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct rsn_pmksa_cache; 46526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 47526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#if defined(IEEE8021X_EAPOL) && !defined(CONFIG_NO_WPA2) 48526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 49526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct rsn_pmksa_cache * 50526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtpmksa_cache_init(void (*free_cb)(struct rsn_pmksa_cache_entry *entry, 51526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt void *ctx, int replace), 52526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt void *ctx, struct wpa_sm *sm); 53526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid pmksa_cache_deinit(struct rsn_pmksa_cache *pmksa); 54526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct rsn_pmksa_cache_entry * pmksa_cache_get(struct rsn_pmksa_cache *pmksa, 55526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const u8 *aa, const u8 *pmkid); 56526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtint pmksa_cache_list(struct wpa_sm *sm, char *buf, size_t len); 57526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct rsn_pmksa_cache_entry * 58526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtpmksa_cache_add(struct rsn_pmksa_cache *pmksa, const u8 *pmk, size_t pmk_len, 59526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const u8 *aa, const u8 *spa, void *network_ctx, int akmp); 60526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid pmksa_cache_notify_reconfig(struct rsn_pmksa_cache *pmksa); 61526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct rsn_pmksa_cache_entry * pmksa_cache_get_current(struct wpa_sm *sm); 62526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid pmksa_cache_clear_current(struct wpa_sm *sm); 63526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtint pmksa_cache_set_current(struct wpa_sm *sm, const u8 *pmkid, 64526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const u8 *bssid, void *network_ctx, 65526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int try_opportunistic); 66526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct rsn_pmksa_cache_entry * 67526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtpmksa_cache_get_opportunistic(struct rsn_pmksa_cache *pmksa, 68526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt void *network_ctx, const u8 *aa); 69526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 70526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#else /* IEEE8021X_EAPOL and !CONFIG_NO_WPA2 */ 71526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 72526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline struct rsn_pmksa_cache * 73526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtpmksa_cache_init(void (*free_cb)(struct rsn_pmksa_cache_entry *entry, 74526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt void *ctx, int replace), 75526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt void *ctx, struct wpa_sm *sm) 76526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 77526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return (void *) -1; 78526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 79526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 80526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void pmksa_cache_deinit(struct rsn_pmksa_cache *pmksa) 81526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 82526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 83526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 84526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline struct rsn_pmksa_cache_entry * 85526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtpmksa_cache_get(struct rsn_pmksa_cache *pmksa, const u8 *aa, const u8 *pmkid) 86526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 87526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return NULL; 88526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 89526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 90526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline struct rsn_pmksa_cache_entry * 91526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtpmksa_cache_get_current(struct wpa_sm *sm) 92526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 93526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return NULL; 94526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 95526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 96526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline int pmksa_cache_list(struct wpa_sm *sm, char *buf, size_t len) 97526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 98526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return -1; 99526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 100526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 101526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline struct rsn_pmksa_cache_entry * 102526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtpmksa_cache_add(struct rsn_pmksa_cache *pmksa, const u8 *pmk, size_t pmk_len, 103526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const u8 *aa, const u8 *spa, void *network_ctx, int akmp) 104526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 105526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return NULL; 106526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 107526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 108526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void pmksa_cache_notify_reconfig(struct rsn_pmksa_cache *pmksa) 109526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 110526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 111526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 112526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void pmksa_cache_clear_current(struct wpa_sm *sm) 113526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 114526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 115526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 116526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline int pmksa_cache_set_current(struct wpa_sm *sm, const u8 *pmkid, 117526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const u8 *bssid, 118526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt void *network_ctx, 119526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int try_opportunistic) 120526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 121526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return -1; 122526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 123526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 124526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* IEEE8021X_EAPOL and !CONFIG_NO_WPA2 */ 125526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 126526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* PMKSA_CACHE_H */ 127