On 07/31/2015 04:14 PM, Jason Gunthorpe wrote:
Do you by chance have a straightforward recipe to setup SRP and SRPT on two Linux's for this simple purpose?
Some time ago I wrote a script that loads the upstream SRP target driver and creates two LUNs for local RAM disks (attached to this e-mail). The only disadvantage of that script is that it is based on the obsolete lio-utils package.
In case you would prefer the SCST SRP target driver, the following instructions should be sufficient to build, install, load and configure it on an RPM based system (please replace the GUID shown below by a GUID of a port of the HCA in your the target system):
svn co svn://svn.code.sf.net/p/scst/svn/trunk scst-trunk || git clone https://github.com/bvanassche/scst.git scst-trunk cd scst-trunk make rpm su rpm -U {,scstadmin/}rpmbuilddir/RPMS/x86_64/*.rpm cat <<EOF >/etc/scst.conf HANDLER vdisk_blockio { DEVICE brd { filename /dev/ram0 } } TARGET_DRIVER ib_srpt { TARGET fe80:0000:0000:0000:24be:05ff:ffa9:cbb1 { enabled 1 LUN 0 brd } } EOF modprobe brd /etc/init.d/scst restart Bart.
#!/bin/bash filesize=$((16*1024*1024)) hcas="$(cat /sys/devices/*/*/*/infiniband/*/ports/*/gids/0 | sed 's/^\(....\):\(....\):\(....\):\(....\):\(....\):\(....\):\(....\):\(....\)$/0x0000\2\3\4\5\6\7\8 0x\5\6\7\8 0x\1\2\3\4\5\6\7\8/')" # Output of cat /sys/devices/*/*/*/infiniband/*/ports/*/gids/0 on the remote # systems initiators="\ 0x00000000000000000002c9030003cca7 \ 0x00000000000000000002c9030003cca8 \ 0x00000000000000000002c9030005f34f \ 0x00000000000000000002c9030005f350 \ 0x00000000000000000002c90300a34271 \ 0x00000000000000000002c90300a34272 \ 0x00000000000000000002c90300fab7f1 \ 0x00000000000000000002c90300fab7f2" if [ ! -e /sys/module/configfs ]; then modprobe configfs fi if ! mount | grep -qw configfs; then mount -t configfs none /sys/kernel/config fi if cd /sys/kernel/config/target >&/dev/null; then for hca in ${hcas}; do if [ -e srpt/$hca/$hca/enable ]; then echo 0 >srpt/$hca/$hca/enable fi done fi cd / rm -f /sys/kernel/config/target/srpt/*/*/acls/*/*/* >&/dev/null rmdir /sys/kernel/config/target/srpt/*/*/acls/*/* >&/dev/null rmdir /sys/kernel/config/target/srpt/*/*/acls/* >&/dev/null rm -f /sys/kernel/config/target/srpt/*/*/lun/*/* >&/dev/null rmdir /sys/kernel/config/target/srpt/*/*/lun/* >&/dev/null rmdir /sys/kernel/config/target/srpt/*/* >&/dev/null rmdir /sys/kernel/config/target/srpt/* >&/dev/null rmdir /sys/kernel/config/target/srpt >&/dev/null if [ -e /sys/module/ib_srpt ]; then rmmod ib_srpt fi rmdir /sys/kernel/config/target/core/*/* >&/dev/null rmdir /sys/kernel/config/target/core/* >&/dev/null #find /sys/kernel/config/target for m in ib_srpt target_core_pscsi target_core_iblock target_core_file target_core_stgt target_core_user target_core_mod do if [ -e /sys/module/$m ]; then rmmod $m fi done if [ "$1" = "stop" ]; then exit 0 fi modprobe target_core_mod if [ -e /sys/kernel/debug/dynamic_debug/control ]; then #echo 'module target_core_mod +p' > /sys/kernel/debug/dynamic_debug/control : fi insmod /lib/modules/$(uname -r)/kernel/drivers/infiniband/ulp/srpt/ib_srpt.ko srp_max_req_size=4200 || exit $? if [ -e /sys/kernel/debug/dynamic_debug/control ]; then echo 'module ib_srpt +p' > /sys/kernel/debug/dynamic_debug/control fi modprobe target_core_file || exit $? if [ ! -e /dev/ramdisk ]; then dd if=/dev/zero of=/dev/ramdisk bs=${filesize} count=1 fi if false && cd /sys/kernel/debug/tracing; then echo function >current_tracer { echo 'srpt_*'; echo 'transport_*'; } >set_ftrace_filter echo 1 >tracing_on fi vdev0="fileio_0/vdev0" vdev1="fileio_1/vdev2" vdev2="rd_dr_0/vdev1" vdevs="$vdev0 $vdev1" vdev_count=2 tcm_node --fileio $vdev0 /dev/ramdisk ${filesize} tcm_node --fileio $vdev1 /dev/ramdisk 65536 if [ -e /sys/kernel/config/target/core/rd_dr_0 ]; then tcm_node --ramdisk $vdev2 2 vdevs="$vdevs vdev2" vdev_count=3 fi cd /sys/kernel/config/target || exit $? mkdir srpt || exit $? cd srpt || exit $? for hca in ${hcas}; do mkdir $hca [ -e $hca ] || continue echo $hca mkdir $hca/$hca i=0 for v in ${vdevs}; do mkdir $hca/$hca/lun/lun_$i ( cd $hca/$hca/lun/lun_$i && ln -s ../../../../../core/$v ) i=$((i+1)) done for ini in ${initiators}; do ( cd $hca/$hca/acls mkdir ${ini} cd ${ini} for ((i = 0; i < $vdev_count; i++)) do ( mkdir lun_$i && cd lun_$i && ln -s ../../../lun/lun_$i ) done ) echo 1 >$hca/$hca/enable done done