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 <mpole...@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 <mpole...@redhat.com>
_______________________________________________
vdsm-patches mailing list
vdsm-patches@lists.fedorahosted.org
https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches

Reply via email to