2009-07-28 10:46:53 -04:00
/* */
2010-01-14 13:38:37 -05:00
# define PLUGIN_VERSION_LISTENER ((double)0.3)
2010-01-13 13:52:55 -05:00
# define PLUGIN_VERSION_BACKEND ((double)0.2)
2009-08-17 09:58:06 -04:00
2009-09-01 16:22:30 -04:00
# define LISTENER_VER_SYM listener_plugin_version
2009-08-17 09:58:06 -04:00
# define BACKEND_VER_SYM backend_plugin_version
2009-09-01 16:22:30 -04:00
# define LISTENER_INFO_SYM listener_plugin_info
2009-08-17 09:58:06 -04:00
# define BACKEND_INFO_SYM backend_plugin_info
2009-09-01 16:22:30 -04:00
# define LISTENER_VER_STR "listener_plugin_version"
2009-08-17 09:58:06 -04:00
# define BACKEND_VER_STR "backend_plugin_version"
2009-09-01 16:22:30 -04:00
# define LISTENER_INFO_STR "listener_plugin_info"
2009-08-17 09:58:06 -04:00
# define BACKEND_INFO_STR "backend_plugin_info"
2009-08-28 14:12:46 -04:00
typedef void * listener_context_t ;
typedef void * backend_context_t ;
2009-07-28 10:46:53 -04:00
/* These callbacks hand requests off to the
appropriate backend . */
/* Do nothing. Returns 1 (failure) to caller */
typedef int ( * fence_null_callback ) ( const char * vm_name ,
void * priv ) ;
/* Turn the VM 'off'. Returns 0 to caller if successful or
nonzero if unsuccessful . */
2010-01-13 13:52:55 -05:00
typedef int ( * fence_off_callback ) ( const char * vm_name , const char * src ,
uint32_t seqno , void * priv ) ;
2009-07-28 10:46:53 -04:00
/* Turn the VM 'on'. Returns 0 to caller if successful or
nonzero if unsuccessful . */
2010-01-13 13:52:55 -05:00
typedef int ( * fence_on_callback ) ( const char * vm_name , const char * src ,
uint32_t seqno , void * priv ) ;
2009-07-28 10:46:53 -04:00
/* Reboot a VM. Returns 0 to caller if successful or
nonzero if unsuccessful . */
2010-01-13 13:52:55 -05:00
typedef int ( * fence_reboot_callback ) ( const char * vm_name , const char * src ,
uint32_t seqno , void * priv ) ;
2009-07-28 10:46:53 -04:00
/* Get status of a VM. Returns 0 to caller if VM is alive or
nonzero if VM is not alive . */
typedef int ( * fence_status_callback ) ( const char * vm_name ,
void * priv ) ;
/* Get status of backend. Returns 0 to caller if backend
is responding to requests . */
typedef int ( * fence_devstatus_callback ) ( void * priv ) ;
2010-01-14 13:38:37 -05:00
2009-12-07 12:55:48 -05:00
/* VMs available to fence. Returns 0 to caller if backend
is responding to requests and a host list can be produced */
typedef int ( * hostlist_callback ) ( const char * vm_name , const char * uuid ,
int state , void * arg ) ;
typedef int ( * fence_hostlist_callback ) ( hostlist_callback cb ,
void * arg , void * priv ) ;
2009-09-01 16:22:30 -04:00
typedef int ( * backend_init_fn ) ( backend_context_t * c ,
config_object_t * config ) ;
typedef int ( * backend_cleanup_fn ) ( backend_context_t c ) ;
2009-08-12 13:20:50 -04:00
2009-07-28 10:46:53 -04:00
typedef struct _fence_callbacks {
fence_null_callback null ;
fence_off_callback off ;
fence_on_callback on ;
fence_reboot_callback reboot ;
fence_status_callback status ;
fence_devstatus_callback devstatus ;
2009-12-07 12:55:48 -05:00
fence_hostlist_callback hostlist ;
2009-07-28 10:46:53 -04:00
} fence_callbacks_t ;
2009-09-01 16:22:30 -04:00
typedef struct backend_plugin {
2009-08-12 13:20:50 -04:00
const char * name ;
const char * version ;
const fence_callbacks_t * callbacks ;
2009-09-01 16:22:30 -04:00
backend_init_fn init ;
backend_cleanup_fn cleanup ;
} backend_plugin_t ;
typedef int ( * listener_init_fn ) ( listener_context_t * c ,
const fence_callbacks_t * cb ,
config_object_t * config ,
2010-01-14 13:38:37 -05:00
map_object_t * map ,
2009-09-01 16:22:30 -04:00
void * priv ) ;
typedef int ( * listener_dispatch_fn ) ( listener_context_t c ,
struct timeval * timeout ) ;
typedef int ( * listener_cleanup_fn ) ( listener_context_t c ) ;
typedef struct listener_plugin {
const char * name ;
const char * version ;
listener_init_fn init ;
listener_dispatch_fn dispatch ;
listener_cleanup_fn cleanup ;
} listener_plugin_t ;
typedef enum {
PLUGIN_NONE = 0 ,
PLUGIN_LISTENER = 1 ,
PLUGIN_BACKEND = 2
} plugin_type_t ;
2009-11-05 14:01:35 -05:00
# ifdef __cplusplus
extern " C " {
# endif
2009-09-01 16:22:30 -04:00
int plugin_reg_backend ( const backend_plugin_t * plugin ) ;
int plugin_reg_listener ( const listener_plugin_t * plugin ) ;
const backend_plugin_t * plugin_find_backend ( const char * name ) ;
const listener_plugin_t * plugin_find_listener ( const char * name ) ;
2009-07-28 10:46:53 -04:00
2009-08-12 13:20:50 -04:00
void plugin_dump ( void ) ;
2009-08-17 09:58:06 -04:00
# ifdef _MODULE
2009-09-01 18:54:17 -04:00
int plugin_load ( const char * filename ) ;
int plugin_search ( const char * pathname ) ;
2009-08-12 13:20:50 -04:00
# endif
2009-07-28 10:46:53 -04:00
2009-11-05 14:01:35 -05:00
# ifdef __cplusplus
}
# endif