Home | History | Annotate | Download | only in wpa_supplicant
      1 /*
      2  * wpa_supplicant - WPA2/RSN PMKSA cache functions
      3  * Copyright (c) 2003-2006, Jouni Malinen <j (at) 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  */
     21 struct 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 
     35 struct rsn_pmksa_cache;
     36 
     37 #if defined(IEEE8021X_EAPOL) && !defined(CONFIG_NO_WPA2)
     38 
     39 struct rsn_pmksa_cache *
     40 pmksa_cache_init(void (*free_cb)(struct rsn_pmksa_cache_entry *entry,
     41 				 void *ctx, int replace),
     42 		 void *ctx, struct wpa_sm *sm);
     43 void pmksa_cache_deinit(struct rsn_pmksa_cache *pmksa);
     44 struct rsn_pmksa_cache_entry * pmksa_cache_get(struct rsn_pmksa_cache *pmksa,
     45 					       const u8 *aa, const u8 *pmkid);
     46 int pmksa_cache_list(struct wpa_sm *sm, char *buf, size_t len);
     47 struct rsn_pmksa_cache_entry *
     48 pmksa_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);
     50 void pmksa_cache_notify_reconfig(struct rsn_pmksa_cache *pmksa);
     51 struct rsn_pmksa_cache_entry * pmksa_cache_get_current(struct wpa_sm *sm);
     52 void pmksa_cache_clear_current(struct wpa_sm *sm);
     53 int pmksa_cache_set_current(struct wpa_sm *sm, const u8 *pmkid,
     54 			    const u8 *bssid, struct wpa_ssid *ssid,
     55 			    int try_opportunistic);
     56 struct rsn_pmksa_cache_entry *
     57 pmksa_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 
     62 static inline struct rsn_pmksa_cache *
     63 pmksa_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 
     70 static inline void pmksa_cache_deinit(struct rsn_pmksa_cache *pmksa)
     71 {
     72 }
     73 
     74 static inline struct rsn_pmksa_cache_entry *
     75 pmksa_cache_get(struct rsn_pmksa_cache *pmksa, const u8 *aa, const u8 *pmkid)
     76 {
     77 	return NULL;
     78 }
     79 
     80 static inline struct rsn_pmksa_cache_entry *
     81 pmksa_cache_get_current(struct wpa_sm *sm)
     82 {
     83 	return NULL;
     84 }
     85 
     86 static inline int pmksa_cache_list(struct wpa_sm *sm, char *buf, size_t len)
     87 {
     88 	return -1;
     89 }
     90 
     91 static inline struct rsn_pmksa_cache_entry *
     92 pmksa_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 
     98 static inline void pmksa_cache_notify_reconfig(struct rsn_pmksa_cache *pmksa)
     99 {
    100 }
    101 
    102 static inline void pmksa_cache_clear_current(struct wpa_sm *sm)
    103 {
    104 }
    105 
    106 static 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