--- libaitio/inc/aitio.h 2013/09/02 11:16:27 1.35 +++ libaitio/inc/aitio.h 2013/11/21 12:54:21 1.36.2.1 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitio.h,v 1.35 2013/09/02 11:16:27 misho Exp $ +* $Id: aitio.h,v 1.36.2.1 2013/11/21 12:54:21 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -62,6 +62,7 @@ SUCH DAMAGE. #include #include #include +#include #ifndef STRSIZ @@ -71,7 +72,12 @@ SUCH DAMAGE. #define IO_SOCK_ROLE_CLIENT 0 #define IO_SOCK_ROLE_SERVER 1 +#define IO_ETHER_FILTER_PROMISC 0 +#define IO_ETHER_FILTER_NOTREAD -1 +#define IO_ETHER_FILTER_READ 1 +#define IO_ETHER_FILTER_WRITE 2 + typedef struct tagCliSock sock_cli_t; typedef void *(*sock_cb_t)(sock_cli_t*); struct tagCliSock { @@ -95,11 +101,15 @@ typedef struct { int sock_type; int sock_proto; int sock_fd; + struct timespec sock_timeout; sockaddr_t sock_addr; sockaddr_t sock_peer; ait_val_t sock_buf; + volatile intptr_t sock_kill; + sched_root_task_t *sock_root; + pthread_mutex_t sock_mtx; TAILQ_HEAD(, tagCliSock) sock_cli; } sock_t; @@ -136,10 +146,18 @@ void ioCloseSocket(sock_t ** __restrict s); * * @s = Socket * @arg = Server role = listen backlog queue and Client role = peer address + * @timeout = Socket timeout in ms (default -1 infinit) * return: -1 error or 0 ok */ -int ioUpSocket(sock_t * __restrict s, void *arg); +int ioUpSocket(sock_t * __restrict s, void *arg, int timeout); /* + * ioLoopSocket() - Start socket scheduler + * + * @s = Socket + * return: -1 error or return result from scheduler + */ +int ioLoopSocket(sock_t * __restrict s); +/* * ioAcceptSocket() - Accept clients * * @s = Socket @@ -492,6 +510,18 @@ int io_etherOpen(const char *csIface, int flags, int w * return: none */ void io_etherClose(int eth, void **zcbuf); + +/* + * io_etherFilter() - BPF filter routine + * + * @eth = bpf handle + * @io = filter direction + * (IO_ETHER_FILTER_PROMISC|IO_ETHER_FILTER_NOTREAD|IO_ETHER_FILTER_READ|IO_ETHER_FILTER_WRITE) + * @insn = BPF filter instruction array + * @insnlen = Length of BPF filter instruction array + * return: -1 error or 0 ok + */ +int io_etherFilter(int eth, int io, struct bpf_insn * __restrict insn, size_t insnlen); /* * io_etherSend() - Send packet to bpf