1. 20 5月, 2014 5 次提交
    • C
      migration: add support for migrateURI configuration · b0312d9f
      Chen Fan 提交于
      For now, we set the migration URI via command line '--migrate_uri' or
      construct the URI by looking up the dest host's hostname which could be
      solved by DNS automatically.
      
      But in cases the dest host have two or more NICs to reach, we may need to
      send the migration data over a specific NIC which is different from the
      automatically resolved one for some reason like performance, security, etc.
      Thus we must explicitly specify the migrateuri in command line everytime,
      but it is too troublesome if there are many such hosts (and don't forget
      virt-manager).
      
      This patch adds a configuration file option on dest host to save the
      default value set which can be specified to a migration hostname or
      one of this host's addresses used for transferring data, thus user doesn't
      have to specify it in command line everytime.
      Signed-off-by: NChen Fan <chen.fan.fnst@cn.fujitsu.com>
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      b0312d9f
    • L
      util: refactor virNetlinkCommand to fix several bugs / style problems · 5d85b8a8
      Laine Stump 提交于
      Inspired by a simpler patch from "Wangrui (K) <moon.wangrui@huawei.com>".
      
      A submitted patch pointed out that virNetlinkCommand() was doing an
      improper typecast of the return value from nl_recv() (int to
      unsigned), causing it to miss error returns, and that even after
      remedying that problem, virNetlinkCommand() was calling VIR_FREE() on
      the pointer returned from nl_recv() (*resp) even if nl_recv() had
      returned an error, and that in this case the pointer was verifiably
      invalid, as it was pointing to memory that had been allocated by
      libnl, but then freed prior to returning the error.
      
      While reviewing this patch, I noticed several other problems with this
      seemingly simple function (at least one of them as serious as the
      problem being reported/fixed by the aforementioned patch), and decided
      they all deserved to be fixed. Here is the list:
      
      1) The return value from nl_recv() must be assigned to an int (rather
         than unsigned int) in order to detect failure.
      
      2) When nl_recv() returns an error or 0, the contents of *resp is
         invalid, and should be simply set to 0, *not* VIR_FREE()'d.
      
      3) When nl_recv() returns 0, errno is not set, so the logged error
         message should not reference errno (it *is* an error though).
      
      4) The first error return from virNetlinkCommand returns -EINVAL,
         incorrectly implying that the caller can expect the return value to
         be of the "-errno" variety, which is not true in any other case.
      
      5) The 2nd error return returns directly with garbage in *resp. While
         the caller should never use *resp in this case, it's still good
         practice to set it to NULL.
      
      6) For the next 5 (!!) error conditions, *resp will contain garbage,
         and virNetlinkCommand() will goto it's cleanup code which will
         VIR_FREE(*resp), almost surely leading to a segfault.
      
      In addition to fixing these 6 problems, this patch also makes the
      following two changes to make the function conform more closely to the
      style of other libvirt code:
      
      1) Change the handling of return code from "named rc and defaulted to
      0, but changed to -1 on error" to the more common "named ret and
      defaulted to -1, but changed to 0 on success".
      
      2) Rename the "error" label to "cleanup", since the code that follows
      is executed in success cases as well as failure.
      5d85b8a8
    • E
      build: nuke more uses of 'sync' · 88b5acb6
      Eric Blake 提交于
      Commit d5c86278 was incomplete; other functions also triggered
      compiler warnings about collisions in the use of 'sync'.
      
      * src/qemu/qemu_driver.c (qemuDomainSetTime): Fix another client.
      * tools/virsh-domain-monitor.c (cmdDomTime): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      88b5acb6
    • P
      avoid 'sync' as variable name · d5c86278
      Pavel Hrdina 提交于
      Old gcc complains about shadowing 'sync' variable:
      
      ../../src/qemu/qemu_agent.c: In function 'qemuAgentSetTime':
      ../../src/qemu/qemu_agent.c:1737: warning: declaration of 'sync'
        shadows a global declaration [-Wshadow]
      /usr/include/unistd.h:464: warning: shadowed declaration is here
        [-Wshadow]
      Signed-off-by: NPavel Hrdina <phrdina@redhat.com>
      d5c86278
    • P
      Return error when updating cdrom device · d49f18e9
      Pavel Hrdina 提交于
      The commit 84c59ffa improved the way we change ejectable media.
      If for any reason the first "eject" didn't open the tray we
      should return with error.
      Signed-off-by: NPavel Hrdina <phrdina@redhat.com>
      d49f18e9
  2. 19 5月, 2014 10 次提交
    • E
      Revert "maint: prefer enum over int for virstoragefile structs" · 71bce84a
      Eric Blake 提交于
      This partially reverts commits b279e52f and ea18f8b2.
      
      It turns out our code base is full of:
      
      if ((struct.member = virBlahFromString(str)) < 0)
          goto error;
      
      Meanwhile, the C standard says it is up to the compiler whether
      an enum is signed or unsigned when all of its declared values
      happen to be positive.  In my testing (Fedora 20, gcc 4.8.2),
      the compiler picked signed, and nothing changed.  But others
      testing with gcc 4.7 got compiler warnings, because it picked
      the enum to be unsigned, but no unsigned value is less than 0.
      Even worse:
      
      if ((struct.member = virBlahFromString(str)) <= 0)
          goto error;
      
      is silently compiled without warning, but incorrectly treats -1
      from a bad parse as a large positive number with no warning; and
      without the compiler's help to find these instances, it is a
      nightmare to maintain correctly.  We could force signed enums
      with a dummy negative declaration in each enum, or cast the
      result of virBlahFromString back to int after assigning to an
      enum value, or use a temporary int for collecting results from
      virBlahFromString, but those actions are all uglier than what we
      were trying to cure by directly using enum types for struct
      values in the first place.  It's better off to just live with int
      members, and use 'switch ((virFoo) struct.member)' where we want
      the compiler to help, than to track down all the conversions from
      string to enum and ensure they don't suffer from type problems.
      
      * src/util/virstorageencryption.h: Revert back to int declarations
      with comment about enum usage.
      * src/util/virstoragefile.h: Likewise.
      * src/conf/domain_conf.c: Restore back to casts in switches.
      * src/qemu/qemu_driver.c: Likewise.
      * src/qemu/qemu_command.c: Add cast rather than revert.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      71bce84a
    • J
      Fix crash in DAC driver with no seclabels · 88e36a69
      Ján Tomko 提交于
      With dynamic_ownership = 1 but no seclabels, RestoreChardevLabel
      dereferences the NULL seclabel when checking if norelabel is set.
      
      Remove this check, since it is already done in RestoreSecurityAllLabel
      and if norelabel is set, RestoreChardevLabel is never called.
      88e36a69
    • D
      parallels: create VMs in the default place · 4bafe312
      Dmitry Guryanov 提交于
      Each VM consists of a set of files in PCS: config, hard
      disk images, log file, memory dump. All these files are stored
      in a per-vm directory. When we create a new VM, we can ether specify
      path to the VM or create the VM in a default path
      (<default path>/<vm name>.pvm). This default path can be configured
      with command
      prlsrvctl user set --def-vm-home <path> command.
      
      Currenty parallels driver creates VM in the same place, where first
      hard disk is located. Let's change this logic and create VMs in
      the default path. It will be much clearer and allow us to create
      VMs without hard disks.
      Signed-off-by: NDmitry Guryanov <dguryanov@parallels.com>
      4bafe312
    • D
      parallels: add disks correctly · a15d8d71
      Dmitry Guryanov 提交于
      Disks support in this driver was implemented with an assumption,
      that disk images can't be created by hand, without VM. So
      complex storage driver was implemented with workaround.
      
      This is not true, we can create new disks using ploop tool.
      So the first step to reimplement disks support in parallels
      driver is to do not use information from the storage driver,
      until we will implement VIR_STORAGE_TYPE_VOLUME disks.
      
      So after this patch disks can be added in the same way as
      in any other driver: you create a disk image and then add
      an entry to the XML definition of the domain with path to that
      image file, for example:
      
      <disk type='file' device='disk'>
        <driver type='ploop'/>
        <source file='/storage/harddisk1.hdd'/>
        <target dev='sda' bus='sata'/>
        <address type='drive' controller='0' bus='0' target='0' unit='0'/>
      </disk>
      
      This patch makes parallels storage driver useless, but I'll fix it
      later. Now you can create an image by hand, using ploop tool,
      and then add it to some domain.
      Signed-off-by: NDmitry Guryanov <dguryanov@parallels.com>
      a15d8d71
    • D
      parallels: set file format in virDomainDef · 5530424a
      Dmitry Guryanov 提交于
      Set file format in virDomainDef structure to produce correct
      XML in virDomainGetXMLDesc function.
      Signed-off-by: NDmitry Guryanov <dguryanov@parallels.com>
      5530424a
    • D
      parallels: add VIR_STORAGE_FILE_PLOOP format · 13f229aa
      Dmitry Guryanov 提交于
      Add VIR_STORAGE_FILE_PLOOP format. This format is used
      to store disk images for virtual machines in PCS and containers
      in PCS, OpenVZ and also in Parallels Desktop for Mac.
      
      This format is described on OpenVZ site -
      https://openvz.org/Ploop (together with ploop devices). It
      consists of XML descriptor and one or more image files: base
      image and deltas. Format of the image files described here:
      https://openvz.org/Ploop/format.
      
      This patch only adds VIR_STORAGE_FILE_PLOOP constant, consequent
      patches will use it in parallels driver.
      Signed-off-by: NDmitry Guryanov <dguryanov@parallels.com>
      13f229aa
    • M
      virSecurityDACRestoreSecurityHostdevLabel: Unmark @def as unused · 64c1e1ea
      Michal Privoznik 提交于
      The domain definition is clearly used a few lines
      below so there's no need to mark @def as unused.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      64c1e1ea
    • J
      docs: add a serial device with a seclabel example · 00622f3b
      Ján Tomko 提交于
      00622f3b
    • 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
    • J
      Rename virDomainDiskSourceDefFormatSeclabel · 719ac9e4
      Ján Tomko 提交于
      Drop the 'Disk' from the name, as there is nothing disk-specific
      about the function.
      719ac9e4
  3. 17 5月, 2014 8 次提交
  4. 16 5月, 2014 5 次提交
    • C
      util: fix memory leak in failure path of virCgroupKillRecursiveInternal · d18aa704
      Chen Hanxiao 提交于
      Don't leak keypath when we fail to kill a process
      Signed-off-by: NChen Hanxiao <chenhanxiao@cn.fujitsu.com>
      d18aa704
    • E
      maint: prefer enum over int for virstoragefile structs · b279e52f
      Eric Blake 提交于
      For internal structs, we might as well be type-safe and let the
      compiler help us with less typing required on our part (getting
      rid of casts is always nice).  In trying to use enums directly,
      I noticed two problems in virstoragefile.h that can't be fixed
      without more invasive refactoring: virStorageSource.format is
      used as more of a union of multiple enums in storage volume
      code (so it has to remain an int), and virStorageSourcePoolDef
      refers to pooltype whose enum is declared in src/conf, but where
      src/util can't pull in headers from src/conf.
      
      * src/util/virstoragefile.h (virStorageNetHostDef)
      (virStorageSourcePoolDef, virStorageSource): Use enums instead of
      int for fields of internal types.
      * src/qemu/qemu_command.c (qemuParseCommandLine): Cover all values.
      * src/conf/domain_conf.c (virDomainDiskSourceParse)
      (virDomainDiskSourceFormat): Simplify clients.
      * src/qemu/qemu_driver.c
      (qemuDomainSnapshotCreateSingleDiskActive)
      (qemuDomainSnapshotPrepareDiskExternalBackingInactive)
      (qemuDomainSnapshotPrepareDiskExternalOverlayActive)
      (qemuDomainSnapshotPrepareDiskInternal): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      b279e52f
    • E
      maint: shorten 'TypeType' function names · ab517818
      Eric Blake 提交于
      The VIR_ENUM_DECL/VIR_ENUM_IMPL helper macros already append 'Type'
      to the enum name being converted; it looks silly to have functions
      with 'TypeType' in their name.  Even though some of our enums have
      to have a 'Type' suffix, the corresponding string conversion
      functions do not.
      
      * src/conf/secret_conf.h (VIR_ENUM_DECL): Rename virSecretUsageType.
      * src/conf/storage_conf.h (VIR_ENUM_DECL): Rename
      virStoragePoolAuthType, virStoragePoolSourceAdapterType,
      virStoragePartedFsType.
      * src/conf/domain_conf.c (virDomainDiskDefParseXML)
      (virDomainFSDefParseXML, virDomainFSDefFormat): Update callers.
      * src/conf/secret_conf.c (virSecretDefParseUsage)
      (virSecretDefFormatUsage): Likewise.
      * src/conf/storage_conf.c (virStoragePoolDefParseAuth)
      (virStoragePoolDefParseSource, virStoragePoolSourceFormat):
      Likewise.
      * src/lxc/lxc_controller.c (virLXCControllerSetupLoopDevices):
      Likewise.
      * src/storage/storage_backend_disk.c
      (virStorageBackendDiskPartFormat): Likewise.
      * src/util/virstorageencryption.c (virStorageEncryptionSecretParse)
      (virStorageEncryptionSecretFormat): Likewise.
      * tools/virsh-secret.c (cmdSecretList): Likewise.
      * src/libvirt_private.syms (secret_conf.h, storage_conf.h): Export
      corrected names.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      ab517818
    • E
      maint: use enum typedef for virstorageencryption.h · ea18f8b2
      Eric Blake 提交于
      Continuing the work of consistent enum cleanups; this time in
      virstorageencryption.h.
      
      * src/util/virstorageencryption.h (virStorageEncryptionFormat):
      Convert to typedef, renaming to avoid collision with function.
      (virStorageEncryptionSecret, virStorageEncryption): Directly use
      enums.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      ea18f8b2
    • E
      vbox: fix stale comment about vdi storage type · 3e44cf7f
      Eric Blake 提交于
      The code had some todo's about adding 'vdi' to the list of
      virStorageType, but we've already done that.
      
      * src/vbox/vbox_tmpl.c (vboxStorageVolCreateXML)
      (vboxStorageVolGetXMLDesc): Use enum value for vdi type.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      3e44cf7f
  5. 15 5月, 2014 10 次提交
  6. 14 5月, 2014 2 次提交