1. 12 6月, 2014 1 次提交
  2. 11 6月, 2014 2 次提交
    • J
      vmware: make version parsing more robust · 775bb9b1
      Jean-Baptiste Rouault 提交于
      Since commit d69415d4, vmware version is parsed from both stdout and
      stderr. This patch makes version parsing work even if there is garbage
      (libvirt debug messages for example) in the command output.
      
      Add test data for this case.
      775bb9b1
    • M
      virInterface: Expose link state & speed · 3db89662
      Michal Privoznik 提交于
      Currently it is not possible to determine the speed of an interface
      and whether a link is actually detected from the API. Orchestrating
      platforms want to be able to determine when the link has failed and
      where multiple speeds may be available which one the interface is
      actually connected at. This commit introduces an extension to our
      interface XML (without implementation to interface driver backends):
      
        <interface type='ethernet' name='eth0'>
          <start mode='none'/>
          <mac address='aa:bb:cc:dd:ee:ff'/>
          <link speed='1000' state='up'/>
          <mtu size='1492'/>
          ...
        </interface>
      
      Where @speed is negotiated link speed in Mbits per second, and state
      is the current NIC state (can be one of the following:  "unknown",
      "notpresent", "down", "lowerlayerdown","testing", "dormant", "up").
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      3db89662
  3. 10 6月, 2014 1 次提交
    • Y
      Add vbox_snapshot_conf struct · 4dc5d8f1
      Yohan BELLEGUIC 提交于
      This structure contains the data to be saved in the VirtualBox XML file
      and can be manipulated with severals exposed functions.
      The structure is created by vboxSnapshotLoadVboxFile taking the
      machine XML file.
      It also can rewrite the XML by using vboxSnapshotSaveVboxFile.
      4dc5d8f1
  4. 09 6月, 2014 1 次提交
    • L
      test: display qemuParseCommandline warnings when VIR_TEST_DEBUG > 0 · b7b3fb56
      Laine Stump 提交于
      qmeuargv2xmltest.c would fail any test that logged anything during
      qemuParseCommandline(), but then discard the log message, even with
      VIR_TEST_DEBUG=2. This patch outputs the log messages with
      fprintf(stderr,...) when debug logging is on.
      
      In the process of modifying that logic, the testInfo data was made
      more similar to that of qemuxml2argvtest.c - rather than turning
      info->extraFlags into a bool, an enum of flags is defined, the info
      struct is given an "unsigned int flags", and FLAG_EXPECT_WARNING is
      saved into info->flags, to be checked during the test; this will make
      it easier to add other FLAG_EXPECT_* items in the future.
      b7b3fb56
  5. 07 6月, 2014 1 次提交
    • E
      conf: alter disk mirror xml output · 7c6fc394
      Eric Blake 提交于
      Now that we track a disk mirror as a virStorageSource, we might
      as well update the XML to theoretically allow any type of
      mirroring destination (not just a local file).  A later patch
      will also be reusing <mirror> to track the block commit of the
      top layer of a chain, which is another case where libvirt needs
      to update the backing chain after the job is finally pivoted,
      and since backing chains can have network backing files as the
      destination to commit into, it makes more sense to display that
      in the XML.
      
      This patch changes output-only XML; it was already documented
      that <mirror> does not affect a domain definition at this point
      (because qemu doesn't provide persistent bitmaps yet).  Any
      application that was starting a block copy job with older libvirt
      and then relying on the domain XML to determine if it was
      complete will no longer be able to access the file= and format=
      attributes of mirror that were previously used.  However, this is
      not going to be a problem in practice: the only time a block copy
      job works is on a transient domain, and any app that is managing
      a transient domain probably already does enough of its own
      bookkeeping to know which file it is mirroring into without
      having to re-read it from the libvirt XML.  The one thing that
      was likely to be used in a mirroring job was the ready=
      attribute, which is unchanged.  Meanwhile, I made sure the schema
      and parser still accept the old format, even if we no longer
      output it, so that upgrading from an older version of libvirt is
      seamless.
      
      * docs/schemas/domaincommon.rng (diskMirror): Alter definition.
      * src/conf/domain_conf.c (virDomainDiskDefParseXML): Parse two
      styles of mirror elements.
      (virDomainDiskDefFormat): Output new style.
      * tests/qemuxml2argvdata/qemuxml2argv-disk-mirror-old.xml: New
      file, copied from...
      * tests/qemuxml2argvdata/qemuxml2argv-disk-mirror.xml: ...here
      before modernizing.
      * tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-old*: New
      files.
      * tests/qemuxml2xmltest.c (mymain): Test both styles.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      7c6fc394
  6. 06 6月, 2014 5 次提交
    • E
      conf: store disk source as pointer, for easier manipulation · c123ef71
      Eric Blake 提交于
      As part of the work on backing chains, I'm finding that it would
      be easier to directly manipulate chains of pointers (adding a
      snapshot merely adjusts pointers to form the correct list) rather
      than copy data from one struct to another.  This patch converts
      domain disk source to be a pointer.
      
      In this patch, the pointer is ALWAYS allocated (thanks in part to
      the previous patch forwarding all disk def allocation through a
      common point), and all other changse are just mechanical fallout of
      the new type; there should be no functional change.  It is possible
      that we may want to leave the pointer NULL for a cdrom with no
      medium in a later patch, but as that requires a closer audit of the
      source to ensure we don't fault on a null dereference, I didn't do
      it here.
      
      * src/conf/domain_conf.h (_virDomainDiskDef): Change type of src.
      * src/conf/domain_conf.c: Adjust all clients.
      * src/security/security_selinux.c: Likewise.
      * src/qemu/qemu_domain.c: Likewise.
      * src/qemu/qemu_command.c: Likewise.
      * src/qemu/qemu_conf.c: Likewise.
      * src/qemu/qemu_process.c: Likewise.
      * src/qemu/qemu_migration.c: Likewise.
      * src/qemu/qemu_driver.c: Likewise.
      * src/lxc/lxc_driver.c: Likewise.
      * src/lxc/lxc_controller.c: Likewise.
      * tests/securityselinuxlabeltest.c: Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      c123ef71
    • J
      Fix virbitmaptest on 32-bit · 61c44f58
      Ján Tomko 提交于
      My commit 7d8afc47 was passing the incorrect size to
      virBitmapDataToString in the newly added test.
      61c44f58
    • M
      nodedev: Export NUMA node locality for PCI devices · 1c702778
      Michal Privoznik 提交于
      A PCI device can be associated with a specific NUMA node. Later, when
      a guest is pinned to one NUMA node the PCI device can be assigned on
      different NUMA node. This makes DMA transfers travel across nodes and
      thus results in suboptimal performance. We should expose the NUMA node
      locality for PCI devices so management applications can make better
      decisions.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      1c702778
    • J
      Introduce virBitmapDataToString · 7d8afc47
      Ján Tomko 提交于
      For converting bitmap data to human-readable strings.
      7d8afc47
    • M
      Remove unnecessary empty first lines · 3de462fe
      Martin Kletzander 提交于
      Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
      3de462fe
  7. 05 6月, 2014 1 次提交
  8. 04 6月, 2014 1 次提交
    • M
      virCaps: Expose distance between host NUMA nodes · 8ba0a58f
      Michal Privoznik 提交于
      If user or management application wants to create a guest,
      it may be useful to know the cost of internode latencies
      before the guest resources are pinned. For example:
      
      <capabilities>
      
        <host>
          ...
          <topology>
            <cells num='2'>
              <cell id='0'>
                <memory unit='KiB'>4004132</memory>
                <distances>
                  <sibling id='0' value='10'/>
                  <sibling id='1' value='20'/>
                </distances>
                <cpus num='2'>
                  <cpu id='0' socket_id='0' core_id='0' siblings='0'/>
                  <cpu id='2' socket_id='0' core_id='2' siblings='2'/>
                </cpus>
              </cell>
              <cell id='1'>
                <memory unit='KiB'>4030064</memory>
                <distances>
                  <sibling id='0' value='20'/>
                  <sibling id='1' value='10'/>
                </distances>
                <cpus num='2'>
                  <cpu id='1' socket_id='0' core_id='0' siblings='1'/>
                  <cpu id='3' socket_id='0' core_id='2' siblings='3'/>
                </cpus>
              </cell>
            </cells>
          </topology>
          ...
        </host>
        ...
      </capabilities>
      
      We can see the distance from node1 to node0 is 20 and within nodes 10.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      8ba0a58f
  9. 03 6月, 2014 8 次提交
    • P
      tests: monitor: json: Fix error message when returning json in json · 9046f910
      Peter Krempa 提交于
      The qemu JSON monitor test allows to test also expected command
      arguments. As the error from the monitor simulator is returned as a
      simulated qemu error (in JSON) all other JSON contained in the error
      message needs to be escaped. This will happen if the monitor command
      under test receives a JSON array as an argument.
      
      This will improve the error message from:
      libvirt:  error : internal error: cannot parse json { "error":  { "desc":
      "Invalid value of argument 'keys' of command 'send-key': expected 'ble'
      got '[{"type":"number","data":43},{"type":"number","data":26},
      {"type":"number","data":46},{"type":"number","data":32}]'",
      "class": "UnexpectedCommand" } }: lexical error: invalid string in json text.
      
      To:
      libvirt: QEMU Driver error : internal error: unable to execute QEMU
      command 'send-key': Invalid value of argument 'keys' of command
      'send-key': expected 'ble' got '[{"type":"number","data":43},
      {"type":"number","data":26},{"type":"number","data":46},
      {"type":"number","data":32}]'
      
      This improvement will not have any effect on tests executing as
      expected, but it will help test development.
      9046f910
    • P
      tests: Build virstoragetest only when storage driver is compiled too · 835dc013
      Peter Krempa 提交于
      virstoragetest now requires parts of the storage driver to be built.
      Without this change the test can't be compiled on platforms that don't
      build the storage driver (mingw).
      
      make[2]: *** No rule to make target `../src/libvirt_driver_storage_impl.la', needed by `virstoragetest.exe'.  Stop.
      
      Broken by commit 713cc3b0
      835dc013
    • P
      qemu: monitor: Fix type of holdtime argument in qemuMonitorJSONSendKey · ce2107a9
      Peter Krempa 提交于
      qemuMonitorJSONSendKey declares the "holdtime" argument as unsigned int
      while the command was constructed in qemuMonitorJSONMakeCommand using
      the "P" modifier which took a unsigned long from the variable
      arguments which then made it possible to access uninitialized memory.
      
      This broke the qemumonitorjsontest on 32bit fedora 20:
      64) qemuMonitorJSONSendKey
      ... libvirt: QEMU Driver error : internal error: unsupported data type 'W' for arg 'WVSƒì ‹D$0è‘wÿÿÃAå' FAILED
      
      Uncovered by upstream commit f744b831.
      
      Additionally add test for the hold-time option.
      ce2107a9
    • P
      tests: storagetest: Unify and reformat storage chain format string · 8ed19d8c
      Peter Krempa 提交于
      All the fields crammed into two lines weren't easy to parse by human
      eyes. Split up the format string into lines and put it into a central
      variable so that changes in two places aren't necessary.
      8ed19d8c
    • P
      util: string: Return element count from virStringSplit · 68226749
      Peter Krempa 提交于
      To allow using the array manipulation macros on the arrays returned by
      virStringSplit we need to know the count of the elements in the array.
      Modify virStringSplit to return this value, rename it and add a helper
      with the old name so that we don't need to update all the code.
      68226749
    • P
      storage: Change to new backing store parser · b225444e
      Peter Krempa 提交于
      Use the new backing store parser in the backing chain crawler. This
      change needs one test change where information about the NBD image are
      now parsed differently.
      b225444e
    • P
      test: storage: Initialize storage source to correct type · 29aabe73
      Peter Krempa 提交于
      Stat the path of the storage file being tested to set the correct type
      into the virStorageSource. This will avoid breaking the test suite when
      inquiring metadata of directory paths in the next patches.
      29aabe73
    • P
      storage: Move virStorageFileGetMetadata to the storage driver · 713cc3b0
      Peter Krempa 提交于
      My future work will modify the metadata crawler function to use the
      storage driver file APIs to access the files instead of accessing them
      directly so that we will be able to request the metadata for remote
      files too. To avoid linking the storage driver to every helper file
      using the utils code, the backing chain traversal function needs to be
      moved to the storage driver source.
      
      Additionally the virt-aa-helper and virstoragetest programs need to be
      linked with the storage driver as a result of this change.
      713cc3b0
  10. 01 6月, 2014 1 次提交
    • L
      util: fix DST end date in virtimetest timezones · 83c41ceb
      Laine Stump 提交于
      Reported by: Roman Bogorodskiy <bogorodskiy@gmail.com>
      
      Some of the tests for virTimeLocalOffsetFromUTC set an imaginary
      timezone that attempts to force dyalight savings time active all the
      time by setting a start date of 0/00:00:00 and end date of
      366/23:59:59. Since the day is 0-based, 366 really means "day 367"
      which will never occur - this was an attempt to eliminate problems
      with DST not being active in some cases right around midnight on
      January 1. Even though it didn't completely solve the problem, it
      didn't seem to cause harm so it was left in the test timezones.
      
      Although Linux glibc doesn't mind having a DST end date of 366,
      FreeBSD refuses to use such timezones, so the tests fail. This patch
      changes the 366 to 365.
      
      This may or may not cause failure of the remaining DST tests around
      midnight Jan 1. If so, we will need to disable those tests at year's
      end too.
      83c41ceb
  11. 31 5月, 2014 1 次提交
    • E
      build: avoid compiler warning on 32-bit platform · c7ca02e6
      Eric Blake 提交于
      On a 32-bit platform:
      
      virstringtest.c: In function 'mymain':
      virstringtest.c:673: warning: this decimal constant is unsigned only in ISO C90
      
      I already had a comment in the file about the 64-bit counterpart;
      the easiest fix was to make both sites use the standardized macro
      that is guaranteed to work.
      
      * tests/virstringtest.c (mymain): Minimum signed integers are a pain.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      c7ca02e6
  12. 29 5月, 2014 3 次提交
    • L
      util: fix virTimeLocalOffsetFromUTC DST processing · 26d43113
      Laine Stump 提交于
      The original version of virTimeLocalOffsetFromUTC() would fail for
      certain times of the day if daylight savings time was active. This
      could most easily be seen by uncommenting the TEST_LOCALOFFSET() cases
      that include a DST setting.
      
      After a lot of experimenting, I found that the way to solve it in
      almost all test cases is to set tm_isdst = -1 in the struct tm prior
      to calling mktime(). Once this is done, the correct offset is returned
      for all test cases at all times except the two hours just after
      00:00:00 Jan 1 UTC - during that time, any timezone that is *behind*
      UTC, and that is supposed to always be in DST will not have DST
      accounted for in its offset.
      
      I believe that the code of virTimeLocalOffsetFromUTC() actually is
      correct for all cases, but the problem still encountered is due to our
      inability to come up with a TZ string that properly forces DST to
      *always* be active. Since a modfication of the (currently fixed)
      expected result data to account for this would necessarily use the
      same functions that we're trying to test, I've instead just made the
      test program conditionally bypass the problematic cases if the current
      date is either December 31 or January 1. This way we get maximum
      testing during 363 days of the year, but don't get false failures on
      Dec 31 and Jan 1.
      26d43113
    • J
      maint: cleanup detection of const'ness of selinux ctx · b109c097
      Jim Fehlig 提交于
      Commit 292d3f2d fixed the build with libselinux 2.3, but missed
      some suggestions by eblake
      
      https://www.redhat.com/archives/libvir-list/2014-May/msg00977.html
      
      This patch changes the macro introduced in 292d3f2d to either be
      empty in the case of newer libselinux, or contain 'const' in the
      case of older libselinux.  The macro is then used directly in
      tests/securityselinuxhelper.c.
      b109c097
    • C
      build: fix build with libselinux 2.3 · 292d3f2d
      Cédric Bosdonnat 提交于
      Several function signatures changed in libselinux 2.3, now taking
      a 'const char *' instead of 'security_context_t'.  The latter is
      defined in selinux/selinux.h as
      
        typedef char *security_context_t;
      Signed-off-by: NEric Blake <eblake@redhat.com>
      292d3f2d
  13. 27 5月, 2014 2 次提交
  14. 26 5月, 2014 1 次提交
    • L
      util: new function virTimeLocalOffsetFromUTC · 1cddaea7
      Laine Stump 提交于
      Since there isn't a single libc API to get this value, this patch
      supplies one which gets the value by grabbing current time, then
      converting that into a struct tm with gmtime_r(), then back to a
      time_t using mktime.
      
      The returned value is the difference between UTC and localtime in
      seconds. If localtime is ahead of UTC (east) the offset will be a
      positive number, and if localtime is behind UTC (west) the offset will
      be negative.
      
      This function should be POSIX-compliant, and is threadsafe, but not
      async signal safe. If it was ever necessary to know this value in a
      child process, we could cache it with a one-time init function when
      libvirtd starts, then just supply the cached value, but that
      complexity isn't needed for current usage; that would also have the
      problem that it might not be accurate after a local daylight savings
      boundary.
      
      (If it weren't for DST, we could simply replace this entire function
      with "-timezone"; timezone contains the offset of the current timezone
      (negated from what we want) but doesn't account for DST. And in spite
      of being guaranteed by POSIX, it isn't available on older versions of
      mingw.)
      Signed-off-by: NEric Blake <eblake@redhat.com>
      1cddaea7
  15. 21 5月, 2014 1 次提交
    • E
      tests: avoid dlsym mocking on mingw · fa8701ea
      Eric Blake 提交于
      I got a build failure when cross-compiling to mingw with the
      mingw64-dbus package installed:
      
        CC       virmockdbus_la-virmockdbus.lo
      ../../tests/virmockdbus.c:29:6: error: 'dbus_connection_set_change_sigpipe' redeclared without dllimport attribute: previous dllimport ignored [-Werror=attributes]
       VIR_MOCK_STUB_VOID_ARGS(dbus_connection_set_change_sigpipe,
            ^
      ../../tests/virmockdbus.c:33:18: error: 'dbus_bus_get' redeclared without dllimport attribute: previous dllimport ignored [-Werror=attributes]
       VIR_MOCK_STUB_RET_ARGS(dbus_bus_get,
      ...
      
      Well duh - mingw lacks dlopen and friends, even if it can support
      dbus.  A similar failure occured in virsystemdtest.c; but in that
      file, we know that systemd is a Linux-only concept.
      
      * tests/virmockdbus.c: Cripple on mingw.
      * tests/virsystemdtest.c: Cripple on non-Linux.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      fa8701ea
  16. 19 5月, 2014 1 次提交
    • J
      conf: fix seclabels for chardevs · 5ac9b9dd
      Ján Tomko 提交于
      We allow a seclabel to be specified in the <source> element
      of a chardev:
      
      <serial type='file'>
        <source path='/tmp/serial.file'>
          <seclabel model='dac' relabel='no'/>
        </source>
      </serial>
      
      But we format it outside the source:
      
      <serial type='file'>
        <source path='/tmp/serial.file'/>
        <target port='0'/>
          <seclabel model='dac' relabel='no'/>
      </serial>
      
      Move the formatting inside the source to fix this to make the
      seclabel persistent across XML format->parse.
      
      Introduced by commit f8b08d0e 'Add <seclabel> to character devices.'
      5ac9b9dd
  17. 13 5月, 2014 1 次提交
  18. 07 5月, 2014 1 次提交
    • J
      Add support for timestamping QEMU logs · f3be5f0c
      Ján Tomko 提交于
      QEMU commit 5e2ac51 added a boolean '-msg timestamp=[on|off]'
      option, which can enable timestamps on errors:
      $ qemu-system-x86_64 -msg timestamp=on zghhdorf
      2014-04-09T13:25:46.779484Z qemu-system-x86_64: -msg timestamp=on: could
      not open disk image zghhdorf: Could not open 'zghhdorf': No such file or
      directory
      
      Enable this timestamp if the QEMU binary supports it.
      
      Add a 'log_timestamp' option to qemu.conf for disabling this behavior.
      f3be5f0c
  19. 06 5月, 2014 3 次提交
    • L
      qemu: specify domain in host-side PCI addresses when needed/supported · 1e947cf7
      Laine Stump 提交于
      This uses the new QEMU_CAPS_HOST_PCI_MULTIDOMAIN capability when
      present, for -devivce pci-assign, -device vfio-pci, and -pcidevice.
      
      While creating tests for this new functionality, I noticed that the
      xmls for two existing tests had erroneously specified an
      until-now-ignored domain="0x0002", so I corrected those two tests, and
      also added two failure tests to be sure that we alert users who
      attempt to use a non-zero domain with a qemu that doesn't support it.
      1e947cf7
    • L
      qemu: add host-pci-multidomain capability · 17133e37
      Laine Stump 提交于
      Quite a long time ago, (apparently between qemu 0.12 and 0.13) qemu
      quietly began supporting the optional specification of a domain in the
      host-side address of all pci passthrough commands (by simply
      prepending it to the bus:slot.function format, as
      "dddd:bb:ss.f"). Since machines with multiple PCI domains are very
      rare, this never came up in practice, so libvirt was never updated to
      support it.
      
      This patch takes the first step to supporting specification of a non-0
      domain in the host-side address of PCI devices being assigned to a
      domain, by adding a capability bit to indicate support
      "QEMU_CAPS_HOST_PCI_MULTIDOMAIN", and detect it. Since this support
      was added in a version prior to the minimum version required for
      QMP-style capabilities detection, the capability is always enabled for
      any qemu that uses QMP for capabilities detection. For older qemus,
      the only clue that a domain can be specified in the host pci address
      is the presence of the string "[seg:]" in the help string for
      -pcidevice. (Ironically, libvirt will not be modified to support
      specification of domain for -pcidevice, since any qemu new enough for
      us to care about also supports "-device pci-assign" or "-device
      vfio-pci", which are greatly preferred).
      17133e37
    • J
      util: use typedefs for enums in "src/util/" directory · 1b14c449
      Julio Faracco 提交于
      In "src/util/" there are many enumeration (enum) declarations.
      Sometimes, it's better using a typedef for variable types,
      function types and other usages. Other enumeration will be
      changed to typedef's in the future.
      Signed-off-by: NJulio Faracco <jcfaracco@gmail.com>
      Signed-off-by: NEric Blake <eblake@redhat.com>
      1b14c449
  20. 04 5月, 2014 1 次提交
    • R
      bhyve: improve bhyve_command.c testability · 07e371fc
      Roman Bogorodskiy 提交于
      * bhyve_command.c (bhyveBuildNetArgStr, virBhyveProcessBuildBhyveCmd):
        add dryRun mode which doesn't create any devices when enabled
      * bhyve_command.c (virBhyveProcessBuildBhyveCmd,
        virBhyveProcessBuildDestroyCmd, virBhyveProcessBuildLoadCmd): accept
        virDomainDefPtr instead of virDomainObjPtr.
      07e371fc
  21. 03 5月, 2014 2 次提交
    • G
      Explicitly link virfirewalltest and virsystemdtest against dbus · 4bdb5037
      Guido Günther 提交于
      This fixes link failures like:
      
        CCLD     virfirewalltest
        /usr/bin/ld: virfirewalltest-virfirewalltest.o: undefined reference to
        symbol 'dbus_message_iter_init_append'
      4bdb5037
    • G
      qemuxml2argvtest: Don't use privileged mode upfront · 3cee4c05
      Guido Günther 提交于
      When building packages in a clean chroot the QEMU_USER and QEMU_GROUP
      don't exist making VirQemuDriverConfigNew fail with privileged=true.
      
      Avoid that by not requiring privileged mode upfront but setting it later
      so we skip the user/group existence check.
      
      This solution was suggested by Daniel P. Berrange and tested by Martin
      Kletzander.
      3cee4c05
  22. 02 5月, 2014 1 次提交