/* * CORE * Copyright (c)2010-2012 the Boeing Company. * See the LICENSE file included in this distribution. * * author: Tom Goff * * vnode_client.h * */ #ifndef _VNODE_CLIENT_H_ #define _VNODE_CLIENT_H_ #include #include #include "vnode_msg.h" #include "vnode_cmd.h" #include "vnode_io.h" struct vnode_client; typedef void (*vnode_clientcb_t)(struct vnode_client *client); typedef struct vnode_client { TAILQ_HEAD(cmdlist, cmdentry) cmdlisthead; struct ev_loop *loop; int serverfd; struct vnode_msgio msgio; void *data; vnode_clientcb_t ioerrorcb; int32_t cmdid; } vnode_client_t; typedef void (*vnode_client_cmddonecb_t)(int32_t cmdid, pid_t pid, int status, void *data); typedef enum { VCMD_IO_NONE = 0, VCMD_IO_FD, VCMD_IO_PIPE, VCMD_IO_PTY, } vnode_client_cmdiotype_t; typedef struct { vnode_client_cmdiotype_t iotype; union { stdio_fd_t stdiofd; stdio_pipe_t stdiopipe; stdio_pty_t stdiopty; }; } vnode_client_cmdio_t; #define SET_STDIOFD(clcmdio, ifd, ofd, efd) \ do { \ (clcmdio)->iotype = VCMD_IO_FD; \ (clcmdio)->stdiofd.infd = (ifd); \ (clcmdio)->stdiofd.outfd = (ofd); \ (clcmdio)->stdiofd.errfd = (efd); \ } while (0) vnode_client_t *vnode_client(struct ev_loop *loop, const char *ctrlchnlname, vnode_clientcb_t ioerrorcb, void *data); void vnode_delclient(vnode_client_t *client); vnode_client_cmdio_t *vnode_open_clientcmdio(vnode_client_cmdiotype_t iotype); void vnode_close_clientcmdio(vnode_client_cmdio_t *clientcmdio); int vnode_client_cmdreq(vnode_client_t *client, vnode_client_cmdio_t *clientcmdio, vnode_client_cmddonecb_t cmddonecb, void *data, int argc, char *argv[]); #endif /* _VNODE_CLIENT_H_ */