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