FUJITA Tomonori
2006-Aug-02 08:32 UTC
[Xen-devel] [PATCH 5/6] User-space scripts for scsifront/back drivers
# HG changeset patch # User fujita.tomonori@lab.ntt.co.jp # Node ID 6d90075b4fefbe3f12b241f39a1b3959cc3bbeab # Parent 3749a0e2580a668bfb029fb0348e9f89660becd6 User-space scripts for SCSI frontend and backend drivers This includes the Python, udev scripts, etc. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> diff -r 3749a0e2580a -r 6d90075b4fef tools/examples/Makefile --- a/tools/examples/Makefile Wed Aug 02 15:03:05 2006 +0900 +++ b/tools/examples/Makefile Wed Aug 02 15:08:23 2006 +0900 @@ -25,6 +25,7 @@ XEN_SCRIPTS += network-route vif-route XEN_SCRIPTS += network-route vif-route XEN_SCRIPTS += network-nat vif-nat XEN_SCRIPTS += block +XEN_SCRIPTS += scsi XEN_SCRIPTS += block-enbd block-nbd XEN_SCRIPTS += vtpm vtpm-delete XEN_SCRIPTS += xen-hotplug-cleanup diff -r 3749a0e2580a -r 6d90075b4fef tools/examples/xen-backend.agent --- a/tools/examples/xen-backend.agent Wed Aug 02 15:03:05 2006 +0900 +++ b/tools/examples/xen-backend.agent Wed Aug 02 15:08:23 2006 +0900 @@ -7,6 +7,9 @@ claim_lock xenbus_hotplug_global claim_lock xenbus_hotplug_global case "$XENBUS_TYPE" in + scsi) + /etc/xen/scripts/scsi "$ACTION" + ;; vbd) /etc/xen/scripts/block "$ACTION" ;; diff -r 3749a0e2580a -r 6d90075b4fef tools/examples/xen-backend.rules --- a/tools/examples/xen-backend.rules Wed Aug 02 15:03:05 2006 +0900 +++ b/tools/examples/xen-backend.rules Wed Aug 02 15:08:23 2006 +0900 @@ -1,3 +1,4 @@ SUBSYSTEM=="xen-backend", KERNEL=="vbd*" +SUBSYSTEM=="xen-backend", KERNEL=="scsi*", RUN+="/etc/xen/scripts/scsi $env{ACTION}" SUBSYSTEM=="xen-backend", KERNEL=="vbd*", RUN+="/etc/xen/scripts/block $env{ACTION}" SUBSYSTEM=="xen-backend", KERNEL=="vtpm*", RUN+="/etc/xen/scripts/vtpm $env{ACTION}" SUBSYSTEM=="xen-backend", KERNEL=="vif*", ACTION=="online", RUN+="$env{script} online" diff -r 3749a0e2580a -r 6d90075b4fef tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Wed Aug 02 15:03:05 2006 +0900 +++ b/tools/python/xen/xend/XendDomainInfo.py Wed Aug 02 15:08:23 2006 +0900 @@ -1693,8 +1693,9 @@ def addControllerClass(device_class, cls controllerClasses[device_class] = cls -from xen.xend.server import blkif, netif, tpmif, pciif, iopif, irqif, usbif +from xen.xend.server import blkif, scsiif, netif, tpmif, pciif, iopif, irqif, usbif addControllerClass(''vbd'', blkif.BlkifController) +addControllerClass(''scsi'', scsiif.SCSIifController) addControllerClass(''vif'', netif.NetifController) addControllerClass(''vtpm'', tpmif.TPMifController) addControllerClass(''pci'', pciif.PciController) diff -r 3749a0e2580a -r 6d90075b4fef tools/python/xen/xm/create.py --- a/tools/python/xen/xm/create.py Wed Aug 02 15:03:05 2006 +0900 +++ b/tools/python/xen/xm/create.py Wed Aug 02 15:08:23 2006 +0900 @@ -246,6 +246,11 @@ gopts.var(''disk'', val=''phy:DEV,VDEV,MODE backend driver domain to use for the disk. The option may be repeated to add more than one disk.""") +gopts.var(''scsi'', val=''TYPE:DEV,MODE'', + fn=append_value, default=[], + use="""Add a hba and disk device to a domain. The physical device is DEV, + which is exported.""") + gopts.var(''pci'', val=''BUS:DEV.FUNC'', fn=append_value, default=[], use="""Add a PCI device to a domain, using given params (in hex). @@ -488,6 +493,15 @@ def configure_disks(config_devs, vals): if backend: config_vbd.append([''backend'', backend]) config_devs.append([''device'', config_vbd]) + +def configure_scsi(config_devs, vals): + """Create the config for a SCSI HBA. + """ + for (dev, mode) in vals.scsi: + config_scsi = [''scsi'', + [''dev'', dev ], + [''mode'', mode ] ] + config_devs.append([''device'', config_scsi]) def configure_pci(config_devs, vals): """Create the config for pci devices. @@ -683,6 +697,7 @@ def make_config(vals): config_devs = [] configure_disks(config_devs, vals) + configure_scsi(config_devs, vals) configure_pci(config_devs, vals) configure_ioports(config_devs, vals) configure_irq(config_devs, vals) @@ -708,6 +723,19 @@ def preprocess_disk(vals): err(''Invalid disk specifier: '' + v) disk.append(d) vals.disk = disk + +def preprocess_scsi(vals): + if not vals.scsi: return + scsi = [] + for v in vals.scsi: + d = v.split('','') + n = len(d) + if n == 2: + pass + else: + err(''Invalid scsi specifier: '' + v) + scsi.append(d) + vals.scsi = scsi def preprocess_pci(vals): if not vals.pci: return @@ -864,6 +892,7 @@ def preprocess(vals): if not vals.kernel and not vals.bootloader: err("No kernel specified") preprocess_disk(vals) + preprocess_scsi(vals) preprocess_pci(vals) preprocess_ioports(vals) preprocess_ip(vals) diff -r 3749a0e2580a -r 6d90075b4fef tools/examples/scsi --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/examples/scsi Wed Aug 02 15:08:23 2006 +0900 @@ -0,0 +1,24 @@ +#!/bin/sh + +dir=$(dirname "$0") +. "$dir/block-common.sh" + +log debug "udev event." + +case "$command" in + add) + done=$(xenstore_read_default "$XENBUS_PATH/scsi" ''MISSING'') + if [ "$done" != ''MISSING'' ] + then + exit 0 + fi + + xenstore_write "$XENBUS_PATH/scsi" "info" + success + ;; + remove) + # TODO + ;; +esac + +exit 0 diff -r 3749a0e2580a -r 6d90075b4fef tools/python/xen/xend/server/scsiif.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/python/xen/xend/server/scsiif.py Wed Aug 02 15:08:23 2006 +0900 @@ -0,0 +1,56 @@ +#===========================================================================+# 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 +#===========================================================================+# Copyright (C) 2004 Mike Wray <mike.wray@hp.com> +# Copyright (C) 2004 Intel Research Cambridge +# Copyright (C) 2004 Mark Williamson <mark.williamson@cl.cam.ac.uk> +# Copyright (C) 2005 XenSource Ltd +#===========================================================================+ + +"""Support for SCSI HBAs. +""" + +import re +import string + +from xen.xend import sxp +from xen.xend.XendError import VmError + +from xen.xend.server.DevController import DevController + +class SCSIifController(DevController): + """SCSI HBAs. + """ + + def __init__(self, vm): + """Create a SCSI HBA. + """ + DevController.__init__(self, vm) + + + def getDeviceDetails(self, config): + """@see DevController.getDeviceDetails""" + + mode = sxp.child_value(config, ''mode'') + (typ, dev) = string.split(sxp.child_value(config, ''dev''), '':'', 1) + back = { ''type'' : typ, + ''dev'' : dev, + ''mode'' : mode, + } + + devid = self.allocateDeviceID() + front = { ''scsi'' : "%i" % devid } + + return (devid, back, front) _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel