[libvirt] [PATCH] syntax-check: check QEMU caps grouping
by Ján Tomko
Introduce a perl script that is able to regroup both
the QEMU_CAPS constants and the capability strings.
Check correct grouping as a part of syntax check.
For in-place regrouping after a rebase, just run:
tests/group-qemu-caps.pl
without any parameters.
Signed-off-by: Ján Tomko <jtomko(a)redhat.com>
---
cfg.mk | 5 +-
src/qemu/qemu_capabilities.h | 2 +-
tests/group-qemu-caps.pl | 118 +++++++++++++++++++++++++++++++++++++++++++
3 files changed, 123 insertions(+), 2 deletions(-)
create mode 100755 tests/group-qemu-caps.pl
diff --git a/cfg.mk b/cfg.mk
index 4078bc2c6..7782ad6b3 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -1093,7 +1093,7 @@ _autogen_error:
ifneq ($(_gl-Makefile),)
syntax-check: spacing-check test-wrap-argv \
- prohibit-duplicate-header mock-noinline
+ prohibit-duplicate-header mock-noinline group-qemu-caps
endif
# Don't include duplicate header in the source (either *.c or *.h)
@@ -1114,6 +1114,9 @@ test-wrap-argv:
$(AM_V_GEN)files=`$(VC_LIST) | grep -E '\.(ldargs|args)'`; \
$(PERL) $(top_srcdir)/tests/test-wrap-argv.pl --check $$files
+group-qemu-caps:
+ $(PERL) $(top_srcdir)/tests/group-qemu-caps.pl --check
+
# sc_po_check can fail if generated files are not built first
sc_po_check: \
$(srcdir)/src/remote/remote_daemon_dispatch_stubs.h \
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index bec28cae9..00c76fdd1 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -46,7 +46,7 @@
* longer be used in code. Periodically we can then purge all the
* X_ flags and re-group what's left.
*/
-typedef enum {
+typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
/* 0 */
X_QEMU_CAPS_KQEMU, /* Whether KQEMU is compiled in */
X_QEMU_CAPS_VNC_COLON, /* VNC takes or address + display */
diff --git a/tests/group-qemu-caps.pl b/tests/group-qemu-caps.pl
new file mode 100755
index 000000000..847e36025
--- /dev/null
+++ b/tests/group-qemu-caps.pl
@@ -0,0 +1,118 @@
+#!/usr/bin/env perl
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library. If not, see
+# <http://www.gnu.org/licenses/>.
+#
+#
+# Regroup array values into smaller groups separated by numbered comments.
+#
+# If --check is the first parameter, the script will return
+# a non-zero value if a file is not grouped correctly.
+# Otherwise the files are regrouped in place.
+
+use strict;
+use warnings;
+
+my $check = 0;
+
+if (defined $ARGV[0] && $ARGV[0] eq "--check") {
+ $check = 1;
+ shift @ARGV;
+}
+
+my $ret = 0;
+if (®roup_caps('src/qemu/qemu_capabilities.c',
+ '^VIR_ENUM_IMPL\(virQEMUCaps,',
+ '\);',
+ 0,
+ " ") < 0) {
+ $ret = 1;
+}
+if (®roup_caps('src/qemu/qemu_capabilities.h',
+ 'virQEMUCapsFlags grouping marker',
+ 'QEMU_CAPS_LAST \/\* this must',
+ 1,
+ " ") < 0) {
+ $ret = 1;
+}
+
+exit $ret;
+
+sub regroup_caps {
+ my $filename = shift;
+ my $start_regex = shift;
+ my $end_regex = shift;
+ my $trailing_newline = shift;
+ my $counter_prefix = shift;
+ my $step = 5;
+
+ open FILE, '<', $filename or die "cannot open $filename: $!";
+ my @original = <FILE>;
+ close FILE;
+
+ my @fixed;
+ my $game_on = 0;
+ my $counter = 0;
+ foreach (@original) {
+ if ($game_on) {
+ next if ($_ =~ '/\* [0-9]+ \*/');
+ next if (/^\s+$/);
+ if ($counter % $step == 0) {
+ if ($counter != 0) {
+ push @fixed, "\n";
+ }
+ push @fixed, "$counter_prefix/* $counter */\n";
+ }
+ if (!($_ =~ '/\*' && !($_ =~ '\*/'))) {
+ # count two-line comments as one line
+ $counter++;
+ }
+ }
+ if (/$start_regex/) {
+ $game_on = 1;
+ } elsif ($game_on && $_ =~ /$end_regex/) {
+ if (($counter -1) % $step == 0) {
+ pop @fixed; # /* $counter */
+ if ($counter != 1) {
+ pop @fixed; # \n
+ }
+ }
+ if ($trailing_newline) {
+ push @fixed, "\n";
+ }
+ $game_on = 0;
+ }
+ push @fixed, $_;
+ }
+
+ if ($check) {
+ my $nl = join('', @fixed);
+ my $ol = join('', @original);
+ unless ($nl eq $ol) {
+ open DIFF, "| diff -u $filename -" or die "cannot run diff: $!";
+ print DIFF $nl;
+ close DIFF;
+
+ print STDERR "Incorrect array grouping in $filename\n";
+ print STDERR "Use group-qemu-caps.pl to group long array members\n";
+ return -1;
+ }
+ } else {
+ open FILE, '>', $filename or die "cannot open $filename: $!";
+ foreach my $line (@fixed) {
+ print FILE $line;
+ }
+ close FILE;
+ }
+}
--
2.13.6
6 years, 7 months
[libvirt] [RFC v2] external (pull) backup API
by Nikolay Shirokovskiy
Hi, all.
This is another RFC on pull backup API. This API provides means to read domain
disks in a snapshotted state so that client can back them up as well as means
to write domain disks to revert them to backed up state. The previous version
of RFC is [1]. I'll also describe the API implementation details to shed light
on misc qemu dirty bitmap commands usage.
This API does not use existent disks snapshots. Instead it introduces snapshots
provided by qemu's blockdev-backup command. The reason is we need snapshotted
disk state only temporarily for duration of backup operation and newly
introduced snapshots can be easily discarded at the end of operation without
block commit operation. Technically difference is next. On usual snapshot we
create new image backed by original and all new data goes to the new image thus
original image stays in a snapshotted state. In temporary snapshots we create
new image backed by original and all new data still goes to the original image
but before new data is written old data to be overwritten is popped out to the new
image thus we get snapshotted state thru new image.
Disks snapshots as well as disks itself are avaiable to read/write thru qemu
NBD server.
Here is typical actions on domain backup:
- create temporary snapshot of domain disks of interest
- export snaphots thru NBD
- back them up
- remove disks from export
- delete temporary snapshot
and typical actions on domain restore:
- start domain in paused state
- export domain disks of interest thru NBD for write
- restore them
- remove disks from export
- resume or destroy domain
Now let's write down API in more details. There are minor changes in comparison
with previous version [1].
*Temporary snapshot API*
In previous version it is called 'Fleece API' after qemu terms and I'll still
use BlockSnapshot prefix for commands as in previous RFC instead of
TmpSnapshots which I inclined more now.
virDomainBlockSnapshotPtr
virDomainBlockSnapshotCreateXML(virDomainPtr domain,
const char *xmlDesc,
unsigned int flags);
virDomainBlockSnapshotDelete(virDomainBlockSnapshotPtr snapshot,
unsigned int flags);
virDomainBlockSnapshotList(virDomainPtr domain,
virDomainBlockSnapshotPtr **snaps,
unsigned int flags);
virDomainBlockSnapshotGetXMLDesc(virDomainBlockSnapshotPtr snapshot,
unsigned int flags);
virDomainBlockSnapshotPtr
virDomainBlockSnapshotLookupByName(virDomainPtr domain,
const char *name,
unsigned int flags);
Here is an example of snapshot xml description:
<domainblocksnapshot>
<name>d068765e-8b50-4d74-9b72-1e55c663cbf8</name>
<disk name='sda' type="file">
<fleece file="/tmp/snapshot-a.hdd"/>
</disk>
<disk name='sdb' type="file">
<fleece file="/tmp/snapshot-b.hdd"/>
</disk>
</domainblocksnapshot>
Temporary snapshots are indepentent thus they are not organized in tree structure
as usual snapshots, so the 'list snapshots' and 'lookup' function will suffice.
Qemu can track what disk's blocks are changed from snapshotted state so on next
backup client can backup only changed blocks. virDomainBlockSnapshotCreateXML
accepts VIR_DOMAIN_BLOCK_SNAPSHOT_CREATE_CHECKPOINT flag to turn this option
for snapshot which means to track changes from this particular snapshot. I used
checkpoint term and not [dirty] bitmap because many qemu dirty bitmaps are used
to provide changed blocks from the given checkpoint to current snapshot in
current implementation (see *Implemenation* section for more details). Also
bitmap keeps block changes and thus itself changes in time and checkpoint is
a more statical terms means you can query changes from that moment in time.
Checkpoints are visible in active domain xml:
<disk type='file' device='disk'>
..
<target dev='sda' bus='scsi'/>
<alias name='scsi0-0-0-0'/>
<checkpoint name="93a5c045-6457-2c09-e56c-927cdf34e178">
<checkpoint name="5768a388-c1c4-414c-ac4e-eab216ba7c0c">
..
</disk>
Every checkpoint requires qemu dirty bitmap which eats 16MiB of RAM with default
dirty block size of 64KiB for 1TiB disk and the same amount of disk space is used.
So client need to manage checkpoints and delete unused. Thus next API function:
int
virDomainBlockCheckpointRemove(virDomainPtr domain,
const char *name,
unsigned int flags);
*Block export API*
I guess it is natural to treat qemu NBD server as a domain device. So
we can use virDomainAttachDeviceFlags/virDomainDetachDeviceFlags API to start/stop NBD
server and virDomainUpdateDeviceFlags to add/delete disks to be exported.
While I'm have no doubts about start/stop operations using virDomainUpdateDeviceFlags
looks a bit inconvinient so I decided to add a pair of API functions just
to add/delete disks to be exported:
int
virDomainBlockExportStart(virDomainPtr domain,
const char *xmlDesc,
unsigned int flags);
int
virDomainBlockExportStop(virDomainPtr domain,
const char *xmlDesc,
unsigned int flags);
I guess more appropriate names are virDomainBlockExportAdd and
virDomainBlockExportRemove but as I already have a patch series implementing pull
backups with these names I would like to keep these names now.
These names also reflect that in the implementation I decided to start/stop NBD
server in a lazy manner. While it is a bit innovative for libvirt API I guess
it is convinient because to refer NBD server to add/remove disks to we need to
identify it thru it's parameters like type, address etc until we introduce some
device id (which does not looks consistent with current libvirt design). So it
looks like we have all parameters to start/stop server in the frame of these
calls so why have extra API calls just to start/stop server manually. If we
later need to have NBD server without disks we can perfectly support
virDomainAttachDeviceFlags/virDomainDetachDeviceFlags.
Here is example of xml to add/remove disks (specifying checkpoint
attribute is not needed for removing disks of course):
<domainblockexport type="nbd">
<address type="ip" host="0.0.0.0" port="8000"/>
<disk name="sda" snapshot="0044757e-1a2d-4c2c-b92f-bb403309bb17"
checkpoint="d068765e-8b50-4d74-9b72-1e55c663cbf8"/>
<disk name="sdb" snapshot="0044757e-1a2d-4c2c-b92f-bb403309bb17"
checkpoint="d068765e-8b50-4d74-9b72-1e55c663cbf8"/>
</domainblockexport>
And this is how this NBD server will be exposed in domain xml:
<devices>
...
<blockexport type="nbd">
<address type="ip" host="0.0.0.0" port="8000"/>
<disk name="sda" snapshot="0044757e-1a2d-4c2c-b92f-bb403309bb17"
checkpoint="d068765e-8b50-4d74-9b72-1e55c663cbf8"
exportname="sda-0044757e-1a2d-4c2c-b92f-bb403309bb17"/>
<disk name="sdb" snapshot="0044757e-1a2d-4c2c-b92f-bb403309bb17"
checkpoint="d068765e-8b50-4d74-9b72-1e55c663cbf8
exportname="sdb-0044757e-1a2d-4c2c-b92f-bb403309bb17"/>
</blockexport>
...
</devices>
*Implementation details from qemu-libvirt interactions POV*
1. Temporary snapshot
- create snapshot
- add fleece blockdev backed by disk of interest
- start fleece blockjob which will pop out data to be overwritten to fleece blockdev
{
"execute": "blockdev-add"
"arguments": {
"backing": "drive-scsi0-0-0-0",
"driver": "qcow2",
"file": {
"driver": "file",
"filename": "/tmp/snapshot-a.hdd"
},
"node-name": "snapshot-scsi0-0-0-0"
},
}
{
"execute": "transaction"
"arguments": {
"actions": [
{
"type": "blockdev-backup"
"data": {
"device": "drive-scsi0-0-0-0",
"target": "snapshot-scsi0-0-0-0"
"sync": "none",
},
}
]
},
}
- delete snapshot
- cancel fleece blockjob
- delete fleece blockdev
{
"execute": "block-job-cancel"
"arguments": {
"device": "drive-scsi0-0-0-0"
},
}
{
"execute": "blockdev-del"
"arguments": {
"node-name": "snapshot-scsi0-0-0-0"
},
}
2. Block export
- add disks to export
- start NBD server if it is not started
- add disks
{
"execute": "nbd-server-start"
"arguments": {
"addr": {
"type": "inet"
"data": {
"host": "0.0.0.0",
"port": "49300"
},
}
},
}
{
"execute": "nbd-server-add"
"arguments": {
"device": "snapshot-scsi0-0-0-0",
"name": "sda-d068765e-8b50-4d74-9b72-1e55c663cbf8",
"writable": false
},
}
- remove disks from export
- remove disks
- stop NBD server if there are no disks left
{
"arguments": {
"mode": "hard",
"name": "sda-d068765e-8b50-4d74-9b72-1e55c663cbf8"
},
"execute": "nbd-server-remove"
}
{
"execute": "nbd-server-stop"
}
3. Checkpoints (the most interesting part)
First a few facts about qemu dirty bitmaps.
Bitmap can be either in active or disable state. In disabled state it does not
get changed on guest writes. And oppositely in active state it tracks guest
writes. This implementation uses approach with only one active bitmap at
a time. This should reduce guest write penalties in the presence of
checkpoints. So on first snapshot we create bitmap B_1. Now it tracks changes
from the snapshot 1. On second snapshot we create bitmap B_2 and disable bitmap
B1 and so on. Now bitmap B1 keep changes from snaphost 1 to snapshot 2, B2
- changes from snaphot 2 to snapshot 3 and so on. Last bitmap is active and
gets most disk change after latest snapshot.
Getting changed blocks bitmap from some checkpoint in past till current snapshot
is quite simple in this scheme. For example if the last snapshot is 7 then
to get changes from snapshot 3 to latest snapshot we need to merge bitmaps B3,
B4, B4 and B6. Merge is just logical OR on bitmap bits.
Deleting a checkpoint somewhere in the middle of checkpoint sequence requires
merging correspondent bitmap to the previous bitmap in this scheme.
We use persitent bitmaps in the implementation. This means upon qemu process
termination bitmaps are saved in disks images metadata and restored back on
qemu process start. This makes checkpoint a persistent property that is we
keep them across domain start/stops. Qemu does not try hard to keep bitmaps.
If upon save something goes wrong bitmap is dropped. The same is applied to the
migration process too. For backup process it is not critical. If we don't
discover a checkpoint we always can make a full backup. Also qemu provides no
special means to track order of bitmaps. These facts are critical for
implementation with one active bitmap at a time. We need right order of bitmaps upon
merge - for snapshot N and block changes from snanpshot K, K < N to N we need
to merge bitmaps B_{K}, ..., B_{N-1}. Also if one of the bitmaps to be merged
is missing we can't calculate desired block changes too.
So the implementation encode bitmap order in their names. For snapshot A1, bitmap
name will be A1, for snapshot A2 bitmap name will be A2^A1 and so on. Using this naming
encoding upon domain start we can find out bitmap order and check for missing
ones. This complicates a bit bitmap removing though. For example removing
a bitmap somewhere in the middle looks like this:
- removing bitmap K (bitmap name is NAME_{K}^NAME_{K-1}
- create new bitmap named NAME_{K+1}^NAME_{K-1} ---.
- disable new bitmap | This is effectively renaming
- merge bitmap NAME_{K+1}^NAME_{K} to the new bitmap | of bitmap K+1 to comply the naming scheme
- remove bitmap NAME_{K+1}^NAME_{K} ___/
- merge bitmap NAME_{K}^NAME_{K-1} to NAME_{K-1}^NAME_{K-2}
- remove bitmap NAME_{K}^NAME_{K-1}
As you can see we need to change name for bitmap K+1 to keep our bitmap
naming scheme. This is done creating new K+1 bitmap with appropriate name
and copying old K+1 bitmap into new.
So while it is possible to have only one active bitmap at a time it costs
some exersices at managment layer. To me it looks like qemu itself is a better
place to track bitmaps chain order and consistency.
Now how exporting bitmaps looks like.
- add to export disk snapshot N with changes from checkpoint K
- add fleece blockdev to NBD exports
- create new bitmap T
- disable bitmap T
- merge bitmaps K, K+1, .. N-1 into T
- add bitmap to T to nbd export
- remove disk snapshot from export
- remove fleece blockdev from NBD exports
- remove bitmap T
Here is qemu commands examples for operation with checkpoints, I'll make
several snapshots with checkpoints for purpuse of better illustration.
- create snapshot d068765e-8b50-4d74-9b72-1e55c663cbf8 with checkpoint
- same as without checkpoint but additionally add bitmap on fleece blockjob start
...
{
"execute": "transaction"
"arguments": {
"actions": [
{
"type": "blockdev-backup"
"data": {
"device": "drive-scsi0-0-0-0",
"sync": "none",
"target": "snapshot-scsi0-0-0-0"
},
},
{
"type": "block-dirty-bitmap-add"
"data": {
"name": "libvirt-d068765e-8b50-4d74-9b72-1e55c663cbf8",
"node": "drive-scsi0-0-0-0",
"persistent": true
},
}
]
},
}
- delete snapshot d068765e-8b50-4d74-9b72-1e55c663cbf8
- same as without checkpoints
- create snapshot 0044757e-1a2d-4c2c-b92f-bb403309bb17 with checkpoint
- same actions as for the first snapshot, but additionally disable the first bitmap
...
{
"execute": "transaction"
"arguments": {
"actions": [
{
"type": "blockdev-backup"
"data": {
"device": "drive-scsi0-0-0-0",
"sync": "none",
"target": "snapshot-scsi0-0-0-0"
},
},
{
"type": "x-vz-block-dirty-bitmap-disable"
"data": {
"name": "libvirt-d068765e-8b50-4d74-9b72-1e55c663cbf8",
"node": "drive-scsi0-0-0-0"
},
},
{
"type": "block-dirty-bitmap-add"
"data": {
"name": "libvirt-0044757e-1a2d-4c2c-b92f-bb403309bb17^d068765e-8b50-4d74-9b72-1e55c663cbf8",
"node": "drive-scsi0-0-0-0",
"persistent": true
},
}
]
},
}
- delete snapshot 0044757e-1a2d-4c2c-b92f-bb403309bb17
- create snapshot 8fc02db3-166f-4de7-b7aa-1f7303e6162b with checkpoint
- add disk snapshot 8fc02db3-166f-4de7-b7aa-1f7303e6162b to export and bitmap with
changes from checkpoint d068765e-8b50-4d74-9b72-1e55c663cbf8
- same as add export without checkpoint, but aditionally
- form result bitmap
- add bitmap to NBD export
...
{
"execute": "transaction"
"arguments": {
"actions": [
{
"type": "block-dirty-bitmap-add"
"data": {
"node": "drive-scsi0-0-0-0",
"name": "libvirt-__export_temporary__",
"persistent": false
},
},
{
"type": "x-vz-block-dirty-bitmap-disable"
"data": {
"node": "drive-scsi0-0-0-0"
"name": "libvirt-__export_temporary__",
},
},
{
"type": "x-vz-block-dirty-bitmap-merge"
"data": {
"node": "drive-scsi0-0-0-0",
"src_name": "libvirt-d068765e-8b50-4d74-9b72-1e55c663cbf8"
"dst_name": "libvirt-__export_temporary__",
},
},
{
"type": "x-vz-block-dirty-bitmap-merge"
"data": {
"node": "drive-scsi0-0-0-0",
"src_name": "libvirt-0044757e-1a2d-4c2c-b92f-bb403309bb17^d068765e-8b50-4d74-9b72-1e55c663cbf#
"dst_name": "libvirt-__export_temporary__",
},
}
]
},
}
{
"execute": "x-vz-nbd-server-add-bitmap"
"arguments": {
"name": "sda-8fc02db3-166f-4de7-b7aa-1f7303e6162b"
"bitmap": "libvirt-__export_temporary__",
"bitmap-export-name": "d068765e-8b50-4d74-9b72-1e55c663cbf8",
},
}
- remove snapshot 8fc02db3-166f-4de7-b7aa-1f7303e6162b from export
- same as without checkpoint but additionally remove temporary bitmap
...
{
"arguments": {
"name": "libvirt-__export_temporary__",
"node": "drive-scsi0-0-0-0"
},
"execute": "block-dirty-bitmap-remove"
}
- delete checkpoint 0044757e-1a2d-4c2c-b92f-bb403309bb17
(similar operation is described in the section about naming scheme for bitmaps,
with difference that K+1 is N here and thus new bitmap should not be disabled)
{
"arguments": {
"actions": [
{
"type": "block-dirty-bitmap-add"
"data": {
"node": "drive-scsi0-0-0-0",
"name": "libvirt-8fc02db3-166f-4de7-b7aa-1f7303e6162b^d068765e-8b50-4d74-9b72-1e55c663cbf8",
"persistent": true
},
},
{
"type": "x-vz-block-dirty-bitmap-merge"
"data": {
"node": "drive-scsi0-0-0-0",
"src_name": "libvirt-0044757e-1a2d-4c2c-b92f-bb403309bb17^d068765e-8b50-4d74-9b72-1e55c663cbf#
"dst_name": "libvirt-d068765e-8b50-4d74-9b72-1e55c663cbf8",
},
},
{
"type": "x-vz-block-dirty-bitmap-merge"
"data": {
"node": "drive-scsi0-0-0-0",
"src_name": "libvirt-8fc02db3-166f-4de7-b7aa-1f7303e6162b^0044757e-1a2d-4c2c-b92f-bb403309bb1#
"dst_name": "libvirt-8fc02db3-166f-4de7-b7aa-1f7303e6162b^d068765e-8b50-4d74-9b72-1e55c663cbf#
},
},
]
},
"execute": "transaction"
}
{
"execute": "x-vz-block-dirty-bitmap-remove"
"arguments": {
"node": "drive-scsi0-0-0-0"
"name": "libvirt-8fc02db3-166f-4de7-b7aa-1f7303e6162b^0044757e-1a2d-4c2c-b92f-bb403309bb17",
},
},
{
"execute": "x-vz-block-dirty-bitmap-remove"
"arguments": {
"node": "drive-scsi0-0-0-0"
"name": "libvirt-0044757e-1a2d-4c2c-b92f-bb403309bb17^d068765e-8b50-4d74-9b72-1e55c663cbf8",
},
}
Here is a list of bitmap commands used in implementation but not yet in upstream (AFAIK).
x-vz-block-dirty-bitmap-remove
x-vz-block-dirty-bitmap-merge
x-vz-block-dirty-bitmap-disable
x-vz-block-dirty-bitmap-enable (not in the examples; used when removing most recent checkpoint)
x-vz-nbd-server-add-bitmap
*Restore operation nuances*
As it was written above to restore a domain one needs to start it in paused
state, export domain's disks and write them from backup. However qemu currently does
not let export disks for write even for a domain that never starts guests CPU.
We have an experimental qemu command option -x-vz-nbd-restore (passed together
with -incoming option) to fix it.
*Links*
[1] Previous version of RFC
https://www.redhat.com/archives/libvir-list/2017-November/msg00514.html
6 years, 7 months
[libvirt] [dbus PATCH 00/15] Some more get APIs for Domain Interface
by Katerina Koukiou
Katerina Koukiou (15):
Implement GetTime method for Domain Interface
Implement MigrateGetCompressionCache method for Domain Interface
Implement GetBlockIoTune method for Domain Interface
Implement GetBlockJobInfo method for Domain Interface
Implement GetDiskErrors method for Domain Interface
Impement GetFSInfo method for Domain Interface
Implement GetGuestVcpus method for Domain interface
Implement GetHostname method for Domain Interface
Implement GetInterfaceParameters method for Domain Interface
Implement GetIOThreadInfo method for Domain Interface
Implement GetJobStats method for Domain Interface
Implement GetMetadata method for Domain Interface
Implement GetNumaParameters method for Domain Interface
Implement GetPerfEvents method for Domain Interface
Implement GetCPUStats method for Domain Interface
data/org.libvirt.Domain.xml | 98 +++++++
src/domain.c | 665 ++++++++++++++++++++++++++++++++++++++++++++
tests/test_domain.py | 6 +
3 files changed, 769 insertions(+)
--
2.15.0
6 years, 7 months
[libvirt] [PATCH v2] qemu: Add I/O thread support info into domain capabilities
by Martin Kletzander
Signed-off-by: Martin Kletzander <mkletzan(a)redhat.com>
---
docs/schemas/domaincaps.rng | 10 ++++++++++
src/conf/domain_capabilities.c | 3 +++
src/conf/domain_capabilities.h | 1 +
src/qemu/qemu_capabilities.c | 11 +++++++++++
tests/domaincapsschemadata/basic.xml | 1 +
tests/domaincapsschemadata/full.xml | 1 +
tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml | 1 +
.../domaincapsschemadata/qemu_2.12.0-virt.aarch64.xml | 1 +
tests/domaincapsschemadata/qemu_2.12.0.ppc64.xml | 1 +
tests/domaincapsschemadata/qemu_2.12.0.s390x.xml | 1 +
tests/domaincapsschemadata/qemu_2.12.0.x86_64.xml | 1 +
.../domaincapsschemadata/qemu_2.6.0-virt.aarch64.xml | 1 +
tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml | 1 +
tests/domaincapsschemadata/qemu_2.6.0.ppc64.xml | 1 +
tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml | 1 +
tests/domaincapsschemadata/qemu_2.7.0.s390x.xml | 1 +
tests/domaincapsschemadata/qemu_2.8.0-tcg.x86_64.xml | 1 +
tests/domaincapsschemadata/qemu_2.8.0.s390x.xml | 1 +
tests/domaincapsschemadata/qemu_2.8.0.x86_64.xml | 1 +
tests/domaincapsschemadata/qemu_2.9.0-q35.x86_64.xml | 1 +
tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml | 1 +
tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml | 1 +
22 files changed, 43 insertions(+)
diff --git a/docs/schemas/domaincaps.rng b/docs/schemas/domaincaps.rng
index 39053181eb9a..049b2ae7b64f 100644
--- a/docs/schemas/domaincaps.rng
+++ b/docs/schemas/domaincaps.rng
@@ -28,6 +28,9 @@
<optional>
<ref name='vcpu'/>
</optional>
+ <optional>
+ <ref name='iothreads'/>
+ </optional>
<optional>
<ref name='os'/>
</optional>
@@ -53,6 +56,13 @@
</element>
</define>
+ <define name='iothreads'>
+ <element name='iothreads'>
+ <ref name='supported'/>
+ <empty/>
+ </element>
+ </define>
+
<define name='loader'>
<element name='loader'>
<ref name='supported'/>
diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c
index bebbaf44d00e..f18bea99d63f 100644
--- a/src/conf/domain_capabilities.c
+++ b/src/conf/domain_capabilities.c
@@ -562,6 +562,9 @@ virDomainCapsFormat(virDomainCapsPtr const caps)
if (caps->maxvcpus)
virBufferAsprintf(&buf, "<vcpu max='%d'/>\n", caps->maxvcpus);
+ virBufferAsprintf(&buf, "<iothreads supported='%s'/>\n",
+ caps->iothreads ? "yes" : "no");
+
virDomainCapsOSFormat(&buf, &caps->os);
virDomainCapsCPUFormat(&buf, &caps->cpu);
diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h
index fa4c1e442f57..3b5ce214d636 100644
--- a/src/conf/domain_capabilities.h
+++ b/src/conf/domain_capabilities.h
@@ -147,6 +147,7 @@ struct _virDomainCaps {
/* Some machine specific info */
int maxvcpus;
+ bool iothreads; /* Whether I/O threads are supported or not. */
virDomainCapsOS os;
virDomainCapsCPU cpu;
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 833c75514c25..00634abb1649 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -4632,6 +4632,16 @@ virQEMUCapsFillDomainCPUCaps(virCapsPtr caps,
}
+static int
+virQEMUCapsFillDomainIOThreadCaps(virQEMUCapsPtr qemuCaps,
+ virDomainCapsPtr domCaps)
+{
+ domCaps->iothreads = virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_IOTHREAD);
+
+ return 0;
+}
+
+
static int
virQEMUCapsFillDomainDeviceDiskCaps(virQEMUCapsPtr qemuCaps,
const char *machine,
@@ -4866,6 +4876,7 @@ virQEMUCapsFillDomainCaps(virCapsPtr caps,
if (virQEMUCapsFillDomainOSCaps(os, firmwares, nfirmwares) < 0 ||
virQEMUCapsFillDomainCPUCaps(caps, qemuCaps, domCaps) < 0 ||
+ virQEMUCapsFillDomainIOThreadCaps(qemuCaps, domCaps) < 0 ||
virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps,
domCaps->machine, disk) < 0 ||
virQEMUCapsFillDomainDeviceGraphicsCaps(qemuCaps, graphics) < 0 ||
diff --git a/tests/domaincapsschemadata/basic.xml b/tests/domaincapsschemadata/basic.xml
index 6b788d9144c8..7f9582430a7a 100644
--- a/tests/domaincapsschemadata/basic.xml
+++ b/tests/domaincapsschemadata/basic.xml
@@ -3,6 +3,7 @@
<domain>uml</domain>
<machine>my-machine-type</machine>
<arch>x86_64</arch>
+ <iothreads supported='no'/>
<os supported='no'/>
<cpu>
<mode name='host-passthrough' supported='no'/>
diff --git a/tests/domaincapsschemadata/full.xml b/tests/domaincapsschemadata/full.xml
index ab6ef9f2ef17..b97bc883262a 100644
--- a/tests/domaincapsschemadata/full.xml
+++ b/tests/domaincapsschemadata/full.xml
@@ -4,6 +4,7 @@
<machine>my-machine-type</machine>
<arch>x86_64</arch>
<vcpu max='255'/>
+ <iothreads supported='no'/>
<os supported='yes'>
<loader supported='yes'>
<value>/foo/bar</value>
diff --git a/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml b/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml
index 8d1ad865703e..d71d948477ef 100644
--- a/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml
+++ b/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml
@@ -4,6 +4,7 @@
<machine>pc-i440fx-1.7</machine>
<arch>x86_64</arch>
<vcpu max='255'/>
+ <iothreads supported='no'/>
<os supported='yes'>
<loader supported='yes'>
<value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
diff --git a/tests/domaincapsschemadata/qemu_2.12.0-virt.aarch64.xml b/tests/domaincapsschemadata/qemu_2.12.0-virt.aarch64.xml
index 9cba942fbf8e..9feceeea74c6 100644
--- a/tests/domaincapsschemadata/qemu_2.12.0-virt.aarch64.xml
+++ b/tests/domaincapsschemadata/qemu_2.12.0-virt.aarch64.xml
@@ -4,6 +4,7 @@
<machine>virt-2.12</machine>
<arch>aarch64</arch>
<vcpu max='255'/>
+ <iothreads supported='yes'/>
<os supported='yes'>
<loader supported='yes'>
<value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
diff --git a/tests/domaincapsschemadata/qemu_2.12.0.ppc64.xml b/tests/domaincapsschemadata/qemu_2.12.0.ppc64.xml
index 4029e9e386a9..62f2d4f78a6e 100644
--- a/tests/domaincapsschemadata/qemu_2.12.0.ppc64.xml
+++ b/tests/domaincapsschemadata/qemu_2.12.0.ppc64.xml
@@ -4,6 +4,7 @@
<machine>pseries-2.12</machine>
<arch>ppc64</arch>
<vcpu max='1024'/>
+ <iothreads supported='yes'/>
<os supported='yes'>
<loader supported='yes'>
<value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
diff --git a/tests/domaincapsschemadata/qemu_2.12.0.s390x.xml b/tests/domaincapsschemadata/qemu_2.12.0.s390x.xml
index 50680c1ef8d2..be505ee331a4 100644
--- a/tests/domaincapsschemadata/qemu_2.12.0.s390x.xml
+++ b/tests/domaincapsschemadata/qemu_2.12.0.s390x.xml
@@ -4,6 +4,7 @@
<machine>s390-ccw-virtio-2.12</machine>
<arch>s390x</arch>
<vcpu max='248'/>
+ <iothreads supported='yes'/>
<os supported='yes'>
<loader supported='yes'>
<value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
diff --git a/tests/domaincapsschemadata/qemu_2.12.0.x86_64.xml b/tests/domaincapsschemadata/qemu_2.12.0.x86_64.xml
index 851d914bc9c6..84a83551ad42 100644
--- a/tests/domaincapsschemadata/qemu_2.12.0.x86_64.xml
+++ b/tests/domaincapsschemadata/qemu_2.12.0.x86_64.xml
@@ -4,6 +4,7 @@
<machine>pc-i440fx-2.12</machine>
<arch>x86_64</arch>
<vcpu max='255'/>
+ <iothreads supported='yes'/>
<os supported='yes'>
<loader supported='yes'>
<value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
diff --git a/tests/domaincapsschemadata/qemu_2.6.0-virt.aarch64.xml b/tests/domaincapsschemadata/qemu_2.6.0-virt.aarch64.xml
index 7c019b230868..b3dc0dd8004b 100644
--- a/tests/domaincapsschemadata/qemu_2.6.0-virt.aarch64.xml
+++ b/tests/domaincapsschemadata/qemu_2.6.0-virt.aarch64.xml
@@ -4,6 +4,7 @@
<machine>virt-2.6</machine>
<arch>aarch64</arch>
<vcpu max='255'/>
+ <iothreads supported='yes'/>
<os supported='yes'>
<loader supported='yes'>
<value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
diff --git a/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml b/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml
index 3b142806217b..13bb19198d38 100644
--- a/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml
+++ b/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml
@@ -4,6 +4,7 @@
<machine>integratorcp</machine>
<arch>aarch64</arch>
<vcpu max='1'/>
+ <iothreads supported='yes'/>
<os supported='yes'>
<loader supported='yes'>
<value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
diff --git a/tests/domaincapsschemadata/qemu_2.6.0.ppc64.xml b/tests/domaincapsschemadata/qemu_2.6.0.ppc64.xml
index 98c72d36de04..d9a243d9d573 100644
--- a/tests/domaincapsschemadata/qemu_2.6.0.ppc64.xml
+++ b/tests/domaincapsschemadata/qemu_2.6.0.ppc64.xml
@@ -4,6 +4,7 @@
<machine>pseries-2.6</machine>
<arch>ppc64</arch>
<vcpu max='255'/>
+ <iothreads supported='yes'/>
<os supported='yes'>
<loader supported='yes'>
<value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
diff --git a/tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml b/tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml
index de81886237ee..7eabf6756b89 100644
--- a/tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml
+++ b/tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml
@@ -4,6 +4,7 @@
<machine>pc-i440fx-2.6</machine>
<arch>x86_64</arch>
<vcpu max='255'/>
+ <iothreads supported='yes'/>
<os supported='yes'>
<loader supported='yes'>
<value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
diff --git a/tests/domaincapsschemadata/qemu_2.7.0.s390x.xml b/tests/domaincapsschemadata/qemu_2.7.0.s390x.xml
index b93d00ece197..c2045263530f 100644
--- a/tests/domaincapsschemadata/qemu_2.7.0.s390x.xml
+++ b/tests/domaincapsschemadata/qemu_2.7.0.s390x.xml
@@ -4,6 +4,7 @@
<machine>s390-ccw-virtio-2.7</machine>
<arch>s390x</arch>
<vcpu max='248'/>
+ <iothreads supported='yes'/>
<os supported='yes'>
<loader supported='yes'>
<value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
diff --git a/tests/domaincapsschemadata/qemu_2.8.0-tcg.x86_64.xml b/tests/domaincapsschemadata/qemu_2.8.0-tcg.x86_64.xml
index d860cd833fed..93e0a610f6ce 100644
--- a/tests/domaincapsschemadata/qemu_2.8.0-tcg.x86_64.xml
+++ b/tests/domaincapsschemadata/qemu_2.8.0-tcg.x86_64.xml
@@ -4,6 +4,7 @@
<machine>pc-i440fx-2.8</machine>
<arch>x86_64</arch>
<vcpu max='255'/>
+ <iothreads supported='yes'/>
<os supported='yes'>
<loader supported='yes'>
<value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
diff --git a/tests/domaincapsschemadata/qemu_2.8.0.s390x.xml b/tests/domaincapsschemadata/qemu_2.8.0.s390x.xml
index ee40d1e84ec3..6555e99c68a3 100644
--- a/tests/domaincapsschemadata/qemu_2.8.0.s390x.xml
+++ b/tests/domaincapsschemadata/qemu_2.8.0.s390x.xml
@@ -4,6 +4,7 @@
<machine>s390-ccw-virtio-2.8</machine>
<arch>s390x</arch>
<vcpu max='248'/>
+ <iothreads supported='yes'/>
<os supported='yes'>
<loader supported='yes'>
<value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
diff --git a/tests/domaincapsschemadata/qemu_2.8.0.x86_64.xml b/tests/domaincapsschemadata/qemu_2.8.0.x86_64.xml
index 33161f7b8234..2a6edd9a0f80 100644
--- a/tests/domaincapsschemadata/qemu_2.8.0.x86_64.xml
+++ b/tests/domaincapsschemadata/qemu_2.8.0.x86_64.xml
@@ -4,6 +4,7 @@
<machine>pc-i440fx-2.8</machine>
<arch>x86_64</arch>
<vcpu max='255'/>
+ <iothreads supported='yes'/>
<os supported='yes'>
<loader supported='yes'>
<value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
diff --git a/tests/domaincapsschemadata/qemu_2.9.0-q35.x86_64.xml b/tests/domaincapsschemadata/qemu_2.9.0-q35.x86_64.xml
index 07e1db641a76..aef8a90f3930 100644
--- a/tests/domaincapsschemadata/qemu_2.9.0-q35.x86_64.xml
+++ b/tests/domaincapsschemadata/qemu_2.9.0-q35.x86_64.xml
@@ -4,6 +4,7 @@
<machine>pc-q35-2.9</machine>
<arch>x86_64</arch>
<vcpu max='288'/>
+ <iothreads supported='yes'/>
<os supported='yes'>
<loader supported='yes'>
<value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
diff --git a/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml b/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml
index 6c2bbac190c7..e4afdeedc4e6 100644
--- a/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml
+++ b/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml
@@ -4,6 +4,7 @@
<machine>pc-i440fx-2.9</machine>
<arch>x86_64</arch>
<vcpu max='255'/>
+ <iothreads supported='yes'/>
<os supported='yes'>
<loader supported='yes'>
<value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
diff --git a/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml b/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml
index 2fc3b721389d..8f0f4fb7369b 100644
--- a/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml
+++ b/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml
@@ -4,6 +4,7 @@
<machine>pc-i440fx-2.9</machine>
<arch>x86_64</arch>
<vcpu max='255'/>
+ <iothreads supported='yes'/>
<os supported='yes'>
<loader supported='yes'>
<value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
--
2.17.0
6 years, 7 months
[libvirt] [PATCH v2 00/11] Add support for VM Generation ID (vmgenid)
by John Ferlan
v1: https://www.redhat.com/archives/libvir-list/2018-April/msg00913.html
Changes since v1:
- Remove the qemuProcessCheckGenID and clean up from the fallout of that
- Alter the *.args based on all the recent caps default change adjustments
John Ferlan (11):
Check return status for virUUIDGenerate
conf: Modify last arg to virDomainDefCopy
qemu: Add flags to qemuDomainMigratableDefCheckABIStability
conf: Add VM Generation ID to virDomainDef
conf: Add flag to regenerate genid for virDomainDefCopy
conf: Add VM Generation ID parse/format support
qemu: Add VM Generation ID device capability
qemu: Handle genid processing during startup/launch
Remove check for duplicitous GenID in another VM
qemu: Add VM Generation ID to qemu command line
docs: Add news article for VM Generation ID
docs/formatdomain.html.in | 29 ++++++++
docs/news.xml | 12 ++++
docs/schemas/domaincommon.rng | 8 +++
src/conf/domain_conf.c | 81 +++++++++++++++++++++--
src/conf/domain_conf.h | 19 +++++-
src/conf/network_conf.c | 2 +-
src/conf/secret_conf.c | 2 +-
src/libxl/libxl_domain.c | 4 +-
src/openvz/openvz_conf.c | 2 +-
src/qemu/qemu_capabilities.c | 2 +
src/qemu/qemu_capabilities.h | 1 +
src/qemu/qemu_command.c | 31 +++++++++
src/qemu/qemu_domain.c | 23 ++++---
src/qemu/qemu_domain.h | 6 +-
src/qemu/qemu_driver.c | 31 ++++++---
src/qemu/qemu_migration.c | 4 +-
src/qemu/qemu_process.c | 46 ++++++++++++-
src/qemu/qemu_process.h | 1 +
src/test/test_driver.c | 6 +-
src/xenconfig/xen_common.c | 2 +-
tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 1 +
tests/qemuxml2argvdata/genid-auto.args | 24 +++++++
tests/qemuxml2argvdata/genid-auto.xml | 32 +++++++++
tests/qemuxml2argvdata/genid.args | 24 +++++++
tests/qemuxml2argvdata/genid.xml | 32 +++++++++
tests/qemuxml2argvtest.c | 4 ++
tests/qemuxml2xmloutdata/genid-active.xml | 32 +++++++++
tests/qemuxml2xmloutdata/genid-auto-active.xml | 32 +++++++++
tests/qemuxml2xmloutdata/genid-auto-inactive.xml | 32 +++++++++
tests/qemuxml2xmloutdata/genid-inactive.xml | 32 +++++++++
tests/qemuxml2xmltest.c | 5 +-
33 files changed, 527 insertions(+), 37 deletions(-)
create mode 100644 tests/qemuxml2argvdata/genid-auto.args
create mode 100644 tests/qemuxml2argvdata/genid-auto.xml
create mode 100644 tests/qemuxml2argvdata/genid.args
create mode 100644 tests/qemuxml2argvdata/genid.xml
create mode 100644 tests/qemuxml2xmloutdata/genid-active.xml
create mode 100644 tests/qemuxml2xmloutdata/genid-auto-active.xml
create mode 100644 tests/qemuxml2xmloutdata/genid-auto-inactive.xml
create mode 100644 tests/qemuxml2xmloutdata/genid-inactive.xml
--
2.13.6
6 years, 7 months
[libvirt] [PATCH 00/29] syntax: Require spaces after casts
by Martin Kletzander
There was a discussion some time ago (I don't even have the link to the
ML archives) about spaces after casts. The opinions were diverse,
however I decided to proceed anyway and make a rule out of it. The
decision is explained with the reasoning behind it in the last commit, I
don't want to repeat it here.
This might cause a lot of collisions, but fear not as all the stuff
these patches do can be automated. The way I did it was using this tiny
neat command:
git ls-files '*.[chx]' | xargs sed -i -E 's/((\([a-zA-Z _]+ \*+|\(((signed|unsigned|long|short|int|char|s?size_t|void) ?)+|switch \(\(vir[a-zA-Z]*Type)\))(([^ );,]))/\1 \6/g'
So in case of a collision, you can run that on your patches, amend them
and then rebase on top of this series.
Of course this is not a semantic patch that is very precise, but
practicality beats perfection. I roughly checked for false hits (both
positive and negative) and I haven't found any.
Martin Kletzander (29):
admin: Add spaces after casts
bhyve: Add spaces after casts
conf: Add spaces after casts
esx: Add spaces after casts
hyperv: Add spaces after casts
libxl: Add spaces after casts
locking: Add spaces after casts
logging: Add spaces after casts
lxc: Add spaces after casts
network: Add spaces after casts
node_device: Add spaces after casts
nwfilter: Add spaces after casts
openvz: Add spaces after casts
qemu: Add spaces after casts
remote: Add spaces after casts
rpc: Add spaces after casts
storage: Add spaces after casts
uml: Add spaces after casts
util: Add spaces after casts
vbox: Add spaces after casts
vmware: Add spaces after casts
vmx: Add spaces after casts
vz: Add spaces after casts
xenapi: Add spaces after casts
xenconfig: Add spaces after casts
tests: Add spaces after casts
tools: Add spaces after casts
libvirt-domain: Add spaces after casts
Require space after cast
cfg.mk | 6 ++
docs/hacking.html.in | 9 ++
include/libvirt/libvirt-domain.h | 4 +-
src/admin/admin_remote.c | 8 +-
src/bhyve/bhyve_process.c | 6 +-
src/conf/capabilities.c | 4 +-
src/conf/domain_audit.c | 6 +-
src/conf/domain_capabilities.c | 2 +-
src/conf/domain_conf.c | 76 +++++++--------
src/conf/network_conf.c | 2 +-
src/conf/node_device_conf.c | 2 +-
src/conf/nwfilter_conf.c | 6 +-
src/conf/nwfilter_params.c | 8 +-
src/conf/snapshot_conf.c | 2 +-
src/conf/virnetworkobj.c | 2 +-
src/conf/virsecretobj.c | 6 +-
src/conf/virstorageobj.c | 4 +-
src/esx/esx_driver.c | 18 ++--
src/esx/esx_interface_driver.c | 2 +-
src/esx/esx_network_driver.c | 2 +-
src/esx/esx_storage_backend_vmfs.c | 6 +-
src/esx/esx_stream.c | 2 +-
src/esx/esx_util.c | 2 +-
src/esx/esx_vi.c | 16 ++--
src/esx/esx_vi_types.c | 48 +++++-----
src/hyperv/hyperv_driver.c | 60 ++++++------
src/hyperv/hyperv_wmi.c | 12 +--
src/libvirt-domain.c | 2 +-
src/libxl/libxl_conf.c | 2 +-
src/libxl/libxl_domain.c | 6 +-
src/libxl/libxl_driver.c | 2 +-
src/libxl/libxl_logger.c | 2 +-
src/libxl/libxl_migration.c | 2 +-
src/locking/lock_daemon.c | 20 ++--
src/locking/lock_daemon_dispatch.c | 2 +-
src/locking/lock_driver_sanlock.c | 2 +-
src/logging/log_daemon.c | 16 ++--
src/logging/log_daemon_dispatch.c | 6 +-
src/logging/log_manager.c | 18 ++--
src/lxc/lxc_container.c | 4 +-
src/lxc/lxc_controller.c | 4 +-
src/lxc/lxc_fuse.c | 2 +-
src/lxc/lxc_process.c | 10 +-
src/network/bridge_driver.c | 10 +-
src/node_device/node_device_hal.c | 106 ++++++++++-----------
src/nwfilter/nwfilter_dhcpsnoop.c | 14 +--
src/nwfilter/nwfilter_ebiptables_driver.c | 22 ++---
src/nwfilter/nwfilter_gentech_driver.c | 6 +-
src/nwfilter/nwfilter_learnipaddr.c | 8 +-
src/openvz/openvz_driver.c | 4 +-
src/qemu/qemu_capabilities.c | 14 +--
src/qemu/qemu_command.c | 6 +-
src/qemu/qemu_domain.c | 14 +--
src/qemu/qemu_driver.c | 10 +-
src/qemu/qemu_migration_cookie.c | 2 +-
src/qemu/qemu_monitor.c | 10 +-
src/qemu/qemu_monitor_text.c | 6 +-
src/qemu/qemu_process.c | 4 +-
src/remote/remote_daemon.c | 4 +-
src/remote/remote_daemon_dispatch.c | 10 +-
src/remote/remote_driver.c | 110 +++++++++++-----------
src/rpc/virnetsaslcontext.c | 4 +-
src/rpc/virnetserverclient.c | 4 +-
src/rpc/virnetservermdns.c | 4 +-
src/rpc/virnetsshsession.c | 12 +--
src/rpc/virnettlscontext.c | 4 +-
src/storage/storage_backend_disk.c | 4 +-
src/storage/storage_backend_fs.c | 2 +-
src/storage/storage_backend_gluster.c | 10 +-
src/storage/storage_backend_iscsi.c | 2 +-
src/storage/storage_backend_mpath.c | 2 +-
src/storage/storage_backend_rbd.c | 8 +-
src/storage/storage_util.c | 8 +-
src/uml/uml_driver.c | 18 ++--
src/util/viralloc.c | 16 ++--
src/util/viralloc.h | 2 +-
src/util/virarptable.c | 2 +-
src/util/viratomic.h | 64 ++++++-------
src/util/vircgroup.c | 4 +-
src/util/vircommand.c | 4 +-
src/util/virconf.c | 30 +++---
src/util/virdbus.c | 66 ++++++-------
src/util/virdnsmasq.c | 6 +-
src/util/virfdstream.c | 2 +-
src/util/virfile.c | 8 +-
src/util/virfilecache.c | 2 +-
src/util/virfirewall.c | 2 +-
src/util/virhash.c | 2 +-
src/util/virhostmem.c | 10 +-
src/util/viridentity.c | 4 +-
src/util/viriscsi.c | 2 +-
src/util/virjson.c | 22 ++---
src/util/virlockspace.c | 12 +--
src/util/virlog.c | 14 +--
src/util/virnetdev.c | 20 ++--
src/util/virnetdevbridge.c | 6 +-
src/util/virnetdevip.c | 6 +-
src/util/virnetdevmacvlan.c | 18 ++--
src/util/virnetdevtap.c | 4 +-
src/util/virnetdevvportprofile.c | 4 +-
src/util/virnetlink.c | 18 ++--
src/util/virnodesuspend.c | 4 +-
src/util/virobject.c | 2 +-
src/util/virpidfile.c | 2 +-
src/util/virpolkit.c | 4 +-
src/util/virprobe.h | 2 +-
src/util/virprocess.c | 22 ++---
src/util/virrandom.c | 2 +-
src/util/virrotatingfile.c | 4 +-
src/util/virstoragefile.c | 16 ++--
src/util/virsystemd.c | 6 +-
src/util/virtime.c | 2 +-
src/util/viruri.c | 2 +-
src/util/virutil.c | 2 +-
src/util/virutil.h | 6 +-
src/util/virxml.c | 18 ++--
src/vbox/vbox_MSCOMGlue.c | 18 ++--
src/vbox/vbox_common.c | 108 ++++++++++-----------
src/vbox/vbox_common.h | 4 +-
src/vbox/vbox_snapshot_conf.c | 12 +--
src/vbox/vbox_storage.c | 10 +-
src/vbox/vbox_tmpl.c | 26 ++---
src/vmware/vmware_conf.h | 2 +-
src/vmx/vmx.c | 6 +-
src/vz/vz_sdk.c | 20 ++--
src/vz/vz_utils.c | 2 +-
src/xenapi/xenapi_driver.c | 86 ++++++++---------
src/xenapi/xenapi_utils.c | 30 +++---
src/xenconfig/xen_common.c | 6 +-
src/xenconfig/xen_sxpr.c | 2 +-
src/xenconfig/xen_xl.c | 6 +-
tests/commandtest.c | 2 +-
tests/esxutilstest.c | 2 +-
tests/libxlxml2domconfigtest.c | 2 +-
tests/nwfilterebiptablestest.c | 2 +-
tests/qemumonitortestutils.c | 2 +-
tests/qemuxml2argvmock.c | 2 +-
tests/securityselinuxhelper.c | 2 +-
tests/testutils.c | 14 +--
tests/viralloctest.c | 4 +-
tests/vircgroupmock.c | 18 ++--
tests/virdbusmock.c | 2 +-
tests/virhashtest.c | 2 +-
tests/virhostdevtest.c | 2 +-
tests/virnetdaemontest.c | 2 +-
tests/virnetmessagetest.c | 12 +--
tests/virnetsockettest.c | 4 +-
tests/virnettlscontexttest.c | 2 +-
tests/virnettlshelpers.c | 4 +-
tests/virnettlssessiontest.c | 2 +-
tests/virpcimock.c | 2 +-
tests/virrandommock.c | 2 +-
tests/virrotatingfiletest.c | 6 +-
tests/virstringtest.c | 4 +-
tests/virtypedparamtest.c | 2 +-
tests/xml2vmxtest.c | 2 +-
tools/nss/libvirt_nss.c | 4 +-
tools/virsh-domain-monitor.c | 4 +-
tools/virsh-domain.c | 36 +++----
tools/virsh-host.c | 4 +-
tools/virsh-secret.c | 2 +-
tools/virsh-volume.c | 2 +-
tools/virt-host-validate-qemu.c | 2 +-
tools/vsh.c | 4 +-
tools/wireshark/src/packet-libvirt.c | 8 +-
165 files changed, 913 insertions(+), 898 deletions(-)
--
2.17.0
6 years, 7 months
[libvirt] Plans for next release
by Daniel Veillard
Though May 1st is usually closed for most countries, let's try to shoot
for a next release around that time. Best might be to enter freeze tomorrow
morning (my time), allowing for 2 days of reviews, then an RC2 over the
week-end and if there is nothing serious shoot for a release around Tues.
I hope this works well for everybody,
thanks,
Daniel
--
Daniel Veillard | Red Hat Developers Tools http://developer.redhat.com/
veillard(a)redhat.com | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | virtualization library http://libvirt.org/
6 years, 7 months
[libvirt] [PATCH] po: don't install gmo files when --disable-nls is given
by Daniel P. Berrangé
With --disable-nls is given we turn off use of gettext in the source
code, but mistakenly still installed the gmo files.
Reported-by: Olaf Hering <olaf(a)aepfle.de>
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
m4/virt-nls.m4 | 1 +
po/Makefile.am | 4 ++++
2 files changed, 5 insertions(+)
diff --git a/m4/virt-nls.m4 b/m4/virt-nls.m4
index f9fb27ceb5..be3c53fe4d 100644
--- a/m4/virt-nls.m4
+++ b/m4/virt-nls.m4
@@ -61,6 +61,7 @@ AC_DEFUN([LIBVIRT_CHECK_NLS],[
msgfmt_is_gnu=no
fi
AC_MSG_RESULT([$msgfmt_is_gnu])
+ AM_CONDITIONAL([ENABLE_NLS], [test "x$enable_nls" = "xyes"])
AM_CONDITIONAL([HAVE_GNU_GETTEXT_TOOLS],
[test "x$XGETTEXT" != "xno" && test "x$MSGFMT" != "xno" && \
test "x$MSGMERGE" != "xno" && test "x$msgfmt_is_gnu" != "xno"])
diff --git a/po/Makefile.am b/po/Makefile.am
index 812c6324ac..da117edbd5 100644
--- a/po/Makefile.am
+++ b/po/Makefile.am
@@ -89,6 +89,8 @@ $(srcdir)/%.gmo: $(srcdir)/%.po
endif HAVE_GNU_GETTEXT_TOOLS
+if ENABLE_NLS
+
# Cannot use 'localedir' since this conflicts with autoconf.
langinstdir = $(datadir)/locale
@@ -105,3 +107,5 @@ uninstall-hook:
d=$(DESTDIR)$(langinstdir)/$$lang/LC_MESSAGES; \
rm -f $$d/$(DOMAIN).mo; \
done
+
+endif ENABLE_NLS
--
2.14.3
6 years, 7 months
[libvirt] GSoC student introduction
by Prafullkumar Tale
Hello,
I'm Prafullkumar, a student participant from Google Summer of Code program.
I'll be working to convert OCI-formatted containers to libvirt lxc
containers[1] over the summer. I'm excited to be working with libvirt
community and hope to make valuable contribution.
I hangout on IRC with the handle *talep158.* I'm available in IST working
hours.
[1] https://wiki.libvirt.org/page/Google_Summer_of_Code_Ideas
Regards
--
Prafullkumar
6 years, 7 months
[libvirt] [PATCH] qemu: use target.port for isa-serial
by Thilo Cestonaro
A configured target.port is currently totaly ignored, while constructing
qemu commandline, for all types of serial devices. This patch adds a -device
parameter "index" for the target model isa-serial.
This enables the user to specify which serial device will end in which ttySX
device.
Updated test results which failed because of this change.
Added two tests serial-dev-without-target-port, serial-dev-with-target-port
which test generating qemu command with multiple serial devices and different
ports.
Signed-off-by: Thilo Cestonaro <thilo.cestonaro(a)ts.fujitsu.com>
---
v2: added tests which create qemu commandline with and without specified target
ports. Updated existing tests to pass again.
src/qemu/qemu_command.c | 16 ++++++++
tests/qemuxml2argvdata/bios.args | 2 +-
.../qemuxml2argvdata/console-compat-auto.args | 2 +-
.../console-compat-chardev.args | 2 +-
tests/qemuxml2argvdata/console-compat.args | 2 +-
.../qemuxml2argvdata/console-virtio-many.args | 2 +-
tests/qemuxml2argvdata/controller-order.args | 2 +-
.../q35-virt-manager-basic.args | 2 +-
.../serial-dev-chardev-iobase.args | 2 +-
.../qemuxml2argvdata/serial-dev-chardev.args | 2 +-
tests/qemuxml2argvdata/serial-dev-chardev.xml | 4 +-
.../serial-dev-with-target-port.args | 31 +++++++++++++++
.../serial-dev-with-target-port.xml | 38 +++++++++++++++++++
.../serial-dev-without-target-port.args | 31 +++++++++++++++
.../serial-dev-without-target-port.xml | 35 +++++++++++++++++
.../qemuxml2argvdata/serial-file-chardev.args | 2 +-
tests/qemuxml2argvdata/serial-file-log.args | 2 +-
.../qemuxml2argvdata/serial-many-chardev.args | 4 +-
.../qemuxml2argvdata/serial-pty-chardev.args | 2 +-
tests/qemuxml2argvdata/serial-spiceport.args | 2 +-
.../qemuxml2argvdata/serial-tcp-chardev.args | 2 +-
.../serial-tcp-telnet-chardev.args | 2 +-
.../serial-tcp-tlsx509-chardev-notls.args | 4 +-
.../serial-tcp-tlsx509-chardev-verify.args | 4 +-
.../serial-tcp-tlsx509-chardev.args | 4 +-
.../serial-tcp-tlsx509-secret-chardev.args | 4 +-
.../qemuxml2argvdata/serial-udp-chardev.args | 4 +-
.../qemuxml2argvdata/serial-unix-chardev.args | 2 +-
tests/qemuxml2argvdata/serial-vc-chardev.args | 2 +-
tests/qemuxml2argvdata/user-aliases.args | 4 +-
tests/qemuxml2argvtest.c | 8 +++-
31 files changed, 191 insertions(+), 34 deletions(-)
create mode 100644 tests/qemuxml2argvdata/serial-dev-with-target-port.args
create mode 100644 tests/qemuxml2argvdata/serial-dev-with-target-port.xml
create mode 100644 tests/qemuxml2argvdata/serial-dev-without-target-port.args
create mode 100644 tests/qemuxml2argvdata/serial-dev-without-target-port.xml
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 514c3ab2e..5f770404b 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -10291,6 +10291,22 @@ qemuBuildSerialChrDeviceStr(char **deviceStr,
virDomainChrSerialTargetModelTypeToString(serial->targetModel),
serial->info.alias, serial->info.alias);
+ switch ((virDomainChrSerialTargetModel) serial->targetModel) {
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_ISA_SERIAL:
+ if (serial->target.port != -1)
+ virBufferAsprintf(&cmd, ",index=%d", serial->target.port);
+ break;
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_NONE:
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_USB_SERIAL:
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_PCI_SERIAL:
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_SPAPR_VTY:
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_PL011:
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_SCLPCONSOLE:
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_SCLPLMCONSOLE:
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_LAST:
+ break;
+ }
+
if (qemuBuildDeviceAddressStr(&cmd, def, &serial->info, qemuCaps) < 0)
goto error;
diff --git a/tests/qemuxml2argvdata/bios.args b/tests/qemuxml2argvdata/bios.args
index 048d4ff96..81e4a8ba7 100644
--- a/tests/qemuxml2argvdata/bios.args
+++ b/tests/qemuxml2argvdata/bios.args
@@ -24,6 +24,6 @@ server,nowait \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev pty,id=charserial0 \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-device usb-tablet,id=input0,bus=usb.0,port=1 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/console-compat-auto.args b/tests/qemuxml2argvdata/console-compat-auto.args
index cab47dbb5..3b048c721 100644
--- a/tests/qemuxml2argvdata/console-compat-auto.args
+++ b/tests/qemuxml2argvdata/console-compat-auto.args
@@ -22,5 +22,5 @@ server,nowait \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev pty,id=charserial0 \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/console-compat-chardev.args b/tests/qemuxml2argvdata/console-compat-chardev.args
index ff7678ebc..61f5712bd 100644
--- a/tests/qemuxml2argvdata/console-compat-chardev.args
+++ b/tests/qemuxml2argvdata/console-compat-chardev.args
@@ -23,5 +23,5 @@ server,nowait \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev pty,id=charserial0 \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/console-compat.args b/tests/qemuxml2argvdata/console-compat.args
index fb96946f1..674c92696 100644
--- a/tests/qemuxml2argvdata/console-compat.args
+++ b/tests/qemuxml2argvdata/console-compat.args
@@ -22,4 +22,4 @@ server,nowait \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev pty,id=charserial0 \
--device isa-serial,chardev=charserial0,id=serial0
+-device isa-serial,chardev=charserial0,id=serial0,index=0
diff --git a/tests/qemuxml2argvdata/console-virtio-many.args b/tests/qemuxml2argvdata/console-virtio-many.args
index 58a8a1fa0..f050cbb25 100644
--- a/tests/qemuxml2argvdata/console-virtio-many.args
+++ b/tests/qemuxml2argvdata/console-virtio-many.args
@@ -24,7 +24,7 @@ server,nowait \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev pty,id=charserial0 \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-chardev pty,id=charconsole1 \
-device virtconsole,chardev=charconsole1,id=console1 \
-chardev pty,id=charconsole2 \
diff --git a/tests/qemuxml2argvdata/controller-order.args b/tests/qemuxml2argvdata/controller-order.args
index 70a8ba9ce..0e8c10f6d 100644
--- a/tests/qemuxml2argvdata/controller-order.args
+++ b/tests/qemuxml2argvdata/controller-order.args
@@ -33,7 +33,7 @@ id=drive-ide0-1-0,media=cdrom,readonly=on \
-chardev spicevmc,id=charsmartcard0,name=smartcard \
-device ccid-card-passthru,chardev=charsmartcard0,id=smartcard0,bus=ccid0.0 \
-chardev pty,id=charserial0 \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-chardev spicevmc,id=charchannel0,name=vdagent \
-device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,\
id=channel0,name=com.redhat.spice.0 \
diff --git a/tests/qemuxml2argvdata/q35-virt-manager-basic.args b/tests/qemuxml2argvdata/q35-virt-manager-basic.args
index c7dd514fe..83e6dde5f 100644
--- a/tests/qemuxml2argvdata/q35-virt-manager-basic.args
+++ b/tests/qemuxml2argvdata/q35-virt-manager-basic.args
@@ -38,7 +38,7 @@ id=virtio-disk0 \
-device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:9a:e6:c6,bus=pci.1,\
addr=0x0 \
-chardev pty,id=charserial0 \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-chardev socket,id=charchannel0,\
path=/tmp/channel/domain--1-virt-manager-basic/org.qemu.guest_agent.0,server,\
nowait \
diff --git a/tests/qemuxml2argvdata/serial-dev-chardev-iobase.args b/tests/qemuxml2argvdata/serial-dev-chardev-iobase.args
index 3a52b9efc..c19b05a18 100644
--- a/tests/qemuxml2argvdata/serial-dev-chardev-iobase.args
+++ b/tests/qemuxml2argvdata/serial-dev-chardev-iobase.args
@@ -23,5 +23,5 @@ server,nowait \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev tty,id=charserial0,path=/dev/ttyS2 \
--device isa-serial,chardev=charserial0,id=serial0,iobase=0x3f8,irq=0x4 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0,iobase=0x3f8,irq=0x4 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/serial-dev-chardev.args b/tests/qemuxml2argvdata/serial-dev-chardev.args
index 55b939551..f78f51ab2 100644
--- a/tests/qemuxml2argvdata/serial-dev-chardev.args
+++ b/tests/qemuxml2argvdata/serial-dev-chardev.args
@@ -23,5 +23,5 @@ server,nowait \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev tty,id=charserial0,path=/dev/ttyS2 \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=1 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/serial-dev-chardev.xml b/tests/qemuxml2argvdata/serial-dev-chardev.xml
index dffd27d06..329a0fc19 100644
--- a/tests/qemuxml2argvdata/serial-dev-chardev.xml
+++ b/tests/qemuxml2argvdata/serial-dev-chardev.xml
@@ -23,11 +23,11 @@
<controller type='ide' index='0'/>
<serial type='dev'>
<source path='/dev/ttyS2'/>
- <target port='0'/>
+ <target port='1'/>
</serial>
<console type='dev'>
<source path='/dev/ttyS2'/>
- <target port='0'/>
+ <target port='1'/>
</console>
<memballoon model='virtio'/>
</devices>
diff --git a/tests/qemuxml2argvdata/serial-dev-with-target-port.args b/tests/qemuxml2argvdata/serial-dev-with-target-port.args
new file mode 100644
index 000000000..c8626bf4f
--- /dev/null
+++ b/tests/qemuxml2argvdata/serial-dev-with-target-port.args
@@ -0,0 +1,31 @@
+LC_ALL=C \
+PATH=/bin \
+HOME=/home/test \
+USER=test \
+LOGNAME=test \
+QEMU_AUDIO_DRV=none \
+/usr/bin/qemu-system-i686 \
+-name QEMUGuest1 \
+-S \
+-M pc \
+-m 214 \
+-smp 1,sockets=1,cores=1,threads=1 \
+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+-nographic \
+-nodefconfig \
+-nodefaults \
+-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
+server,nowait \
+-mon chardev=charmonitor,id=monitor,mode=readline \
+-no-acpi \
+-boot c \
+-usb \
+-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
+-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
+-chardev tty,id=charserial0,path=/dev/ttyS2 \
+-device isa-serial,chardev=charserial0,id=serial0,index=1 \
+-chardev tty,id=charserial1,path=/dev/ttyS1 \
+-device isa-serial,chardev=charserial1,id=serial1,index=2 \
+-chardev tty,id=charserial2,path=/dev/ttyS3 \
+-device isa-serial,chardev=charserial2,id=serial2,index=3 \
+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
\ No newline at end of file
diff --git a/tests/qemuxml2argvdata/serial-dev-with-target-port.xml b/tests/qemuxml2argvdata/serial-dev-with-target-port.xml
new file mode 100644
index 000000000..593ee5162
--- /dev/null
+++ b/tests/qemuxml2argvdata/serial-dev-with-target-port.xml
@@ -0,0 +1,38 @@
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219100</memory>
+ <currentMemory unit='KiB'>219100</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu-system-i686</emulator>
+ <disk type='block' device='disk'>
+ <source dev='/dev/HostVG/QEMUGuest1'/>
+ <target dev='hda' bus='ide'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+ </disk>
+ <controller type='usb' index='0'/>
+ <controller type='ide' index='0'/>
+ <serial type='dev'>
+ <source path='/dev/ttyS2'/>
+ <target port='1'/>
+ </serial>
+ <serial type='dev'>
+ <source path='/dev/ttyS1'/>
+ <target port='2'/>
+ </serial>
+ <serial type='dev'>
+ <source path='/dev/ttyS3'/>
+ <target port='3'/>
+ </serial>
+ <memballoon model='virtio'/>
+ </devices>
+</domain>
diff --git a/tests/qemuxml2argvdata/serial-dev-without-target-port.args b/tests/qemuxml2argvdata/serial-dev-without-target-port.args
new file mode 100644
index 000000000..8e46260c7
--- /dev/null
+++ b/tests/qemuxml2argvdata/serial-dev-without-target-port.args
@@ -0,0 +1,31 @@
+LC_ALL=C \
+PATH=/bin \
+HOME=/home/test \
+USER=test \
+LOGNAME=test \
+QEMU_AUDIO_DRV=none \
+/usr/bin/qemu-system-i686 \
+-name QEMUGuest1 \
+-S \
+-M pc \
+-m 214 \
+-smp 1,sockets=1,cores=1,threads=1 \
+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+-nographic \
+-nodefconfig \
+-nodefaults \
+-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
+server,nowait \
+-mon chardev=charmonitor,id=monitor,mode=readline \
+-no-acpi \
+-boot c \
+-usb \
+-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
+-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
+-chardev tty,id=charserial0,path=/dev/ttyS2 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
+-chardev tty,id=charserial1,path=/dev/ttyS1 \
+-device isa-serial,chardev=charserial1,id=serial1,index=1 \
+-chardev tty,id=charserial2,path=/dev/ttyS3 \
+-device isa-serial,chardev=charserial2,id=serial2,index=2 \
+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
\ No newline at end of file
diff --git a/tests/qemuxml2argvdata/serial-dev-without-target-port.xml b/tests/qemuxml2argvdata/serial-dev-without-target-port.xml
new file mode 100644
index 000000000..c170a111a
--- /dev/null
+++ b/tests/qemuxml2argvdata/serial-dev-without-target-port.xml
@@ -0,0 +1,35 @@
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219100</memory>
+ <currentMemory unit='KiB'>219100</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu-system-i686</emulator>
+ <disk type='block' device='disk'>
+ <source dev='/dev/HostVG/QEMUGuest1'/>
+ <target dev='hda' bus='ide'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+ </disk>
+ <controller type='usb' index='0'/>
+ <controller type='ide' index='0'/>
+ <serial type='dev'>
+ <source path='/dev/ttyS2'/>
+ </serial>
+ <serial type='dev'>
+ <source path='/dev/ttyS1'/>
+ </serial>
+ <serial type='dev'>
+ <source path='/dev/ttyS3'/>
+ </serial>
+ <memballoon model='virtio'/>
+ </devices>
+</domain>
diff --git a/tests/qemuxml2argvdata/serial-file-chardev.args b/tests/qemuxml2argvdata/serial-file-chardev.args
index 47eb0aa9b..144ef37be 100644
--- a/tests/qemuxml2argvdata/serial-file-chardev.args
+++ b/tests/qemuxml2argvdata/serial-file-chardev.args
@@ -23,5 +23,5 @@ server,nowait \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev file,id=charserial0,path=/tmp/serial.log,append=on \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/serial-file-log.args b/tests/qemuxml2argvdata/serial-file-log.args
index 86f8e73e0..43a2d655b 100644
--- a/tests/qemuxml2argvdata/serial-file-log.args
+++ b/tests/qemuxml2argvdata/serial-file-log.args
@@ -23,4 +23,4 @@ server,nowait \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev file,id=charserial0,path=/tmp/serial.log,\
logfile=/var/lib/libvirt/qemu/demo-serial.log,logappend=off \
--device isa-serial,chardev=charserial0,id=serial0
+-device isa-serial,chardev=charserial0,id=serial0,index=0
diff --git a/tests/qemuxml2argvdata/serial-many-chardev.args b/tests/qemuxml2argvdata/serial-many-chardev.args
index eed3d418c..e07d1e9b0 100644
--- a/tests/qemuxml2argvdata/serial-many-chardev.args
+++ b/tests/qemuxml2argvdata/serial-many-chardev.args
@@ -23,7 +23,7 @@ server,nowait \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev pty,id=charserial0 \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-chardev file,id=charserial1,path=/tmp/serial.log \
--device isa-serial,chardev=charserial1,id=serial1 \
+-device isa-serial,chardev=charserial1,id=serial1,index=1 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/serial-pty-chardev.args b/tests/qemuxml2argvdata/serial-pty-chardev.args
index ff7678ebc..61f5712bd 100644
--- a/tests/qemuxml2argvdata/serial-pty-chardev.args
+++ b/tests/qemuxml2argvdata/serial-pty-chardev.args
@@ -23,5 +23,5 @@ server,nowait \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev pty,id=charserial0 \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/serial-spiceport.args b/tests/qemuxml2argvdata/serial-spiceport.args
index a3981499a..9bfa0450c 100644
--- a/tests/qemuxml2argvdata/serial-spiceport.args
+++ b/tests/qemuxml2argvdata/serial-spiceport.args
@@ -22,7 +22,7 @@ server,nowait \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev spiceport,id=charserial0,name=org.qemu.console.serial.0 \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-device usb-tablet,id=input0,bus=usb.0,port=1 \
-spice port=5903,tls-port=5904,addr=127.0.0.1,x509-dir=/etc/pki/libvirt-spice \
-device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,bus=pci.0,\
diff --git a/tests/qemuxml2argvdata/serial-tcp-chardev.args b/tests/qemuxml2argvdata/serial-tcp-chardev.args
index 4c427e22c..79476c772 100644
--- a/tests/qemuxml2argvdata/serial-tcp-chardev.args
+++ b/tests/qemuxml2argvdata/serial-tcp-chardev.args
@@ -23,5 +23,5 @@ server,nowait \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev socket,id=charserial0,host=127.0.0.1,port=9999 \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/serial-tcp-telnet-chardev.args b/tests/qemuxml2argvdata/serial-tcp-telnet-chardev.args
index 3ed08e95f..a0a4877a2 100644
--- a/tests/qemuxml2argvdata/serial-tcp-telnet-chardev.args
+++ b/tests/qemuxml2argvdata/serial-tcp-telnet-chardev.args
@@ -23,5 +23,5 @@ server,nowait \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev socket,id=charserial0,host=127.0.0.1,port=9999,telnet,server,nowait \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/serial-tcp-tlsx509-chardev-notls.args b/tests/qemuxml2argvdata/serial-tcp-tlsx509-chardev-notls.args
index bd0feb319..1b92bf4a9 100644
--- a/tests/qemuxml2argvdata/serial-tcp-tlsx509-chardev-notls.args
+++ b/tests/qemuxml2argvdata/serial-tcp-tlsx509-chardev-notls.args
@@ -24,7 +24,7 @@ server,nowait \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev udp,id=charserial0,host=127.0.0.1,port=2222,localaddr=127.0.0.1,\
localport=1111 \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-chardev socket,id=charserial1,host=127.0.0.1,port=5555 \
--device isa-serial,chardev=charserial1,id=serial1 \
+-device isa-serial,chardev=charserial1,id=serial1,index=0 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/serial-tcp-tlsx509-chardev-verify.args b/tests/qemuxml2argvdata/serial-tcp-tlsx509-chardev-verify.args
index ab5f7e27f..0b6363698 100644
--- a/tests/qemuxml2argvdata/serial-tcp-tlsx509-chardev-verify.args
+++ b/tests/qemuxml2argvdata/serial-tcp-tlsx509-chardev-verify.args
@@ -24,10 +24,10 @@ server,nowait \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev udp,id=charserial0,host=127.0.0.1,port=2222,localaddr=127.0.0.1,\
localport=1111 \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-object tls-creds-x509,id=objcharserial1_tls0,dir=/etc/pki/libvirt-chardev,\
endpoint=client,verify-peer=yes \
-chardev socket,id=charserial1,host=127.0.0.1,port=5555,\
tls-creds=objcharserial1_tls0 \
--device isa-serial,chardev=charserial1,id=serial1 \
+-device isa-serial,chardev=charserial1,id=serial1,index=0 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/serial-tcp-tlsx509-chardev.args b/tests/qemuxml2argvdata/serial-tcp-tlsx509-chardev.args
index ab5f7e27f..0b6363698 100644
--- a/tests/qemuxml2argvdata/serial-tcp-tlsx509-chardev.args
+++ b/tests/qemuxml2argvdata/serial-tcp-tlsx509-chardev.args
@@ -24,10 +24,10 @@ server,nowait \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev udp,id=charserial0,host=127.0.0.1,port=2222,localaddr=127.0.0.1,\
localport=1111 \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-object tls-creds-x509,id=objcharserial1_tls0,dir=/etc/pki/libvirt-chardev,\
endpoint=client,verify-peer=yes \
-chardev socket,id=charserial1,host=127.0.0.1,port=5555,\
tls-creds=objcharserial1_tls0 \
--device isa-serial,chardev=charserial1,id=serial1 \
+-device isa-serial,chardev=charserial1,id=serial1,index=0 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/serial-tcp-tlsx509-secret-chardev.args b/tests/qemuxml2argvdata/serial-tcp-tlsx509-secret-chardev.args
index 2567abbfa..58b7eca83 100644
--- a/tests/qemuxml2argvdata/serial-tcp-tlsx509-secret-chardev.args
+++ b/tests/qemuxml2argvdata/serial-tcp-tlsx509-secret-chardev.args
@@ -26,7 +26,7 @@ server,nowait \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev udp,id=charserial0,host=127.0.0.1,port=2222,localaddr=127.0.0.1,\
localport=1111 \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-object secret,id=charserial1-secret0,\
data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
@@ -34,5 +34,5 @@ keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
endpoint=client,verify-peer=yes,passwordid=charserial1-secret0 \
-chardev socket,id=charserial1,host=127.0.0.1,port=5555,\
tls-creds=objcharserial1_tls0 \
--device isa-serial,chardev=charserial1,id=serial1 \
+-device isa-serial,chardev=charserial1,id=serial1,index=0 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/serial-udp-chardev.args b/tests/qemuxml2argvdata/serial-udp-chardev.args
index c9db110e0..a671c5ed4 100644
--- a/tests/qemuxml2argvdata/serial-udp-chardev.args
+++ b/tests/qemuxml2argvdata/serial-udp-chardev.args
@@ -24,7 +24,7 @@ server,nowait \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev udp,id=charserial0,host=127.0.0.1,port=9998,localaddr=127.0.0.1,\
localport=9999 \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-chardev udp,id=charserial1,host=,port=9999,localaddr=,localport=0 \
--device isa-serial,chardev=charserial1,id=serial1 \
+-device isa-serial,chardev=charserial1,id=serial1,index=1 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/serial-unix-chardev.args b/tests/qemuxml2argvdata/serial-unix-chardev.args
index df75e15fe..6b09e27ec 100644
--- a/tests/qemuxml2argvdata/serial-unix-chardev.args
+++ b/tests/qemuxml2argvdata/serial-unix-chardev.args
@@ -23,5 +23,5 @@ server,nowait \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev socket,id=charserial0,path=/tmp/serial.sock \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/serial-vc-chardev.args b/tests/qemuxml2argvdata/serial-vc-chardev.args
index 3438c8447..af4cac559 100644
--- a/tests/qemuxml2argvdata/serial-vc-chardev.args
+++ b/tests/qemuxml2argvdata/serial-vc-chardev.args
@@ -23,5 +23,5 @@ server,nowait \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
-chardev vc,id=charserial0 \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/user-aliases.args b/tests/qemuxml2argvdata/user-aliases.args
index ad9394710..5fa328828 100644
--- a/tests/qemuxml2argvdata/user-aliases.args
+++ b/tests/qemuxml2argvdata/user-aliases.args
@@ -59,9 +59,9 @@ addr=0xa \
-net socket,connect=127.0.0.1:1234,vlan=2,name=hostua-AndAlsoClientMode \
-device ccid-card-emulated,backend=nss-emulated,id=smartcard0,bus=ua-myCCID.0 \
-chardev pty,id=charserial0 \
--device isa-serial,chardev=charserial0,id=serial0 \
+-device isa-serial,chardev=charserial0,id=serial0,index=0 \
-chardev pty,id=charserial1 \
--device isa-serial,chardev=charserial1,id=serial1 \
+-device isa-serial,chardev=charserial1,id=serial1,index=1 \
-chardev socket,id=charchannel0,\
path=/var/lib/libvirt/qemu/channel/target/gentoo.org.qemu.guest_agent.0,server,\
nowait \
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 165137e93..ca63886a6 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -1306,6 +1306,12 @@ mymain(void)
DO_TEST("serial-dev-chardev-iobase",
QEMU_CAPS_DEVICE_ISA_SERIAL,
QEMU_CAPS_NODEFCONFIG);
+ DO_TEST("serial-dev-with-target-port",
+ QEMU_CAPS_DEVICE_ISA_SERIAL,
+ QEMU_CAPS_NODEFCONFIG);
+ DO_TEST("serial-dev-without-target-port",
+ QEMU_CAPS_DEVICE_ISA_SERIAL,
+ QEMU_CAPS_NODEFCONFIG);
DO_TEST("serial-file-chardev",
QEMU_CAPS_NODEFCONFIG,
QEMU_CAPS_DEVICE_ISA_SERIAL,
@@ -1318,7 +1324,7 @@ mymain(void)
QEMU_CAPS_NODEFCONFIG);
DO_TEST("serial-udp-chardev",
QEMU_CAPS_DEVICE_ISA_SERIAL,
- QEMU_CAPS_NODEFCONFIG);
+ QEMU_CAPS_NODEFCONFIG);
DO_TEST("serial-tcp-telnet-chardev",
QEMU_CAPS_DEVICE_ISA_SERIAL,
QEMU_CAPS_NODEFCONFIG);
--
2.17.0
6 years, 7 months