On 08/16/2016 11:41 AM, Michal Privoznik wrote:
Depending on domain OS type, and interface address type we might
not want to use -netdev even though qemu has the capability. We
should use more advanced check implemented in
qemuDomainSupportsNetdev() function.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
src/qemu/qemu_hotplug.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
Seems to me part of the goal here is to follow the decision points that
qemu_command.c would make in qemuBuildInterfaceCommandLine, but that
logic isn't all that clear either.
If it helps, I'm in favor of the change - although I have a couple of
concerns (and per usual I left some thoughts along the way)...
it's a weak ACK, but let's see what you/Laine think too
John
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index d1acdd9..feb1f44 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -1108,7 +1108,7 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver,
releaseaddr = true;
- if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV)) {
+ if (qemuDomainSupportsNetdev(vm->def, priv->qemuCaps, net)) {
same check as qemuBuildNetCommandLine, so this looks right.
vlan = -1;
} else {
vlan = qemuDomainNetVLAN(net);
@@ -1134,7 +1134,7 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver,
goto cleanup;
}
- if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV)) {
+ if (qemuDomainSupportsNetdev(vm->def, priv->qemuCaps, net)) {
if (!(netstr = qemuBuildHostNetStr(net, driver,
',', -1,
FWIW: That -1 is also 'vlan' value *if* qemuDomainSupportsNetdev is used
and true. If you follow the qemu_command logic, it too would pass -1 in
the vlan to qemuBuildInterfaceCommandLine. So "theoretically" we're
still on par with qemu_command processing...
The else portion of the hotplug code doesn't seem to match the
qemu_command code's !qemuDomainSupportsNetdev and qemuBuildHostNetStr
call though (' ' vs. ','). I know - separate issue, but I figured
I'd
point it out at least.
tapfdName, tapfdSize,
@@ -1149,7 +1149,7 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver,
}
qemuDomainObjEnterMonitor(driver, vm);
- if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV)) {
+ if (qemuDomainSupportsNetdev(vm->def, priv->qemuCaps, net)) {
This particular check/usage isn't as clear to me at least with respect
to comparing to qemu_command processing of "-device" and hotplug usage
of netdev_add. As for the else condition, it's qemu_command usage of
"-net" and (text only) hotplug usage of host_net_add.
As long as those are "equals", then this check seems to pass muster
too... At least w/r/t how qemu_command does things.
if (qemuMonitorAddNetdev(priv->mon, netstr,
tapfd, tapfdName, tapfdSize,
vhostfd, vhostfdName, vhostfdSize) < 0) {
@@ -1195,7 +1195,7 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver,
} else {
qemuDomainObjEnterMonitor(driver, vm);
- if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV)) {
+ if (qemuDomainSupportsNetdev(vm->def, priv->qemuCaps, net)) {
This would seemingly be OK
if (qemuMonitorSetLink(priv->mon,
net->info.alias, VIR_DOMAIN_NET_INTERFACE_LINK_STATE_DOWN) < 0) {
ignore_value(qemuDomainObjExitMonitor(driver, vm));
virDomainAuditNet(vm, NULL, net, "attach", false);
@@ -1278,7 +1278,7 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver,
goto cleanup;
if (vlan < 0) {
- if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV)) {
+ if (qemuDomainSupportsNetdev(vm->def, priv->qemuCaps, net)) {
This would match, error code...
char *netdev_name;
if (virAsprintf(&netdev_name, "host%s", net->info.alias)
< 0)
goto cleanup;
@@ -3326,7 +3326,7 @@ qemuDomainRemoveNetDevice(virQEMUDriverPtr driver,
goto cleanup;
qemuDomainObjEnterMonitor(driver, vm);
- if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV)) {
+ if (qemuDomainSupportsNetdev(vm->def, priv->qemuCaps, net)) {
and this would be the corollary to our Attach which seems OK.
if (qemuMonitorRemoveNetdev(priv->mon, hostnet_name) <
0) {
if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto cleanup;