On 02.07.2014 15:20, Michele Paolino wrote:
Build the qemu-command line for vhost-user. Signed-off-by: Michele Paolino <m.paolino@xxxxxxxxxxxxxxxxxxxxxx> --- src/qemu/qemu_command.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+)
This is the patch where .args and qemuxml2argvtest.c modifications would have been done if you go with my suggestion in 1/4.
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index ab8cec5..c1cf001 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6930,6 +6930,61 @@ qemuBuildGraphicsCommandLine(virQEMUDriverConfigPtr cfg, } static int +qemuBuildVhostuserCommandLine(virCommandPtr cmd, + virDomainDefPtr def, + virDomainNetDefPtr net, + virQEMUCapsPtr qemuCaps) +{ + virBuffer chardev_buf = VIR_BUFFER_INITIALIZER; + virBuffer netdev_buf = VIR_BUFFER_INITIALIZER; + + char* nic = NULL; + + if (!qemuDomainSupportsNetdev(def, qemuCaps, net)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "%s", _("Netdev support unavailable")); + goto error; + } + + if ((net->data.vhostuser)->type == VIR_DOMAIN_CHR_TYPE_UNIX) { + virBufferAsprintf(&chardev_buf, "socket,id=char%s,path=%s%s", + net->info.alias, (net->data.vhostuser)->data.nix.path, + (net->data.vhostuser)->data.nix.listen ? ",server" : ""); + } + + virBufferAsprintf(&netdev_buf, "type=vhost-user,id=host%s,chardev=char%s", + net->info.alias, net->info.alias); + + if (virBufferError(&chardev_buf) || virBufferError(&netdev_buf)) { + virReportOOMError(); + goto error; + } + + virCommandAddArgList(cmd, "-chardev", virBufferContentAndReset(&chardev_buf), + NULL); + virCommandAddArgList(cmd, "-netdev", virBufferContentAndReset(&netdev_buf), + NULL);
For some reason we tend to store the return value of virBufferContentAndReset() into a local variable which is then passed to virCommandAddArgList(). Maybe for better debugging options.
+ + if (!(nic = qemuBuildNicDevStr(def, net, -1, 0, 0, qemuCaps))) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "%s", _("Error generating NIC -device string")); + goto error; + } + + virCommandAddArgList(cmd, "-device", nic, NULL); + VIR_FREE(nic); + + return 0; + + error: + virBufferFreeAndReset(&chardev_buf); + virBufferFreeAndReset(&netdev_buf); + VIR_FREE(nic); + + return -1; +} + +static int qemuBuildInterfaceCommandLine(virCommandPtr cmd, virQEMUDriverPtr driver, virConnectPtr conn, @@ -6952,6 +7007,9 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd, int actualType = virDomainNetGetActualType(net); size_t i; + if (actualType == VIR_DOMAIN_NET_TYPE_VHOSTUSER) + return qemuBuildVhostuserCommandLine(cmd, def, net, qemuCaps); + if (actualType == VIR_DOMAIN_NET_TYPE_HOSTDEV) { /* NET_TYPE_HOSTDEV devices are really hostdev devices, so * their commandlines are constructed with other hostdevs.
Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list