]> xenbits.xensource.com Git - libvirt.git/log
libvirt.git
13 years agostorage: support more scaling suffixes
Eric Blake [Mon, 5 Mar 2012 21:06:33 +0000 (14:06 -0700)]
storage: support more scaling suffixes

Disk manufacturers are fond of quoting sizes in powers of 10,
rather than powers of 2 (after all, 2.1 GB sounds larger than
2.0 GiB, even though the exact opposite is true).  So, we might
as well follow coreutils' lead in supporting three types of
suffix: single letter ${u} (which we already had) and ${u}iB
for the power of 2, and ${u}B for power of 10.

Additionally, it is impossible to create a file with more than
2**63 bytes, since off_t is signed (if you have enough storage
to even create one 8EiB file, I'm jealous).  This now reports
failure up front rather than down the road when the kernel
finally refuses an impossible size.

* docs/schemas/basictypes.rng (unit): Add suffixes.
* src/conf/storage_conf.c (virStorageSize): Use new function.
* docs/formatstorage.html.in: Document it.
* tests/storagevolxml2xmlin/vol-file-backing.xml: Test it.
* tests/storagevolxml2xmlin/vol-file.xml: Likewise.

13 years agoxml: output memory unit for clarity
Eric Blake [Thu, 23 Feb 2012 00:48:38 +0000 (17:48 -0700)]
xml: output memory unit for clarity

Make it obvious to 'dumpxml' readers what unit we are using,
since our default of KiB for memory (1024) differs from qemu's
default of MiB; and differs from our use of bytes for storage.

Tests were updated via:

$ find tests/*data tests/*out -name '*.xml' | \
  xargs sed -i 's/<\(memory\|currentMemory\|hard_limit\|soft_limit\|min_guarantee\|swap_hard_limit\)>/<\1 unit='"'KiB'>/"
$ find tests/*data tests/*out -name '*.xml' | \
  xargs sed -i 's/<\(capacity\|allocation\|available\)>/<\1 unit='"'bytes'>/"

followed by a few fixes for the stragglers.

Note that with this patch, the RNG for <memory> still forbids
validation of anything except unit='KiB', since the code silently
ignores the attribute; a later patch will expand <memory> to allow
scaled input in the code and update the RNG to match.

* docs/schemas/basictypes.rng (unit): Add 'bytes'.
(scaledInteger): New define.
* docs/schemas/storagevol.rng (sizing): Use it.
* docs/schemas/storagepool.rng (sizing): Likewise.
* docs/schemas/domaincommon.rng (memoryKBElement): New define; use
for memory elements.
* src/conf/storage_conf.c (virStoragePoolDefFormat)
(virStorageVolDefFormat): Likewise.
* src/conf/domain_conf.h (_virDomainDef): Document unit used
internally.
* src/conf/storage_conf.h (_virStoragePoolDef, _virStorageVolDef):
Likewise.
* tests/*data/*.xml: Update all tests.
* tests/*out/*.xml: Likewise.
* tests/define-dev-segfault: Likewise.
* tests/openvzutilstest.c (testReadNetworkConf): Likewise.
* tests/qemuargv2xmltest.c (blankProblemElements): Likewise.

13 years agoxml: share 'unit' in RNG
Eric Blake [Wed, 29 Feb 2012 04:16:28 +0000 (21:16 -0700)]
xml: share 'unit' in RNG

The code supported unit='E' for "exabyte", but the RNG did not;
conversely, the RNG supported "z" and "y" but the code did not
(I'm jealous if you have that much storage, particularly since
it won't fit in 64-bit off_t).  Also, the code supported
<allocation unit='...'>, but not the RNG.

In an effort to make 'unit' more worthwhile in future patches,
it's easier to share it between files.

In making this factorization, note that absFilePath is more
permissive than 'path', so storage pools and storage volumes
will now validate with a wider set of file names than before.
I don't think this should be a problem in practice.

* docs/schemas/storagepool.rng: Include basic types, rather than
repeating things here.
* docs/schemas/storagevol.rng: Likewise.
* docs/schemas/basictypes.rng: Add 'unsignedLong', 'unit', and fix
to match storage code.

13 years agoutil: new function for scaling numbers
Eric Blake [Mon, 5 Mar 2012 16:28:59 +0000 (09:28 -0700)]
util: new function for scaling numbers

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.

13 years agoapi: add overflow error
Eric Blake [Fri, 2 Mar 2012 23:58:05 +0000 (16:58 -0700)]
api: add overflow error

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.

13 years agodocs: use correct terminology for 1024 bytes
Eric Blake [Fri, 2 Mar 2012 15:23:07 +0000 (08:23 -0700)]
docs: use correct terminology for 1024 bytes

Yes, I like kilobytes better than kibibytes (when I say kilobytes,
I generally mean 1024).  But since the term is ambiguous, it can't
hurt to say what we mean, by using both the correct name and
calling out the numeric equivalent.

* src/libvirt.c (virDomainGetMaxMemory, virDomainSetMaxMemory)
(virDomainSetMemory, virDomainSetMemoryFlags)
(virNodeGetFreeMemory): Tweak wording.
* docs/formatdomain.html.in: Likewise.
* docs/formatstorage.html.in: Likewise.

13 years agoutil: fix build mingw (and all non-linux) build failure
Laine Stump [Wed, 7 Mar 2012 18:16:53 +0000 (13:16 -0500)]
util: fix build mingw (and all non-linux) build failure

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.

13 years agorpc: allow truncated return for virDomainGetCPUStats
Eric Blake [Wed, 7 Mar 2012 04:36:53 +0000 (21:36 -0700)]
rpc: allow truncated return for virDomainGetCPUStats

The RPC code assumed that the array returned by the driver would be
fully populated; that is, ncpus on entry resulted in ncpus * return
value on exit.  However, while we don't support holes in the middle
of ncpus, we do want to permit the case of ncpus on entry being
longer than the array returned by the driver (that is, it should be
safe for the caller to pass ncpus=128 on entry, and the driver will
stop populating the array when it hits max_id).

Additionally, a successful return implies that the caller will then
use virTypedParamArrayClear on the entire array; for this to not
free uninitialized memory, the driver must ensure that all skipped
entries are explicitly zeroed (the RPC driver did this, but not
the qemu driver).

There are now three cases:
server 0.9.10 and client 0.9.10 or newer: No impact - there were no
hypervisor drivers that supported cpu stats

server 0.9.11 or newer and client 0.9.10: if the client calls with
ncpus beyond the max, then the rpc call will fail on the client side
and disconnect the client, but the server is no worse for the wear

server 0.9.11 or newer and client 0.9.11: the server can return a
truncated array and the client will do just fine

I reproduced the problem by using a host with 2 CPUs, and doing:
virsh cpu-stats $dom --start 1 --count 2

* daemon/remote.c (remoteDispatchDomainGetCPUStats): Allow driver
to omit tail of array.
* src/remote/remote_driver.c (remoteDomainGetCPUStats):
Accommodate driver that omits tail of array.
* src/libvirt.c (virDomainGetCPUStats): Document this.
* src/qemu/qemu_driver.c (qemuDomainGetPercpuStats): Clear all
unpopulated entries.

13 years agoconf: fix error log with "address address"
Laine Stump [Wed, 7 Mar 2012 13:58:49 +0000 (08:58 -0500)]
conf: fix error log with "address address"

Addresses https://bugzilla.redhat.com/show_bug.cgi?id=800762

13 years agoEnsure max_id is initialized in linuxParseCPUmap()
Daniel P. Berrange [Wed, 7 Mar 2012 11:41:34 +0000 (11:41 +0000)]
Ensure max_id is initialized in linuxParseCPUmap()

13 years agocpu-stats command shows cpu statistics information of a domain.
KAMEZAWA Hiroyuki [Fri, 2 Mar 2012 02:54:24 +0000 (10:54 +0800)]
cpu-stats command shows cpu statistics information of a domain.

CPU0:
cpu_time   88.231593093 seconds
CPU1:
cpu_time   123.613341883 seconds
Total:
cpu_time   211.844934976 seconds

Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
13 years agoqemu driver for virDomainGetCPUstats using cpuacct cgroup.
KAMEZAWA Hiroyuki [Fri, 2 Mar 2012 02:54:23 +0000 (10:54 +0800)]
qemu driver for virDomainGetCPUstats using cpuacct cgroup.

* For now, only "cpu_time" is supported.
* cpuacct cgroup is used for providing percpu cputime information.

* src/qemu/qemu.conf     - take care of cpuacct cgroup.
* src/qemu/qemu_conf.c   - take care of cpuacct cgroup.
* src/qemu/qemu_driver.c - added an interface
* src/util/cgroup.c/h    - added interface for getting percpu cputime

Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
13 years agoadd nodeGetCPUmap() for getting available CPU IDs in a cpumap.
KAMEZAWA Hiroyuki [Fri, 2 Mar 2012 02:54:22 +0000 (10:54 +0800)]
add nodeGetCPUmap() for getting available CPU IDs in a cpumap.

Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
13 years agodocs: Fix typo
Osier Yang [Wed, 7 Mar 2012 04:01:33 +0000 (12:01 +0800)]
docs: Fix typo

It used "&lt" for ">", reported by Kyla Zhang <weizhan@redhat.com>

13 years agoBuild error on OSX in src/util/virnetlink.c
Duncan Rance [Tue, 6 Mar 2012 16:15:41 +0000 (16:15 +0000)]
Build error on OSX in src/util/virnetlink.c

I'm building on OSX with no libnl. I had to do this to get src/util/virnetlink.c to compile:

13 years agoqemu: install port profile and mac address on netdev hostdevs
Roopa Prabhu [Tue, 6 Mar 2012 01:12:44 +0000 (17:12 -0800)]
qemu: install port profile and mac address on netdev hostdevs

These changes are applied only if the hostdev has a parent net device
(i.e. if it was defined as "<interface type='hostdev'>" rather than
just "<hostdev>").  If the parent netdevice has virtual port
information, the original virtualport associate functions are called
(these set and restore both mac and port profile on an
interface). Otherwise, only mac address is set on the device.

Note that This is only supported for SR-IOV Virtual Functions (not for
standard PCI or USB netdevs), and virtualport association is only
supported for 802.1Qbh. For all other types of cards and types of
virtualport, a "Config Unsupported" error is returned and the
operation fails.

Signed-off-by: Roopa Prabhu <roprabhu@cisco.com>
13 years agoutil: Changes to support portprofiles for hostdevs
Roopa Prabhu [Tue, 6 Mar 2012 01:12:39 +0000 (17:12 -0800)]
util: Changes to support portprofiles for hostdevs

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: Roopa Prabhu <roprabhu@cisco.com>
13 years agoutil: support functions for mac/portprofile associations on hostdev
Roopa Prabhu [Tue, 6 Mar 2012 01:12:34 +0000 (17:12 -0800)]
util: support functions for mac/portprofile associations on hostdev

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: Roopa Prabhu <roprabhu@cisco.com>
13 years agoutil: two new pci util functions
Roopa Prabhu [Tue, 6 Mar 2012 01:12:23 +0000 (17:12 -0800)]
util: two new pci util functions

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: Roopa Prabhu <roprabhu@cisco.com>
13 years agoqemu: support type=hostdev network device live hotplug attach/detach
Laine Stump [Mon, 27 Feb 2012 19:20:17 +0000 (14:20 -0500)]
qemu: support type=hostdev network device live hotplug attach/detach

qemuDomainAttachNetDevice

  - re-ordered some things at start of function because
    networkAllocateActualDevice should always be run and a slot
    in def->nets always allocated, but host_net_add isn't needed
    if the actual type is hostdev.

  - if actual type is hostdev, defer to
    qemuDomainAttachHostDevice (which will reach up to the NetDef
    for things like MAC address when necessary). After return
    from qemuDomainAttachHostDevice, slip directly to cleanup,
    since the rest of the function is specific to emulated net
    devices.

  - put assignment of new NetDef into expanded def->nets down
    below cleanup: (but only on success) since it is also needed
    for emulated and hostdev net devices.

qemuDomainDetachHostDevice

  - after locating the exact device to detach, check if it's a
    network device and, if so, use toplevel
    qemuDomainDetachNetDevice instead so that the def->nets list
    is properly updated, and 'actual device' properly returned to
    network pool if appropriate. Otherwise, for normal hostdevs,
    call the lower level qemuDomainDetachThisDevice.

qemuDomainDetachNetDevice

  - This is where it gets a bit tricky. After locating the device
    on the def->nets list, if the network device type == hostdev,
    call the *lower level* qemuDomainDetachThisDevice (which will
    reach back up to the parent net device for MAC address /
    virtualport when appropriate, then clear the device out of
    def->hostdevs) before skipping past all the emulated
    net-device-specific code to cleanup:, where the network
    device is removed from def->nets, and the network device
    object is freed.

In short, any time a hostdev-type network device is detached, we must
go through the toplevel virDomaineDetachNetDevice function first and
last, to make sure 1) the def->nnets list is properly managed, and 2)
any device allocated with networkAllocateActualDevice is properly
freed. At the same time, in the middle we need to go through the
lower-level vidDomainDetach*This*HostDevice to be sure that 1) the
def->hostdevs list is properly managed, 2) the PCI device is properly
detached from the guest and reattached to the host (if appropriate),
and 3) any higher level teardown is called at the appropriate time, by
reaching back up to the NetDef config (part (3) will be covered in a
separate patch).

13 years agoqemu: use virDomainNetRemove instead of inline code
Laine Stump [Mon, 27 Feb 2012 17:22:22 +0000 (12:22 -0500)]
qemu: use virDomainNetRemove instead of inline code

The code being replaced is exactly identical to the newly global
function, right down to the comment.

13 years agoconf: change virDomainNetRemove from static to global
Laine Stump [Mon, 27 Feb 2012 17:13:41 +0000 (12:13 -0500)]
conf: change virDomainNetRemove from static to global

This exact code is duplicated in qemuDomainDetachNetDevice().

13 years agoqemu: support type='hostdev' network devices at domain start
Laine Stump [Thu, 23 Feb 2012 15:45:35 +0000 (10:45 -0500)]
qemu: support type='hostdev' network devices at domain start

This patch makes sure that each network device ("interface") of
type='hostdev' appears on both the hostdevs list and the nets list of
the virDomainDef, and it modifies the qemu driver startup code so that
these devices will be presented to qemu on the commandline as hostdevs
rather than as network devices.

It does not add support for hotplug of these type of devices, or code
to honor the <mac address> or <virtualport> given in the config (both
of those will be done in separate patches).

Once each device is placed on both lists, much of what this patch does
is modify places in the code that traverse all the device lists so
that these hybrid devices are only acted on once - either along with
the other hostdevs, or along with the other network interfaces. (In
many cases, only one of the lists is traversed / a specific operation
is performed on only one type of device. In those instances, the code
can remain unchanged.)

There is one special case - when building the commandline, interfaces
are allowed to proceed all the way through
networkAllocateActualDevice() before deciding to skip the rest of
netdev-specific processing - this is so that (once we have support for
networks with pools of hostdev devices) we can get the actual device
allocated, then rely on the loop processing all hostdevs to generate
the correct commandline.

(NB: <interface type='hostdev'> is only supported for PCI network
devices that are SR-IOV Virtual Functions (VF). Standard PCI[e] and
USB devices, and even the Physical Functions (PF) of SR-IOV devices
can only be assigned to a guest using the more basic <hostdev> device
entry. This limitation is mostly due to the fact that non-SR-IOV
ethernet devices tend to lose mac address configuration whenever the
card is reset, which happens when a card is assigned to a guest;
SR-IOV VFs fortunately don't suffer the same problem.)

13 years agoconf: parse/format type='hostdev' network interfaces
Laine Stump [Wed, 15 Feb 2012 17:37:15 +0000 (12:37 -0500)]
conf: parse/format type='hostdev' network interfaces

This is the new interface type that sets up an SR-IOV PCI network
device to be assigned to the guest with PCI passthrough after
initializing some network device-specific things from the config
(e.g. MAC address, virtualport profile parameters). Here is an example
of the syntax:

  <interface type='hostdev' managed='yes'>
    <source>
      <address type='pci' domain='0' bus='0' slot='4' function='3'/>
    </source>
    <mac address='00:11:22:33:44:55'/>
    <address type='pci' domain='0' bus='0' slot='7' function='0'/>
  </interface>

This would assign the PCI card from bus 0 slot 4 function 3 on the
host, to bus 0 slot 7 function 0 on the guest, but would first set the
MAC address of the card to 00:11:22:33:44:55.

NB: The parser and formatter don't care if the PCI card being
specified is a standard single function network adapter, or a virtual
function (VF) of an SR-IOV capable network adapter, but the upcoming
code that implements the back end of this config will work *only* with
SR-IOV VFs. This is because modifying the mac address of a standard
network adapter prior to assigning it to a guest is pointless - part
of the device reset that occurs during that process will reset the MAC
address to the value programmed into the card's firmware.

Although it's not supported by any of libvirt's hypervisor drivers,
usb network hostdevs are also supported in the parser and formatter
for completeness and consistency. <source> syntax is identical to that
for plain <hostdev> devices, except that the <address> element should
have "type='usb'" added if bus/device are specified:

  <interface type='hostdev'>
    <source>
      <address type='usb' bus='0' device='4'/>
    </source>
    <mac address='00:11:22:33:44:55'/>
  </interface>

If the vendor/product form of usb specification is used, type='usb'
is implied:

  <interface type='hostdev'>
    <source>
      <vendor id='0x0012'/>
      <product id='0x24dd'/>
    </source>
    <mac address='00:11:22:33:44:55'/>
  </interface>

Again, the upcoming patch to fill in the backend of this functionality
will log an error and fail with "Unsupported Config" if you actually
try to assign a USB network adapter to a guest using <interface
type='hostdev'> - just use a standard <hostdev> entry in that case
(and also for single-port PCI adapters).

13 years agoqemu: refactor hotplug detach of hostdevs
Laine Stump [Mon, 27 Feb 2012 11:53:19 +0000 (06:53 -0500)]
qemu: refactor hotplug detach of hostdevs

This refactoring is necessary to support hotplug detach of
type=hostdev network devices, but needs to be in a separate patch to
make potential debugging of regressions more practical.

Rather than the lowest level functions searching for a matching
device, the search is now done in the toplevel function, and an
intermediate-level function (qemuDomainDetachThisHostDevice()), which
expects that the device's entry is already found, is called (this
intermediate function will be called by qemuDomainDetachNetDevice() in
order to support detach of type=hostdev net devices)

This patch should result in 0 differences in functionality.

13 years agoqemu: re-order functions in qemu_hotplug.c
Laine Stump [Mon, 27 Feb 2012 12:03:12 +0000 (07:03 -0500)]
qemu: re-order functions in qemu_hotplug.c

Code movement only, no functional change. This is necessary to prevent
a forward reference in an upcoming patch.

13 years agoconf: hostdev utility functions
Laine Stump [Mon, 27 Feb 2012 06:46:47 +0000 (01:46 -0500)]
conf: hostdev utility functions

Three new functions useful in other files:

virDomainHostdevInsert:

Add a new hostdev at the end of the array. This would more sensibly be
called virDomainHostdevAppend, but the existing functions for other
types of devices are called Insert.

virDomainHostdevRemove:

Eliminates one entry from the hostdevs array, but doesn't free it;
patterned after the code at the end of the two
qemuDomainDetachHostXXXDevice functions (and also other pre-existing
virDomainXXXRemove functions for other device types).

virDomainHostdevFind:

This function is patterned from the search loops at the top of
qemuDomainDetachHostPciDevice and qemuDomainDetachHostUsbDevice, and
will be used to re-factor those (and other detach-related) functions.

13 years agoconf: put subsys part of virDomainHostdevDef into its own struct
Laine Stump [Mon, 27 Feb 2012 06:42:22 +0000 (01:42 -0500)]
conf: put subsys part of virDomainHostdevDef into its own struct

To shorten some new code that accesses the many fields within the
subsys struct of a hostdev, create a separate toplevel, typedefed
virDomainHostdevSubsys struct so that we can define temporary pointers
to the subsys part.

13 years agoconf: give each hostdevdef a parent pointer
Laine Stump [Fri, 3 Feb 2012 16:13:08 +0000 (11:13 -0500)]
conf: give each hostdevdef a parent pointer

The parent can be any type of device. It defaults to type=none, and a
NULL pointer. The intent is that if a hostdevdef is contained in the
def for a higher level device (e.g. virDomainNetDef), hostdev->parent
will point to the higher level device, and type will be set to that
type of device. This way, during attach and detach of the device,
parent can be checked, and appropriate callouts made to do higher
level device initialization (e.g. setting MAC address).

Also, although these hostdevs with parents will be added to a domain's
hostdevs list, they will be treated slightly differently when
traversing the list, e.g. virDomainHostdefDefFree for a hostdev that
has a parent doesn't need to be called (and will be a NOP); it will
simply be removed from the list (since the parent device object is in
its own type-specific list, and will be freed from there).

13 years agoconf: HostdevDef parse/format helper functions
Laine Stump [Sun, 19 Feb 2012 21:04:44 +0000 (16:04 -0500)]
conf: HostdevDef parse/format helper functions

In an upcoming patch, virDomainNetDef will acquire a
virDomainHostdevDef, and the <interface> XML will take on some of the
elements of a <hostdev>. To avoid duplicating the code for parsing and
formatting the <source> element (which will be nearly identical in
these two cases), this patch factors those parts out of the
HostdevDef's parse and format functions, and puts them into separate
helper functions that are now called by the HostdevDef
parser/formatter, and will soon be called by the NetDef
parser/formatter.

One change in behavior - previously virDomainHostdevDefParseXML() had
diverged from current common coding practice by logging an error and
failing if it found any subelements of <hostdev> other than those it
understood (standard libvirt practice is to ignore/discard unknown
elements and attributes during parse). The new helper function ignores
unknown elements, and thus so does the new
virDomainHostdevDefParseXML.

13 years agoconf: make hostdev info a separate object
Laine Stump [Tue, 31 Jan 2012 09:16:54 +0000 (04:16 -0500)]
conf: make hostdev info a separate object

In order to allow for a virDomainHostdevDef that uses the
virDomainDeviceInfo of a "higher level" device (such as a
virDomainNetDef), this patch changes the virDomainDeviceInfo in the
HostdevDef into a virDomainDeviceInfoPtr. Rather than adding checks
all over the code to check for a null info, we just guarantee that it
is always valid. The new function virDomainHostdevDefAlloc() allocates
a virDomainDeviceInfo and plugs it in, and virDomainHostdevDefFree()
makes sure it is freed.

There were 4 places allocating virDomainHostdevDefs, all of them
parsers of one sort or another, and those have all had their
VIR_ALLOC(hostdev) changed to virDomainHostdevDefAlloc(). Other than
that, and the new functions, all the rest of the changes are just
mechanical removals of "&" or changing "." to "->".

13 years agoconf: add device pointer to args of virDomainDeviceInfoIterate callback
Laine Stump [Wed, 22 Feb 2012 21:06:10 +0000 (16:06 -0500)]
conf: add device pointer to args of virDomainDeviceInfoIterate callback

There will be cases where the iterator callback will need to know the
type of the device whose info is being operated on, and possibly even
need to use some of the device's config. This patch adds a
virDomainDeviceDefPtr to the args of every callback, and fills it in
appropriately as the devices are iterated through.

13 years agoqemu: rename virDomainDeviceInfoPtr variables to avoid confusion
Laine Stump [Thu, 23 Feb 2012 17:59:21 +0000 (12:59 -0500)]
qemu: rename virDomainDeviceInfoPtr variables to avoid confusion

The virDomainDeviceInfoPtrs in qemuCollectPCIAddress and
qemuComparePCIDevice are named "dev" and "dev1", but those functions
will be changed (in order to match a change in the args sent to
virDomainDeviceInfoIterate() callback args) to contain a
virDomainDeviceDefPtr device.

This patch renames "dev" to "info" (and "dev[n]" to "info[n]") to
avoid later confusion.

13 years agoconf: reorder static functions in domain_conf.c
Laine Stump [Sat, 18 Feb 2012 03:32:21 +0000 (22:32 -0500)]
conf: reorder static functions in domain_conf.c

No code change, movement only.  This is necessary to eliminate forward
references.

13 years agoconf: relocate virDomainDeviceDef and virDomainHostdevDef
Laine Stump [Thu, 16 Feb 2012 21:41:47 +0000 (16:41 -0500)]
conf: relocate virDomainDeviceDef and virDomainHostdevDef

This patch is only code movement + adding some forward definitions of
typedefs.

virDomainHostdevDef (not just a pointer to it, but an actual object)
will be needed in virDomainNetDef and virDomainActualNetDef, so it
must be relocated earlier in the file.

Likewise, virDomainDeviceDef will be needed in virDomainHostdevDef, so
it must be moved up even earlier. This, in turn, creates a forward
reference problem, but fortunately only with pointers to other device
types, so their typedefs can be moved up in the file, eliminating the
problem.

13 years agoconf: add missing device types to virDomainDevice(Type|Def)
Laine Stump [Wed, 22 Feb 2012 20:54:35 +0000 (15:54 -0500)]
conf: add missing device types to virDomainDevice(Type|Def)

Not all device types were represented in virDomainDeviceType, so some
types of devices couldn't be represented in a virDomainDeviceDef
(which requires a different type of pointer in the union for each
different kind of device).

Since serial, parallel, channel, and console devices are all
virDomainChrDef, and the virDomainDeviceType is never used to produce
a string from the type (and only used in the other direction
internally to code, never to produce XML), I only added one "CHR"
type, which is associated with "virDomainChrDefPtr chr" in the union.

13 years agoFix build after commit e3ba4025
Jim Fehlig [Mon, 5 Mar 2012 19:08:54 +0000 (12:08 -0700)]
Fix build after commit e3ba4025

Commit e3ba4025 introduced a few build errors with HAVE_LIBNL undefined.

13 years agoutil: eliminate crash in virNetDevMacVLanCreateWithVPortProfile
Laine Stump [Mon, 5 Mar 2012 19:53:48 +0000 (14:53 -0500)]
util: eliminate crash in virNetDevMacVLanCreateWithVPortProfile

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.

13 years agoblockResize: add flag for bytes
Eric Blake [Sat, 3 Mar 2012 14:43:22 +0000 (07:43 -0700)]
blockResize: add flag for bytes

Qemu supports sizing by bytes; we shouldn't force the user to
round up if they really wanted an unaligned total size.

* include/libvirt/libvirt.h.in (VIR_DOMAIN_BLOCK_RESIZE_BYTES):
New flag.
* src/libvirt.c (virDomainBlockResize): Document it.
* src/qemu/qemu_monitor_json.c (qemuMonitorJSONBlockResize): Take
size in bytes.
* src/qemu/qemu_monitor_text.c (qemuMonitorTextBlockResize):
Likewise.  Pass bytes, not megabytes, to monitor.
* src/qemu/qemu_driver.c (qemuDomainBlockResize): Implement new
flag.

13 years agoqemu: Shared or readonly disks are always safe wrt migration
Jiri Denemark [Mon, 5 Mar 2012 11:10:21 +0000 (12:10 +0100)]
qemu: Shared or readonly disks are always safe wrt migration

No matter what cache mode is used, readonly disks are always safe wrt
migration. Shared disks are required to be readonly or to disable
host-side cache, which makes them safe as well.

13 years agolibvirt-guests: Add parallel startup and shutdown of guests
Peter Krempa [Tue, 28 Feb 2012 15:09:42 +0000 (16:09 +0100)]
libvirt-guests: Add parallel startup and shutdown of guests

With this patch, it's possible to shut down guests in parallel. Parallel
startup was possible before, but this functionality was not documented
properly.

To enable parallel startup set the START_DELAY to 0.

Parallel shutdown has a configurable parameter PARALLEL_SHUTDOWN that
defines the number of machines being shut down in parallel. Enabling
this feature changes the semantics of SHUTDOWN_TIMEOUT parameter that is
applied as a cumulative timeout to shutdown all guests on a URI.

13 years agorpc: Fix client crash on connection close
Jiri Denemark [Fri, 2 Mar 2012 18:57:27 +0000 (19:57 +0100)]
rpc: Fix client crash on connection close

A multi-threaded client with event loop may crash if one of its threads
closes a connection while event loop is in the middle of sending
keep-alive message (either request or response). The right place for it
is inside virNetClientIOEventLoop() between poll() and
virNetClientLock(). We should only close a connection directly if no-one
is using it and defer the closing to the last user otherwise. So far we
only did so if the close was initiated by keep-alive timeout.

13 years agobuild: Fix build with dtrace + apparmor
Jiri Denemark [Thu, 1 Mar 2012 15:02:31 +0000 (16:02 +0100)]
build: Fix build with dtrace + apparmor

Building virt-aa-helper with dtrace probes enabled, ldd complained about
undefined references:

./.libs/libvirt_util.a(libvirt_util_la-event_poll.o):(.note.stapsdt+0x24):
undefined reference to `libvirt_event_poll_purge_timeout_semaphore'
...

13 years agoFix type and add missed comment for diskChange callback
Osier Yang [Mon, 5 Mar 2012 10:41:20 +0000 (18:41 +0800)]
Fix type and add missed comment for diskChange callback

Comment for parameter devAlias is missed. And a typo should
be caused by copy & paste.

13 years agoqemu: Fix indention
Osier Yang [Mon, 5 Mar 2012 10:31:59 +0000 (18:31 +0800)]
qemu: Fix indention

13 years agocpu: Add new flag supported by qemu to the cpu definition
Peter Krempa [Wed, 29 Feb 2012 14:47:38 +0000 (15:47 +0100)]
cpu: Add new flag supported by qemu to the cpu definition

Some new cpu features were added to qemu. This patch adds some of them
to our CPU map.

13 years agoCorrect a check for capacity arg of storageVolumeResize()
Zeeshan Ali (Khattak) [Sat, 3 Mar 2012 03:18:59 +0000 (05:18 +0200)]
Correct a check for capacity arg of storageVolumeResize()

Lets say I got a volume with '1G' allocation and '10G' capacity. The
available space in the parent pool is '5G'. With the current check for
overcapacity, I can only try to resize to <= '6G'. You see the problem?

13 years agoutil: combine bools in virNetDevTapCreateInBridgePort into flags
Laine Stump [Thu, 1 Mar 2012 20:35:30 +0000 (15:35 -0500)]
util: combine bools in virNetDevTapCreateInBridgePort into flags

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.

13 years agoutil: centralize tap device MAC address 1st byte "0xFE" modification
Ansis Atteka [Thu, 16 Feb 2012 23:49:57 +0000 (15:49 -0800)]
util: centralize tap device MAC address 1st byte "0xFE" modification

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.

13 years agodaemon: Remove deprecated HAL from init script dependencies
Peter Krempa [Fri, 2 Mar 2012 14:12:32 +0000 (15:12 +0100)]
daemon: Remove deprecated HAL from init script dependencies

The init script for the daemon requests to start HAL although it has
been deprecated long time ago. This patch removes the dependency.

13 years agobuild: fix output of pid values
Eric Blake [Fri, 10 Feb 2012 23:52:01 +0000 (16:52 -0700)]
build: fix output of pid values

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.

13 years agobuild: use correct type for pid and similar types
Eric Blake [Fri, 10 Feb 2012 23:08:11 +0000 (16:08 -0700)]
build: use correct type for pid and similar types

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.

13 years agobuild: prohibit cross-inclusion
Eric Blake [Fri, 2 Mar 2012 00:21:08 +0000 (17:21 -0700)]
build: prohibit cross-inclusion

Make it easier to detect invalid cross-directory includes, by
adding a syntax check.  The check is designed to be extensible:
the default case lists only the non-driver directories, and
specific directories can list a different set (for example,
util/ can only use itself, network/ can only use itself, util/,
or conf/).

* .gnulib: Update to latest, for syntax check improvment.
* cfg.mk (sc_prohibit_cross_inclusion): New check.
(sc_prohibit_strncmp, sc_libvirt_unmarked_diagnostics): Simplify.

13 years agoavoid global variable shadowed
Hu Tao [Fri, 2 Mar 2012 02:52:59 +0000 (10:52 +0800)]
avoid global variable shadowed

If "conf/domain_conf.h" included in file nodeinfo.c, gcc complains about
a variable shadowing. fix it for potential further including of the file.

ref: https://www.redhat.com/archives/libvir-list/2012-February/msg00955.html

13 years agoutil: remove unneeded #include in virrandom.c
Laine Stump [Thu, 1 Mar 2012 16:42:30 +0000 (11:42 -0500)]
util: remove unneeded #include in virrandom.c

Commit 7c90026 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.

13 years agovirsh: expose partial pull
Eric Blake [Sat, 18 Feb 2012 16:55:45 +0000 (09:55 -0700)]
virsh: expose partial pull

Now virsh can call virDomainBlockRebase.

* tools/virsh.c (cmdBlockPull): Add --base parameter.
(blockJobImpl): Use it to expose BlockRebase API.
* tools/virsh.pod (blockpull): Document it.

13 years agoqemu: pass block pull backing file to monitor
Eric Blake [Sat, 18 Feb 2012 16:20:01 +0000 (09:20 -0700)]
qemu: pass block pull backing file to monitor

This actually wires up the new optional parameter to block_stream:
http://wiki.qemu.org/Features/LiveBlockMigration/ImageStreamingAPI

The error checking is still sparse, since libvirt must not use
qemu-img or header probing on a qcow2 file in use by qemu to
check if the backing file name is valid; so for now, libvirt is
relying on qemu to diagnose an incorrect backing name.  Fixing this
will require libvirt to track the entire backing file chain at the
time qemu is started and keeps it updated with snapshot and pull
operations.

* src/qemu/qemu_monitor_json.c (qemuMonitorJSONBlockJob): Add
parameter, and update callers.
* src/qemu/qemu_monitor_json.h (qemuMonitorJSONBlockJob): Update
signature.
* src/qemu/qemu_monitor.h (qemuMonitorBlockJob): Likewise.
* src/qemu/qemu_driver.c (qemuDomainBlockJobImpl): Update caller.
* src/qemu/qemu_monitor.c (qemuMonitorBlockJob): Likewise.

13 years agoqemu: require json for block jobs
Eric Blake [Fri, 17 Feb 2012 21:55:35 +0000 (14:55 -0700)]
qemu: require json for block jobs

Block job commands are not part of upstream qemu until 1.1; and
proper support of job completion and cancellation depends on being
able to receive QMP events, which implies the JSON monitor.
Additionally, some early versions of block job commands were
backported to RHEL qemu, but these versions lacked asynchronous
job cancellation and partial block pull, so there are several
patches that will still be needed in this area of libvirt code
to support both flavors of block job commands.

Due to earlier patches in libvirt, we are guaranteed that all versions
of qemu that support block job commands already require libvirt to
use the JSON monitor.  That means that the text version of block jobs
will not be used, and having to refactor two copies of the block job
handlers makes no sense.  So instead, we delete the text handlers.

* src/qemu/qemu_monitor.c (qemuMonitorBlockJob): Drop text monitor
support.
* src/qemu/qemu_monitor_text.h (qemuMonitorTextBlockJob): Delete.
* src/qemu/qemu_monitor_text.c (qemuMonitorTextParseBlockJobOne)
(qemuMonitorTextParseBlockJob, qemuMonitorTextBlockJob):
Likewise.

13 years agofix alphabetical order of virNetlink functions in symbol file
Laine Stump [Wed, 29 Feb 2012 20:20:33 +0000 (15:20 -0500)]
fix alphabetical order of virNetlink functions in symbol file

13 years agoutil: wrap virnetlink.c to 80 columns
Laine Stump [Wed, 29 Feb 2012 20:21:27 +0000 (15:21 -0500)]
util: wrap virnetlink.c to 80 columns

13 years agobuild: update to latest gnulib
Eric Blake [Fri, 24 Feb 2012 19:01:15 +0000 (12:01 -0700)]
build: update to latest gnulib

It's been a while, and we're between releases, so now's as good
a time as any to resync.  This also fixes a build-breaker on
cygwin, where cygwin 1.7.11 introduced a header bug in <termios.h>.

* .gnulib: Update to latest.
* bootstrap: Resync.
* cfg.mk (sc_prohibit_strncmp): Copy upstream changes to
sc_prohibit_strcmp.

13 years agoFix typo in domain XML documentation
Christophe Fergeau [Wed, 29 Feb 2012 12:47:06 +0000 (13:47 +0100)]
Fix typo in domain XML documentation

s/Modyfing/Modifying

13 years agoAdd de-association handling to macvlan code
D. Herrendoerfer [Wed, 22 Feb 2012 13:17:14 +0000 (14:17 +0100)]
Add de-association handling to macvlan code

Add de-association handling for 802.1qbg (vepa) via lldpad
netlink messages. Also adds the possibility to perform an
association request without waiting for a confirmation.

Signed-off-by: D. Herrendoerfer <d.herrendoerfer@herrendoerfer.name>
13 years agoutil: Add netlink event handling to virnetlink.c
D. Herrendoerfer [Wed, 22 Feb 2012 13:17:13 +0000 (14:17 +0100)]
util: Add netlink event handling to virnetlink.c

This code adds a netlink event interface to libvirt.
It is based upon the event_poll code and makes use of
it. An event is generated for each netlink message sent
to the libvirt pid.

Signed-off-by: D. Herrendoerfer <d.herrendoerfer@herrendoerfer.name>
13 years agoSupport for cpu64-rhel* qemu cpu models
Martin Kletzander [Fri, 24 Feb 2012 09:44:19 +0000 (10:44 +0100)]
Support for cpu64-rhel* qemu cpu models

In qemu there are 2 cpu models (cpu64-rhel5 and cpu64-rhel6) not
supported by libvirt. This patch adds the support with the flags
specifications from /usr/share/qemu-kvm/cpu-model/cpu-x86_64.conf
The only difference is that AMD-specific features are removed so
the processor type is not vendor-specific. Those features are either
emulated or ignored by qemu if host CPU doesn't support them.

13 years agolxc: Cleaner fix for compilation without SELinux
Martin Kletzander [Fri, 10 Feb 2012 15:22:50 +0000 (16:22 +0100)]
lxc: Cleaner fix for compilation without SELinux

Just a cleanup of commit 32f881c6c42f94da70a3782fe20a058fe3dc39cc.

13 years agolibvirt-guests: Check if URI is reachable before launching commands
Peter Krempa [Tue, 28 Feb 2012 13:39:17 +0000 (14:39 +0100)]
libvirt-guests: Check if URI is reachable before launching commands

This patch adds a check to the libvirt-guests script to check for the
URI to be alive before attempting any calls. This avoids nasty error
messages and allows us to fail gracefully and continue on other URIs
configured in the script.

13 years agolibvirt-guests: Don't try to do a managed-save of transient guests
Peter Krempa [Tue, 28 Feb 2012 13:32:21 +0000 (14:32 +0100)]
libvirt-guests: Don't try to do a managed-save of transient guests

The libvirt-guests script tried to do a managed save of transient guest
that failed. This patch notifies which guests are transient (and not
being saved) and saves only the persistent ones.

13 years agolibvirt-guests: Add documentation and clean up to use virsh's improved list
Peter Krempa [Tue, 28 Feb 2012 12:58:59 +0000 (13:58 +0100)]
libvirt-guests: Add documentation and clean up to use virsh's improved list

This patch adds documentation to functions defined in the libvirt-guests
init script and changes use of virsh's new commands to make the script
easier.

13 years agoqemu: Add pre-migration hook
Jiri Denemark [Tue, 28 Feb 2012 12:42:42 +0000 (13:42 +0100)]
qemu: Add pre-migration hook

This hook is called during the Prepare phase on destination host and may
be used for changing domain XML.

13 years agohooks: Add support for capturing hook output
Jiri Denemark [Mon, 27 Feb 2012 16:06:22 +0000 (17:06 +0100)]
hooks: Add support for capturing hook output

Hooks may now be used as filters.

13 years agostorage: fix typo
Michal Privoznik [Wed, 29 Feb 2012 10:42:00 +0000 (11:42 +0100)]
storage: fix typo

* src/storage/storage_driver.c (storageVolumeWipeInternal):
    s/ pfitzner33/pfitzner33/.

13 years agoqemu: Don't emit tls-port spice option if port is -1
Jiri Denemark [Tue, 28 Feb 2012 12:44:08 +0000 (13:44 +0100)]
qemu: Don't emit tls-port spice option if port is -1

Bug introduced by commit eda0fc7a.

13 years agodocs: comments wiping supported algorithms
Alex Jia [Wed, 29 Feb 2012 09:48:58 +0000 (17:48 +0800)]
docs: comments wiping supported algorithms

The current scrub version doesn't support pfitzner7, pfitzner33 and schneier
patterns on RHEL, we should comment it in virsh man page.

* tools/virsh.pod: update wiping algorithms docs.

Signed-off-by: Alex Jia <ajia@redhat.com>
13 years agoutil: fix a typo
Alex Jia [Wed, 29 Feb 2012 06:53:48 +0000 (14:53 +0800)]
util: fix a typo

* src/util/event_poll.c: (virEventPollRunOnce): s/imeout/timeout/.

Signed-off-by: Alex Jia <ajia@redhat.com>
13 years agostorage: fix a typo
Alex Jia [Wed, 29 Feb 2012 06:20:32 +0000 (14:20 +0800)]
storage: fix a typo

* src/storage/storage_driver.c (storageVolumeWipeInternal): s/shneier/schneier.

http://code.google.com/p/diskscrub/

Signed-off-by: Alex Jia <ajia@redhat.com>
13 years agoDo not include binaries in EXTRA_DIST
Daniel Veillard [Wed, 29 Feb 2012 07:24:35 +0000 (15:24 +0800)]
Do not include binaries in EXTRA_DIST

commit f27f616ff899732fe90ce1f0f4abb3887cea5e17 broke "make dist"
by adding qemumonitortest which is a generated binary to the
EXTRA_DIST, hence breaking "make dist"

13 years agodocs: Fix libvirt name in qemu commandline namespace URL
Michal Privoznik [Tue, 28 Feb 2012 16:30:30 +0000 (17:30 +0100)]
docs: Fix libvirt name in qemu commandline namespace URL

s/libirt/libvirt/g

13 years agolibxl: eliminate memory leak in libxmlDomainModifyDeviceFlags
Laine Stump [Mon, 27 Feb 2012 10:52:29 +0000 (05:52 -0500)]
libxl: eliminate memory leak in libxmlDomainModifyDeviceFlags

This call to virDomainDeviceDefParse is both unnecessary (since
it will again be called at the top of the immediately following if(),
and if not there, then at the top of the if following that), but it
also creates a leak of one virDomainDeviceDef and one [whatever type
of device the DeviceDef is pointing to; probably a virDomainDiskDef]
in the case that the function has been called with
VIR_DOMAIN_DEVICE_MODIFY_CONFIG (the second parse will overwrite the
devicedef that was just created).

13 years agovirsh: Break long lines in virsh.pod
Osier Yang [Tue, 28 Feb 2012 07:41:37 +0000 (15:41 +0800)]
virsh: Break long lines in virsh.pod

No content changes, just breaking long lines.

13 years agovirsh: New command cmdChangeMedia
Osier Yang [Tue, 28 Feb 2012 07:36:38 +0000 (15:36 +0800)]
virsh: New command cmdChangeMedia

One could use it to eject, insert, or update media of the CDROM
or floppy drive. See the documentation for more details.

13 years agovirsh: Use vshFindDisk and vshPrepareDiskXML in cmdDetachDisk
Osier Yang [Tue, 14 Feb 2012 09:16:53 +0000 (17:16 +0800)]
virsh: Use vshFindDisk and vshPrepareDiskXML in cmdDetachDisk

The first use of the two new helper functions.

13 years agovirsh: Two new helper functions for disk device changes
Osier Yang [Tue, 28 Feb 2012 06:38:03 +0000 (14:38 +0800)]
virsh: Two new helper functions for disk device changes

vshFindDisk is to find the disk node in xml doc with given source
path or target of disk device, and type (indicates disk type,
normal disk or changeable disk).

vshPrepareDiskXML is to make changes on the disk node (e.g. create
and insert the new <source> node for inserting media of CDROM drive).

They are marked as unused temporarily.

13 years agotests: Add tests for virtio-scsi and ibmvscsi controllers
Osier Yang [Tue, 28 Feb 2012 06:01:31 +0000 (14:01 +0800)]
tests: Add tests for virtio-scsi and ibmvscsi controllers

13 years agoqemu: Build command line for the new address format
Osier Yang [Tue, 28 Feb 2012 03:39:43 +0000 (11:39 +0800)]
qemu: Build command line for the new address format

For any disk controller model which is not "lsilogic", the command
line will be like:

  -drive file=/dev/sda,if=none,id=drive-scsi0-0-3-0,format=raw \
  -device scsi-disk,bus=scsi0.0,channel=0,scsi-id=3,lun=0,i\
  drive=drive-scsi0-0-3-0,id=scsi0-0-3-0

The relationship between the libvirt address attrs and the qdev
properties are (controller model is not "lsilogic"; strings
inside <> represent libvirt adress attrs):
  bus=scsi<controller>.0
  channel=<bus>
  scsi-id=<target>
  lun=<unit>

* src/qemu/qemu_command.h: (New param "virDomainDefPtr def"
  for function qemuBuildDriveDevStr; new param "virDomainDefPtr
  vmdef" for function qemuAssignDeviceDiskAlias. Both for
  virDomainDiskFindControllerModel's use).

* src/qemu/qemu_command.c:
  - New param "virDomainDefPtr def" for qemuAssignDeviceDiskAliasCustom.
    For virDomainDiskFindControllerModel's use, if the disk bus is "scsi"
    and the controller model is not "lsilogic", "target" is one part of
    the alias name.
  - According change on qemuAssignDeviceDiskAlias and qemuBuildDriveDevStr

* src/qemu/qemu_hotplug.c:
  - Changes to be consistent with declarations of qemuAssignDeviceDiskAlias
    qemuBuildDriveDevStr, and qemuBuildControllerDevStr.

* tests/qemuxml2argvdata/qemuxml2argv-pseries-vio-user-assigned.args,
  tests/qemuxml2argvdata/qemuxml2argv-pseries-vio.args: Update the
  generated command line.

13 years agoqemu: New cap flag to indicate if channel is supported by scsi-disk
Osier Yang [Mon, 27 Feb 2012 10:20:21 +0000 (18:20 +0800)]
qemu: New cap flag to indicate if channel is supported by scsi-disk

13 years agoconf: Introduce new attribute for device address format
Osier Yang [Mon, 27 Feb 2012 10:19:54 +0000 (18:19 +0800)]
conf: Introduce new attribute for device address format

* src/conf/domain_conf.h: Add new member "target" to struct
  _virDomainDeviceDriveAddress.

* src/conf/domain_conf.c: Parse and format "target"

* Lots of tests (.xml) in tests/domainsnapshotxml2xmlout,
  tests/qemuxml2argvdata, tests/qemuxml2xmloutdata, and
  tests/vmx2xmldata/ are modified for newly introduced
  attribute "target" for address of "drive" type.

13 years agoconf: Add helper function to look up disk controller model
Osier Yang [Mon, 27 Feb 2012 09:20:11 +0000 (17:20 +0800)]
conf: Add helper function to look up disk controller model

13 years agoqemu: add virtio-scsi controller model
Paolo Bonzini [Mon, 27 Feb 2012 09:16:20 +0000 (17:16 +0800)]
qemu: add virtio-scsi controller model

Adding a new model for virtio-scsi roughly follows the same scheme
as the previous patch.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
13 years agoqemu: add ibmvscsi controller model
Paolo Bonzini [Mon, 27 Feb 2012 09:08:23 +0000 (17:08 +0800)]
qemu: add ibmvscsi controller model

KVM will be able to use a PCI SCSI controller even on POWER.  Let
the user specify the vSCSI controller by other means than a default.

After this patch, the QEMU driver will actually look at the model
and reject anything but auto, lsilogic and ibmvscsi.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Osier Yang <jyang@redhat.com>
13 years agoqemu: fix cleanup of bridge during failure of qemuDomainAttachNetDevice
Laine Stump [Tue, 28 Feb 2012 03:43:23 +0000 (22:43 -0500)]
qemu: fix cleanup of bridge during failure of qemuDomainAttachNetDevice

In qemuDomainAttachNetDevice, the guest's tap interface has only been
attached to the bridge if iface_connected is true. It's possible for
an error to occur prior to that happening, and previously we would
attempt to remove the tap interface from the bridge even if it hadn't
been attached.

13 years agoqemu: unescape HMP commands before converting them to json
Josh Durgin [Sun, 26 Feb 2012 00:48:02 +0000 (16:48 -0800)]
qemu: unescape HMP commands before converting them to json

QMP commands don't need to be escaped since converting them to json
also escapes special characters. When a QMP command fails, however,
libvirt falls back to HMP commands. These fallback functions
(qemuMonitorText*) do their own escaping, and pass the result directly
to qemuMonitorHMPCommandWithFd. If the monitor is in json mode, these
pre-escaped commands will be escaped again when converted to json,
which can result in the wrong arguments being sent.

For example, a filename test\file would be sent in json as
test\\file.

This prevented attaching an image file with a " or \ in its name in
qemu 1.0.50, and also broke rbd attachment (which uses backslashes to
escape some internal arguments.)

Reported-by: Masuko Tomoya <tomoya.masuko@gmail.com>
Signed-off-by: Josh Durgin <josh.durgin@dreamhost.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
13 years agoqemu: Add ability to abort existing console while creating new one
Peter Krempa [Thu, 6 Oct 2011 10:24:47 +0000 (12:24 +0200)]
qemu: Add ability to abort existing console while creating new one

This patch fixes console corruption, that happens if two concurrent
sessions are opened for a single console on a domain. Result of this
corruption was that each of the console streams recieved just a part
of the data written to the pipe so every console rendered unusable.

New helper function for safe console handling is used to establish the
console stream connection. This function ensures that no other libvirt
client is using the console (with the ability to disconnect consoles of
libvirt clients) and that no UUCP style lockfile is placed on the PTY
device.

* src/qemu/qemu_domain.h
        - add data structure to domain's private data dealing with
          console connections
* src/qemu/qemu_domain.c:
        - allocate/free domain's console data structure
* src/qemu/qemu_driver.c
        - use the new helper function for console handling

13 years agoutil: Add helpers for safe domain console operations
Peter Krempa [Fri, 25 Nov 2011 15:25:14 +0000 (16:25 +0100)]
util: Add helpers for safe domain console operations

This patch adds a set of functions used in creating console streams for
domains using PTYs and ensures mutually exclusive access to the PTYs.

If mutually exclusive access is not used, two clients may open the same
console, which results in corruption on both clients as both of them
race to read data from the PTY.

Two approaches are used to ensure this:
1) Internal data structure holding open PTYs.
        This is used internally and enables the user to forcibly
        terminate another console connection eg. when somebody leaves
        the console open on another host.

2) UUCP style lock files:
        This uses UUCP lock files according to the  FHS
        ( http://www.pathname.com/fhs/pub/fhs-2.3.html#VARLOCKLOCKFILES )
        to check if other programs (like minicom) are not using the pty
        device of the console.

        This feature is disabled by default and may be enabled using
        configure parameter
        --with-console-lock-files=/path/to/lock/file/directory
        or --with-console-lock-files=auto (which tries to infer the
        location from OS used (currently only linux).

        On usual linux systems, normal users may not write to the
        /var/lock directory containing the locks. This poses problems
        while in session mode. If the current user has no access to the
        lockfile directory, check for presence of the file is still
        done, but no lock file is created. This does NOT result in an
        error.

13 years agofdstream: Add internal callback on stream close
Peter Krempa [Thu, 23 Feb 2012 12:45:25 +0000 (13:45 +0100)]
fdstream: Add internal callback on stream close

This patch adds another callback to a FDstream object. The original
callback is used by the daemon stream driver to handle events.

This callback is called if and only if the stream is about to be closed.
This might be used to handle cleanup steps after a fdstream exits. This
will be used later on in ensuring mutually exclusive access to consoles.

* src/fdstream.c:
        - emit the callback, when stream is being closed
        - add data structures needed to handle the callback
        - add function to register callback
* src/fdstream.h:
        - define function prototypes for the callback

13 years agofdstream: Emit stream abort callback even if poll() doesnt.
Peter Krempa [Thu, 23 Feb 2012 11:54:18 +0000 (12:54 +0100)]
fdstream: Emit stream abort callback even if poll() doesnt.

This patch causes the fdstream driver to call the stream event callback
if virStreamAbort() is called on a stream using this driver.

A remote handler for a stream can only detect changes via stream events,
so this event callback is necessary in order to enable a daemon to abort
a stream in such a way that the client will see the change.

* src/fdstream.c:
        - modify close function to call stream event callback

13 years agovirsh: add support for VIR_DOMAIN_CONSOLE_* flags
Peter Krempa [Wed, 12 Oct 2011 10:59:15 +0000 (12:59 +0200)]
virsh: add support for VIR_DOMAIN_CONSOLE_* flags

This patch adds support for the newly introduced
VIR_DOMAIN_CONSOLE_FORCE and VIR_DOMAIN_CONSOLE_SAFE flags. The console
command now has an optional parameter --force that specifies that the
user wants to forcibly interrupt an ongoing console session and create
a new one. Flag --safe requests that the console should be opened only
if the hypervisor driver supports safe console handling.

The behaviour to this point was that the daemon opened two streams to
the console, that competed for data from the pipe, and the result was
that both of the consoles ended up scrambled.

This patch doesn't modify operation of other commands dealing with
console connections (start, create) as those open connections to newly
started domains making it virtually impossible for another client to race
for the console and steal it.

* tools/console.c:
        - add support for flag passthrough
* tools/console.h:
        - modify function prototypes to match impl.
* tools/virsh.c:
        - add flag --force for the console command

13 years agoAdd flags for virDomainOpenConsole
Peter Krempa [Wed, 12 Oct 2011 11:19:48 +0000 (13:19 +0200)]
Add flags for virDomainOpenConsole

This patch adds a set of flags to be used with the virDomainOpenConsole
API call to specify if the user wishes to interrupt an existing console
session or just to try open a new one.

VIR_DOMAIN_CONSOLE_SAFE - specifies that the console connection should
                          be opened only if the hypervisor supports
                          mutually exclusive access to console devices

VIR_DOMAIN_CONSOLE_FORCE - specifies that the caller wishes to interrupt
                           existing session and force a creation of a
                           new one.

13 years agopidfile: Make checking binary path in virPidFileRead optional
Peter Krempa [Thu, 26 Jan 2012 15:25:38 +0000 (16:25 +0100)]
pidfile: Make checking binary path in virPidFileRead optional

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.

13 years agoqemu: Implement virDomainPMWakeup API
Michal Privoznik [Fri, 10 Feb 2012 12:33:52 +0000 (13:33 +0100)]
qemu: Implement virDomainPMWakeup API

using 'system-wakeup' monitor command. It is supported only in JSON,
as we are enabling it if possible. Moreover, this command is available
in qemu-1.1+ which definitely has JSON.