mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-25 18:55:27 -06:00
virtinst: add support for virtio-rng devices
The virtio-rng device is supported by libvirt since version 1.0.3. Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
parent
3861069f99
commit
8abcae5073
@ -298,6 +298,13 @@
|
|||||||
</backend>
|
</backend>
|
||||||
</tpm>
|
</tpm>
|
||||||
|
|
||||||
|
<!-- rng devices -->
|
||||||
|
<rng model='virtio'>
|
||||||
|
<rate period='2000' bytes='1234'/>
|
||||||
|
<backend model='egd' type='tcp'>
|
||||||
|
<source mode='connect' host='1.2.3.4' service='1234'/>
|
||||||
|
</backend>
|
||||||
|
</rng>
|
||||||
</devices>
|
</devices>
|
||||||
</domain>
|
</domain>
|
||||||
|
|
||||||
|
64
tests/xmlparse-xml/change-rng-egd-in.xml
Normal file
64
tests/xmlparse-xml/change-rng-egd-in.xml
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<domain type='kvm'>
|
||||||
|
<name>TestGuest</name>
|
||||||
|
<currentMemory>204800</currentMemory>
|
||||||
|
<memory>409600</memory>
|
||||||
|
<uuid>12345678-1234-1234-1234-123456789012</uuid>
|
||||||
|
<os>
|
||||||
|
<type arch='i686' machine='foobar'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<features>
|
||||||
|
<acpi/><apic/>
|
||||||
|
</features>
|
||||||
|
<cpu match='exact'>
|
||||||
|
<model>footest</model>
|
||||||
|
<vendor>Intel</vendor>
|
||||||
|
<topology sockets='4' cores='5' threads='2'/>
|
||||||
|
<feature policy='force' name='x2apic'/>
|
||||||
|
<feature policy='forbid' name='lahf_lm'/>
|
||||||
|
</cpu>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>restart</on_crash>
|
||||||
|
<vcpu cpuset='1-3'>5</vcpu>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/lib/xen/bin/qemu-dm</emulator>
|
||||||
|
<disk type='file' device='floppy'>
|
||||||
|
<driver name='qemu' type='qcow2'/>
|
||||||
|
<source file='/dev/default-pool/testvol1.img'/>
|
||||||
|
<target dev='fda' bus='fdc'/>
|
||||||
|
</disk>
|
||||||
|
<disk type='file' device='disk'>
|
||||||
|
<driver name='qemu' type='raw'/>
|
||||||
|
<source file='/tmp/test.img'/>
|
||||||
|
<target dev='vda' bus='virtio'/>
|
||||||
|
</disk>
|
||||||
|
<disk type='block' device='disk'>
|
||||||
|
<driver name='qemu'/>
|
||||||
|
<source dev='/dev/loop0'/>
|
||||||
|
<target dev='vdb' bus='virtio'/>
|
||||||
|
</disk>
|
||||||
|
<disk type='block' device='cdrom'>
|
||||||
|
<target dev='hdc' bus='ide'/>
|
||||||
|
<readonly/>
|
||||||
|
</disk>
|
||||||
|
<interface type='network'>
|
||||||
|
<source network='default'/>
|
||||||
|
<mac address='22:22:33:44:55:66'/>
|
||||||
|
<model type='virtio'/>
|
||||||
|
</interface>
|
||||||
|
<graphics type='sdl' display=':3.4' xauth='/tmp/.Xauthority'/>
|
||||||
|
<console type='pty'/>
|
||||||
|
<rng model='virtio'>
|
||||||
|
<rate period='2000' bytes='1234'/>
|
||||||
|
<backend model='egd' type='udp'>
|
||||||
|
<source mode='connect' host='1.2.3.4' service='1234'/>
|
||||||
|
</backend>
|
||||||
|
</rng>
|
||||||
|
</devices>
|
||||||
|
<seclabel type='static' model='selinux'>
|
||||||
|
<label>foolabel</label>
|
||||||
|
<imagelabel>imagelabel</imagelabel>
|
||||||
|
</seclabel>
|
||||||
|
</domain>
|
64
tests/xmlparse-xml/change-rng-egd-out.xml
Normal file
64
tests/xmlparse-xml/change-rng-egd-out.xml
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<domain type="kvm">
|
||||||
|
<name>TestGuest</name>
|
||||||
|
<currentMemory>204800</currentMemory>
|
||||||
|
<memory>409600</memory>
|
||||||
|
<uuid>12345678-1234-1234-1234-123456789012</uuid>
|
||||||
|
<os>
|
||||||
|
<type arch="i686" machine="foobar">hvm</type>
|
||||||
|
<boot dev="hd"/>
|
||||||
|
</os>
|
||||||
|
<features>
|
||||||
|
<acpi/><apic/>
|
||||||
|
</features>
|
||||||
|
<cpu match="exact">
|
||||||
|
<model>footest</model>
|
||||||
|
<vendor>Intel</vendor>
|
||||||
|
<topology sockets="4" cores="5" threads="2"/>
|
||||||
|
<feature policy="force" name="x2apic"/>
|
||||||
|
<feature policy="forbid" name="lahf_lm"/>
|
||||||
|
</cpu>
|
||||||
|
<clock offset="utc"/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>restart</on_crash>
|
||||||
|
<vcpu cpuset="1-3">5</vcpu>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/lib/xen/bin/qemu-dm</emulator>
|
||||||
|
<disk type="file" device="floppy">
|
||||||
|
<driver name="qemu" type="qcow2"/>
|
||||||
|
<source file="/dev/default-pool/testvol1.img"/>
|
||||||
|
<target dev="fda" bus="fdc"/>
|
||||||
|
</disk>
|
||||||
|
<disk type="file" device="disk">
|
||||||
|
<driver name="qemu" type="raw"/>
|
||||||
|
<source file="/tmp/test.img"/>
|
||||||
|
<target dev="vda" bus="virtio"/>
|
||||||
|
</disk>
|
||||||
|
<disk type="block" device="disk">
|
||||||
|
<driver name="qemu"/>
|
||||||
|
<source dev="/dev/loop0"/>
|
||||||
|
<target dev="vdb" bus="virtio"/>
|
||||||
|
</disk>
|
||||||
|
<disk type="block" device="cdrom">
|
||||||
|
<target dev="hdc" bus="ide"/>
|
||||||
|
<readonly/>
|
||||||
|
</disk>
|
||||||
|
<interface type="network">
|
||||||
|
<source network="default"/>
|
||||||
|
<mac address="22:22:33:44:55:66"/>
|
||||||
|
<model type="virtio"/>
|
||||||
|
</interface>
|
||||||
|
<graphics type="sdl" display=":3.4" xauth="/tmp/.Xauthority"/>
|
||||||
|
<console type="pty"/>
|
||||||
|
<rng model="virtio">
|
||||||
|
<rate period="2001" bytes="4321"/>
|
||||||
|
<backend model="egd" type="tcp">
|
||||||
|
<source mode="bind" host="1.2.3.5" service="1235"/>
|
||||||
|
</backend>
|
||||||
|
</rng>
|
||||||
|
</devices>
|
||||||
|
<seclabel type="static" model="selinux">
|
||||||
|
<label>foolabel</label>
|
||||||
|
<imagelabel>imagelabel</imagelabel>
|
||||||
|
</seclabel>
|
||||||
|
</domain>
|
61
tests/xmlparse-xml/change-rng-random-in.xml
Normal file
61
tests/xmlparse-xml/change-rng-random-in.xml
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
<domain type='kvm'>
|
||||||
|
<name>TestGuest</name>
|
||||||
|
<currentMemory>204800</currentMemory>
|
||||||
|
<memory>409600</memory>
|
||||||
|
<uuid>12345678-1234-1234-1234-123456789012</uuid>
|
||||||
|
<os>
|
||||||
|
<type arch='i686' machine='foobar'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<features>
|
||||||
|
<acpi/><apic/>
|
||||||
|
</features>
|
||||||
|
<cpu match='exact'>
|
||||||
|
<model>footest</model>
|
||||||
|
<vendor>Intel</vendor>
|
||||||
|
<topology sockets='4' cores='5' threads='2'/>
|
||||||
|
<feature policy='force' name='x2apic'/>
|
||||||
|
<feature policy='forbid' name='lahf_lm'/>
|
||||||
|
</cpu>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>restart</on_crash>
|
||||||
|
<vcpu cpuset='1-3'>5</vcpu>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/lib/xen/bin/qemu-dm</emulator>
|
||||||
|
<disk type='file' device='floppy'>
|
||||||
|
<driver name='qemu' type='qcow2'/>
|
||||||
|
<source file='/dev/default-pool/testvol1.img'/>
|
||||||
|
<target dev='fda' bus='fdc'/>
|
||||||
|
</disk>
|
||||||
|
<disk type='file' device='disk'>
|
||||||
|
<driver name='qemu' type='raw'/>
|
||||||
|
<source file='/tmp/test.img'/>
|
||||||
|
<target dev='vda' bus='virtio'/>
|
||||||
|
</disk>
|
||||||
|
<disk type='block' device='disk'>
|
||||||
|
<driver name='qemu'/>
|
||||||
|
<source dev='/dev/loop0'/>
|
||||||
|
<target dev='vdb' bus='virtio'/>
|
||||||
|
</disk>
|
||||||
|
<disk type='block' device='cdrom'>
|
||||||
|
<target dev='hdc' bus='ide'/>
|
||||||
|
<readonly/>
|
||||||
|
</disk>
|
||||||
|
<interface type='network'>
|
||||||
|
<source network='default'/>
|
||||||
|
<mac address='22:22:33:44:55:66'/>
|
||||||
|
<model type='virtio'/>
|
||||||
|
</interface>
|
||||||
|
<graphics type='sdl' display=':3.4' xauth='/tmp/.Xauthority'/>
|
||||||
|
<console type='pty'/>
|
||||||
|
<rng model='virtio'>
|
||||||
|
<backend model='random'>/dev/random</backend>
|
||||||
|
</rng>
|
||||||
|
</devices>
|
||||||
|
<seclabel type='static' model='selinux'>
|
||||||
|
<label>foolabel</label>
|
||||||
|
<imagelabel>imagelabel</imagelabel>
|
||||||
|
</seclabel>
|
||||||
|
</domain>
|
61
tests/xmlparse-xml/change-rng-random-out.xml
Normal file
61
tests/xmlparse-xml/change-rng-random-out.xml
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
<domain type="kvm">
|
||||||
|
<name>TestGuest</name>
|
||||||
|
<currentMemory>204800</currentMemory>
|
||||||
|
<memory>409600</memory>
|
||||||
|
<uuid>12345678-1234-1234-1234-123456789012</uuid>
|
||||||
|
<os>
|
||||||
|
<type arch="i686" machine="foobar">hvm</type>
|
||||||
|
<boot dev="hd"/>
|
||||||
|
</os>
|
||||||
|
<features>
|
||||||
|
<acpi/><apic/>
|
||||||
|
</features>
|
||||||
|
<cpu match="exact">
|
||||||
|
<model>footest</model>
|
||||||
|
<vendor>Intel</vendor>
|
||||||
|
<topology sockets="4" cores="5" threads="2"/>
|
||||||
|
<feature policy="force" name="x2apic"/>
|
||||||
|
<feature policy="forbid" name="lahf_lm"/>
|
||||||
|
</cpu>
|
||||||
|
<clock offset="utc"/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>restart</on_crash>
|
||||||
|
<vcpu cpuset="1-3">5</vcpu>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/lib/xen/bin/qemu-dm</emulator>
|
||||||
|
<disk type="file" device="floppy">
|
||||||
|
<driver name="qemu" type="qcow2"/>
|
||||||
|
<source file="/dev/default-pool/testvol1.img"/>
|
||||||
|
<target dev="fda" bus="fdc"/>
|
||||||
|
</disk>
|
||||||
|
<disk type="file" device="disk">
|
||||||
|
<driver name="qemu" type="raw"/>
|
||||||
|
<source file="/tmp/test.img"/>
|
||||||
|
<target dev="vda" bus="virtio"/>
|
||||||
|
</disk>
|
||||||
|
<disk type="block" device="disk">
|
||||||
|
<driver name="qemu"/>
|
||||||
|
<source dev="/dev/loop0"/>
|
||||||
|
<target dev="vdb" bus="virtio"/>
|
||||||
|
</disk>
|
||||||
|
<disk type="block" device="cdrom">
|
||||||
|
<target dev="hdc" bus="ide"/>
|
||||||
|
<readonly/>
|
||||||
|
</disk>
|
||||||
|
<interface type="network">
|
||||||
|
<source network="default"/>
|
||||||
|
<mac address="22:22:33:44:55:66"/>
|
||||||
|
<model type="virtio"/>
|
||||||
|
</interface>
|
||||||
|
<graphics type="sdl" display=":3.4" xauth="/tmp/.Xauthority"/>
|
||||||
|
<console type="pty"/>
|
||||||
|
<rng model="virtio">
|
||||||
|
<backend model="random">/dev/hwrng</backend>
|
||||||
|
</rng>
|
||||||
|
</devices>
|
||||||
|
<seclabel type="static" model="selinux">
|
||||||
|
<label>foolabel</label>
|
||||||
|
<imagelabel>imagelabel</imagelabel>
|
||||||
|
</seclabel>
|
||||||
|
</domain>
|
@ -733,6 +733,36 @@ class XMLParseTest(unittest.TestCase):
|
|||||||
|
|
||||||
self._alter_compare(guest.get_xml_config(), outfile)
|
self._alter_compare(guest.get_xml_config(), outfile)
|
||||||
|
|
||||||
|
def testAlterRNG_EGD(self):
|
||||||
|
guest, outfile = self._get_test_content("change-rng-egd")
|
||||||
|
|
||||||
|
dev1 = guest.get_devices("rng")[0]
|
||||||
|
|
||||||
|
check = self._make_checker(dev1)
|
||||||
|
check("type", "egd")
|
||||||
|
check("backend_type", "udp", "tcp")
|
||||||
|
|
||||||
|
check("backend_source_host", "1.2.3.4", "1.2.3.5")
|
||||||
|
check("backend_source_service", "1234", "1235")
|
||||||
|
check("backend_source_mode", "connect", "bind")
|
||||||
|
|
||||||
|
check("rate_bytes", "1234", "4321")
|
||||||
|
check("rate_period", "2000", "2001")
|
||||||
|
|
||||||
|
self._alter_compare(guest.get_xml_config(), outfile)
|
||||||
|
|
||||||
|
def testAlterRNG_Random(self):
|
||||||
|
guest, outfile = self._get_test_content("change-rng-random")
|
||||||
|
|
||||||
|
dev1 = guest.get_devices("rng")[0]
|
||||||
|
|
||||||
|
check = self._make_checker(dev1)
|
||||||
|
check("type", "random", "random")
|
||||||
|
check("model", "virtio", "virtio")
|
||||||
|
check("device", "/dev/random", "/dev/hwrng")
|
||||||
|
|
||||||
|
self._alter_compare(guest.get_xml_config(), outfile)
|
||||||
|
|
||||||
def testConsoleCompat(self):
|
def testConsoleCompat(self):
|
||||||
guest, outfile = self._get_test_content("console-compat")
|
guest, outfile = self._get_test_content("console-compat")
|
||||||
|
|
||||||
|
@ -53,6 +53,7 @@ from virtinst.devicesmartcard import VirtualSmartCardDevice
|
|||||||
from virtinst.deviceredirdev import VirtualRedirDevice
|
from virtinst.deviceredirdev import VirtualRedirDevice
|
||||||
from virtinst.devicememballoon import VirtualMemballoon
|
from virtinst.devicememballoon import VirtualMemballoon
|
||||||
from virtinst.devicetpm import VirtualTPMDevice
|
from virtinst.devicetpm import VirtualTPMDevice
|
||||||
|
from virtinst.devicerng import VirtualRNGDevice
|
||||||
|
|
||||||
from virtinst.installer import (ContainerInstaller, ImportInstaller,
|
from virtinst.installer import (ContainerInstaller, ImportInstaller,
|
||||||
LiveCDInstaller, PXEInstaller, Installer)
|
LiveCDInstaller, PXEInstaller, Installer)
|
||||||
|
@ -103,6 +103,7 @@ class VirtualDevice(XMLBuilder):
|
|||||||
VIRTUAL_DEV_REDIRDEV = "redirdev"
|
VIRTUAL_DEV_REDIRDEV = "redirdev"
|
||||||
VIRTUAL_DEV_MEMBALLOON = "memballoon"
|
VIRTUAL_DEV_MEMBALLOON = "memballoon"
|
||||||
VIRTUAL_DEV_TPM = "tpm"
|
VIRTUAL_DEV_TPM = "tpm"
|
||||||
|
VIRTUAL_DEV_RNG = "rng"
|
||||||
|
|
||||||
# Ordering in this list is important: it will be the order the
|
# Ordering in this list is important: it will be the order the
|
||||||
# Guest class outputs XML. So changing this may upset the test suite
|
# Guest class outputs XML. So changing this may upset the test suite
|
||||||
@ -123,7 +124,8 @@ class VirtualDevice(XMLBuilder):
|
|||||||
VIRTUAL_DEV_SMARTCARD,
|
VIRTUAL_DEV_SMARTCARD,
|
||||||
VIRTUAL_DEV_REDIRDEV,
|
VIRTUAL_DEV_REDIRDEV,
|
||||||
VIRTUAL_DEV_MEMBALLOON,
|
VIRTUAL_DEV_MEMBALLOON,
|
||||||
VIRTUAL_DEV_TPM]
|
VIRTUAL_DEV_TPM,
|
||||||
|
VIRTUAL_DEV_RNG]
|
||||||
|
|
||||||
virtual_device_classes = {}
|
virtual_device_classes = {}
|
||||||
|
|
||||||
|
94
virtinst/devicerng.py
Normal file
94
virtinst/devicerng.py
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
# coding=utf-8
|
||||||
|
#
|
||||||
|
# Copyright 2013 Red Hat, Inc.
|
||||||
|
# Giuseppe Scrivano <gscrivan@redhat.com>
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
# MA 02110-1301 USA.
|
||||||
|
|
||||||
|
from virtinst import VirtualDevice
|
||||||
|
from virtinst.xmlbuilder import XMLProperty
|
||||||
|
|
||||||
|
|
||||||
|
class VirtualRNGDevice(VirtualDevice):
|
||||||
|
|
||||||
|
virtual_device_type = VirtualDevice.VIRTUAL_DEV_RNG
|
||||||
|
|
||||||
|
TYPE_RANDOM = "random"
|
||||||
|
TYPE_EGD = "egd"
|
||||||
|
TYPES = [TYPE_RANDOM, TYPE_EGD]
|
||||||
|
|
||||||
|
BACKEND_TYPE_UDP = "udp"
|
||||||
|
BACKEND_TYPE_TCP = "tcp"
|
||||||
|
BACKEND_TYPES = [BACKEND_TYPE_UDP, BACKEND_TYPE_TCP]
|
||||||
|
|
||||||
|
BACKEND_MODE_BIND = "bind"
|
||||||
|
BACKEND_MODE_CONNECT = "connect"
|
||||||
|
BACKEND_MODES = [BACKEND_MODE_BIND, BACKEND_MODE_CONNECT]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_pretty_type(rng_type):
|
||||||
|
if rng_type == VirtualRNGDevice.TYPE_RANDOM:
|
||||||
|
return _("Random")
|
||||||
|
if rng_type == VirtualRNGDevice.TYPE_EGD:
|
||||||
|
return _("Entropy Gathering Daemon")
|
||||||
|
return rng_type
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_pretty_backend_type(backend_type):
|
||||||
|
return {"udp" : "UDP",
|
||||||
|
"tcp": "TCP"}.get(backend_type) or backend_type
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_pretty_mode(mode):
|
||||||
|
return {"bind" : "Bind",
|
||||||
|
"connect": "Connect"}.get(mode) or mode
|
||||||
|
|
||||||
|
def supports_property(self, propname):
|
||||||
|
"""
|
||||||
|
Whether the rng dev type supports the passed property name
|
||||||
|
"""
|
||||||
|
users = {
|
||||||
|
"type" : [self.TYPE_EGD, self.TYPE_RANDOM],
|
||||||
|
|
||||||
|
"model" : [self.TYPE_EGD, self.TYPE_RANDOM],
|
||||||
|
"backend_source_host" : [self.TYPE_EGD],
|
||||||
|
"backend_source_mode" : [self.TYPE_EGD],
|
||||||
|
"backend_source_service" : [self.TYPE_EGD],
|
||||||
|
"backend_type" : [self.TYPE_EGD],
|
||||||
|
"device" : [self.TYPE_RANDOM],
|
||||||
|
"rate_bytes" : [self.TYPE_EGD, self.TYPE_RANDOM],
|
||||||
|
"rate_period" : [self.TYPE_EGD, self.TYPE_RANDOM],
|
||||||
|
}
|
||||||
|
if users.get(propname):
|
||||||
|
return self.type in users[propname]
|
||||||
|
|
||||||
|
return hasattr(self, propname)
|
||||||
|
|
||||||
|
type = XMLProperty(xpath="./backend/@model")
|
||||||
|
model = XMLProperty(xpath="./@model",
|
||||||
|
default_cb=lambda s: "virtio")
|
||||||
|
|
||||||
|
backend_type = XMLProperty(xpath="./backend/@type")
|
||||||
|
backend_source_host = XMLProperty(xpath="./backend/source/@host")
|
||||||
|
backend_source_service = XMLProperty(xpath="./backend/source/@service")
|
||||||
|
backend_source_mode = XMLProperty(xpath="./backend/source/@mode")
|
||||||
|
|
||||||
|
rate_bytes = XMLProperty(xpath="./rate/@bytes")
|
||||||
|
rate_period = XMLProperty(xpath="./rate/@period")
|
||||||
|
|
||||||
|
device = XMLProperty(xpath="./backend")
|
||||||
|
|
||||||
|
VirtualRNGDevice.register_type()
|
Loading…
Reference in New Issue
Block a user