* EAPOL supplicant state machines
* Copyright (c) 2004-2008, Jouni Malinen <j@w1.fi>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * Alternatively, this software may be distributed under the terms of BSD
- * license.
- *
- * See README and COPYING for more details.
+ * This software may be distributed under the terms of the BSD license.
+ * See README for more details.
*/
#ifndef EAPOL_SUPP_SM_H
#define EAPOL_SUPP_SM_H
-#include "defs.h"
+#include "common/defs.h"
typedef enum { Unauthorized, Authorized } PortStatus;
typedef enum { Auto, ForceUnauthorized, ForceAuthorized } PortControl;
struct eapol_sm;
struct wpa_config_blob;
-struct wps_credential;
/**
* struct eapol_ctx - Global (for all networks) EAPOL state machine context
*/
void (*aborted_cached)(void *ctx);
-#ifdef EAP_TLS_OPENSSL
/**
* opensc_engine_path - Path to the OpenSSL engine for opensc
*
* module is not loaded.
*/
const char *pkcs11_module_path;
-#endif /* EAP_TLS_OPENSSL */
+
/**
- * mac_addr - MAC address of the peer
+ * wps - WPS context data
*
* This is only used by EAP-WSC and can be left %NULL if not available.
*/
- const u8 *mac_addr;
+ struct wps_context *wps;
/**
- * wps_cred - Notify that new credential was received from WPS
+ * eap_param_needed - Notify that EAP parameter is needed
* @ctx: Callback context (ctx)
- * Returns: 0 on success (credential stored), -1 on failure
- *
- * This callback is only needed when using WPS Enrollee to configure
- * new credentials. This can be left %NULL if no WPS functionality is
- * enabled.
+ * @field: Field indicator (e.g., WPA_CTRL_REQ_EAP_IDENTITY)
+ * @txt: User readable text describing the required parameter
*/
- int (*wps_cred)(void *ctx, struct wps_credential *cred);
+ void (*eap_param_needed)(void *ctx, enum wpa_ctrl_req_type field,
+ const char *txt);
/**
- * eap_param_needed - Notify that EAP parameter is needed
+ * port_cb - Set port authorized/unauthorized callback (optional)
* @ctx: Callback context (ctx)
- * @field: Field name (e.g., "IDENTITY")
- * @txt: User readable text describing the required parameter
+ * @authorized: Whether the supplicant port is now in authorized state
*/
- void (*eap_param_needed)(void *ctx, const char *field,
- const char *txt);
+ void (*port_cb)(void *ctx, int authorized);
+
+ /**
+ * cert_cb - Notification of a peer certificate
+ * @ctx: Callback context (ctx)
+ * @depth: Depth in certificate chain (0 = server)
+ * @subject: Subject of the peer certificate
+ * @cert_hash: SHA-256 hash of the certificate
+ * @cert: Peer certificate
+ */
+ void (*cert_cb)(void *ctx, int depth, const char *subject,
+ const char *cert_hash, const struct wpabuf *cert);
+
+ /**
+ * cert_in_cb - Include server certificates in callback
+ */
+ int cert_in_cb;
+
+ /**
+ * status_cb - Notification of a change in EAP status
+ * @ctx: Callback context (ctx)
+ * @status: Step in the process of EAP authentication
+ * @parameter: Step-specific parameter, e.g., EAP method name
+ */
+ void (*status_cb)(void *ctx, const char *status,
+ const char *parameter);
};
void eapol_sm_request_reauth(struct eapol_sm *sm);
void eapol_sm_notify_lower_layer_success(struct eapol_sm *sm, int in_eapol_sm);
void eapol_sm_invalidate_cached_session(struct eapol_sm *sm);
+const char * eapol_sm_get_method_name(struct eapol_sm *sm);
#else /* IEEE8021X_EAPOL */
static inline struct eapol_sm *eapol_sm_init(struct eapol_ctx *ctx)
{
static inline void eapol_sm_invalidate_cached_session(struct eapol_sm *sm)
{
}
+static inline const char * eapol_sm_get_method_name(struct eapol_sm *sm)
+{
+ return NULL;
+}
#endif /* IEEE8021X_EAPOL */
#endif /* EAPOL_SUPP_SM_H */