78 lines
1.8 KiB
C
78 lines
1.8 KiB
C
|
/*
|
||
|
* CORE
|
||
|
* Copyright (c)2010-2012 the Boeing Company.
|
||
|
* See the LICENSE file included in this distribution.
|
||
|
*
|
||
|
* author: Tom Goff <thomas.goff@boeing.com>
|
||
|
*
|
||
|
* vnode_client.h
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#ifndef _VNODE_CLIENT_H_
|
||
|
#define _VNODE_CLIENT_H_
|
||
|
|
||
|
#include <sys/queue.h>
|
||
|
#include <sys/types.h>
|
||
|
|
||
|
#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_ */
|