Source to ./hypervisor.h
/*
* Cisco router simulation platform.
* Copyright (c) 2006 Christophe Fillot ([email protected])
*
* Hypervisor routines.
*/
#ifndef __HYPERVISOR_H__
#define __HYPERVISOR_H__
/* Default TCP port */
#define HYPERVISOR_TCP_PORT 7200
/* Maximum listening socket number */
#define HYPERVISOR_MAX_FD 10
/* Maximum tokens per line */
#define HYPERVISOR_MAX_TOKENS 16
/* Hypervisor status codes */
#define HSC_INFO_OK 100 /* ok */
#define HSC_INFO_MSG 101 /* informative message */
#define HSC_INFO_DEBUG 102 /* debugging message */
#define HSC_ERR_PARSING 200 /* parse error */
#define HSC_ERR_UNK_MODULE 201 /* unknown module */
#define HSC_ERR_UNK_CMD 202 /* unknown command */
#define HSC_ERR_BAD_PARAM 203 /* bad number of parameters */
#define HSC_ERR_INV_PARAM 204 /* invalid parameter */
#define HSC_ERR_BINDING 205 /* binding error */
#define HSC_ERR_CREATE 206 /* unable to create object */
#define HSC_ERR_DELETE 207 /* unable to delete object */
#define HSC_ERR_UNK_OBJ 208 /* unknown object */
#define HSC_ERR_START 209 /* unable to start object */
#define HSC_ERR_STOP 210 /* unable to stop object */
#define HSC_ERR_FILE 211 /* file error */
#define HSC_ERR_BAD_OBJ 212 /* Bad object */
typedef struct hypervisor_conn hypervisor_conn_t;
typedef struct hypervisor_cmd hypervisor_cmd_t;
typedef struct hypervisor_module hypervisor_module_t;
/* Hypervisor connection */
struct hypervisor_conn {
pthread_t tid; /* Thread identifier */
volatile int active; /* Connection is active ? */
int client_fd; /* Client FD */
FILE *in,*out; /* I/O buffered streams */
hypervisor_module_t *cur_module; /* Module of current command */
hypervisor_conn_t *next,**pprev;
};
/* Hypervisor command handler */
typedef int (*hypervisor_cmd_handler)(hypervisor_conn_t *conn,int argc,
char *argv[]);
/* Hypervisor command */
struct hypervisor_cmd {
char *name;
int min_param,max_param;
hypervisor_cmd_handler handler;
hypervisor_cmd_t *next;
};
/* Hypervisor module */
struct hypervisor_module {
char *name;
void *opt;
hypervisor_cmd_t *cmd_list;
hypervisor_module_t *next;
};
/* Hypervisor NIO initialization */
extern int hypervisor_nio_init(void);
/* Hypervisor NIO bridge initialization */
extern int hypervisor_nio_bridge_init(void);
/* Hypervisor Frame-Relay switch initialization */
extern int hypervisor_frsw_init(void);
/* Hypervisor ATM switch initialization */
extern int hypervisor_atmsw_init(void);
/* Hypervisor ATM bridge initialization */
extern int hypervisor_atm_bridge_init(void);
/* Hypervisor Ethernet switch initialization */
extern int hypervisor_ethsw_init(void);
/* Hypervisor VM initialization */
extern int hypervisor_vm_init(void);
/* Hypervisor VM debugging initialization */
extern int hypervisor_vm_debug_init(void);
/* Hypervisor store initialization */
extern int hypervisor_store_init(void);
/* Send a reply */
int hypervisor_send_reply(hypervisor_conn_t *conn,int code,int done,
char *format,...);
/* Find a module */
hypervisor_module_t *hypervisor_find_module(char *name);
/* Find a command in a module */
hypervisor_cmd_t *hypervisor_find_cmd(hypervisor_module_t *module,char *name);
/* Find an object in the registry */
void *hypervisor_find_object(hypervisor_conn_t *conn,char *name,int obj_type);
/* Find a VM in the registry */
void *hypervisor_find_vm(hypervisor_conn_t *conn,char *name);
/* Register a module */
hypervisor_module_t *hypervisor_register_module(char *name,void *opt);
/* Register a list of commands */
int hypervisor_register_cmd_list(hypervisor_module_t *module,
hypervisor_cmd_t *cmd_list);
/* Register an array of commands */
int hypervisor_register_cmd_array(hypervisor_module_t *module,
hypervisor_cmd_t *cmd_array);
/* Stop hypervisor from sighandler */
int hypervisor_stopsig(void);
/* Hypervisor TCP server */
int hypervisor_tcp_server(char *ip_addr,int tcp_port);
#endif