Diff for /libaitio/inc/aitio.h between versions 1.34 and 1.41

version 1.34, 2013/08/13 00:17:28 version 1.41, 2015/01/19 23:32:30
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013Copyright 2004 - 2014
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
Line 62  SUCH DAMAGE. Line 62  SUCH DAMAGE.
 #include <net/bpf.h>  #include <net/bpf.h>
 #include <netinet/in.h>  #include <netinet/in.h>
 #include <elwix.h>  #include <elwix.h>
   #include <aitsched.h>
   
   
 #ifndef STRSIZ  #ifndef STRSIZ
Line 71  SUCH DAMAGE. Line 72  SUCH DAMAGE.
 #define IO_SOCK_ROLE_CLIENT     0  #define IO_SOCK_ROLE_CLIENT     0
 #define IO_SOCK_ROLE_SERVER     1  #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 {  typedef struct {
        int             sock_role;        unsigned int                    prog_inin;      /* init progs */
        int             sock_backq;        unsigned int                    prog_maxn;      /* max progs */
        int             sock_type;        unsigned int                    prog_cnum;      /* current progs */
        int             sock_proto;        char                            prog_name[PATH_MAX];
        int             sock_fd; 
        sockaddr_t      sock_addr; 
   
        sockaddr_t      sock_peer;        pthread_mutex_t                 prog_mtx;
         array_t                         *prog_fds;
         unsigned int                    *prog_used;
 } prog_t;
   
        ait_val_t       sock_buf;typedef struct tagCliSock sock_cli_t;
 typedef void *(*sock_cb_t)(sock_cli_t*);
 struct tagCliSock {
         void                            *cli_parent;
         int                             cli_fd;
         intptr_t                        cli_pty;
         sockaddr_t                      cli_addr;
         char                            cli_name[64];
         char                            cli_cmdline[PATH_MAX];
         pid_t                           cli_pid;
 
         sched_task_func_t               cli_func;
 
         ait_val_t                       cli_buf[2];
 
         TAILQ_ENTRY(tagCliSock)         cli_node;
 };
 
 typedef struct {
         int                             sock_role;
         int                             sock_backq;
         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;
         prog_t                          *sock_prog;
 
         volatile intptr_t               sock_kill;
         sched_root_task_t               *sock_root;
 
         pthread_mutex_t                 sock_mtx;
         TAILQ_HEAD(, tagCliSock)        sock_cli;
 } sock_t;  } sock_t;
   
   
Line 93  const char *io_GetError(); Line 135  const char *io_GetError();
   
   
 /*  /*
    * io_progInit() - Init program pool
    *
    * @progName = program name for execution
    * @initNum = initial started programs
    * @maxNum = maximum started programs
    * return: NULL error or !=NULL allocated pool (must destroied with io_progDestroy())
    */
   prog_t *io_progInit(const char *progName, 
                   unsigned int initNum, unsigned int maxNum);
   /*
    * io_progOpen() - Execute number of program(s)
    *
    * @prg = program pool
    * @execNum = execute program(s) (0 max)
    * return: -1 error, >0 executed programs
    */
   int io_progOpen(prog_t * __restrict prg, unsigned int execNum);
   /*
    * io_progOpen2() - Start program from pool on first unused slot
    *
    * @prg = program pool
    * return: -1 error, >-1 reside at slot
    */
   int io_progOpen2(prog_t * __restrict prg);
   /*
    * io_progGrow() - Execute to number of programs in pool
    *
    * @prg = program pool
    * @toNum = execute to number of programs (0 max)
    * return: 0 error or nothing to do, 
    *      >0 executed programs and abs(<0) executed programs with logged error
    */
   int io_progGrow(prog_t * __restrict prg, unsigned int toNum);
   /*
    * io_progVacuum() - Vacuum pool to running number of programs
    *
    * @prg = program pool
    * @toNum = vacuum to number of programs (0 to init number)
    * return: 0 error or >0 closed programs
    */
   int io_progVacuum(prog_t * __restrict prg, unsigned int toNum);
   /*
    * io_progCloseAt() - Close program at pool of certain position
    *
    * @prg = program pool
    * @idx = index at pool
    * return: 0 error or !=0 closed program
    */
   int io_progCloseAt(prog_t * __restrict prg, unsigned int idx);
   /*
    * io_progCloseOf() - Close program at pool with certain handle
    *
    * @prg = program pool
    * @h = handle of program
    * return: 0 error, >0 closed programs
    */
   #ifdef POPEN_STREAM
   int io_progCloseOf(prog_t * __restrict prg, FILE *h);
   #else
   int io_progCloseOf(prog_t * __restrict prg, int h);
   #endif
   /*
    * io_progClose() - Close all programs in pool
    *
    * @prg = program pool
    * @closeNum = close program(s) (0 all)
    * return: 0 error, >0 closed programs
    */
   int io_progClose(prog_t * __restrict prg, unsigned int closeNum);
   /*
    * io_progDestroy() - Destroy entire program pool
    *
    * @pprg = program pool
    * return: none
    */
   void io_progDestroy(prog_t ** __restrict pprg);
   
   /*
    * io_progCheck() - Check exit status of program pool
    *
    * @prg = program pool
    * @re = resurrect program to init number
    * return: -1 error or >-1 exited programs
    */
   int io_progCheck(prog_t * __restrict prg, int re);
   
   /*
    * io_progAttach() - Attach to open program
    *
    * @prg = program pool
    * @newOne = Execute new one program after attach
    * return: NULL error or !=NULL attached program handle
    */
   #ifdef POPEN_STREAM
   FILE *io_progAttach(prog_t * __restrict prg, int newOne);
   #else
   int io_progAttach(prog_t * __restrict prg, int newOne);
   #endif
   /*
    * io_progDetach() - Detch from open program
    *
    * @prg= program pool
    * @pfd = attached program handle
    * return: none
    */
   #ifdef POPEN_STREAM
   void io_progDetach(prog_t * __restrict prg, FILE *pfd);
   #else
   void io_progDetach(prog_t * __restrict prg, int pfd);
   #endif
   
   
   /*
  * ioInitSocket() - Init socket and allocate resources   * ioInitSocket() - Init socket and allocate resources
  *   *
  * @role = Socket role   * @role = Socket role
Line 112  sock_t *ioInitSocket(int role, int type, int proto,  Line 267  sock_t *ioInitSocket(int role, int type, int proto, 
  * return: none   * return: none
  */   */
 void ioCloseSocket(sock_t ** __restrict s);  void ioCloseSocket(sock_t ** __restrict s);
   #define ioKillSocket(x)         (assert((x)), (x)->sock_kill = 1)
 /*  /*
    * ioCloseClient() - Close client socket
    *
    * @c = Client socket
    * return: 0 ok or !=0 error
    */
   int ioCloseClient(sock_cli_t * __restrict c);
   /*
    * ioSetupProg2Socket() - Setup program pool to socket server
    *
    * @s = Socket
    * @p = Program pool
    * return: -1 error or 0 ok
    */
   int ioSetupProg2Socket(sock_t * __restrict s, prog_t * __restrict p);
   /*
  * ioUpSocket() - Setup socket for use   * ioUpSocket() - Setup socket for use
  *   *
  * @s = Socket   * @s = Socket
  * @arg = Server role = listen backlog queue and Client role = peer address   * @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   * return: -1 error or 0 ok
  */   */
int ioUpSocket(sock_t * __restrict s, void *arg);int ioUpSocket(sock_t * __restrict s, void *arg, int timeout);
 /*
  * ioUpdTimerSocket() - Update timeout of socket
  *
  * @c = Client socket
  * return:  none
  */
 void ioUpdTimerSocket(sock_cli_t * __restrict c);
 /*
  * ioLoopSocket() - Start socket scheduler
  *
  * @s = Socket
  * @rcb = Read callback
  * return: -1 error or return result from scheduler
  */
 int ioLoopSocket(sock_t * __restrict s, sched_task_func_t rcb);
 /*
  * ioBridgeProg2Socket() - Start socket scheduler and bridge program to socket
  *
  * @s = Socket
  * @prgname = Program name
  * return: 0 ok or !=0 error
  */
 int ioBridgeProg2Socket(sock_t * __restrict s, const char *prgname);
   
   
 /*  /*
  * ioPromptRead() - Read data from input h[0] with prompt to output h[1]   * ioPromptRead() - Read data from input h[0] with prompt to output h[1]
  *   *
Line 130  int ioUpSocket(sock_t * __restrict s, void *arg); Line 326  int ioUpSocket(sock_t * __restrict s, void *arg);
  * @dataLen = Length of data   * @dataLen = Length of data
  * return: 0 EOF; -1 error:: can`t read; >0 count of readed chars   * return: 0 EOF; -1 error:: can`t read; >0 count of readed chars
 */  */
int ioPromptRead(int *h, const char *csPrompt, char * __restrict psData, int dataLen);int ioPromptRead(int *h, const char *csPrompt, 
                 char * __restrict psData, int dataLen);
 /*  /*
  * ioPromptPassword() - Read password from input h[0] with prompt to output h[1]   * ioPromptPassword() - Read password from input h[0] with prompt to output h[1]
  *   *
Line 141  int ioPromptRead(int *h, const char *csPrompt, char *  Line 338  int ioPromptRead(int *h, const char *csPrompt, char * 
  * @confirm = Confirm password, 0 - get password, !=0 Ask for confirmation   * @confirm = Confirm password, 0 - get password, !=0 Ask for confirmation
  * return: 0 EOF; -1 error:: can`t read; >0 count of readed chars   * return: 0 EOF; -1 error:: can`t read; >0 count of readed chars
 */  */
int ioPromptPassword(int *h, const char *csPrompt, char * __restrict psPass, int passLen, int confirm);int ioPromptPassword(int *h, const char *csPrompt, 
                 char * __restrict psPass, int passLen, int confirm);
   
   
 /*  /*
Line 436  int io_dumbFile(const char *csFile, int mode, off_t si Line 634  int io_dumbFile(const char *csFile, int mode, off_t si
   
   
 /*  /*
  * io_get1stiface() - Get first interface of host  
  *  
  * @szIface = interface string buffer  
  * @iflen = size of interface buffer  
  * return: -1 error or 0 ok  
  */  
 int io_get1stiface(char *szIface, int iflen);  
 /*  
  * io_etherOpen() - Open BPF interface to device   * io_etherOpen() - Open BPF interface to device
  *   *
  * @csIface = interface name   * @csIface = interface name
Line 454  int io_get1stiface(char *szIface, int iflen); Line 644  int io_get1stiface(char *szIface, int iflen);
  * @zcbuf = zero copy buffer, if BPF supports it and isn't NULL   * @zcbuf = zero copy buffer, if BPF supports it and isn't NULL
  * return: -1 error or >-1 bpf handle   * return: -1 error or >-1 bpf handle
  */   */
int io_etherOpen(const char *csIface, int flags, int whdr, int wdlt, int io_etherOpen(const char *csIface, int flags, unsigned int whdr, 
                unsigned int *buflen, void **zcbuf);                unsigned int wdlt, unsigned int *buflen, void **zcbuf);
 /*  /*
  * io_etherClose() - Close BPF interface   * io_etherClose() - Close BPF interface
  *   *
Line 464  int io_etherOpen(const char *csIface, int flags, int w Line 654  int io_etherOpen(const char *csIface, int flags, int w
  * return: none   * return: none
  */   */
 void io_etherClose(int eth, void **zcbuf);  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   * io_etherSend() - Send packet to bpf

Removed from v.1.34  
changed lines
  Added in v.1.41


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>