/* * virsh.c: a Xen shell used to exercise the libvirt API * * Copyright (C) 2005 Red Hat, Inc. * * See COPYING.LIB for the License of this software * * Daniel Veillard * Karel Zak * Daniel P. Berrange * * * $Id$ */ #include "libvirt/libvirt.h" #include "libvirt/virterror.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "config.h" #include "internal.h" #include "console.h" static char *progname; #ifndef TRUE #define TRUE 1 #define FALSE 0 #endif #define VSH_PROMPT_RW "virsh # " #define VSH_PROMPT_RO "virsh > " #define GETTIMEOFDAY(T) gettimeofday(T, NULL) #define DIFF_MSEC(T, U) \ ((((int) ((T)->tv_sec - (U)->tv_sec)) * 1000000.0 + \ ((int) ((T)->tv_usec - (U)->tv_usec))) / 1000.0) /** * The log configuration */ #define MSG_BUFFER 4096 #define SIGN_NAME "virsh" #define DIR_MODE (S_IWUSR | S_IRUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) /* 0755 */ #define FILE_MODE (S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH) /* 0644 */ #define LOCK_MODE (S_IWUSR | S_IRUSR) /* 0600 */ #define LVL_DEBUG "DEBUG" #define LVL_INFO "INFO" #define LVL_NOTICE "NOTICE" #define LVL_WARNING "WARNING" #define LVL_ERROR "ERROR" /** * vshErrorLevel: * * Indicates the level of an log message */ typedef enum { VSH_ERR_DEBUG = 0, VSH_ERR_INFO, VSH_ERR_NOTICE, VSH_ERR_WARNING, VSH_ERR_ERROR } vshErrorLevel; /* * The error handler for virtsh */ static void virshErrorHandler(void *unused, virErrorPtr error) { if ((unused != NULL) || (error == NULL)) return; /* Suppress the VIR_ERR_NO_XEN error which fails as non-root */ if ((error->code == VIR_ERR_NO_XEN) || (error->code == VIR_ERR_OK)) return; virDefaultErrorFunc(error); } /* * virsh command line grammar: * * command_line = \n | ; ; ... * * command =