All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] [XEN-API] Support for vTPM management API in Xend
@ 2006-11-08 19:36 Stefan Berger
  2006-11-09 15:27 ` Ewan Mellor
  0 siblings, 1 reply; 2+ messages in thread
From: Stefan Berger @ 2006-11-08 19:36 UTC (permalink / raw)
  To: Xen-devel

[-- Attachment #1: Type: text/plain, Size: 137 bytes --]

The attached patch implements more of the Xen-API functionality related
to the vTPM.

Signed-off-by: Stefan Berger <stefanb@us.ibm.com>


[-- Attachment #2: xen-api-vtpm-more.diff --]
[-- Type: text/x-patch, Size: 8466 bytes --]

Index: root/xen-unstable.hg/tools/python/xen/xend/XendAPI.py
===================================================================
--- root.orig/xen-unstable.hg/tools/python/xen/xend/XendAPI.py
+++ root/xen-unstable.hg/tools/python/xen/xend/XendAPI.py
@@ -1282,11 +1282,11 @@ class XendAPI:
     # Xen API: Class VTPM
     # ----------------------------------------------------------------
 
-    VTPM_attr_ro = [ ]
-    VTPM_attr_rw = ['type',
-                    'VM',
+    VTPM_attr_rw = [ ]
+    VTPM_attr_ro = ['VM',
                     'backend',
-                    'instance']
+                    'instance',
+                    'driver']
 
     VTPM_attr_inst = VTPM_attr_rw
 
@@ -1307,17 +1307,61 @@ class XendAPI:
 
         return xen_api_success(cfg)
 
+    # Class Functions
+    def vtpm_get_instance(self, session, vtpm_ref):
+        xendom = XendDomain.instance()
+        vm = xendom.get_vm_with_dev_uuid('vtpm', vtpm_ref)
+        if not vm:
+            return xen_api_error(XEND_ERROR_VTPM_INVALID)
+        cfg = vm.get_dev_xenapi_config('vtpm', vtpm_ref)
+        if not cfg:
+            return xen_api_error(XEND_ERROR_VTPM_INVALID)
+        if cfg.has_key('instance'):
+            instance = cfg['instance']
+        else:
+            instance = -1
+        return xen_api_success(instance)
+
+    def vtpm_get_driver(self, session, vtpm_ref):
+        xendom = XendDomain.instance()
+        vm = xendom.get_vm_with_dev_uuid('vtpm', vtpm_ref)
+        if not vm:
+            return xen_api_error(XEND_ERROR_VTPM_INVALID)
+        cfg = vm.get_dev_xenapi_config('vtpm', vtpm_ref)
+        if not cfg:
+            return xen_api_error(XEND_ERROR_VTPM_INVALID)
+        if cfg.has_key('type'):
+            driver = cfg['type']
+        else:
+            driver = "Unknown"
+        return xen_api_success(driver)
+
+    def vtpm_get_backend(self, session, vtpm_ref):
+        xendom = XendDomain.instance()
+        vm = xendom.get_vm_with_dev_uuid('vtpm', vtpm_ref)
+        if not vm:
+            return xen_api_error(XEND_ERROR_VTPM_INVALID)
+        cfg = vm.get_dev_xenapi_config('vtpm', vtpm_ref)
+        if not cfg:
+            return xen_api_error(XEND_ERROR_VTPM_INVALID)
+        if cfg.has_key('backend'):
+            backend = cfg['backend']
+        else:
+            backend = "Domain-0"
+        return xen_api_success(backend)
+
+    def vtpm_get_vm(self, session, vtpm_ref):
+        xendom = XendDomain.instance()
+        return xen_api_success(xendom.get_dev_property('vtpm', vtpm_ref, 'VM'))
+
     # class methods
     def vtpm_create(self, session, vtpm_struct):
         xendom = XendDomain.instance()
         if xendom.is_valid_vm(vtpm_struct['VM']):
             dom = xendom.get_vm_by_uuid(vtpm_struct['VM'])
-            try:
-                vtpm_ref = dom.create_vtpm(vtpm_struct)
-                xendom.managed_config_save(dom)
-                return xen_api_success(vtpm_ref)
-            except XendError:
-                return xen_api_error(XEND_ERROR_TODO)
+            vtpm_ref = dom.create_vtpm(vtpm_struct)
+            xendom.managed_config_save(dom)
+            return xen_api_success(vtpm_ref)
         else:
             return xen_api_error(XEND_ERROR_DOMAIN_INVALID)
 
Index: root/xen-unstable.hg/tools/python/scripts/xapi.domcfg.py
===================================================================
--- root.orig/xen-unstable.hg/tools/python/scripts/xapi.domcfg.py
+++ root/xen-unstable.hg/tools/python/scripts/xapi.domcfg.py
@@ -20,8 +20,6 @@ actions_after_shutdown =  'destroy'
 actions_after_reboot =  'restart'
 actions_after_suspend =  'destroy'
 actions_after_crash =  'restart'
-TPM_instance =  ''
-TPM_backend =  ''
 bios_boot =  ''
 platform_std_VGA =  False
 platform_serial =  ''
Index: root/xen-unstable.hg/tools/python/scripts/xapi.py
===================================================================
--- root.orig/xen-unstable.hg/tools/python/scripts/xapi.py
+++ root/xen-unstable.hg/tools/python/scripts/xapi.py
@@ -42,6 +42,7 @@ COMMANDS = {
     'vdi-rename': ('<vdi_uuid> <new_name>', 'Rename VDI'),
     'vdi-delete': ('<vdi_uuid>', 'Delete VDI'),
     'vif-create': ('<domname> <pycfg>', 'Create VIF attached to domname'),
+    'vtpm-create' : ('<domname> <pycfg>', 'Create VTPM attached to domname'),
 
     'vm-create': ('<pycfg>', 'Create VM with python config'),
     'vm-destroy': ('<domname>', 'Delete VM'),
@@ -208,16 +209,22 @@ def xapi_vm_list(*args):
         if is_long:
             vbds = vm_info['vbds']
             vifs = vm_info['vifs']
+            vtpms = vm_info['vtpms']
             vif_infos = []
             vbd_infos = []
+            vtpm_infos = []
             for vbd in vbds:
                 vbd_info = execute(server.VBD.get_record, session, vbd)
                 vbd_infos.append(vbd_info)
             for vif in vifs:
                 vif_info = execute(server.VIF.get_record, session, vif)
                 vif_infos.append(vif_info)
+            for vtpm in vtpms:
+                vtpm_info = execute(server.VTPM.get_record, session, vtpm)
+                vtpm_infos.append(vtpm_info)
             vm_info['vbds'] = vbd_infos
             vm_info['vifs'] = vif_infos
+            vm_info['vtpms'] = vtpm_infos
             pprint(vm_info)
         else:
             print VM_LIST_FORMAT % _stringify(vm_info)
@@ -377,8 +384,30 @@ def xapi_vdi_rename(*args):
     print 'Renaming VDI %s to %s' % (vdi_uuid, vdi_name)
     result = execute(server.VDI.set_name_label, session, vdi_uuid, vdi_name)
     print 'Done.'
-    
-        
+
+
+def xapi_vtpm_create(*args):
+    server, session = _connect()
+    domname = args[0]
+    cfg = _read_python_cfg(args[1])
+
+    vm_uuid = resolve_vm(server, session, domname)
+    cfg['VM'] = vm_uuid
+    print "Creating vTPM with cfg = %s" % cfg
+    vtpm_uuid = execute(server.VTPM.create, session, cfg)
+    print "Done. (%s)" % vtpm_uuid
+    vtpm_id = execute(server.VTPM.get_instance, session, vtpm_uuid)
+    print "Has instance number '%s'" % vtpm_id
+    vtpm_be = execute(server.VTPM.get_backend, session, vtpm_uuid)
+    print "Has backend in '%s'" % vtpm_be
+    driver = execute(server.VTPM.get_driver, session, vtpm_uuid)
+    print "Has driver type '%s'" % driver
+    vtpm_rec = execute(server.VTPM.get_record, session, vtpm_uuid)
+    print "Has vtpm record '%s'" % vtpm_rec
+    vm = execute(server.VTPM.get_VM, session, vtpm_uuid)
+    print "Has VM '%s'" % vm
+
+
 #
 # Command Line Utils
 #
Index: root/xen-unstable.hg/tools/python/scripts/xapi.vtpmcfg.py
===================================================================
--- /dev/null
+++ root/xen-unstable.hg/tools/python/scripts/xapi.vtpmcfg.py
@@ -0,0 +1,3 @@
+type = 'paravirtualised'
+backend = 'Domain-0'
+instance = 1
Index: root/xen-unstable.hg/tools/python/xen/xend/XendDomainInfo.py
===================================================================
--- root.orig/xen-unstable.hg/tools/python/xen/xend/XendDomainInfo.py
+++ root/xen-unstable.hg/tools/python/xen/xend/XendDomainInfo.py
@@ -1690,10 +1690,6 @@ class XendDomainInfo:
         return '' # TODO
     def get_power_state(self):
         return XEN_API_VM_POWER_STATE[self.state]
-    def get_tpm_instance(self):
-        return '' # TODO
-    def get_tpm_backend(self):
-        return '' # TODO
     def get_bios_boot(self):
         return '' # TODO
     def get_platform_std_vga(self):
@@ -1834,6 +1830,9 @@ class XendDomainInfo:
             else:
                 config['mode'] = 'RW'
 
+        if dev_class == 'vtpm':
+            config['driver'] = 'paravirtualised' # TODO
+
         return config
 
     def get_dev_property(self, dev_class, dev_uuid, field):
@@ -1928,15 +1927,14 @@ class XendDomainInfo:
         @rtype: string
         """
 
+        if self.state not in (DOM_STATE_HALTED,):
+            raise VmError("Can only add vTPM to a halted domain.")
+        if self.get_vtpms() != []:
+            raise VmError('Domain already has a vTPM.')
         dev_uuid = self.info.device_add('vtpm', cfg_xenapi = xenapi_vtpm)
         if not dev_uuid:
             raise XendError('Failed to create device')
 
-        if self.state in (DOM_STATE_HALTED,):
-            sxpr = self.info.device_sxpr(dev_uuid)
-            devid = self.getDeviceController('vtpm').createDevice(sxpr)
-            raise XendError("Device creation failed")
-
         return dev_uuid
 
     def has_device(self, dev_class, dev_uuid):

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2006-11-09 15:27 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-11-08 19:36 [PATCH] [XEN-API] Support for vTPM management API in Xend Stefan Berger
2006-11-09 15:27 ` Ewan Mellor

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.