1. 23 3月, 2012 1 次提交
    • D
      Use virURIFree instead of xmlFreeURI · c33dae31
      Daniel P. Berrange 提交于
      Since we defined a custom virURIPtr type, we should use a
      virURIFree method instead of assuming it will always be
      a typedef for xmlURIPtr
      
      * src/util/viruri.c, src/util/viruri.h, src/libvirt_private.syms:
        Add a virURIFree method
      * src/datatypes.c, src/esx/esx_driver.c, src/libvirt.c,
        src/qemu/qemu_migration.c, src/vmx/vmx.c, src/xen/xend_internal.c,
        tests/viruritest.c: s/xmlFreeURI/virURIFree/
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      c33dae31
  2. 20 3月, 2012 2 次提交
    • L
      conf: forbid use of multicast mac addresses · 00072373
      Laine Stump 提交于
      A few times libvirt users manually setting mac addresses have
      complained of a networking failure that ends up being due to a multicast
      mac address being used for a guest interface. This patch prevents that
      by logging an error and failing if a multicast mac address is
      encountered in each of the three following cases:
      
      1) domain xml <interface> mac address.
      2) network xml bridge mac address.
      3) network xml dhcp/host mac address.
      
      There are several other places where a mac address can be input that
      aren't controlled in this manner because failure to do so has no
      consequences (e.g., if the address will be used to search through
      existing interfaces for a match).
      
      The RNG has been updated to add multiMacAddr and uniMacAddr along with
      the existing macAddr, and macAddr was switched to uniMacAddr where
      appropriate.
      00072373
    • L
      util: fail attempts to use same mac address for guest and tap · 5d571045
      Laine Stump 提交于
      This patch is in response to:
      
        https://bugzilla.redhat.com/show_bug.cgi?id=798467
      
      If a guest's tap device is created using the same MAC address the
      guest uses for its own network card (which connects to the tap
      device), the Linux kernel will log the following message and traffic
      will not pass:
      
       kernel: vnet9: received packet with own address as source address
      
      This patch disallows MAC addresses with a first byte of 0xFE, but only in
      the case that the MAC address is used for a guest interface that's
      connected by way of a standard tap device. (In other words, the
      validation is done at runtime at the same place the MAC address is
      modified for the tap device, rather than when mac address is parsed,
      the idea being that it is then we know for sure the address will be
      problematic.)
      5d571045
  3. 19 3月, 2012 1 次提交
  4. 12 3月, 2012 3 次提交
    • E
      cpustats: report user and sys times · 759095f6
      Eric Blake 提交于
      Thanks to cgroups, providing user vs. system time of the overall
      guest is easy to add to our existing API.
      
      * include/libvirt/libvirt.h.in (VIR_DOMAIN_CPU_STATS_USERTIME)
      (VIR_DOMAIN_CPU_STATS_SYSTEMTIME): New constants.
      * src/util/virtypedparam.h (virTypedParameterArrayValidate)
      (virTypedParameterAssign): Enforce checking the result.
      * src/qemu/qemu_driver.c (qemuDomainGetPercpuStats): Fix offender.
      (qemuDomainGetTotalcpuStats): Implement new parameters.
      * tools/virsh.c (cmdCPUStats): Tweak output accordingly.
      759095f6
    • E
      cpustats: collect VM user and sys times · 0d0b4098
      Eric Blake 提交于
      As documented in linux.git/Documentation/cgroups/cpuacct.txt,
      cpuacct.stat returns user and system time in ticks (the same
      unit used in times(2)).  It would be a bit nicer if it were like
      getrusage(2) and reported timeval contents, or like cpuacct.usage
      and in nanoseconds, but we can't be picky.
      
      * src/util/cgroup.h (virCgroupGetCpuacctStat): New function.
      * src/util/cgroup.c (virCgroupGetCpuacctStat): Implement it.
      (virCgroupGetValueStr): Allow for multi-line files.
      * src/libvirt_private.syms (cgroup.h): Export it.
      0d0b4098
    • E
      qemu: support disk filenames with comma · 6e0ff1d4
      Eric Blake 提交于
      If there is a disk file with a comma in the name, QEmu expects a double
      comma instead of a single one (e.g., the file "virtual,disk.img" needs
      to be specified as "virtual,,disk.img" in QEmu's command line). This
      patch fixes libvirt to work with that feature. Fix RHBZ #801036.
      
      Based on an initial patch by Crístian Viana.
      
      * src/util/buf.h (virBufferEscape): Alter signature.
      * src/util/buf.c (virBufferEscape): Add parameter.
      (virBufferEscapeSexpr): Fix caller.
      * src/qemu/qemu_command.c (qemuBuildRBDString): Likewise.  Also
      escape commas in file names.
      (qemuBuildDriveStr): Escape commas in file names.
      * docs/schemas/basictypes.rng (absFilePath): Relax RNG to allow
      commas in input file names.
      * tests/qemuxml2argvdata/*-disk-drive-network-sheepdog.*: Update
      test.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      6e0ff1d4
  5. 09 3月, 2012 7 次提交
    • L
      util: consolidate duplicated error messages in pci.c · b8e47850
      Laine Stump 提交于
      This is nearly identical to an earlier patch for virnetlink.c.
      
      There are special stub versions of all public functions in this file
      that are compiled when the platform isn't linux. Each of these
      functions had an almost identical message, differing only in the
      function name included in the message. Since log messages already
      contain the function name, we can just define a const char* with the
      common part of the string, and use that same string for all the log
      messages.
      
      If nothing else, this at least makes for less strings that need
      translating...
      b8e47850
    • L
      util: standardize return from functions calling virNetlinkCommand · 0208face
      Laine Stump 提交于
      There are several functions that call virNetlinkCommand, and they all
      follow a common pattern, with three exit labels: err_exit (or
      cleanup), malformed_resp, and buffer_too_small. All three of these
      labels do their own cleanup and have their own return. However, the
      malformed_resp label usually frees the same items as the
      cleanup/err_exit label, and the buffer_too_small label just doesn't
      free recvbuf (because it's known to always be NULL at the time we goto
      buffer_too_small.
      
      In order to simplify and standardize the code, I've made the following
      changes to all of these functions:
      
      1) err_exit is replaced with the more libvirt-ish "cleanup", which
         makes sense because in all cases this code is also executed in the
         case of success, so labelling it err_exit may be confusing.
      
      2) rc is initialized to -1, and set to 0 just before the cleanup
         label. Any code that currently sets rc = -1 is made to instead goto
         cleanup.
      
      3) malformed_resp and buffer_too_small just log their error and goto
         cleanup. This gives us a single return path, and a single place to
         free up resources.
      
      4) In one instance, rather then logging an error immediately, a char*
         msg was pointed to an error string, then goto cleanup (and cleanup
         would log an error if msg != NULL). It takes no more lines of code
         to just log the message as we encounter it.
      
      This patch should have 0 functional effects.
      0208face
    • L
      util: consolidate duplicated error messages in virnetlink.c · 879bcee0
      Laine Stump 提交于
      There are special stub versions of all public functions in this file
      that are compiled when either libnl isn't available or the platform
      isn't linux. Each of these functions had two almost identical message,
      differing only in the function name included in the message. Since log
      messages already contain the function name, we can just define a const
      char* with the common part of the string, and use that same string for
      all the log messages.
      
      Also, rather than doing #if defined ... #else ... #endif *inside the
      error log macro invocation*, this patch does #if defined ... just
      once, using it to decide which single string to define. This turns the
      error log in each function from 6 lines, to 1 line.
      879bcee0
    • L
      util: log error on OOM in virNetDevOpenvswitchAddPort · d403b84c
      Laine Stump 提交于
      OOM conditions silently returned failure.
      d403b84c
    • A
      Attach vm-id to Open vSwitch interfaces. · ac8bbdbd
      Ansis Atteka 提交于
      This patch will allow OpenFlow controllers to identify which interface
      belongs to a particular VM by using the Domain UUID.
      
      ovs-vsctl get Interface vnet0 external_ids
      {attached-mac="52:54:00:8C:55:2C", iface-id="83ce45d6-3639-096e-ab3c-21f66a05f7fa", iface-status=active, vm-id="142a90a7-0acc-ab92-511c-586f12da8851"}
      
      V2 changes:
      Replaced vm-uuid with vm-id. There was a discussion in Open vSwitch
      mailinglist that we should stick with the same DB key postfixes for the
      sake of consistency (e.g iface-id, vm-id ...).
      ac8bbdbd
    • L
      util: whitespace change to virNetDevOpenvswitchAddPort · 38e56abb
      Laine Stump 提交于
      The indentation on the final lines of the function was off by four
      spaces, making me wonder for a second if there was something
      missing. (There wasn't.)
      38e56abb
    • L
      util: add stub pciConfigAddressToSysfsFile for non-linux platforms · 09d22af1
      Laine Stump 提交于
      Absence of this stub function caused a build failure on mingw32.
      09d22af1
  6. 08 3月, 2012 4 次提交
    • M
      util: Don't overflow on errno in virFileAccessibleAs · f05fb6c5
      Michal Privoznik 提交于
      If we need to virFork() to check assess() under different
      UID+GID we need to translate returned status via WEXITSTATUS().
      Otherwise, we may return values greater than 255 which is
      obviously wrong.
      f05fb6c5
    • E
      util: new function for scaling numbers · 0d90823e
      Eric Blake 提交于
      Scaling an integer based on a suffix is something we plan on reusing
      in several contexts: XML parsing, virsh CLI parsing, and possibly
      elsewhere.  Make it easy to reuse, as well as adding in support for
      powers of 1000.
      
      * src/util/util.h (virScaleInteger): New function.
      * src/util/util.c (virScaleInteger): Implement it.
      * src/libvirt_private.syms (util.h): Export it.
      0d90823e
    • E
      api: add overflow error · 239fb8c4
      Eric Blake 提交于
      Overflow can be user-induced, so it deserves more than being called
      an internal error.  Note that in general, 32-bit platforms have
      far more places to trigger this error (anywhere the public API
      used 'unsigned long' but the other side of the connection is a
      64-bit server); but some are possible on 64-bit platforms (where
      the public API computes the product of two numbers).
      
      * include/libvirt/virterror.h (VIR_ERR_OVERFLOW): New error.
      * src/util/virterror.c (virErrorMsg): Translate it.
      * src/libvirt.c (virDomainSetVcpusFlags, virDomainGetVcpuPinInfo)
      (virDomainGetVcpus, virDomainGetCPUStats): Use it.
      * daemon/remote.c (HYPER_TO_TYPE): Likewise.
      * src/qemu/qemu_driver.c (qemuDomainBlockResize): Likewise.
      239fb8c4
    • L
      util: fix build mingw (and all non-linux) build failure · 861707b9
      Laine Stump 提交于
      ATTRIBUTE_UNUSED was accidentally forgotten on one arg of a stub
      function for functionality that's not present on non-linux
      platforms. This causes a non-linux build with
      --enable-compile-warnings=error to fail.
      861707b9
  7. 07 3月, 2012 2 次提交
  8. 06 3月, 2012 5 次提交
    • R
      util: Changes to support portprofiles for hostdevs · 15bbfd83
      Roopa Prabhu 提交于
      This patch includes the following changes to virnetdevmacvlan.c and
      virnetdevvportprofile.c:
      
       - removes some netlink functions which are now available in
         virnetdev.c
      
       - Adds a vf argument to all port profile functions.
      
      For 802.1Qbh devices, the port profile calls can use a vf argument if
      passed by the caller. If the vf argument is -1 it will try to derive the vf
      if the device passed is a virtual function.
      
      For 802.1Qbg devices, This patch introduces a null check for the device
      argument because during port profile assignment on a hostdev, this argument
      can be null.
      Signed-off-by: NRoopa Prabhu <roprabhu@cisco.com>
      15bbfd83
    • R
      util: support functions for mac/portprofile associations on hostdev · 5095bf06
      Roopa Prabhu 提交于
      This patch adds the following:
      
      - functions to set and get vf configs
      - Functions to replace and store vf configs (Only mac address is handled today.
        But the functions can be easily extended for vlans and other vf configs)
      - function to dump link dev info (This is moved from virnetdevvportprofile.c)
      Signed-off-by: NRoopa Prabhu <roprabhu@cisco.com>
      5095bf06
    • R
      util: two new pci util functions · b8b70273
      Roopa Prabhu 提交于
      pciDeviceGetVirtualFunctionInfo returns pf netdevice name and virtual
      function index for a given vf. This is just a wrapper around existing functions
      to return vf's pf and vf_index with one api call
      
      pciConfigAddressToSysfsfile returns the sysfile pci device link
      from a 'struct pci_config_address'
      Signed-off-by: NRoopa Prabhu <roprabhu@cisco.com>
      b8b70273
    • J
      Fix build after commit e3ba4025 · 118cfc25
      Jim Fehlig 提交于
      Commit e3ba4025 introduced a few build errors with HAVE_LIBNL undefined.
      118cfc25
    • L
      util: eliminate crash in virNetDevMacVLanCreateWithVPortProfile · d2a9d55f
      Laine Stump 提交于
      Commit 723d5c (added after the release of 0.9.10) adds a
      NetlinkEventClient for each interface sent to
      virNetDevMacVLanCreateWithVPortProfile. This should only be done if
      the interface actually *has* a virtPortProfile, otherwise the event
      handler would be a NOP. The bigger problem is that part of the setup
      to create the NetlinkEventClient is to do a memcpy of virtPortProfile
      - if it's NULL, this triggers a segv.
      
      This patch just qualifies the code that adds the client - if
      virtPortProfile is NULL, it's skipped.
      d2a9d55f
  9. 03 3月, 2012 2 次提交
    • L
      util: combine bools in virNetDevTapCreateInBridgePort into flags · d1c31023
      Laine Stump 提交于
      With an additional new bool added to determine whether or not to
      discourage the use of the supplied MAC address by the bridge itself,
      virNetDevTapCreateInBridgePort had three booleans (well, 2 bools and
      an int used as a bool) in the arg list, which made it increasingly
      difficult to follow what was going on. This patch combines those three
      into a single flags arg, which not only shortens the arg list, but
      makes it more self-documenting.
      d1c31023
    • A
      util: centralize tap device MAC address 1st byte "0xFE" modification · c1b164d7
      Ansis Atteka 提交于
      When a tap device for a domain is created and attached to a bridge,
      the first byte of the tap device MAC address is set to 0xFE, while the
      rest is set to match the MAC address that will be presented to the
      guest as its network device MAC address. Setting this high value in
      the tap's MAC address discourages the bridge from using the tap
      device's MAC address as the bridge's own MAC address (Linux bridges
      always take on the lowest numbered MAC address of all attached devices
      as their own).
      
      In one case within libvirt, a tap device is created and attached to
      the bridge with the intent that its MAC address be taken on by the
      bridge as its own (this is used to assure that the bridge has a fixed
      MAC address to prevent network outages created by the bridge MAC
      address "flapping" as guests are started and stopped). In this case,
      the first byte of the mac address is *not* altered to 0xFE.
      
      In the current code, callers to virNetDevTapCreateInBridgePort each
      make the MAC address modification themselves before calling, which
      leads to code duplication, and also prevents lower level functions
      from knowing the real MAC address being used by the guest. The problem
      here is that openvswitch bridges must be informed about this MAC
      address, or they will be unable to pass traffic to/from the guest.
      
      This patch centralizes the location of the MAC address "0xFE fixup"
      into virNetDevTapCreateInBridgePort(), meaning 1) callers of this
      function no longer need the extra strange bit of code, and 2)
      bitNetDevTapCreateBridgeInPort itself now is called with the guest's
      unaltered MAC address, and can pass it on, unmodified, to
      virNetDevOpenvswitchAddPort.
      
      There is no other behavioral change created by this patch.
      c1b164d7
  10. 02 3月, 2012 3 次提交
    • E
      build: fix output of pid values · 355ec281
      Eric Blake 提交于
      Nuke the last vestiges of printing pid_t values with the wrong
      types, at least in code compiled on mingw64.  There may be other
      places, but for now they are only compiled on systems where the
      existing %d doesn't trigger gcc warnings.
      
      * src/rpc/virnetsocket.c (virNetSocketNew): Use %lld and casting,
      rather than assuming any particular int type for pid_t.
      * src/util/command.c (virCommandRunAsync, virPidWait)
      (virPidAbort): Likewise.
      (verify): Drop a now stale assertion.
      355ec281
    • E
      build: use correct type for pid and similar types · 3e2c3d8f
      Eric Blake 提交于
      No thanks to 64-bit windows, with 64-bit pid_t, we have to avoid
      constructs like 'int pid'.  Our API in libvirt-qemu cannot be
      changed without breaking ABI; but then again, libvirt-qemu can
      only be used on systems that support UNIX sockets, which rules
      out Windows (even if qemu could be compiled there) - so for all
      points on the call chain that interact with this API decision,
      we require a different variable name to make it clear that we
      audited the use for safety.
      
      Adding a syntax-check rule only solves half the battle; anywhere
      that uses printf on a pid_t still needs to be converted, but that
      will be a separate patch.
      
      * cfg.mk (sc_correct_id_types): New syntax check.
      * src/libvirt-qemu.c (virDomainQemuAttach): Document why we didn't
      use pid_t for pid, and validate for overflow.
      * include/libvirt/libvirt-qemu.h (virDomainQemuAttach): Tweak name
      for syntax check.
      * src/vmware/vmware_conf.c (vmwareExtractPid): Likewise.
      * src/driver.h (virDrvDomainQemuAttach): Likewise.
      * tools/virsh.c (cmdQemuAttach): Likewise.
      * src/remote/qemu_protocol.x (qemu_domain_attach_args): Likewise.
      * src/qemu_protocol-structs (qemu_domain_attach_args): Likewise.
      * src/util/cgroup.c (virCgroupPidCode, virCgroupKillInternal):
      Likewise.
      * src/qemu/qemu_command.c(qemuParseProcFileStrings): Likewise.
      (qemuParseCommandLinePid): Use pid_t for pid.
      * daemon/libvirtd.c (daemonForkIntoBackground): Likewise.
      * src/conf/domain_conf.h (_virDomainObj): Likewise.
      * src/probes.d (rpc_socket_new): Likewise.
      * src/qemu/qemu_command.h (qemuParseCommandLinePid): Likewise.
      * src/qemu/qemu_driver.c (qemudGetProcessInfo, qemuDomainAttach):
      Likewise.
      * src/qemu/qemu_process.c (qemuProcessAttach): Likewise.
      * src/qemu/qemu_process.h (qemuProcessAttach): Likewise.
      * src/uml/uml_driver.c (umlGetProcessInfo): Likewise.
      * src/util/virnetdev.h (virNetDevSetNamespace): Likewise.
      * src/util/virnetdev.c (virNetDevSetNamespace): Likewise.
      * tests/testutils.c (virtTestCaptureProgramOutput): Likewise.
      * src/conf/storage_conf.h (_virStoragePerms): Use mode_t, uid_t,
      and gid_t rather than int.
      * src/security/security_dac.c (virSecurityDACSetOwnership): Likewise.
      * src/conf/storage_conf.c (virStorageDefParsePerms): Avoid
      compiler warning.
      3e2c3d8f
    • L
      util: remove unneeded #include in virrandom.c · 3c30fbcd
      Laine Stump 提交于
      Commit 7c90026d added #include "conf/domain_conf.h" to
      util/virrandom.c. Fortunately it didn't actually use anything from
      domain_conf.h, since as far as I'm aware, files in util aren't allowed
      to reference anything in conf (although the opposite is allowed). So
      this #include is unnecessary.
      
      I verified it still compiles with the line removed, but have placed a
      one day moratorium on me doing any "trivial rule" pushes, so will
      wait for someone else to verify/ACK before pushing.
      3c30fbcd
  11. 01 3月, 2012 1 次提交
  12. 29 2月, 2012 5 次提交
  13. 27 2月, 2012 1 次提交
    • P
      pidfile: Make checking binary path in virPidFileRead optional · 3e0623eb
      Peter Krempa 提交于
      This patch changes behavior of virPidFileRead to enable passing NULL as
      path to the binary the pid file should be checked against to skip this
      check. This enables using this function for reading files that have same
      semantics as pid files, but belong to unknown processes.
      3e0623eb
  14. 25 2月, 2012 1 次提交
    • M
      Fixed URI parsing · 9f748277
      Martin Kletzander 提交于
      Function xmlParseURI does not remove square brackets around IPv6
      address when parsing. One of the solutions is making wrappers around
      functions working with xmlURI*. This assures that uri->server will be
      always properly assigned and it doesn't have to be changed when used
      on some new place in the code.
      For this purpose, functions virParseURI and virSaveURI were
      added. These function are wrappers around xmlParseURI and xmlSaveUri
      respectively.
      Also there is one new syntax check function to prohibit these functions
      anywhere else.
      
      File changes:
       - src/util/viruri.h        -- declaration
       - src/util/viruri.c        -- definition
       - src/libvirt_private.syms -- symbol export
       - src/Makefile.am          -- added source and header files
       - cfg.mk                   -- added sc_prohibit_xmlURI
       - all others               -- ID name and include fixes
      9f748277
  15. 24 2月, 2012 1 次提交
    • B
      virterror: Misleading error message when name is missing · cff5573d
      Benjamin Cama 提交于
      [forwarding this here from RH bug #796732]
      
      When creating a network (virsh net-create) with an erroneous XML
      containing an empty <name> element, the error message is misleading:
      
      error: Failed to create network from foo.xml
      error: missing domain name information
      
      It took me a bit of time to figure out that it was the *network* name
      that was missing (I generate this xml and didn't look at it, first).
      
      I realized that the same message is used for missing name when creating
      a domain, network, or device node.
      cff5573d
  16. 23 2月, 2012 1 次提交