#ifndef _IPXE_EAPOL_H #define _IPXE_EAPOL_H /** @file * * Extensible Authentication Protocol over LAN (EAPoL) * */ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #include #include #include /** EAPoL header */ struct eapol_header { /** Version */ uint8_t version; /** Type */ uint8_t type; /** Payload length */ uint16_t len; } __attribute__ (( packed )); /** 802.1X-2001 */ #define EAPOL_VERSION_2001 1 /** EAPoL-encapsulated EAP packets */ #define EAPOL_TYPE_EAP 0 /** EAPoL key */ #define EAPOL_TYPE_KEY 5 /** An EAPoL handler */ struct eapol_handler { /** Type */ uint8_t type; /** * Process received packet * * @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 ); }; /** EAPoL handler table */ #define EAPOL_HANDLERS __table ( struct eapol_handler, "eapol_handlers" ) /** Declare an EAPoL handler */ #define __eapol_handler __table_entry ( EAPOL_HANDLERS, 01 ) extern struct net_protocol eapol_protocol __net_protocol; #endif /* _IPXE_EAPOL_H */