/* \file libpag.h * * \brief IIE ZeroCopy Packet I/O Library for CNCERT * \author Qiuwen Lu * \date 2016-09-13 */ #pragma once #ifdef __cplusplus extern "C" { #endif int pag_open(); int pag_close(); void * pag_get_frame(int sid); int pag_get_frame_length(int sid); void * pag_get(int sid); void *pag_getsendbuf(int sid); int pag_send(int pkttype, int sid, int datalen); void pag_freesendbuf(int sid); void *pag_getsendbuf_eth(int sid, int port); int pag_send_eth(int sid, int eth_datalen, int port); void pag_freesendbuf_eth(int sid, int port); uint64_t pag_time(void *pkt); #if 0 /* Compatible with DF dual stack system, running on line */ typedef void packet_t; packet_t * pag_get_packet(int sid); void * pag_get_frame_with_packet(packet_t * packet); #define pag_get_frame(x) \ __builtin_choose_expr( \ __builtin_types_compatible_p(typeof(x), int), pag_get_frame(x) \ __builtin_choose_expr(__builtin_types_compatible_p(typeof(x), packet_t *), \ pag_get_frame_with_packet(x))) \ #endif /* Extended Interface */ void * pag_get_frame_with_len(int sid, unsigned int * len); #ifdef __cplusplus } #endif