1. 22 7月, 2011 27 次提交
    • L
      qemu: use virDomainNetGetActual*() in qemuDomainXMLToNative · e9949a58
      Laine Stump 提交于
      This is the one function outside of domain_conf.c that plays around
      with (even modifying) the internals of the virDomainNetDef, and thus
      can't be fixed up simply by replacing direct accesses to the fields of
      the struct with the GetActual*() access functions.
      
      In this case, we need to check if the defined type is "network", and
      if it is *then* check the actual type; if the actual type is "bridge",
      then we can at least put the bridgename in a place where it can be
      used; otherwise (if type isn't "bridge"), we behave exactly as we used
      to - just null out *everything*.
      e9949a58
    • L
      qemu: use virDomainNetGetActual*() functions where appropriate · 03caa988
      Laine Stump 提交于
      The qemu driver accesses fields in the virDomainNetDef directly, but
      with the advent of the virDomainActualNetDef, some pieces of
      information may be found in a different place (the ActualNetDef) if
      the network connection is of type='network' and that network is of
      forward type='bridge|private|vepa|passthrough'. The previous patch
      added functions to mask this difference from callers - they hide the
      decision making process and just pick the value from the proper place.
      
      This patch uses those functions in the qemu driver as a first step in
      making qemu work with the new network types. At this point, the
      virDomainActualNetDef is guaranteed always NULL, so the GetActualX()
      function will return exactly what the def->X that's being replaced
      would have returned (ie bisecting is not compromised).
      
      There is one place (in qemu_driver.c) where the internal details of
      the NetDef are directly manipulated by the code, so the GetActual
      functions cannot be used there without extra additional code; that
      file will be treated in a separate patch.
      03caa988
    • L
      network: separate Start/Shutdown functions for new network types · b48e81bf
      Laine Stump 提交于
      Previously all networks were composed of bridge devices created and
      managed by libvirt, and the same operations needed to be done for all
      of them when they were started and stopped (create and start the
      bridge device, configure its MAC address and IP address, add iptables
      rules). The new network types are (for now at least) managed outside
      of libvirt, and the network object is used only to contain information
      about the network, which is then used as each individual guest
      connects itself.
      
      This means that when starting/stopping one of these new networks, we
      really want to do nothing, aside from marking the network as
      active/inactive.
      
      This has been setup as toplevel Start/Shutdown functions that do the
      small bit of common stuff, then have a switch statement to execute
      network type-specific start/shutdown code, then do a bit more common
      code. The type-specific functions called for the new host bridge and
      macvtap based types are currently empty.
      
      In the future these functions may actually do something, and we will
      surely add more functions that are similarly patterned. Once
      everything has settled, we can make a table of "sub-driver" function
      pointers for each network type, and store a pointer to that table in
      the network object, then we can replace the switch statements with
      calls to functions in the table.
      
      The final step in this will be to add a new table (and corresponding
      new functions) for new network types as they are added.
      b48e81bf
    • L
      conf: support abstracted interface info in network XML · 40fd7073
      Laine Stump 提交于
      The network XML is updated in the following ways:
      
      1) The <forward> element can now contain a list of forward interfaces:
      
           <forward .... >
             <interface dev='eth10'/>
             <interface dev='eth11'/>
             <interface dev='eth12'/>
             <interface dev='eth13'/>
           </forward>
      
         The first of these takes the place of the dev attribute that is
         normally in <forward> - when defining a network you can specify
         either one, and on output both will be present. If you specify
         both on input, they must match.
      
      2) In addition to forward modes of 'nat' and 'route', these new modes
         are supported:
      
           private, passthrough, vepa - when this network is referenced by a
           domain's interface, it will have the same effect as if the
           interface had been defined as type='direct', e.g.:
      
              <interface type='direct'>
                <source mode='${mode}' dev='${dev}>
                ...
              </interface>
      
           where ${mode} is one of the three new modes, and ${dev} is an interface
           selected from the list given in <forward>.
      
           bridge - if a <forward> dev (or multiple devs) is defined, and
           forward mode is 'bridge' this is just like the modes 'private',
           'passthrough', and 'vepa' above. If there is no forward dev
           specified but a bridge name is given (e.g. "<bridge
           name='br0'/>"), then guest interfaces using this network will use
           libvirt's "host bridge" mode, equivalent to this:
      
             <interface type='bridge'>
                <source bridge='${bridge-name}'/>
                ...
             </interface>
      
      3) A network can have multiple <portgroup> elements, which may be
         selected by the guest interface definition (by adding
         "portgroup='${name}'" in the <source> element along with the
         network name). Currently a portgroup can only contain a
         virtportprofile, but the intent is that other configuration items
         may be put there int the future (e.g. bandwidth config). When
         building a guest's interface, if the <interface> XML itself has no
         virtportprofile, and if the requested network has a portgroup with
         a name matching the name given in the <interface> (or if one of the
         network's portgroups is marked with the "default='yes'" attribute),
         the virtportprofile from that portgroup will be used by the
         interface.
      
      4) A network can have a virtportprofile defined at the top level,
         which will be used by a guest interface when connecting in one of
         the 'direct' modes if the guest interface XML itself hasn't
         specified any virtportprofile, and if there are also no matching
         portgroups on the network.
      40fd7073
    • L
      conf: support abstracted interface info in domain interface XML · 07f41369
      Laine Stump 提交于
      the domain XML <interface> element is updated in the following ways:
      
      1) <virtualportprofile> can be specified when source type='network'
      (previously it was only valid for source type='direct')
      
      2) A new attribute "portgroup" has been added to the <source>
      element. When source type='network' (the only time portgroup is
      recognized), extra configuration information will be taken from the
      <portgroup> element of the given name in the network definition.
      
      3) Each virDomainNetDef now also potentially has a
      virDomainActualNetDef which is a private object (never
      exported/imported via the public API, and not defined in the RNG) that
      is used to maintain information about the physical device that was
      actually used for a NetDef of type VIR_DOMAIN_NET_TYPE_NETWORK.
      
      The virDomainActualNetDef will only be parsed/formatted if the
      parse/format function is called with the
      VIR_DOMAIN_XML_INTERNAL_ACTUAL_NET flag set (which is only needed when
      saving/loading a running domain's state info to the stateDir).
      07f41369
    • L
      conf: virDomainNetDef points to (rather than contains) virtPortProfile · 524655ee
      Laine Stump 提交于
      The virtPortProfile in the domain interface struct is now a separately
      allocated object *pointed to by* (rather than contained in) the main
      virDomainNetDef object. This is done to make it easier to figure out
      when a virtualPortProfile has/hasn't been specified in a particular
      config.
      524655ee
    • L
      conf: put virtPortProfile struct / functions in a common location · a3d95b55
      Laine Stump 提交于
      virtPortProfiles are currently only used in the domain XML, but will
      soon also be used in the network XML. To prepare for that change, this
      patch moves the structure definition into util/network.h and the parse
      and format functions into util/network.c (I decided that this was a
      better choice than macvtap.h/c for something that needed to always be
      available on all platforms).
      a3d95b55
    • L
      util: define MAX · 6fe5fde2
      Laine Stump 提交于
      If util.h is going to have a MIN, it may as well also have MAX.
      6fe5fde2
    • M
      7b5fc597
    • M
      destroy: Implement internal API for xen driver · 1edf5cc5
      Michal Privoznik 提交于
      1edf5cc5
    • M
      73838d33
    • M
      destroy: Implement internal API for vbox driver · 6ec7195c
      Michal Privoznik 提交于
      6ec7195c
    • M
      destroy: Implement internal API for uml driver · 64ce43f8
      Michal Privoznik 提交于
      64ce43f8
    • M
      destroy: Implement internal API for phyp driver · e4e69b4b
      Michal Privoznik 提交于
      e4e69b4b
    • M
      ab5eb92b
    • M
      destroy: Implement internal API for lxc driver · 2dd3f025
      Michal Privoznik 提交于
      2dd3f025
    • M
      destroy: Implement internal API for libxl driver · ba0219a7
      Michal Privoznik 提交于
      ba0219a7
    • M
      destroy: Implement internal API for ESX driver · 3959fe30
      Michal Privoznik 提交于
      3959fe30
    • M
      destroy: Implement internal API for qemu driver · 427eaf13
      Michal Privoznik 提交于
      427eaf13
    • M
      destroy: Wire up the remote protocol · ca79a4fb
      Michal Privoznik 提交于
      ca79a4fb
    • M
      destroy: Define new public API virDomainDestroyFlags · 080bc4ea
      Michal Privoznik 提交于
      This introduces new API virDomainDestroyFlags to allow
      domain destroying with flags, as the existing API virDomainDestroy
      misses flags.
      
      The set of flags is defined in virDomainDestroyFlagsValues enum,
      which is currently commented, because it is empty.
      
      Calling this API with no flags set (@flags == 0) is equivalent calling
      virDomainDestroy.
      080bc4ea
    • E
      save: wire up remote protocol · b6fe647b
      Eric Blake 提交于
      * src/remote/remote_driver.c (remote_driver): Add new callbacks.
      * src/remote/remote_protocol.x (remote_procedure): New RPCs.
      (remote_domain_save_flags_args, remote_domain_restore_flags_args):
      New structs.
      * src/remote_protocol-structs: Update.
      b6fe647b
    • E
      save: new public API to bypass file system cache on save/restore · ad0b9123
      Eric Blake 提交于
      In order to choose whether to use O_DIRECT when saving a domain image
      to a file, we need a new flag.  But virDomainSave was implemented
      before our policy of all new APIs having a flag argument.  Likewise
      for virDomainRestore when restoring from a file.
      
      The new flag name is chosen as CACHE_BYPASS so as not to preclude
      a future solution that uses posix_fadvise once the Linux kernel has
      a smarter implementation of that interface.
      
      * include/libvirt/libvirt.h.in (virDomainCreateFlags)
      (virDomainCoreDumpFlags): Add a flag.
      (virDomainSaveFlags, virDomainRestoreFlags): New prototypes.
      * src/libvirt.c (virDomainSaveFlags, virDomainRestoreFlags): New API.
      * src/libvirt_public.syms: Export them.
      * src/driver.h (virDrvDomainSaveFlags, virDrvDomainRestoreFlags):
      New driver callbacks.
      ad0b9123
    • E
      qemu: fix error message with migrate2 xml · 360e5ea1
      Eric Blake 提交于
      Otherwise, an ABI mismatch gives error messages attributing the target
      xml string as current, and the current domain state as the new xml.
      
      * src/qemu/qemu_migration.c (qemuMigrationBegin): Use correct
      argument order.
      360e5ea1
    • E
      build: rename files.h to virfile.h · 8e22e089
      Eric Blake 提交于
      In preparation for a future patch adding new virFile APIs.
      
      * src/util/files.h, src/util/files.c: Move...
      * src/util/virfile.h, src/util/virfile.c: ...here, and rename
      functions to virFile prefix.  Macro names are intentionally
      left alone.
      * *.c: All '#include "files.h"' uses changed.
      * src/Makefile.am (UTIL_SOURCES): Reflect rename.
      * cfg.mk (exclude_file_name_regexp--sc_prohibit_close): Likewise.
      * src/libvirt_private.syms: Likewise.
      * docs/hacking.html.in: Likewise.
      * HACKING: Regenerate.
      8e22e089
    • E
      command: avoid leaking fds across fork · 5d804ffa
      Eric Blake 提交于
      Since libvirt is multi-threaded, we should use FD_CLOEXEC as much
      as possible in the parent, and only relax fds to inherited after
      forking, to avoid leaking an fd created in one thread to a fork
      run in another thread.  This gets us closer to that ideal, by
      making virCommand automatically clear FD_CLOEXEC on fds intended
      for the child, as well as avoiding a window of time with non-cloexec
      pipes created for capturing output.
      
      * src/util/command.c (virExecWithHook): Use CLOEXEC in parent.  In
      child, guarantee that all fds to pass to child are inheritable.
      (getDevNull): Use CLOEXEC.
      (prepareStdFd): New helper function.
      (virCommandRun, virCommandRequireHandshake): Use pipe2.
      * src/qemu/qemu_command.c (qemuBuildCommandLine): Simplify caller.
      5d804ffa
    • E
      command: move all docs into .c file · 42891145
      Eric Blake 提交于
      We already have a precedent of function documentation in C files,
      where it is closer to the implementation (witness libvirt.h vs.
      libvirt.c); maintaining docs in both files risks docs going stale.
      
      While I was at it, I used consistent doxygen style on all comments.
      
      * src/util/command.h: Remove duplicate docs, and move unique
      documentation...
      * src/util/command.c: ...here.
      Suggested by Matthias Bolte.
      42891145
  2. 21 7月, 2011 13 次提交
    • M
      rpc: Make the dispatch generator handle 'void name(void)' style procedures · fbd5465a
      Matthias Bolte 提交于
      The only 'void name(void)' style procedure in the protocol is 'close' that
      is handled special, but also programming errors like a missing _args or
      _ret suffix on the structs in the .x files can create such a situation by
      accident. Making the generator aware of this avoids bogus errors from the
      generator such as:
      
        Use of uninitialized value in exists at ./rpc/gendispatch.pl line 967.
      
      Also this allows to get rid of the -c option and the special case code for
      the 'close' procedure, as the generator handles it now correctly.
      
      Reported by Michal Privoznik
      fbd5465a
    • E
      error: preserve errno when saving last error · 979b784b
      Eric Blake 提交于
      It is common to see the sequence:
      
      virErrorPtr save_err = virSaveLastError();
      // do cleanup
      virSetError(save_err);
      virFreeError(save_err);
      
      on cleanup paths.  But for functions where it is desirable to
      return the errno that caused failure, this sequence can clobber
      that errno.  virFreeError was already safe; this makes the other
      two functions in the sequence safe as well, assuming all goes
      well (on OOM, errno will be clobbered, but then again, save_err
      won't reflect the real error that happened, so you are no longer
      preserving the real situation - that's life with OOM).
      
      * src/util/virterror.c (virSaveLastError, virSetError): Preserve
      errno.
      979b784b
    • M
      python: Fix makefile rule for code generation · 1468359f
      Matthias Bolte 提交于
      Commit 8665f855 changed generated.stamp to $(GENERATE).stamp,
      but missed one instance in the CLEANFILES list. This can break the
      build in case the generated code is deleted but the .stamp file stays
      around and therefore the code isn't regenerated.
      1468359f
    • D
      Fix uninitialized variable in QEMU CPU bandwidth code · 5e7d638c
      Daniel P. Berrange 提交于
      * src/qemu/qemu_driver.c: Fix uninitialized variable
      5e7d638c
    • W
      fix make syntax-check error · d6fa4967
      Wen Congyang 提交于
      d6fa4967
    • W
      doc: Add documentation for new cputune elements period and quota · fbdea7cb
      Wen Congyang 提交于
      We have added element period and quota. Document them in formatdomain.html.in.
      fbdea7cb
    • W
      qemu: Implement cfs_period and cfs_quota's modification · 67a173c5
      Wen Congyang 提交于
      This patch implements cfs_period and cfs_quota's modification.
      We can use the command 'virsh schedinfo' to query or modify cfs_period and
      cfs_quota.
      If you query period or quota from config file, the value 0 means it does not set
      in the config file.
      If you set period or quota to config file, the value 0 means that delete current
      setting from config file.
      If you modify period or quota while vm is running, the value 0 means that use
      current value.
      67a173c5
    • W
      qemu: Implement period and quota tunable XML configuration and parsing · c4441fee
      Wen Congyang 提交于
      This patch implements period and quota tunable XML configuration and parsing.
      A quota or period of zero will be simply ignored.
      c4441fee
    • W
      Update XML Schema for new entries · f27f62ca
      Wen Congyang 提交于
      Define the element cputune's child elements 'period' and 'quota':
      <cputune>
        <period>100000</period>
        <quota>50000</quota>
      </cputune>
      f27f62ca
    • W
      cgroup: Implement cpu.cfs_period_us and cpu.cfs_quota_us tuning API · fd7c1723
      Wen Congyang 提交于
      This patch provides 4 APIs to get and set cpu.cfs_period_us and cpu.cfs_quota_us.
      fd7c1723
    • W
      Introduce the function virCgroupForVcpu · 8e64f873
      Wen Congyang 提交于
      Introduce the function virCgroupForVcpu() to create sub directory for each vcpu.
      8e64f873
    • L
      qemu: send-key: Implement the driver methods · e4072577
      Lai Jiangshan 提交于
      qemu driver just accept xt_kbd codeset's keycode, so the lib virtkey
      is used for translating keycodes from other codesets
      e4072577
    • L
      send-key: Expose the new API in virsh · 7818b7ef
      Lai Jiangshan 提交于
      Also support string names for the linux keycode(auto detect)
      * tools/virsh.c: add new command "send-key"
      * tools/virsh.pod: documents the new command
      7818b7ef