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