* Daniel Veillard <veillard@redhat.com>
*/
+#include "config.h"
#include "libvirt/libvirt.h"
#include <stdio.h>
static int virStateDriverTabCount = 0;
static int initialized = 0;
+/* If configured with --enable-debug=yes then library calls
+ * are printed to stderr for debugging.
+ */
+#ifdef ENABLE_DEBUG
+#define DEBUG(fs,...) \
+ fprintf (stderr, "libvirt: %s (" fs ")\n", __func__, __VA_ARGS__)
+#define DEBUG0 \
+ fprintf (stderr, "libvirt: %s ()\n", __func__)
+#else
+#define DEBUG0
+#define DEBUG(fs,...)
+#endif /* !ENABLE_DEBUG */
+
/**
* virInitialize:
*
int
virInitialize(void)
{
+ DEBUG0;
if (initialized)
return(0);
initialized = 1;
unsigned long *typeVer)
{
int i;
+ DEBUG("libVir=%p, type=%s, typeVer=%p", libVer, type, typeVer);
if (!initialized)
if (virInitialize() < 0)
goto failed;
}
+#ifdef ENABLE_DEBUG
+ fprintf (stderr, "libvirt: do_open: proceeding with name=%s\n", name);
+#endif
+
for (i = 0; i < virDriverTabCount; i++) {
+#ifdef ENABLE_DEBUG
+ fprintf (stderr, "libvirt: do_open: trying driver %d (%s) ...\n",
+ i, virDriverTab[i]->name);
+#endif
res = virDriverTab[i]->open (ret, name, flags);
+#ifdef ENABLE_DEBUG
+ fprintf (stderr, "libvirt: do_open: driver %d returned %s\n",
+ i,
+ res == VIR_DRV_OPEN_SUCCESS ? "SUCCESS" :
+ (res == VIR_DRV_OPEN_DECLINED ? "DECLINED" :
+ (res == VIR_DRV_OPEN_ERROR ? "ERROR" : "unknown status")));
+#endif
if (res == VIR_DRV_OPEN_ERROR) goto failed;
else if (res == VIR_DRV_OPEN_SUCCESS) {
ret->driver = virDriverTab[i];
virConnectPtr
virConnectOpen (const char *name)
{
+ DEBUG("name=%s", name);
return do_open (name, 0);
}
virConnectPtr
virConnectOpenReadOnly(const char *name)
{
+ DEBUG("name=%s", name);
return do_open (name, VIR_DRV_OPEN_RO);
}
int
virConnectClose(virConnectPtr conn)
{
+ DEBUG("conn=%p", conn);
+
if (!VIR_IS_CONNECT(conn))
return (-1);
virConnectGetType(virConnectPtr conn)
{
const char *ret;
+ DEBUG("conn=%p", conn);
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
int
virConnectGetVersion(virConnectPtr conn, unsigned long *hvVer)
{
+ DEBUG("conn=%p, hvVer=%p", conn, hvVer);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (-1);
char *
virConnectGetHostname (virConnectPtr conn)
{
+ DEBUG("conn=%p", conn);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return NULL;
char *
virConnectGetURI (virConnectPtr conn)
{
+ DEBUG("conn=%p", conn);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return NULL;
virConnectGetMaxVcpus(virConnectPtr conn,
const char *type)
{
+ DEBUG("conn=%p, type=%s", conn, type);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (-1);
int
virConnectListDomains(virConnectPtr conn, int *ids, int maxids)
{
+ DEBUG("conn=%p, ids=%p, maxids=%d", conn, ids, maxids);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (-1);
int
virConnectNumOfDomains(virConnectPtr conn)
{
+ DEBUG("conn=%p", conn);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (-1);
virConnectPtr
virDomainGetConnect (virDomainPtr dom)
{
+ DEBUG("dom=%p", dom);
+
if (!VIR_IS_DOMAIN (dom)) {
virLibDomainError (dom, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
return NULL;
virDomainCreateLinux(virConnectPtr conn, const char *xmlDesc,
unsigned int flags)
{
+ DEBUG("conn=%p, xmlDesc=%s, flags=%d", conn, xmlDesc, flags);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (NULL);
virDomainPtr
virDomainLookupByID(virConnectPtr conn, int id)
{
+ DEBUG("conn=%p, id=%d", conn, id);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (NULL);
virDomainPtr
virDomainLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
{
+ DEBUG("conn=%p, uuid=%s", conn, uuid);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (NULL);
unsigned char uuid[VIR_UUID_BUFLEN];
int ret;
+ DEBUG("conn=%p, uuidstr=%s", conn, uuidstr);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (NULL);
virDomainPtr
virDomainLookupByName(virConnectPtr conn, const char *name)
{
+ DEBUG("conn=%p, name=%s", conn, name);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (NULL);
{
virConnectPtr conn;
+ DEBUG("domain=%p", domain);
+
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
return (-1);
int
virDomainFree(virDomainPtr domain)
{
+ DEBUG("domain=%p", domain);
+
if (!VIR_IS_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
return (-1);
virDomainSuspend(virDomainPtr domain)
{
virConnectPtr conn;
+ DEBUG("domain=%p", domain);
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
virDomainResume(virDomainPtr domain)
{
virConnectPtr conn;
+ DEBUG("domain=%p", domain);
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
{
char filepath[4096];
virConnectPtr conn;
+ DEBUG("domain=%p, to=%s", domain, to);
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
virDomainRestore(virConnectPtr conn, const char *from)
{
char filepath[4096];
+ DEBUG("conn=%p, from=%s", conn, from);
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
{
char filepath[4096];
virConnectPtr conn;
+ DEBUG("domain=%p, to=%s, flags=%d", domain, to, flags);
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
virDomainShutdown(virDomainPtr domain)
{
virConnectPtr conn;
+ DEBUG("domain=%p", domain);
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
virDomainReboot(virDomainPtr domain, unsigned int flags)
{
virConnectPtr conn;
+ DEBUG("domain=%p, flags=%u", domain, flags);
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
const char *
virDomainGetName(virDomainPtr domain)
{
+ DEBUG("domain=%p", domain);
+
if (!VIR_IS_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
return (NULL);
int
virDomainGetUUID(virDomainPtr domain, unsigned char *uuid)
{
+ DEBUG("domain=%p, uuid=%p", domain, uuid);
+
if (!VIR_IS_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
return (-1);
virDomainGetUUIDString(virDomainPtr domain, char *buf)
{
unsigned char uuid[VIR_UUID_BUFLEN];
+ DEBUG("domain=%p, buf=%p", domain, buf);
if (!VIR_IS_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
unsigned int
virDomainGetID(virDomainPtr domain)
{
+ DEBUG("domain=%p", domain);
+
if (!VIR_IS_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
return ((unsigned int) -1);
virDomainGetOSType(virDomainPtr domain)
{
virConnectPtr conn;
+ DEBUG("domain=%p", domain);
if (!VIR_IS_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
virDomainGetMaxMemory(virDomainPtr domain)
{
virConnectPtr conn;
+ DEBUG("domain=%p", domain);
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
virDomainSetMaxMemory(virDomainPtr domain, unsigned long memory)
{
virConnectPtr conn;
+ DEBUG("domain=%p, memory=%lu", domain, memory);
if (domain == NULL) {
TODO
virDomainSetMemory(virDomainPtr domain, unsigned long memory)
{
virConnectPtr conn;
+ DEBUG("domain=%p, memory=%lu", domain, memory);
if (domain == NULL) {
TODO
virDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
{
virConnectPtr conn;
+ DEBUG("domain=%p, info=%p", domain, info);
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
virDomainGetXMLDesc(virDomainPtr domain, int flags)
{
virConnectPtr conn;
+ DEBUG("domain=%p, flags=%d", domain, flags);
if (!VIR_IS_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
int
virNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info)
{
+ DEBUG("conn=%p, info=%p", conn, info);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (-1);
char *
virConnectGetCapabilities (virConnectPtr conn)
{
+ DEBUG("conn=%p", conn);
+
if (!VIR_IS_CONNECT (conn)) {
virLibConnError (conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return NULL;
{
virConnectPtr conn;
char *schedtype;
+ DEBUG("domain=%p, nparams=%p", domain, nparams);
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
virSchedParameterPtr params, int *nparams)
{
virConnectPtr conn;
+ DEBUG("domain=%p, params=%p, nparams=%p", domain, params, nparams);
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
virSchedParameterPtr params, int nparams)
{
virConnectPtr conn;
+ DEBUG("domain=%p, params=%p, nparams=%d", domain, params, nparams);
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
*/
virDomainPtr
virDomainDefineXML(virConnectPtr conn, const char *xml) {
+ DEBUG("conn=%p, xml=%s", conn, xml);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (NULL);
int
virDomainUndefine(virDomainPtr domain) {
virConnectPtr conn;
+ DEBUG("domain=%p", domain);
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
int
virConnectNumOfDefinedDomains(virConnectPtr conn)
{
+ DEBUG("conn=%p", conn);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (-1);
int
virConnectListDefinedDomains(virConnectPtr conn, char **const names,
int maxnames) {
+ DEBUG("conn=%p, names=%p, maxnames=%d", conn, names, maxnames);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (-1);
int
virDomainCreate(virDomainPtr domain) {
virConnectPtr conn;
+ DEBUG("domain=%p", domain);
if (domain == NULL) {
TODO
int *autostart)
{
virConnectPtr conn;
+ DEBUG("domain=%p, autostart=%p", domain, autostart);
if (!VIR_IS_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
int autostart)
{
virConnectPtr conn;
+ DEBUG("domain=%p, autostart=%d", domain, autostart);
if (!VIR_IS_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
virDomainSetVcpus(virDomainPtr domain, unsigned int nvcpus)
{
virConnectPtr conn;
+ DEBUG("domain=%p, nvcpus=%u", domain, nvcpus);
if (domain == NULL) {
TODO
unsigned char *cpumap, int maplen)
{
virConnectPtr conn;
+ DEBUG("domain=%p, vcpu=%u, cpumap=%p, maplen=%d", domain, vcpu, cpumap, maplen);
if (domain == NULL) {
TODO
unsigned char *cpumaps, int maplen)
{
virConnectPtr conn;
+ DEBUG("domain=%p, info=%p, maxinfo=%d, cpumaps=%p, maplen=%d", domain, info, maxinfo, cpumaps, maplen);
if (domain == NULL) {
TODO
virDomainGetMaxVcpus(virDomainPtr domain)
{
virConnectPtr conn;
+ DEBUG("domain=%p", domain);
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
virDomainAttachDevice(virDomainPtr domain, char *xml)
{
virConnectPtr conn;
+ DEBUG("domain=%p, xml=%s", domain, xml);
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
virDomainDetachDevice(virDomainPtr domain, char *xml)
{
virConnectPtr conn;
+ DEBUG("domain=%p, xml=%s", domain, xml);
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
virConnectPtr
virNetworkGetConnect (virNetworkPtr net)
{
+ DEBUG("net=%p", net);
+
if (!VIR_IS_NETWORK (net)) {
virLibNetworkError (net, VIR_ERR_INVALID_NETWORK, __FUNCTION__);
return NULL;
int
virConnectNumOfNetworks(virConnectPtr conn)
{
+ DEBUG("conn=%p", conn);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (-1);
int
virConnectListNetworks(virConnectPtr conn, char **const names, int maxnames)
{
+ DEBUG("conn=%p, names=%p, maxnames=%d", conn, names, maxnames);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (-1);
int
virConnectNumOfDefinedNetworks(virConnectPtr conn)
{
+ DEBUG("conn=%p", conn);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (-1);
virConnectListDefinedNetworks(virConnectPtr conn, char **const names,
int maxnames)
{
+ DEBUG("conn=%p, names=%p, maxnames=%d", conn, names, maxnames);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (-1);
virNetworkPtr
virNetworkLookupByName(virConnectPtr conn, const char *name)
{
+ DEBUG("conn=%p, name=%s", conn, name);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (NULL);
virNetworkPtr
virNetworkLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
{
+ DEBUG("conn=%p, uuid=%s", conn, uuid);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (NULL);
int raw[VIR_UUID_BUFLEN], i;
unsigned char uuid[VIR_UUID_BUFLEN];
int ret;
+ DEBUG("conn=%p, uuidstr=%s", conn, uuidstr);
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
virNetworkPtr
virNetworkCreateXML(virConnectPtr conn, const char *xmlDesc)
{
+ DEBUG("conn=%p, xmlDesc=%s", conn, xmlDesc);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (NULL);
virNetworkPtr
virNetworkDefineXML(virConnectPtr conn, const char *xml)
{
+ DEBUG("conn=%p, xml=%s", conn, xml);
+
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (NULL);
int
virNetworkUndefine(virNetworkPtr network) {
virConnectPtr conn;
+ DEBUG("network=%p", network);
if (!VIR_IS_CONNECTED_NETWORK(network)) {
virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__);
virNetworkCreate(virNetworkPtr network)
{
virConnectPtr conn;
+ DEBUG("network=%p", network);
+
if (network == NULL) {
TODO
return (-1);
virNetworkDestroy(virNetworkPtr network)
{
virConnectPtr conn;
+ DEBUG("network=%p", network);
if (!VIR_IS_CONNECTED_NETWORK(network)) {
virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__);
int
virNetworkFree(virNetworkPtr network)
{
+ DEBUG("network=%p", network);
+
if (!VIR_IS_NETWORK(network)) {
virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__);
return (-1);
const char *
virNetworkGetName(virNetworkPtr network)
{
+ DEBUG("network=%p", network);
+
if (!VIR_IS_NETWORK(network)) {
virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__);
return (NULL);
int
virNetworkGetUUID(virNetworkPtr network, unsigned char *uuid)
{
+ DEBUG("network=%p, uuid=%p", network, uuid);
+
if (!VIR_IS_NETWORK(network)) {
virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__);
return (-1);
virNetworkGetUUIDString(virNetworkPtr network, char *buf)
{
unsigned char uuid[VIR_UUID_BUFLEN];
+ DEBUG("network=%p, buf=%p", network, buf);
if (!VIR_IS_NETWORK(network)) {
virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__);
virNetworkGetXMLDesc(virNetworkPtr network, int flags)
{
virConnectPtr conn;
+ DEBUG("network=%p, flags=%d", network, flags);
if (!VIR_IS_NETWORK(network)) {
virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__);
virNetworkGetBridgeName(virNetworkPtr network)
{
virConnectPtr conn;
+ DEBUG("network=%p", network);
if (!VIR_IS_NETWORK(network)) {
virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__);
int *autostart)
{
virConnectPtr conn;
+ DEBUG("network=%p, autostart=%p", network, autostart);
if (!VIR_IS_NETWORK(network)) {
virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__);
int autostart)
{
virConnectPtr conn;
+ DEBUG("network=%p, autostart=%d", network, autostart);
if (!VIR_IS_NETWORK(network)) {
virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__);