This patch changes the module biuld so that stateful drivers like QEMU
and LXC are directly linked into the libvirtd daemon, and not part of the
libvirt.so file. It also does this for network and storage drivers. We
need to export a few more symbols for this to work, and libvirtd has to
explicitly initialize these drivers. Thanks to the previous patch changing
the probe method, automatic driver probing still works.
Daniel
diff -r c21e0cdc2637 qemud/Makefile.am
--- a/qemud/Makefile.am Fri Nov 07 12:51:10 2008 +0000
+++ b/qemud/Makefile.am Fri Nov 07 12:51:13 2008 +0000
@@ -88,7 +88,25 @@
$(POLKIT_LIBS)
libvirtd_DEPENDENCIES = ../src/libvirt.la
-libvirtd_LDADD = ../src/libvirt.la ../gnulib/lib/libgnu.la
+libvirtd_LDADD = \
+ ../gnulib/lib/libgnu.la \
+ ../src/libvirt.la
+
+if WITH_QEMU
+libvirtd_LDADD += ../src/libvirt_driver_qemu.la
+endif
+
+if WITH_LXC
+libvirtd_LDADD += ../src/libvirt_driver_lxc.la
+endif
+
+if WITH_STORAGE_DIR
+libvirtd_LDADD += ../src/libvirt_driver_storage.la
+endif
+
+if WITH_NETWORK
+libvirtd_LDADD += ../src/libvirt_driver_network.la
+endif
if HAVE_POLKIT
policydir = $(datadir)/PolicyKit/policy
diff -r c21e0cdc2637 qemud/qemud.c
--- a/qemud/qemud.c Fri Nov 07 12:51:10 2008 +0000
+++ b/qemud/qemud.c Fri Nov 07 12:51:13 2008 +0000
@@ -60,6 +60,20 @@
#ifdef HAVE_AVAHI
#include "mdns.h"
#endif
+
+#ifdef WITH_QEMU
+#include "qemu_driver.h"
+#endif
+#ifdef WITH_LXC
+#include "lxc_driver.h"
+#endif
+#ifdef WITH_NETWORK
+#include "network_driver.h"
+#endif
+#ifdef WITH_STORAGE_DIR
+#include "storage_driver.h"
+#endif
+
static int godaemon = 0; /* -d: Be a daemon */
static int verbose = 0; /* -v: Verbose mode */
@@ -727,6 +741,21 @@
}
server->sigread = sigread;
+
+ virInitialize();
+
+#ifdef WITH_QEMU
+ qemudRegister();
+#endif
+#ifdef WITH_LXC
+ lxcRegister();
+#endif
+#ifdef WITH_NETWORK
+ networkRegister();
+#endif
+#ifdef WITH_STORAGE_DIR
+ storageRegister();
+#endif
virEventRegisterImpl(virEventAddHandleImpl,
virEventUpdateHandleImpl,
diff -r c21e0cdc2637 src/Makefile.am
--- a/src/Makefile.am Fri Nov 07 12:51:10 2008 +0000
+++ b/src/Makefile.am Fri Nov 07 12:51:13 2008 +0000
@@ -196,7 +196,8 @@
if WITH_QEMU
noinst_LTLIBRARIES += libvirt_driver_qemu.la
-libvirt_la_LIBADD += libvirt_driver_qemu.la
+# Stateful, so linked to daemon instead
+#libvirt_la_LIBADD += libvirt_driver_qemu.la
libvirt_driver_qemu_la_CFLAGS = $(NUMACTL_CFLAGS)
libvirt_driver_qemu_la_LDFLAGS = $(NUMACTL_LIBS)
libvirt_driver_qemu_la_SOURCES = $(QEMU_DRIVER_SOURCES)
@@ -204,14 +205,16 @@
if WITH_LXC
noinst_LTLIBRARIES += libvirt_driver_lxc.la
-libvirt_la_LIBADD += libvirt_driver_lxc.la
+# Stateful, so linked to daemon instead
+#libvirt_la_LIBADD += libvirt_driver_lxc.la
libvirt_driver_lxc_la_SOURCES = $(LXC_DRIVER_SOURCES)
endif
if WITH_NETWORK
noinst_LTLIBRARIES += libvirt_driver_network.la
-libvirt_la_LIBADD += libvirt_driver_network.la
+# Stateful, so linked to daemon instead
+#libvirt_la_LIBADD += libvirt_driver_network.la
libvirt_driver_network_la_SOURCES = $(NETWORK_DRIVER_SOURCES)
endif
@@ -219,7 +222,8 @@
libvirt_driver_storage_la_SOURCES =
if WITH_STORAGE_DIR
noinst_LTLIBRARIES += libvirt_driver_storage.la
-libvirt_la_LIBADD += libvirt_driver_storage.la
+# Stateful, so linked to daemon instead
+#libvirt_la_LIBADD += libvirt_driver_storage.la
libvirt_driver_storage_la_SOURCES += $(STORAGE_DRIVER_SOURCES)
libvirt_driver_storage_la_SOURCES += $(STORAGE_DRIVER_FS_SOURCES)
endif
@@ -261,6 +265,7 @@
$(COVERAGE_CFLAGS:-f%=-Wc,-f%) \
@CYGWIN_EXTRA_LDFLAGS@ @MINGW_EXTRA_LDFLAGS@
libvirt_la_CFLAGS = $(COVERAGE_CFLAGS) -DIN_LIBVIRT
+libvirt_la_DEPENDENCIES = $(libvirt_la_LIBADD) $(srcdir)/libvirt_sym.version
# Create an automake "convenience library" version of libvirt_la,
# just for testing, since the test harness requires access to internal
diff -r c21e0cdc2637 src/libvirt.c
--- a/src/libvirt.c Fri Nov 07 12:51:10 2008 +0000
+++ b/src/libvirt.c Fri Nov 07 12:51:13 2008 +0000
@@ -50,18 +50,8 @@
#ifdef WITH_REMOTE
#include "remote_internal.h"
#endif
-#ifdef WITH_QEMU
-#include "qemu_driver.h"
-#endif
#ifdef WITH_OPENVZ
#include "openvz_driver.h"
-#endif
-#ifdef WITH_LXC
-#include "lxc_driver.h"
-#endif
-#include "storage_driver.h"
-#ifdef WITH_NETWORK
-#include "network_driver.h"
#endif
/*
@@ -286,20 +276,8 @@
#ifdef WITH_XEN
if (xenUnifiedRegister () == -1) return -1;
#endif
-#ifdef WITH_QEMU
- if (qemudRegister() == -1) return -1;
-#endif
#ifdef WITH_OPENVZ
if (openvzRegister() == -1) return -1;
-#endif
-#ifdef WITH_LXC
- if (lxcRegister() == -1) return -1;
-#endif
-#ifdef WITH_NETWORK
- if (networkRegister() == -1) return -1;
-#endif
-#ifdef WITH_STORAGE_DIR
- if (storageRegister() == -1) return -1;
#endif
#ifdef WITH_REMOTE
if (remoteRegister () == -1) return -1;
diff -r c21e0cdc2637 src/libvirt_sym.version.in
--- a/src/libvirt_sym.version.in Fri Nov 07 12:51:10 2008 +0000
+++ b/src/libvirt_sym.version.in Fri Nov 07 12:51:13 2008 +0000
@@ -257,6 +257,19 @@
LIBVIRT_PRIVATE_@VERSION@ {
global:
+ /* bridge.h */
+ brAddBridge;
+ brAddInterface;
+ brAddTap;
+ brDeleteBridge;
+ brInit;
+ brSetEnableSTP;
+ brSetForwardDelay;
+ brSetInetAddress;
+ brSetInetNetmask;
+ brSetInterfaceUp;
+ brShutdown;
+
/* buf.h */
virBufferVSprintf;
@@ -264,6 +277,18 @@
virBufferAddChar;
virBufferContentAndReset;
virBufferError;
+
+
+ /* caps.h */
+ virCapabilitiesAddGuest;
+ virCapabilitiesAddGuestDomain;
+ virCapabilitiesAddGuestFeature;
+ virCapabilitiesAddHostNUMACell;
+ virCapabilitiesDefaultGuestEmulator;
+ virCapabilitiesFormatXML;
+ virCapabilitiesFree;
+ virCapabilitiesNew;
+ virCapabilitiesSetMacPrefix;
/* conf.h */
@@ -284,7 +309,62 @@
virGetStorageVol;
+ /* domain_conf.h */
+ virDiskNameToBusDeviceIndex;
+ virDiskNameToIndex;
+ virDomainAssignDef;
+ virDomainConfigFile;
+ virDomainDefDefaultEmulator;
+ virDomainDefFormat;
+ virDomainDefFree;
+ virDomainDefParseFile;
+ virDomainDefParseString;
+ virDomainDeleteConfig;
+ virDomainDeviceDefParse;
+ virDomainDiskBusTypeToString;
+ virDomainDiskDeviceTypeToString;
+ virDomainDiskQSort;
+ virDomainEventCallbackListAdd;
+ virDomainEventCallbackListFree;
+ virDomainEventCallbackListRemove;
+ virDomainFindByID;
+ virDomainFindByName;
+ virDomainFindByUUID;
+ virDomainLoadAllConfigs;
+ virDomainObjListFree;
+ virDomainRemoveInactive;
+ virDomainSaveConfig;
+ virDomainSoundModelTypeToString;
+ virDomainVirtTypeToString;
+
+
+ /* iptables.h */
+ iptablesAddForwardAllowCross;
+ iptablesAddForwardAllowIn;
+ iptablesAddForwardAllowOut;
+ iptablesAddForwardAllowRelatedIn;
+ iptablesAddForwardMasquerade;
+ iptablesAddForwardRejectIn;
+ iptablesAddForwardRejectOut;
+ iptablesAddTcpInput;
+ iptablesAddUdpInput;
+ iptablesContextFree;
+ iptablesContextNew;
+ iptablesReloadRules;
+ iptablesRemoveForwardAllowCross;
+ iptablesRemoveForwardAllowIn;
+ iptablesRemoveForwardAllowOut;
+ iptablesRemoveForwardAllowRelatedIn;
+ iptablesRemoveForwardMasquerade;
+ iptablesRemoveForwardRejectIn;
+ iptablesRemoveForwardRejectOut;
+ iptablesRemoveTcpInput;
+ iptablesRemoveUdpInput;
+ iptablesSaveRules;
+
+
/* libvirt_internal.h */
+ debugFlag;
virStateInitialize;
virStateCleanup;
virStateReload;
@@ -294,6 +374,10 @@
virDomainMigratePrepare;
virDomainMigratePerform;
virDomainMigrateFinish;
+ virRegisterDriver;
+ virRegisterNetworkDriver;
+ virRegisterStateDriver;
+ virRegisterStorageDriver;
/* memory.h */
@@ -303,13 +387,97 @@
virFree;
+ /* network_conf.h */
+ virNetworkAssignDef;
+ virNetworkDefFormat;
+ virNetworkDefFree;
+ virNetworkDefParseString;
+ virNetworkDeleteConfig;
+ virNetworkFindByName;
+ virNetworkFindByUUID;
+ virNetworkLoadAllConfigs;
+ virNetworkObjListFree;
+ virNetworkRemoveInactive;
+ virNetworkSaveConfig;
+
+
+ /* nodeinfo.h */
+ virNodeInfoPopulate;
+
+
+ /* stats_linux.h */
+ linuxDomainInterfaceStats;
+
+
+ /* storage_backend.h */
+ virStorageBackendForType;
+ virStorageBackendFromString;
+ virStorageBackendPartTableTypeFromString;
+ virStorageBackendPartTableTypeToString;
+ virStorageBackendRegister;
+ virStorageBackendRunProgNul;
+ virStorageBackendRunProgRegex;
+ virStorageBackendStablePath;
+ virStorageBackendUpdateVolInfo;
+ virStorageBackendUpdateVolInfoFD;
+
+
+ /* storage_conf.h */
+ virStoragePoolDefFormat;
+ virStoragePoolDefFree;
+ virStoragePoolDefParse;
+ virStoragePoolLoadAllConfigs;
+ virStoragePoolObjAssignDef;
+ virStoragePoolObjClearVols;
+ virStoragePoolObjDeleteDef;
+ virStoragePoolObjFindByName;
+ virStoragePoolObjFindByUUID;
+ virStoragePoolObjListFree;
+ virStoragePoolObjRemove;
+ virStoragePoolObjSaveDef;
+ virStoragePoolSourceFree;
+ virStoragePoolSourceListFormat;
+ virStorageVolDefFindByKey;
+ virStorageVolDefFindByName;
+ virStorageVolDefFindByPath;
+ virStorageVolDefFormat;
+ virStorageVolDefFree;
+ virStorageVolDefParse;
+
+
/* util.h */
virFileReadAll;
virStrToLong_i;
+ virStrToLong_ll;
virStrToLong_ull;
saferead;
safewrite;
virMacAddrCompare;
+ virEnumFromString;
+ virEnumToString;
+ virEventAddHandle;
+ virEventRemoveHandle;
+ virExec;
+ virFileDeletePid;
+ virFileExists;
+ virFileHasSuffix;
+ virFileMakePath;
+ virFileOpenTty;
+ virFileReadLimFD;
+ virFileReadPid;
+ virRun;
+
+
+ /* uuid.h */
+ virUUIDFormat;
+
+
+ /* virterror_internal.h */
+ virReportErrorHelper;
+
+
+ /* xml.h */
+ virXPathString;
/* Finally everything else is totally private */
diff -r c21e0cdc2637 tests/Makefile.am
--- a/tests/Makefile.am Fri Nov 07 12:51:10 2008 +0000
+++ b/tests/Makefile.am Fri Nov 07 12:51:13 2008 +0000
@@ -108,12 +108,12 @@
qemuxml2argvtest_SOURCES = \
qemuxml2argvtest.c testutilsqemu.c testutilsqemu.h \
testutils.c testutils.h
-qemuxml2argvtest_LDADD = $(LDADDS)
+qemuxml2argvtest_LDADD = ../src/libvirt_driver_qemu.la $(LDADDS)
qemuxml2xmltest_SOURCES = \
qemuxml2xmltest.c testutilsqemu.c testutilsqemu.h \
testutils.c testutils.h
-qemuxml2xmltest_LDADD = $(LDADDS)
+qemuxml2xmltest_LDADD = ../src/libvirt_driver_qemu.la $(LDADDS)
virshtest_SOURCES = \
virshtest.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 :|