#ifndef INTERFACE_H #define INTERFACE_H #include #include #include typedef struct interface_v4 interface_v4_t; typedef struct interface_v6 interface_v6_t; typedef struct interface_packet { sa_family_t family; const uint8_t* data; size_t length; struct sockaddr_storage source; struct sockaddr_storage destination; } interface_packet_t; typedef void (*interface_packet_callback_t)(const interface_packet_t* packet, void* userData); int Interface_Init(void); void Interface_Cleanup(void); interface_v4_t* Interface_Create_v4(const char* localAddress, interface_packet_callback_t callback, void* userData); interface_v6_t* Interface_Create_v6(const char* localAddress, interface_packet_callback_t callback, void* userData); int Interface_Listen_v4(interface_v4_t* iface); int Interface_Listen_v6(interface_v6_t* iface); void Interface_Stop_v4(interface_v4_t* iface); void Interface_Stop_v6(interface_v6_t* iface); void Interface_Destroy_v4(interface_v4_t* iface); void Interface_Destroy_v6(interface_v6_t* iface); int Interface_SendRaw_v4(interface_v4_t* iface, const struct in_addr* destination, const void* packet, size_t packetLength); int Interface_SendRaw_v6(interface_v6_t* iface, const struct in6_addr* destination, const void* packet, size_t packetLength); int Interface_SendFrame_v4(interface_v4_t* iface, const void* frame, size_t frameLength); int Interface_SendFrame_v6(interface_v6_t* iface, const void* frame, size_t frameLength); #endif