1. 26 1月, 2012 3 次提交
    • D
      Replace hashing algorithm with murmurhash · 72b41397
      Daniel P. Berrange 提交于
      Recent discussions have illustrated the potential for DOS attacks
      with the hash table implementations used by most languages and
      libraries.
      
         https://lwn.net/Articles/474912/
      
      libvirt has an internal hash table impl, and uses hash tables for
      a variety of purposes. The hash key generation code is pretty
      simple and thus not strongly collision resistant.
      
      This patch replaces the current libvirt hash key generator with
      the (public domain) Murmurhash3 code. In addition every hash
      table now gets a random seed value which is used to perturb the
      hashing code. This should make it impossible to mount any
      practical attack against libvirt hashing code.
      
      * bootstrap.conf: Import bitrotate module
      * src/Makefile.am: Add virhashcode.[ch]
      * src/util/util.c: Make virRandom() return a fixed 32 bit
        integer value.
      * src/util/hash.c, src/util/hash.h, src/util/cgroup.c: Replace
        hash code generation with a call to virHashCodeGen()
      * src/util/virhashcode.h, src/util/virhashcode.c: Add a new
        virHashCodeGen() API using the Murmurhash3 algorithm.
      72b41397
    • D
      Rename hash.h and hash.c to virhash.h and virhash.c · 1d5c7a9f
      Daniel P. Berrange 提交于
      In preparation for the patch to include Murmurhash3, which
      introduces a virhashcode.h and virhashcode.c files, rename
      the existing hash.h and hash.c to virhash.h and virhash.c
      respectively.
      1d5c7a9f
    • D
      Introduce new API for generating random numbers · e95ef67b
      Daniel P. Berrange 提交于
      The old virRandom() API was not generating good random numbers.
      Replace it with a new API virRandomBits which instead of being
      told the upper limit, gets told the number of bits of randomness
      required.
      
      * src/util/virrandom.c, src/util/virrandom.h: Add virRandomBits,
        and move virRandomInitialize
      * src/util/util.h, src/util/util.c: Delete virRandom and
        virRandomInitialize
      * src/libvirt.c, src/security/security_selinux.c,
        src/test/test_driver.c, src/util/iohelper.c: Update for
        changes from virRandom to virRandomBits
      * src/storage/storage_backend_iscsi.c: Remove bogus call
        to virRandomInitialize & convert to virRandomBits
      e95ef67b
  2. 24 1月, 2012 1 次提交
    • D
      QEMU guest agent support · c160ce33
      Daniel P. Berrange 提交于
      There is now a standard QEMU guest agent that can be installed
      and given a virtio serial channel
      
          <channel type='unix'>
            <source mode='bind' path='/var/lib/libvirt/qemu/f16x86_64.agent'/>
            <target type='virtio' name='org.qemu.guest_agent.0'/>
          </channel>
      
      The protocol that runs over the guest agent is JSON based and
      very similar to the JSON monitor. We can't use exactly the same
      code because there are some odd differences in the way messages
      and errors are structured. The qemu_agent.c file is based on
      a combination and simplification of qemu_monitor.c and
      qemu_monitor_json.c
      
      * src/qemu/qemu_agent.c, src/qemu/qemu_agent.h: Support for
        talking to the agent for shutdown
      * src/qemu/qemu_domain.c, src/qemu/qemu_domain.h: Add thread
        helpers for talking to the agent
      * src/qemu/qemu_process.c: Connect to agent whenever starting
        a guest
      * src/qemu/qemu_monitor_json.c: Make variable static
      c160ce33
  3. 20 1月, 2012 1 次提交
    • E
      util: add new file for virTypedParameter utils · 61ca98b0
      Eric Blake 提交于
      Preparation for another patch that refactors common patterns
      into the new file for fewer lines of code overall.
      
      * src/util/util.h (virTypedParameterArrayClear): Move...
      * src/util/virtypedparam.h: ...to new file.
      (virTypedParameterArrayValidate, virTypedParameterAssign): New
      prototypes.
      * src/util/util.c (virTypedParameterArrayClear): Likewise.
      * src/util/virtypedparam.c: New file.
      * po/POTFILES.in: Mark file for translation.
      * src/Makefile.am (UTIL_SOURCES): Build it.
      * src/libvirt_private.syms (util.h): Split...
      (virtypedparam.h): to new section.
      (virkeycode.h): Sort.
      * daemon/remote.c: Adjust callers.
      * tools/virsh.c: Likewise.
      61ca98b0
  4. 07 1月, 2012 1 次提交
    • E
      tests: work around pdwtags 1.9 failure · cf6d3625
      Eric Blake 提交于
      On rawhide, gcc is new enough to output new DWARF information that
      pdwtags has not yet learned, but the resulting 'make check' output
      was rather confusing:
      
      $ make -C src check
      ...
        GEN    virkeepaliveprotocol-structs
      die__process_function: DW_TAG_INVALID (0x4109) @ <0x58c> not handled!
      WARNING: your pdwtags program is too old
      WARNING: skipping the virkeepaliveprotocol-structs test
      WARNING: install dwarves-1.3 or newer
      ...
      $ pdwtags --version
      v1.9
      
      I've filed the pdwtags deficiency as
      https://bugzilla.redhat.com/show_bug.cgi?id=772358
      
      * src/Makefile.am (PDWTAGS): Don't leave -t file behind on version
      mismatch.  Soften warning message, since 1.9 is newer than 1.3.
      Don't leak stderr from broken version.
      cf6d3625
  5. 02 12月, 2011 1 次提交
    • E
      build: fix 'make dist' without dtrace · 55d76a72
      Eric Blake 提交于
      probes.h can only be generated on Linux, and then only with dtrace
      installed.  If it is part of the tarball, then either 'make dist'
      will fail if you don't have that setup, or we would have to start
      keeping probes.h in libvirt.git.  Since we only need it to be
      generated when dtrace is in use, it's better to avoid shipping
      it in the first place, and avoid tracking it in git.
      
      Meanwhile, there is a build dependency - since the RPC code is
      generated, it can be built early; but when dtrace is enabled, we
      must ensure probes.h is built even earlier.  Commit 1afcfbdd tried
      to fix this, but did so in a way that added probes.h into the
      tarball, and broke VPATH as well.  Commit ecbca767 fixed VPATH,
      but didn't fix the more fundamental problem.  This patch solves
      the issue by adding a dependency instead.
      
      Tested with 'make dist' in a clean VPATH builds, for both
      './configure --without-dtrace' and './configure --with-dtrace';
      all configurations were able to correctly build a tarball, and
      the dtrace configuration no longer sticks probes.h in the tarball.
      
      * src/Makefile.am (REMOTE_DRIVER_GENERATED): Don't ship probes.h;
      rather, make it a dependency.
      55d76a72
  6. 01 12月, 2011 1 次提交
  7. 30 11月, 2011 1 次提交
    • D
      Add internal APIs for dealing with time · 3ec12898
      Daniel P. Berrange 提交于
      The logging APIs need to be able to generate formatted timestamps
      using only async signal safe functions. This rules out using
      gmtime/localtime/malloc/gettimeday(!) and much more.
      
      Introduce a new internal API which is async signal safe.
      
        virTimeMillisNowRaw replacement for gettimeofday. Uses clock_gettime
                            where available, otherwise falls back to the unsafe
                            gettimeofday
      
        virTimeFieldsNowRaw  replacements for gmtime(), convert a timestamp
        virTimeFieldsThenRaw into a broken out set of fields. No localtime()
                             replacement is provided, because converting to
                             local time is not practical with only async signal
                             safe APIs.
      
        virTimeStringNowRaw  replacements for strftime() which print a timestamp
        virTimeStringThenRaw into a string, using a pre-determined format, with
                             a fixed size buffer (VIR_TIME_STRING_BUFLEN)
      
      For each of these there is also a version without the Raw postfix
      which raises a full libvirt error. These versions are not async
      signal safe
      
      * src/Makefile.am, src/util/virtime.c, src/util/virtime.h: New files
      * src/libvirt_private.syms: New APis
      * configure.ac: Check for clock_gettime in -lrt
      * tests/virtimetest.c, tests/Makefile.am: Test new APIs
      3ec12898
  8. 29 11月, 2011 1 次提交
    • S
      Implement the core API to suspend/resume the host · 4ddb37c3
      Srivatsa S. Bhat 提交于
      Add the core functions that implement the functionality of the API.
      Suspend is done by using an asynchronous mechanism so that we can return
      the status to the caller before the host gets suspended. This asynchronous
      operation is achieved by suspending the host in a separate thread of
      execution. However, returning the status to the caller is only best-effort,
      but not guaranteed.
      
      To resume the host, an RTC alarm is set up (based on how long we want to
      suspend) before suspending the host. When this alarm fires, the host
      gets woken up.
      
      Suspend-to-RAM operation on a host running Linux can take upto more than 20
      seconds, depending on the load of the system. (Freezing of tasks, an operation
      preceding any suspend operation, is given up after a 20 second timeout).
      And Suspend-to-Disk can take even more time, considering the time required
      for compaction, creating the memory image and writing it to disk etc.
      So, we do not allow the user to specify a suspend duration of less than 60
      seconds, to be on the safer side, since we don't want to prematurely declare
      failure when we only had to wait for some more time.
      4ddb37c3
  9. 24 11月, 2011 3 次提交
    • J
      build: Properly generate and check virkeepaliveprotocol-structs · 04a46933
      Jiri Denemark 提交于
      This fixes make dist broken by recent keepalive series
      04a46933
    • J
      Implement common keepalive handling · 71b779a1
      Jiri Denemark 提交于
      These APIs are used by both client and server RPC layer to handle
      processing of keepalive messages.
      71b779a1
    • J
      Define keepalive protocol · 4acd358a
      Jiri Denemark 提交于
      The keepalive program has two procedures: PING, and PONG.
      Both are used only in asynchronous messages and the sender doesn't wait
      for any reply. However, the party which receives PING messages is
      supposed to react by sending PONG message the other party, but no
      explicit binding between PING and PONG messages is made. For backward
      compatibility neither server nor client are allowed to send keepalive
      messages before checking that remote party supports them.
      4acd358a
  10. 21 11月, 2011 2 次提交
  11. 19 11月, 2011 2 次提交
    • D
      Move ifaceMacvtapLinkDump and ifaceGetNthParent functions · 91904106
      Daniel P. Berrange 提交于
      Move the ifaceMacvtapLinkDump and ifaceGetNthParent functions
      into virnetdevvportprofile.c since they are specific to that
      code. This avoids polluting the headers with the Linux specific
      netlink data types
      
      * src/util/interface.c, src/util/interface.h: Move
        ifaceMacvtapLinkDump and ifaceGetNthParent functions and delete
        remaining file
      * src/util/virnetdevvportprofile.c: Add ifaceMacvtapLinkDump
        and ifaceGetNthParent functions
      * src/network/bridge_driver.c, src/nwfilter/nwfilter_gentech_driver.c,
        src/nwfilter/nwfilter_learnipaddr.c, src/util/virnetdevmacvlan.c:
        Remove include of interface.h
      91904106
    • D
      Rename and split the macvtap.c file · 896104c9
      Daniel P. Berrange 提交于
      Rename the macvtap.c file to virnetdevmacvlan.c to reflect its
      functionality. Move the port profile association code out into
      virnetdevvportprofile.c. Make the APIs available unconditionally
      to callers
      
      * src/util/macvtap.h: rename to src/util/virnetdevmacvlan.h,
      * src/util/macvtap.c: rename to src/util/virnetdevmacvlan.c
      * src/util/virnetdevvportprofile.c, src/util/virnetdevvportprofile.h:
        Pull in vport association code
      * src/Makefile.am, src/conf/domain_conf.h, src/qemu/qemu_conf.c,
        src/qemu/qemu_conf.h, src/qemu/qemu_driver.c: Update include
        paths & remove conditional compilation
      896104c9
  12. 15 11月, 2011 2 次提交
    • D
      Move LXC veth.c code into shared utility APIs · 428cffb1
      Daniel P. Berrange 提交于
      Move the virNetDevSetName and virNetDevSetNamespace APIs out
      of LXC's veth.c and into virnetdev.c.
      
      Move the remaining content of the file to src/util/virnetdevveth.c
      
      * src/lxc/veth.c: Rename to src/util/virnetdevveth.c
      * src/lxc/veth.h: Rename to src/util/virnetdevveth.h
      * src/util/virnetdev.c, src/util/virnetdev.h: Add
        virNetDevSetName and virNetDevSetNamespace
      * src/lxc/lxc_container.c, src/lxc/lxc_controller.c,
        src/lxc/lxc_driver.c: Update include paths
      428cffb1
    • D
      Split src/util/network.{c,h} into 5 pieces · d3406045
      Daniel P. Berrange 提交于
      The src/util/network.c file is a dumping ground for many different
      APIs. Split it up into 5 pieces, along functional lines
      
       - src/util/virnetdevbandwidth.c: virNetDevBandwidth type & helper APIs
       - src/util/virnetdevvportprofile.c: virNetDevVPortProfile type & helper APIs
       - src/util/virsocketaddr.c: virSocketAddr and APIs
       - src/conf/netdev_bandwidth_conf.c: XML parsing / formatting
         for virNetDevBandwidth
       - src/conf/netdev_vport_profile_conf.c: XML parsing / formatting
         for virNetDevVPortProfile
      
      * src/util/network.c, src/util/network.h: Split into 5 pieces
      * src/conf/netdev_bandwidth_conf.c, src/conf/netdev_bandwidth_conf.h,
        src/conf/netdev_vport_profile_conf.c, src/conf/netdev_vport_profile_conf.h,
        src/util/virnetdevbandwidth.c, src/util/virnetdevbandwidth.h,
        src/util/virnetdevvportprofile.c, src/util/virnetdevvportprofile.h,
        src/util/virsocketaddr.c, src/util/virsocketaddr.h: New pieces
      * daemon/libvirtd.h, daemon/remote.c, src/conf/domain_conf.c,
        src/conf/domain_conf.h, src/conf/network_conf.c,
        src/conf/network_conf.h, src/conf/nwfilter_conf.h,
        src/esx/esx_util.h, src/network/bridge_driver.c,
        src/qemu/qemu_conf.c, src/rpc/virnetsocket.c,
        src/rpc/virnetsocket.h, src/util/dnsmasq.h, src/util/interface.h,
        src/util/iptables.h, src/util/macvtap.c, src/util/macvtap.h,
        src/util/virnetdev.h, src/util/virnetdevtap.c,
        tools/virsh.c: Update include files
      d3406045
  13. 10 11月, 2011 1 次提交
    • D
      Split bridge.h into three separate files · e49c9bf2
      Daniel P. Berrange 提交于
      Following the renaming of the bridge management APIs, we can now
      split the source file into 3 corresponding pieces
      
       * src/util/virnetdev.c: APIs for any type of network interface
       * src/util/virnetdevbridge.c: APIs for bridge interfaces
       * src/util/virnetdevtap.c: APIs for TAP interfaces
      
      * src/util/virnetdev.c, src/util/virnetdev.h,
        src/util/virnetdevbridge.c, src/util/virnetdevbridge.h,
        src/util/virnetdevtap.c, src/util/virnetdevtap.h: Copied
        from bridge.{c,h}
      * src/util/bridge.c, src/util/bridge.h: Split into 3 pieces
      * src/lxc/lxc_driver.c, src/network/bridge_driver.c,
        src/openvz/openvz_driver.c, src/qemu/qemu_command.c,
        src/qemu/qemu_conf.h, src/uml/uml_conf.c, src/uml/uml_conf.h,
        src/uml/uml_driver.c: Update #include directives
      e49c9bf2
  14. 05 11月, 2011 1 次提交
    • E
      build: fix linking on BSD · 9d86cbcf
      Eric Blake 提交于
      While building on FreeBSD (and after fixing a ptsname_r link error),
      I got this failure:
      
      ./.libs/libvirt_util.a(libvirt_util_la-threads.o)(.text+0x240): In function `virThreadCreate':
      util/threads-pthread.c:185: undefined reference to `pthread_create'
      
      It turns out that gnulib used only pthread_join for LIB_PTHREAD,
      but on FreeBSD, libc provides that (as a stub function); whereas
      the more complex pthread_create really does require -pthread,
      which gnulib tracked under [LT]LIBMULTITHREAD.
      
      * configure.ac (LIBS): Check LIBMULTITHREAD alongside LIB_PTHREAD.
      * src/Makefile.am (THREAD_LIBS): New variable.
      (libvirt_util_la_LIBADD, libvirt_lxc_LDADD): Use it.
      9d86cbcf
  15. 02 11月, 2011 2 次提交
    • D
      Add support for probing filesystem with libblkid · 26798492
      Daniel P. Berrange 提交于
      The LXC code for mounting container filesystems from block devices
      tries all filesystems in /etc/filesystems and possibly those in
      /proc/filesystems. The regular mount binary, however, first tries
      using libblkid to detect the format. Add support for doing the same
      in libvirt, since Fedora's /etc/filesystems is missing many formats,
      most notably ext4 which is the default filesystem Fedora uses!
      
      * src/Makefile.am: Link libvirt_lxc to libblkid
      * src/lxc/lxc_container.c: Probe filesystem format with libblkid
      26798492
    • D
      Create /var/lib/libvirt/filesystems for LXC trees · f33b5792
      Daniel P. Berrange 提交于
      We already have a /var/lib/libvirt/images for OS install images.
      We need a separate /var/lib/libvirt/filesystems for OS install
      trees, since SELinux labelling will be different
      
      * libvirt.spec.in: Add /var/lib/libvirt/filesystems
      * src/Makefile.am: Create /var/lib/libvirt/filesystems
      f33b5792
  16. 30 10月, 2011 1 次提交
    • M
      vbox: Add support for VirtualBox 4.1 · 73ce5050
      Matthias Bolte 提交于
      Deal with the incompatible changes in the VirtualBox 4.1 API.
      
      INetworkAdapter has its different AttachTo* method replaced by
      a settable attachmentType property.
      
      The maximum number of network adapters is now requestable per
      chipset type.
      
      The OpenMedium method got a bool parameter to request opening
      a medium under a new IID.
      73ce5050
  17. 29 10月, 2011 1 次提交
    • J
      storage: add auth to virDomainDiskDef · 5bd6271f
      Josh Durgin 提交于
      Add additional fields to let you specify the how to authenticate with a disk.
      The secret to use may be referenced by a usage string or a UUID, i.e.:
      
      <auth username='myuser'>
       <secret type='ceph' usage='secretname'/>
      </auth>
      
      or
      
      <auth username='myuser'>
       <secret type='ceph' uuid='0a81f5b2-8403-7b23-c8d6-21ccc2f80d6f'/>
      </auth>
      Signed-off-by: NJosh Durgin <josh.durgin@dreamhost.com>
      5bd6271f
  18. 27 10月, 2011 1 次提交
    • D
      Add a systemtap script for watching QEMU monitor interactions · 9b76b08a
      Daniel P. Berrange 提交于
      This change adds some systemtap/dtrace probes to the QEMU monitor
      client code. In particular it allows watching of all operations
      for a VM
      
      * examples/systemtap/qemu-monitor.stp: Watch all monitor commands
      * src/Makefile.am: Passing libdir/bindir/sbindir to dtrace2systemtap.pl
      * src/dtrace2systemtap.pl: Accept libdir/bindir/sbindir as args
        and look for '# binary:' comment to mark probes against libvirtd
        vs libvirt.so
      * src/qemu/qemu_monitor.c, src/qemu/qemu_monitor_json.c,
        src/qemu/qemu_monitor_text.c: Add probes for key functions
      9b76b08a
  19. 19 10月, 2011 2 次提交
    • X
      compile: fix undefined reference to gnutls_x509_crt_get_dn with gcc-4.6.1 · 8f3d1669
      Xu He Jie 提交于
      When I compile libvirt with gcc-4.6.1 in ubuntu 11.10, got error as below:
      
        CCLD   libvirtd
      /usr/bin/ld: ../src/.libs/libvirt_driver_qemu.a(libvirt_driver_qemu_la-qemu_migration.o): undefined reference to symbol 'gnutls_x509_crt_get_dn@@GNUTLS_1_4'
      /usr/bin/ld: note: 'gnutls_x509_crt_get_dn@@GNUTLS_1_4' is defined in DSO /usr/lib/x86_64-linux-gnu/libgnutls.so so try adding it to the linker command line
      /usr/lib/x86_64-linux-gnu/libgnutls.so: could not read symbols: Invalid operation
      collect2: ld returned 1 exit status
      make[3]: *** [libvirtd] Error 1
      
      It can compile with gcc-4.5.2 in ubuntu 11.04, but it can not compile with gcc-4.6.1 in ubuntu 11.10.
      
      I didn't find reason. Does Anyone know the reason or the different between gcc-4.5.2 and gcc-4.6.1?
      
      I still provide a patch for this. Just make it is working now.
      Signed-off-by: Nsoulxu <soulxu@soulxu-ThinkPad-T410.(none)>
      8f3d1669
    • D
      Allow for URI aliases when connecting to libvirt · 777ffbd0
      Daniel P. Berrange 提交于
      This adds support for a libvirt client configuration file
      either /etc/libvirt/libvirt.conf for privileged clients,
      or $HOME/.libvirt/libvirt.conf for unprivileged clients.
      
      It allows one parameter
      
       uri_aliases = [
         "hail=qemu+ssh://root@hail.cloud.example.com/system",
         "sleet=qemu+ssh://root@sleet.cloud.example.com/system",
       ]
      
      Any call to virConnectOpen with a non-NULL URI will first
      attempt to match against the uri_aliases list. An application
      can disable this by using VIR_CONNECT_NO_ALIASES
      
      * docs/uri.html.in: Document URI aliases
      * include/libvirt/libvirt.h.in: Add VIR_CONNECT_NO_ALIASES
      * libvirt.spec.in, mingw32-libvirt.spec.in: Add /etc/libvirt/libvirt.conf
      * src/Makefile.am: Install default config file
      * src/libvirt.c: Add support for URI aliases
      * src/remote/remote_driver.c: Don't try to handle URIs
        with no scheme and which clearly are not paths
      * src/util/conf.c: Don't raise error on virConfFree(NULL)
      * src/xen/xen_driver.c: Don't raise error on URIs
        with no scheme
      777ffbd0
  20. 17 10月, 2011 1 次提交
    • J
      Fix VPATH build · ecbca767
      Jiri Denemark 提交于
      probes.h is generated in build directory; setting a dependency on
      probes.h from source directory doesn't work well in VPATH builds. Caused
      by commit 1afcfbdd
      ecbca767
  21. 15 10月, 2011 1 次提交
    • W
      build: fix 'make dist' error · 1afcfbdd
      Wen Congyang 提交于
      When I run 'make dist', I receive the following error messages:
      make[1]: Entering directory `/home/wency/source/libvirt/src'
        GEN    remote/remote_protocol.h
        GEN    remote/remote_protocol.c
        GEN    remote/qemu_protocol.h
        GEN    remote/qemu_protocol.c
        GEN    remote/qemu_client_bodies.h
        CC     libvirt_driver_remote_la-remote_protocol.lo
      In file included from ./remote/remote_protocol.h:16,
                       from ./remote/remote_protocol.c:7:
      /internal.h:249:23: error: probes.h: No such file or directory
      make[1]: *** [libvirt_driver_remote_la-remote_protocol.lo] Error 1
      make[1]: Leaving directory `/home/wency/source/libvirt/src'
      make: *** [distdir] Error 1
      
      The reason is that we use probes.h before generating it.
      1afcfbdd
  22. 12 10月, 2011 3 次提交
    • E
      build: fix mingw build without sasl · 83ad88b7
      Eric Blake 提交于
      Detected by autogen.sh on a cross-mingw build:
      
      Creating library file: .libs/libvirt.dll.a
      Cannot export virNetSASLContextCheckIdentity: symbol not defined
      Cannot export virNetSASLContextNewServer: symbol not defined
      ...
      
      * src/libvirt_private.syms (virnetsaslcontext.h): Move symbols...
      * src/libvirt_sasl.syms: ...to new file.
      * src/Makefile.am (USED_SYM_FILES) [HAVE_SASL]: Use new file.
      (EXTRA_DIST): Ship it.
      83ad88b7
    • E
      build: fix 'make distcheck' · c654ba88
      Eric Blake 提交于
      I got these distcheck failures with sanlock enabled:
      
      ERROR: files left in build directory after distclean:
      ./tools/virt-sanlock-cleanup
      ./src/locking/qemu-sanlock.conf
      
      * src/Makefile.am (DISTCLEANFILES) [HAVE_SANLOCK]: Clean built
      file.
      * tools/Makefile.am (DISTCLEANFILES): Likewise.
      c654ba88
    • E
      build: ship helper scripts · e648aee0
      Eric Blake 提交于
      Otherwise, 'make rpm' fails with:
      
        GEN    libvirt_qemu.def
      make[2]: *** No rule to make target `dtrace2systemtap.pl', needed by `libvirt_probes.stp'.  Stop.
      
      * src/Makefile.am (EXTRA_DIST): Add recent script additions.
      e648aee0
  23. 11 10月, 2011 3 次提交
    • D
      ad2bb65c
    • D
      Rewrite all the DTrace/SystemTAP probing · ddf3bd32
      Daniel P. Berrange 提交于
      The libvirtd daemon had a few crude system tap probes. Some of
      these were broken during the RPC rewrite. The new modular RPC
      code is structured in a way that allows much more effective
      tracing. Instead of trying to hook up the original probes,
      define a new set of probes for the RPC and event code.
      
      The master probes file is now src/probes.d.  This contains
      probes for virNetServerClientPtr, virNetClientPtr, virSocketPtr
      virNetTLSContextPtr and virNetTLSSessionPtr modules. Also add
      probes for the poll event loop.
      
      The src/dtrace2systemtap.pl script can convert the probes.d
      file into a libvirt_probes.stp file to make use from systemtap
      much simpler.
      
      The src/rpc/gensystemtap.pl script can generate a set of
      systemtap functions for translating RPC enum values into
      printable strings. This works for all RPC header enums (program,
      type, status, procedure) and also the authentication enum
      
      The PROBE macro will automatically generate a VIR_DEBUG
      statement, so any place with a PROBE can remove any existing
      manual DEBUG statements.
      
      * daemon/libvirtd.stp, daemon/probes.d: Remove obsolete probing
      * daemon/libvirtd.h: Remove probe macros
      * daemon/Makefile.am: Remove all probe buildings/install
      * daemon/remote.c: Update authentication probes
      * src/dtrace2systemtap.pl, src/rpc/gensystemtap.pl: Scripts
        to generate STP files
      * src/internal.h: Add probe macros
      * src/probes.d: Master list of probes
      * src/rpc/virnetclient.c, src/rpc/virnetserverclient.c,
        src/rpc/virnetsocket.c, src/rpc/virnettlscontext.c,
        src/util/event_poll.c: Insert probe points, removing any
        DEBUG statements that duplicate the info
      ddf3bd32
    • D
      Make libvirt.so include the RPC server code · 22af84dc
      Daniel P. Berrange 提交于
      To avoid static linking libvirtd to the RPC server code, which
      then prevents sane introduction of DTrace probes, put it all
      in the libvirt.so, and export it
      
      * daemon/Makefile.am: Don't link to RPC libraries
      * src/Makefile.am: Link all RPC libraries to libvirt.so
      * src/libvirt_private.syms: Export all RPC functions
      22af84dc
  24. 07 10月, 2011 1 次提交
    • E
      build: fix 'make distcheck' with pdwtags installed · 2d45ae5a
      Eric Blake 提交于
      I am getting this failure with 'make distcheck':
      
        GEN    ../../src/remote_protocol-structs
      /bin/sh: ../../src/remote_protocol-structs-t: Permission denied
      make[4]: *** [../../src/remote_protocol-structs] Error 1
      
      since it attempts a sub-run of a VPATH 'make check' where $(srcdir)
      is intentionally read-only.  I'm not sure which commit introduced
      the problem, although I suspect it was around 62dee6fa when I
      refactored protocol struct checking to be more powerful.
      
      $(@F) is required by POSIX, and although it is not yet portable
      to all make implementations, we already require GNU make.
      
      * src/Makefile.am (PDWTAGS): Generate temp file into current
      directory, since $(srcdir) is read-only during distcheck.
      2d45ae5a
  25. 20 9月, 2011 1 次提交
    • D
      Update to require sanlock 1.8 for license compliance · 19ff0ddf
      Daniel P. Berrange 提交于
      Inexplicably the sanlock code all got placed under the GPLv2-only,
      so libvirt's use of sanlock introduces a license incompatibility.
      The sanlock developers have now rearranged the code such that there
      is a 'sanlock_client.so' which is LGPLv2+ while their daemon remains
      GPLv2-only. To use the new client library we need to call the new
      sanlock_init and sanlock_align APIs instead of sanlock_direct_init
      and sanlock_direct_align. These APIs calls are now routed via the
      sanlock daemon, instead of doing direct I/O calls to disk.
      
      For all this we require sanlock >= 1.8
      
      * configure.ac: Check for sanlock_client.so instead of sanlock.so
        and fix various comments
      * libvirt.spec.in: Mandate sanlock >= 1.8
      * src/Makefile.am: Link to -lsanlock_client
      * src/locking/lock_driver_sanlock.c: Use sanlock_init and
        sanlock_align
      19ff0ddf
  26. 17 9月, 2011 1 次提交
    • D
      Prevent crash from dlclose() of libvirt.so · 8e44e559
      Daniel P. Berrange 提交于
      When libvirt calls virInitialize it creates a thread local
      for the virErrorPtr storage, and registers a callback to
      cleanup memory when a thread exits. When libvirt is dlclose()d
      or otherwise made non-resident, the callback function is
      removed from memory, but the thread local may still exist
      and if a thread later exists, it will invoke the callback
      and SEGV. There may also be other thread locals with callbacks
      pointing to libvirt code, so it is in general never safe to
      unload libvirt.so from memory once initialized.
      
      To allow dlclose() to succeed, but keep libvirt.so resident
      in memory, link with '-z nodelete'. This issue was first
      found with the libvirt CIM provider, but can potentially
      hit many of the dynamic language bindings which all ultimately
      involve dlopen() in some way, either on libvirt.so itself,
      or on the glue code for the binding which in turns links
      to libvirt
      
      * configure.ac, src/Makefile.am: Ensure libvirt.so is linked
        with -z nodelete
      * cfg.mk, .gitignore, tests/Makefile.am, tests/shunloadhelper.c,
        tests/shunloadtest.c: A test case to unload libvirt while
        a thread is still running.
      8e44e559
  27. 02 9月, 2011 1 次提交
    • O
      storage: Add fs pool formatting · 27758859
      Osier Yang 提交于
      This patch adds the ability to make the filesystem for a filesystem
      pool during a pool build.
      
      The patch adds two new flags, no overwrite and overwrite, to control
      when mkfs gets executed.  By default, the patch preserves the
      current behavior, i.e., if no flags are specified, pool build on a
      filesystem pool only makes the directory on which the filesystem
      will be mounted.
      
      If the no overwrite flag is specified, the target device is checked
      to determine if a filesystem of the type specified in the pool is
      present.  If a filesystem of that type is already present, mkfs is
      not executed and the build call returns an error.  Otherwise, mkfs
      is executed and any data present on the device is overwritten.
      
      If the overwrite flag is specified, mkfs is always executed, and any
      existing data on the target device is overwritten unconditionally.
      27758859