Testing the hotplug external script path at the moment involves actually setting up one of the alternate datapaths (blktap, iscsi, &c). Simplify testing by making a script which does a simple loopback, but still has a target that can't be used directly.
To use: script=block-dummy,vdev=xvda,target=dummy:<file> Signed-off-by: George Dunlap <george.dun...@eu.citrix.com> --- CC: Ian Campbell <ian.campb...@citrix.com> CC: Ian Jackson <ian.jack...@citrix.com> CC: Wei Liu <wei.l...@citrix.com> CC: Roger Pau Monne <roger....@citrix.com> --- tools/hotplug/Linux/Makefile | 1 + tools/hotplug/Linux/block-dummy | 107 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 tools/hotplug/Linux/block-dummy diff --git a/tools/hotplug/Linux/Makefile b/tools/hotplug/Linux/Makefile index 6e10118..dcfd58a 100644 --- a/tools/hotplug/Linux/Makefile +++ b/tools/hotplug/Linux/Makefile @@ -27,6 +27,7 @@ XEN_SCRIPTS += vscsi XEN_SCRIPTS += block-iscsi XEN_SCRIPTS += block-tap XEN_SCRIPTS += block-drbd-probe +XEN_SCRIPTS += block-dummy XEN_SCRIPTS += $(XEN_SCRIPTS-y) SUBDIRS-$(CONFIG_SYSTEMD) += systemd diff --git a/tools/hotplug/Linux/block-dummy b/tools/hotplug/Linux/block-dummy new file mode 100644 index 0000000..57d40b5 --- /dev/null +++ b/tools/hotplug/Linux/block-dummy @@ -0,0 +1,107 @@ +#!/bin/bash -e +# +# dummy Xen block device hotplug script +# +# Author George Dunlap <george.dun...@eu.citrix.com> +# +# Based on block-iscsi by Roger Pau Monné <roger....@citrix.com> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; version 2.1 only. with the special +# exception on linking described in file LICENSE. +# +# This program 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. +# +# Usage: +# +# Target should be specified using the following syntax: +# +# script=block-dummy,vdev=xvda,target=dummy:<file> + +dir=$(dirname "$0") +. "$dir/block-common.sh" + +check_tools() +{ + if ! command -v losetup > /dev/null 2>&1; then + fatal "Unable to find losetup" + fi +} + +# Sets the following global variables based on the params field passed in as +# a parameter: type file +parse_target() +{ + params=($(echo "$1" | tr ":" "\n")) + + type=${params[0]} + file=${params[1]} + if [ -z "$type" ] || [ -z "$file" ]; then + fatal "Cannot parse required parameters" + fi + + if [ "$type" != "dummy" ] ; then + fatal "Invalid type: $type" + fi +} + +# Attaches the device and writes xenstore backend entries to connect +# the device +add() +{ + test -f "$file" || fatal "$file does not exist." + + loopdev=$(losetup -f 2>/dev/null || find_free_loopback_dev) + if [ "$loopdev" = '' ] + then + fatal 'Failed to find an unused loop device' + fi + + if LANG=C losetup -h 2>&1 | grep read-only >/dev/null + then + roflag="-$mode"; roflag="${roflag#-w}"; roflag="${roflag#-!}" + else + roflag='' + fi + + do_or_die losetup $roflag "$loopdev" "$file" + # FIXME Is this OK? + xenstore_write "$XENBUS_PATH/node" "$loopdev" + write_dev "$loopdev" +} + +# Disconnects the device +remove() +{ + node=$(xenstore_read "$XENBUS_PATH/node") + losetup -d "$node" +} + +command=$1 +target=$(xenstore-read $XENBUS_PATH/params || true) +if [ -z "$target" ]; then + fatal "No information about the target" +fi + +parse_target "$target" + +mode=$(xenstore_read "$XENBUS_PATH/mode") +mode=$(canonicalise_mode "$mode") + +check_tools || exit 1 + +case $command in +add) + add + ;; +remove) + remove + ;; +*) + exit 1 + ;; +esac -- 1.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel