Re: Issues with vhostfd when calling qemu-kvm directly

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thank you Stefan! I figured it out and it now works.
I read on your blog that one can pass QEMU commands on libvirt
(http://blog.vmsplice.net/2011/04/how-to-pass-qemu-command-line-options.html).
Would it be possible to fully define a network interface through this
and there completely avoiding the libvirt commands for network
interfaces?
Thank you.


On Mon, Feb 27, 2017 at 2:04 AM, Stefan Hajnoczi <stefanha@xxxxxxxxx> wrote:
> On Fri, Feb 24, 2017 at 08:37:51AM -0800, Roberto Cardona wrote:
>> I'm trying to start a virtual machine by calling qemu-kvm directly but
>> I am having issues with the vhost file descriptor (vhostfd).
>>
>> According to qemu's source code you must pass the file descriptor of
>> the previously opened vhost_net device so, in order to do this, I am
>> using a python script with something like this: os.open(
>> "/dev/vhost-net", os.O_RDWR). Afterwards it passes this to qemu-kvm as
>> a subprocess.
>>
>> I took this off the command that libvirt generates so I know this work
>> and all kernel modules are enabled.
>>
>> Is there any workaround for this so that I can call qemu-kvm directly
>> without libvirt?
>>
>> Error messages:
>> qemu-kvm: -netdev tap,id=hostnet0,vhost=on,fd=3: TUNGETIFF ioctl()
>> failed: Inappropriate ioctl for device
>> qemu-kvm: -netdev tap,id=hostnet1,vhost=on,fd=4: TUNGETIFF ioctl()
>> failed: Inappropriate ioctl for device
>>
>> Network device arguments passed to qemu-kvm (fd 3 and 4 are the fds
>> that Python opened):
>> -netdev tap,id=hostnet0,vhost=on,fd=3 3<>/dev/tap5,vhostfd=3
>> -device virtio-net
>> pci,netdev=hostnet0,id=net0,mac=52:54:00:01:cb:a5,bus=pci.0,addr=0x3
>> -netdev tap,id=hostnet1,vhost=on,fd=4 4<>/dev/tap24,vhostfd=4
>> -device virtio-net
>> pci,netdev=hostnet1,id=net1,mac=52:50:00:1b:ce:6e,bus=pci.0,addr=0x4
>>
>> Version:
>> QEMU emulator version 2.6.0 (qemu-kvm-ev-2.6.0-28.el7_3.3.1)
>
> File descriptor passing is optional.  Libvirt uses it so that QEMU can
> be launched without root privileges.  It's a good idea to follow this
> practice for production environments or when dealing with untrusted
> guests.  But remember, it's optional and you can skip fd passing if you
> want.
>
> fd=X and vhostfd=Y are supposed to be different device types:
>  * fd=X is a tap-like device (either /dev/tapN or macvtap)
>  * vhostfd=Y is /dev/vhost-net
>
> Looks like your code is just opening /dev/tapN and using that fd for
> both fd=X and vhostfd=Y.  This is incorrect and causes the ioctl error.
>
> Stefan



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux