summaryrefslogtreecommitdiff
path: root/pag/libpag.h
blob: d349b27b11a07eea80e252db3e108b178bc5a6e4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/* \file libpag.h
 * 
 * \brief IIE ZeroCopy Packet I/O Library for CNCERT
 * \author Qiuwen Lu<[email protected]>
 * \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