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] The attached patch does the following:

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] The attached patch does the following:
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 27 Feb 2006 23:10:07 +0000
Delivery-date: Mon, 27 Feb 2006 23:10:31 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
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 emellor@xxxxxxxxxxxxxxxxxxxxxx
# Node ID 136aea67b3698aa19e977cd44db7785498a3ad87
# Parent  911f3ecd975ede0e1d3dab529d49dc8102f2da89
The attached patch does the following:

- introduces two basic tests for the virtual TPM (skipped on hardware
where a TPM is not available or vtpm manager has not been started
manually before)
- adapts the Makefiles to make the test cases available
- splits up the hotplug files into two files where the vtpm-common.sh
can be sourced by 'other' scripts as well
- uses echo "$var" to return variables from functions
- gets rid of the 'set +e" work-around
- introduces a script (vtpm-delete) to delete entries from the virtual
TPM directory in /etc/xen/vtpm.db

The xm-tests will skip over the 2nd test on most systems and the patch
has otherwise no effect on existing tests.

Signed-off-by: Stefan Berger <stefanb@xxxxxxxxxx>

diff -r 911f3ecd975e -r 136aea67b369 tools/examples/Makefile
--- a/tools/examples/Makefile   Mon Feb 27 15:11:01 2006
+++ b/tools/examples/Makefile   Mon Feb 27 15:13:05 2006
@@ -26,10 +26,10 @@
 XEN_SCRIPTS += network-nat vif-nat
 XEN_SCRIPTS += block
 XEN_SCRIPTS += block-enbd block-nbd
-XEN_SCRIPTS += vtpm
+XEN_SCRIPTS += vtpm vtpm-delete
 XEN_SCRIPT_DATA = xen-script-common.sh locking.sh logging.sh
 XEN_SCRIPT_DATA += xen-hotplug-common.sh xen-network-common.sh vif-common.sh
-XEN_SCRIPT_DATA += block-common.sh vtpm-common.sh
+XEN_SCRIPT_DATA += block-common.sh vtpm-common.sh vtpm-hotplug-common.sh
 
 XEN_HOTPLUG_DIR = /etc/hotplug
 XEN_HOTPLUG_SCRIPTS = xen-backend.agent
diff -r 911f3ecd975e -r 136aea67b369 tools/examples/vtpm
--- a/tools/examples/vtpm       Mon Feb 27 15:11:01 2006
+++ b/tools/examples/vtpm       Mon Feb 27 15:13:05 2006
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 dir=$(dirname "$0")
-. "$dir/vtpm-common.sh"
+. "$dir/vtpm-hotplug-common.sh"
 
 vtpm_fatal_error=0
 
diff -r 911f3ecd975e -r 136aea67b369 tools/examples/vtpm-common.sh
--- a/tools/examples/vtpm-common.sh     Mon Feb 27 15:11:01 2006
+++ b/tools/examples/vtpm-common.sh     Mon Feb 27 15:13:05 2006
@@ -17,21 +17,8 @@
 #
 
 dir=$(dirname "$0")
-. "$dir/xen-hotplug-common.sh"
-
-findCommand "$@"
-if [ "$command" != "online" ]  &&
-   [ "$command" != "offline" ] &&
-   [ "$command" != "add" ]     &&
-   [ "$command" != "remove" ]
-then
-       log err "Invalid command: $command"
-       exit 1
-fi
-
-
-XENBUS_PATH="${XENBUS_PATH:?}"
-
+. "$dir/logging.sh"
+. "$dir/locking.sh"
 
 VTPMDB="/etc/xen/vtpm.db"
 
@@ -58,7 +45,11 @@
        function vtpm_resume() {
                true
        }
+       function vtpm_delete() {
+               true
+       }
 fi
+
 
 #Find the instance number for the vtpm given the name of the domain
 # Parameters
@@ -66,7 +57,7 @@
 # Return value
 #  Returns '0' if instance number could not be found, otherwise
 #  it returns the instance number in the variable 'instance'
-function find_instance () {
+function vtpmdb_find_instance () {
        local vmname=$1
        local ret=0
        instance=`cat $VTPMDB |                    \
@@ -80,18 +71,17 @@
                     }                             \
                   }'`
        if [ "$instance" != "" ]; then
-               ret=1
-       fi
-       return $ret
+               ret=$instance
+       fi
+       echo "$ret"
 }
 
 
 # Check whether a particular instance number is still available
-# returns '1' if it is available
-function is_free_instancenum () {
+# returns "0" if it is not available, "1" otherwise.
+function vtpmdb_is_free_instancenum () {
        local instance=$1
        local avail=1
-
        #Allowed instance number range: 1-255
        if [ $instance -eq 0 -o $instance -gt 255 ]; then
                avail=0
@@ -110,13 +100,13 @@
                        fi
                done
        fi
-       return $avail
+       echo "$avail"
 }
 
 
 # Get an available instance number given the database
 # Returns an unused instance number
-function get_free_instancenum () {
+function vtpmdb_get_free_instancenum () {
        local ctr
        local instances
        local don
@@ -145,12 +135,12 @@
                fi
                let ctr=ctr+1
        done
-       let instance=$ctr
+       echo "$ctr"
 }
 
 
 # Add a domain name and instance number to the DB file
-function add_instance () {
+function vtpmdb_add_instance () {
        local vmname=$1
        local inst=$2
 
@@ -159,8 +149,8 @@
                echo "#1st column: domain name" >> $VTPMDB
                echo "#2nd column: TPM instance number" >> $VTPMDB
        fi
-       validate_entry $vmname $inst
-       if [ $? -eq 0 ]; then
+       res=$(vtpmdb_validate_entry $vmname $inst)
+       if [ $res -eq 0 ]; then
                echo "$vmname $inst" >> $VTPMDB
        fi
 }
@@ -168,11 +158,10 @@
 
 #Validate whether an entry is the same as passed to this
 #function
-function validate_entry () {
+function vtpmdb_validate_entry () {
        local rc=0
        local vmname=$1
        local inst=$2
-       local res
 
        res=`cat $VTPMDB |             \
             gawk -vvmname=$vmname     \
@@ -197,13 +186,15 @@
        elif [ "$res" == "2" ]; then
                let rc=2
        fi
-       return $rc
+       echo "$rc"
 }
 
 
 #Remove an entry from the vTPM database given its domain name
-function remove_entry () {
+#and instance number
+function vtpmdb_remove_entry () {
        local vmname=$1
+       local instance=$2
        local VTPMDB_TMP="$VTPMDB".tmp
        `cat $VTPMDB |             \
         gawk -vvmname=$vmname     \
@@ -214,6 +205,7 @@
         '} > $VTPMDB_TMP`
        if [ -e $VTPMDB_TMP ]; then
                mv -f $VTPMDB_TMP $VTPMDB
+               vtpm_delete $instance
        else
                log err "Error creating temporary file '$VTPMDB_TMP'."
        fi
@@ -222,7 +214,7 @@
 
 # Find the reason for the creation of this device:
 # Set global REASON variable to 'resume' or 'create'
-function get_create_reason () {
+function vtpm_get_create_reason () {
        local resume=$(xenstore-read $XENBUS_PATH/resume)
        if [ "$resume" == "True" ]; then
                REASON="resume"
@@ -230,6 +222,7 @@
                REASON="create"
        fi
 }
+
 
 #Create a vTPM instance
 # If no entry in the TPM database is found, the instance is
@@ -237,26 +230,23 @@
 function vtpm_create_instance () {
        local domname=$(xenstore_read "$XENBUS_PATH"/domain)
        local res
-       set +e
-       get_create_reason
+       local instance
+       vtpm_get_create_reason
 
        claim_lock vtpmdb
-
-       find_instance $domname
-       res=$?
-       if [ $res -eq 0 ]; then
+       instance=$(vtpmdb_find_instance $domname)
+       if [ "$instance" == "0" ]; then
                #Try to give the preferred instance to the domain
                instance=$(xenstore_read "$XENBUS_PATH"/pref_instance)
                if [ "$instance" != "" ]; then
-                       is_free_instancenum $instance
-                       res=$?
+                       res=$(vtpmdb_is_free_instancenum $instance)
                        if [ $res -eq 0 ]; then
-                               get_free_instancenum
+                               instance=$(vtpmdb_get_free_instancenum)
                        fi
                else
-                       get_free_instancenum
+                       instance=$(vtpmdb_get_free_instancenum)
                fi
-               add_instance $domname $instance
+               vtpmdb_add_instance $domname $instance
                if [ "$REASON" == "create" ]; then
                        vtpm_create $instance
                elif [ "$REASON" == "resume" ]; then
@@ -279,25 +269,40 @@
                true
        fi
        xenstore_write $XENBUS_PATH/instance $instance
-       set -e
-}
-
-
-#Remove an instance
+}
+
+
+#Remove an instance when a VM is terminating or suspending.
+#Since it is assumed that the VM will appear again, the
+#entry is kept in the VTPMDB file.
 function vtpm_remove_instance () {
        local domname=$(xenstore_read "$XENBUS_PATH"/domain)
-       set +e
-       find_instance $domname
-       res=$?
-       if [ $res -eq 0 ]; then
-               #Something is really wrong with the DB
-               log err "vTPM DB file $VTPMDB has no entry for '$domname'"
-       else
+
+       claim_lock vtpmdb
+
+       instance=$(vtpmdb_find_instance $domname)
+
+       if [ "$instance" != "0" ]; then
                if [ "$REASON" == "suspend" ]; then
                        vtpm_suspend $instance
                fi
        fi
-       set -e
-}
-
-
+
+       release_lock vtpmdb
+}
+
+
+#Remove an entry in the VTPMDB file given the domain's name
+#1st parameter: The name of the domain
+function vtpm_delete_instance () {
+       local rc
+
+       claim_lock vtpmdb
+
+       instance=$(vtpmdb_find_instance $1)
+       if [ "$instance" != "0" ]; then
+               vtpmdb_remove_entry $1 $instance
+       fi
+
+       release_lock vtpmdb
+}
diff -r 911f3ecd975e -r 136aea67b369 tools/xm-test/configure.ac
--- a/tools/xm-test/configure.ac        Mon Feb 27 15:11:01 2006
+++ b/tools/xm-test/configure.ac        Mon Feb 27 15:13:05 2006
@@ -93,6 +93,7 @@
     tests/unpause/Makefile
     tests/vcpu-pin/Makefile
     tests/vcpu-disable/Makefile
+    tests/vtpm/Makefile
     tests/enforce_dom0_cpus/Makefile
     lib/XmTestReport/xmtest.py
     lib/XmTestLib/config.py
diff -r 911f3ecd975e -r 136aea67b369 tools/xm-test/lib/XmTestLib/XenDomain.py
--- a/tools/xm-test/lib/XmTestLib/XenDomain.py  Mon Feb 27 15:11:01 2006
+++ b/tools/xm-test/lib/XmTestLib/XenDomain.py  Mon Feb 27 15:13:05 2006
@@ -99,6 +99,7 @@
         # These options need to be lists
         self.defaultOpts["disk"] = []
         self.defaultOpts["vif"]  = []
+        self.defaultOpts["vtpm"] = []
 
         self.opts = self.defaultOpts
 
diff -r 911f3ecd975e -r 136aea67b369 tools/xm-test/tests/Makefile.am
--- a/tools/xm-test/tests/Makefile.am   Mon Feb 27 15:11:01 2006
+++ b/tools/xm-test/tests/Makefile.am   Mon Feb 27 15:13:05 2006
@@ -23,6 +23,7 @@
                unpause         \
                vcpu-disable    \
                vcpu-pin        \
+               vtpm            \
                enforce_dom0_cpus       \
                save restore migrate
 
diff -r 911f3ecd975e -r 136aea67b369 xen-unstable.hg/tools/examples/vtpm-delete
--- /dev/null   Mon Feb 27 15:11:01 2006
+++ b/xen-unstable.hg/tools/examples/vtpm-delete        Mon Feb 27 15:13:05 2006
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# This scripts must be called the following way:
+# vtpm-delete <domain name>
+
+dir=$(dirname "$0")
+. "$dir/vtpm-common.sh"
+
+vtpm_delete_instance $1
diff -r 911f3ecd975e -r 136aea67b369 
xen-unstable.hg/tools/examples/vtpm-hotplug-common.sh
--- /dev/null   Mon Feb 27 15:11:01 2006
+++ b/xen-unstable.hg/tools/examples/vtpm-hotplug-common.sh     Mon Feb 27 
15:13:05 2006
@@ -0,0 +1,35 @@
+#
+# Copyright (c) 2005 IBM Corporation
+# Copyright (c) 2005 XenSource Ltd.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of version 2.1 of the GNU Lesser General Public
+# License as published by the Free Software Foundation.
+#
+# This library 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+dir=$(dirname "$0")
+. "$dir/xen-hotplug-common.sh"
+
+findCommand "$@"
+if [ "$command" != "online" ]  &&
+   [ "$command" != "offline" ] &&
+   [ "$command" != "add" ]     &&
+   [ "$command" != "remove" ]
+then
+       log err "Invalid command: $command"
+       exit 1
+fi
+
+
+XENBUS_PATH="${XENBUS_PATH:?}"
+
+. "$dir/vtpm-common.sh"
diff -r 911f3ecd975e -r 136aea67b369 
xen-unstable.hg/tools/xm-test/tests/vtpm/01_vtpm-list_pos.py
--- /dev/null   Mon Feb 27 15:11:01 2006
+++ b/xen-unstable.hg/tools/xm-test/tests/vtpm/01_vtpm-list_pos.py      Mon Feb 
27 15:13:05 2006
@@ -0,0 +1,45 @@
+#!/usr/bin/python
+
+# Copyright (C) International Business Machines Corp., 2006
+# Author: Stefan Berger <stefanb@xxxxxxxxxx)
+
+# Positive Test: create domain with virtual TPM attached at build time,
+#                verify list
+
+
+from XmTestLib import *
+
+def vtpm_cleanup(domName):
+       # Since this is only a temporary domain I clean up the domain from the
+       # virtual TPM directory
+       traceCommand("/etc/xen/scripts/vtpm-delete %s" % domName)
+
+if ENABLE_HVM_SUPPORT:
+    SKIP("vtpm-list not supported for HVM domains")
+
+config = {"vtpm":"instance=1,backend=0"}
+domain = XmTestDomain(extraConfig=config)
+
+try:
+    domain.start()
+except DomainError, e:
+    if verbose:
+        print e.extra
+    vtpm_cleanup(domain.getName())
+    FAIL("Unable to create domain")
+
+domName = domain.getName()
+
+status, output = traceCommand("xm vtpm-list %s" % domain.getId())
+eyecatcher = "/local/domain/0/backend/vtpm"
+where = output.find(eyecatcher)
+if status != 0:
+    vtpm_cleanup(domName)
+    FAIL("xm vtpm-list returned bad status, expected 0, status is %i" % status)
+elif where < 0:
+    vtpm_cleanup(domName)
+    FAIL("Fail to list virtual TPM device")
+
+domain.stop()
+
+vtpm_cleanup(domName)
diff -r 911f3ecd975e -r 136aea67b369 
xen-unstable.hg/tools/xm-test/tests/vtpm/02_vtpm-cat_pcrs.py
--- /dev/null   Mon Feb 27 15:11:01 2006
+++ b/xen-unstable.hg/tools/xm-test/tests/vtpm/02_vtpm-cat_pcrs.py      Mon Feb 
27 15:13:05 2006
@@ -0,0 +1,81 @@
+#!/usr/bin/python
+
+# Copyright (C) International Business Machines Corp., 2006
+# Author: Stefan Berger <stefanb@xxxxxxxxxx)
+
+# Positive Test: create domain with virtual TPM attached at build time,
+#                check list of pcrs
+
+from XmTestLib import *
+
+def vtpm_cleanup(domName):
+       # Since this is only a temporary domain I clean up the domain from the
+       # virtual TPM directory
+       traceCommand("/etc/xen/scripts/vtpm-delete %s" % domName)
+
+if ENABLE_HVM_SUPPORT:
+    SKIP("vtpm-list not supported for HVM domains")
+
+status, output = traceCommand("ls /dev/tpm0")
+if re.search("No such file or directory",output):
+    SKIP("This machine has no hardware TPM; cannot run this test")
+
+status, output = traceCommand("ps aux | grep vtpm_manager | grep -v grep")
+if output == "":
+    FAIL("virtual TPM manager must be started to run this test")
+
+# vtpm manager has been detected
+config = {"vtpm":"instance=1,backend=0"}
+domain = XmTestDomain(extraConfig=config)
+
+try:
+    domain.start()
+except DomainError, e:
+    if verbose:
+        print e.extra
+    vtpm_cleanup(domain.getName())
+    FAIL("Unable to create domain")
+
+domName = domain.getName()
+
+try:
+    console = XmConsole(domain.getName())
+except ConsoleError, e:
+    vtpm_cleanup(domName)
+    FAIL(str(e))
+
+try:
+    console.sendInput("input")
+    run = console.runCmd("ls /sys")
+except ConsoleError, e:
+    saveLog(console.getHistory())
+    vtpm_cleanup(domName)
+    FAIL(str(e))
+
+if re.search("No such file",run["output"]):
+    try:
+        run = console.runCmd("mkdir /sys")
+        run = console.runCmd("mount -t sysfs /sys /sys")
+    except ConsoleError, e:
+        saveLog(console.getHistory())
+        vtpm_cleanup(domName)
+        FAIL(str(e))
+
+try:
+    run = console.runCmd("cat /sys/devices/platform/tpm_vtpm/pcrs")
+except ConsoleError, e:
+    saveLog(console.getHistory())
+    vtpm_cleanup(domName)
+    FAIL(str(e))
+
+if re.search("No such file",run["output"]):
+    FAIL("TPM frontend support not compiled into (domU?) kernel")
+
+console.closeConsole()
+
+domain.stop()
+
+vtpm_cleanup(domName)
+
+if not re.search("PCR-00:",run["output"]):
+       FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend 
side")
diff -r 911f3ecd975e -r 136aea67b369 
xen-unstable.hg/tools/xm-test/tests/vtpm/Makefile.am
--- /dev/null   Mon Feb 27 15:11:01 2006
+++ b/xen-unstable.hg/tools/xm-test/tests/vtpm/Makefile.am      Mon Feb 27 
15:13:05 2006
@@ -0,0 +1,22 @@
+
+SUBDIRS =
+
+TESTS = 01_vtpm-list_pos.test \
+        02_vtpm-cat_pcrs.test
+
+XFAIL_TESTS =
+
+EXTRA_DIST = $(TESTS) $(XFAIL_TESTS)
+
+TESTS_ENVIRONMENT=@TENV@
+
+%.test: %.py
+       cp $< $@
+       chmod +x $@
+
+clean-local: am_config_clean-local
+
+am_config_clean-local:
+       rm -f *test
+       rm -f *log
+       rm -f *~

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] The attached patch does the following:, Xen patchbot -unstable <=