]> xenbits.xensource.com Git - libvirt.git/log
libvirt.git
11 years agoSupport apparmor in RPM spec
Daniel P. Berrange [Tue, 30 Jul 2013 11:04:55 +0000 (12:04 +0100)]
Support apparmor in RPM spec

If libapparmor-devel happens to be installed when building the
RPM, it will failed due to unlisted virt-aa-helper in %files.
Add support for apparmor in the spec, so that we can explicitly
turn it on/off, defaulting to off in all distros. This causes
--without-apparmor to be given to configure, preventing the
build failures if the user happens to have libapparmor-devel
present.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agoDelete obsolete / unused python test files
Daniel P. Berrange [Tue, 30 Jul 2013 10:24:22 +0000 (11:24 +0100)]
Delete obsolete / unused python test files

The python/tests directory contains a number of so called
"tests" for the python API. These are all hardcoded to
look for Xen and cannot be run in any automated fashion,
and no one is ever manually running them. Given that they
don't meaningully contribute to the test coverage, delete
them.

For some reason these tests were also copied into the
filesystem as part of 'make install'. The change to the
RPM in commit 3347a4203278ec93d7b0ceb88b5ed10e4f14765c
caused a build failure, since it removed the code which
deleted these installed tests.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agoFix minor typos in messages and docs
Yuri Chornoivan [Tue, 30 Jul 2013 08:21:11 +0000 (11:21 +0300)]
Fix minor typos in messages and docs

Signed-off-by: Eric Blake <eblake@redhat.com>
11 years agoRelease of libvirt-1.1.1
Daniel Veillard [Tue, 30 Jul 2013 09:38:35 +0000 (17:38 +0800)]
Release of libvirt-1.1.1

* configure.ac docs/news.html.in: update for the release
* po/*.po*: update localizations and regenerate

11 years agobuild: fix shunloadtest breakage
Eric Blake [Mon, 29 Jul 2013 19:06:27 +0000 (13:06 -0600)]
build: fix shunloadtest breakage

Commit 93ec384 was tested on mingw, but broke the build on Linux:

  CCLD     shunloadtest
shunloadtest.o: In function `main':
/home/eblake/libvirt/tests/shunloadtest.c:106: undefined reference to `virFilePrintf'
...
ssh.o: In function `main':
/home/eblake/libvirt/tests/ssh.c:43: undefined reference to `virFilePrintf'
/home/eblake/libvirt/tests/ssh.c:49: undefined reference to `virFilePrintf'

* tests/testutils.h (fprintf): Provide escape hatch.
* tests/shunloadtest.c: Use it.
* tests/ssh.c: Likewise.

Signed-off-by: Eric Blake <eblake@redhat.com>
11 years agoexamples: fix mingw build vs. printf
Eric Blake [Mon, 29 Jul 2013 18:53:36 +0000 (12:53 -0600)]
examples: fix mingw build vs. printf

Mingw *printf is a moving target; newer mingw now provides a version
of asprintf() that fails to understand %lld:

  CC       event_test-event-test.o
../../../../examples/domain-events/events-c/event-test.c: In function 'myDomainEventRTCChangeCallback':
../../../../examples/domain-events/events-c/event-test.c:270:18: error: unknown conversion type character 'l' in format [-Werror=format=]
                  virDomainGetID(dom), offset) < 0)
                  ^

But since our examples already admitted that they were hacking around
a mingw deficiency, it is easier to just use printf() directly, coupled
with <inttypes.h> macros, for a more portable work-around.

* examples/domain-events/events-c/event-test.c
(myDomainEventRTCChangeCallback): Use PRIdMAX instead of asprintf.

Signed-off-by: Eric Blake <eblake@redhat.com>
11 years agotests: consistently use virFilePrintf
Eric Blake [Mon, 29 Jul 2013 18:01:19 +0000 (12:01 -0600)]
tests: consistently use virFilePrintf

Commit a2619962 introduced virFilePrintf to work around the fact
that gnulib doesn't (yet) provide guarantees about fprintf() vs.
%z, which in turn causes all sorts of mingw compilation errors:

../../tests/testutils.c: In function 'virtTestResult':
../../tests/testutils.c:101:9: error: unknown conversion type character 'z' in format [-Werror=format=]
         fprintf(stderr, "%3zu) %-60s ", testCounter, name);
         ^

Rather than s/fprintf/virFilePrintf/ (and reformatting loads of
lines) across multiple files, it's easier to just hack the entire
testsuite to take advantage of our helper function.

* tests/testutils.c: s/fprintf/virFilePrintf/ for mingw.

Signed-off-by: Eric Blake <eblake@redhat.com>
11 years agobuild: skip systemd mock on non-Linux
Eric Blake [Mon, 29 Jul 2013 16:47:09 +0000 (10:47 -0600)]
build: skip systemd mock on non-Linux

A cross-compile to mingw failed:

  CC       virsystemdmock_la-virsystemdmock.lo
../../tests/virsystemdmock.c:29:6: error: 'dbus_connection_set_change_sigpipe' redeclared without dllimport attribute: previous dllimport ignored [-Werror=attributes]
 void dbus_connection_set_change_sigpipe(dbus_bool_t will_modify_sigpipe ATTRIBUTE_UNUSED)
      ^

But when you think about it, systemd is Linux-only, and even our
use of LD_PRELOAD to provide mock syscalls is Linux-only.

* tests/virsystemdmock.c: Avoid compilation outside Linux.

Signed-off-by: Eric Blake <eblake@redhat.com>
11 years agoRename VIR_DOMAIN_PAUSED_GUEST_PANICKED to VIR_DOMAIN_PAUSED_CRASHED
Daniel P. Berrange [Mon, 29 Jul 2013 16:54:57 +0000 (17:54 +0100)]
Rename VIR_DOMAIN_PAUSED_GUEST_PANICKED to VIR_DOMAIN_PAUSED_CRASHED

The VIR_DOMAIN_PAUSED_GUEST_PANICKED constant is badly named,
leaking the QEMU event name. Elsewhere in the API we use
'CRASHED' rather than 'PANICKED', and the addition of 'GUEST'
is redundant since all events are guest related.

Thus rename it to VIR_DOMAIN_PAUSED_CRASHED, which matches
with VIR_DOMAIN_RUNNING_CRASHED and VIR_DOMAIN_EVENT_CRASHED.

It was added in commit 14e7e0ae8db9843aea80245a3d9e6cf5f2ef720d
which post-dates v1.1.0, so is safe to rename before 1.1.1

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agoRemove VIR_DOMAIN_SHUTDOWN_CRASHED from public API
Daniel P. Berrange [Mon, 29 Jul 2013 16:46:14 +0000 (17:46 +0100)]
Remove VIR_DOMAIN_SHUTDOWN_CRASHED from public API

The VIR_DOMAIN_SHUTDOWN_CRASHED state constant does not appear
to be used in the QEMU code anyway. It also doesn't make much
(any) sense, since the 'shutdown' state is a transient state
between 'running' and 'shutoff' and when a guest crashes, it
does not end up in a 'shutdown' state, only 'shutoff'.

It was added in commit 14e7e0ae8db9843aea80245a3d9e6cf5f2ef720d
which post-dates v1.1.0, so is safe to remove before 1.1.1

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agoFix dbus message reading code on big endian hosts
Daniel P. Berrange [Mon, 29 Jul 2013 16:29:00 +0000 (17:29 +0100)]
Fix dbus message reading code on big endian hosts

The way we were casting small (<32bit) integers was broken
on big endian hosts, causing stack smashing. This was detected
in the test suite either by test failures due to incorrect
results, or by libc/gcc abort'ing with its stack canary
triggered.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agospec: Cat test-suite.log if make check fails
Jiri Denemark [Mon, 29 Jul 2013 15:36:20 +0000 (17:36 +0200)]
spec: Cat test-suite.log if make check fails

Current automake enables parallel test by default, which means test
details are only logged in test-suite.log and not printed to stderr.
This patch makes test failures directly visible in RPM build logs even
when parallel tests are turned on.

11 years agobuild: fix another virdbus issue on mingw
Eric Blake [Mon, 29 Jul 2013 15:58:19 +0000 (09:58 -0600)]
build: fix another virdbus issue on mingw

Depending on the set of mingw packages installed, it is possible
that other .c files hit the mingw header pollution from the
virdbus.h file.

In file included from ../../src/rpc/virnetserver.c:39:0:
../../src/util/virdbus.h:41:35: error: expected ';', ',' or ')' before 'struct'
                       const char *interface,
                                   ^

* src/util/virdbus.h (virDBusCallMethod): Match .c file change.

Signed-off-by: Eric Blake <eblake@redhat.com>
11 years agobuild: fix virutil build on mingw
Eric Blake [Mon, 29 Jul 2013 14:04:35 +0000 (08:04 -0600)]
build: fix virutil build on mingw

On platforms without decent group support, the build failed:

Cannot export virGetGroupList: symbol not defined
./.libs/libvirt_security_manager.a(libvirt_security_manager_la-security_dac.o): In function `virSecurityDACPreFork':
/home/eblake/libvirt-tmp/build/src/../../src/security/security_dac.c:248: undefined reference to `virGetGroupList'
collect2: error: ld returned 1 exit status

* src/util/virutil.c (virGetGroupList): Provide dummy implementation.

Signed-off-by: Eric Blake <eblake@redhat.com>
11 years agobuild: fix virthread build on mingw
Eric Blake [Mon, 29 Jul 2013 13:54:10 +0000 (07:54 -0600)]
build: fix virthread build on mingw

Our recent conversion to make VIR_ALLOC report oom wasn't
tested on mingw:

In file included from ../../src/util/virthread.c:29:0:
../../src/util/virthreadwin32.c: In function 'virCondWait':
../../src/util/virthreadwin32.c:166:81: error: 'VIR_FROM_THIS' undeclared (first use in this function)
     if (VIR_REALLOC_N(c->waiters, c->nwaiters + 1) < 0) {
                                                                                 ^

* src/util/virthreadwin32.c (VIR_FROM_THIS): Define.

Signed-off-by: Eric Blake <eblake@redhat.com>
11 years agobuild: fix virdbus build on mingw
Eric Blake [Mon, 29 Jul 2013 13:54:10 +0000 (07:54 -0600)]
build: fix virdbus build on mingw

Mingw headers pollute the namespace.

  CC       libvirt_util_la-virdbus.lo
../../src/util/virdbus.c:1102:35: error: expected ';', ',' or ')' before 'struct'
                       const char *interface,
                                   ^

* src/util/virdbus.c (virDBusCallMethod): Avoid 'interface'.

Signed-off-by: Eric Blake <eblake@redhat.com>
11 years agobuild: fix vircgroup build on mingw
Eric Blake [Mon, 29 Jul 2013 14:55:05 +0000 (08:55 -0600)]
build: fix vircgroup build on mingw

The previous patch was incomplete.

  CC       libvirt_util_la-vircgroup.lo
../../src/util/vircgroup.c:70:12: error: 'virCgroupPartitionEscape' declared 'static' but never defined [-Werror=unused-function]
 static int virCgroupPartitionEscape(char **path);
            ^

* src/util/vircgroup.c (virCgroupPartitionEscape): Move forward
declaration inside conditional.

Signed-off-by: Eric Blake <eblake@redhat.com>
11 years agoConditionalize build of virCgroupValidateMachineGroup
Daniel P. Berrange [Mon, 29 Jul 2013 13:36:07 +0000 (14:36 +0100)]
Conditionalize build of virCgroupValidateMachineGroup

The virCgroupValidateMachineGroup method calls some functions
which are only conditionally compiled, thus it too must be
made conditional. This fixes the build on non-Linux hosts.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agobuild: fix VPATH 'make check'
Eric Blake [Mon, 29 Jul 2013 13:00:00 +0000 (07:00 -0600)]
build: fix VPATH 'make check'

A VPATH build 'make check' was failing with:

  GEN      check-driverimpls
Can't open ../../src/../../src/lxc/lxc_monitor_protocol.h: No such file or directory at ../../src/check-driverimpls.pl line 29, <> line 27153.
Can't open ../../src/../../src/lxc/lxc_monitor_protocol.c: No such file or directory at ../../src/check-driverimpls.pl line 29, <> line 27153.
...
  GEN      check-aclrules
cannot read ../../src/../../src/remote/remote_protocol.x at ../../src/check-aclrules.pl line 128.

because $(srcdir) was being prepended to file names that already
included it.

* src/Makefile.am (check-driverimpls): Don't add srcdir twice.

Signed-off-by: Eric Blake <eblake@redhat.com>
11 years agopython: Drop TODO
Cole Robinson [Mon, 29 Jul 2013 11:53:16 +0000 (07:53 -0400)]
python: Drop TODO

File hasn't been really touched for 7 years. And with recent rawhide
changes it contributed to an RPM build failure. Let's drop it.

This also removes installation of a libvirt-python doc dir, so drop
handling of it from the RPM spec.

11 years agoFix probing of legacy Xen driver to not leave URI set
Daniel P. Berrange [Fri, 26 Jul 2013 16:28:02 +0000 (17:28 +0100)]
Fix probing of legacy Xen driver to not leave URI set

When the legacy Xen driver probes with a NULL URI, and
finds itself running on Xen, it will set conn->uri. A
little bit later though it checks to see if libxl support
exists, and if so declines the driver. This leaves the
conn->uri set to 'xen:///', so if libxl also declines
it, it prevents probing of the QEMU driver.

Once a driver has set the conn->uri, it must *never*
decline an open request. So we must move the libxl
check earlier

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agocpu: Fix one compile error for PPC.
Li Zhang [Mon, 29 Jul 2013 07:41:19 +0000 (15:41 +0800)]
cpu: Fix one compile error for PPC.

CPU data structure is refined, which causes one compile error for PPC.

Signed-off-by: Li Zhang <zhlcindy@linux.vnet.ibm.com>
11 years agocaps: use -device for primary video when qemu >=1.6
Guannan Ren [Fri, 26 Jul 2013 12:53:47 +0000 (20:53 +0800)]
caps: use -device for primary video when qemu >=1.6

https://bugzilla.redhat.com/show_bug.cgi?id=981094
The commit 0ad9025ef introduce qemu flag QEMU_CAPS_DEVICE_VIDEO_PRIMARY
for using -device VGA, -device cirrus-vga, -device vmware-svga and
-device qxl-vga. In use, for -device qxl-vga, mouse doesn't display
in guest window like the desciption in above bug.
This patch try to use -device for primary video when qemu >=1.6 which
contains the bug fix patch

11 years agobuild: avoid uninitialized use warning
Eric Blake [Fri, 26 Jul 2013 22:37:55 +0000 (16:37 -0600)]
build: avoid uninitialized use warning

Otherwise, with new enough gcc compiling at -O2, the build fails with:
../../src/conf/domain_conf.c: In function ‘virDomainDeviceDefPostParse’:
../../src/conf/domain_conf.c:2821:29: error: ‘cnt’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
             for (i = 0; i < *cnt; i++) {
                             ^
../../src/conf/domain_conf.c:2795:20: note: ‘cnt’ was declared here
         size_t i, *cnt;
                    ^
../../src/conf/domain_conf.c:2794:30: error: ‘arrPtr’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
         virDomainChrDefPtr **arrPtr;
                              ^

* src/conf/domain_conf.c (virDomainChrGetDomainPtrs): Always
assign into output parameters.

Signed-off-by: Eric Blake <eblake@redhat.com>
11 years agoSet default partition in libvirtd instead of libvirt_lxc
Daniel P. Berrange [Fri, 26 Jul 2013 14:59:16 +0000 (15:59 +0100)]
Set default partition in libvirtd instead of libvirt_lxc

By setting the default partition in libvirt_lxc it is not
visible when querying the live XML. Move setting of the
default partition into libvirtd virLXCProcessStart

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agovirStateDriver - Separate AutoStart from Initialize
John Ferlan [Thu, 25 Jul 2013 12:03:38 +0000 (08:03 -0400)]
virStateDriver - Separate AutoStart from Initialize

Adjust these drivers to handle their Autostart functionality after each
of the drivers has gone through their Initialization functions

11 years agoSeparate out StateAutoStart from StateInitialize
John Ferlan [Thu, 25 Jul 2013 12:01:02 +0000 (08:01 -0400)]
Separate out StateAutoStart from StateInitialize

Separation allows for dependent drivers to be make a connection during
the AutoStart phase of state initialization.

11 years agoResolve Coverity complaint in storagevolxml2argvtest
Ján Tomko [Fri, 26 Jul 2013 11:10:12 +0000 (13:10 +0200)]
Resolve Coverity complaint in storagevolxml2argvtest

Ignore NULL pool in testSetVolumeType to silence Coverity,
even though we only call it with NULL pool when vol is also NULL.

(13) Event var_deref_model: Passing null pointer "inputpool" to
function "testSetVolumeType(virStorageVolDefPtr, virStoragePoolDefPtr)",
which dereferences it. [details]
Also see events: [assign_zero]

95    testSetVolumeType(inputvol, inputpool);

11 years agoRemove redundant free in virNetworkDNSHostDefParseXML
Ján Tomko [Fri, 26 Jul 2013 10:21:13 +0000 (12:21 +0200)]
Remove redundant free in virNetworkDNSHostDefParseXML

ip has to be NULL at this point.

11 years agoRemove double space in error messages
Ján Tomko [Fri, 26 Jul 2013 10:15:41 +0000 (12:15 +0200)]
Remove double space in error messages

11 years agoDon't check validity of missing attributes in DNS SRV XML
Ján Tomko [Fri, 26 Jul 2013 10:11:21 +0000 (12:11 +0200)]
Don't check validity of missing attributes in DNS SRV XML

This fixes a crash if one of them is missing.

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

11 years agoSet the number of elements 0 in virNetwork*Clear
Ján Tomko [Fri, 26 Jul 2013 10:04:32 +0000 (12:04 +0200)]
Set the number of elements 0 in virNetwork*Clear

Decrementing it when it was already 0 causes an invalid free
in virNetworkDefUpdateDNSHost if virNetworkDNSHostDefParseXML
fails and virNetworkDNSHostDefClear gets called twice.

virNetworkForwardDefClear left the number untouched even if it
freed all the elements.

11 years agoformatdomain.html.in: Document implementation limitation of QoS
Michal Privoznik [Fri, 26 Jul 2013 09:42:53 +0000 (11:42 +0200)]
formatdomain.html.in: Document implementation limitation of QoS

The outbound/@peak is ignored (since QoS was introduced). This is due to
kernel limitation of know allowing ingress filters to have peak just
average rate. However, we should document this limitation to not confuse
users.

11 years agoformatdomain.html.in: Correctly use <code/> in #elementQoS
Michal Privoznik [Fri, 26 Jul 2013 09:40:52 +0000 (11:40 +0200)]
formatdomain.html.in: Correctly use <code/> in #elementQoS

Interestingly, we had <code>floor<code> ... </code>outbound</code> which
results in much larger block of text to be written in code style that
intended.

11 years agoconf:Fix a copy paste error
Alex Jia [Fri, 26 Jul 2013 09:19:16 +0000 (17:19 +0800)]
conf:Fix a copy paste error

Signed-off-by: Alex Jia <ajia@redhat.com>
11 years agoFix virsh snapshot-list error reporting
Jim Fehlig [Thu, 25 Jul 2013 20:18:14 +0000 (14:18 -0600)]
Fix virsh snapshot-list error reporting

Noticed that the expected "not supported" error is dropped when
invoking 'virsh snapshot-list dom' on a Xen installation running
the libxl driver

 virsh snapshot-list test
 error: Invalid snapshot: virDomainSnapshotFree

The error is overwritten by a call to virDomainSnapshotFree
in cleanup code within cmdSnapshotList.  Prevent overwritting
the real error by not calling virDomainSnapshotFree with a NULL
virDomainSnapshotPtr.

11 years agoSkip detecting placement if controller is disabled
Daniel P. Berrange [Thu, 25 Jul 2013 12:12:30 +0000 (13:12 +0100)]
Skip detecting placement if controller is disabled

If the app has provided a whitelist of controllers to be used,
we skip detecting its mount point. We still, however, fill in
the placement info which later confuses the machine name
validation code. Skip detecting placement if the controller
mount point is not set

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agoAdd 'controllers' arg to virCgroupNewDetect
Daniel P. Berrange [Wed, 24 Jul 2013 16:31:25 +0000 (17:31 +0100)]
Add 'controllers' arg to virCgroupNewDetect

When detecting cgroups we must honour any controllers
whitelist the driver may have.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agoFix detection of 'emulator' cgroup
Daniel P. Berrange [Wed, 24 Jul 2013 16:41:44 +0000 (17:41 +0100)]
Fix detection of 'emulator' cgroup

When a VM has an 'emulator' child cgroup present, we must
strip off that suffix when detecting the cgroup for a
machine

Rename the virCgroupIsValidMachineGroup method to
virCgroupValidateMachineGroup to make a bit clearer
that this isn't simply a boolean check, it will make
changes to the object.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agoMake virCgroupIsValidMachine static
Daniel P. Berrange [Wed, 24 Jul 2013 16:38:08 +0000 (17:38 +0100)]
Make virCgroupIsValidMachine static

The virCgroupIsValidMachine does not need to be called from
outside the cgroups file now, so make it static.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agoIntroduce a more convenient virCgroupNewDetectMachine
Daniel P. Berrange [Wed, 24 Jul 2013 16:36:42 +0000 (17:36 +0100)]
Introduce a more convenient virCgroupNewDetectMachine

Instead of requiring drivers to use a combination of calls
to virCgroupNewDetect and virCgroupIsValidMachine, combine
the two into virCgroupNewDetectMachine

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agovirdbustest: Don't pass number of arguments as long long
Guido Günther [Wed, 24 Jul 2013 21:19:43 +0000 (23:19 +0200)]
virdbustest: Don't pass number of arguments as long long

since sizeof(int) != sizeof(long long) on 32bit archs.

This unbreaks virdbustest which otherwise fails like:

 (gdb) bt
 #0  __strlen_sse2_bsf () at ../sysdeps/i386/i686/multiarch/strlen-sse2-bsf.S:50
 #1  0x405907d2 in ?? () from /lib/i386-linux-gnu/libdbus-1.so.3
 #2  0x4057c140 in ?? () from /lib/i386-linux-gnu/libdbus-1.so.3
 #3  0x4057e7ec in dbus_message_iter_append_basic () from /lib/i386-linux-gnu/libdbus-1.so.3
 #4  0x400742ec in virDBusMessageIterEncode (args=0xbfd4b8f0 "k\321\004\b.", types=0x804d260 "",
     rootiter=0xbfd4b844) at util/virdbus.c:560
 #5  virDBusMessageEncodeArgs (msg=msg@entry=0x893c278, types=types@entry=0x804d25c "sais",
     args=args@entry=0xbfd4b8d8 "r\320\004\b\003") at util/virdbus.c:921
 #6  0x40075917 in virDBusMessageEncode (msg=0x893c278, types=0x804d25c "sais") at util/virdbus.c:959
 #7  0x0804a4a1 in testMessageArray (args=0x0) at virdbustest.c:195
 #8  0x0804c404 in virtTestRun (title=title@entry=0x804cfcb "Test message array ",
     nloops=nloops@entry=1, body=body@entry=0x804a3f0 <testMessageArray>, data=data@entry=0x0)
     at testutils.c:168
 #9  0x08049346 in mymain () at virdbustest.c:384
 #10 0x0804cb2e in virtTestMain (argc=argc@entry=1, argv=argv@entry=0xbfd4bb24,
     func=func@entry=0x80492c0 <mymain>) at testutils.c:764
 #11 0x080491af in main (argc=1, argv=0xbfd4bb24) at virdbustest.c:393

11 years agoAdd inputpool to storagevolxml2argvtest
Ján Tomko [Mon, 22 Jul 2013 13:55:40 +0000 (15:55 +0200)]
Add inputpool to storagevolxml2argvtest

This allows testing the command line for cloning file-based
volumes into logical volumes and vice versa.

11 years agoMove volume XMLs out of storagevolxml2argvdata
Ján Tomko [Mon, 22 Jul 2013 13:44:06 +0000 (15:44 +0200)]
Move volume XMLs out of storagevolxml2argvdata

Reuse the XML files in storagevolxml2xmlin.

(This requires changing a few backing files to /dev/null,
since virStorageBackendCreateQemuImgCmd checks for its
presence)

11 years agoMove pool XML out of storagevolxml2argvdata
Ján Tomko [Mon, 22 Jul 2013 12:56:26 +0000 (14:56 +0200)]
Move pool XML out of storagevolxml2argvdata

Reuse the pool definition from storagepoolxml2xmlin.

11 years agoUse separate macros for failure/success in vol-to-argv test
Ján Tomko [Mon, 22 Jul 2013 07:11:50 +0000 (09:11 +0200)]
Use separate macros for failure/success in vol-to-argv test

Reindent them to put the input volume on a separate line.

11 years agotests: PCI controller checks
Ján Tomko [Mon, 22 Jul 2013 06:51:55 +0000 (08:51 +0200)]
tests: PCI controller checks

Check if PCI bridges with duplicate indexes are rejected.
PCI root controllers with non-zero indexes or addresses should
also be rejected.

11 years agoDon't overwrite errors in qemuTranslateDiskSourcePool
Ján Tomko [Wed, 24 Jul 2013 08:38:20 +0000 (10:38 +0200)]
Don't overwrite errors in qemuTranslateDiskSourcePool

Both virStoragePoolFree and virStorageVolFree reset the last error,
which might lead to the cryptic message:
An error occurred, but the cause is unknown

When the volume wasn't found, virStorageVolFree was called with NULL,
leading to an error:
invalid storage volume pointer in virStorageVolFree

This patch changes it to:
Storage volume not found: no storage vol with matching name 'tomato'

11 years agoProtection against doing bad stuff to the root group
Daniel P. Berrange [Tue, 23 Jul 2013 14:47:03 +0000 (15:47 +0100)]
Protection against doing bad stuff to the root group

Add protection such that the virCgroupRemove and
virCgroupKill* do not do anything to the root cgroup.

Killing all PIDs in the root cgroup does not end well.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agoConvert LXC driver to use virCgroupNewMachine
Daniel P. Berrange [Mon, 22 Jul 2013 16:11:09 +0000 (17:11 +0100)]
Convert LXC driver to use virCgroupNewMachine

Convert the LXC driver code to use the new atomic API
for setup of cgroups

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agoConvert QEMU driver to use virCgroupNewMachine
Daniel P. Berrange [Mon, 22 Jul 2013 15:44:52 +0000 (16:44 +0100)]
Convert QEMU driver to use virCgroupNewMachine

Convert the QEMU driver code to use the new atomic API
for setup of cgroups

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agoNew cgroups API for atomically creating machine cgroups
Daniel P. Berrange [Thu, 18 Jul 2013 15:55:37 +0000 (16:55 +0100)]
New cgroups API for atomically creating machine cgroups

Instead of requiring one API call to create a cgroup and
another to add a task to it, introduce a new API
virCgroupNewMachine which does both jobs at once. This
will facilitate the later code to talk to systemd to
achieve this job which is also atomic.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agovirLXCMonitorClose: Unlock domain while closing monitor
Michal Privoznik [Wed, 24 Jul 2013 07:47:03 +0000 (09:47 +0200)]
virLXCMonitorClose: Unlock domain while closing monitor

There's a race in lxc driver causing a deadlock. If a domain is
destroyed immediately after started, the deadlock can occur. When domain
is started, the even loop tries to connect to the monitor. If the
connecting succeeds, virLXCProcessMonitorInitNotify() is called with
@mon->client locked. The first thing that callee does, is
virObjectLock(vm). So the order of locking is: 1) @mon->client, 2) @vm.

However, if there's another thread executing virDomainDestroy on the
very same domain, the first thing done here is locking the @vm. Then,
the corresponding libvirt_lxc process is killed and monitor is closed
via calling virLXCMonitorClose(). This callee tries to lock @mon->client
too. So the order is reversed to the first case. This situation results
in deadlock and unresponsive libvirtd (since the eventloop is involved).

The proper solution is to unlock the @vm in virLXCMonitorClose prior
entering virNetClientClose(). See the backtrace as follows:

Thread 25 (Thread 0x7f1b7c9b8700 (LWP 16312)):
0  0x00007f1b80539714 in __lll_lock_wait () from /lib64/libpthread.so.0
1  0x00007f1b8053516c in _L_lock_516 () from /lib64/libpthread.so.0
2  0x00007f1b80534fbb in pthread_mutex_lock () from /lib64/libpthread.so.0
3  0x00007f1b82a637cf in virMutexLock (m=0x7f1b3c0038d0) at util/virthreadpthread.c:85
4  0x00007f1b82a4ccf2 in virObjectLock (anyobj=0x7f1b3c0038c0) at util/virobject.c:320
5  0x00007f1b82b861f6 in virNetClientCloseInternal (client=0x7f1b3c0038c0, reason=3) at rpc/virnetclient.c:696
6  0x00007f1b82b862f5 in virNetClientClose (client=0x7f1b3c0038c0) at rpc/virnetclient.c:721
7  0x00007f1b6ee12500 in virLXCMonitorClose (mon=0x7f1b3c007210) at lxc/lxc_monitor.c:216
8  0x00007f1b6ee129f0 in virLXCProcessCleanup (driver=0x7f1b68100240, vm=0x7f1b680ceb70, reason=VIR_DOMAIN_SHUTOFF_DESTROYED) at lxc/lxc_process.c:174
9  0x00007f1b6ee14106 in virLXCProcessStop (driver=0x7f1b68100240, vm=0x7f1b680ceb70, reason=VIR_DOMAIN_SHUTOFF_DESTROYED) at lxc/lxc_process.c:710
10 0x00007f1b6ee1aa36 in lxcDomainDestroyFlags (dom=0x7f1b5c002560, flags=0) at lxc/lxc_driver.c:1291
11 0x00007f1b6ee1ab1a in lxcDomainDestroy (dom=0x7f1b5c002560) at lxc/lxc_driver.c:1321
12 0x00007f1b82b05be5 in virDomainDestroy (domain=0x7f1b5c002560) at libvirt.c:2303
13 0x00007f1b835a7e85 in remoteDispatchDomainDestroy (server=0x7f1b857419d0, client=0x7f1b8574ae40, msg=0x7f1b8574acf0, rerr=0x7f1b7c9b7c30, args=0x7f1b5c004a50) at remote_dispatch.h:3143
14 0x00007f1b835a7d78 in remoteDispatchDomainDestroyHelper (server=0x7f1b857419d0, client=0x7f1b8574ae40, msg=0x7f1b8574acf0, rerr=0x7f1b7c9b7c30, args=0x7f1b5c004a50, ret=0x7f1b5c0029e0) at remote_dispatch.h:3121
15 0x00007f1b82b93704 in virNetServerProgramDispatchCall (prog=0x7f1b8573af90, server=0x7f1b857419d0, client=0x7f1b8574ae40, msg=0x7f1b8574acf0) at rpc/virnetserverprogram.c:435
16 0x00007f1b82b93263 in virNetServerProgramDispatch (prog=0x7f1b8573af90, server=0x7f1b857419d0, client=0x7f1b8574ae40, msg=0x7f1b8574acf0) at rpc/virnetserverprogram.c:305
17 0x00007f1b82b8c0f6 in virNetServerProcessMsg (srv=0x7f1b857419d0, client=0x7f1b8574ae40, prog=0x7f1b8573af90, msg=0x7f1b8574acf0) at rpc/virnetserver.c:163
18 0x00007f1b82b8c1da in virNetServerHandleJob (jobOpaque=0x7f1b8574dca0, opaque=0x7f1b857419d0) at rpc/virnetserver.c:184
19 0x00007f1b82a64158 in virThreadPoolWorker (opaque=0x7f1b8573cb10) at util/virthreadpool.c:144
20 0x00007f1b82a63ae5 in virThreadHelper (data=0x7f1b8574b9f0) at util/virthreadpthread.c:161
21 0x00007f1b80532f4a in start_thread () from /lib64/libpthread.so.0
22 0x00007f1b7fc4f20d in clone () from /lib64/libc.so.6

Thread 1 (Thread 0x7f1b83546740 (LWP 16297)):
0  0x00007f1b80539714 in __lll_lock_wait () from /lib64/libpthread.so.0
1  0x00007f1b8053516c in _L_lock_516 () from /lib64/libpthread.so.0
2  0x00007f1b80534fbb in pthread_mutex_lock () from /lib64/libpthread.so.0
3  0x00007f1b82a637cf in virMutexLock (m=0x7f1b680ceb80) at util/virthreadpthread.c:85
4  0x00007f1b82a4ccf2 in virObjectLock (anyobj=0x7f1b680ceb70) at util/virobject.c:320
5  0x00007f1b6ee13bd7 in virLXCProcessMonitorInitNotify (mon=0x7f1b3c007210, initpid=4832, vm=0x7f1b680ceb70) at lxc/lxc_process.c:601
6  0x00007f1b6ee11fd3 in virLXCMonitorHandleEventInit (prog=0x7f1b3c001f10, client=0x7f1b3c0038c0, evdata=0x7f1b8574a7d0, opaque=0x7f1b3c007210) at lxc/lxc_monitor.c:109
7  0x00007f1b82b8a196 in virNetClientProgramDispatch (prog=0x7f1b3c001f10, client=0x7f1b3c0038c0, msg=0x7f1b3c003928) at rpc/virnetclientprogram.c:259
8  0x00007f1b82b87030 in virNetClientCallDispatchMessage (client=0x7f1b3c0038c0) at rpc/virnetclient.c:1019
9  0x00007f1b82b876bb in virNetClientCallDispatch (client=0x7f1b3c0038c0) at rpc/virnetclient.c:1140
10 0x00007f1b82b87d41 in virNetClientIOHandleInput (client=0x7f1b3c0038c0) at rpc/virnetclient.c:1312
11 0x00007f1b82b88f51 in virNetClientIncomingEvent (sock=0x7f1b3c0044e0, events=1, opaque=0x7f1b3c0038c0) at rpc/virnetclient.c:1832
12 0x00007f1b82b9e1c8 in virNetSocketEventHandle (watch=3321, fd=54, events=1, opaque=0x7f1b3c0044e0) at rpc/virnetsocket.c:1695
13 0x00007f1b82a272cf in virEventPollDispatchHandles (nfds=21, fds=0x7f1b8574ded0) at util/vireventpoll.c:498
14 0x00007f1b82a27af2 in virEventPollRunOnce () at util/vireventpoll.c:645
15 0x00007f1b82a25a61 in virEventRunDefaultImpl () at util/virevent.c:273
16 0x00007f1b82b8e97e in virNetServerRun (srv=0x7f1b857419d0) at rpc/virnetserver.c:1097
17 0x00007f1b8359db6b in main (argc=2, argv=0x7ffff98dbaa8) at libvirtd.c:1512

11 years agolibxl: Correctly initialize vcpu bitmap
Stefan Bader [Wed, 24 Jul 2013 11:43:43 +0000 (13:43 +0200)]
libxl: Correctly initialize vcpu bitmap

The avail_vcpu bitmap has to be allocated before it can be used (using
the maximum allowed value for that). Then for each available VCPU the
bit in the mask has to be set (libxl_bitmap_set takes a bit position
as an argument, not the number of bits to set).

Without this, I would always only get one VCPU for guests created
through libvirt/libxl.

Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
11 years agoAdd a colon after 'internal error'
Ján Tomko [Wed, 24 Jul 2013 08:44:46 +0000 (10:44 +0200)]
Add a colon after 'internal error'

As we do for other errors with an extra string.

11 years agoAdd new virAuth symbols to private.syms
Ján Tomko [Wed, 24 Jul 2013 11:49:24 +0000 (13:49 +0200)]
Add new virAuth symbols to private.syms

Otherwise libvirtd fails to load the lockd plugin.

11 years agoFix virCgroupAvailable() w/o HAVE_GETMNTENT_R defined
Roman Bogorodskiy [Wed, 24 Jul 2013 12:30:33 +0000 (16:30 +0400)]
Fix virCgroupAvailable() w/o HAVE_GETMNTENT_R defined

virCgroupAvailable() implementation calls getmntent_r
without checking if HAVE_GETMNTENT_R is defined, so it fails
to build on platforms without getmntent_r support.

Make virCgroupAvailable() just return false without
HAVE_GETMNTENT_R.

11 years agoFix link_addr detection
Roman Bogorodskiy [Wed, 24 Jul 2013 13:02:00 +0000 (17:02 +0400)]
Fix link_addr detection

link_addr detection in configure always reports that
link_addr is missing because it uses link_addr(NULL, NULL) in
AC_LINK_IFELSE check with limited set of headers that doesn't
define NULL.

Fix by replacing 'NULL' with just '0'.

11 years agoUse qemuOpenFile in qemu_driver.c
Martin Kletzander [Fri, 24 May 2013 16:26:26 +0000 (18:26 +0200)]
Use qemuOpenFile in qemu_driver.c

On two places, the usage of open() is replaced with qemuOpenFile as
that is the preferred method in those cases.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=963881

11 years agoMake qemuOpenFile aware of per-VM DAC seclabel.
Martin Kletzander [Fri, 24 May 2013 16:26:14 +0000 (18:26 +0200)]
Make qemuOpenFile aware of per-VM DAC seclabel.

Function qemuOpenFile() haven't had any idea about seclabels applied
to VMs only, so in case the seclabel differed from the "user:group"
from configuration, there might have been issues with opening files.

Make qemuOpenFile() VM-aware, but only optionally, passing NULL
argument means skipping VM seclabel info completely.

However, all current qemuOpenFile() calls look like they should use VM
seclabel info in case there is any, so convert these calls as well.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=869053

11 years agoExpose ownership ID parsing
Martin Kletzander [Fri, 24 May 2013 15:35:01 +0000 (17:35 +0200)]
Expose ownership ID parsing

Parsing 'user:group' is useful even outside the DAC security driver,
so expose the most abstract function which has no DAC security driver
bits in itself.

11 years agoqemu: set/validate slot/connection type when assigning slots for PCI devices
Laine Stump [Mon, 15 Jul 2013 00:09:44 +0000 (20:09 -0400)]
qemu: set/validate slot/connection type when assigning slots for PCI devices

Since PCI bridges, PCIe bridges, PCIe switches, and PCIe root ports
all share the same namespace, they are all defined as controllers of
type='pci' in libvirt (but with a differing model attribute). Each of
these controllers has a certain connection type upstream, allows
certain connection types downstream, and each can either allow a
single downstream connection at slot 0, or connections from slot 1 -
31.

Right now, we only support the pci-root and pci-bridge devices, both
of which only allow PCI devices to connect, and both which have usable
slots 1 - 31. In preparation for adding other types of controllers
that have different capabilities, this patch 1) adds info to the
qemuDomainPCIAddressBus object to indicate the capabilities, 2) sets
those capabilities appropriately for pci-root and pci-bridge devices,
and 3) validates that the controller being connected to is the proper
type when allocating slots or validating that a user-selected slot is
appropriate for a device..

Having this infrastructure in place will make it much easier to add
support for the other PCI controller types.

While it would be possible to do all the necessary checking by just
storing the controller model in the qemyuDomainPCIAddressBus, it
greatly simplifies all the validation code to also keep a "flags",
"minSlot" and "maxSlot" for each - that way we can just check those
attributes rather than requiring a nearly identical switch statement
everywhere we need to validate compatibility.

You may notice many places where the flags are seemingly hard-coded to

  QEMU_PCI_CONNECT_HOTPLUGGABLE | QEMU_PCI_CONNECT_TYPE_PCI

This is currently the correct value for all PCI devices, and in the
future will be the default, with small bits of code added to change to
the flags for the few devices which are the exceptions to this rule.

Finally, there are a few places with "FIXME" comments. Note that these
aren't indicating places that are broken according to the currently
supported devices, they are places that will need fixing when support
for new PCI controller models is added.

To assure that there was no regression in the auto-allocation of PCI
addresses or auto-creation of integrated pci-root, ide, and usb
controllers, a new test case (pci-bridge-many-disks) has been added to
both the qemuxml2argv and qemuxml2xml tests. This new test defines a
domain with several dozen virtio disks but no pci-root or
pci-bridges. The .args file of the new test case was created using
libvirt sources from before this patch, and the test still passes
after this patch has been applied.

11 years agoqemu: make QEMU_PCI_ADDRESS_(SLOT|FUNCTION)_LAST less misleading
Laine Stump [Thu, 11 Jul 2013 04:53:16 +0000 (00:53 -0400)]
qemu: make QEMU_PCI_ADDRESS_(SLOT|FUNCTION)_LAST less misleading

Although these two enums are named ..._LAST, they really had the value
of ..._SIZE. This patch changes their values so that, e.g.,
QEMU_PCI_ADDRESS_SLOT_LAST really is the slot number of the last slot
on a PCI bus.

11 years agoqemu: only check for PIIX3-specific device addrs on pc-* machinetypes
Laine Stump [Thu, 18 Jul 2013 19:39:00 +0000 (15:39 -0400)]
qemu: only check for PIIX3-specific device addrs on pc-* machinetypes

The implicit IDE, USB, and video controllers provided by the PIIX3
chipset in the pc-* machinetypes are not present on other
machinetypes, so we shouldn't be doing the special checking for
them. This patch places those validation checks into a separate
function that is only called for machine types that have a PIIX3 chip
(which happens to be the i440fx-based pc-* machine types).

One qemuxml2argv test data file had to be changed - the
pseries-usb-multi test had included a piix3-usb-uhci device, which was
being placed at a specific address, and also had slot 2 auto reserved
for a video device, but the pseries virtual machine doesn't actually
have a PIIX3 chip, so even if there was a piix3-usb-uhci driver for
it, the device wouldn't need to reside at slot 1 function 2. I just
changed the .argv file to have the generic slot info for the two
devices that results when the special PIIX3 code isn't executed.

11 years agoqemu: turn qemuDomainPCIAddressBus into a struct
Laine Stump [Thu, 11 Jul 2013 03:29:07 +0000 (23:29 -0400)]
qemu: turn qemuDomainPCIAddressBus into a struct

qemuDomainPCIAddressBus was an array of QEMU_PCI_ADDRESS_SLOT_LAST
uint8_t's, which worked fine as long as every PCI bus was
identical. In the future, some PCI busses will allow connecting PCI
devices, and some will allow PCIe devices; also some will only allow
connection of a single device, while others will allow connecting 31
devices.

In order to keep track of that information for each bus, we need to
turn qemuDomainPCIAddressBus into a struct, for now with just one
member:

   uint8_t slots[QEMU_PCI_ADDRESS_SLOT_LAST];

Additional members will come in later patches.

The item in qemuDomainPCIAddresSet that contains the array of
qemuDomainPCIAddressBus is now called "buses" to be more consistent
with the already existing "nbuses" (and with the new "slots" array).

11 years agobuild: work around broken kernel headers
Eric Blake [Tue, 23 Jul 2013 23:45:21 +0000 (17:45 -0600)]
build: work around broken kernel headers

Thanks to a lack of coordination between kernel and glibc folks,
it has been impossible to mix code using <linux/in.h> and
<net/in.h> for some time now (see for example commit c308a9a).
On at least RHEL 6, <linux/if_bridge.h> tries to use the kernel
side, and fails due to our desire to use the glibc side elsewhere:

In file included from /usr/include/linux/if_bridge.h:17,
                 from util/virnetdevbridge.c:42:
/usr/include/linux/in6.h:31: error: redefinition of ‘struct in6_addr’
/usr/include/linux/in6.h:48: error: redefinition of ‘struct sockaddr_in6’
/usr/include/linux/in6.h:56: error: redefinition of ‘struct ipv6_mreq’

Thankfully, the kernel layout of these structs is ABI-compatible,
they only differ in the type system presented to the C compiler.
While there are other versions of kernel headers that avoid the
problem, it is easier to just work around the issue than to expect
all developers to upgrade to working kernel headers.

* src/util/virnetdevbridge.c (includes): Coerce the kernel version
of in.h to not collide with the normal version.

Signed-off-by: Eric Blake <eblake@redhat.com>
11 years agodbus: work with older dbus
Eric Blake [Tue, 23 Jul 2013 23:06:26 +0000 (17:06 -0600)]
dbus: work with older dbus

dbus 1.2.24 (on RHEL 6) lacks DBUS_TYPE_UNIX_FD; but as we aren't
trying to pass one of those anyways, we can just drop support for
it in our wrapper.  Solves this build error introduced in commit
834c9c94:

  CC     libvirt_util_la-virdbus.lo
util/virdbus.c:242: error: 'DBUS_TYPE_UNIX_FD' undeclared here (not in a function)

* src/util/virdbus.c (virDBusBasicTypes): Drop support for unix fds.

Signed-off-by: Eric Blake <eblake@redhat.com>
11 years agovalgrind.supp: Add more valgrind suppression paths
John Ferlan [Tue, 23 Jul 2013 14:29:10 +0000 (10:29 -0400)]
valgrind.supp: Add more valgrind suppression paths

Update based on recent run/failures seen

11 years agodomain_event: Resolve memory leak found by Valgrind
John Ferlan [Tue, 23 Jul 2013 14:06:02 +0000 (10:06 -0400)]
domain_event: Resolve memory leak found by Valgrind

Commit id '4421e257' strdup'd devAlias, but didn't free

Running qemuhotplugtest under valgrind resulted in the following:

==7375== 9 bytes in 1 blocks are definitely lost in loss record 11 of 70
==7375==    at 0x4A0887C: malloc (vg_replace_malloc.c:270)
==7375==    by 0x37C1085D71: strdup (strdup.c:42)
==7375==    by 0x4CBBD5F: virStrdup (virstring.c:554)
==7375==    by 0x4CFF9CB: virDomainEventDeviceRemovedNew (domain_event.c:1174)
==7375==    by 0x427791: qemuDomainRemoveChrDevice (qemu_hotplug.c:2508)
==7375==    by 0x42C65D: qemuDomainDetachChrDevice (qemu_hotplug.c:3357)
==7375==    by 0x41C94F: testQemuHotplug (qemuhotplugtest.c:115)
==7375==    by 0x41D817: virtTestRun (testutils.c:168)
==7375==    by 0x41C400: mymain (qemuhotplugtest.c:322)
==7375==    by 0x41DF3A: virtTestMain (testutils.c:764)
==7375==    by 0x37C1021A04: (below main) (libc-start.c:225)

11 years agolxc: Resolve Coverity warning
John Ferlan [Mon, 22 Jul 2013 20:59:41 +0000 (16:59 -0400)]
lxc: Resolve Coverity warning

Commit 'c8695053' resulted in the following:

Coverity error seen in the output:
    ERROR: REVERSE_INULL
    FUNCTION: lxcProcessAutoDestroy

Due to the 'dom' being checked before 'dom->persistent' since 'dom'
is already dereferenced prior to that.

11 years agoCreate + setup cgroups atomically for LXC process
Daniel P. Berrange [Mon, 22 Jul 2013 15:36:06 +0000 (16:36 +0100)]
Create + setup cgroups atomically for LXC process

Currently the LXC driver creates the VM's cgroup prior to
forking, and then libvirt_lxc moves the child process
into the cgroup. This won't work with systemd whose APIs
do the creation of cgroups + attachment of processes atomically.

Fortunately we simply move the entire cgroups setup into
the libvirt_lxc child process. We make it take place before
fork'ing into the background, so by the time virCommandRun
returns in the LXC driver, the cgroup is guaranteed to be
present.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agoCreate + setup cgroups atomically for QEMU process
Daniel P. Berrange [Mon, 22 Jul 2013 14:21:15 +0000 (15:21 +0100)]
Create + setup cgroups atomically for QEMU process

Currently the QEMU driver creates the VM's cgroup prior to
forking, and then uses a virCommand hook to move the child
into the cgroup. This won't work with systemd whose APIs
do the creation of cgroups + attachment of processes atomically.

Fortunately we have a handshake taking place between the
QEMU driver and the child process prior to QEMU being exec()d,
which was introduced to allow setup of disk locking. By good
fortune this synchronization point can be used to enable the
QEMU driver to do atomic setup of cgroups removing the use
of the hook script.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agoRemove obsolete cgroups creation apis
Daniel P. Berrange [Mon, 22 Jul 2013 13:03:54 +0000 (14:03 +0100)]
Remove obsolete cgroups creation apis

The virCgroupNewDomainDriver and virCgroupNewDriver methods
are obsolete now that we can auto-detect existing cgroup
placement. Delete them to reduce code bloat.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agoAuto-detect existing cgroup placement
Daniel P. Berrange [Mon, 22 Jul 2013 12:59:28 +0000 (13:59 +0100)]
Auto-detect existing cgroup placement

Use the new virCgroupNewDetect function to determine cgroup
placement of existing running VMs. This will allow the legacy
cgroups creation APIs to be removed entirely

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agoAdd API for checking if a cgroup is valid for a domain
Daniel P. Berrange [Tue, 23 Jul 2013 14:26:21 +0000 (15:26 +0100)]
Add API for checking if a cgroup is valid for a domain

Add virCgroupIsValidMachine API to check whether an auto
detected cgroup is valid for a machine. This lets us
check if a VM has just been placed into some generic
shared cgroup, or worse, the root cgroup

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agoAdd a virCgroupNewDetect API for finding cgroup placement
Daniel P. Berrange [Fri, 19 Jul 2013 10:13:05 +0000 (11:13 +0100)]
Add a virCgroupNewDetect API for finding cgroup placement

Add a virCgroupNewDetect API which is used to initialize a
cgroup object with the placement of an arbitrary process.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agoAdd logic for handling systemd-machined non-existance
Daniel P. Berrange [Mon, 22 Jul 2013 15:33:37 +0000 (16:33 +0100)]
Add logic for handling systemd-machined non-existance

If systemd machine does not exist, return -2 instead of -1,
so that applications don't need to repeat the tedious error
checking code

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agoFix handling of DBus errors emitted by the bus itself
Daniel P. Berrange [Mon, 22 Jul 2013 15:32:28 +0000 (16:32 +0100)]
Fix handling of DBus errors emitted by the bus itself

Current code for handling dbus errors only works for errors
received from the remote application itself. We must also
handle errors emitted by the bus itself, for example, when
it fails to spawn the target service.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agostorage: Add connection for autostart storage pool
John Ferlan [Mon, 15 Jul 2013 20:26:10 +0000 (16:26 -0400)]
storage: Add connection for autostart storage pool

Add a privileged field to storageDriverState

Use the privileged value in order to generate a connection which could
be passed to the various storage backend drivers.

In particular, the iSCSI driver will need a connect in order to perform
pool authentication using the 'chap' secrets and the RBD driver utilizes
the connection during pool refresh for pools using 'ceph' secrets.

For now that connection will be to be to qemu driver until a mechanism
is devised to get a connection to just the secret driver without qemu.

11 years agoAdjust 'ceph' authentication secret usage for rbd pool.
John Ferlan [Mon, 15 Jul 2013 18:44:32 +0000 (14:44 -0400)]
Adjust 'ceph' authentication secret usage for rbd pool.

Update virStorageBackendRBDOpenRADOSConn() to use the internal API to the
secret driver in order to get the secret value instead of the external
virSecretGetValue() path. Without the flag VIR_SECRET_GET_VALUE_INTERNAL_CALL
there is no way to get the value of private secret.

This also requires ensuring there is a connection which wasn't true for
for the refreshPool() path calls from storageDriverAutostart() prior to
adding support for the connection to a qemu driver. It seems calls to
virSecretLookupByUUIDString() and virSecretLookupByUsage() from the
refreshPool() path would have failed with no way to find the secret - that is
theoretically speaking since the 'conn' was NULL the failure would have been
"failed to find the secret".

11 years agostorage: Support "chap" authentication for iscsi pool
John Ferlan [Mon, 15 Jul 2013 17:23:45 +0000 (13:23 -0400)]
storage: Support "chap" authentication for iscsi pool

Although the XML for CHAP authentication with plain "password"
was introduced long ago, the function was never implemented. This
patch replaces the login/password mechanism by following the
'ceph' (or RBD) model of using a 'username' with a 'secret' which
has the authentication information.

This patch performs the authentication during startPool() processing
of pools with an authType of VIR_STORAGE_POOL_AUTH_CHAP specified
for iSCSI pools.

There are two types of CHAP configurations supported for iSCSI
authentication:

  * Initiator Authentication
      Forward, one-way; The initiator is authenticated by the target.

  * Target Authentication
      Reverse, Bi-directional, mutual, two-way; The target is authenticated
      by the initiator; This method also requires Initiator Authentication

This only supports the "Initiator Authentication". (I don't have any
enterprise iSCSI env for testing, only have a iSCSI target setup with
tgtd, which doesn't support "Target Authentication").

"Discovery authentication" is not supported by tgt yet too. So this only
setup the session authentication by executing 3 iscsiadm commands, E.g:

% iscsiadm -m node --target "iqn.2013-05.test:iscsi.foo" --name \
  "node.session.auth.authmethod" -v "CHAP" --op update

% iscsiadm -m node --target "iqn.2013-05.test:iscsi.foo" --name \
  "node.session.auth.username" -v "Jim" --op update

% iscsiadm -m node --target "iqn.2013-05.test:iscsi.foo" --name \
  "node.session.auth.password" -v "Jimsecret" --op update

11 years agoqemu_common: Create qemuBuildVolumeString() to process storage pool
John Ferlan [Tue, 16 Jul 2013 16:11:10 +0000 (12:11 -0400)]
qemu_common: Create qemuBuildVolumeString() to process storage pool

Split out into its own separate routine

11 years agoqemu: Create a common qemuGetSecretString
John Ferlan [Wed, 17 Jul 2013 13:44:42 +0000 (09:44 -0400)]
qemu: Create a common qemuGetSecretString

Make the secret fetching code common for qemuBuildRBDString() and
qemuBuildDriveURIString() using the virDomainDiskDef.

11 years agoqemu: Add source pool auth info to virDomainDiskDef for iSCSI
John Ferlan [Fri, 19 Jul 2013 18:38:45 +0000 (14:38 -0400)]
qemu: Add source pool auth info to virDomainDiskDef for iSCSI

During qemuTranslateDiskSourcePool() execution, if the srcpool has been
defined with authentication information, then for iSCSI pools copy the
authentication and host information to virDomainDiskDef.

11 years agoqemu: Take error path if acquiring of job fails in qemuDomainSaveInternal
Peter Krempa [Tue, 23 Jul 2013 13:35:02 +0000 (15:35 +0200)]
qemu: Take error path if acquiring of job fails in qemuDomainSaveInternal

Due to a goto statement missed when refactoring in 2771f8b74c1bf50d1fa
when acquiring of a domain job failed the error path was not taken. This
resulted into a crash afterwards as an extra reference was removed from a
domain object leading to it being freed. An attempt to list the domains
leaded to a crash of the daemon afterwards.

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

11 years agobuild: fix make rpm failure
Laine Stump [Tue, 23 Jul 2013 13:40:06 +0000 (09:40 -0400)]
build: fix make rpm failure

util/virdbuspriv.h needed to be added to UTIL_SOURCES in the makefile.

11 years agobridge driver: use more general function names
Roman Bogorodskiy [Mon, 22 Jul 2013 18:14:22 +0000 (14:14 -0400)]
bridge driver: use more general function names

Continue preparation for extracting platform-specific
parts from bridge_driver: s/Iptables/Firewall/ for
firewall related function names.

11 years agoAdd virDBusMessage(Encode,Decode) stubs
Roman Bogorodskiy [Mon, 22 Jul 2013 18:32:49 +0000 (14:32 -0400)]
Add virDBusMessage(Encode,Decode) stubs

Commit 834c9c94 introduced virDBusMessageEncode and
virDBusMessageDecode functions, however corresponding stubs
were not added to !WITH_DBUS section, therefore 'make check'
started to fail when compiled w/out dbus support like that:

Expected symbol virDBusMessageDecode is not in ELF library

11 years agovirsh: fix change-media bug on disk block type
Guannan Ren [Mon, 22 Jul 2013 07:38:43 +0000 (15:38 +0800)]
virsh: fix change-media bug on disk block type

Resolves:https://bugzilla.redhat.com/show_bug.cgi?id=923053
When cdrom is block type, the virsh change-media failed to insert
source info because virsh uses "<source block='/dev/sdb'/>" while
the correct name of the attribute for block disks is "dev".

11 years agoqemu: Translate the volume type disk source before cgroup setting
Osier Yang [Tue, 18 Jun 2013 08:36:42 +0000 (16:36 +0800)]
qemu: Translate the volume type disk source before cgroup setting

The translation must be done before both of cgroup and security
setting, otherwise since the disk source is not translated yet,
it might be skipped on cgroup and security setting.

11 years agoconf: Ignore the volume type disk if its mode is "direct"
Osier Yang [Tue, 18 Jun 2013 08:36:41 +0000 (16:36 +0800)]
conf: Ignore the volume type disk if its mode is "direct"

virDomainDiskDefForeachPath is not only used by the security
setting helpers, also used by cgroup setting helpers, so this
is to ignore the volume type disk with mode="direct" for cgroup
setting.

11 years agoqemu: Translate the iscsi pool/volume disk source
John Ferlan [Thu, 18 Jul 2013 11:00:19 +0000 (07:00 -0400)]
qemu: Translate the iscsi pool/volume disk source

The difference with already supported pool types (dir, fs, block)
is: there are two modes for iscsi pool (or network pools in future),
one can specify it either to use the volume target path (the path
showed up on host) with mode='host', or to use the remote URI qemu
supports (e.g. file=iscsi://example.org:6000/iqn.1992-01.com.example/1)
with mode='direct'.

For 'host' mode, it copies the volume target path into disk->src. For
'direct' mode, the corresponding info in the *one* pool source host def
is copied to disk->hosts[0].

11 years agoconf: Introduce virDomainDiskSourceIsBlockType
John Ferlan [Thu, 18 Jul 2013 10:39:55 +0000 (06:39 -0400)]
conf: Introduce virDomainDiskSourceIsBlockType

Introduce a new helper to check if the disk source is of block type

11 years agoconf: Introduce new XML tag "mode" for disk source
John Ferlan [Thu, 18 Jul 2013 17:18:03 +0000 (13:18 -0400)]
conf: Introduce new XML tag "mode" for disk source

There are two ways to use a iSCSI LUN as disk source for qemu.

 * The LUN's path as it shows up on host, e.g.
   /dev/disk/by-path/ip-$ip:3260-iscsi-$iqn-fc18:iscsi.iscsi0-lun-1

 * The libiscsi URI from the storage pool source element host attribute, e.g.
   iscsi://demo.org:6000/iqn.1992-01.com.example/1

For a "volume" type disk, if the specified "pool" is of iscsi
type, we should support to use the LUN in either of above 2 ways.
That's why to introduce a new XML tag "mode" for the disk source
(libvirt should support iscsi pool with libiscsi, but it's another
new feature, which should be done later).

The "mode" can be either of "host" or "direct". Use "host" to indicate
use of the LUN with the path as it shows up on host. Use "direct" to
indicate to use it with the source pool host URI (future patches may support
to use network type libvirt storage too, e.g. Ceph)

11 years agostorage_iscsi: Reflect the default target port
John Ferlan [Thu, 18 Jul 2013 16:30:29 +0000 (12:30 -0400)]
storage_iscsi: Reflect the default target port

Make sure default iSCSI target is 3260.

11 years agotests: Free test at the end of GetDeviceAliases JSON test
Jiri Denemark [Mon, 22 Jul 2013 12:56:21 +0000 (14:56 +0200)]
tests: Free test at the end of GetDeviceAliases JSON test

Commit 58b147ad07c9432b53e66ca20aff74d812647c57 added a test for
qemuMonitorGetDeviceAliases but forgot to free the test object at the
end which causes all sort of weird errors and failures when new tests
are added after the GetDeviceAliases.

11 years agodoc: Fix copy-paste-error in virNodeGetMemoryStats
Philipp Hahn [Mon, 22 Jul 2013 11:58:16 +0000 (13:58 +0200)]
doc: Fix copy-paste-error in virNodeGetMemoryStats

The description seems to be copied from virNodeGetCpuState.
Change wrong 'cpu' to 'memory'.

Signed-off-by: Philipp Hahn <hahn@univention.de>
11 years agobridge driver: s/network_driver/virNetworkDriverState/
Roman Bogorodskiy [Mon, 22 Jul 2013 11:08:22 +0000 (15:08 +0400)]
bridge driver: s/network_driver/virNetworkDriverState/

This is another cleanup before extracting platform-specific
parts from bridge_driver.

Rename struct network_driver to _virNetworkDriverState and
add appropriate typedefs: virNetworkDriverState and
virNetworkDriverStatePtr.

This will help us to avoid potential problems when moving
this struct to the .h file.

11 years agoConvert remainder of cgroups code to report errors
Daniel P. Berrange [Mon, 8 Jul 2013 10:08:46 +0000 (11:08 +0100)]
Convert remainder of cgroups code to report errors

Convert the remaining methods in vircgroup.c to report errors
instead of returning errno values.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
11 years agoConvert the virCgroupKill* APIs to report errors
Daniel P. Berrange [Fri, 19 Jul 2013 14:43:04 +0000 (15:43 +0100)]
Convert the virCgroupKill* APIs to report errors

Instead of returning errno values, change the virCgroupKill*
APIs to fully report errors.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>