WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] Align vTPM support in the Xen-API, docume

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] Align vTPM support in the Xen-API, documentation and lib-xen
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 31 Jan 2007 07:05:23 -0800
Delivery-date: Wed, 31 Jan 2007 08:32:00 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxxx
# Date 1170168665 0
# Node ID 7fdfa020d4ed63fe758395c4630dab018f13424a
# Parent  8f1921600cfd28b26bd75f0b04a74c57fef0e6ad
Align vTPM support in the Xen-API, documentation and lib-xen
(after the recent changes).

Signed-off-by: Stefan Berger <stefanb@xxxxxxxxxx>
---
 docs/xen-api/xenapi-datamodel.tex        |   32 --------
 tools/libxen/include/xen_vtpm.h          |    8 --
 tools/libxen/src/xen_vtpm.c              |   19 ----
 tools/python/scripts/xapi.py             |    8 --
 tools/python/xen/xend/XendAPI.py         |   54 +++++--------
 tools/python/xen/xend/XendDomainInfo.py  |    5 +
 tools/xm-test/tests/vtpm/09_vtpm-xapi.py |  121 ++++++++++++++++++++++++++-----
 7 files changed, 130 insertions(+), 117 deletions(-)

diff -r 8f1921600cfd -r 7fdfa020d4ed docs/xen-api/xenapi-datamodel.tex
--- a/docs/xen-api/xenapi-datamodel.tex Tue Jan 30 14:20:00 2007 +0000
+++ b/docs/xen-api/xenapi-datamodel.tex Tue Jan 30 14:51:05 2007 +0000
@@ -10119,38 +10119,6 @@ value of the field
 \vspace{0.3cm}
 \vspace{0.3cm}
 \vspace{0.3cm}
-\subsubsection{RPC name:~get\_instance}
-
-{\bf Overview:} 
-Get the instance field of the given VTPM.
-
- \noindent {\bf Signature:} 
-\begin{verbatim} int get_instance (session_id s, VTPM ref self)\end{verbatim}
-
-
-\noindent{\bf Arguments:}
-
- 
-\vspace{0.3cm}
-\begin{tabular}{|c|c|p{7cm}|}
- \hline
-{\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VTPM ref } & self & reference to the object \\ \hline 
-
-\end{tabular}
-
-\vspace{0.3cm}
-
- \noindent {\bf Return Type:} 
-{\tt 
-int
-}
-
-
-value of the field
-\vspace{0.3cm}
-\vspace{0.3cm}
-\vspace{0.3cm}
 \subsubsection{RPC name:~create}
 
 {\bf Overview:} 
diff -r 8f1921600cfd -r 7fdfa020d4ed tools/libxen/include/xen_vtpm.h
--- a/tools/libxen/include/xen_vtpm.h   Tue Jan 30 14:20:00 2007 +0000
+++ b/tools/libxen/include/xen_vtpm.h   Tue Jan 30 14:51:05 2007 +0000
@@ -196,12 +196,4 @@ extern bool
 extern bool
 xen_vtpm_get_backend(xen_session *session, xen_vm *result, xen_vtpm vtpm);
 
-
-/**
- * Get the instance field of the given VTPM.
- */
-extern bool
-xen_vtpm_get_instance(xen_session *session, int64_t *result, xen_vtpm vtpm);
-
-
 #endif
diff -r 8f1921600cfd -r 7fdfa020d4ed tools/libxen/src/xen_vtpm.c
--- a/tools/libxen/src/xen_vtpm.c       Tue Jan 30 14:20:00 2007 +0000
+++ b/tools/libxen/src/xen_vtpm.c       Tue Jan 30 14:51:05 2007 +0000
@@ -47,9 +47,6 @@ static const struct_member xen_vtpm_reco
         { .key = "backend",
           .type = &abstract_type_ref,
           .offset = offsetof(xen_vtpm_record, backend) },
-        { .key = "instance",
-          .type = &abstract_type_int,
-          .offset = offsetof(xen_vtpm_record, instance) }
     };
 
 const abstract_type xen_vtpm_record_abstract_type_ =
@@ -183,22 +180,6 @@ xen_vtpm_get_backend(xen_session *sessio
 
 
 bool
-xen_vtpm_get_instance(xen_session *session, int64_t *result, xen_vtpm vtpm)
-{
-    abstract_value param_values[] =
-        {
-            { .type = &abstract_type_string,
-              .u.string_val = vtpm }
-        };
-
-    abstract_type result_type = abstract_type_int;
-
-    XEN_CALL_("VTPM.get_instance");
-    return session->ok;
-}
-
-
-bool
 xen_vtpm_get_uuid(xen_session *session, char **result, xen_vtpm vtpm)
 {
     *result = session->ok ? xen_strdup_((char *)vtpm) : NULL;
diff -r 8f1921600cfd -r 7fdfa020d4ed tools/python/scripts/xapi.py
--- a/tools/python/scripts/xapi.py      Tue Jan 30 14:20:00 2007 +0000
+++ b/tools/python/scripts/xapi.py      Tue Jan 30 14:51:05 2007 +0000
@@ -678,14 +678,6 @@ def xapi_vtpm_create(args, async = False
     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
 
 
 def xapi_pif_list(args, async = False):
diff -r 8f1921600cfd -r 7fdfa020d4ed tools/python/xen/xend/XendAPI.py
--- a/tools/python/xen/xend/XendAPI.py  Tue Jan 30 14:20:00 2007 +0000
+++ b/tools/python/xen/xend/XendAPI.py  Tue Jan 30 14:51:05 2007 +0000
@@ -1735,8 +1735,7 @@ class XendAPI(object):
 
     VTPM_attr_rw = [ ]
     VTPM_attr_ro = ['VM',
-                    'backend',
-                    'instance']
+                    'backend']
 
     VTPM_attr_inst = VTPM_attr_rw
 
@@ -1753,14 +1752,15 @@ class XendAPI(object):
             return xen_api_error(['VTPM_HANDLE_INVALID', vtpm_ref])
         valid_vtpm_keys = self.VTPM_attr_ro + self.VTPM_attr_rw + \
                           self.Base_attr_ro + self.Base_attr_rw
+        return_cfg = {}
         for k in cfg.keys():
-            if k not in valid_vtpm_keys:
-                del cfg[k]
-
-        return xen_api_success(cfg)
+            if k in valid_vtpm_keys:
+                return_cfg[k] = cfg[k]
+
+        return xen_api_success(return_cfg)
 
     # Class Functions
-    def VTPM_get_instance(self, session, vtpm_ref):
+    def VTPM_get_backend(self, session, vtpm_ref):
         xendom = XendDomain.instance()
         vm = xendom.get_vm_with_dev_uuid('vtpm', vtpm_ref)
         if not vm:
@@ -1768,25 +1768,9 @@ class XendAPI(object):
         cfg = vm.get_dev_xenapi_config('vtpm', vtpm_ref)
         if not cfg:
             return xen_api_error(['VTPM_HANDLE_INVALID', vtpm_ref])
-        if cfg.has_key('instance'):
-            instance = cfg['instance']
-        else:
-            instance = -1
-        return xen_api_success(instance)
-
-    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(['VTPM_HANDLE_INVALID', vtpm_ref])
-        cfg = vm.get_dev_xenapi_config('vtpm', vtpm_ref)
-        if not cfg:
-            return xen_api_error(['VTPM_HANDLE_INVALID', vtpm_ref])
-        if cfg.has_key('backend'):
-            backend = cfg['backend']
-        else:
-            backend = "Domain-0"
-        return xen_api_success(backend)
+        if not cfg.has_key('backend'):
+            return xen_api_error(['VTPM backend not set'])
+        return xen_api_success(cfg['backend'])
 
     def VTPM_get_VM(self, session, vtpm_ref):
         xendom = XendDomain.instance()
@@ -1795,12 +1779,18 @@ class XendAPI(object):
 
     def VTPM_destroy(self, session, vtpm_ref):
         xendom = XendDomain.instance()
-        vm = xendom.get_vm_with_dev_uuid('vtpm', vtpm_ref)
-        if not vm:
-            return xen_api_error(['VTPM_HANDLE_INVALID', vtpm_ref])
-
-        vm.destroy_vtpm(vtpm_ref)
-        return xen_api_success_void()    
+        dom = xendom.get_vm_with_dev_uuid('vtpm', vtpm_ref)
+        if dom:
+            if dom.state != XEN_API_VM_POWER_STATE_HALTED:
+                vm_ref = dom.get_dev_property('vtpm', vtpm_ref, 'VM')
+                return xen_api_error(['VM_BAD_POWER_STATE', vm_ref,
+                 XendDomain.POWER_STATE_NAMES[XEN_API_VM_POWER_STATE_HALTED],
+                 XendDomain.POWER_STATE_NAMES[dom.state]])
+            from xen.xend.server import tpmif
+            tpmif.destroy_vtpmstate(dom.getName())
+            return xen_api_success(True)
+        else:
+            return xen_api_error(['VM_HANDLE_INVALID', vtpm_struct['VM']])
 
     # class methods
     def VTPM_create(self, session, vtpm_struct):
diff -r 8f1921600cfd -r 7fdfa020d4ed tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Tue Jan 30 14:20:00 2007 +0000
+++ b/tools/python/xen/xend/XendDomainInfo.py   Tue Jan 30 14:51:05 2007 +0000
@@ -2125,7 +2125,10 @@ class XendDomainInfo:
                 config['mode'] = 'RW'
 
         if dev_class == 'vtpm':
-            config['driver'] = 'paravirtualised' # TODO
+            if not config.has_type('type'):
+                config['type'] = 'paravirtualised' # TODO
+            if not config.has_key('backend'):
+                config['backend'] = "00000000-0000-0000-0000-000000000000"
 
         return config
 
diff -r 8f1921600cfd -r 7fdfa020d4ed tools/xm-test/tests/vtpm/09_vtpm-xapi.py
--- a/tools/xm-test/tests/vtpm/09_vtpm-xapi.py  Tue Jan 30 14:20:00 2007 +0000
+++ b/tools/xm-test/tests/vtpm/09_vtpm-xapi.py  Tue Jan 30 14:51:05 2007 +0000
@@ -4,13 +4,21 @@
 # Author: Stefan Berger <stefanb@xxxxxxxxxx>
 
 # Test to test the vtpm class through the Xen-API
+#
+# Tested methods:
+#  VTPM: get_uuid, get_backend, get_by_uuid, get_record
+#        create, destroy, get_VM
+#  VM: get_VTPMS
 
 from XmTestLib import xapi
 from XmTestLib.XenAPIDomain import XmTestAPIDomain
 from XmTestLib import *
+from xen.xend import XendDomain
 from vtpm_utils import *
 import commands
 import os
+
+VTPM_RECORD_KEYS = [ 'backend', 'VM', 'uuid' ]
 
 try:
     # XmTestAPIDomain tries to establish a connection to XenD
@@ -20,52 +28,131 @@ vm_uuid = domain.get_uuid()
 vm_uuid = domain.get_uuid()
 
 vtpmcfg = {}
-vtpmcfg['type'] = "paravirtualised"
-vtpmcfg['backend'] = "Domain-0"
-vtpmcfg['instance'] = 1
+vtpmcfg['backend'] = XendDomain.DOM0_UUID
 vtpmcfg['VM'] = vm_uuid
 
 session = xapi.connect()
 
 vtpm_uuid = session.xenapi.VTPM.create(vtpmcfg)
 
-vtpm_id = session.xenapi.VTPM.get_instance(vtpm_uuid)
 vtpm_be = session.xenapi.VTPM.get_backend(vtpm_uuid)
 if vtpm_be != vtpmcfg['backend']:
     FAIL("vTPM's backend is in '%s', expected: '%s'" %
          (vtpm_be, vtpmcfg['backend']))
 
-driver = session.xenapi.VTPM.get_driver(vtpm_uuid)
-if driver != vtpmcfg['type']:
-    FAIL("vTPM has driver type '%s', expected: '%s'" %
-         (driver, vtpmcfg['type']))
-
 vtpm_rec = session.xenapi.VTPM.get_record(vtpm_uuid)
 
-if vtpm_rec['driver']  != vtpmcfg['type']:
-    FAIL("vTPM record shows driver type '%s', expected: '%s'" %
-         (vtpm_rec['driver'], vtpmcfg['type']))
+miss_keys = []
+for k in VTPM_RECORD_KEYS:
+    if k not in vtpm_rec.keys():
+        miss_keys.append(k)
+if len(miss_keys) > 0:
+    FAIL("vTPM record is missing key(s): %s" % miss_keys)
+
 if vtpm_rec['uuid']  != vtpm_uuid:
     FAIL("vTPM record shows vtpm uuid '%s', expected: '%s'" %
          (vtpm_rec['uuid'], vtpm_uuid))
 if vtpm_rec['VM']  != vm_uuid:
     FAIL("vTPM record shows VM uuid '%s', expected: '%s'" %
          (vtpm_rec['VM'], vm_uuid))
+if vtpm_rec['backend'] != vtpmcfg['backend']:
+    FAIL("vTPM record shows VM bakcned '%s', expected: '%s'" %
+         (vtpm_rev['backend'], vtpmcfg['backend']))
 
-success = domain.start()
+badkeys = []
+keys = vtpm_rec.keys()
+for k in keys:
+    if k not in VTPM_RECORD_KEYS:
+        badkeys.append(k)
+if len(badkeys) > 0:
+    FAIL("Unexpected attributes in result: %s" % badkeys)
 
-console = domain.getConsole()
+if vm_uuid != session.xenapi.VTPM.get_VM(vtpm_uuid):
+    FAIL("VM uuid from VTPM.get_VM different (%s) than expected (%s)." %
+         (vm_ref, vm_uuid))
+
+uuid = session.xenapi.VTPM.get_uuid(vtpm_uuid)
+if uuid != vtpm_uuid:
+    FAIL("vTPM from VTPM.get_uuid different (%s) than expected (%s)." %
+         (uuid, vtpm_uuid))
+
+vtpm_ref = session.xenapi.VTPM.get_by_uuid(vtpm_uuid)
+if vtpm_ref != vtpm_uuid:
+    FAIL("vTPM from VTPM.get_by_uuid different (%s) than expected (%s)." %
+         (vtpm_ref, vtpm_uuid))
+
+vm_vtpms = session.xenapi.VM.get_VTPMs(vm_uuid)
+if len(vm_vtpms) != 1:
+    FAIL("Number of vTPMs from get_VTPMs is (%d) not what was expected (%d)" %
+         (len(vm_vtpms), 1))
+if vtpm_uuid not in vm_vtpms:
+    FAIL("Other vTPM uuid (%s) returned from VM.get_VTPMs than expected (%s)" %
+         (vm_vtpms[0], vtpm_uuid))
+
+try:
+    console = domain.start()
+except DomainError, e:
+    FAIL("Unable to create domain (%s)" % domName)
+
+try:
+    console.sendInput("input")
+except ConsoleError, e:
+    saveLog(console.getHistory())
+    FAIL(str(e))
 
 try:
     run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
 except ConsoleError, e:
     saveLog(console.getHistory())
-    vtpm_cleanup(domName)
-    FAIL("No result from dumping the PCRs")
+    FAIL("1. No result from dumping the PCRs")
 
 if re.search("No such file",run["output"]):
-    vtpm_cleanup(domName)
     FAIL("TPM frontend support not compiled into (domU?) kernel")
 
+if not re.search("PCR-00:",run["output"]):
+    saveLog(console.getHistory())
+    FAIL("1. Virtual TPM is not working correctly on /dev/vtpm on backend 
side: \n%s" % run["output"])
+
+try:
+    rc = session.xenapi.VTPM.destroy(vtpm_uuid)
+    #Should never get here
+    FAIL("Could destroy vTPM while VM is running")
+except:
+    pass
+
+rc = session.xenapi.VM.suspend(vm_uuid)
+if rc:
+    FAIL("Could not suspend VM")
+
+try:
+    rc = session.xenapi.VTPM.destroy(vtpm_uuid)
+    #May not throw an exception in 'suspend' state
+except:
+    pass
+
+rc = session.xenapi.VM.resume(vm_uuid, False)
+if rc:
+    FAIL("Could not resume VM")
+
+try:
+    console = domain.getConsole()
+except ConsoleError, e:
+    FAIL(str(e))
+
+try:
+    run = console.runCmd("cat /sys/devices/xen/vtpm-0/pcrs")
+except ConsoleError, e:
+    saveLog(console.getHistory())
+    FAIL("2. No result from dumping the PCRs. vTPM has been removed?")
+
+if not re.search("PCR-00:",run["output"]):
+    saveLog(console.getHistory())
+    FAIL("2. Virtual TPM is not working correctly on /dev/vtpm on backend 
side: \n%s" % run["output"])
+
 domain.stop()
+
+rc = session.xenapi.VTPM.destroy(vtpm_uuid)
+if not rc:
+    FAIL("Could NOT destroy vTPM while domain is halted.")
+
 domain.destroy()

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] Align vTPM support in the Xen-API, documentation and lib-xen, Xen patchbot-unstable <=