1#!/usr/bin/env bash 2# SPDX-License-Identifier: BSD-3-Clause 3# Copyright (C) 2018 Intel Corporation 4# All rights reserved. 5# 6 7TARGET_NAME="iqn.2016-06.io.spdk:disk1" 8TARGET_ALIAS_NAME="disk1_alias" 9MALLOC_BDEV_SIZE=64 10MALLOC_BLOCK_SIZE=512 11 12function parse_cmd_line() { 13 OPTIND=0 14 DURING_DISCOVERY=0 15 DURING_LOGIN=0 16 BI_DIRECT=0 17 CHAP_USER="chapo" 18 CHAP_PASS="123456789123" 19 CHAP_MUSER="" 20 CHAP_MUSER="" 21 AUTH_GROUP_ID=1 22 23 while getopts ":t:u:s:r:m:dlb" opt; do 24 case ${opt} in 25 t) 26 AUTH_GROUP_ID=$OPTARG 27 ;; 28 u) 29 CHAP_USER=$OPTARG 30 ;; 31 s) 32 CHAP_PASS=$OPTARG 33 ;; 34 r) 35 CHAP_MUSER=$OPTARG 36 ;; 37 m) 38 CHAP_MPASS=$OPTARG 39 ;; 40 d) 41 DURING_DISCOVERY=1 42 ;; 43 l) 44 DURING_LOGIN=1 45 ;; 46 b) 47 BI_DIRECT=1 48 ;; 49 \?) 50 echo "Usage: config_chap_credentials_for_target/config_chap_credentials_for_initiator [-t auth_group id] \ 51 [-u user] [-s password] [-r muser] [-m mpassword] [-d] [-l] [-b]" 52 ;; 53 esac 54 done 55} 56 57function restart_iscsid() { 58 sleep 3 59 systemctl restart iscsid 60 sleep 1 61} 62 63function default_initiator_chap_credentials() { 64 iscsiadm -m node --logout || true 65 iscsiadm -m node -o delete || true 66 67 sed -i "s/^node.session.auth.authmethod = CHAP/#node.session.auth.authmethod = CHAP/" /etc/iscsi/iscsid.conf 68 sed -i "s/^node.session.auth.username =.*/#node.session.auth.username = username/" /etc/iscsi/iscsid.conf 69 sed -i "s/^node.session.auth.password =.*/#node.session.auth.password = password/" /etc/iscsi/iscsid.conf 70 sed -i "s/^node.session.auth.username_in =.*/#node.session.auth.username_in = username_in/" /etc/iscsi/iscsid.conf 71 sed -i "s/^node.session.auth.password_in =.*/#node.session.auth.password_in = password_in/" /etc/iscsi/iscsid.conf 72 73 sed -i 's/^discovery.sendtargets.auth.authmethod = CHAP/#discovery.sendtargets.auth.authmethod = CHAP/' /etc/iscsi/iscsid.conf 74 sed -i 's/^discovery.sendtargets.auth.username =.*/#discovery.sendtargets.auth.username = username/' /etc/iscsi/iscsid.conf 75 sed -i 's/^discovery.sendtargets.auth.password =.*/#discovery.sendtargets.auth.password = password/' /etc/iscsi/iscsid.conf 76 sed -i "s/^discovery.sendtargets.auth.username_in =.*/#discovery.sendtargets.auth.username_in = username_in/" /etc/iscsi/iscsid.conf 77 sed -i "s/^discovery.sendtargets.auth.password_in =.*/#discovery.sendtargets.auth.password_in = password_in/" /etc/iscsi/iscsid.conf 78 restart_iscsid 79 trap "trap - ERR; print_backtrace >&2" ERR 80} 81 82function config_chap_credentials_for_target() { 83 84 parse_cmd_line "$@" 85 #create auth group $AUTH_GROUP_ID 86 $rpc_py iscsi_create_auth_group $AUTH_GROUP_ID 87 #add secret + msecret to the auth group 88 if [ -z "$CHAP_MUSER" ] || [ -z "$CHAP_MPASS" ]; then 89 $rpc_py iscsi_auth_group_add_secret -u $CHAP_USER -s $CHAP_PASS $AUTH_GROUP_ID 90 else 91 $rpc_py iscsi_auth_group_add_secret -u $CHAP_USER -s $CHAP_PASS -m $CHAP_MUSER -r $CHAP_MPASS $AUTH_GROUP_ID 92 fi 93 94 #set chap authentication method during discovery phase 95 if [ $DURING_LOGIN -eq 1 ]; then 96 if [ $BI_DIRECT -eq 1 ]; then 97 $rpc_py iscsi_target_node_set_auth -g $AUTH_GROUP_ID -r -m $TARGET_NAME 98 else 99 $rpc_py iscsi_target_node_set_auth -g $AUTH_GROUP_ID -r $TARGET_NAME 100 fi 101 fi 102 if [ $DURING_DISCOVERY -eq 1 ]; then 103 if [ $BI_DIRECT -eq 1 ]; then 104 $rpc_py iscsi_set_discovery_auth -r -m -g $AUTH_GROUP_ID 105 else 106 $rpc_py iscsi_set_discovery_auth -r -g $AUTH_GROUP_ID 107 fi 108 fi 109} 110 111function config_chap_credentials_for_initiator() { 112 113 parse_cmd_line "$@" 114 default_initiator_chap_credentials 115 116 if [ $DURING_LOGIN -eq 1 ]; then 117 sed -i "s/#node.session.auth.authmethod = CHAP/node.session.auth.authmethod = CHAP/" /etc/iscsi/iscsid.conf 118 sed -i "s/#node.session.auth.username =.*/node.session.auth.username = ${CHAP_USER}/" /etc/iscsi/iscsid.conf 119 sed -i "s/#node.session.auth.password =.*/node.session.auth.password = ${CHAP_PASS}/" /etc/iscsi/iscsid.conf 120 if [ $BI_DIRECT -eq 1 ] && [ -n "$CHAP_MPASS" ] && [ -n "$CHAP_MUSER" ]; then 121 sed -i "s/#node.session.auth.username_in =.*/node.session.auth.username_in = ${CHAP_MUSER}/" /etc/iscsi/iscsid.conf 122 sed -i "s/#node.session.auth.password_in =.*/node.session.auth.password_in = ${CHAP_MPASS}/" /etc/iscsi/iscsid.conf 123 fi 124 fi 125 126 if [ $DURING_DISCOVERY -eq 1 ]; then 127 sed -i "s/#discovery.sendtargets.auth.authmethod = CHAP/discovery.sendtargets.auth.authmethod = CHAP/" /etc/iscsi/iscsid.conf 128 sed -i "s/#discovery.sendtargets.auth.username =.*/discovery.sendtargets.auth.username = ${CHAP_USER}/" /etc/iscsi/iscsid.conf 129 sed -i "s/#discovery.sendtargets.auth.password =.*/discovery.sendtargets.auth.password = ${CHAP_PASS}/" /etc/iscsi/iscsid.conf 130 if [ $BI_DIRECT -eq 1 ] && [ -n "$CHAP_MPASS" ] && [ -n "$CHAP_MUSER" ]; then 131 sed -i "s/#discovery.sendtargets.auth.username_in =.*/discovery.sendtargets.auth.username_in = ${CHAP_MUSER}/" /etc/iscsi/iscsid.conf 132 sed -i "s/#discovery.sendtargets.auth.password_in =.*/discovery.sendtargets.auth.password_in = ${CHAP_MPASS}/" /etc/iscsi/iscsid.conf 133 fi 134 fi 135 restart_iscsid 136 trap "trap - ERR; default_initiator_chap_credentials; print_backtrace >&2" ERR 137} 138 139function set_up_iscsi_target() { 140 timing_enter start_iscsi_tgt 141 "${ISCSI_APP[@]}" -m 0x2 -p 1 -s 512 --wait-for-rpc & 142 pid=$! 143 echo "iSCSI target launched. pid: $pid" 144 trap 'killprocess $pid;exit 1' SIGINT SIGTERM EXIT 145 waitforlisten $pid 146 $rpc_py iscsi_set_options -o 30 -a 4 147 $rpc_py framework_start_init 148 echo "iscsi_tgt is listening. Running tests..." 149 timing_exit start_iscsi_tgt 150 151 $rpc_py iscsi_create_portal_group $PORTAL_TAG $TARGET_IP:$ISCSI_PORT 152 $rpc_py iscsi_create_initiator_group $INITIATOR_TAG $INITIATOR_NAME $NETMASK 153 $rpc_py bdev_malloc_create $MALLOC_BDEV_SIZE $MALLOC_BLOCK_SIZE 154 $rpc_py iscsi_create_target_node $TARGET_NAME $TARGET_ALIAS_NAME 'Malloc0:0' $PORTAL_TAG:$INITIATOR_TAG 256 -d 155 sleep 1 156 trap 'killprocess $pid; iscsitestfini; exit 1' SIGINT SIGTERM EXIT 157} 158