Martin Polednik has uploaded a new change for review.
Change subject: [WIP] vdsm: add support for virtiorng device
......................................................................
[WIP] vdsm: add support for virtiorng device
Adds support for virtiorng with basic capabilities
- TODO: decide which sources are supported
agree upon API
Change-Id: I4b9b2c355e06bae5f66bbaadffd5fda8d3ed4e9a
Signed-off-by: Martin Polednik <mpoledni(a)redhat.com>
---
M vdsm/vm.py
M vdsm_api/vdsmapi-schema.json
2 files changed, 106 insertions(+), 1 deletion(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/91/19091/1
diff --git a/vdsm/vm.py b/vdsm/vm.py
index 69508fe..b7cdbbe 100644
--- a/vdsm/vm.py
+++ b/vdsm/vm.py
@@ -74,6 +74,7 @@
GENERAL_DEVICES = 'general'
BALLOON_DEVICES = 'balloon'
REDIR_DEVICES = 'redir'
+RNG_DEVICES = 'rng'
WATCHDOG_DEVICES = 'watchdog'
CONSOLE_DEVICES = 'console'
SMARTCARD_DEVICES = 'smartcard'
@@ -1645,6 +1646,41 @@
return self.createXmlElem('redirdev', self.device, ['bus',
'address'])
+class RngDevice(VmDevice):
+ def getXML(self):
+ """
+ <rng model='virtio'>
+ <rate period="2000" bytes="1234"/>
+ <backend model='random'>/dev/random</backend>
+ <!-- OR -->
+ <backend model='egd' type='udp'>
+ <source ...' />
+ </backend>
+ </rng>
+ """
+ rng = self.createXmlElem('rng', None, ['model'])
+ if 'bytes' in self.specParams:
+ rng.appendChildWithArgs('rate',
+ period=self.specParams.get('period'),
+ bytes=self.specParams['bytes'])
+
+ if self.specParams['backend_model'] == 'egd':
+ backend = self.createXmlElem('backend', None)
+ backend.setAttrs(model='egd',
+ type=self.specParams['backend_type'])
+ backend.appendChildWithArgs('source', None,
+ **self.specParams['path'])
+ backend.appendChildWithArgs('source', None,
+ **self.specParams['path2'])
+ rng.appendChild(backend)
+ else:
+ rng.appendChildWithArgs('backend',
+ text=self.specParams['path'],
+ model='random')
+
+ return rng
+
+
class ConsoleDevice(VmDevice):
def getXML(self):
"""
@@ -1729,6 +1765,7 @@
SOUND_DEVICES: [], VIDEO_DEVICES: [],
CONTROLLER_DEVICES: [], GENERAL_DEVICES: [],
BALLOON_DEVICES: [], REDIR_DEVICES: [],
+ RNG_DEVICES: [],
WATCHDOG_DEVICES: [], CONSOLE_DEVICES: [],
SMARTCARD_DEVICES: []}
@@ -1867,6 +1904,7 @@
GENERAL_DEVICES: [],
BALLOON_DEVICES: [],
REDIR_DEVICES: [],
+ RNG_DEVICES: [],
WATCHDOG_DEVICES: [],
CONSOLE_DEVICES: [],
SMARTCARD_DEVICES: []}
@@ -2865,6 +2903,7 @@
BALLOON_DEVICES: BalloonDevice,
WATCHDOG_DEVICES: WatchdogDevice,
REDIR_DEVICES: RedirDevice,
+ RNG_DEVICES: RngDevice,
CONSOLE_DEVICES: ConsoleDevice,
SMARTCARD_DEVICES: SmartCardDevice}
diff --git a/vdsm_api/vdsmapi-schema.json b/vdsm_api/vdsmapi-schema.json
index 27c12c1..161b03b 100644
--- a/vdsm_api/vdsmapi-schema.json
+++ b/vdsm_api/vdsmapi-schema.json
@@ -1790,11 +1790,13 @@
#
# @smartcard: A smartcard device
#
+# @rng: A rng device
+#
# Since: 4.10.0
##
{'enum': 'VmDeviceType',
'data': ['disk', 'interface', 'video', 'sound',
'controller', 'balloon',
- 'channel', 'console', 'smartcard']}
+ 'channel', 'console', 'smartcard', 'rng']}
##
# @VmDiskDeviceType:
@@ -2621,6 +2623,70 @@
'specParams': 'VmSmartcardDeviceSpecParams'}}
##
+# @VmRngDeviceModel:
+#
+# An enumeration of VM rng device models
+#
+# @virtio: Currently the only supported model
+#
+# Since: <<<TODO: FIX>>>
+##
+{'enum': 'VmRngDeviceModel',
+ 'data': ['virtio']}
+
+##
+# @VmRngDeviceBackendModel:
+#
+# An enumeration of VM rng device backend models
+#
+# @random: Use
+#
+# @egd: Dont
+#
+# Since: <<<TODO: FIX>>>
+##
+{'enum': 'VmRngDeviceBackendModel',
+ 'data': ['random', 'egd']}
+
+##
+# @VmRngDeviceSpecParams:
+#
+# An enumeration of VM rng device models
+#
+# @backend_model: Will be added
+#
+# @bytes: #optional Will be added
+#
+# @period: #optional Will be added
+#
+# @path: Will be added
+#
+# @path2: #required when backend_model == egd
+#
+# Since: <<<TODO: FIX>>>
+##
+{'type': 'VmRngDeviceSpecParams',
+ 'data': {'backend_model': 'VmRngDeviceBackendModel',
+ '*bytes': 'int', '*period': 'int',
'path': 'str', 'path2': 'str'}}
+
+##
+# @VmRngDevice:
+#
+# Properties of a VM rng device.
+#
+# @deviceType: The device type (always @rng)
+#
+# @model: The model of rng device
+#
+# @specParams: Additional device parameters
+#
+# Since: <<<TODO: FIX>>>
+##
+{'type': 'VmRngDevice',
+ 'data': {'deviceType': 'VmDeviceType', 'model':
'VmRngDeviceModel',
+ 'specParams': 'VmRngDeviceSpecParams'}}
+
+##
# @VmConsoleDevice:
#
# Properties of a VM console device.
--
To view, visit
http://gerrit.ovirt.org/19091
To unsubscribe, visit
http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I4b9b2c355e06bae5f66bbaadffd5fda8d3ed4e9a
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Martin Polednik <mpoledni(a)redhat.com>