pmksa_cache_auth.h revision 214501
1214501Srpaulo/*
2214501Srpaulo * hostapd - PMKSA cache for IEEE 802.11i RSN
3214501Srpaulo * Copyright (c) 2004-2008, Jouni Malinen <j@w1.fi>
4214501Srpaulo *
5214501Srpaulo * This program is free software; you can redistribute it and/or modify
6214501Srpaulo * it under the terms of the GNU General Public License version 2 as
7214501Srpaulo * published by the Free Software Foundation.
8214501Srpaulo *
9214501Srpaulo * Alternatively, this software may be distributed under the terms of BSD
10214501Srpaulo * license.
11214501Srpaulo *
12214501Srpaulo * See README and COPYING for more details.
13214501Srpaulo */
14214501Srpaulo
15214501Srpaulo#ifndef PMKSA_CACHE_H
16214501Srpaulo#define PMKSA_CACHE_H
17214501Srpaulo
18214501Srpaulo#include "radius/radius.h"
19214501Srpaulo
20214501Srpaulo/**
21214501Srpaulo * struct rsn_pmksa_cache_entry - PMKSA cache entry
22214501Srpaulo */
23214501Srpaulostruct rsn_pmksa_cache_entry {
24214501Srpaulo	struct rsn_pmksa_cache_entry *next, *hnext;
25214501Srpaulo	u8 pmkid[PMKID_LEN];
26214501Srpaulo	u8 pmk[PMK_LEN];
27214501Srpaulo	size_t pmk_len;
28214501Srpaulo	os_time_t expiration;
29214501Srpaulo	int akmp; /* WPA_KEY_MGMT_* */
30214501Srpaulo	u8 spa[ETH_ALEN];
31214501Srpaulo
32214501Srpaulo	u8 *identity;
33214501Srpaulo	size_t identity_len;
34214501Srpaulo	struct radius_class_data radius_class;
35214501Srpaulo	u8 eap_type_authsrv;
36214501Srpaulo	int vlan_id;
37214501Srpaulo	int opportunistic;
38214501Srpaulo};
39214501Srpaulo
40214501Srpaulostruct rsn_pmksa_cache;
41214501Srpaulo
42214501Srpaulostruct rsn_pmksa_cache *
43214501Srpaulopmksa_cache_auth_init(void (*free_cb)(struct rsn_pmksa_cache_entry *entry,
44214501Srpaulo				      void *ctx), void *ctx);
45214501Srpaulovoid pmksa_cache_auth_deinit(struct rsn_pmksa_cache *pmksa);
46214501Srpaulostruct rsn_pmksa_cache_entry *
47214501Srpaulopmksa_cache_auth_get(struct rsn_pmksa_cache *pmksa,
48214501Srpaulo		     const u8 *spa, const u8 *pmkid);
49214501Srpaulostruct rsn_pmksa_cache_entry * pmksa_cache_get_okc(
50214501Srpaulo	struct rsn_pmksa_cache *pmksa, const u8 *spa, const u8 *aa,
51214501Srpaulo	const u8 *pmkid);
52214501Srpaulostruct rsn_pmksa_cache_entry *
53214501Srpaulopmksa_cache_auth_add(struct rsn_pmksa_cache *pmksa,
54214501Srpaulo		     const u8 *pmk, size_t pmk_len,
55214501Srpaulo		     const u8 *aa, const u8 *spa, int session_timeout,
56214501Srpaulo		     struct eapol_state_machine *eapol, int akmp);
57214501Srpaulostruct rsn_pmksa_cache_entry *
58214501Srpaulopmksa_cache_add_okc(struct rsn_pmksa_cache *pmksa,
59214501Srpaulo		    const struct rsn_pmksa_cache_entry *old_entry,
60214501Srpaulo		    const u8 *aa, const u8 *pmkid);
61214501Srpaulovoid pmksa_cache_to_eapol_data(struct rsn_pmksa_cache_entry *entry,
62214501Srpaulo			       struct eapol_state_machine *eapol);
63214501Srpaulo
64214501Srpaulo#endif /* PMKSA_CACHE_H */
65