pmksa_cache_auth.h revision c5ec7f57ead87efa365800228aa0b09a12d9e6c4
18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/*
28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * hostapd - PMKSA cache for IEEE 802.11i RSN
38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2004-2008, 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];
208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 pmk[PMK_LEN];
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;
288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct radius_class_data radius_class;
298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 eap_type_authsrv;
308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	int vlan_id;
318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	int opportunistic;
328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache;
358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache *
378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpmksa_cache_auth_init(void (*free_cb)(struct rsn_pmksa_cache_entry *entry,
388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				      void *ctx), void *ctx);
398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid pmksa_cache_auth_deinit(struct rsn_pmksa_cache *pmksa);
408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache_entry *
418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpmksa_cache_auth_get(struct rsn_pmksa_cache *pmksa,
428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		     const u8 *spa, const u8 *pmkid);
438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache_entry * pmksa_cache_get_okc(
448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct rsn_pmksa_cache *pmksa, const u8 *spa, const u8 *aa,
458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	const u8 *pmkid);
468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache_entry *
478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpmksa_cache_auth_add(struct rsn_pmksa_cache *pmksa,
488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		     const u8 *pmk, size_t pmk_len,
498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		     const u8 *aa, const u8 *spa, int session_timeout,
508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		     struct eapol_state_machine *eapol, int akmp);
518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache_entry *
528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpmksa_cache_add_okc(struct rsn_pmksa_cache *pmksa,
538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		    const struct rsn_pmksa_cache_entry *old_entry,
548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		    const u8 *aa, const u8 *pmkid);
558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid pmksa_cache_to_eapol_data(struct rsn_pmksa_cache_entry *entry,
568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			       struct eapol_state_machine *eapol);
578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* PMKSA_CACHE_H */
59