#ifndef _IP_REASSEMBLE_H #define _IP_REASSEMBLE_H #ifdef __cpluscplus extern "C" { #endif #include "packet.h" #include "log.h" #define IP_REASSEMBLE_DEBUG(format, ...) LOG_DEBUG("ip_reassemble", format, ##__VA_ARGS__) #define IP_REASSEMBLE_ERROR(format, ...) LOG_ERROR("ip_reassemble", format, ##__VA_ARGS__) struct ip_reassemble_config { bool enable; uint32_t timeout; uint32_t bucket_entries; uint32_t bucket_num; }; struct ip_reassemble_manager *ip_reassemble_manager_create(const struct ip_reassemble_config *config); void ip_reassemble_manager_destory(struct ip_reassemble_manager *mgr); void ip_reassemble_manager_stat(struct ip_reassemble_manager *mgr); /* * Returns the reassembled packet, or NULL if the packet is not reassembled * The returned packet should be freed by calling the packet_free() function */ struct packet *ip_reassemble_packet(struct ip_reassemble_manager *mgr, const struct packet *pkt); struct packet *ipv4_reassemble_packet(struct ip_reassemble_manager *mgr, const struct packet *pkt); struct packet *ipv6_reassemble_packet(struct ip_reassemble_manager *mgr, const struct packet *pkt); #ifdef __cpluscplus } #endif #endif