From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:32933) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SY0zv-0000xr-A6 for qemu-devel@nongnu.org; Fri, 25 May 2012 16:20:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SY0zs-0006eZ-BK for qemu-devel@nongnu.org; Fri, 25 May 2012 16:20:30 -0400 Received: from mx1.redhat.com ([209.132.183.28]:32135) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SY0zs-0006eG-2n for qemu-devel@nongnu.org; Fri, 25 May 2012 16:20:28 -0400 Date: Sat, 26 May 2012 01:50:18 +0530 From: Amit Shah Message-ID: <20120525202018.GA21590@amit.redhat.com> References: <4FBFE4F5.7010408@codemonkey.ws> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4FBFE4F5.7010408@codemonkey.ws> Subject: Re: [Qemu-devel] [PATCH v2 1/1] virtio-rng: hardware random number generator device List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: qemu list On (Fri) 25 May 2012 [15:00:53], Anthony Liguori wrote: > On 05/25/2012 02:32 PM, Amit Shah wrote: > >The Linux kernel already has a virtio-rng driver, this is the device > >implementation. > > > >When the guest asks for entropy from the virtio hwrng, it puts a buffer > >in the vq. We then put entropy into that buffer, and push it back to > >the guest. > > > >The chardev connected to this device is fed the data to be sent to the > >guest. > > > >Invocation is simple: > > > > $ qemu ... -device virtio-rng-pci,chardev=foo > > > >In the guest, we see > > > > $ cat /sys/devices/virtual/misc/hw_random/rng_available > > virtio > > > > $ cat /sys/devices/virtual/misc/hw_random/rng_current > > virtio > > > > # cat /dev/hwrng > > > >Simply feeding /dev/urandom from the host to the chardev is sufficient: > > > > $ qemu ... -chardev socket,path=/tmp/foo,server,nowait,id=foo \ > > -device virtio-rng,chardev=foo > > > > $ nc -U /tmp/foo< /dev/urandom > > > >A QMP event is sent for interested apps to monitor activity and send the > >appropriate number of bytes that get asked by the guest: > > > > {"timestamp": {"seconds": 1337966878, "microseconds": 517009}, \ > > "event": "ENTROPY_NEEDED", "data": {"bytes": 64}} > > I don't understand the point of this event. Can't a management app > just create a socket and then it can see all the requests the guest > makes? How? With the chardev, it can only keep feeding data, and that data will be consumed when chr_can_read() returns > 0. And even then the mgmt app has no idea how much data was asked for, and how much was consumed. Amit