1. 04 2月, 2014 3 次提交
    • L
      network: change default of forwardPlainNames to 'yes' · 66f75925
      Laine Stump 提交于
      The previous patch fixed "forwardPlainNames" so that it really is
      doing only what is intended, but left the default to be
      "forwardPlainNames='no'". Discussion around the initial version of
      that patch led to the decision that the default should instead be
      "forwardPlainNames='yes'" (i.e. the original behavior before commit
      f3886825). This patch makes that change to the default.
      66f75925
    • L
      network: only prevent forwarding of DNS requests for unqualified names · f69a6b98
      Laine Stump 提交于
      In commit f3868259 we began adding the options
      
        --domain-needed
        --local=/$mydomain/
      
      to all dnsmasq commandlines with the stated reason of preventing
      forwarding of DNS queries for names that weren't fully qualified
      domain names ("FQDN", i.e. a name that included some "."s and a domain
      name). This was later changed to
      
        domain-needed
        local=/$mydomain/
      
      when we moved the options from the dnsmasq commandline to a conf file.
      
      The original patch on the list, and discussion about it, is here:
      
        https://www.redhat.com/archives/libvir-list/2012-August/msg01594.html
      
      When a domain name isn't specified (mydomain == ""), the addition of
      "domain-needed local=//" will prevent forwarding of domain-less
      requests to the virtualization host's DNS resolver, but if a domain
      *is* specified, the addition of "local=/domain/" will prevent
      forwarding of any requests for *qualified* names within that domain
      that aren't resolvable by libvirt's dnsmasq itself.
      
      An example of the problems this causes - let's say a network is
      defined with:
      
         <domain name='example.com'/>
         <dhcp>
            ..
            <host mac='52:54:00:11:22:33' ip='1.2.3.4' name='myguest'/>
         </dhcp>
      
      This results in "local=/example.com/" being added to the dnsmasq options.
      
      If a guest requests "myguest" or "myguest.example.com", that will be
      resolved by dnsmasq. If the guest asks for "www.example.com", dnsmasq
      will not know the answer, but instead of forwarding it to the host, it
      will return NOT FOUND to the guest. In most cases that isn't the
      behavior an admin is looking for.
      
      A later patch (commit 4f595ba6) attempted to remedy this by adding a
      "forwardPlainNames" attribute to the <dns> element. The idea was that
      if forwardPlainNames='yes' (default is 'no'), we would allow
      unresolved names to be forwarded. However, that patch was botched, in
      that it only removed the "domain-needed" option when
      forwardPlainNames='yes', and left the "local=/mydomain/".
      
      Really we should have been just including the option "--domain-needed
      --local=//" (note the lack of domain name) regardless of the
      configured domain of the network, so that requests for names without a
      domain would be treated as "local to dnsmasq" and not forwarded, but
      all others (including those in the network's configured domain) would
      be forwarded. We also shouldn't include *either* of those options if
      forwardPlainNames='yes'. This patch makes those corrections.
      
      This patch doesn't remedy the fact that default behavior was changed
      by the addition of this feature. That will be handled in a subsequent
      patch.
      f69a6b98
    • M
      virnetdevbandwidthtest: Link with libxml2 · defec0de
      Michal Privoznik 提交于
      I've received a notice over IRC that on some systems, the
      virnetdevbandwidthtest is not linked with libxml:
      
        /usr/bin/ld: virnetdevbandwidthtest.o: undefined reference to symbol 'xmlStrEqual@@LIBXML2_2.4.30'
        /usr/lib/x86_64-linux-gnu/libxml2.so.2: error adding symbols: DSO missing from command line
      
      Trivial way avoiding this is to add LIBXML_LIBS to
      virnetdevbandwidthtest_LDADD.
      defec0de
  2. 31 1月, 2014 2 次提交
  3. 30 1月, 2014 5 次提交
  4. 29 1月, 2014 4 次提交
  5. 27 1月, 2014 3 次提交
  6. 25 1月, 2014 1 次提交
    • M
      tests: Fix PCI test data filenames for Windows · 96f274a9
      Matthias Bolte 提交于
      Windows doesn't allow : in filenames.
      
      Commit 21685c95 added files with a : in
      their names. This broke git operations on Windows as git is not able to
      create those files on clone or pull.
      
      Replace : with - in the offending filenames and adapt the test case.
      96f274a9
  7. 22 1月, 2014 1 次提交
  8. 21 1月, 2014 3 次提交
    • F
      spice: expose the QEMU disable file transfer option · 08d07e5f
      Francesco Romani 提交于
      spice-server offers an API to disable file transfer messages
      on the agent channel between the client and the guest.
      This is supported in qemu through the disable-agent-file-xfer option.
      
      This patch exposes this option to libvirt.
      Adds a new element 'filetransfer', with one property,
      'enable', which accepts a boolean.
      Default is enabled, for backward compatibility.
      
      Depends on the capability exported in the first patch of the series.
      Signed-off-by: NFrancesco Romani <fromani@redhat.com>
      08d07e5f
    • F
      spice: detect if qemu can disable file transfer · 19bbc812
      Francesco Romani 提交于
      spice-server offers an API to disable file transfer messages
      on the agent channel between the client and the guest.
      This is supported in qemu through the disable-agent-file-xfer option.
      
      This patch detects if QEMU supports this option, and add
      a capability if does.
      Signed-off-by: NFrancesco Romani <fromani@redhat.com>
      19bbc812
    • W
      Add test for transient disk support in VMX files · 4fbfac85
      Wout Mertens 提交于
      --001a11c3e84c4130bc04f03cda95
      Content-Type: text/plain; charset=ISO-8859-1
      
      From: Wout Mertens <Wout.Mertens@gmail.com>
      
      Adds test for transient disk translation in vmx files
      4fbfac85
  9. 20 1月, 2014 7 次提交
  10. 16 1月, 2014 1 次提交
    • E
      tests: be more explicit on qcow2 versions in virstoragetest · 974e5914
      Eric Blake 提交于
      While working on v1.0.5-maint (the branch in use on Fedora 19)
      with the host at Fedora 20, I got a failure in virstoragetest.
      I traced it to the fact that we were using qemu-img to create a
      qcow2 file, but qemu-img changed from creating v2 files by
      default in F19 to creating v3 files in F20.  Rather than leaving
      it up to qemu-img, it is better to write the test to force
      testing of BOTH file formats (better code coverage and all).
      
      This patch alone does not fix all the failures in v1.0.5-maint;
      for that, we must decide to either teach the older branch to
      understand v3 files, or to reject them outright as unsupported.
      But for upstream, making the test less dependent on changing
      qemu-img defaults is always a good thing.
      
      * tests/virstoragetest.c (testPrepImages): Simplify creation of
      raw file; check if qemu supports compat and if so use it.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      974e5914
  11. 15 1月, 2014 2 次提交
  12. 14 1月, 2014 1 次提交
    • N
      Fix memory leak in testDomainCreateXMLMixed() · b22f7726
      Nehal J Wani 提交于
      While running objecteventtest, it was found that valgrind pointed out the
      following memory leak:
      
      ==125== 538 (56 direct, 482 indirect) bytes in 1 blocks are definitely lost in loss record 216 of 226
      ==125==    at 0x4A06B6F: calloc (vg_replace_malloc.c:593)
      ==125==    by 0x4C65D8D: virAllocVar (viralloc.c:558)
      ==125==    by 0x4C9F055: virObjectNew (virobject.c:190)
      ==125==    by 0x4D2B2E8: virGetDomain (datatypes.c:220)
      ==125==    by 0x4D79180: testDomainDefineXML (test_driver.c:2962)
      ==125==    by 0x4D4977D: virDomainDefineXML (libvirt.c:8512)
      ==125==    by 0x4029C2: testDomainCreateXMLMixed (objecteventtest.c:226)
      ==125==    by 0x403A21: virtTestRun (testutils.c:138)
      ==125==    by 0x4021C2: mymain (objecteventtest.c:549)
      ==125==    by 0x4040C2: virtTestMain (testutils.c:593)
      ==125==    by 0x341F421A04: (below main) (libc-start.c:225)
      Signed-off-by: NJán Tomko <jtomko@redhat.com>
      b22f7726
  13. 11 1月, 2014 2 次提交
    • D
      Exercise the ABI stability check code in test suite · 53a699a0
      Daniel P. Berrange 提交于
      Any test suite which involves a virDomainDefPtr should
      call virDomainDefCheckABIStability with itself just as
      a basic sanity check that the identity-comparison always
      succeeds. This would have caught the recent NULL pointer
      access crash.
      
      Make sure we cope with def->name being NULL since the
      VMWare config parser produces NULL names.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      53a699a0
    • E
      schema: fix idmap validation · dd0dda2e
      Eric Blake 提交于
      When idmap was added to LXC, we forgot to cover it in the testsuite.
      The schema was missing an <element> layer, and as a result,
      virt-xml-validate was failing on valid dumpxml output.
      
      Reported by Eduard - Gabriel Munteanu on IRC.
      
      * docs/schemas/domaincommon.rng (idmap): Include <idmap> element,
      and support interleaves.
      * tests/lxcxml2xmldata/lxc-idmap.xml: New file.
      * tests/lxcxml2xmltest.c (mymain): Test it.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      dd0dda2e
  14. 08 1月, 2014 5 次提交
    • E
      event: don't turn offline domain into global event · e9568360
      Eric Blake 提交于
      If a user registers for a domain event filtered to a particular
      domain, but the persistent domain is offline at the time, then
      the code silently failed to set up the filter.  As a result,
      the event fires for all domains, rather than being filtered.
      Network events were immune, since they always passed an id
      0 argument.
      
      The key to this patch is realizing that
      virObjectEventDispatchMatchCallback() only cared about uuid;
      so refusing to create a meta for a negative id is pointless,
      and in fact, malloc'ing meta at all was overkill; instead,
      just directly store a uuid and a flag of whether to filter.
      
      Note that virObjectEventPtr still needs all fields of meta,
      because this is how we reconstruct a virDomainPtr inside the
      dispatch handler before calling the end user's callback
      pointer with the correct object, even though only the uuid
      portion of meta is used in deciding whether a callback
      matches the given event.  So while uuid is optional for
      callbacks, it is mandatory for events.
      
      The change to testDomainCreateXMLMixed is merely on the setup
      scenario (as you can't register for a domain unless it is either
      running or persistent).  I actually first wrote that test for
      this patch, then rebased it to also cover a prior patch (commit
      4221d64f), but had to adjust it for that patch to use Create
      instead of Define for setting up the domain long enough to
      register the event in order to work around this bug.  But while
      the setup is changed, the main body of the test is still about
      whether creation events fire as expected.
      
      * src/conf/object_event_private.h (_virObjectEventCallback):
      Replace meta with uuid and flag.
      (virObjectEventCallbackListAddID): Update signature.
      * src/conf/object_event.h (virObjectEventStateRegisterID):
      Likewise.
      * src/conf/object_event_private.h (virObjectEventNew): Document
      use of name and uuid in events.
      * src/conf/object_event.c (virObjectEventCallbackListAddID): Drop
      arguments that don't affect filtering.
      (virObjectEventCallbackListRemoveID)
      (virObjectEventDispatchMatchCallback)
      (virObjectEventStateRegisterID): Update clients.
      * src/conf/domain_event.c (virDomainEventCallbackListAdd)
      (virDomainEventStateRegisterID): Likewise.
      * src/conf/network_event.c (virNetworkEventStateRegisterID):
      Likewise.
      * tests/objecteventtest.c (testDomainCreateXMLMixed): Enhance test.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      e9568360
    • E
      event: don't allow mix of old- and new-style registration · 0cd02bca
      Eric Blake 提交于
      Consider these two calls, in either order:
      
      id1 = virConnectDomainEventRegisterAny(conn, NULL,
         VIR_DOMAIN_EVENT_ID_LIFECYCLE,
         VIR_DOMAIN_EVENT_CALLBACK(callback), NULL, NULL);
      virConnectDomainEventRegister(conn, callback, NULL, NULL);
      
      Right now, the second call fails, because under the hood, the
      old-style function registration is tightly coupled to the
      new style lifecycle eventID, and the two calls both try
      to register the same global eventID callback representation.
      
      We've alreay documented that users should avoid old-style
      registration and deregistration, so anyone heeding the advice
      won't run into this situation.  But it would be even nicer if
      we pretend the two interfaces are completely separate, and
      disallow any cross-linking.  That is, a call to old-style
      deregister should never remove a new-style callback even if it
      is the same function pointer, and a call to new-style callback
      using only callbackIDs obtained legitimately should never
      remove an old-style callback (of course, since our callback
      IDs are sequential, and there is still coupling under the
      hood, you can easily guess the callbackID of an old style
      registration and use new-style deregistration to nuke it - but
      that starts to be blatantly bad coding on your part rather
      than a surprising result on what looks like reasonable
      stand-alone API).
      
      With this patch, you can now register a global lifecycle event
      handler twice, by using both old and new APIs; if such an event
      occurs, your callback will be entered twice.  But that is not a
      problem in practice, since it is already possible to use the
      new API to register both a global and per-domain event handler
      using the same function, which will likewise fire your callback
      twice for that domain.  Duplicates are still prevented when
      using the same API with same parameters twice (old-style twice,
      new-style global twice, or new-style per-domain with same domain
      twice), and things are still bounded (it is not possible to
      register a single function pointer more than N+2 times per event
      id, where N is the number of domains available on the connection).
      Besides, it has always been possible to register as many
      separate function pointers on the same event id as desired,
      through either old or new style API, where the bound there is
      the physical limitation of writing a program with enough
      distinct function pointers.
      
      Adding another event registration in the testsuite is sufficient
      to cover this, where the test fails without the rest of the patch.
      
      * src/conf/object_event.c (_virObjectEventCallback): Add field.
      (virObjectEventCallbackLookup): Add argument.
      (virObjectEventCallbackListAddID, virObjectEventStateCallbackID):
      Adjust callers.
      * tests/objecteventtest.c (testDomainCreateXMLMixed): Enhance test.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      0cd02bca
    • T
      Read PCI class from sysfs class file instead of config space. · 9a3d7a47
      Thadeu Lima de Souza Cascardo 提交于
      When determining if a device is behind a PCI bridge, the PCI device
      class is checked by reading the config space. However, there are some
      devices which have the wrong class on the config space, but the class is
      initialized by Linux correctly as a PCI BRIDGE. This class can be read
      by the sysfs file '/sys/bus/pci/devices/xxxx:xx:xx.x/class'.
      
      One example of such bridge is IBM PCI Bridge 1014:03b9, which is
      identified as a Host Bridge when reading the config space.
      Signed-off-by: NThadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com>
      9a3d7a47
    • E
      event: fix typo in previous patch · a18b8aad
      Eric Blake 提交于
      Bah, serves me right for merging patches without one last
      compile test.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      a18b8aad
    • E
      event: don't let old-style events clobber per-domain events · 4221d64f
      Eric Blake 提交于
      Right now, the older virConnectDomainEventRegister (takes a
      function pointer, returns 0 on success) and the newer
      virConnectDomainEventRegisterID (takes an eventID, returns a
      callbackID) share the underlying implementation (the older
      API ends up consuming a callbackID for eventID 0 under the
      hood).  We implemented that by a lot of copy and pasted
      code between object_event.c and domain_event.c, according to
      whether we are dealing with a function pointer or an eventID.
      However, our copy and paste is not symmetric.  Consider this
      sequence:
      
      id1 = virConnectDomainEventRegisterAny(conn, dom,
         VIR_DOMAIN_EVENT_ID_LIFECYCLE,
         VIR_DOMAIN_EVENT_CALLBACK(callback), NULL, NULL);
      virConnectDomainEventRegister(conn, callback, NULL, NULL);
      virConnectDomainEventDeregister(conn, callback);
      virConnectDomainEventDeregsiterAny(conn, id1);
      
      the first three calls would succeed, but the third call ended
      up nuking the id1 callbackID (the per-domain new-style handler),
      then the fourth call failed with an error about an unknown
      callbackID, leaving us with the global handler (old-style) still
      live and receiving events.  It required another old-style
      deregister to clean up the mess.  Root cause was that
      virDomainEventCallbackList{Remove,MarkDelete} were only
      checking for function pointer match, rather than also checking
      for whether the registration was global.
      
      Rather than playing with the guts of object_event ourselves
      in domain_event, it is nicer to add a mapping function for the
      internal callback id, then share common code for event removal.
      For now, the function-to-id mapping is used only internally;
      I thought about whether a new public API to let a user learn
      the callback would be useful, but decided exposing this to the
      user is probably a disservice, since we already publicly
      document that they should avoid the old style, and since this
      patch already demonstrates that older libvirt versions have
      weird behavior when mixing old and new styles.
      
      And like all good bug fix patches, I enhanced the testsuite,
      validating that the changes in tests/ expose the failure
      without the rest of the patch.
      
      * src/conf/object_event.c (virObjectEventCallbackLookup)
      (virObjectEventStateCallbackID): New functions.
      (virObjectEventCallbackLookup): Use helper function.
      * src/conf/object_event_private.h (virObjectEventStateCallbackID):
      Declare new function.
      * src/conf/domain_event.c (virDomainEventStateRegister)
      (virDomainEventStateDeregister): Let common code handle the
      complexity.
      (virDomainEventCallbackListRemove)
      (virDomainEventCallbackListMarkDelete)
      (virDomainEventCallbackListAdd): Drop unused functions.
      * tests/objecteventtest.c (testDomainCreateXMLMixed): New test.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      4221d64f