pmksa_cache_auth.h revision d2986c2e737a8441ff5a791b6b56c1c8322ef3c9
18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * hostapd - PMKSA cache for IEEE 802.11i RSN 304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * Copyright (c) 2004-2008, 2012, Jouni Malinen <j@w1.fi> 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license. 6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details. 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef PMKSA_CACHE_H 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define PMKSA_CACHE_H 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "radius/radius.h" 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct rsn_pmksa_cache_entry - PMKSA cache entry 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache_entry { 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct rsn_pmksa_cache_entry *next, *hnext; 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 pmkid[PMKID_LEN]; 20d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt u8 pmk[PMK_LEN_MAX]; 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t pmk_len; 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt os_time_t expiration; 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int akmp; /* WPA_KEY_MGMT_* */ 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 spa[ETH_ALEN]; 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *identity; 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t identity_len; 2804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt struct wpabuf *cui; 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct radius_class_data radius_class; 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 eap_type_authsrv; 3157c2d39d85825f38c5fdac9b73bb0088406ffc85Dmitry Shmidt struct vlan_description *vlan_desc; 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int opportunistic; 33fb45fd5cfed8bdccd0859c7fc05449fc187e2d06Dmitry Shmidt 34b97e428f8acf1ecb93f38f8d0063d2f2fd0bc36eDmitry Shmidt u64 acct_multi_session_id; 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache; 38d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidtstruct radius_das_attrs; 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache * 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpmksa_cache_auth_init(void (*free_cb)(struct rsn_pmksa_cache_entry *entry, 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *ctx), void *ctx); 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid pmksa_cache_auth_deinit(struct rsn_pmksa_cache *pmksa); 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache_entry * 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpmksa_cache_auth_get(struct rsn_pmksa_cache *pmksa, 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *spa, const u8 *pmkid); 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache_entry * pmksa_cache_get_okc( 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct rsn_pmksa_cache *pmksa, const u8 *spa, const u8 *aa, 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *pmkid); 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache_entry * 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpmksa_cache_auth_add(struct rsn_pmksa_cache *pmksa, 5257c2d39d85825f38c5fdac9b73bb0088406ffc85Dmitry Shmidt const u8 *pmk, size_t pmk_len, const u8 *pmkid, 53fb45fd5cfed8bdccd0859c7fc05449fc187e2d06Dmitry Shmidt const u8 *kck, size_t kck_len, 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *aa, const u8 *spa, int session_timeout, 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct eapol_state_machine *eapol, int akmp); 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache_entry * 57092955c7394ee96d6c8c9724ff46a3c038b36143Paul Stewartpmksa_cache_auth_create_entry(const u8 *pmk, size_t pmk_len, const u8 *pmkid, 58092955c7394ee96d6c8c9724ff46a3c038b36143Paul Stewart const u8 *kck, size_t kck_len, const u8 *aa, 59092955c7394ee96d6c8c9724ff46a3c038b36143Paul Stewart const u8 *spa, int session_timeout, 60092955c7394ee96d6c8c9724ff46a3c038b36143Paul Stewart struct eapol_state_machine *eapol, int akmp); 61092955c7394ee96d6c8c9724ff46a3c038b36143Paul Stewartint pmksa_cache_auth_add_entry(struct rsn_pmksa_cache *pmksa, 62092955c7394ee96d6c8c9724ff46a3c038b36143Paul Stewart struct rsn_pmksa_cache_entry *entry); 63092955c7394ee96d6c8c9724ff46a3c038b36143Paul Stewartstruct rsn_pmksa_cache_entry * 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpmksa_cache_add_okc(struct rsn_pmksa_cache *pmksa, 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct rsn_pmksa_cache_entry *old_entry, 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *aa, const u8 *pmkid); 6757c2d39d85825f38c5fdac9b73bb0088406ffc85Dmitry Shmidtvoid pmksa_cache_to_eapol_data(struct hostapd_data *hapd, 6857c2d39d85825f38c5fdac9b73bb0088406ffc85Dmitry Shmidt struct rsn_pmksa_cache_entry *entry, 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct eapol_state_machine *eapol); 70f7e0a9905988e62e4f70fed8b795722abeab719bDmitry Shmidtvoid pmksa_cache_free_entry(struct rsn_pmksa_cache *pmksa, 71f7e0a9905988e62e4f70fed8b795722abeab719bDmitry Shmidt struct rsn_pmksa_cache_entry *entry); 72432d603c922e970f55866c63212d29c997438977Dmitry Shmidtint pmksa_cache_auth_radius_das_disconnect(struct rsn_pmksa_cache *pmksa, 73432d603c922e970f55866c63212d29c997438977Dmitry Shmidt struct radius_das_attrs *attr); 74e4663044d3a689fb5458247e9bc0f8b58cf72fcaDmitry Shmidtint pmksa_cache_auth_list(struct rsn_pmksa_cache *pmksa, char *buf, size_t len); 75e4663044d3a689fb5458247e9bc0f8b58cf72fcaDmitry Shmidtvoid pmksa_cache_auth_flush(struct rsn_pmksa_cache *pmksa); 76092955c7394ee96d6c8c9724ff46a3c038b36143Paul Stewartint pmksa_cache_auth_list_mesh(struct rsn_pmksa_cache *pmksa, const u8 *addr, 77092955c7394ee96d6c8c9724ff46a3c038b36143Paul Stewart char *buf, size_t len); 788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* PMKSA_CACHE_H */ 80