Index: root/xen-unstable.hg/tools/examples/vtpm-common.sh =================================================================== --- root.orig/xen-unstable.hg/tools/examples/vtpm-common.sh +++ root/xen-unstable.hg/tools/examples/vtpm-common.sh @@ -24,12 +24,9 @@ VTPMDB="/etc/xen/vtpm.db" #In the vtpm-impl file some commands should be defined: # vtpm_create, vtpm_setup, vtpm_start, etc. (see below) -#This should be indicated by setting VTPM_IMPL_DEFINED. if [ -r "$dir/vtpm-impl" ]; then . "$dir/vtpm-impl" -fi - -if [ -z "$VTPM_IMPL_DEFINED" ]; then +else function vtpm_create () { true } @@ -245,6 +242,12 @@ function vtpm_create_instance () { claim_lock vtpmdb instance=$(vtpmdb_find_instance $domname) + + if [ "$instance" == "0" -a "$reason" != "create" ]; then + release_lock vtpmdb + return + fi + if [ "$instance" == "0" ]; then #Try to give the preferred instance to the domain instance=$(xenstore_read "$XENBUS_PATH"/pref_instance) @@ -317,7 +320,7 @@ function vtpm_delete_instance () { # "-1" : the given machine name is invalid # "0" : this is not an address of this machine # "1" : this is an address local to this machine -function isLocalAddress() { +function vtpm_isLocalAddress() { local addr res addr=$(ping $1 -c 1 | \ gawk '{ print substr($3,2,length($3)-2); exit }') @@ -347,7 +350,7 @@ function isLocalAddress() { # 2nd: name of the domain to migrate # 3rd: the migration step to perform function vtpm_migration_step() { - local res=$(isLocalAddress $1) + local res=$(vtpm_isLocalAddress $1) if [ "$res" == "0" ]; then vtpm_migrate $1 $2 $3 fi @@ -361,8 +364,39 @@ function vtpm_migration_step() { # 3rd: the last successful migration step that was done function vtpm_recover() { local res - res=$(isLocalAddress $1) + res=$(vtpm_isLocalAddress $1) if [ "$res" == "0" ]; then vtpm_migrate_recover $1 $2 $3 fi } + + +#Determine the domain id given a domain's name. +#1st parameter: name of the domain +#return value: domain id or -1 if domain id could not be determined +function vtpm_domid_from_name () { + local id name ids + ids=$(xenstore-list /local/domain) + for id in $ids; do + name=$(xenstore-read /local/domain/$id/name) + if [ "$name" == "$1" ]; then + echo "$id" + return + fi + done + echo "-1" +} + + +#Add a virtual TPM instance number and its associated domain name +#to the VTPMDB file and activate usage of this virtual TPM instance +#by writing the instance number into the xenstore +#1st parm: name of virtual machine +#2nd parm: instance of assoicate virtual TPM +function vtpm_add_and_activate() { + local domid=$(vtpm_domid_from_name $1) + if [ "$domid" != "-1" ]; then + vtpmdb_add_instance $1 $2 + xenstore-write backend/vtpm/$domid/0/instance $2 + fi +} Index: root/xen-unstable.hg/tools/examples/vtpm-addtodb =================================================================== --- root.orig/xen-unstable.hg/tools/examples/vtpm-addtodb +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -# This script must be called with the following parameters to have -# an entry added to the TPM-to-domain associations table in /etc/xen/vtpm.db -# vtpm-addtodb - -dir=$(dirname "$0") -. "$dir/vtpm-common.sh" - -vtpmdb_add_instance $1 $2 Index: root/xen-unstable.hg/tools/examples/Makefile =================================================================== --- root.orig/xen-unstable.hg/tools/examples/Makefile +++ root/xen-unstable.hg/tools/examples/Makefile @@ -26,7 +26,7 @@ XEN_SCRIPTS += network-route vif-route XEN_SCRIPTS += network-nat vif-nat XEN_SCRIPTS += block XEN_SCRIPTS += block-enbd block-nbd -XEN_SCRIPTS += vtpm vtpm-delete vtpm-addtodb +XEN_SCRIPTS += vtpm vtpm-delete XEN_SCRIPTS += xen-hotplug-cleanup XEN_SCRIPTS += external-device-migrate XEN_SCRIPT_DATA = xen-script-common.sh locking.sh logging.sh Index: root/xen-unstable.hg/tools/examples/README =================================================================== --- root.orig/xen-unstable.hg/tools/examples/README +++ root/xen-unstable.hg/tools/examples/README @@ -25,7 +25,6 @@ vif-common.sh - sourced by vif-bri vif-nat - xen virtual network start/stop script in NAT mode vif-route - xen virtual network start/stop script in routed mode vtpm - called by xen-backend.agent to bind/unbind vTPM devices -vtpm-addtodb - script for adding a vTPM instance to the vTPM table vtpm-common.sh - common code for vTPM handling vtpm-delete - remove an entry from the vTPM table given the domain's name Index: root/xen-unstable.hg/tools/examples/vtpm-impl =================================================================== --- root.orig/xen-unstable.hg/tools/examples/vtpm-impl +++ root/xen-unstable.hg/tools/examples/vtpm-impl @@ -32,8 +32,6 @@ # OF THE POSSIBILITY OF SUCH DAMAGE. # =================================================================== -VTPM_IMPL_DEFINED=1 - # | SRC | TAG | CMD SIZE | ORD | type| mode TPM_CMD_OPEN=\\x00\\x00\\x00\\x00\\x01\\xc1\\x00\\x00\\x00\\x10\\x01\\x00\\x00\\x01\\x01\\x01 TPM_CMD_RESM=\\x00\\x00\\x00\\x00\\x01\\xc1\\x00\\x00\\x00\\x10\\x01\\x00\\x00\\x01\\x01\\x02