1 #ifndef ETTERCAP_INJECT_H
2 #define ETTERCAP_INJECT_H
3 
4 #include <ec_packet.h>
5 #include <ec_conntrack.h>
6 
7 #define FUNC_INJECTOR_PTR(func) int (*func)(struct packet_object *, size_t *)
8 #define FUNC_INJECTOR(func) int func(struct packet_object *po, size_t *len)
9 
10 #define LENGTH *len
11 #define LENGTH_PTR len
12 
13 #define SESSION_PASSTHRU(x,y) do{   \
14    x->prev_session = y->session;    \
15    y->session = x;                  \
16 } while(0)
17 
18 #define SESSION_CLEAR(x) (x->session=NULL)
19 
20 #define EXECUTE_INJECTOR(x,y) do{                     \
21    FUNC_INJECTOR_PTR(prev_injector);                  \
22    prev_injector = get_injector(x, y);                \
23    if (prev_injector == NULL)                         \
24       return -E_NOTFOUND;                              \
25    if (prev_injector(PACKET, LENGTH_PTR) != E_SUCCESS) \
26       return -E_NOTHANDLED;                            \
27 } while(0)
28 
29 EC_API_EXTERN int inject_buffer(struct packet_object *po);
30 EC_API_EXTERN void add_injector(u_int8 level, u_int32 type, FUNC_INJECTOR_PTR(injector));
31 EC_API_EXTERN void * get_injector(u_int8 level, u_int32 type);
32 EC_API_EXTERN void inject_split_data(struct packet_object *po);
33 
34 EC_API_EXTERN int user_kill(struct conn_object *co);
35 EC_API_EXTERN int user_inject(u_char *buf, size_t size, struct conn_object *co, int which);
36 
37 #define CHAIN_ENTRY 1
38 #define CHAIN_LINKED 2
39 
40 /* Used to trace inject from udp to ip */
41 #define STATELESS_IP_MAGIC 0x0304e77e
42 
43 #endif
44 
45 /* EOF */
46 
47 // vim:ts=3:expandtab
48 
49