This patch adds full support for dlopen()'ing of individual drivers. - configure.in gains a new command line flag --with-driver-modules. It defaults to off, producing a monolithic build. If enabled, it checks dlopen() in -ldl and dlfcn.h - src/Makefile.am if the WITH_DRIVER_MODULES conditional is defined, then instead of building each driver as a libtool convenience library and linking them into libvirt.la , they are instead build as libtool modules, and installed to $PREFIX/lib/libvirt/drivers/ - qemud/Makefile.am if the WITH_DRIVER_MODULES conditional is defined then don't link to the libtool convenience library for qemu/lxc/etc - libvirt_sym.version.in: Since we're loading drivers at runtime, we need to export more of our internal symbols. We'd already exported the vast majority in the previous patch to enable libvirtd to link to lxc, qemu, storage & network drivers. This just adds the few more used by the xen, remote & test drivers. - Renames qemudRegister() to qemuRegister() and xenUnifiedRegister() to just xenRegister(), so the prefix matches the module name - driver.c adds a virDriverLoadModule() method which given a module name like 'qemu', loads a file libvirt_driver_$NAME.so and runs the symbols ${NAME}Register(). It looks in $PREFIX/lib/libvirt/drivers/ by default, but can be override with LIBVIRT_DRIVER_DIR env variable eg, point it to $SOURCETREE/src/.libs to run against a non-installed libvirt build. - libvirt.c/qemud.c, if WITH_DRIVER_MODULES is defined, then instead of calling the XXXRegister() methods directly, call virDriverLoadModule() for each module So, as an example, having built with --enable-driver-modules, you can run the daemon directly from source tree with # LIBVIRT_DRIVER_DIR=`pwd`/src/.libs LIBVIRT_DEBUG=1 ./qemud/libvirtd DEBUG: libvirt.c: virInitialize (register drivers) DEBUG: libvirt.c: virRegisterDriver (registering Test as driver 0) DEBUG: libvirt.c: virRegisterNetworkDriver (registering Test as network driver 0) DEBUG: libvirt.c: virRegisterStorageDriver (registering Test as storage driver 0) DEBUG: libvirt.c: virRegisterDriver (registering Xen as driver 1) DEBUG: libvirt.c: virRegisterDriver (registering OPENVZ as driver 2) DEBUG: libvirt.c: virRegisterDriver (registering remote as driver 3) DEBUG: libvirt.c: virRegisterNetworkDriver (registering remote as network driver 1) DEBUG: libvirt.c: virRegisterStorageDriver (registering remote as storage driver 1) DEBUG: libvirt.c: virRegisterDriver (registering QEMU as driver 4) DEBUG: libvirt.c: virRegisterDriver (registering LXC as driver 5) DEBUG: libvirt.c: virRegisterNetworkDriver (registering Network as network driver 2) DEBUG: libvirt.c: virRegisterStorageDriver (registering storage as storage driver 2) And run virsh directly from source tree with $ LIBVIRT_DEBUG=1 LIBVIRT_DRIVER_DIR=`pwd`/.libs ./virsh --readonly --connect qemu:///system DEBUG: libvirt.c: virInitialize (register drivers) DEBUG: libvirt.c: virRegisterDriver (registering Test as driver 0) DEBUG: libvirt.c: virRegisterNetworkDriver (registering Test as network driver 0) DEBUG: libvirt.c: virRegisterStorageDriver (registering Test as storage driver 0) DEBUG: libvirt.c: virRegisterDriver (registering Xen as driver 1) DEBUG: libvirt.c: virRegisterDriver (registering OPENVZ as driver 2) DEBUG: libvirt.c: virRegisterDriver (registering remote as driver 3) DEBUG: libvirt.c: virRegisterNetworkDriver (registering remote as network driver 1) DEBUG: libvirt.c: virRegisterStorageDriver (registering remote as storage driver 1) DEBUG: libvirt.c: virConnectOpenAuth (name=qemu:///system, auth=0x3945e0, flags=1) DEBUG: libvirt.c: do_open (name "qemu:///system" to URI components: scheme qemu opaque (null) authority (null) server (null) user (null) port 0 path /system ) DEBUG: libvirt.c: do_open (trying driver 0 (Test) ...) DEBUG: libvirt.c: do_open (driver 0 Test returned DECLINED) DEBUG: libvirt.c: do_open (trying driver 1 (Xen) ...) DEBUG: libvirt.c: do_open (driver 1 Xen returned DECLINED) DEBUG: libvirt.c: do_open (trying driver 2 (OPENVZ) ...) DEBUG: libvirt.c: do_open (driver 2 OPENVZ returned DECLINED) DEBUG: libvirt.c: do_open (trying driver 3 (remote) ...) DEBUG: remote_internal.c: doRemoteOpen (proceeding with name = qemu:///system) DEBUG: remote_internal.c: doRemoteOpen (Adding Handler for remote events) DEBUG: remote_internal.c: doRemoteOpen (virEventAddHandle failed: No addHandleImpl defined. continuing without events.) DEBUG: libvirt.c: do_open (driver 3 remote returned SUCCESS) DEBUG: libvirt.c: do_open (network driver 0 Test returned DECLINED) DEBUG: libvirt.c: do_open (network driver 1 remote returned SUCCESS) DEBUG: libvirt.c: do_open (storage driver 0 Test returned DECLINED) DEBUG: libvirt.c: do_open (storage driver 1 remote returned SUCCESS) Welcome to lt-virsh, the virtualization interactive terminal. Type: 'help' for help with commands 'quit' to quit virsh > That said, if you commonly run stuff directly from the source tree, you're better off not building with modules, so you don't need to remember to set the module path. b/src/driver.c | 87 +++++++++++++++++++++++++++++++++++++++++++++ configure.in | 40 ++++++++++++++++++++ qemud/Makefile.am | 2 + qemud/qemud.c | 18 ++++++++- src/Makefile.am | 65 ++++++++++++++++++++++++++++++++- src/driver.h | 2 + src/libvirt.c | 22 ++++++++++- src/libvirt_sym.version.in | 74 +++++++++++++++++++++++++++++++++++++- src/qemu_driver.c | 2 - src/qemu_driver.h | 2 - src/xen_unified.c | 4 +- src/xen_unified.h | 2 - tests/Makefile.am | 8 ++-- 13 files changed, 314 insertions(+), 14 deletions(-) Daniel diff -r 3af981530f52 configure.in --- a/configure.in Thu Oct 30 11:04:28 2008 +0000 +++ b/configure.in Thu Oct 30 12:09:07 2008 +0000 @@ -1055,6 +1055,38 @@ AC_CHECK_TOOL([WINDRES], [windres], [no]) AM_CONDITIONAL([WITH_WIN_ICON], [test "$WINDRES" != "no"]) + + +dnl Driver-Modules library +AC_ARG_WITH([driver-modules], + [ --with-driver-modules build drivers as loadable modules], + [], + [with_driver_modules=no]) + +DRIVER_MODULES_CFLAGS= +DRIVER_MODULES_LIBS= +if test "x$with_driver_modules" = "xyes" ; then + old_cflags="$CFLAGS" + old_libs="$LIBS" + fail=0 + AC_CHECK_HEADER([dlfcn.h],[],[fail=1]) + AC_CHECK_LIB([dl], [dlopen],[],[fail=1]) + test $fail = 1 && + AC_MSG_ERROR([You must have dlfcn.h / dlopen() support to build driver modules]) + + CFLAGS="$old_cflags" + LIBS="$old_libs" +fi +if test "$with_driver_modules" = "yes"; then + DRIVER_MODULES_CFLAGS="-export-dynamic" + DRIVER_MODULES_LIBS="-ldl" + AC_DEFINE_UNQUOTED([WITH_DRIVER_MODULES], 1, [whether to build drivers as modules]) +fi +AM_CONDITIONAL([WITH_DRIVER_MODULES], [test "$with_driver_modules" != "no"]) +AC_SUBST([DRIVER_MODULES_CFLAGS]) +AC_SUBST([DRIVER_MODULES_LIBS]) + + # Set LV_LIBTOOL_OBJDIR to "." or $lt_cv_objdir, depending on whether # we're building shared libraries. This is the name of the directory # in which .o files will be created. @@ -1110,6 +1142,14 @@ AC_MSG_NOTICE([ iSCSI: $with_storage_iscsi]) AC_MSG_NOTICE([ Disk: $with_storage_disk]) AC_MSG_NOTICE([]) +AC_MSG_NOTICE([Driver Loadable Modules]) +AC_MSG_NOTICE([]) +if test "$with_driver_modules" != "no" ; then +AC_MSG_NOTICE([ dlopen: $DRIVER_MODULES_CFLAGS $DRIVER_MODULES_LIBS]) +else +AC_MSG_NOTICE([ dlopen: no]) +fi +AC_MSG_NOTICE([]) AC_MSG_NOTICE([Libraries]) AC_MSG_NOTICE([]) AC_MSG_NOTICE([ libxml: $LIBXML_CFLAGS $LIBXML_LIBS]) diff -r 3af981530f52 qemud/Makefile.am --- a/qemud/Makefile.am Thu Oct 30 11:04:28 2008 +0000 +++ b/qemud/Makefile.am Thu Oct 30 12:09:07 2008 +0000 @@ -92,6 +92,7 @@ ../gnulib/lib/libgnu.la \ ../src/libvirt.la +if ! WITH_DRIVER_MODULES if WITH_QEMU libvirtd_LDADD += ../src/libvirt_driver_qemu.la endif @@ -106,6 +107,7 @@ if WITH_NETWORK libvirtd_LDADD += ../src/libvirt_driver_network.la +endif endif if HAVE_POLKIT diff -r 3af981530f52 qemud/qemud.c --- a/qemud/qemud.c Thu Oct 30 11:04:28 2008 +0000 +++ b/qemud/qemud.c Thu Oct 30 12:09:07 2008 +0000 @@ -61,6 +61,9 @@ #include "mdns.h" #endif +#ifdef WITH_DRIVER_MODULES +#include "driver.h" +#else #ifdef WITH_QEMU #include "qemu_driver.h" #endif @@ -72,6 +75,7 @@ #endif #ifdef WITH_STORAGE_DIR #include "storage_driver.h" +#endif #endif @@ -744,8 +748,19 @@ virInitialize(); +#ifdef WITH_DRIVER_MODULES + /* We don't care if any of these fail, because the whole point + * is to allow users to only install modules they want to use. + * If they try to use a open a connection for a module that + * is not loaded they'll get a suitable error at that point + */ + virDriverLoadModule("qemu"); + virDriverLoadModule("lxc"); + virDriverLoadModule("network"); + virDriverLoadModule("storage"); +#else #ifdef WITH_QEMU - qemudRegister(); + qemuRegister(); #endif #ifdef WITH_LXC lxcRegister(); @@ -755,6 +770,7 @@ #endif #ifdef WITH_STORAGE_DIR storageRegister(); +#endif #endif virEventRegisterImpl(virEventAddHandleImpl, diff -r 3af981530f52 src/Makefile.am --- a/src/Makefile.am Thu Oct 30 11:04:28 2008 +0000 +++ b/src/Makefile.am Thu Oct 30 12:09:07 2008 +0000 @@ -6,7 +6,10 @@ -I@top_srcdir@/include \ -I@top_srcdir@/qemud \ $(LIBXML_CFLAGS) \ + $(XEN_CFLAGS) \ $(SELINUX_CFLAGS) \ + $(DRIVER_MODULE_CFLAGS) \ + -DLIBDIR=\""$(libdir)"\" \ -DBINDIR=\""$(libexecdir)"\" \ -DSBINDIR=\""$(sbindir)"\" \ -DSYSCONF_DIR="\"$(sysconfdir)\"" \ @@ -30,6 +33,10 @@ lib_LTLIBRARIES = libvirt.la +moddir = $(libdir)/libvirt/drivers +mod_LTLIBRARIES = + + # These files are not related to driver APIs. Simply generic # helper APIs for various purposes UTIL_SOURCES = \ @@ -48,7 +55,7 @@ # Internal generic driver infrastructure DRIVER_SOURCES = \ - driver.h \ + driver.c driver.h \ internal.h \ datatypes.c datatypes.h \ domain_event.c domain_event.h \ @@ -162,67 +169,120 @@ $(STORAGE_CONF_SOURCES) if WITH_TEST +if WITH_DRIVER_MODULES +mod_LTLIBRARIES += libvirt_driver_test.la +else noinst_LTLIBRARIES += libvirt_driver_test.la libvirt_la_LIBADD += libvirt_driver_test.la +endif libvirt_driver_test_la_SOURCES = $(TEST_DRIVER_SOURCES) endif if WITH_REMOTE +if WITH_DRIVER_MODULES +mod_LTLIBRARIES += libvirt_driver_remote.la +else noinst_LTLIBRARIES += libvirt_driver_remote.la libvirt_la_LIBADD += libvirt_driver_remote.la +endif libvirt_driver_remote_la_CFLAGS = \ $(GNUTLS_CFLAGS) \ $(SASL_CFLAGS) libvirt_driver_remote_la_LDFLAGS = \ $(GNUTLS_LIBS) \ $(SASL_LIBS) +if WITH_DRIVER_MODULES +libvirt_driver_remote_la_LDFLAGS += -module -avoid-version +endif libvirt_driver_remote_la_SOURCES = $(REMOTE_DRIVER_SOURCES) endif if WITH_XEN +if WITH_DRIVER_MODULES +mod_LTLIBRARIES += libvirt_driver_xen.la +else noinst_LTLIBRARIES += libvirt_driver_xen.la libvirt_la_LIBADD += libvirt_driver_xen.la +endif libvirt_driver_xen_la_CFLAGS = $(XEN_CFLAGS) libvirt_driver_xen_la_LDFLAGS = $(XEN_LIBS) +if WITH_DRIVER_MODULES +libvirt_driver_xen_la_LDFLAGS += -module -avoid-version +endif libvirt_driver_xen_la_SOURCES = $(XEN_DRIVER_SOURCES) endif if WITH_OPENVZ +if WITH_DRIVER_MODULES +mod_LTLIBRARIES += libvirt_driver_openvz.la +else noinst_LTLIBRARIES += libvirt_driver_openvz.la libvirt_la_LIBADD += libvirt_driver_openvz.la +endif +if WITH_DRIVER_MODULES +libvirt_driver_openvz_la_LDFLAGS = -module -avoid-version +endif libvirt_driver_openvz_la_SOURCES = $(OPENVZ_DRIVER_SOURCES) endif if WITH_QEMU +if WITH_DRIVER_MODULES +mod_LTLIBRARIES += libvirt_driver_qemu.la +else noinst_LTLIBRARIES += libvirt_driver_qemu.la # Stateful, so linked to daemon instead #libvirt_la_LIBADD += libvirt_driver_qemu.la +endif libvirt_driver_qemu_la_CFLAGS = $(NUMACTL_CFLAGS) libvirt_driver_qemu_la_LDFLAGS = $(NUMACTL_LIBS) +if WITH_DRIVER_MODULES +libvirt_driver_qemu_la_LDFLAGS += -module -avoid-version +endif libvirt_driver_qemu_la_SOURCES = $(QEMU_DRIVER_SOURCES) endif if WITH_LXC +if WITH_DRIVER_MODULES +mod_LTLIBRARIES += libvirt_driver_lxc.la +else noinst_LTLIBRARIES += libvirt_driver_lxc.la # Stateful, so linked to daemon instead #libvirt_la_LIBADD += libvirt_driver_lxc.la +endif +if WITH_DRIVER_MODULES +libvirt_driver_lxc_la_LDFLAGS = -module -avoid-version +endif libvirt_driver_lxc_la_SOURCES = $(LXC_DRIVER_SOURCES) endif if WITH_NETWORK +if WITH_DRIVER_MODULES +mod_LTLIBRARIES += libvirt_driver_network.la +else noinst_LTLIBRARIES += libvirt_driver_network.la # Stateful, so linked to daemon instead #libvirt_la_LIBADD += libvirt_driver_network.la +endif +if WITH_DRIVER_MODULES +libvirt_driver_network_la_LDFLAGS = -module -avoid-version +endif libvirt_driver_network_la_SOURCES = $(NETWORK_DRIVER_SOURCES) endif # Needed to keep automake quiet about conditionals libvirt_driver_storage_la_SOURCES = if WITH_STORAGE_DIR +if WITH_DRIVER_MODULES +mod_LTLIBRARIES += libvirt_driver_storage.la +else noinst_LTLIBRARIES += libvirt_driver_storage.la # Stateful, so linked to daemon instead #libvirt_la_LIBADD += libvirt_driver_storage.la +endif +if WITH_DRIVER_MODULES +libvirt_driver_storage_la_LDFLAGS = -module -avoid-version +endif libvirt_driver_storage_la_SOURCES += $(STORAGE_DRIVER_SOURCES) libvirt_driver_storage_la_SOURCES += $(STORAGE_DRIVER_FS_SOURCES) endif @@ -257,7 +317,8 @@ # Empty source list - it merely links a bunch of convenience libs together libvirt_la_SOURCES = -libvirt_la_LIBADD += $(LIBXML_LIBS) $(SELINUX_LIBS) \ +libvirt_la_LIBADD += $(LIBXML_LIBS) $(XEN_LIBS) $(SELINUX_LIBS) \ + $(DRIVER_MODULE_LIBS) \ @CYGWIN_EXTRA_LIBADD@ ../gnulib/lib/libgnu.la libvirt_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libvirt_sym.version \ -version-info @LIBVIRT_VERSION_INFO@ \ diff -r 3af981530f52 src/driver.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/driver.c Thu Oct 30 12:09:07 2008 +0000 @@ -0,0 +1,87 @@ +/* + * driver.c: Helpers for loading drivers + * + * Copyright (C) 2006-2008 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + + +#include <config.h> + +#include <unistd.h> + +#include "driver.h" +#include "memory.h" + +#define DEFAULT_DRIVER_DIR LIBDIR "/libvirt/drivers" + +#ifdef WITH_DRIVER_MODULES + +/* XXX re-implment this for other OS, or use libtools helper lib ? */ + +#include <dlfcn.h> + +void * +virDriverLoadModule(const char *name) +{ + const char *moddir = getenv("LIBVIRT_DRIVER_DIR"); + char *modfile, *regfunc; + void *handle; + int (*regsym)(void); + + if (moddir == NULL) + moddir = DEFAULT_DRIVER_DIR; + + if (asprintf(&modfile, "%s/libvirt_driver_%s.so", moddir, name) < 0) + return NULL; + + if (access(modfile, R_OK) < 0) { + VIR_FREE(modfile); + return NULL; + } + + handle = dlopen(modfile, RTLD_NOW | RTLD_LOCAL); + VIR_FREE(modfile); + if (!handle) { + fprintf(stderr, "failed to load module %s\n", dlerror()); + return NULL; + } + + if (asprintf(®func, "%sRegister", name) < 0) { + dlclose(handle); + return NULL; + } + + regsym = dlsym(handle, regfunc); + VIR_FREE(regfunc); + if (!regsym) { + dlclose(handle); + return NULL; + } + + if ((*regsym)() < 0) { + dlclose(handle); + return NULL; + } + + return handle; +} + + +/* XXX unload modules, but we can't until we can unregister libvirt drivers */ + +#endif diff -r 3af981530f52 src/driver.h --- a/src/driver.h Thu Oct 30 11:04:28 2008 +0000 +++ b/src/driver.h Thu Oct 30 12:09:07 2008 +0000 @@ -8,6 +8,7 @@ #include <libxml/uri.h> +#include "internal.h" /* * List of registered drivers numbers */ @@ -618,5 +619,6 @@ #ifdef WITH_LIBVIRTD int virRegisterStateDriver(virStateDriverPtr); #endif +void *virDriverLoadModule(const char *name); #endif /* __VIR_DRIVER_H__ */ diff -r 3af981530f52 src/libvirt.c --- a/src/libvirt.c Thu Oct 30 11:04:28 2008 +0000 +++ b/src/libvirt.c Thu Oct 30 12:09:07 2008 +0000 @@ -40,6 +40,7 @@ #include "util.h" #include "memory.h" +#ifndef WITH_DRIVER_MODULES #ifdef WITH_TEST #include "test.h" #endif @@ -51,6 +52,7 @@ #endif #ifdef WITH_OPENVZ #include "openvz_driver.h" +#endif #endif /* @@ -273,11 +275,22 @@ * Note that the order is important: the first ones have a higher * priority when calling virConnectOpen. */ +#ifdef WITH_DRIVER_MODULES + /* We don't care if any of these fail, because the whole point + * is to allow users to only install modules they want to use. + * If they try to use a open a connection for a module that + * is not loaded they'll get a suitable error at that point + */ + virDriverLoadModule("test"); + virDriverLoadModule("xen"); + virDriverLoadModule("openvz"); + virDriverLoadModule("remote"); +#else #ifdef WITH_TEST if (testRegister() == -1) return -1; #endif #ifdef WITH_XEN - if (xenUnifiedRegister () == -1) return -1; + if (xenRegister () == -1) return -1; #endif #ifdef WITH_OPENVZ if (openvzRegister() == -1) return -1; @@ -285,6 +298,7 @@ #ifdef WITH_REMOTE if (remoteRegister () == -1) return -1; #endif +#endif return(0); } @@ -461,6 +475,9 @@ return(-1); } + DEBUG ("registering %s as network driver %d", + driver->name, virNetworkDriverTabCount); + virNetworkDriverTab[virNetworkDriverTabCount] = driver; return virNetworkDriverTabCount++; } @@ -488,6 +505,9 @@ virLibConnError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__); return(-1); } + + DEBUG ("registering %s as storage driver %d", + driver->name, virStorageDriverTabCount); virStorageDriverTab[virStorageDriverTabCount] = driver; return virStorageDriverTabCount++; diff -r 3af981530f52 src/libvirt_sym.version.in --- a/src/libvirt_sym.version.in Thu Oct 30 11:04:28 2008 +0000 +++ b/src/libvirt_sym.version.in Thu Oct 30 12:09:07 2008 +0000 @@ -283,8 +283,12 @@ virCapabilitiesAddGuest; virCapabilitiesAddGuestDomain; virCapabilitiesAddGuestFeature; + virCapabilitiesAddHostMigrateTransport; virCapabilitiesAddHostNUMACell; + virCapabilitiesAddHostFeature; + virCapabilitiesDefaultGuestArch; virCapabilitiesDefaultGuestEmulator; + virCapabilitiesDefaultGuestMachine; virCapabilitiesFormatXML; virCapabilitiesFree; virCapabilitiesNew; @@ -296,6 +300,7 @@ virConfReadFile; virConfReadMem; virConfFree; + virConfFreeValue; virConfGetValue; virConfSetValue; virConfWriteFile; @@ -307,6 +312,7 @@ virGetNetwork; virGetStoragePool; virGetStorageVol; + virUnrefDomain; /* domain_conf.h */ @@ -314,14 +320,22 @@ virDiskNameToIndex; virDomainAssignDef; virDomainConfigFile; + virDomainCpuSetFormat; + virDomainCpuSetParse; + virDomainChrDefFree; + virDomainChrTypeFromString; + virDomainChrTypeToString; virDomainDefDefaultEmulator; virDomainDefFormat; virDomainDefFree; virDomainDefParseFile; + virDomainDefParseNode; virDomainDefParseString; virDomainDeleteConfig; + virDomainDeviceDefFree; virDomainDeviceDefParse; virDomainDiskBusTypeToString; + virDomainDiskDefFree; virDomainDiskDeviceTypeToString; virDomainDiskQSort; virDomainEventCallbackListAdd; @@ -330,12 +344,52 @@ virDomainFindByID; virDomainFindByName; virDomainFindByUUID; + virDomainGraphicsTypeFromString; + virDomainGraphicsDefFree; + virDomainInputDefFree; + virDomainLifecycleTypeFromString; + virDomainLifecycleTypeToString; virDomainLoadAllConfigs; + virDomainNetDefFree; + virDomainObjFree; virDomainObjListFree; virDomainRemoveInactive; virDomainSaveConfig; + virDomainSoundDefFree; + virDomainSoundModelTypeFromString; virDomainSoundModelTypeToString; virDomainVirtTypeToString; + + + /* domain_event.h */ + virDomainEventQueueFree; + virDomainEventCallbackQueuePop; + virDomainEventCallbackQueuePush; + + + /* driver.h */ + virDriverLoadModule; + + + /* event.h */ + virEventAddHandle; + virEventAddTimeout; + virEventRemoveHandle; + virEventRemoveTimeout; + virEventUpdateHandle; + virEventUpdateTimeout; + + + /* hash.h */ + virHashAddEntry; + virHashCreate; + virHashForEach; + virHashFree; + virHashLookup; + virHashRemoveEntry; + virHashRemoveSet; + virHashSearch; + virHashSize; /* iptables.h */ @@ -391,12 +445,15 @@ virNetworkAssignDef; virNetworkDefFormat; virNetworkDefFree; + virNetworkDefParseFile; + virNetworkDefParseNode; virNetworkDefParseString; virNetworkDeleteConfig; virNetworkFindByName; virNetworkFindByUUID; virNetworkLoadAllConfigs; virNetworkObjListFree; + virNetworkDefParseNode; virNetworkRemoveInactive; virNetworkSaveConfig; @@ -405,8 +462,15 @@ virNodeInfoPopulate; + /* qparams.h */ + qparam_get_query; + qparam_query_parse; + free_qparam_set; + + /* stats_linux.h */ linuxDomainInterfaceStats; + xenLinuxDomainBlockStats; /* storage_backend.h */ @@ -465,20 +529,28 @@ virFileOpenTty; virFileReadLimFD; virFileReadPid; + virParseNumber; virRun; + virSkipSpaces; /* uuid.h */ virUUIDFormat; + virUUIDGenerate; + virUUIDParse; /* virterror_internal.h */ + virRaiseError; virReportErrorHelper; + virErrorMsg; /* xml.h */ + virXPathLong; + virXPathNodeSet; virXPathString; - + virXMLPropString; /* Finally everything else is totally private */ local: diff -r 3af981530f52 src/qemu_driver.c --- a/src/qemu_driver.c Thu Oct 30 11:04:28 2008 +0000 +++ b/src/qemu_driver.c Thu Oct 30 12:09:07 2008 +0000 @@ -3312,7 +3312,7 @@ .active = qemudActive, }; -int qemudRegister(void) { +int qemuRegister(void) { virRegisterDriver(&qemuDriver); virRegisterStateDriver(&qemuStateDriver); return 0; diff -r 3af981530f52 src/qemu_driver.h --- a/src/qemu_driver.h Thu Oct 30 11:04:28 2008 +0000 +++ b/src/qemu_driver.h Thu Oct 30 12:09:07 2008 +0000 @@ -47,6 +47,6 @@ # define KVM_CAP_NR_VCPUS 9 /* returns max vcpus per vm */ #endif -int qemudRegister(void); +int qemuRegister(void); #endif /* QEMUD_DRIVER_H */ diff -r 3af981530f52 src/xen_unified.c --- a/src/xen_unified.c Thu Oct 30 11:04:28 2008 +0000 +++ b/src/xen_unified.c Thu Oct 30 12:09:07 2008 +0000 @@ -1348,14 +1348,14 @@ }; /** - * xenUnifiedRegister: + * xenRegister: * * Register xen related drivers * * Returns the driver priority or -1 in case of error. */ int -xenUnifiedRegister (void) +xenRegister (void) { /* Ignore failures here. */ (void) xenHypervisorInit (); diff -r 3af981530f52 src/xen_unified.h --- a/src/xen_unified.h Thu Oct 30 11:04:28 2008 +0000 +++ b/src/xen_unified.h Thu Oct 30 12:09:07 2008 +0000 @@ -22,7 +22,7 @@ #include <winsock2.h> #endif -extern int xenUnifiedRegister (void); +extern int xenRegister (void); #define XEN_UNIFIED_HYPERVISOR_OFFSET 0 #define XEN_UNIFIED_PROXY_OFFSET 1 diff -r 3af981530f52 tests/Makefile.am --- a/tests/Makefile.am Thu Oct 30 11:04:28 2008 +0000 +++ b/tests/Makefile.am Thu Oct 30 12:09:07 2008 +0000 @@ -92,17 +92,17 @@ xml2sexprtest_SOURCES = \ xml2sexprtest.c testutilsxen.c testutilsxen.h \ testutils.c testutils.h -xml2sexprtest_LDADD = $(LDADDS) +xml2sexprtest_LDADD = ../src/libvirt_driver_xen.la $(LDADDS) sexpr2xmltest_SOURCES = \ sexpr2xmltest.c \ testutils.c testutils.h -sexpr2xmltest_LDADD = $(LDADDS) +sexpr2xmltest_LDADD = ../src/libvirt_driver_xen.la $(LDADDS) xmconfigtest_SOURCES = \ xmconfigtest.c testutilsxen.c testutilsxen.h \ testutils.c testutils.h -xmconfigtest_LDADD = $(LDADDS) +xmconfigtest_LDADD = ../src/libvirt_driver_xen.la $(LDADDS) qemuxml2argvtest_SOURCES = \ qemuxml2argvtest.c testutilsqemu.c testutilsqemu.h \ @@ -125,7 +125,7 @@ xencapstest_SOURCES = \ xencapstest.c testutils.h testutils.c -xencapstest_LDADD = $(LDADDS) +xencapstest_LDADD = ../src/libvirt_driver_xen.la $(LDADDS) nodeinfotest_SOURCES = \ nodeinfotest.c testutils.h testutils.c -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list