/** * pmksa_cache_get_opportunistic - try to get an opportunistic PMKSA entry * @wpa_s: pointer to wpa_supplicant data * @ssid: pointer to the current network configuration * @aa: authenticator address for the new AP * * Try to create a new PMKSA cache entry opportunistically by guessing that the * new AP is sharing the same PMK as another AP that has the same SSID and has * already an entry in PMKSA cache. * * Returns: pointer to a new PMKSA cache entry or %NULL if not available */ struct rsn_pmksa_cache * pmksa_cache_get_opportunistic(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid, const u8 *aa) { struct rsn_pmksa_cache *entry = wpa_s->pmksa; if (ssid == NULL) return NULL; while (entry) { if (entry->ssid == ssid) { entry = pmksa_cache_clone_entry(wpa_s, entry, aa); if (entry) { wpa_printf(MSG_DEBUG, "RSN: added " "opportunistic PMKSA cache entry " "for " MACSTR, MAC2STR(aa)); } return entry; } entry = entry->next; } return NULL; }
/** * pmksa_cache_get_opportunistic - Try to get an opportunistic PMKSA entry * @pmksa: Pointer to PMKSA cache data from pmksa_cache_init() * @network_ctx: Network configuration context * @aa: Authenticator address for the new AP * Returns: Pointer to a new PMKSA cache entry or %NULL if not available * * Try to create a new PMKSA cache entry opportunistically by guessing that the * new AP is sharing the same PMK as another AP that has the same SSID and has * already an entry in PMKSA cache. */ struct rsn_pmksa_cache_entry * pmksa_cache_get_opportunistic(struct rsn_pmksa_cache *pmksa, void *network_ctx, const u8 *aa) { struct rsn_pmksa_cache_entry *entry = pmksa->pmksa; if (network_ctx == NULL) return NULL; while (entry) { if (entry->network_ctx == network_ctx) { entry = pmksa_cache_clone_entry(pmksa, entry, aa); if (entry) { wpa_printf(MSG_DEBUG, "RSN: added " "opportunistic PMKSA cache entry " "for " MACSTR, MAC2STR(aa)); } return entry; } entry = entry->next; } return NULL; }