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] Fix a couple of problems in the TPM backend driver.

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Fix a couple of problems in the TPM backend driver.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 11 May 2006 09:38:11 +0000
Delivery-date: Thu, 11 May 2006 02:40:48 -0700
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@xxxxxxxxxxxxxxxxxxxx
# Node ID 8685b64538fa17f51d6d088935e833a4821f4f29
# Parent  0ee5869b4894b70ff08c2b16b19c0ef27def4558
Clean up and refactor some parts of the vTPM and migration-related scripts.
In the external device migration script I am introducing a subtype
(-subtype <subtype>) from which the script's name is formed. Also all
unparsed parameters are passed to the called script.

Signed-off-by: Stefan Berger <stefanb@xxxxxxxxxx>
---
 tools/examples/external-device-migrate |  124 +++++++++++++++++++--------------
 tools/examples/vtpm                    |    3 
 tools/examples/vtpm-common.sh          |  120 +++++++++++++++++--------------
 3 files changed, 142 insertions(+), 105 deletions(-)

diff -r 0ee5869b4894 -r 8685b64538fa tools/examples/external-device-migrate
--- a/tools/examples/external-device-migrate    Wed May 10 15:58:16 2006 +0100
+++ b/tools/examples/external-device-migrate    Wed May 10 16:01:34 2006 +0100
@@ -27,59 +27,85 @@ dir=$(dirname "$0")
 . "$dir/logging.sh"
 
 
-function usage() {
-       echo " Pass the following command line paremeters to the script:"
-       echo ""
-       echo "-step <n>     : n-th migration step"
-       echo "-host <host>  : the destination host"
-       echo "-domname <domain name> : name of the domain that is migrating"
-       echo "-type <device type>    : the type of device that is migrating"
-       echo "-recover               : indicates recovery request; an error"
-       echo "                         occurred during migration"
-       echo "-help                  : display this help screen"
+function ext_dev_migrate_usage() {
+cat <<EOF
+Pass the following command line parameters to the script:
+
+-step <n>              : n-th migration step
+-host <host>           : the destination host
+-domname <domain name> : name of the domain that is migrating
+-type <device type>    : the type of device that is migrating
+-subtype <dev. subtype>: the subtype of the device
+-recover               : indicates recovery request; an error
+                         occurred during migration
+-help                  : display this help screen
+EOF
 }
 
-while [ 1 ]; do
-       if [ "$1" == "-step" ]; then
+# Parse the command line paramters. The following parameters must be
+# passed as the first ones in the sequence:
+#  -step       [required]
+#  -host       [required]
+#  -domname    [required]
+#  -type       [required]
+#  -subtype    [optional]
+#  -recover    [optional]
+# The remaining ones will be passed to the called function.
+function evaluate_params()
+{
+       local step host domname typ recover filename func stype
+       stype=""
+       while [ 1 ]; do
+               if [ "$1" == "-step" ]; then
+                       shift
+                       step=$1
+               elif [ "$1" == "-host" ]; then
+                       shift
+                       host=$1
+               elif [ "$1" == "-domname" ]; then
+                       shift
+                       domname=$1
+               elif [ "$1" == "-type" ]; then
+                       shift
+                       typ=$1
+               elif [ "$1" == "-subtype" ]; then
+                       shift
+                       stype="_$1"
+               elif [ "$1" == "-recover" ]; then
+                       recover=1
+               elif [ "$1" == "-help" ]; then
+                       ext_dev_migrate_usage
+                       exit
+               else
+                       break
+               fi
                shift
-               step=$1
-       elif [ "$1" == "-host" ]; then
-               shift
-               host=$1
-       elif [ "$1" == "-domname" ]; then
-               shift
-               domname=$1
-       elif [ "$1" == "-type" ]; then
-               shift
-               typ=$1
-       elif [ "$1" == "-recover" ]; then
-               recover=1
-       elif [ "$1" == "-help" ]; then
-               usage
+       done
+
+       if [ "$step"    == "" -o \
+            "$host"    == "" -o \
+            "$typ"     == "" -o \
+            "$domname" == "" ]; then
+               echo "Error: Parameter(s) missing (-step/-host/-type/-domname)"
+               echo ""
+               echo "$0 -help for usage."
                exit
+       fi
+
+       filename="$dir/$typ$stype-migration.sh"
+       if [ ! -r $filename ]; then
+               echo "Error: Could not find script '$filename'"
+               return
+       fi
+       . "$filename"
+
+       if [ "$recover" == "1" ]; then
+               func="$typ"_recover
+               eval $func $host $domname $step $*
        else
-               break
+               func="$typ"_migration_step
+               eval $func $host $domname $step $*
        fi
-       shift
-done
+}
 
-if [ "$step"    == "" -o \
-     "$host"    == "" -o \
-     "$typ"     == "" -o \
-     "$domname" == "" ]; then
-       echo "Error: Parameter(s) missing (-step/-host/-type/-domname)"
-set
-       echo ""
-       echo "$0 --help for usage."
-       exit
-fi
-
-. "$dir/$typ-migration.sh"
-
-if [ "$recover" == "1" ]; then
-       func="$typ"_recover
-       eval $func $host $domname $step
-else
-       func="$typ"_migration_step
-       eval $func $host $domname $step
-fi
+evaluate_params $*
diff -r 0ee5869b4894 -r 8685b64538fa tools/examples/vtpm
--- a/tools/examples/vtpm       Wed May 10 15:58:16 2006 +0100
+++ b/tools/examples/vtpm       Wed May 10 16:01:34 2006 +0100
@@ -23,5 +23,6 @@ if [ $vtpm_fatal_error -eq 0 ]; then
 if [ $vtpm_fatal_error -eq 0 ]; then
        log debug "Successful vTPM operation '$command'."
        success
+else
+       fatal "Error while executing vTPM operation '$command'."
 fi
-
diff -r 0ee5869b4894 -r 8685b64538fa tools/examples/vtpm-common.sh
--- a/tools/examples/vtpm-common.sh     Wed May 10 15:58:16 2006 +0100
+++ b/tools/examples/vtpm-common.sh     Wed May 10 16:01:34 2006 +0100
@@ -64,8 +64,10 @@ fi
 #  Returns '0' if instance number could not be found, otherwise
 #  it returns the instance number in the variable 'instance'
 function vtpmdb_find_instance () {
-       local vmname=$1
-       local ret=0
+       local vmname ret instance
+       vmname=$1
+       ret=0
+
        instance=$(cat $VTPMDB |                   \
                  awk -vvmname=$vmname             \
                  '{                               \
@@ -86,8 +88,9 @@ function vtpmdb_find_instance () {
 # Check whether a particular instance number is still available
 # returns "0" if it is not available, "1" otherwise.
 function vtpmdb_is_free_instancenum () {
-       local instance=$1
-       local avail=1
+       local instance instances avail i
+       instance=$1
+       avail=1
        #Allowed instance number range: 1-255
        if [ $instance -eq 0 -o $instance -gt 255 ]; then
                avail=0
@@ -113,9 +116,7 @@ function vtpmdb_is_free_instancenum () {
 # Get an available instance number given the database
 # Returns an unused instance number
 function vtpmdb_get_free_instancenum () {
-       local ctr
-       local instances
-       local don
+       local ctr instances don found
        instances=$(cat $VTPMDB |                \
                   gawk                          \
                   '{                            \
@@ -126,7 +127,6 @@ function vtpmdb_get_free_instancenum () 
        ctr=1
        don=0
        while [ $don -eq 0 ]; do
-               local found
                found=0
                for i in $instances; do
                        if [ $i -eq $ctr ]; then
@@ -147,8 +147,9 @@ function vtpmdb_get_free_instancenum () 
 
 # Add a domain name and instance number to the DB file
 function vtpmdb_add_instance () {
-       local vmname=$1
-       local inst=$2
+       local res vmname inst
+       vmname=$1
+       inst=$2
 
        if [ ! -f $VTPMDB ]; then
                echo "#Database for VM to vTPM association" > $VTPMDB
@@ -165,9 +166,10 @@ function vtpmdb_add_instance () {
 #Validate whether an entry is the same as passed to this
 #function
 function vtpmdb_validate_entry () {
-       local rc=0
-       local vmname=$1
-       local inst=$2
+       local res rc vmname inst
+       rc=0
+       vmname=$1
+       inst=$2
 
        res=$(cat $VTPMDB |            \
             gawk -vvmname=$vmname     \
@@ -188,9 +190,9 @@ function vtpmdb_validate_entry () {
             }')
 
        if [ "$res" == "1" ]; then
-               let rc=1
+               rc=1
        elif [ "$res" == "2" ]; then
-               let rc=2
+               rc=2
        fi
        echo "$rc"
 }
@@ -199,9 +201,11 @@ function vtpmdb_validate_entry () {
 #Remove an entry from the vTPM database given its domain name
 #and instance number
 function vtpmdb_remove_entry () {
-       local vmname=$1
-       local instance=$2
-       local VTPMDB_TMP="$VTPMDB".tmp
+       local vmname instance VTPMDB_TMP
+       vmname=$1
+       instance=$2
+       VTPMDB_TMP="$VTPMDB".tmp
+
        $(cat $VTPMDB |            \
         gawk -vvmname=$vmname     \
         '{                        \
@@ -219,13 +223,14 @@ function vtpmdb_remove_entry () {
 
 
 # Find the reason for the creation of this device:
-# Set global REASON variable to 'resume' or 'create'
+# Returns 'resume' or 'create'
 function vtpm_get_create_reason () {
-       local resume=$(xenstore-read $XENBUS_PATH/resume)
+       local resume
+       resume=$(xenstore-read $XENBUS_PATH/resume)
        if [ "$resume" == "True" ]; then
-               REASON="resume"
-       else
-               REASON="create"
+               echo "resume"
+       else
+               echo "create"
        fi
 }
 
@@ -234,10 +239,9 @@ function vtpm_get_create_reason () {
 # If no entry in the TPM database is found, the instance is
 # created and an entry added to the database.
 function vtpm_create_instance () {
-       local domname=$(xenstore_read "$XENBUS_PATH"/domain)
-       local res
-       local instance
-       vtpm_get_create_reason
+       local res instance domname reason
+       domname=$(xenstore_read "$XENBUS_PATH"/domain)
+       reason=$(vtpm_get_create_reason)
 
        claim_lock vtpmdb
        instance=$(vtpmdb_find_instance $domname)
@@ -252,20 +256,20 @@ function vtpm_create_instance () {
                else
                        instance=$(vtpmdb_get_free_instancenum)
                fi
-               vtpmdb_add_instance $domname $instance
-               if [ "$REASON" == "create" ]; then
+               if [ "$reason" == "create" ]; then
                        vtpm_create $instance
-               elif [ "$REASON" == "resume" ]; then
+               else
                        vtpm_resume $instance $domname
-               else
-                       #default case for 'now'
-                       vtpm_create $instance
+               fi
+               if [ $vtpm_fatal_error -eq 0 ]; then
+                       vtpmdb_add_instance $domname $instance
                fi
        fi
 
        release_lock vtpmdb
 
-       if [ "$REASON" == "create" ]; then
+       if [ $vtpm_fatal_error -eq 0 -a \
+            "$reason" == "create" ]; then
                vtpm_reset $instance
        fi
        xenstore_write $XENBUS_PATH/instance $instance
@@ -276,15 +280,18 @@ function vtpm_create_instance () {
 #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)
-
-       claim_lock vtpmdb
-
-       instance=$(vtpmdb_find_instance $domname)
-
-       if [ "$instance" != "0" ]; then
-               if [ "$REASON" == "suspend" ]; then
-                       vtpm_suspend $instance
+       local instance reason domname
+       domname=$(xenstore_read "$XENBUS_PATH"/domain)
+
+       if [ "$doname" != "" ]; then
+               claim_lock vtpmdb
+
+               instance=$(vtpmdb_find_instance $domname)
+
+               if [ "$instance" != "0" ]; then
+                       if [ "$reason" == "suspend" ]; then
+                               vtpm_suspend $instance
+                       fi
                fi
        fi
 
@@ -295,7 +302,7 @@ function vtpm_remove_instance () {
 #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
+       local instance
 
        claim_lock vtpmdb
 
@@ -313,20 +320,21 @@ function vtpm_delete_instance () {
 #  "0"  : this is not an address of this machine
 #  "1"  : this is an address local to this machine
 function isLocalAddress() {
-       local addr=$(ping $1 -c 1 |  \
-                    gawk '{ print substr($3,2,length($3)-2); exit }')
+       local addr res
+       addr=$(ping $1 -c 1 |  \
+              gawk '{ print substr($3,2,length($3)-2); exit }')
        if [ "$addr" == "" ]; then
                echo "-1"
                return
        fi
-       local res=$(ifconfig | grep "inet addr" |  \
-                  gawk -vaddr=$addr               \
-                  '{                              \
-                     if ( addr == substr($2, 6)) {\
-                       print "1";                 \
-                     }                            \
-                  }'                              \
-                 )
+       res=$(ifconfig | grep "inet addr" |  \
+            gawk -vaddr=$addr               \
+            '{                              \
+               if ( addr == substr($2, 6)) {\
+                 print "1";                 \
+               }                            \
+            }'                              \
+           )
        if [ "$res" == "" ]; then
                echo "0"
                return
@@ -341,7 +349,8 @@ function isLocalAddress() {
 # 2nd: name of the domain to migrate
 # 3rd: the migration step to perform
 function vtpm_migration_step() {
-       local instance=$(vtpmdb_find_instance $2)
+       local instance res
+       instance=$(vtpmdb_find_instance $2)
        if [ "$instance" == "" ]; then
                echo "Error: Translation of domain name ($2) to instance 
failed. Check /etc/xen/vtpm.db"
                log err "Error during translation of domain name"
@@ -360,6 +369,7 @@ function vtpm_migration_step() {
 # 2nd: name of the domain that was to be migrated
 # 3rd: the last successful migration step that was done
 function vtpm_recover() {
+       local res
        res=$(isLocalAddress $1)
        if [ "$res" == "0" ]; then
                vtpm_migrate_recover $1 $2 $3

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Fix a couple of problems in the TPM backend driver., Xen patchbot-unstable <=