1526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/* 2526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * EAPOL supplicant state machines 3526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Copyright (c) 2004-2008, Jouni Malinen <j@w1.fi> 4526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 5526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This program is free software; you can redistribute it and/or modify 6526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * it under the terms of the GNU General Public License version 2 as 7526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * published by the Free Software Foundation. 8526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 9526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Alternatively, this software may be distributed under the terms of BSD 10526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * license. 11526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 12526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * See README and COPYING for more details. 13526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 14526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 15526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifndef EAPOL_SUPP_SM_H 16526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define EAPOL_SUPP_SM_H 17526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 18526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#include "defs.h" 19526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 20526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidttypedef enum { Unauthorized, Authorized } PortStatus; 21526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidttypedef enum { Auto, ForceUnauthorized, ForceAuthorized } PortControl; 22526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 23526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/** 24526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * struct eapol_config - Per network configuration for EAPOL state machines 25526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 26526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct eapol_config { 27526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 28526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * accept_802_1x_keys - Accept IEEE 802.1X (non-WPA) EAPOL-Key frames 29526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 30526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This variable should be set to 1 when using EAPOL state machines 31526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * with non-WPA security policy to generate dynamic WEP keys. When 32526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * using WPA, this should be set to 0 so that WPA state machine can 33526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * process the EAPOL-Key frames. 34526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 35526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int accept_802_1x_keys; 36526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 37526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define EAPOL_REQUIRE_KEY_UNICAST BIT(0) 38526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define EAPOL_REQUIRE_KEY_BROADCAST BIT(1) 39526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 40526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * required_keys - Which EAPOL-Key packets are required 41526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 42526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This variable determines which EAPOL-Key packets are required before 43526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * marking connection authenticated. This is a bit field of 44526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * EAPOL_REQUIRE_KEY_UNICAST and EAPOL_REQUIRE_KEY_BROADCAST flags. 45526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 46526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int required_keys; 47526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 48526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 49526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * fast_reauth - Whether fast EAP reauthentication is enabled 50526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 51526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int fast_reauth; 52526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 53526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 54526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * workaround - Whether EAP workarounds are enabled 55526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 56526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt unsigned int workaround; 57526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 58526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 59526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * eap_disabled - Whether EAP is disabled 60526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 61526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int eap_disabled; 62526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}; 63526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 64526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct eapol_sm; 65526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct wpa_config_blob; 66526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 67526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/** 68526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * struct eapol_ctx - Global (for all networks) EAPOL state machine context 69526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 70526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct eapol_ctx { 71526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 72526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * ctx - Pointer to arbitrary upper level context 73526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 74526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt void *ctx; 75526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 76526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 77526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * preauth - IEEE 802.11i/RSN pre-authentication 78526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 79526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This EAPOL state machine is used for IEEE 802.11i/RSN 80526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * pre-authentication 81526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 82526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int preauth; 83526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 84526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 85526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * cb - Function to be called when EAPOL negotiation has been completed 86526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @eapol: Pointer to EAPOL state machine data 87526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @success: Whether the authentication was completed successfully 88526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @ctx: Pointer to context data (cb_ctx) 89526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 90526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This optional callback function will be called when the EAPOL 91526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * authentication has been completed. This allows the owner of the 92526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * EAPOL state machine to process the key and terminate the EAPOL state 93526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * machine. Currently, this is used only in RSN pre-authentication. 94526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 95526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt void (*cb)(struct eapol_sm *eapol, int success, void *ctx); 96526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 97526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 98526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * cb_ctx - Callback context for cb() 99526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 100526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt void *cb_ctx; 101526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 102526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 103526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * msg_ctx - Callback context for wpa_msg() calls 104526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 105526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt void *msg_ctx; 106526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 107526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 108526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * scard_ctx - Callback context for PC/SC scard_*() function calls 109526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 110526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This context can be updated with eapol_sm_register_scard_ctx(). 111526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 112526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt void *scard_ctx; 113526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 114526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 115526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * eapol_send_ctx - Callback context for eapol_send() calls 116526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 117526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt void *eapol_send_ctx; 118526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 119526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 120526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * eapol_done_cb - Function to be called at successful completion 121526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @ctx: Callback context (ctx) 122526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 123526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This function is called at the successful completion of EAPOL 124526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * authentication. If dynamic WEP keys are used, this is called only 125526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * after all the expected keys have been received. 126526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 127526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt void (*eapol_done_cb)(void *ctx); 128526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 129526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 130526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * eapol_send - Send EAPOL packets 131526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @ctx: Callback context (eapol_send_ctx) 132526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @type: EAPOL type (IEEE802_1X_TYPE_*) 133526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @buf: Pointer to EAPOL payload 134526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @len: Length of the EAPOL payload 135526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Returns: 0 on success, -1 on failure 136526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 137526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int (*eapol_send)(void *ctx, int type, const u8 *buf, size_t len); 138526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 139526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 140526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * set_wep_key - Configure WEP keys 141526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @ctx: Callback context (ctx) 142526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @unicast: Non-zero = unicast, 0 = multicast/broadcast key 143526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @keyidx: Key index (0..3) 144526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @key: WEP key 145526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @keylen: Length of the WEP key 146526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Returns: 0 on success, -1 on failure 147526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 148526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int (*set_wep_key)(void *ctx, int unicast, int keyidx, 149526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const u8 *key, size_t keylen); 150526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 151526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 152526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * set_config_blob - Set or add a named configuration blob 153526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @ctx: Callback context (ctx) 154526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @blob: New value for the blob 155526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 156526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Adds a new configuration blob or replaces the current value of an 157526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * existing blob. 158526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 159526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt void (*set_config_blob)(void *ctx, struct wpa_config_blob *blob); 160526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 161526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 162526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * get_config_blob - Get a named configuration blob 163526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @ctx: Callback context (ctx) 164526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @name: Name of the blob 165526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Returns: Pointer to blob data or %NULL if not found 166526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 167526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const struct wpa_config_blob * (*get_config_blob)(void *ctx, 168526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const char *name); 169526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 170526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 171526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * aborted_cached - Notify that cached PMK attempt was aborted 172526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @ctx: Callback context (ctx) 173526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 174526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt void (*aborted_cached)(void *ctx); 175526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 176526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef EAP_TLS_OPENSSL 177526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 178526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * opensc_engine_path - Path to the OpenSSL engine for opensc 179526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 180526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This is an OpenSSL specific configuration option for loading OpenSC 181526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * engine (engine_opensc.so); if %NULL, this engine is not loaded. 182526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 183526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const char *opensc_engine_path; 184526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 185526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 186526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * pkcs11_engine_path - Path to the OpenSSL engine for PKCS#11 187526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 188526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This is an OpenSSL specific configuration option for loading PKCS#11 189526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * engine (engine_pkcs11.so); if %NULL, this engine is not loaded. 190526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 191526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const char *pkcs11_engine_path; 192526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 193526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 194526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * pkcs11_module_path - Path to the OpenSSL OpenSC/PKCS#11 module 195526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 196526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This is an OpenSSL specific configuration option for configuring 197526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * path to OpenSC/PKCS#11 engine (opensc-pkcs11.so); if %NULL, this 198526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * module is not loaded. 199526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 200526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const char *pkcs11_module_path; 201526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAP_TLS_OPENSSL */ 202526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 203526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 204526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * wps - WPS context data 205526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * 206526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This is only used by EAP-WSC and can be left %NULL if not available. 207526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 208526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt struct wps_context *wps; 209526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 210526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt /** 211526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * eap_param_needed - Notify that EAP parameter is needed 212526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @ctx: Callback context (ctx) 213526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @field: Field name (e.g., "IDENTITY") 214526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * @txt: User readable text describing the required parameter 215526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */ 216526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt void (*eap_param_needed)(void *ctx, const char *field, 217526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const char *txt); 218526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}; 219526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 220526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 221526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct eap_peer_config; 222526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 223526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef IEEE8021X_EAPOL 224526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct eapol_sm *eapol_sm_init(struct eapol_ctx *ctx); 225526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eapol_sm_deinit(struct eapol_sm *sm); 226526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eapol_sm_step(struct eapol_sm *sm); 227526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtint eapol_sm_get_status(struct eapol_sm *sm, char *buf, size_t buflen, 228526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int verbose); 229526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtint eapol_sm_get_mib(struct eapol_sm *sm, char *buf, size_t buflen); 230526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eapol_sm_configure(struct eapol_sm *sm, int heldPeriod, int authPeriod, 231526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int startPeriod, int maxStart); 232526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtint eapol_sm_rx_eapol(struct eapol_sm *sm, const u8 *src, const u8 *buf, 233526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt size_t len); 234526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eapol_sm_notify_tx_eapol_key(struct eapol_sm *sm); 235526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eapol_sm_notify_portEnabled(struct eapol_sm *sm, Boolean enabled); 236526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eapol_sm_notify_portValid(struct eapol_sm *sm, Boolean valid); 237526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eapol_sm_notify_eap_success(struct eapol_sm *sm, Boolean success); 238526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eapol_sm_notify_eap_fail(struct eapol_sm *sm, Boolean fail); 239526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eapol_sm_notify_config(struct eapol_sm *sm, 240526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt struct eap_peer_config *config, 241526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const struct eapol_config *conf); 242526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtint eapol_sm_get_key(struct eapol_sm *sm, u8 *key, size_t len); 243526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eapol_sm_notify_logoff(struct eapol_sm *sm, Boolean logoff); 244526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eapol_sm_notify_cached(struct eapol_sm *sm); 245526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eapol_sm_notify_pmkid_attempt(struct eapol_sm *sm, int attempt); 246526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eapol_sm_register_scard_ctx(struct eapol_sm *sm, void *ctx); 247526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eapol_sm_notify_portControl(struct eapol_sm *sm, PortControl portControl); 248526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eapol_sm_notify_ctrl_attached(struct eapol_sm *sm); 249526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eapol_sm_notify_ctrl_response(struct eapol_sm *sm); 250526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eapol_sm_request_reauth(struct eapol_sm *sm); 251526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eapol_sm_notify_lower_layer_success(struct eapol_sm *sm, int in_eapol_sm); 252526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid eapol_sm_invalidate_cached_session(struct eapol_sm *sm); 253526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#else /* IEEE8021X_EAPOL */ 254526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline struct eapol_sm *eapol_sm_init(struct eapol_ctx *ctx) 255526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 256526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt free(ctx); 257526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return (struct eapol_sm *) 1; 258526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 259526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void eapol_sm_deinit(struct eapol_sm *sm) 260526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 261526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 262526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void eapol_sm_step(struct eapol_sm *sm) 263526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 264526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 265526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline int eapol_sm_get_status(struct eapol_sm *sm, char *buf, 266526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt size_t buflen, int verbose) 267526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 268526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return 0; 269526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 270526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline int eapol_sm_get_mib(struct eapol_sm *sm, char *buf, 271526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt size_t buflen) 272526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 273526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return 0; 274526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 275526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void eapol_sm_configure(struct eapol_sm *sm, int heldPeriod, 276526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int authPeriod, int startPeriod, 277526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int maxStart) 278526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 279526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 280526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline int eapol_sm_rx_eapol(struct eapol_sm *sm, const u8 *src, 281526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt const u8 *buf, size_t len) 282526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 283526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return 0; 284526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 285526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void eapol_sm_notify_tx_eapol_key(struct eapol_sm *sm) 286526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 287526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 288526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void eapol_sm_notify_portEnabled(struct eapol_sm *sm, 289526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt Boolean enabled) 290526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 291526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 292526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void eapol_sm_notify_portValid(struct eapol_sm *sm, 293526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt Boolean valid) 294526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 295526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 296526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void eapol_sm_notify_eap_success(struct eapol_sm *sm, 297526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt Boolean success) 298526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 299526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 300526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void eapol_sm_notify_eap_fail(struct eapol_sm *sm, Boolean fail) 301526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 302526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 303526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void eapol_sm_notify_config(struct eapol_sm *sm, 304526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt struct eap_peer_config *config, 305526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt struct eapol_config *conf) 306526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 307526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 308526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline int eapol_sm_get_key(struct eapol_sm *sm, u8 *key, size_t len) 309526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 310526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt return -1; 311526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 312526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void eapol_sm_notify_logoff(struct eapol_sm *sm, Boolean logoff) 313526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 314526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 315526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void eapol_sm_notify_cached(struct eapol_sm *sm) 316526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 317526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 318526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define eapol_sm_notify_pmkid_attempt(sm, attempt) do { } while (0) 319526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define eapol_sm_register_scard_ctx(sm, ctx) do { } while (0) 320526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void eapol_sm_notify_portControl(struct eapol_sm *sm, 321526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt PortControl portControl) 322526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 323526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 324526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void eapol_sm_notify_ctrl_attached(struct eapol_sm *sm) 325526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 326526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 327526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void eapol_sm_notify_ctrl_response(struct eapol_sm *sm) 328526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 329526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 330526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void eapol_sm_request_reauth(struct eapol_sm *sm) 331526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 332526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 333526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void eapol_sm_notify_lower_layer_success(struct eapol_sm *sm, 334526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt int in_eapol_sm) 335526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 336526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 337526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void eapol_sm_invalidate_cached_session(struct eapol_sm *sm) 338526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{ 339526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt} 340526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* IEEE8021X_EAPOL */ 341526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt 342526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* EAPOL_SUPP_SM_H */ 343