18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * EAPOL supplicant state machines 361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt * Copyright (c) 2004-2012, 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 EAPOL_SUPP_SM_H 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAPOL_SUPP_SM_H 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "common/defs.h" 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidttypedef enum { Unauthorized, Authorized } PortStatus; 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidttypedef enum { Auto, ForceUnauthorized, ForceAuthorized } PortControl; 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct eapol_config - Per network configuration for EAPOL state machines 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct eapol_config { 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * accept_802_1x_keys - Accept IEEE 802.1X (non-WPA) EAPOL-Key frames 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This variable should be set to 1 when using EAPOL state machines 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * with non-WPA security policy to generate dynamic WEP keys. When 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * using WPA, this should be set to 0 so that WPA state machine can 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * process the EAPOL-Key frames. 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int accept_802_1x_keys; 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAPOL_REQUIRE_KEY_UNICAST BIT(0) 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAPOL_REQUIRE_KEY_BROADCAST BIT(1) 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * required_keys - Which EAPOL-Key packets are required 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This variable determines which EAPOL-Key packets are required before 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * marking connection authenticated. This is a bit field of 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * EAPOL_REQUIRE_KEY_UNICAST and EAPOL_REQUIRE_KEY_BROADCAST flags. 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int required_keys; 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * fast_reauth - Whether fast EAP reauthentication is enabled 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int fast_reauth; 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * workaround - Whether EAP workarounds are enabled 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int workaround; 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * eap_disabled - Whether EAP is disabled 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int eap_disabled; 56051af73b8f8014eff33330aead0f36944b3403e6Dmitry Shmidt 57051af73b8f8014eff33330aead0f36944b3403e6Dmitry Shmidt /** 58051af73b8f8014eff33330aead0f36944b3403e6Dmitry Shmidt * external_sim - Use external processing for SIM/USIM operations 59051af73b8f8014eff33330aead0f36944b3403e6Dmitry Shmidt */ 60051af73b8f8014eff33330aead0f36944b3403e6Dmitry Shmidt int external_sim; 61661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt 626c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt#define EAPOL_LOCAL_WPS_IN_USE BIT(0) 636c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt#define EAPOL_PEER_IS_WPS20_AP BIT(1) 64661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt /** 65661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt * wps - Whether this connection is used for WPS 66661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt */ 67661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt int wps; 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct eapol_sm; 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_config_blob; 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 73344abd362cfe2d03ed956666527352826b67bde5Dmitry Shmidtenum eapol_supp_result { 74344abd362cfe2d03ed956666527352826b67bde5Dmitry Shmidt EAPOL_SUPP_RESULT_FAILURE, 75344abd362cfe2d03ed956666527352826b67bde5Dmitry Shmidt EAPOL_SUPP_RESULT_SUCCESS, 76344abd362cfe2d03ed956666527352826b67bde5Dmitry Shmidt EAPOL_SUPP_RESULT_EXPECTED_FAILURE 77344abd362cfe2d03ed956666527352826b67bde5Dmitry Shmidt}; 78344abd362cfe2d03ed956666527352826b67bde5Dmitry Shmidt 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct eapol_ctx - Global (for all networks) EAPOL state machine context 818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct eapol_ctx { 838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ctx - Pointer to arbitrary upper level context 858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *ctx; 878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * preauth - IEEE 802.11i/RSN pre-authentication 908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This EAPOL state machine is used for IEEE 802.11i/RSN 928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * pre-authentication 938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int preauth; 958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * cb - Function to be called when EAPOL negotiation has been completed 988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @eapol: Pointer to EAPOL state machine data 99344abd362cfe2d03ed956666527352826b67bde5Dmitry Shmidt * @result: Whether the authentication was completed successfully 1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Pointer to context data (cb_ctx) 1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This optional callback function will be called when the EAPOL 1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * authentication has been completed. This allows the owner of the 1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * EAPOL state machine to process the key and terminate the EAPOL state 1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * machine. Currently, this is used only in RSN pre-authentication. 1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 107344abd362cfe2d03ed956666527352826b67bde5Dmitry Shmidt void (*cb)(struct eapol_sm *eapol, enum eapol_supp_result result, 108344abd362cfe2d03ed956666527352826b67bde5Dmitry Shmidt void *ctx); 1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * cb_ctx - Callback context for cb() 1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *cb_ctx; 1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * msg_ctx - Callback context for wpa_msg() calls 1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *msg_ctx; 1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * scard_ctx - Callback context for PC/SC scard_*() function calls 1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This context can be updated with eapol_sm_register_scard_ctx(). 1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *scard_ctx; 1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * eapol_send_ctx - Callback context for eapol_send() calls 1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *eapol_send_ctx; 1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * eapol_done_cb - Function to be called at successful completion 1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Callback context (ctx) 1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This function is called at the successful completion of EAPOL 1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * authentication. If dynamic WEP keys are used, this is called only 1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * after all the expected keys have been received. 1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*eapol_done_cb)(void *ctx); 1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * eapol_send - Send EAPOL packets 1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Callback context (eapol_send_ctx) 1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @type: EAPOL type (IEEE802_1X_TYPE_*) 1468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @buf: Pointer to EAPOL payload 1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @len: Length of the EAPOL payload 1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Returns: 0 on success, -1 on failure 1498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int (*eapol_send)(void *ctx, int type, const u8 *buf, size_t len); 1518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * set_wep_key - Configure WEP keys 1548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Callback context (ctx) 1558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @unicast: Non-zero = unicast, 0 = multicast/broadcast key 1568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @keyidx: Key index (0..3) 1578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @key: WEP key 1588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @keylen: Length of the WEP key 1598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Returns: 0 on success, -1 on failure 1608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int (*set_wep_key)(void *ctx, int unicast, int keyidx, 1628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *key, size_t keylen); 1638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * set_config_blob - Set or add a named configuration blob 1668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Callback context (ctx) 1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @blob: New value for the blob 1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Adds a new configuration blob or replaces the current value of an 1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * existing blob. 1718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*set_config_blob)(void *ctx, struct wpa_config_blob *blob); 1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * get_config_blob - Get a named configuration blob 1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Callback context (ctx) 1778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @name: Name of the blob 1788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Returns: Pointer to blob data or %NULL if not found 1798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpa_config_blob * (*get_config_blob)(void *ctx, 1818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *name); 1828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * aborted_cached - Notify that cached PMK attempt was aborted 1858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Callback context (ctx) 1868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*aborted_cached)(void *ctx); 1888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * opensc_engine_path - Path to the OpenSSL engine for opensc 1918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This is an OpenSSL specific configuration option for loading OpenSC 1938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * engine (engine_opensc.so); if %NULL, this engine is not loaded. 1948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *opensc_engine_path; 1968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * pkcs11_engine_path - Path to the OpenSSL engine for PKCS#11 1998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 2008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This is an OpenSSL specific configuration option for loading PKCS#11 2018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * engine (engine_pkcs11.so); if %NULL, this engine is not loaded. 2028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *pkcs11_engine_path; 2048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * pkcs11_module_path - Path to the OpenSSL OpenSC/PKCS#11 module 2078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 2088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This is an OpenSSL specific configuration option for configuring 2098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * path to OpenSC/PKCS#11 engine (opensc-pkcs11.so); if %NULL, this 2108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * module is not loaded. 2118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *pkcs11_module_path; 2138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2156c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt * openssl_ciphers - OpenSSL cipher string 2166c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt * 2176c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt * This is an OpenSSL specific configuration option for configuring the 2186c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt * default ciphers. If not set, "DEFAULT:!EXP:!LOW" is used as the 2196c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt * default. 2206c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt */ 2216c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt const char *openssl_ciphers; 2226c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt 2236c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt /** 2248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wps - WPS context data 2258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 2268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This is only used by EAP-WSC and can be left %NULL if not available. 2278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_context *wps; 2298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * eap_param_needed - Notify that EAP parameter is needed 2328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Callback context (ctx) 2331f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt * @field: Field indicator (e.g., WPA_CTRL_REQ_EAP_IDENTITY) 2348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @txt: User readable text describing the required parameter 2358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2361f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt void (*eap_param_needed)(void *ctx, enum wpa_ctrl_req_type field, 2378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *txt); 2388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * port_cb - Set port authorized/unauthorized callback (optional) 2418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Callback context (ctx) 2428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @authorized: Whether the supplicant port is now in authorized state 2438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*port_cb)(void *ctx, int authorized); 245c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt 246c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt /** 247c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt * cert_cb - Notification of a peer certificate 248c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt * @ctx: Callback context (ctx) 249c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt * @depth: Depth in certificate chain (0 = server) 250c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt * @subject: Subject of the peer certificate 2512f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt * @altsubject: Select fields from AltSubject of the peer certificate 2522f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt * @num_altsubject: Number of altsubject values 253c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt * @cert_hash: SHA-256 hash of the certificate 254c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt * @cert: Peer certificate 255c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt */ 256c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt void (*cert_cb)(void *ctx, int depth, const char *subject, 2572f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt const char *altsubject[], int num_altsubject, 258c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt const char *cert_hash, const struct wpabuf *cert); 2591f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt 2601f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt /** 2611f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt * cert_in_cb - Include server certificates in callback 2621f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt */ 2631f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt int cert_in_cb; 26404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 26504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt /** 26604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * status_cb - Notification of a change in EAP status 26704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * @ctx: Callback context (ctx) 26804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * @status: Step in the process of EAP authentication 26904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * @parameter: Step-specific parameter, e.g., EAP method name 27004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt */ 27104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt void (*status_cb)(void *ctx, const char *status, 27204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt const char *parameter); 2734530cfd4d14a77c58e35393b91e40f8dd9d62697Dmitry Shmidt 274203eadb9eda41a1dde4a583edb4684319e3f399eDmitry Shmidt#ifdef CONFIG_EAP_PROXY 275203eadb9eda41a1dde4a583edb4684319e3f399eDmitry Shmidt /** 276203eadb9eda41a1dde4a583edb4684319e3f399eDmitry Shmidt * eap_proxy_cb - Callback signifying any updates from eap_proxy 277203eadb9eda41a1dde4a583edb4684319e3f399eDmitry Shmidt * @ctx: eapol_ctx from eap_peer_sm_init() call 278203eadb9eda41a1dde4a583edb4684319e3f399eDmitry Shmidt */ 279203eadb9eda41a1dde4a583edb4684319e3f399eDmitry Shmidt void (*eap_proxy_cb)(void *ctx); 280203eadb9eda41a1dde4a583edb4684319e3f399eDmitry Shmidt#endif /* CONFIG_EAP_PROXY */ 281203eadb9eda41a1dde4a583edb4684319e3f399eDmitry Shmidt 2824530cfd4d14a77c58e35393b91e40f8dd9d62697Dmitry Shmidt /** 2834530cfd4d14a77c58e35393b91e40f8dd9d62697Dmitry Shmidt * set_anon_id - Set or add anonymous identity 2844530cfd4d14a77c58e35393b91e40f8dd9d62697Dmitry Shmidt * @ctx: eapol_ctx from eap_peer_sm_init() call 2854530cfd4d14a77c58e35393b91e40f8dd9d62697Dmitry Shmidt * @id: Anonymous identity (e.g., EAP-SIM pseudonym) 2864530cfd4d14a77c58e35393b91e40f8dd9d62697Dmitry Shmidt * @len: Length of anonymous identity in octets 2874530cfd4d14a77c58e35393b91e40f8dd9d62697Dmitry Shmidt */ 2884530cfd4d14a77c58e35393b91e40f8dd9d62697Dmitry Shmidt void (*set_anon_id)(void *ctx, const u8 *id, size_t len); 2898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 2908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct eap_peer_config; 29361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtstruct ext_password_data; 2948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef IEEE8021X_EAPOL 2968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct eapol_sm *eapol_sm_init(struct eapol_ctx *ctx); 2978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eapol_sm_deinit(struct eapol_sm *sm); 2988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eapol_sm_step(struct eapol_sm *sm); 2998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint eapol_sm_get_status(struct eapol_sm *sm, char *buf, size_t buflen, 3008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int verbose); 3018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint eapol_sm_get_mib(struct eapol_sm *sm, char *buf, size_t buflen); 3028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eapol_sm_configure(struct eapol_sm *sm, int heldPeriod, int authPeriod, 3038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int startPeriod, int maxStart); 3048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint eapol_sm_rx_eapol(struct eapol_sm *sm, const u8 *src, const u8 *buf, 3058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t len); 3068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eapol_sm_notify_tx_eapol_key(struct eapol_sm *sm); 3078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eapol_sm_notify_portEnabled(struct eapol_sm *sm, Boolean enabled); 3088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eapol_sm_notify_portValid(struct eapol_sm *sm, Boolean valid); 3098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eapol_sm_notify_eap_success(struct eapol_sm *sm, Boolean success); 3108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eapol_sm_notify_eap_fail(struct eapol_sm *sm, Boolean fail); 3118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eapol_sm_notify_config(struct eapol_sm *sm, 3128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct eap_peer_config *config, 3138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct eapol_config *conf); 3148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint eapol_sm_get_key(struct eapol_sm *sm, u8 *key, size_t len); 3155a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtconst u8 * eapol_sm_get_session_id(struct eapol_sm *sm, size_t *len); 3168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eapol_sm_notify_logoff(struct eapol_sm *sm, Boolean logoff); 3178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eapol_sm_notify_cached(struct eapol_sm *sm); 318216983bceec7c450951e2fbcd076b5c75d432e57Dmitry Shmidtvoid eapol_sm_notify_pmkid_attempt(struct eapol_sm *sm); 3198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eapol_sm_register_scard_ctx(struct eapol_sm *sm, void *ctx); 3208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eapol_sm_notify_portControl(struct eapol_sm *sm, PortControl portControl); 3218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eapol_sm_notify_ctrl_attached(struct eapol_sm *sm); 3228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eapol_sm_notify_ctrl_response(struct eapol_sm *sm); 3238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eapol_sm_request_reauth(struct eapol_sm *sm); 3248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eapol_sm_notify_lower_layer_success(struct eapol_sm *sm, int in_eapol_sm); 3258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eapol_sm_invalidate_cached_session(struct eapol_sm *sm); 3268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtconst char * eapol_sm_get_method_name(struct eapol_sm *sm); 32761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtvoid eapol_sm_set_ext_pw_ctx(struct eapol_sm *sm, 32861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt struct ext_password_data *ext); 32961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtint eapol_sm_failed(struct eapol_sm *sm); 3306c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidtvoid eapol_sm_erp_flush(struct eapol_sm *sm); 3314ce9c87407c036fc83eb5a6044ddf976c86f53fcDmitry Shmidtint eapol_sm_get_eap_proxy_imsi(struct eapol_sm *sm, char *imsi, size_t *len); 3328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#else /* IEEE8021X_EAPOL */ 3338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline struct eapol_sm *eapol_sm_init(struct eapol_ctx *ctx) 3348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt free(ctx); 3368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return (struct eapol_sm *) 1; 3378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void eapol_sm_deinit(struct eapol_sm *sm) 3398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void eapol_sm_step(struct eapol_sm *sm) 3428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int eapol_sm_get_status(struct eapol_sm *sm, char *buf, 3458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t buflen, int verbose) 3468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 3488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int eapol_sm_get_mib(struct eapol_sm *sm, char *buf, 3508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t buflen) 3518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 3538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void eapol_sm_configure(struct eapol_sm *sm, int heldPeriod, 3558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int authPeriod, int startPeriod, 3568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int maxStart) 3578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int eapol_sm_rx_eapol(struct eapol_sm *sm, const u8 *src, 3608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *buf, size_t len) 3618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 3638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void eapol_sm_notify_tx_eapol_key(struct eapol_sm *sm) 3658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void eapol_sm_notify_portEnabled(struct eapol_sm *sm, 3688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean enabled) 3698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void eapol_sm_notify_portValid(struct eapol_sm *sm, 3728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean valid) 3738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void eapol_sm_notify_eap_success(struct eapol_sm *sm, 3768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean success) 3778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void eapol_sm_notify_eap_fail(struct eapol_sm *sm, Boolean fail) 3808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void eapol_sm_notify_config(struct eapol_sm *sm, 3838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct eap_peer_config *config, 3848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct eapol_config *conf) 3858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int eapol_sm_get_key(struct eapol_sm *sm, u8 *key, size_t len) 3888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 391216983bceec7c450951e2fbcd076b5c75d432e57Dmitry Shmidtstatic inline const u8 * 392216983bceec7c450951e2fbcd076b5c75d432e57Dmitry Shmidteapol_sm_get_session_id(struct eapol_sm *sm, size_t *len) 393216983bceec7c450951e2fbcd076b5c75d432e57Dmitry Shmidt{ 394216983bceec7c450951e2fbcd076b5c75d432e57Dmitry Shmidt return NULL; 395216983bceec7c450951e2fbcd076b5c75d432e57Dmitry Shmidt} 3968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void eapol_sm_notify_logoff(struct eapol_sm *sm, Boolean logoff) 3978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void eapol_sm_notify_cached(struct eapol_sm *sm) 4008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 402216983bceec7c450951e2fbcd076b5c75d432e57Dmitry Shmidtstatic inline void eapol_sm_notify_pmkid_attempt(struct eapol_sm *sm) 403216983bceec7c450951e2fbcd076b5c75d432e57Dmitry Shmidt{ 404216983bceec7c450951e2fbcd076b5c75d432e57Dmitry Shmidt} 4058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define eapol_sm_register_scard_ctx(sm, ctx) do { } while (0) 4068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void eapol_sm_notify_portControl(struct eapol_sm *sm, 4078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt PortControl portControl) 4088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void eapol_sm_notify_ctrl_attached(struct eapol_sm *sm) 4118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void eapol_sm_notify_ctrl_response(struct eapol_sm *sm) 4148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void eapol_sm_request_reauth(struct eapol_sm *sm) 4178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void eapol_sm_notify_lower_layer_success(struct eapol_sm *sm, 4208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int in_eapol_sm) 4218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void eapol_sm_invalidate_cached_session(struct eapol_sm *sm) 4248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline const char * eapol_sm_get_method_name(struct eapol_sm *sm) 4278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 4298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 43061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtstatic inline void eapol_sm_set_ext_pw_ctx(struct eapol_sm *sm, 43161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt struct ext_password_data *ext) 43261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt{ 43361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt} 43461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtstatic inline int eapol_sm_failed(struct eapol_sm *sm) 43561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt{ 43661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt return 0; 43761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt} 4386c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidtstatic inline void eapol_sm_erp_flush(struct eapol_sm *sm) 4396c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt{ 4406c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt} 4418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* IEEE8021X_EAPOL */ 4428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* EAPOL_SUPP_SM_H */ 444