#ifndef _S_EAPOLSOCKET_H
#define _S_EAPOLSOCKET_H
#include <EAP8021X/EAPOL.h>
#include "wireless.h"
typedef struct EAPOLSocket_s EAPOLSocket;
typedef struct {
EAPOLPacket * eapol_p;
unsigned int length;
boolean_t logged;
} EAPOLSocketReceiveData, *EAPOLSocketReceiveDataRef;
typedef void (EAPOLSocketReceiveCallback)(void * arg1, void * arg2,
EAPOLSocketReceiveData * data);
int
eapol_socket(char * ifname, boolean_t blocking);
void
EAPOLSocketSetDebug(boolean_t debug);
void
EAPOLSocket_free(EAPOLSocket * * eapol_p);
EAPOLSocket *
EAPOLSocket_create(int fd, const struct sockaddr_dl * link);
int
EAPOLSocket_mtu(EAPOLSocket * sock);
boolean_t
EAPOLSocket_is_wireless(EAPOLSocket * sock);
boolean_t
EAPOLSocket_set_key(EAPOLSocket * sock, wirelessKeyType type,
int index, const uint8_t * key, int key_length);
boolean_t
EAPOLSocket_set_wpa_session_key(EAPOLSocket * sock,
const uint8_t * key, int key_length);
boolean_t
EAPOLSocket_link_update(EAPOLSocket * sock);
void
EAPOLSocket_disable_receive(EAPOLSocket * eapol_socket);
void
EAPOLSocket_enable_receive(EAPOLSocket * eapol_socket,
EAPOLSocketReceiveCallback * func,
void * arg1, void * arg2);
int
EAPOLSocket_transmit(EAPOLSocket * sock,
EAPOLPacketType packet_type,
void * body, unsigned int body_length,
struct sockaddr_dl * dest,
boolean_t print_whole_packet);
const char *
EAPOLSocket_if_name(EAPOLSocket * sock, uint32_t * length);
void
eapol_packet_print(EAPOLPacket * eapol_p, unsigned int length);
void
eap_packet_print(EAPPacketRef pkt_p, unsigned int length);
#endif _S_EAPOLSOCKET_H