1. 19 7月, 2012 2 次提交
    • E
      nodeinfo: deal with offline cpus in a node · 03e0ec10
      Eric Blake 提交于
      Commit 80533ca2 forgot to think about offline cpus.  When a node
      cpu is offline, then its topology/ subdirectory is not present,
      leading to spurious error messages leaked to the user such as:
      
      libvir:  error : cannot open /home/dummy/libvirt/tests/nodeinfodata/linux-nodeinfo-sysfs-test-6/node/node0/cpu7/topology/physical_package_id: No such file or directory
      
      Fix that, as well as test it; the test data is gathered from a
      machine with one NUMA node, hyperthreading, and with 2 of the
      8 cpus offline.
      
      * src/nodeinfo.c (virNodeParseNode): Don't parse topology of
      offline cpus.
      * tests/nodeinfotest.c (mymain): Run new test.
      * tests/nodeinfodata/linux-nodeinfo-sysfs-test-6*: New data.
      03e0ec10
    • S
      Add a sheepdog backend for the storage driver · 29bc4fe6
      Sebastian Wiedenroth 提交于
      This patch brings support to manage sheepdog pools and volumes to libvirt.
      It uses the "collie" command-line utility that comes with sheepdog for that.
      
      A sheepdog pool in libvirt maps to a sheepdog cluster.
      It needs a host and port to connect to, which in most cases
      is just going to be the default of localhost on port 7000.
      
      A sheepdog volume in libvirt maps to a sheepdog vdi.
      To create one specify the pool, a name and the capacity.
      Volumes can also be resized later.
      
      In the volume XML the vdi name has to be put into the <target><path>.
      To use the volume as a disk source for virtual machines specify
      the vdi name as "name" attribute of the <source>.
      The host and port information from the pool are specified inside the host tag.
      
        <disk type='network'>
          ...
          <source protocol="sheepdog" name="vdi_name">
            <host name="localhost" port="7000"/>
          </source>
        </disk>
      
      To work right this patch parses the output of collie,
      so it relies on the raw output option. There recently was a bug which caused
      size information to be reported wrong. This is fixed upstream already and
      will be in the next release.
      Signed-off-by: NSebastian Wiedenroth <wiedi@frubar.net>
      29bc4fe6
  2. 11 7月, 2012 7 次提交
    • P
      test: Add test case for nodeinfotest if host machine doesn't have NUMA · 7ea1dd93
      Peter Krempa 提交于
      Test filling of nodeinfo structure if /sys/devices/system/node does not
      exist. (Based on dump from a real machine)
      7ea1dd93
    • P
      test: Add new test case for nodeinfotest · 1aa1a45b
      Peter Krempa 提交于
      This patch adds test data that describe a machine that has two physical
      processors that don't share same core id's on their cores. On this data
      the "virsh nodeinfo" reported that the machine had 10 cores per socket
      while the processor had only 8. (Before fixing nodeinfo gathering code).
      1aa1a45b
    • P
      nodeinfo: Fix gathering of nodeinfo data structure · 80533ca2
      Peter Krempa 提交于
      This patch changes the way data to fill the nodeinfo structure are
      gathered. We've gathere the test data by iterating processors an sockets
      separately from nodes. The reported data was based solely on information
      about core id. Problems arise when eg cores in mulit-processor machines
      don't have same id's on both processors or maybe one physical processor
      contains more NUMA nodes.
      
      This patch changes the approach how we detect processors and nodes. Now
      we start at enumerating nodes and for each node processors, sockets and
      threads are enumerated separately. This approach provides acurate data
      that comply to docs about the nodeinfo structure. This also enables to
      get rid of hacks: see commits 10d9038b,
      ac9dd4a6. (Those changes in nodeinfo.c
      are efectively reverted by this patch).
      
      This patch also changes output of one of the tests, as the processor
      topology is now acquired more precisely.
      80533ca2
    • P
      nodeinfo_test: Enhance test data before changing nodeinfo gathering · 6dcf98c8
      Peter Krempa 提交于
      This patch adds test data needed by the new way node information will be
      gathered. This patch adds symlinks to cpu cores to their corresponding
      node directory.
      6dcf98c8
    • V
      S390: Adding testcases for s390 · 028ba4f3
      Viktor Mihajlovski 提交于
      Add minimal s390-virtio domain testcase and testcases for virtio serial,
      net, disk for the virtio-s390 bus.
      Signed-off-by: NViktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
      028ba4f3
    • V
      qemu: Change tests to use (modified) qemuDomainAssignAddresses · 6e15887f
      Viktor Mihajlovski 提交于
      Rewrote the device assignment parts in tests to use qemuDomainAssignAddresses.
      This way the tests will work for new device address types as they show
      up in the future (like s390 device types).
      Signed-off-by: NViktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
      6e15887f
    • C
      Fix /domain/features setting in qemuParseCommandLine · 626dd518
      Christophe Fergeau 提交于
      Commit 5e6ce1 moved down detection of the ACPI feature in
      qemuParseCommandLine. However, when ACPI is detected, it clears
      all feature flags in def->features to only set ACPI. This used to
      be fine because this was the first place were def->features was set,
      but after the move this is no longer necessarily true because this
      block comes before the ACPI check:
      
      if (strstr(def->emulator, "kvm")) {
          def->virtType = VIR_DOMAIN_VIRT_KVM;
          def->features |= (1 << VIR_DOMAIN_FEATURE_PAE);
      }
      
      Since def is allocated in qemuParseCommandLine using VIR_ALLOC, we
      can always use |= when modifying def->features
      626dd518
  3. 05 7月, 2012 1 次提交
  4. 03 7月, 2012 1 次提交
  5. 28 6月, 2012 1 次提交
  6. 21 6月, 2012 1 次提交
  7. 11 6月, 2012 2 次提交
    • E
      buf: support peeking at string contents · 9202f2c2
      Eric Blake 提交于
      Right now, the only way to get at the contents of a virBuffer is
      to destroy it.  But there are cases in my upcoming patches where
      peeking at the contents makes life easier.  I suppose this does
      open up the potential for bad code to dereference a stale pointer,
      by disregarding the docs that the return value is invalid on the
      next virBuf operation, but such is life.
      
      * src/util/buf.h (virBufferCurrentContent): New declaration.
      * src/util/buf.c (virBufferCurrentContent): Implement it.
      * src/libvirt_private.syms (buf.h): Export it.
      * tests/virbuftest.c (testBufAutoIndent): Test it.
      9202f2c2
    • G
      msg_buf_size is unsigned long not size_t · 2d98c686
      Guido Günther 提交于
      This fixes the build on 32bit systems which otherwise fails with:
      
      virnetmessagetest.c: In function 'testMessageHeaderEncode':
      virnetmessagetest.c:75:9: error: format '%zu' expects argument of type 'size_t', but argument 7 has type 'long unsigned int' [-Werror=format]
      2d98c686
  8. 05 6月, 2012 4 次提交
    • M
      rpc: Switch to dynamically allocated message buffer · a2c304f6
      Michal Privoznik 提交于
      Currently, we are allocating buffer for RPC messages statically.
      This is not such pain when RPC limits are small. However, if we want
      ever to increase those limits, we need to allocate buffer dynamically,
      based on RPC message len (= the first 4 bytes). Therefore we will
      decrease our mem usage in most cases and still be flexible enough in
      corner cases.
      a2c304f6
    • J
      tests: Refresh qemu-1.1.0 data · ae953f51
      Jiri Denemark 提交于
      QEMU 1.1.0 has been officially released. With 1.1.0 QEMU went back to
      three-digits version even for the initial release and I renamed the data
      files to match this fact. They were generated with
      
      qemu-system-x86_64 -help >tests/qemuhelpdata/qemu-1.1.0
      qemu-system-x86_64 \
          -device ? \
          -device pci-assign,? \
          -device virtio-blk-pci,? \
          -device virtio-net-pci,? \
          -device scsi-disk,? 2>tests/qemuhelpdata/qemu-1.1.0-device
      ae953f51
    • B
      Fix for parallel port passthrough for QEMU · 7508338f
      Beat Jörg 提交于
      I came across a bug that the command line generated for passthrough
      of the host parallel port /dev/parport0 by libvirt for QEMU is incorrect.
      
      It currently produces:
      -chardev tty,id=charparallel0,path=/dev/parport0
      -device isa-parallel,chardev=charparallel0,id=parallel0
      
      The first parameter is "tty". It sould be "parport".
      
      If I launch qemu with -chardev parport,... it works as expected.
      
      I have already filled a bug report (
      https://bugzilla.redhat.com/show_bug.cgi?id=823879 ), the topic was
      already on the list some months ago:
      
      https://www.redhat.com/archives/libvirt-users/2011-September/msg00095.htmlSigned-off-by: NEric Blake <eblake@redhat.com>
      7508338f
    • E
      command: avoid deadlock on EPIPE situation · 858c2476
      Eric Blake 提交于
      It is possible to deadlock libvirt by having a domain with XML
      longer than PIPE_BUF, and by writing a hook script that closes
      stdin early.  This is because libvirt was keeping a copy of the
      child's stdin read fd open, which means the write fd in the
      parent will never see EPIPE (remember, libvirt should always be
      run with SIGPIPE ignored, so we should never get a SIGPIPE signal).
      Since there is no error, libvirt blocks waiting for a write to
      complete, even though the only reader is also libvirt.  The
      solution is to ensure that only the child can act as a reader
      before the parent does any writes; and then dealing with the
      fallout of dealing with EPIPE.
      
      Thankfully, this is not a security hole - since the only way to
      trigger the deadlock is to install a custom hook script, anyone
      that already has privileges to install a hook script already has
      privileges to do any number of other equally disruptive things
      to libvirt; it would only be a security hole if an unprivileged
      user could install a hook script to DoS a privileged user.
      
      * src/util/command.c (virCommandRun): Close parent's copy of child
      read fd earlier.
      (virCommandProcessIO): Don't let EPIPE be fatal; the child may
      be done parsing input.
      * tests/commandhelper.c (main): Set up a SIGPIPE situation.
      * tests/commandtest.c (test20): Trigger it.
      * tests/commanddata/test20.log: New file.
      858c2476
  9. 02 6月, 2012 1 次提交
    • M
      qemu: move -name arg to be 1st in "ps x" output · 195fa214
      Marti Raudsepp 提交于
      Currently, monitoring QEMU virtual machines with standard Unix
      sysadmin tools is harder than it has to be. The QEMU command line is
      often miles long and mostly redundant, it's hard to tell which process
      is which.
      
      This patch reorders the QEMU -name argument to be the first, so it's
      immediately visible in "ps x", htop and "atop -c" output.
      195fa214
  10. 28 5月, 2012 1 次提交
    • E
      build: silence libtool during tests · 1d22ba95
      Eric Blake 提交于
      Libtool is picky about linking against a module library (aka a .so);
      giving lots of warnings like this in the tests directory:
      
        CCLD   networkxml2argvtest
      
      *** Warning: Linking the executable networkxml2argvtest against the loadable module
      *** libvirt_driver_network.so is not portable!
      
      Fix that by splitting things into a convenience library which can
      be used directly by the tests, and making the real .so just wrap
      the convenience library.
      
      Based on a suggestion by Daniel P. Berrange.
      
      * configure.ac (--with-driver-modules): Fix help test.
      * src/Makefile.am (libvirt_driver_xen.la, libvirt_driver_libxl.la)
      (libvirt_driver_qemu.la, libvirt_driver_lxc.la)
      (libvirt_driver_uml.la): Factor into new convenience libraries.
      * tests/Makefile.am (xen_LDADDS, qemu_LDADDS, lxc_LDADDS)
      (networkxml2argvtest_LDADD): Link to convenience libraries, not
      shared libraries.
      1d22ba95
  11. 26 5月, 2012 1 次提交
    • E
      build: silence libtool warning on probes.o · 0159295d
      Eric Blake 提交于
      Libtool supports linking directly against .o files on some platforms
      (such as Linux), which happens to be the only place where we are
      actually doing that (for the dtrace-generated probes.o files).  However,
      it raises a big stink about the non-portability, even though we don't
      attempt it on platforms where it would actually fail:
      
        CCLD   libvirt_driver_qemu.la
      
      *** Warning: Linking the shared library libvirt_driver_qemu.la against
      the non-libtool
      *** objects  libvirt_qemu_probes.o is not portable!
      
      This shuts libtool up by creating a proper .lo file that matches
      what libtool normally expects.
      
      * src/Makefile.am (%_probes.lo): New rule.
      (libvirt_probes.stp, libvirt_qemu_probes.stp): Simplify into...
      (%_probes.stp): ...shorter rule.
      (CLEANFILES): Clean new .lo files.
      (libvirt_la_BUILT_LIBADD, libvirt_driver_qemu_la_LIBADD)
      (libvirt_lxc_LDADD, virt_aa_helper_LDADD): Link against .lo file.
      * tests/Makefile.am (PROBES_O, qemu_LDADDS): Likewise.
      0159295d
  12. 25 5月, 2012 2 次提交
    • E
      tests: run valgrind on real executables, not libtool wrappers · 428fc2bf
      Eric Blake 提交于
      * tests/Makefile.am (valgrind): Use libtool's ability to bypass
      libtool wrappers when running valgrind.
      428fc2bf
    • E
      tests: back to short test names · ee407255
      Eric Blake 提交于
      With the switch to modules by default, I was getting super long
      test output:
      
      TEST: /home/remote/eblake/libvirt/tests/.libs/lt-interfacexml2xmltest
      
      compared to the former:
      
      TEST: interfacexml2xmltest
      
      * tests/testutils.c (virtTestMain): Trim off libtool goop.
      ee407255
  13. 24 5月, 2012 4 次提交
    • D
      Add test case for loading driver modules · 6976f9e8
      Daniel P. Berrange 提交于
      To ensure all symbols used by loadable driver modules are
      exported in libvirt.so, add a test suite that simply loads
      each driver in turn
      
      * tests/Makefile.am, tests/virdrivermoduletest.c: Add
        a test case for loading drivers
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      6976f9e8
    • D
      Split QEMU dtrace probes into separate file · a4e45a06
      Daniel P. Berrange 提交于
      When building as driver modules, it is not possible for the QEMU
      driver module to reference the DTrace/SystemTAP probes linked into
      the main libvirt.so. Thus we need to move the QEMU probes into a
      separate file 'libvirt_qemu_probes.d'. Also rename the existing
      file from 'probes.d' to 'libvirt_probes.d' while we're at it
      
      * daemon/Makefile.am, src/internal.h: Include libvirt_probes.h
        instead of probes.h
      * src/Makefile.am: Add rules for libvirt_qemu_probes.d
      * src/qemu/qemu_monitor.c, src/qemu/qemu_monitor_json.c,
        src/qemu/qemu_monitor_text.c: Include libvirt_qemu_probes.h
      * src/libvirt_probes.d: Rename from probes.d
      * src/libvirt_qemu_probes.d: QEMU specific probes formerly
        in probes.d
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      a4e45a06
    • D
      Remove libvirt_test.la library · 6cd4b1fe
      Daniel P. Berrange 提交于
      The libvirt_test.la library was introduced to allow test suites
      to reference internal-only symbols. These days, nearly every
      symbol we care about is in src/libvirt_private.syms, so there
      is no need for libvirt_test.la to continue to exist
      
      * src/Makefile.am: Delete libvirt_test.la & add new .syms files
      * src/libvirt_private.syms: Export symbols needed by test suite
      * tests/Makefile.am: Link to libvirt_test.la. Ensure LXC tests link
        to network_driver.la
      * src/libvirt_esx.syms, src/libvirt_openvz.syms: Add exports needed
        by test suite
      6cd4b1fe
    • G
      openvz: support file system quota reporting · 680ac813
      Guido Günther 提交于
      680ac813
  14. 22 5月, 2012 2 次提交
    • E
      virBuffer: add way to trim back extra text · cdb87b1c
      Eric Blake 提交于
      I'm tired of writing:
      
      bool sep = false;
      while (...) {
          if (sep)
             virBufferAddChar(buf, ',');
          sep = true;
          virBufferAdd(buf, str);
      }
      
      This makes it easier, allowing one to write:
      
      while (...)
          virBufferAsprintf(buf, "%s,", str);
      virBufferTrim(buf, ",", -1);
      
      to trim any remaining comma.
      
      * src/util/buf.h (virBufferTrim): Declare.
      * src/util/buf.c (virBufferTrim): New function.
      * tests/virbuftest.c (testBufTrim): Test it.
      cdb87b1c
    • W
      storage backend: Add RBD (RADOS Block Device) support · 74951ead
      Wido den Hollander 提交于
      This patch adds support for a new storage backend with RBD support.
      
      RBD is the RADOS Block Device and is part of the Ceph distributed storage
      system.
      
      It comes in two flavours: Qemu-RBD and Kernel RBD, this storage backend only
      supports Qemu-RBD, thus limiting the use of this storage driver to Qemu only.
      
      To function this backend relies on librbd and librados being present on the
      local system.
      
      The backend also supports Cephx authentication for safe authentication with
      the Ceph cluster.
      
      For storing credentials it uses the built-in secret mechanism of libvirt.
      Signed-off-by: NWido den Hollander <wido@widodh.nl>
      74951ead
  15. 21 5月, 2012 1 次提交
    • S
      nwfilter: Add support for ipset · a3f3ab4c
      Stefan Berger 提交于
      This patch adds support for the recent ipset iptables extension
      to libvirt's nwfilter subsystem. Ipset allows to maintain 'sets'
      of IP addresses, ports and other packet parameters and allows for
      faster lookup (in the order of O(1) vs. O(n)) and rule evaluation
      to achieve higher throughput than what can be achieved with
      individual iptables rules.
      
      On the command line iptables supports ipset using
      
      iptables ... -m set --match-set <ipset name> <flags> -j ...
      
      where 'ipset name' is the name of a previously created ipset and
      flags is a comma-separated list of up to 6 flags. Flags use 'src' and 'dst'
      for selecting IP addresses, ports etc. from the source or
      destination part of a packet. So a concrete example may look like this:
      
      iptables -A INPUT -m set --match-set test src,src -j ACCEPT
      
      Since ipset management is quite complex, the idea was to leave ipset 
      management outside of libvirt but still allow users to reference an ipset.
      The user would have to make sure the ipset is available once the VM is
      started so that the iptables rule(s) referencing the ipset can be created.
      
      Using XML to describe an ipset in an nwfilter rule would then look as
      follows:
      
        <rule action='accept' direction='in'>
          <all ipset='test' ipsetflags='src,src'/>
        </rule>
      
      The two parameters on the command line are also the two distinct XML attributes
      'ipset' and 'ipsetflags'.
      
      FYI: Here is the man page for ipset:
      
      https://ipset.netfilter.org/ipset.man.html
      
      Regards,
          Stefan
      a3f3ab4c
  16. 18 5月, 2012 2 次提交
  17. 17 5月, 2012 1 次提交
    • E
      nodeinfo: test more details · 5a8262a0
      Eric Blake 提交于
      Make it obvious why we need Osier's patch in commit 10d9038b
      to fix NUMA parsing of an AMD machine with two cores sharing
      a socket id.
      
      * tests/nodeinfotest.c (linuxTestCompareFiles): Enhance the test.
      * tests/nodeinfodata/linux-nodeinfo-sysfs-test-*-output.txt: Update.
      5a8262a0
  18. 16 5月, 2012 5 次提交
    • D
      Pass the virt driver name into security drivers · 73580c60
      Daniel Walsh 提交于
      To allow the security drivers to apply different configuration
      information per hypervisor, pass the virtualization driver name
      into the security manager constructor.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      73580c60
    • J
      qemu: Add support for -no-user-config · 63b42436
      Jiri Denemark 提交于
      Thanks to this new option we are now able to use modern CPU models (such
      as Westmere) defined in external configuration file.
      
      The qemu-1.1{,-device} data files for qemuhelptest are filled in with
      qemu-1.1-rc2 output for now. I will update those files with real
      qemu-1.1 output once it is released.
      63b42436
    • D
      Set a sensible default master start port for ehci companion controllers · 03b804a2
      Daniel P. Berrange 提交于
      The uhci1, uhci2, uhci3 companion controllers for ehci1 must
      have a master start port set. Since this value is predictable
      we should set it automatically if the app does not supply it
      03b804a2
    • D
      Fix logic for assigning PCI addresses to USB2 companion controllers · 1ebd52cb
      Daniel P. Berrange 提交于
      Currently each USB2 companion controller gets put on a separate
      PCI slot. Not only is this wasteful of PCI slots, but it is not
      in compliance with the spec for USB2 controllers. The master
      echi1 and all companion controllers should be in the same slot,
      with echi1 in function 7, and uhci1-3 in functions 0-2 respectively.
      
      * src/qemu/qemu_command.c: Special case handling of USB2 controllers
        to apply correct pci slot assignment
      * tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.args,
        tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.xml: Expand
        test to cover automatic slot assignment
      1ebd52cb
    • D
      Allow stack traces to be included with log messages · 54856395
      Daniel P. Berrange 提交于
      Sometimes it is useful to see the callpath for log messages.
      This change enhances the log filter syntax so that stack traces
      can be show by setting '1:+NAME' instead of '1:NAME'.
      
      This results in output like:
      
      2012-05-09 14:18:45.136+0000: 13314: debug : virInitialize:414 : register drivers
      /home/berrange/src/virt/libvirt/src/.libs/libvirt.so.0(virInitialize+0xd6)[0x7f89188ebe86]
      /home/berrange/src/virt/libvirt/tools/.libs/lt-virsh[0x431921]
      /lib64/libc.so.6(__libc_start_main+0xf5)[0x3a21e21735]
      /home/berrange/src/virt/libvirt/tools/.libs/lt-virsh[0x40a279]
      
      2012-05-09 14:18:45.136+0000: 13314: debug : virRegisterDriver:775 : driver=0x7f8918d02760 name=Test
      /home/berrange/src/virt/libvirt/src/.libs/libvirt.so.0(virRegisterDriver+0x6b)[0x7f89188ec717]
      /home/berrange/src/virt/libvirt/src/.libs/libvirt.so.0(+0x11b3ad)[0x7f891891e3ad]
      /home/berrange/src/virt/libvirt/src/.libs/libvirt.so.0(virInitialize+0xf3)[0x7f89188ebea3]
      /home/berrange/src/virt/libvirt/tools/.libs/lt-virsh[0x431921]
      /lib64/libc.so.6(__libc_start_main+0xf5)[0x3a21e21735]
      /home/berrange/src/virt/libvirt/tools/.libs/lt-virsh[0x40a279]
      
      * docs/logging.html.in: Document new syntax
      * configure.ac: Check for execinfo.h
      * src/util/logging.c, src/util/logging.h: Add support for
        stack traces
      * tests/testutils.c: Adapt to API change
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      54856395
  19. 15 5月, 2012 1 次提交
    • O
      nodeinfo: Get the correct CPU number on AMD Magny Cours platform · 10d9038b
      Osier Yang 提交于
      "Instead of developing one CPU with 12 cores, the Magny Cours is
      actually two 6 core “Bulldozer” CPUs combined in to one package"
      
      I.e, each package has two NUMA nodes, and the two numa nodes share
      the same core ID set (0-6), which means parsing the cores number
      from sysfs doesn't work in this case.
      
      And the wrong CPU number could cause three problems for libvirt:
      
      1) performance lost
      
        A domain without "cpuset" or "placement='auto'" (to drive numad)
      specified will be only pinned to part of the CPUs.
      
      2) domain can be started
      
        If a domain uses numad, and the advisory nodeset returned from
      numad contains node which exceeds the range of wrong total CPU
      number. The domain will fail to start, as the bitmask passed to
      sched_setaffinity could be fully filled with zero.
      
      3) wrong CPU number affects lots of stuffs.
      
        E.g. for command "virsh vcpuinfo", "virsh vcpupin", it will always
      output with the truncated CPU list.
      
      For more details:
      
      https://www.redhat.com/archives/libvir-list/2012-May/msg00607.html
      
      This patch is to fix the problem by parsing /proc/cpuinfo to get
      the value of field "cpu cores", and use it as nodeinfo->cores if
      it's greater than the cores number from sysfs.
      10d9038b