]> xenbits.xensource.com Git - libvirt.git/log
libvirt.git
6 years agostorage: Rename btrfsCloneFile to support other filesystems.
Julio Faracco [Fri, 6 Jul 2018 13:43:01 +0000 (10:43 -0300)]
storage: Rename btrfsCloneFile to support other filesystems.

This commit renames and adds other macros to support aother filesystems
when a reflink is performed. After that, XFS filesystems (and others)
with reflink support will be able to clone.

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

Signed-off-by: Julio Faracco <jcfaracco@gmail.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
6 years agoconfigure: Adding XFS library/headers check.
Julio Faracco [Fri, 6 Jul 2018 13:43:00 +0000 (10:43 -0300)]
configure: Adding XFS library/headers check.

This commit checks for xfs.h library to use XFS_IOC_CLONE which is
defined into that library file. So, after that it is possible to use
thie macro to create reflinks.

Signed-off-by: Julio Faracco <jcfaracco@gmail.com>
6 years agoqemu: fix UNIX socket chardevs operating in client mode
Daniel P. Berrangé [Fri, 6 Jul 2018 10:00:11 +0000 (11:00 +0100)]
qemu: fix UNIX socket chardevs operating in client mode

When support was adding for passing a pre-opened listener socket to UNIX
chardevs, it accidentally passed the listener socket for client mode
chardevs too with predictable amounts of fail resulting. This affects
libvirt when using QEMU >= 2.12

Expand the unit test coverage to validate that we are only doing FD
passing when operating in server mode.

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

Tested-by: Richard W.M. Jones <rjones@redhat.com>
Reported-by: Richard W.M. Jones <rjones@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agoqemu: don't use chardev FD passing for vhostuser backend
Daniel P. Berrangé [Wed, 4 Jul 2018 13:28:14 +0000 (14:28 +0100)]
qemu: don't use chardev FD passing for vhostuser backend

QEMU chardevs have a bug which makes the vhostuser backend complain
about lack of support for FD passing when validating the chardev.
While this is ultimately QEMU's responsibility to fix, libvirt needs to
avoid tickling the bug.

Simply disabling chardev FD passing just for vhostuser's chardev is
the most prudent approach, avoiding need for a QEMU version number
check.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agoqemu: consolidate parameters of qemuBuildChrChardevStr into flags
Daniel P. Berrangé [Wed, 4 Jul 2018 13:20:40 +0000 (14:20 +0100)]
qemu: consolidate parameters of qemuBuildChrChardevStr into flags

There are two boolean parameters passed to qemuBuildChrChardevStr,
and soon there will be a third. It will be clearer to understand
from callers' POV if we use named flags instead.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agoqemu: remove chardevStdioLogd param from vhostuser code path
Daniel P. Berrangé [Thu, 5 Jul 2018 10:59:22 +0000 (11:59 +0100)]
qemu: remove chardevStdioLogd param from vhostuser code path

The vhostuser network backend is only supported with the UNIX domain
socket chardev backend, so passing around chardevStdioLogd is not
required.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agovirDomainConfNWFilterInstantiate: initialize @xml to avoid random crash
Luyao Huang [Thu, 5 Jul 2018 04:34:11 +0000 (12:34 +0800)]
virDomainConfNWFilterInstantiate: initialize @xml to avoid random crash

If the code jump to the cleanup before assigning value to @xml
libvirtd may crash when it tries to free an uninitialized pointer.

backtrace:

0  0x00007ffff428d59c in free () from /lib64/libc.so.6
1  0x00007ffff721314a in virFree (ptrptr=ptrptr@entry=0x7fffc67f1b00) at util/viralloc.c:582
2  0x00007ffff7345ac4 in virDomainConfNWFilterInstantiate (vmname=<optimized out>,
   vmuuid=vmuuid@entry=0x7fffc0181ca8 "߉\237\\۔H\262\206z\340\302f\265\233z", net=<optimized out>,
   ignoreExists=ignoreExists@entry=true) at conf/domain_nwfilter.c:122
3  0x00007fffca5a77f6 in qemuProcessFiltersInstantiate (ignoreExists=true, def=0x7fffc0181ca0) at qemu/qemu_process.c:3028
4  qemuProcessReconnect (opaque=<optimized out>) at qemu/qemu_process.c:7653
5  0x00007ffff72c4895 in virThreadHelper (data=<optimized out>) at util/virthread.c:206
6  0x00007ffff45dcdd5 in start_thread () from /lib64/libpthread.so.0
7  0x00007ffff4305ead in clone () from /lib64/libc.so.6

Signed-off-by: Luyao Huang <lhuang@redhat.com>
6 years agovirsh.pod: Drop --persistent for detach-device-alias
Michal Privoznik [Thu, 5 Jul 2018 07:25:49 +0000 (09:25 +0200)]
virsh.pod: Drop --persistent for detach-device-alias

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

The detach-device-alias never supported --persistent argument.
Drop it from the man page.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
6 years agosrc: Mention DEVICE_REMOVAL_FAILED event in virDomainDetachDeviceAlias docs
Michal Privoznik [Wed, 4 Jul 2018 11:17:58 +0000 (13:17 +0200)]
src: Mention DEVICE_REMOVAL_FAILED event in virDomainDetachDeviceAlias docs

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

We are mentioning the positive outcome of the function and not
the case when live detaching a device is denied and event is
issued.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
6 years agoqemuDomainNestedJobAllowed: Allow QEMU_JOB_NONE
Michal Privoznik [Wed, 4 Jul 2018 11:03:42 +0000 (13:03 +0200)]
qemuDomainNestedJobAllowed: Allow QEMU_JOB_NONE

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

When creating a snapshot with --quiesce an async job is grabbed
and just before executing guest fs-freeze command an agent job is
grabbed. This is achieved by calling

  qemuDomainObjBeginJobInternal(job = QEMU_JOB_NONE,
                                agentJob = QEMU_AGENT_JOB_MODIFY);

Since there already is an async job set on the domain (by the
same thread) qemuDomainNestedJobAllowed(priv, job) is consulted
if @job is allowed by job mask. But this function returns false
(meaning sync @job is not allowed) which leads to a deadlock.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
6 years agoesx: Use ESX_VI_CHECK_ARG_LIST macro to avoid code duplication
Marcos Paulo de Souza [Wed, 4 Jul 2018 02:31:23 +0000 (23:31 -0300)]
esx: Use ESX_VI_CHECK_ARG_LIST macro to avoid code duplication

By using this macro we can avoid boilerplate code to check for arrays of
objects from ESX driver. This replacement was done using the coccinelle
script bellow:

@@
identifier ptr;
@@

-if (!ptr || *ptr) { ... }
+ESX_VI_CHECK_ARG_LIST(ptr);

Signed-off-by: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
6 years agoesx_util.h: Add ESX_VI_CHECK_ARG_LIST macro
Marcos Paulo de Souza [Wed, 4 Jul 2018 02:31:22 +0000 (23:31 -0300)]
esx_util.h: Add ESX_VI_CHECK_ARG_LIST macro

This macro avoids code duplication when checking for arrays of objects.

Signed-off-by: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
6 years agoutil:Fix with process number and pid file do not match
Bobo Du [Wed, 4 Jul 2018 03:55:51 +0000 (23:55 -0400)]
util:Fix with process number and pid file do not match

the libvirtd pid file is not match the os process pid number
which is smaller than before.

this would be exist if the libvirtd process coredump or the os
process was killed which the next pid number is smaller.

you can be also edit the pid file to write the longer number than
before,then restart the libvirtd service.

Signed-off-by: Bobo Du <dubo163@126.com>
6 years agoapparmor: Fix forgotten comma at EOL
Michal Privoznik [Wed, 4 Jul 2018 05:49:35 +0000 (07:49 +0200)]
apparmor: Fix forgotten comma at EOL

The commit of 1fff379ff6e778 forgot comma at the end of the line
rendering the file invalid in syntax.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
6 years agonwfilter: Remove redundant check if object exists
Pavel Hrdina [Thu, 28 Jun 2018 07:53:48 +0000 (09:53 +0200)]
nwfilter: Remove redundant check if object exists

The same check is done by virNWFilterBindingObjListAdd().  The main
issue with the current code is that if the object already exists we
would leak 'def' because 'obj' would be set and the cleanup code frees
'def' only if 'obj' is NULL.

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
6 years agodomain_addr: make virDomainUSBAddressPortFormat static
Anya Harter [Tue, 3 Jul 2018 20:19:51 +0000 (16:19 -0400)]
domain_addr: make virDomainUSBAddressPortFormat static

    never used outside domain_addr.c

Signed-off-by: Anya Harter <aharter@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
6 years agodomain_addr: make virDomainVirtioSerialAddr funcs static
Anya Harter [Tue, 3 Jul 2018 20:19:50 +0000 (16:19 -0400)]
domain_addr: make virDomainVirtioSerialAddr funcs static

SetCreate, SetAddControllers, Reserve

    last uses of these functions outside domain_addr.c removed in commit:
        40c284f0a6b53a182af7b12173bcb5dd3eb0c826

Assign

    never used outside domain_addr.c

move Assign and Reserve above their first call within domain_addr.c

Signed-off-by: Anya Harter <aharter@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
6 years agodomain_addr: make virDomainCCWAddress funcs static
Anya Harter [Tue, 3 Jul 2018 20:19:49 +0000 (16:19 -0400)]
domain_addr: make virDomainCCWAddress funcs static

Allocate, Validate, SetCreate

    last uses of these functions outside domain_addr.c removed in commit:
        7bdd06b4e103269992122603949f585fc2bfdc6

Signed-off-by: Anya Harter <aharter@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
6 years agodomain_addr: make virDomainPCIAddressBusIsEmpty static
Anya Harter [Tue, 3 Jul 2018 20:19:48 +0000 (16:19 -0400)]
domain_addr: make virDomainPCIAddressBusIsEmpty static

never used outside domain_addr.c

Signed-off-by: Anya Harter <aharter@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
6 years agoesx: De-duplicate @virtualMachine check in esxDomainLookupByName
Michal Privoznik [Tue, 3 Jul 2018 14:55:01 +0000 (16:55 +0200)]
esx: De-duplicate @virtualMachine check in esxDomainLookupByName

The function call esxVI_LookupVirtualMachineByName(occurrence =
OptionalItem) and then checks if @virtualMachine is NULL. If it
is an error is reported. The same result can be achieved by
setting occurrence to RequiredItem.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
6 years agoesx: Report error in esxVI_LookupVirtualMachineByName
Michal Privoznik [Tue, 3 Jul 2018 14:51:31 +0000 (16:51 +0200)]
esx: Report error in esxVI_LookupVirtualMachineByName

When reviewing 00d9edfe2f39f60b40 I've changed proposed patch and
made it to not report error if no domain is found. This is wrong
and the original patch was okay. Thing is, both callers pass
occurrence = OptionalItem so no error message overwriting is done
as I thought initially.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
6 years agoqemu: move qemuDomainCCWAddrSetCreateFromDomain
Anya Harter [Tue, 3 Jul 2018 15:25:28 +0000 (11:25 -0400)]
qemu: move qemuDomainCCWAddrSetCreateFromDomain

from src/qemu/qemu_domain_address.c to src/conf/domain_addr.c
and rename to virDomainCCWAddressSetCreateFromDomain

(rename to have Address in full instead of Addr to follow
the naming convention of other virDomainCCWAddress functions)

Signed-off-by: Anya Harter <aharter@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
6 years agocpu: add 'amd-ssbd' and 'amd-no-ssb' CPU features (CVE-2018-3639)
Daniel P. Berrangé [Thu, 14 Jun 2018 10:12:59 +0000 (11:12 +0100)]
cpu: add 'amd-ssbd' and 'amd-no-ssb' CPU features (CVE-2018-3639)

AMD x86 CPUs have two separate ways to mitigate the Speculative Store
Bypass hardware flaw. In current processors only non-architectural MSRs
are available, and so hypervisors must expose a virtualized MSR and CPU
flag "virt-ssbd" (CPUID Function 8000_0008, EBX[25]=1).

In future processors AMD will provide an architectural MSR, indicated by
existance of the CPUID Function 8000_0008, EBX[24]=1, to which QEMU has
given the name "amd-ssbd".

The "amd-ssbd" flag should be used in preference to "virt-ssbd", if it
is available, since it provides improved performance. For virtual
machine configuration, both should be exposed when available, to allow
for maximal guest OS compatibility as not all guests yet support both.

If future processes are not vulnerable to the flaw, this will be
indicated by the existance of CPUID Function 8000_0008, EBX[26]=1,
to which QEMU has given the name "amd-no-ssb".

See also 124441_AMD64_SpeculativeStoreBypassDisable_Whitepaper_final.pdf
from:

  https://bugzilla.kernel.org/show_bug.cgi?id=199889

Note that neither amd-ssbd or amd-no-ssb will be reported by the kernel
in /proc/cpuinfo. It knows about these CPUID bits and does the right thing,
but doesn't report their existance as distinct flags in /proc/cpuinfo.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agorpm: add new nwfilter RNGs to mingw-libvirt spec file
Daniel P. Berrangé [Tue, 3 Jul 2018 15:32:08 +0000 (16:32 +0100)]
rpm: add new nwfilter RNGs to mingw-libvirt spec file

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agoqemu: format serial and geometry on frontend disk device
Daniel P. Berrangé [Mon, 25 Jun 2018 09:24:12 +0000 (10:24 +0100)]
qemu: format serial and geometry on frontend disk device

Currently we format the serial, geometry and error policy on the -drive
backend argument.

QEMU added the ability to set serial and geometry on the frontend in
the 1.2 release deprecating use of -drive, with support being deleted
from -drive in 3.0.

We keep formatting error policy on -drive for now, because we don't
ahve support for that with -device for usb-storage just yet.

Note that some disk buses (sd) still don't support -device. Although
QEMU allowed these properties to be set on -drive for if=sd, they
have been ignored so we now report an error in this case.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agoqemu: hotplug: Don't access srcPriv when it's not allocated
Peter Krempa [Tue, 3 Jul 2018 08:45:34 +0000 (10:45 +0200)]
qemu: hotplug: Don't access srcPriv when it's not allocated

The private data of a virStorageSource which is backing an iSCSI hostdev
may be NULL if no authentication is present. The code handling the
hotplug would attempt to extract the authentication info stored in
'secinfo' without checking if it is allocated which resulted in a crash.

Here we opt the easy way to check if srcPriv is not NULL so that we
don't duplicate all the logic which selects whether the disk source has
a secret.

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

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
6 years agoqemu: Remove unused bypassSecurityDriver from qemuOpenFileAs
Michal Privoznik [Tue, 3 Jul 2018 05:52:13 +0000 (07:52 +0200)]
qemu: Remove unused bypassSecurityDriver from qemuOpenFileAs

This argument is not used anymore. The only function that is
passing non-NULL (qemuDomainSaveMemory) does not actually care
for the value (after 23087cfdb) and every other caller just
passes NULL anyway.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
6 years agoesx_driver: Use virCheckFlag macro
Marcos Paulo de Souza [Tue, 3 Jul 2018 02:21:00 +0000 (23:21 -0300)]
esx_driver: Use virCheckFlag macro

Instead of duplicating code to do the same checking. Now all functions
of virHypervisorDriver from esx driver are using this macro.

Signed-off-by: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
6 years agoesx_vi.c: Simplify error handling in MachineByName
Marcos Paulo de Souza [Tue, 3 Jul 2018 02:20:58 +0000 (23:20 -0300)]
esx_vi.c: Simplify error handling in MachineByName

The same pattern is used in lots of other places.
Also, reporting error message is not desired because all callers
check the return value and report errors on their own.

Signed-off-by: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
6 years agoqemu: don't use chardev FD passing with standalone args
Daniel P. Berrangé [Thu, 28 Jun 2018 11:49:12 +0000 (12:49 +0100)]
qemu: don't use chardev FD passing with standalone args

When using domxml-to-native, we must generate CLI args that can be used
in a standalone scenario. This means no FD passing can be used. To
achieve this we must clear the QEMU_CAPS_CHARDEV_FD_PASS capability bit.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agonews: Update for the HTM pSeries feature
Andrea Bolognani [Mon, 2 Jul 2018 08:41:21 +0000 (10:41 +0200)]
news: Update for the HTM pSeries feature

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
6 years agoqemu: Format the HTM pSeries feature
Andrea Bolognani [Mon, 2 Jul 2018 08:37:09 +0000 (10:37 +0200)]
qemu: Format the HTM pSeries feature

This makes the feature fully operational.

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

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
6 years agoconf: Parse and format the HTM pSeries feature
Andrea Bolognani [Mon, 2 Jul 2018 08:35:54 +0000 (10:35 +0200)]
conf: Parse and format the HTM pSeries feature

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
6 years agoqemu: Add capability for the HTM pSeries feature
Andrea Bolognani [Tue, 19 Jun 2018 11:51:05 +0000 (13:51 +0200)]
qemu: Add capability for the HTM pSeries feature

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
6 years agotests: qemumonitorjson: Fix name and call apropriate API
Peter Krempa [Mon, 18 Jun 2018 08:24:17 +0000 (10:24 +0200)]
tests: qemumonitorjson: Fix name and call apropriate API

Call the internal version of qemuMonitorGetAllBlockStatsInfo API and
rename the test accordingly.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
6 years agotests: qemumonitorjson: Add only required replies for blockstats test
Peter Krempa [Mon, 18 Jun 2018 08:22:18 +0000 (10:22 +0200)]
tests: qemumonitorjson: Add only required replies for blockstats test

testQemuMonitorJSONqemuMonitorJSONGetBlockStatsInfo added 4 replies but
only one was used. Additionally the comment stated that 7 replies are
going to be added.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
6 years agoqemu: domain: update only newly detected images in qemuDomainDetermineDiskChain
Peter Krempa [Wed, 20 Jun 2018 08:39:21 +0000 (10:39 +0200)]
qemu: domain: update only newly detected images in qemuDomainDetermineDiskChain

The processing code which prepares images should be executed really only
for the images which were detected. The code actually tried to update
the last user-specified layer as well. Thankfully we don't do anything
that would be a problem at this point.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
6 years agovirsh: Provide completer for detach-device-alias
Michal Privoznik [Tue, 26 Jun 2018 10:41:34 +0000 (12:41 +0200)]
virsh: Provide completer for detach-device-alias

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
6 years agoqemuDomainDeviceDefValidateNetwork: Check for range only if IP prefix set
Michal Privoznik [Fri, 29 Jun 2018 14:48:55 +0000 (16:48 +0200)]
qemuDomainDeviceDefValidateNetwork: Check for range only if IP prefix set

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

The @prefix attribute to <ip/> element for interface type user is
optional. Therefore, if left out it has value of zero in which
case we should not check whether it falls into <4, 27> range.
Otherwise we fail parsing domain XML for no good reason.

Broken by commit b62b8090b2ad4524a5bf9d40d0d1c17a9d57f5a0.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
6 years agoesx_driver: Simplify IsEncrypted and IsSecure
Marcos Paulo de Souza [Tue, 26 Jun 2018 23:39:05 +0000 (20:39 -0300)]
esx_driver: Simplify IsEncrypted and IsSecure

Signed-off-by: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
6 years agoutil: moving 'type' argument to avoid issues with mount() syscall.
Julio Faracco [Wed, 27 Jun 2018 15:06:26 +0000 (12:06 -0300)]
util: moving 'type' argument to avoid issues with mount() syscall.

This commit fixes a mount call inside virgroup.c file. The NULL value
into 'type' argument is causing a valgrind issue. See commit 794b576c
for more details. The best approach to fix it is moving NULL to "none"
filesytem.

Signed-off-by: Julio Faracco <jcfaracco@gmail.com>
6 years agolxc: moving 'type' argument to avoid issues with mount() syscall.
Julio Faracco [Wed, 27 Jun 2018 15:06:25 +0000 (12:06 -0300)]
lxc: moving 'type' argument to avoid issues with mount() syscall.

This commit fixes a lots of mount calls inside lxc_container.c file. The
NULL value into 'type' argument is causing a valgrind issue. See commit
794b576c2b for more details. The best approach to fix it is moving NULL
to "none" filesytem.

Signed-off-by: Julio Faracco <jcfaracco@gmail.com>
6 years agonetwork: properly check for taps that are connected to an OVS bridge
Laine Stump [Sun, 1 Jul 2018 23:29:03 +0000 (19:29 -0400)]
network: properly check for taps that are connected to an OVS bridge

When libvirtd is restarted, it checks that each guest tap device is
still attached to the bridge device that the configuration info says
it should be connected to. If not, the tap will be disconnected from
[wherever it is] and connected to [wherever it should be].

The previous code that did this did not account for:

1) the IFLA_MASTER attribute in a netdev's ifinfo will be set to
   "ovs-system" for any tap device connected to an OVS bridge, *not*
   to the name of the bridge it is attached to.

2) virNetDevRemovePort() only works for devices that are attached to a
   standard Linux host bridge. If a device is currently attached to an
   OVS bridge, then virNetDevOpenvswitchRemovePort() must be called
   instead.

This patch remedies those problems, and adds a couple of information
log messages to aid in debugging any future problem.

Resolves: https://bugzilla.redhat.com/1596176

Signed-off-by: Laine Stump <laine@laine.org>
ACKed-by: Michal Privoznik <mprivozn@redhat.com>
6 years agoutil: add some debug log to virNetDevGetMaster
Laine Stump [Sun, 1 Jul 2018 23:27:17 +0000 (19:27 -0400)]
util: add some debug log to virNetDevGetMaster

This makes it easier to see why libvirt has decided it must re-attach
a tap device to its bridge.

Signed-off-by: Laine Stump <laine@laine.org>
ACKed-by: Michal Privoznik <mprivozn@redhat.com>
6 years agoutil: new function virNetDevOpenvswitchInterfaceGetMaster()
Laine Stump [Sun, 1 Jul 2018 23:24:19 +0000 (19:24 -0400)]
util: new function virNetDevOpenvswitchInterfaceGetMaster()

This function retrieves the name of the OVS bridge that the given
netdev is attached to. This separate function is necessary because OVS
set the IFLA_MASTER attribute to "ovs-system" for all netdevs that are
attached to an OVS bridge, so the standard method of retrieving the
master can't be used.

Signed-off-by: Laine Stump <laine@laine.org>
ACKed-by: Michal Privoznik <mprivozn@redhat.com>
6 years agolxc: Rearrange order in lxcDomainUpdateDeviceFlags
John Ferlan [Tue, 26 Jun 2018 14:14:20 +0000 (10:14 -0400)]
lxc: Rearrange order in lxcDomainUpdateDeviceFlags

Although commit e3497f3f noted that the LIVE option doesn't
matter and removed the call to virDomainDefCompatibleDevice,
it didn't go quite far enough and change the order of the checks
and rework the code to just handle the config change causing
a failure after virDomainObjUpdateModificationImpact updates
the @flags. Since we only support config a lot of previously
conditional code is now just inlined.

Signed-off-by: John Ferlan <jferlan@redhat.com>
ACKed-by: Michal Prívozník <mprivozn@redhat.com>
6 years agolxc: Remove FORCE flag from lxcDomainUpdateDeviceFlags
John Ferlan [Thu, 28 Jun 2018 10:29:51 +0000 (06:29 -0400)]
lxc: Remove FORCE flag from lxcDomainUpdateDeviceFlags

Force would be used to force eject a cdrom live, since the code
doesn't support live update, remove the flag.

Signed-off-by: John Ferlan <jferlan@redhat.com>
ACKed-by: Michal Prívozník <mprivozn@redhat.com>
6 years agodomain_addr: delete virDomainVirtioSerialAddrRelease
Anya Harter [Fri, 29 Jun 2018 15:03:25 +0000 (11:03 -0400)]
domain_addr: delete virDomainVirtioSerialAddrRelease

the last use of this function was deleted in commit
    19a148b7c8353d5c214bed699f8fe983317baf93

Signed-off-by: Anya Harter <aharter@redhat.com>
6 years agodomain_addr: delete virDomainCCWAddressReleaseAddr
Anya Harter [Fri, 29 Jun 2018 15:03:24 +0000 (11:03 -0400)]
domain_addr: delete virDomainCCWAddressReleaseAddr

the last use of this function was deleted in commit
    1aa5e66cf3a0dd5e8ada8483f79cb745f786a131

Signed-off-by: Anya Harter <aharter@redhat.com>
6 years agoPost-release version bump to 4.6.0
John Ferlan [Mon, 2 Jul 2018 20:54:32 +0000 (16:54 -0400)]
Post-release version bump to 4.6.0

Signed-off-by: John Ferlan <jferlan@redhat.com>
6 years agoRelease of libvirt-4.5.0
Daniel Veillard [Mon, 2 Jul 2018 20:11:33 +0000 (22:11 +0200)]
Release of libvirt-4.5.0

- docs/news.xml: updated for the release

Signed-off-by: Daniel Veillard <veillard@redhat.com>
6 years agonews: Update for 4.5.0 release
Andrea Bolognani [Mon, 2 Jul 2018 14:43:54 +0000 (16:43 +0200)]
news: Update for 4.5.0 release

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
6 years agoqemu_migration: Check for active domain after talking to remote daemon
Jiri Denemark [Thu, 28 Jun 2018 09:38:52 +0000 (11:38 +0200)]
qemu_migration: Check for active domain after talking to remote daemon

Once we called qemuDomainObjEnterRemote to talk to the destination
daemon during a peer to peer migration, the vm lock is released and we
only hold an async job. If the source domain dies at this point the
monitor EOF callback is allowed to do its job and (among other things)
clear all private data irrelevant for stopped domain. Thus when we call
qemuDomainObjExitRemote, the domain may already be gone and we should
avoid touching runtime private data (such as current job info).

In other words after acquiring the lock in qemuDomainObjExitRemote, we
need to check the domain is still alive. Unless we're doing offline
migration.

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

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
6 years agoqemu_migration: Rename 'offline' variable in SrcPerformPeer2Peer
Jiri Denemark [Thu, 28 Jun 2018 12:09:47 +0000 (14:09 +0200)]
qemu_migration: Rename 'offline' variable in SrcPerformPeer2Peer

The variable is used to store the offline migration capability of the
destination daemon. Let's call it 'dstOffline' so that we can later use
'offline' to indicate whether we were asked to do offline migration.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
6 years agoqemu: Allow cachetune only for KVM domains
Michal Privoznik [Thu, 28 Jun 2018 09:37:09 +0000 (11:37 +0200)]
qemu: Allow cachetune only for KVM domains

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

In TCG mode, there are no vCPU threads and thus there's nothing
to be placed into resctrl group. Forbid such configuration.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agoqemu: Report error on unexpected job stats type
Jiri Denemark [Fri, 1 Jun 2018 08:22:30 +0000 (10:22 +0200)]
qemu: Report error on unexpected job stats type

If we ever fail to properly set jobinfo->statsType,
qemuDomainJobInfoToParams would return -1 without setting an error.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
6 years agosecurity: Add swtpm paths to the domain's AppArmor profile
Stefan Berger [Sat, 19 May 2018 03:33:46 +0000 (23:33 -0400)]
security: Add swtpm paths to the domain's AppArmor profile

This patch extends the AppArmor domain profile with file paths
the swtpm accesses for state, log, pid, and socket files.

Both, QEMU and swtpm, use this AppArmor profile.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
Cc: Christian Ehrhardt <christian.ehrhardt@canonical.com>
6 years agonwfilter: variable 'obj' must be initialized inside nwfilterBindingCreateXML().
Julio Faracco [Wed, 27 Jun 2018 02:47:53 +0000 (23:47 -0300)]
nwfilter: variable 'obj' must be initialized inside nwfilterBindingCreateXML().

The function nwfilterBindingCreateXML() is failing to compile due to a
conditional branch which leads to an undefined 'obj' variable. So 'obj'
must have an initial value to avoid compilation errors. See the problem:

  CC       nwfilter/libvirt_driver_nwfilter_impl_la-nwfilter_driver.lo
nwfilter/nwfilter_driver.c:752:9: error: variable 'obj' is used uninitialized whenever 'if' condition is true [-Werror,-Wsometimes-uninitialized]
    if (virNWFilterBindingCreateXMLEnsureACL(conn, def) < 0)
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nwfilter/nwfilter_driver.c:779:10: note: uninitialized use occurs here
    if (!obj)
         ^~~
nwfilter/nwfilter_driver.c:752:5: note: remove the 'if' if its condition is always false
    if (virNWFilterBindingCreateXMLEnsureACL(conn, def) < 0)
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nwfilter/nwfilter_driver.c:742:33: note: initialize the variable 'obj' to silence this warning
    virNWFilterBindingObjPtr obj;
                                ^
                                 = NULL

This commit initialized 'obj' with NULL to fix the error properly.

Signed-off-by: Julio Faracco <jcfaracco@gmail.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
6 years agoconf: Forbid device alias change on device-update
Michal Privoznik [Tue, 12 Jun 2018 14:05:10 +0000 (16:05 +0200)]
conf: Forbid device alias change on device-update

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

When updating a live device users might pass different alias than
the one the device has. Currently, this is silently ignored which
goes against our behaviour for other parts of the device where we
explicitly allow only certain changes and error out loudly on
anything else.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
6 years agoconf: Reintroduce action to virDomainDefCompatibleDevice
Michal Privoznik [Tue, 26 Jun 2018 08:37:27 +0000 (10:37 +0200)]
conf: Reintroduce action to virDomainDefCompatibleDevice

This was lost in c57f3fd2f8999d17e01. But now we are going to
need it again (except the DETACH action where checking for device
compatibility does not make much sense anyway).

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
6 years agoqemuDomainUpdateDeviceFlags: Parse device as live if needed
Michal Privoznik [Tue, 12 Jun 2018 14:04:30 +0000 (16:04 +0200)]
qemuDomainUpdateDeviceFlags: Parse device as live if needed

When updating device it's worth parsing live info too as users
might want to update it as well.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
6 years agospec: list new nwfilter schema files
Pavel Hrdina [Wed, 27 Jun 2018 08:42:52 +0000 (10:42 +0200)]
spec: list new nwfilter schema files

Commit <41d619e99c2015eab2d56bea874e23ba9f52f829> introduced new RNG
schema files for nwfilter but forgot to update spec file.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
6 years agosyms: Fix placement of virDomainGetBlkioParametersAssignFromDef
Cole Robinson [Tue, 26 Jun 2018 19:53:30 +0000 (15:53 -0400)]
syms: Fix placement of virDomainGetBlkioParametersAssignFromDef

It's in the domain_addr.h section, but should be in the
domain_conf.h section

Signed-off-by: Cole Robinson <crobinso@redhat.com>
6 years agoqemu: hotplug: fix mdev attach for vfio-ccw
Bjoern Walk [Tue, 26 Jun 2018 11:47:39 +0000 (13:47 +0200)]
qemu: hotplug: fix mdev attach for vfio-ccw

Mediated devices of model 'vfio-ccw' are using CCW addresses, so make
sure to call the correct address preparation code for the model.

Reviewed-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
Signed-off-by: Bjoern Walk <bwalk@linux.ibm.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
6 years agodocs: Add news article for volume encryption modifications
John Ferlan [Wed, 20 Jun 2018 22:37:15 +0000 (18:37 -0400)]
docs: Add news article for volume encryption modifications

Include both the domain and storage modifications in a "Removed
features" section as well as describing the improvement to allow
using a raw input volume to create the luks encrypted volume.

Signed-off-by: John Ferlan <jferlan@redhat.com>
ACKed-by: Michal Privoznik <mprivozn@redhat.com>
6 years agostorage: Add support for using inputvol for encryption
John Ferlan [Wed, 20 Jun 2018 19:51:47 +0000 (15:51 -0400)]
storage: Add support for using inputvol for encryption

Starting with QEMU 2.9, encryption convert processing requires
a multi-step process in order to generate an encrypted image from
some non encrypted raw image.

Processing requires to first create an encrypted image using the
sizing parameters from the input source and second to use the
--image-opts, -n, and --target-image-opts options along with inline
driver options to describe the input and output files, generating
two commands such as:

  $ qemu-img create -f luks \
      --object secret,id=demo.img_encrypt0,file=/path/to/secretFile \
      -o key-secret=demo.img_encrypt0 \
      demo.img 500K
  Formatting 'demo.img', fmt=luks size=512000 key-secret=demo.img_encrypt0
  $ qemu-img convert --image-opts -n --target-image-opts \
      --object secret,id=demo.img_encrypt0,file=/path/to/secretFile \
      driver=raw,file.filename=sparse.img \
      driver=luks,file.filename=demo.img,key-secret=demo.img_encrypt0
  $

This patch handles the convert processing by running the processing
in a do..while loop essentially reusing the existing create logic and
arguments to create the target vol from the inputvol and then converting
the inputvol using new arguments.

This then allows the following virsh command to work properly:

  virsh vol-create-from default encrypt1-luks.xml data.img --inputpool default

where encrypt1-luks.xml would provided the path and secret for
the new image, while data.img would be the source image.

Signed-off-by: John Ferlan <jferlan@redhat.com>
ACKed-by: Michal Privoznik <mprivozn@redhat.com>
6 years agostorage: Remove storageBackendGenerateSecretData
John Ferlan [Tue, 19 Jun 2018 15:56:21 +0000 (11:56 -0400)]
storage: Remove storageBackendGenerateSecretData

Since we no longer support creating qcow2 encryption format
volumes, we no longer have to possibly create some secret and
have no real need for the function, so move the remaining
functionality to build the secret path back into the caller
storageBackendCreateQemuImg.

Signed-off-by: John Ferlan <jferlan@redhat.com>
ACKed-by: Michal Privoznik <mprivozn@redhat.com>
6 years agostorage: Clean up storageBackendCreateQemuImgOpts
John Ferlan [Tue, 19 Jun 2018 23:19:23 +0000 (19:19 -0400)]
storage: Clean up storageBackendCreateQemuImgOpts

Since we only generate the @encinfo when there's a secret object
and thus we need to reference it in the options,

Signed-off-by: John Ferlan <jferlan@redhat.com>
ACKed-by: Michal Privoznik <mprivozn@redhat.com>
6 years agostorage: Clean up storageBackendCreateQemuImgCheckEncryption
John Ferlan [Wed, 20 Jun 2018 21:15:03 +0000 (17:15 -0400)]
storage: Clean up storageBackendCreateQemuImgCheckEncryption

Remove the checks for qcow encryption since both callers (create
and resize) would have already disallowed usage.

Signed-off-by: John Ferlan <jferlan@redhat.com>
ACKed-by: Michal Privoznik <mprivozn@redhat.com>
6 years agostorage: Disallow create/resize of qcow2 encrypted images
John Ferlan [Wed, 20 Jun 2018 20:21:50 +0000 (16:21 -0400)]
storage: Disallow create/resize of qcow2 encrypted images

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

Since commit c4eedd793 disallowed qcow2 encrypted images to be
used for domains, it no longer makes sense to allow a qcow2
encrypted volume to be created or resized.

Add a test that will exhibit the failure of creation as well
as the xml2xml validation of the format still being correct.

Update the documentation to note the removal of the capability
to create and use qcow/default encrypted volumes.

Signed-off-by: John Ferlan <jferlan@redhat.com>
ACKed-by: Michal Privoznik <mprivozn@redhat.com>
6 years agotests: Remove qcow2 encryption from storagevol tests
John Ferlan [Wed, 20 Jun 2018 19:52:30 +0000 (15:52 -0400)]
tests: Remove qcow2 encryption from storagevol tests

We're about to disallow creation of a qcow2 encrypted storage
volume, so let's remove the qcow encryption element from the
tests which are testing whether other format='qcow2' related
features work properly.

Signed-off-by: John Ferlan <jferlan@redhat.com>
ACKed-by: Michal Privoznik <mprivozn@redhat.com>
6 years agostorage: Rename encryption info variable for clarity
John Ferlan [Tue, 19 Jun 2018 23:15:43 +0000 (19:15 -0400)]
storage: Rename encryption info variable for clarity

Change from @enc to @encinfo leaving @enc for the vol->target.encryption
in the storageBackendCreateQemuImgSetOptions code path.

Signed-off-by: John Ferlan <jferlan@redhat.com>
ACKed-by: Michal Privoznik <mprivozn@redhat.com>
6 years agotests: Add luks creation examples to storagevolxml2argvtest
John Ferlan [Tue, 19 Jun 2018 14:59:48 +0000 (10:59 -0400)]
tests: Add luks creation examples to storagevolxml2argvtest

Add the storagevolxml2xmltest "luks" and "luks-cipher" tests
to the storagevolxml2argvtest.

Signed-off-by: John Ferlan <jferlan@redhat.com>
ACKed-by: Michal Privoznik <mprivozn@redhat.com>
6 years agostorage: Don't allow encryption secretPath to be NULL
John Ferlan [Tue, 19 Jun 2018 16:05:31 +0000 (12:05 -0400)]
storage: Don't allow encryption secretPath to be NULL

Allowing a NULL @secretPath for virStorageBackendCreateQemuImgCmdFromVol
would result in a generated command line with a dangling "file=" output.
So let's make sure the @secretPath exists before processing.

This means we should pass a dummy path from the storage test.

Signed-off-by: John Ferlan <jferlan@redhat.com>
ACKed-by: Michal Privoznik <mprivozn@redhat.com>
6 years agodomain_addr: Fix weird comment format
Cole Robinson [Tue, 26 Jun 2018 15:49:54 +0000 (11:49 -0400)]
domain_addr: Fix weird comment format

Signed-off-by: Cole Robinson <crobinso@redhat.com>
6 years agonwfilter: convert virt drivers to use public API for nwfilter bindings
Daniel P. Berrangé [Fri, 11 May 2018 17:39:27 +0000 (18:39 +0100)]
nwfilter: convert virt drivers to use public API for nwfilter bindings

Remove the callbacks that the nwfilter driver registers with the domain
object config layer. Instead make the current helper methods call into
the public API for creating/deleting nwfilter bindings.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agonwfilter: wire up new APIs for creating and deleting nwfilter bindings
Daniel P. Berrangé [Fri, 11 May 2018 15:59:51 +0000 (16:59 +0100)]
nwfilter: wire up new APIs for creating and deleting nwfilter bindings

This allows the virsh commands nwfilter-binding-create and
nwfilter-binding-delete to be used.

Note using these commands lets you delete filters that were
previously created automatically by the virt drivers, or add
filters for VM nics that were not there before. Generally it
is expected these new APIs will only be used by virt drivers.
It is the admin's responsibility to not shoot themselves in
the foot.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agonwfilter: wire up new APIs for listing and querying filter bindings
Daniel P. Berrangé [Thu, 10 May 2018 13:12:40 +0000 (14:12 +0100)]
nwfilter: wire up new APIs for listing and querying filter bindings

Wire up the ListAll, LookupByPortDev and GetXMLDesc APIs to allow the
virsh nwfilter-binding-list & nwfilter-binding-dumpxml commands to
work.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agonwfilter: remove virt driver callback layer for rebuilding filters
Daniel P. Berrangé [Fri, 27 Apr 2018 12:25:10 +0000 (13:25 +0100)]
nwfilter: remove virt driver callback layer for rebuilding filters

Now that the nwfilter driver keeps a list of bindings that it has
created, there is no need for the complex virt driver callbacks. It is
possible to simply iterate of the list of recorded filter bindings.

This means that rebuilding filters no longer has to acquire any locks on
the virDomainObj objects, as they're never touched.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agonwfilter: keep track of active filter bindings
Daniel P. Berrangé [Thu, 26 Apr 2018 17:34:33 +0000 (18:34 +0100)]
nwfilter: keep track of active filter bindings

Currently the nwfilter driver does not keep any record of what filter
bindings it has active. This means that when it needs to recreate
filters, it has to rely on triggering callbacks provided by the virt
drivers. This introduces a hash table recording the virNWFilterBinding
objects so the driver has a record of all active filters.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agovirsh: add manpage docs for nwfilter-binding commands.
Daniel P. Berrangé [Fri, 22 Jun 2018 10:53:39 +0000 (11:53 +0100)]
virsh: add manpage docs for nwfilter-binding commands.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agoqemu: Escape commas for qemuBuildSCSIiSCSIHostdevDrvStr
Anya Harter [Wed, 20 Jun 2018 13:17:00 +0000 (09:17 -0400)]
qemu: Escape commas for qemuBuildSCSIiSCSIHostdevDrvStr

Add comma escaping for netsource. This is done here because
qemuBuildNetworkDriveStr has other external callers which
may not expect an escaped comma; however, this particular
command building path needs to perform the escaping for the
hostdev command line, so we do it now to ensure src->path
and src->host->name are covered.

Signed-off-by: Anya Harter <aharter@redhat.com>
6 years agoqemu: use virBuffer in qemuBuildSCSIiSCSIHostdevDrvStr
Anya Harter [Wed, 20 Jun 2018 13:16:59 +0000 (09:16 -0400)]
qemu: use virBuffer in qemuBuildSCSIiSCSIHostdevDrvStr

Instead of source to enable use of virBuffer functions in
string construction.

Signed-off-by: Anya Harter <aharter@redhat.com>
6 years agoqemuDomainObjBeginJobInternal: Report agent job in error message
Michal Privoznik [Wed, 20 Jun 2018 12:17:45 +0000 (14:17 +0200)]
qemuDomainObjBeginJobInternal: Report agent job in error message

If a thread is unable to acquire a job (e.g. because of timeout)
an error is reported and the error message contains reference to
the other thread holding the job. Well, the error message should
report agent job too as it is yet another source of possible
failure.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
6 years agoset-lifecycle-action: add description of type and action
Chen Hanxiao [Thu, 21 Jun 2018 11:28:55 +0000 (19:28 +0800)]
set-lifecycle-action: add description of type and action

In [1], <type> are described as "on_poweroff", "on_reboot",
"on_crash". but we accept "poweroff", "reboot" and "crash".
This patch adds documentation for them.

[1]: https://libvirt.org/formatdomain.html#elementsEvents

Signed-off-by: Chen Hanxiao <chenhanxiao@gmail.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
6 years agoconf: introduce a virNWFilterBindingObjListPtr struct
Daniel P. Berrangé [Thu, 10 May 2018 14:29:46 +0000 (15:29 +0100)]
conf: introduce a virNWFilterBindingObjListPtr struct

Introduce a new struct to act as the manager of a collection of
virNWFilterBindingObjPtr objects.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agoconf: introduce a virNWFilterBindingObjPtr struct
Daniel P. Berrangé [Thu, 10 May 2018 16:21:24 +0000 (17:21 +0100)]
conf: introduce a virNWFilterBindingObjPtr struct

Introduce a new struct to act as the stateful owner of the
virNWFilterBindingDefPtr objects.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agoconf: report an error if nic needs filtering by no driver is present
Daniel P. Berrangé [Thu, 26 Apr 2018 13:05:10 +0000 (14:05 +0100)]
conf: report an error if nic needs filtering by no driver is present

If a <interface> includes a filter name but the nwfilter driver is not
present we silently do nothing. This is very bad, because an application
that thinks it is protected by malicious guest traffic will in fact be
vulnerable. Reporting an error gives the administrator the ability to
know there is a problem and fix it.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agonwfilter: convert DHCP address snooping code to virNWFilterBindingDefPtr
Daniel P. Berrangé [Thu, 26 Apr 2018 11:45:29 +0000 (12:45 +0100)]
nwfilter: convert DHCP address snooping code to virNWFilterBindingDefPtr

Use the virNWFilterBindingDefPtr struct in the DHCP address snooping code
directly.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agonwfilter: convert IP address learning code to virNWFilterBindingDefPtr
Daniel P. Berrangé [Thu, 26 Apr 2018 11:45:29 +0000 (12:45 +0100)]
nwfilter: convert IP address learning code to virNWFilterBindingDefPtr

Use the virNWFilterBindingDefPTr struct in the IP address learning code
directly.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agonwfilter: convert the gentech driver code to use virNWFilterBindingDefPtr
Daniel P. Berrangé [Thu, 26 Apr 2018 11:26:51 +0000 (12:26 +0100)]
nwfilter: convert the gentech driver code to use virNWFilterBindingDefPtr

Use the virNWFilterBindingDefPtr struct in the gentech driver code
directly.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agovirsh: add nwfilter binding commands
Daniel P. Berrangé [Wed, 9 May 2018 16:44:35 +0000 (17:44 +0100)]
virsh: add nwfilter binding commands

$ virsh nwfilter-binding-list
 Port Dev                              Filter
------------------------------------------------------------------
 vnet0                 clean-traffic
 vnet1                 clean-traffic

$ virsh nwfilter-binding-dumpxml vnet1
<filterbinding>
  <owner>
    <name>f25arm7</name>
    <uuid>12ac8b8c-4f23-4248-ae42-fdcd50c400fd</uuid>
  </owner>
  <portdev name='vnet1'/>
  <mac address='52:54:00:9d:81:b1'/>
  <filterref filter='clean-traffic'>
    <parameter name='MAC' value='52:54:00:9d:81:b1'/>
  </filterref>
</filterbinding>

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agoremote: add support for nwfilter binding objects
Daniel P. Berrangé [Wed, 9 May 2018 16:18:58 +0000 (17:18 +0100)]
remote: add support for nwfilter binding objects

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agoaccess: add nwfilter binding object permissions
Daniel P. Berrangé [Wed, 9 May 2018 16:19:55 +0000 (17:19 +0100)]
access: add nwfilter binding object permissions

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agonwfilter: export port binding concept in the public API
Daniel P. Berrangé [Wed, 9 May 2018 11:21:25 +0000 (12:21 +0100)]
nwfilter: export port binding concept in the public API

When the daemons are split there will need to be a way for the virt
drivers and/or network driver to create and delete bindings between
network ports and network filters. This defines a set of public APIs
that are suitable for managing this facility.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agoschemas: add schema for nwfilter binding XML document
Daniel P. Berrangé [Tue, 15 May 2018 17:00:16 +0000 (18:00 +0100)]
schemas: add schema for nwfilter binding XML document

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agoconf: add support for parsing/formatting virNWFilterBindingDefPtr
Daniel P. Berrangé [Thu, 10 May 2018 12:37:53 +0000 (13:37 +0100)]
conf: add support for parsing/formatting virNWFilterBindingDefPtr

A typical XML representation of the virNWFilterBindingDefPtr struct
looks like this:

  <filterbinding>
    <owner>
      <name>f25arm7</name>
      <uuid>12ac8b8c-4f23-4248-ae42-fdcd50c400fd</uuid>
    </owner>
    <portdev name='vnet1'/>
    <mac address='52:54:00:9d:81:b1'/>
    <filterref filter='clean-traffic'>
      <parameter name='MAC' value='52:54:00:9d:81:b1'/>
    </filterref>
  </filterbinding>

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agoconf: move virNWFilterBindingDefPtr into its own files
Daniel P. Berrangé [Thu, 10 May 2018 13:30:42 +0000 (14:30 +0100)]
conf: move virNWFilterBindingDefPtr into its own files

There's no code sharing between virNWFilterDef and
virNWFilterBindingDefPtr types, so it is clearer if they live in
separate source files and headers.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agoconf: add missing virxml.h include for nwfilter_params.h
Daniel P. Berrangé [Thu, 10 May 2018 13:29:58 +0000 (14:29 +0100)]
conf: add missing virxml.h include for nwfilter_params.h

The nwfilter_params.h header references the xmlNodePtr type, so must
include the virxml.h header to get the libxml2 types defined.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 years agoconf: change virNWFilterBindingPtr to virNWFilterBindingDefPtr
Daniel P. Berrangé [Tue, 8 May 2018 12:45:26 +0000 (13:45 +0100)]
conf: change virNWFilterBindingPtr to virNWFilterBindingDefPtr

We are going to want to expose the NWFilter binding concept in the
public API, so the virNWFilterBindingPtr type needs to be used there.
Our internal type will shortly gain an XML representation, so rename
it to virNWFilterBindingDefPtr which follows our normal conventions.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>