@ -4216,3 +4216,47 @@ void wpa_auth_reconfig_group_keys(struct wpa_authenticator *wpa_auth)
for ( group = wpa_auth - > group ; group ; group = group - > next )
wpa_group_config_group_keys ( wpa_auth , group ) ;
}
# ifdef CONFIG_FILS
struct wpa_auth_fils_iter_data {
struct wpa_authenticator * auth ;
const u8 * cache_id ;
struct rsn_pmksa_cache_entry * pmksa ;
const u8 * spa ;
const u8 * pmkid ;
} ;
static int wpa_auth_fils_iter ( struct wpa_authenticator * a , void * ctx )
{
struct wpa_auth_fils_iter_data * data = ctx ;
if ( a = = data - > auth | | ! a - > conf . fils_cache_id | |
os_memcmp ( a - > conf . fils_cache_id , data - > cache_id ,
FILS_CACHE_ID_LEN ) ! = 0 )
return 0 ;
data - > pmksa = pmksa_cache_auth_get ( a - > pmksa , data - > spa , data - > pmkid ) ;
return data - > pmksa ! = NULL ;
}
struct rsn_pmksa_cache_entry *
wpa_auth_pmksa_get_fils_cache_id ( struct wpa_authenticator * wpa_auth ,
const u8 * sta_addr , const u8 * pmkid )
{
struct wpa_auth_fils_iter_data idata ;
if ( ! wpa_auth - > conf . fils_cache_id_set )
return NULL ;
idata . auth = wpa_auth ;
idata . cache_id = wpa_auth - > conf . fils_cache_id ;
idata . pmksa = NULL ;
idata . spa = sta_addr ;
idata . pmkid = pmkid ;
wpa_auth_for_each_auth ( wpa_auth , wpa_auth_fils_iter , & idata ) ;
return idata . pmksa ;
}
# endif /* CONFIG_FILS */