#include <apr_pools.h>
#include <apr_network_io.h>
#include <apr_poll.h>
+#include <apr_hash.h>
+
+#include <libvirt/libvirt.h>
enum guest_state {
guest_state_connecting, /* Connecting to socket. */
/* Increments every time guest does something bad, decremented once per min */
unsigned penalty;
struct timespec last_penalty_decr;
+
+ /* Hash records last time each command was run by this guest. */
+ apr_hash_t *lasttime;
};
enum arg_type {
extern const char *conf_file;
extern char *socket_dir;
extern char *guests_file;
+extern char *libvirt_uri;
+extern int libvirt_uri_set_on_cmdline;
extern int verbose;
extern int verbose_set_on_cmdline;
extern int foreground;
extern int foreground_set_on_cmdline;
extern int messages_to_stderr;
extern apr_pool_t *pool; /* pool for global memory allocation */
+extern void initialize (void);
+extern struct timespec *diff_timespec (struct timespec *r, const struct timespec *a, const struct timespec *b); /* r = a - b */
/* error.c */
extern void init_syslog (void);
/* configuration.c */
extern void read_main_conf_file (void);
+extern void check_guests_file (struct guest_description *hval, const char *cmd, double *interval, int *enabled);
/* monitor_sockets.c */
extern int sockets_inotify_fd;
/* commands.c */
extern apr_hash_t *commands;
extern void execute_command (const struct timespec *now, struct guest_description *hval, const char *command);
+extern int get_args (apr_array_header_t *args, const char *argfs, ...);
extern void send_error (struct guest_description *hval, int code);
+extern void send_reply (struct guest_description *hval, int code, const char *fs, ...)
+ __attribute__((format (printf,3,4)));
typedef void (*command_fn) (struct guest_description *hval, const char *cmd, apr_array_header_t *args);
-#define REGISTER_COMMAND(name,callback) \
+#define REGISTER_COMMAND(name) \
static void register_##name (void) __attribute__((constructor)); \
\
static void \
register_##name (void) \
{ \
+ if (pool == NULL) \
+ initialize (); \
+ \
if (commands == NULL) \
commands = apr_hash_make (pool); \
\
/* The assignment below just causes a warning \
* if the callback has the wrong type. \
*/ \
- command_fn cb = (callback); \
- apr_hash_set (commands, (name), APR_HASH_KEY_STRING, cb); \
+ command_fn cb = name; \
+ apr_hash_set (commands, #name, APR_HASH_KEY_STRING, cb); \
}
+/* virt.c */
+extern void init_libvirt (void);
+extern virConnectPtr conn;
+extern virNodeInfo nodeinfo;
+
#endif /* HOSTINFOD_H */