Also attached below is the output of virt-manager when this tracing is enabled.
Note that if --enable-debug is not set, then no extra code is added to libvirt.
Rich. -- Emerging Technologies, Red Hat - http://et.redhat.com/~rjones/ Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod Street, Windsor, Berkshire, SL4 1TE, United Kingdom. Registered in England and Wales under Company Registration No. 03798903
Index: src/libvirt.c =================================================================== RCS file: /data/cvs/libvirt/src/libvirt.c,v retrieving revision 1.87 diff -u -p -r1.87 libvirt.c --- src/libvirt.c 6 Jul 2007 15:20:38 -0000 1.87 +++ src/libvirt.c 11 Jul 2007 15:31:59 -0000 @@ -9,6 +9,7 @@ * Daniel Veillard <veillard@xxxxxxxxxx> */ +#include "config.h" #include "libvirt/libvirt.h" #include <stdio.h> @@ -44,6 +45,18 @@ static virStateDriverPtr virStateDriverT 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 DEBUG("") +#else +#define DEBUG0 +#define DEBUG(fs,...) +#endif /* !ENABLE_DEBUG */ + /** * virInitialize: * @@ -56,6 +69,7 @@ static int initialized = 0; int virInitialize(void) { + DEBUG0; if (initialized) return(0); initialized = 1; @@ -338,6 +352,7 @@ virGetVersion(unsigned long *libVer, con unsigned long *typeVer) { int i; + DEBUG("libVir=%p, type=%s, typeVer=%p", libVer, type, typeVer); if (!initialized) if (virInitialize() < 0) @@ -390,8 +405,23 @@ do_open (const char *name, int flags) 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]; @@ -443,6 +473,7 @@ failed: virConnectPtr virConnectOpen (const char *name) { + DEBUG("name=%s", name); return do_open (name, 0); } @@ -461,6 +492,7 @@ virConnectOpen (const char *name) virConnectPtr virConnectOpenReadOnly(const char *name) { + DEBUG("name=%s", name); return do_open (name, VIR_DRV_OPEN_RO); } @@ -478,6 +510,8 @@ virConnectOpenReadOnly(const char *name) int virConnectClose(virConnectPtr conn) { + DEBUG("conn=%p", conn); + if (!VIR_IS_CONNECT(conn)) return (-1); @@ -505,6 +539,7 @@ const char * virConnectGetType(virConnectPtr conn) { const char *ret; + DEBUG("conn=%p", conn); if (!VIR_IS_CONNECT(conn)) { virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__); @@ -534,6 +569,8 @@ virConnectGetType(virConnectPtr conn) 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); @@ -566,6 +603,8 @@ virConnectGetVersion(virConnectPtr conn, char * virConnectGetHostname (virConnectPtr conn) { + DEBUG("conn=%p", conn); + if (!VIR_IS_CONNECT(conn)) { virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__); return NULL; @@ -596,6 +635,8 @@ virConnectGetHostname (virConnectPtr con char * virConnectGetURI (virConnectPtr conn) { + DEBUG("conn=%p", conn); + if (!VIR_IS_CONNECT(conn)) { virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__); return NULL; @@ -623,6 +664,8 @@ int 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); @@ -648,6 +691,8 @@ virConnectGetMaxVcpus(virConnectPtr conn 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); @@ -676,6 +721,8 @@ virConnectListDomains(virConnectPtr conn int virConnectNumOfDomains(virConnectPtr conn) { + DEBUG("conn=%p", conn); + if (!VIR_IS_CONNECT(conn)) { virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__); return (-1); @@ -701,6 +748,8 @@ virConnectNumOfDomains(virConnectPtr con virConnectPtr virDomainGetConnect (virDomainPtr dom) { + DEBUG("dom=%p", dom); + if (!VIR_IS_DOMAIN (dom)) { virLibDomainError (dom, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); return NULL; @@ -724,6 +773,8 @@ virDomainPtr 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); @@ -758,6 +809,8 @@ virDomainCreateLinux(virConnectPtr conn, 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); @@ -787,6 +840,8 @@ virDomainLookupByID(virConnectPtr conn, 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); @@ -820,6 +875,8 @@ virDomainLookupByUUIDString(virConnectPt 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); @@ -866,6 +923,8 @@ virDomainLookupByUUIDString(virConnectPt 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); @@ -899,6 +958,8 @@ virDomainDestroy(virDomainPtr domain) { virConnectPtr conn; + DEBUG("domain=%p", domain); + if (!VIR_IS_CONNECTED_DOMAIN(domain)) { virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); return (-1); @@ -929,6 +990,8 @@ virDomainDestroy(virDomainPtr domain) int virDomainFree(virDomainPtr domain) { + DEBUG("domain=%p", domain); + if (!VIR_IS_DOMAIN(domain)) { virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); return (-1); @@ -954,6 +1017,7 @@ int virDomainSuspend(virDomainPtr domain) { virConnectPtr conn; + DEBUG("domain=%p", domain); if (!VIR_IS_CONNECTED_DOMAIN(domain)) { virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); @@ -987,6 +1051,7 @@ int virDomainResume(virDomainPtr domain) { virConnectPtr conn; + DEBUG("domain=%p", domain); if (!VIR_IS_CONNECTED_DOMAIN(domain)) { virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); @@ -1023,6 +1088,7 @@ virDomainSave(virDomainPtr domain, const { 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__); @@ -1078,6 +1144,7 @@ int 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__); @@ -1135,6 +1202,7 @@ virDomainCoreDump(virDomainPtr domain, c { 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__); @@ -1194,6 +1262,7 @@ int virDomainShutdown(virDomainPtr domain) { virConnectPtr conn; + DEBUG("domain=%p", domain); if (!VIR_IS_CONNECTED_DOMAIN(domain)) { virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); @@ -1228,6 +1297,7 @@ int 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__); @@ -1259,6 +1329,8 @@ virDomainReboot(virDomainPtr domain, uns const char * virDomainGetName(virDomainPtr domain) { + DEBUG("domain=%p", domain); + if (!VIR_IS_DOMAIN(domain)) { virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); return (NULL); @@ -1278,6 +1350,8 @@ virDomainGetName(virDomainPtr domain) 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); @@ -1325,6 +1399,7 @@ int 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__); @@ -1358,6 +1433,8 @@ virDomainGetUUIDString(virDomainPtr doma 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); @@ -1378,6 +1455,7 @@ char * virDomainGetOSType(virDomainPtr domain) { virConnectPtr conn; + DEBUG("domain=%p", domain); if (!VIR_IS_DOMAIN(domain)) { virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); @@ -1407,6 +1485,7 @@ unsigned long virDomainGetMaxMemory(virDomainPtr domain) { virConnectPtr conn; + DEBUG("domain=%p", domain); if (!VIR_IS_CONNECTED_DOMAIN(domain)) { virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); @@ -1438,6 +1517,7 @@ int virDomainSetMaxMemory(virDomainPtr domain, unsigned long memory) { virConnectPtr conn; + DEBUG("domain=%p, memory=%lu", domain, memory); if (domain == NULL) { TODO @@ -1480,6 +1560,7 @@ int virDomainSetMemory(virDomainPtr domain, unsigned long memory) { virConnectPtr conn; + DEBUG("domain=%p, memory=%lu", domain, memory); if (domain == NULL) { TODO @@ -1522,6 +1603,7 @@ int 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__); @@ -1558,6 +1640,7 @@ char * 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__); @@ -1589,6 +1672,8 @@ virDomainGetXMLDesc(virDomainPtr domain, 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); @@ -1618,6 +1703,8 @@ virNodeGetInfo(virConnectPtr conn, virNo char * virConnectGetCapabilities (virConnectPtr conn) { + DEBUG("conn=%p", conn); + if (!VIR_IS_CONNECT (conn)) { virLibConnError (conn, VIR_ERR_INVALID_CONN, __FUNCTION__); return NULL; @@ -1644,6 +1731,7 @@ virDomainGetSchedulerType(virDomainPtr d { virConnectPtr conn; char *schedtype; + DEBUG("domain=%p, nparams=%p", domain, nparams); if (!VIR_IS_CONNECTED_DOMAIN(domain)) { virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); @@ -1685,6 +1773,7 @@ virDomainGetSchedulerParameters(virDomai 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__); @@ -1721,6 +1810,7 @@ virDomainSetSchedulerParameters(virDomai 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__); @@ -1759,6 +1849,8 @@ virDomainSetSchedulerParameters(virDomai */ 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); @@ -1790,6 +1882,7 @@ virDomainDefineXML(virConnectPtr conn, c int virDomainUndefine(virDomainPtr domain) { virConnectPtr conn; + DEBUG("domain=%p", domain); if (!VIR_IS_CONNECTED_DOMAIN(domain)) { virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); @@ -1819,6 +1912,8 @@ virDomainUndefine(virDomainPtr domain) { int virConnectNumOfDefinedDomains(virConnectPtr conn) { + DEBUG("conn=%p", conn); + if (!VIR_IS_CONNECT(conn)) { virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__); return (-1); @@ -1844,6 +1939,8 @@ virConnectNumOfDefinedDomains(virConnect 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); @@ -1873,6 +1970,7 @@ virConnectListDefinedDomains(virConnectP int virDomainCreate(virDomainPtr domain) { virConnectPtr conn; + DEBUG("domain=%p", domain); if (domain == NULL) { TODO @@ -1911,6 +2009,7 @@ virDomainGetAutostart(virDomainPtr domai int *autostart) { virConnectPtr conn; + DEBUG("domain=%p, autostart=%p", domain, autostart); if (!VIR_IS_DOMAIN(domain)) { virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); @@ -1945,6 +2044,7 @@ virDomainSetAutostart(virDomainPtr domai int autostart) { virConnectPtr conn; + DEBUG("domain=%p, autostart=%d", domain, autostart); if (!VIR_IS_DOMAIN(domain)) { virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); @@ -1977,6 +2077,7 @@ int virDomainSetVcpus(virDomainPtr domain, unsigned int nvcpus) { virConnectPtr conn; + DEBUG("domain=%p, nvcpus=%u", domain, nvcpus); if (domain == NULL) { TODO @@ -2027,6 +2128,7 @@ virDomainPinVcpu(virDomainPtr domain, un unsigned char *cpumap, int maplen) { virConnectPtr conn; + DEBUG("domain=%p, vcpu=%u, cpumap=%p, maplen=%d", domain, vcpu, cpumap, maplen); if (domain == NULL) { TODO @@ -2081,6 +2183,7 @@ virDomainGetVcpus(virDomainPtr domain, v 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 @@ -2125,6 +2228,7 @@ int virDomainGetMaxVcpus(virDomainPtr domain) { virConnectPtr conn; + DEBUG("domain=%p", domain); if (!VIR_IS_CONNECTED_DOMAIN(domain)) { virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); @@ -2154,6 +2258,7 @@ int 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__); @@ -2185,6 +2290,7 @@ int 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__); @@ -2216,6 +2322,8 @@ virDomainDetachDevice(virDomainPtr domai virConnectPtr virNetworkGetConnect (virNetworkPtr net) { + DEBUG("net=%p", net); + if (!VIR_IS_NETWORK (net)) { virLibNetworkError (net, VIR_ERR_INVALID_NETWORK, __FUNCTION__); return NULL; @@ -2234,6 +2342,8 @@ virNetworkGetConnect (virNetworkPtr net) int virConnectNumOfNetworks(virConnectPtr conn) { + DEBUG("conn=%p", conn); + if (!VIR_IS_CONNECT(conn)) { virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__); return (-1); @@ -2259,6 +2369,8 @@ virConnectNumOfNetworks(virConnectPtr co 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); @@ -2287,6 +2399,8 @@ virConnectListNetworks(virConnectPtr con int virConnectNumOfDefinedNetworks(virConnectPtr conn) { + DEBUG("conn=%p", conn); + if (!VIR_IS_CONNECT(conn)) { virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__); return (-1); @@ -2313,6 +2427,8 @@ int 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); @@ -2344,6 +2460,8 @@ virConnectListDefinedNetworks(virConnect 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); @@ -2373,6 +2491,8 @@ virNetworkLookupByName(virConnectPtr con 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); @@ -2405,6 +2525,7 @@ virNetworkLookupByUUIDString(virConnectP 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__); @@ -2452,6 +2573,8 @@ virNetworkLookupByUUIDString(virConnectP 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); @@ -2484,6 +2607,8 @@ virNetworkCreateXML(virConnectPtr conn, 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); @@ -2515,6 +2640,7 @@ virNetworkDefineXML(virConnectPtr conn, int virNetworkUndefine(virNetworkPtr network) { virConnectPtr conn; + DEBUG("network=%p", network); if (!VIR_IS_CONNECTED_NETWORK(network)) { virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__); @@ -2546,6 +2672,8 @@ int virNetworkCreate(virNetworkPtr network) { virConnectPtr conn; + DEBUG("network=%p", network); + if (network == NULL) { TODO return (-1); @@ -2583,6 +2711,7 @@ int virNetworkDestroy(virNetworkPtr network) { virConnectPtr conn; + DEBUG("network=%p", network); if (!VIR_IS_CONNECTED_NETWORK(network)) { virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__); @@ -2614,6 +2743,8 @@ virNetworkDestroy(virNetworkPtr network) int virNetworkFree(virNetworkPtr network) { + DEBUG("network=%p", network); + if (!VIR_IS_NETWORK(network)) { virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__); return (-1); @@ -2635,6 +2766,8 @@ virNetworkFree(virNetworkPtr network) const char * virNetworkGetName(virNetworkPtr network) { + DEBUG("network=%p", network); + if (!VIR_IS_NETWORK(network)) { virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__); return (NULL); @@ -2654,6 +2787,8 @@ virNetworkGetName(virNetworkPtr network) 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); @@ -2682,6 +2817,7 @@ int 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__); @@ -2719,6 +2855,7 @@ char * 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__); @@ -2752,6 +2889,7 @@ char * virNetworkGetBridgeName(virNetworkPtr network) { virConnectPtr conn; + DEBUG("network=%p", network); if (!VIR_IS_NETWORK(network)) { virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__); @@ -2783,6 +2921,7 @@ virNetworkGetAutostart(virNetworkPtr net int *autostart) { virConnectPtr conn; + DEBUG("network=%p, autostart=%p", network, autostart); if (!VIR_IS_NETWORK(network)) { virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__); @@ -2817,6 +2956,7 @@ virNetworkSetAutostart(virNetworkPtr net int autostart) { virConnectPtr conn; + DEBUG("network=%p, autostart=%d", network, autostart); if (!VIR_IS_NETWORK(network)) { virLibNetworkError(network, VIR_ERR_INVALID_NETWORK, __FUNCTION__); Index: src/xen_unified.c =================================================================== RCS file: /data/cvs/libvirt/src/xen_unified.c,v retrieving revision 1.16 diff -u -p -r1.16 xen_unified.c --- src/xen_unified.c 6 Jul 2007 15:11:22 -0000 1.16 +++ src/xen_unified.c 11 Jul 2007 15:32:00 -0000 @@ -148,9 +148,17 @@ xenUnifiedOpen (virConnectPtr conn, cons if (i == XEN_UNIFIED_PROXY_OFFSET && getuid() == 0) continue; - if (drivers[i]->open && - drivers[i]->open (conn, name, flags) == VIR_DRV_OPEN_SUCCESS) - priv->opened[i] = 1; + if (drivers[i]->open) { +#ifdef ENABLE_DEBUG + fprintf (stderr, "libvirt: xenUnifiedOpen: trying Xen sub-driver %d\n", i); +#endif + if (drivers[i]->open (conn, name, flags) == VIR_DRV_OPEN_SUCCESS) + priv->opened[i] = 1; +#ifdef ENABLE_DEBUG + fprintf (stderr, "libvirt: xenUnifiedOpen: Xen sub-driver %d open %s\n", + i, priv->opened[i] ? "ok" : "failed"); +#endif + } /* If as root, then all drivers must succeed. If non-root, then only proxy must succeed */
libvirt: virInitialize () libvirt: virInitialize () libvirt: virInitialize () libvirt: virInitialize () libvirt: virInitialize () libvirt: virInitialize () libvirt: virInitialize () libvirt: virInitialize () libvirt: virConnectOpen (name=xen) libvirt: do_open: proceeding with name=xen:/// libvirt: do_open: trying driver 0 (Test) ... libvirt: do_open: driver 0 returned DECLINED libvirt: do_open: trying driver 1 (QEMU) ... libvirt: do_open: driver 1 returned DECLINED libvirt: do_open: trying driver 2 (Xen) ... libvirt: do_open: driver 2 returned SUCCESS libvir: Remote error : No such file or directory libvir: warning : Failed to find the network: Is the daemon running ? libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c510, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virDomainLookupByID (conn=0x1052760, id=0) libvirt: virDomainGetUUID (domain=0x104c660, uuid=0x7fff3a55ccd0) libvirt: virDomainLookupByID (conn=0x1052760, id=12) libvirt: virDomainGetUUID (domain=0x105a510, uuid=0x7fff3a55ccd0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c400) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c400) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55cca0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55cad0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55cad0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetName (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetName (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectGetType (conn=0x1052760) libvirt: virConnectGetType (conn=0x1052760) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainSuspend (domain=0x105a510) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55bab0) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainResume (domain=0x105a510) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55bab0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510)
Attachment:
smime.p7s
Description: S/MIME Cryptographic Signature
-- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list