[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] The attached patch allows external devices to migrate. The patch



# HG changeset patch
# User emellor@xxxxxxxxxxxxxxxxxxxxxx
# Node ID 6af7b456e6845ca14362a9e0553d6a6722ba7b6e
# Parent  42358db788fdbf648e9595ed468e7089077fd3a1
The attached patch allows external devices to migrate. The patch
contains code that allows to at least detect local migration of a
virtual machine and handles this for the virtual TPM (results in a no-op
for local migr.). If migration of a virtual machine with attached vTPM
to another machine is attempted, XenD will return an error.

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

diff -r 42358db788fd -r 6af7b456e684 tools/examples/Makefile
--- a/tools/examples/Makefile   Fri Apr 21 10:44:54 2006 +0100
+++ b/tools/examples/Makefile   Fri Apr 21 11:54:12 2006 +0100
@@ -28,9 +28,11 @@ XEN_SCRIPTS += block-enbd block-nbd
 XEN_SCRIPTS += block-enbd block-nbd
 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
 XEN_SCRIPT_DATA += xen-hotplug-common.sh xen-network-common.sh vif-common.sh
 XEN_SCRIPT_DATA += block-common.sh vtpm-common.sh vtpm-hotplug-common.sh
+XEN_SCRIPT_DATA += vtpm-migration.sh
 
 XEN_HOTPLUG_DIR = /etc/hotplug
 XEN_HOTPLUG_SCRIPTS = xen-backend.agent
diff -r 42358db788fd -r 6af7b456e684 tools/examples/vtpm-common.sh
--- a/tools/examples/vtpm-common.sh     Fri Apr 21 10:44:54 2006 +0100
+++ b/tools/examples/vtpm-common.sh     Fri Apr 21 11:54:12 2006 +0100
@@ -46,6 +46,12 @@ if [ -z "$VTPM_IMPL_DEFINED" ]; then
                true
        }
        function vtpm_delete() {
+               true
+       }
+       function vtpm_migrate() {
+               echo "Error: vTPM migration accross machines not implemented."
+       }
+       function vtpm_migrate_recover() {
                true
        }
 fi
@@ -300,3 +306,62 @@ function vtpm_delete_instance () {
 
        release_lock vtpmdb
 }
+
+# Determine whether the given address is local to this machine
+# Return values:
+#  "-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() {
+       local 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";                 \
+                     }                            \
+                  }'                              \
+                 )
+       if [ "$res" == "" ]; then
+               echo "0"
+               return
+       fi
+       echo "1"
+}
+
+# Perform a migration step. This function differentiates between migration
+# to the local host or to a remote machine.
+# Parameters:
+# 1st: destination host to migrate to
+# 2nd: name of the domain to migrate
+# 3rd: the migration step to perform
+function vtpm_migration_step() {
+       local 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"
+       else
+               res=$(isLocalAddress $1)
+               if [ "$res" == "0" ]; then
+                       vtpm_migrate $1 $2 $3
+               fi
+       fi
+}
+
+# Recover from migration due to an error. This function differentiates
+# between migration to the local host or to a remote machine.
+# Parameters:
+# 1st: destination host the migration was going to
+# 2nd: name of the domain that was to be migrated
+# 3rd: the last successful migration step that was done
+function vtpm_recover() {
+       res=$(isLocalAddress $1)
+       if [ "$res" == "0" ]; then
+               vtpm_migrate_recover $1 $2 $3
+       fi
+}
diff -r 42358db788fd -r 6af7b456e684 tools/examples/external-device-migrate
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/examples/external-device-migrate    Fri Apr 21 11:54:12 2006 +0100
@@ -0,0 +1,85 @@
+#!/bin/sh
+
+# Copyright (c) 2005 IBM Corporation
+#
+# 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
+#
+
+
+# This script is called by XenD for migration of external devices
+# It does not handle the migration of those devices itself, but
+# passes the requests on to further applications
+# It handles the low-level command line parsing and some of the
+# synchronization
+
+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"
+}
+
+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" == "-recover" ]; then
+               recover=1
+       elif [ "$1" == "-help" ]; then
+               usage
+               exit
+       else
+               break
+       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
diff -r 42358db788fd -r 6af7b456e684 tools/examples/vtpm-migration.sh
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/examples/vtpm-migration.sh  Fri Apr 21 11:54:12 2006 +0100
@@ -0,0 +1,19 @@
+#
+# Copyright (c) 2005 IBM Corporation
+#
+# 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/vtpm-common.sh"

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.