[Stgt-devel] [Patch 2/2] Add-ability-to-dynamically-set-SCSI-Inquiry-params - Try 4
FUJITA Tomonori
fujita.tomonori
Sat Jun 9 09:12:03 CEST 2007
From: Mark Harvey <markh794 at gmail.com>
Subject: Re: [Stgt-devel] [Patch 2/2] Add-ability-to-dynamically-set-SCSI-Inquiry-params - Try 4
Date: Mon, 04 Jun 2007 20:09:53 +1000
> >From 1db73f345c86e59bb3f616b44fbe761e104690e9 Mon Sep 17 00:00:00 2001
> From: Mark Harvey <markh794 at gmail.com>
> Date: Sat, 2 Jun 2007 17:57:34 +1000
> Subject: [PATCH] Add ability to dynamically set SCSI Inquiry params
>
> Added support to configure:
> Vendor Identification
> Product Identification
> Product Revision
> Format of returned 'sense data'
> Define if the lu is capable of supporting removable media
> Define/set if the lu is online / offline.
>
> All params are passed using the 'tgtadm' utility:
>
> VendorIdent="string"
> ProductIdent="string"
> ProductRev="string"
> Removable=<0|1> - 0 == non-removable, 1 == removable media
> SenseFormat=<0|1> - 0 == Clasic sense format, 1 == Support descriptor format
> Online=<0|1> - 0 == Unit offline, 1 == Unit Online
>
> e.g.
> tgtadm --lld iscsi --mode logicalunit --op update --tid <TID> --lun <LUN> \
> --params VendorIdent=QUANTUM,ProductIdent=HD100,ProductRev=0010
> tgtadm --lld iscsi --mode logicalunit --op update --tid <TID> --lun <LUN> \
> --params Removable=1,SenseFormat=1,Online=1
>
> Example script (scripts/tgt-core-test) to set up HDD & CD device.
>
> Signed-off-by: Mark Harvey <markh794 at gmail.com>
>
> diff --git a/scripts/tgt-core-test b/scripts/tgt-core-test
> new file mode 100755
> index 0000000..d529849
> --- /dev/null
> +++ b/scripts/tgt-core-test
> @@ -0,0 +1,73 @@
> +#!/bin/bash
> +
> +P=`ps -ef|grep -v grep|grep tgtd|wc -l`
> +if [ "X"$P == "X0" ]; then
> + tgtd -d 1
> + sleep 1
> +fi
> +
> +if [ ! -d /d/01 ]; then
> + mkdir -p /d/01
> +fi
> +
> +if [ ! -f /d/01/hd_block ]; then
> + dd if=/dev/zero of=/d/01/hd_block bs=1M count=8
> +fi
> +if [ ! -f /d/01/cd_block0 ]; then
> + dd if=/dev/zero of=/d/01/cd_block0 bs=1M count=8
> +fi
> +if [ ! -f /d/01/cd_block1 ]; then
> + dd if=/dev/zero of=/d/01/cd_block1 bs=1M count=8
> +fi
> +if [ ! -f /d/01/cd_block2 ]; then
> + dd if=/dev/zero of=/d/01/cd_block2 bs=1M count=8
> +fi
> +
> +set -x
> +
> +###################################################################################
> +# Set up SBC HDD device
> +###################################################################################
> +TID=1
> +
> +tgtadm --lld iscsi --mode target --op new --tid $TID \
> + -T iqn.2007-03:marks-vtl_sbc:`hostname` --target-type disk
> +
> +sleep 1
> +tgtadm --lld iscsi --mode logicalunit --op new --tid $TID --lun 0 -b /d/01/hd_block
> +
> +tgtadm --lld iscsi --mode logicalunit --op update --tid $TID --lun 0 --params scsi_sn=FRED00,scsi_id=Fred
> +
> +tgtadm --lld iscsi --mode logicalunit --op update --tid $TID --lun 0 \
> + --params VendorIdent=QUANTUM,ProductIdent=HD100,ProductRev=0010,Removable=1,SenseFormat=0
> +
> +
> +tgtadm --lld iscsi --mode target --op bind --tid $TID -I ALL
> +
> +
> +###################################################################################
> +# Set up MMC CD/DVD device
> +###################################################################################
> +TID=2
> +
> +tgtadm --lld iscsi --mode target --op new --tid $TID \
> + -T iqn.2007-03:marks-vtl_mmc:`hostname` --target-type cd
> +
> +sleep 1
> +tgtadm --lld iscsi --mode logicalunit --op new --tid $TID --lun 0 -b /d/01/cd_block0
> +tgtadm --lld iscsi --mode logicalunit --op update --tid $TID --lun 0 \
> + --params VendorIdent=VirtualCD,ProductIdent=CD101,ProductRev=0010,scsi_sn=XYZZY10,Removable=1
> +
> +tgtadm --lld iscsi --mode logicalunit --op new --tid $TID --lun 1 -b /d/01/cd_block1
> +tgtadm --lld iscsi --mode logicalunit --op update --tid $TID --lun 1 \
> + --params VendorIdent=VirtualCD,ProductIdent=CD101,ProductRev=0010,scsi_sn=XYZZY11,Removable=1
> +
> +tgtadm --lld iscsi --mode logicalunit --op new --tid $TID --lun 2 -b /d/01/cd_block2
> +tgtadm --lld iscsi --mode logicalunit --op update --tid $TID --lun 2 \
> + --params VendorIdent=VirtualCD,ProductIdent=CD101,ProductRev=0010,scsi_sn=XYZZY12,Removable=1
> +
> +tgtadm --lld iscsi --mode target --op bind --tid $TID -I ALL
> +
> +tgtadm --lld iscsi --mode target --op show
> +
> +
> diff --git a/usr/spc.c b/usr/spc.c
> index 32a9ff7..a29811e 100644
> --- a/usr/spc.c
> +++ b/usr/spc.c
> @@ -283,18 +283,29 @@ int spc_illegal_op(int host_no, struct scsi_cmd *cmd)
> }
>
> enum {
> - Opt_scsiid, Opt_scsisn, Opt_err,
> + Opt_scsiid, Opt_scsisn,
> + Opt_VendorIdent, Opt_ProductIdent,
> + Opt_ProductRev, Opt_SenseFormat,
> + Opt_Removable, Opt_Online,
> + Opt_err,
> };
>
> static match_table_t tokens = {
> {Opt_scsiid, "scsi_id=%s"},
> {Opt_scsisn, "scsi_sn=%s"},
> + {Opt_VendorIdent, "VendorIdent=%s"},
> + {Opt_ProductIdent, "ProductIdent=%s"},
> + {Opt_ProductRev, "ProductRev=%s"},
> + {Opt_SenseFormat, "SenseFormat=%s"},
> + {Opt_Removable, "Removable=%s"},
> + {Opt_Online, "Online=%s"},
> {Opt_err, NULL},
> };
I think that we need naming consistency here.
> int spc_lu_config(struct scsi_lu *lu, char *params) {
> int err = 0;
> char *p;
> + char buf[20];
>
> if (!strncmp("targetOps", params, 9))
> params = params + 10;
> @@ -315,6 +326,30 @@ int spc_lu_config(struct scsi_lu *lu, char *params) {
> match_strncpy(lu->attributes->scsi_sn, &args[0],
> sizeof(lu->attributes->scsi_sn) - 1);
> break;
> + case Opt_VendorIdent:
> + match_strncpy(lu->attributes->vendor_ident, &args[0],
> + sizeof(lu->attributes->vendor_ident));
> + break;
> + case Opt_ProductIdent:
> + match_strncpy(lu->attributes->product_ident, &args[0],
> + sizeof(lu->attributes->product_ident));
> + break;
> + case Opt_ProductRev:
> + match_strncpy(lu->attributes->product_rev, &args[0],
> + sizeof(lu->attributes->product_rev));
> + break;
> + case Opt_SenseFormat:
> + match_strncpy(buf, &args[0], sizeof(buf));
> + lu->attributes->sense_format = atoi(buf);
> + break;
> + case Opt_Removable:
> + match_strncpy(buf, &args[0], sizeof(buf));
> + lu->attributes->is_removable = atoi(buf);
> + break;
> + case Opt_Online:
> + match_strncpy(buf, &args[0], sizeof(buf));
> + lu->attributes->online = atoi(buf);
> + break;
> default:
> err = TGTADM_INVALID_REQUEST;
> }
> --
> 1.5.1.3
>
More information about the stgt
mailing list