core-extra/netns/vnode_client.h

78 lines
1.8 KiB
C
Raw Normal View History

/*
* 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_ */