aboutsummaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2023-09-15 16:10:07 +0100
committerMichael Brown <mcb30@ipxe.org>2023-09-18 12:07:28 +0100
commit56cc61a168820c7cbbe23418388129ec11699a8c (patch)
tree270bd1ea47e8e3235595e99500927803d5e29a2d /src/include
parentcac3a584dc8acea1522669f1ed16e0979fb92252 (diff)
downloadipxe-56cc61a168820c7cbbe23418388129ec11699a8c.zip
ipxe-56cc61a168820c7cbbe23418388129ec11699a8c.tar.gz
ipxe-56cc61a168820c7cbbe23418388129ec11699a8c.tar.bz2
[eap] Define a supplicant model for EAP and EAPoL
Extend the EAP model to include a record of whether or not EAP authentication has completed (successfully or otherwise), and to provide a method for transmitting EAP responses. Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include')
-rw-r--r--src/include/ipxe/eap.h21
-rw-r--r--src/include/ipxe/eapol.h13
2 files changed, 30 insertions, 4 deletions
diff --git a/src/include/ipxe/eap.h b/src/include/ipxe/eap.h
index 6fe7018..e5f6065 100644
--- a/src/include/ipxe/eap.h
+++ b/src/include/ipxe/eap.h
@@ -64,6 +64,25 @@ union eap_packet {
*/
#define EAP_BLOCK_TIMEOUT ( 45 * TICKS_PER_SEC )
-extern int eap_rx ( struct net_device *netdev, const void *data, size_t len );
+/** An EAP supplicant */
+struct eap_supplicant {
+ /** Network device */
+ struct net_device *netdev;
+ /** Authentication outcome is final */
+ int done;
+ /**
+ * Transmit EAP response
+ *
+ * @v supplicant EAP supplicant
+ * @v data Response data
+ * @v len Length of response data
+ * @ret rc Return status code
+ */
+ int ( * tx ) ( struct eap_supplicant *supplicant,
+ const void *data, size_t len );
+};
+
+extern int eap_rx ( struct eap_supplicant *supplicant,
+ const void *data, size_t len );
#endif /* _IPXE_EAP_H */
diff --git a/src/include/ipxe/eapol.h b/src/include/ipxe/eapol.h
index 952d6c7..f6009a2 100644
--- a/src/include/ipxe/eapol.h
+++ b/src/include/ipxe/eapol.h
@@ -12,6 +12,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#include <stdint.h>
#include <ipxe/netdevice.h>
#include <ipxe/tables.h>
+#include <ipxe/eap.h>
/** EAPoL header */
struct eapol_header {
@@ -32,6 +33,12 @@ struct eapol_header {
/** EAPoL key */
#define EAPOL_TYPE_KEY 5
+/** An EAPoL supplicant */
+struct eapol_supplicant {
+ /** EAP supplicant */
+ struct eap_supplicant eap;
+};
+
/** An EAPoL handler */
struct eapol_handler {
/** Type */
@@ -39,15 +46,15 @@ struct eapol_handler {
/**
* Process received packet
*
+ * @v supplicant EAPoL supplicant
* @v iobuf I/O buffer
- * @v netdev Network device
* @v ll_source Link-layer source address
* @ret rc Return status code
*
* This method takes ownership of the I/O buffer.
*/
- int ( * rx ) ( struct io_buffer *iobuf, struct net_device *netdev,
- const void *ll_source );
+ int ( * rx ) ( struct eapol_supplicant *supplicant,
+ struct io_buffer *iobuf, const void *ll_source );
};
/** EAPoL handler table */