Commit d7958dd1 authored by Michal Berger's avatar Michal Berger Committed by Tomasz Zawadzki
Browse files

test/nvmf: Adjust the identify_kernel_nvmf test



Adjust configure_kernel_target() parameters to explicitly require proper
subsystem name and the target up. To that end, introduce small wrapper
for looking up available ip from the nvmftestinit() setup. Also, make
sure clean_kernel_target() returns nvmes back to userspace - this
aligns it with configure_kernel_target() behavior which does the
opposite.

Change-Id: I8123326a47df576f3a94c9d3f5aee12bbe03554d
Signed-off-by: default avatarMichal Berger <michal.berger@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/21700


Reviewed-by: default avatarMarek Chomnicki <marek.chomnicki@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
parent 46adadcf
Loading
Loading
Loading
Loading
+31 −8
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ NVME_HOSTID=${NVME_HOSTNQN##*:}
NVME_HOST=("--hostnqn=$NVME_HOSTNQN" "--hostid=$NVME_HOSTID")
NVME_CONNECT="nvme connect"
NET_TYPE=${NET_TYPE:-phy-fallback}
NVME_SUBNQN=nqn.2016-06.io.spdk:testnqn

function build_nvmf_app_args() {
	if [ $SPDK_RUN_NON_ROOT -eq 1 ]; then
@@ -617,8 +618,8 @@ remove_spdk_ns() {
}

configure_kernel_target() {
	local kernel_name=$1 kernel_target_ip=$2
	# Keep it global in scope for easier cleanup
	kernel_name=${1:-kernel_target}
	nvmet=/sys/kernel/config/nvmet
	kernel_subsystem=$nvmet/subsystems/$kernel_name
	kernel_namespace=$kernel_subsystem/namespaces/1
@@ -655,11 +656,7 @@ configure_kernel_target() {
	echo "$nvme" > "$kernel_namespace/device_path"
	echo 1 > "$kernel_namespace/enable"

	# By default use initiator ip which was set by nvmftestinit(). This is the
	# interface which resides in the main net namespace and which is visible
	# to nvmet.

	echo "$NVMF_INITIATOR_IP" > "$kernel_port/addr_traddr"
	echo "$kernel_target_ip" > "$kernel_port/addr_traddr"
	echo "$TEST_TRANSPORT" > "$kernel_port/addr_trtype"
	echo "$NVMF_PORT" > "$kernel_port/addr_trsvcid"
	echo ipv4 > "$kernel_port/addr_adrfam"
@@ -668,7 +665,7 @@ configure_kernel_target() {
	ln -s "$kernel_subsystem" "$kernel_port/subsystems/"

	# Check if target is available
	nvme discover "${NVME_HOST[@]}" -a "$NVMF_INITIATOR_IP" -t "$TEST_TRANSPORT" -s "$NVMF_PORT"
	nvme discover "${NVME_HOST[@]}" -a "$kernel_target_ip" -t "$TEST_TRANSPORT" -s "$NVMF_PORT"
}

clean_kernel_target() {
@@ -676,7 +673,7 @@ clean_kernel_target() {

	echo 0 > "$kernel_namespace/enable"

	rm -f "$kernel_port/subsystems/$kernel_name"
	rm -f "$kernel_port/subsystems/${kernel_subsystem##*/}"
	rmdir "$kernel_namespace"
	rmdir "$kernel_port"
	rmdir "$kernel_subsystem"
@@ -684,6 +681,9 @@ clean_kernel_target() {
	modules=(/sys/module/nvmet/holders/*)

	modprobe -r "${modules[@]##*/}" nvmet

	# Get back all nvmes to userspace
	"$rootdir/scripts/setup.sh"
}

format_interchange_psk() {
@@ -694,3 +694,26 @@ format_interchange_psk() {

	echo -n "NVMeTLSkey-1:$hash:$(base64 <(echo -n ${key}${crc})):"
}

get_main_ns_ip() {
	# Determine which ip to use based on nvmftestinit() setup. For tcp we pick
	# interface which resides in the main net namespace and which is visible
	# to nvmet under tcp setup. $NVMF_FIRST_TARGET_IP is solely for rdma use.
	# FIXME: This requires proper unification of the networking setup across
	# different transports.
	local ip
	local -A ip_candidates=()

	ip_candidates["rdma"]=NVMF_FIRST_TARGET_IP
	ip_candidates["tcp"]=NVMF_INITIATOR_IP

	[[ -z $TEST_TRANSPORT || -z ${ip_candidates["$TEST_TRANSPORT"]} ]] && return 1
	ip=${ip_candidates["$TEST_TRANSPORT"]}

	if [[ -z ${!ip} ]]; then
		echo "$ip not set, call nvmftestinit() first" >&2
		return 1
	fi

	echo "${!ip}"
}
+8 −53
Original line number Diff line number Diff line
@@ -10,65 +10,20 @@ source $rootdir/test/nvmf/common.sh

nvmftestinit

subsystemname=nqn.2016-06.io.spdk:testnqn
trap 'nvmftestfini || :; clean_kernel_target' EXIT

modprobe null_blk nr_devices=1
modprobe nvmet
modprobe nvmet-rdma
modprobe nvmet-fc
modprobe lpfc
target_ip=$(get_main_ns_ip)
configure_kernel_target "$NVME_SUBNQN" "$target_ip"

if [ ! -d /sys/kernel/config/nvmet/subsystems/$subsystemname ]; then
	mkdir /sys/kernel/config/nvmet/subsystems/$subsystemname
fi
echo 1 > /sys/kernel/config/nvmet/subsystems/$subsystemname/attr_allow_any_host

if [ ! -d /sys/kernel/config/nvmet/subsystems/$subsystemname/namespaces/1 ]; then
	mkdir /sys/kernel/config/nvmet/subsystems/$subsystemname/namespaces/1
fi

echo -n /dev/nullb0 > /sys/kernel/config/nvmet/subsystems/$subsystemname/namespaces/1/device_path
echo 1 > /sys/kernel/config/nvmet/subsystems/$subsystemname/namespaces/1/enable

if [ ! -d /sys/kernel/config/nvmet/ports/1 ]; then
	mkdir /sys/kernel/config/nvmet/ports/1
fi

echo -n rdma > /sys/kernel/config/nvmet/ports/1/addr_trtype
echo -n ipv4 > /sys/kernel/config/nvmet/ports/1/addr_adrfam
echo -n $NVMF_FIRST_TARGET_IP > /sys/kernel/config/nvmet/ports/1/addr_traddr
echo -n $NVMF_PORT > /sys/kernel/config/nvmet/ports/1/addr_trsvcid

ln -s /sys/kernel/config/nvmet/subsystems/$subsystemname /sys/kernel/config/nvmet/ports/1/subsystems/$subsystemname

sleep 4

$SPDK_BIN_DIR/spdk_nvme_identify -r "\
"$SPDK_BIN_DIR/spdk_nvme_identify" -r "\
	trtype:$TEST_TRANSPORT \
	adrfam:IPv4 \
	traddr:$NVMF_FIRST_TARGET_IP \
	traddr:$target_ip
	trsvcid:$NVMF_PORT \
	subnqn:nqn.2014-08.org.nvmexpress.discovery" -t all
	subnqn:nqn.2014-08.org.nvmexpress.discovery"
$SPDK_BIN_DIR/spdk_nvme_identify -r "\
	trtype:$TEST_TRANSPORT \
	adrfam:IPv4 \
	traddr:$NVMF_FIRST_TARGET_IP \
	traddr:$target_ip \
	trsvcid:$NVMF_PORT \
	subnqn:$subsystemname"

rm -rf /sys/kernel/config/nvmet/ports/1/subsystems/$subsystemname

echo 0 > /sys/kernel/config/nvmet/subsystems/$subsystemname/namespaces/1/enable
echo -n 0 > /sys/kernel/config/nvmet/subsystems/$subsystemname/namespaces/1/device_path

rmdir --ignore-fail-on-non-empty /sys/kernel/config/nvmet/subsystems/$subsystemname/namespaces/1
rmdir --ignore-fail-on-non-empty /sys/kernel/config/nvmet/subsystems/$subsystemname
rmdir --ignore-fail-on-non-empty /sys/kernel/config/nvmet/ports/1

rmmod lpfc
rmmod nvmet_fc
rmmod nvmet-rdma
rmmod null_blk
rmmod nvmet

nvmftestfini
	subnqn:$NVME_SUBNQN"
+7 −10
Original line number Diff line number Diff line
@@ -41,18 +41,17 @@ rabort() {

spdk_target() {
	local name=spdk_target
	local subnqn=nqn.2016-06.io.spdk:$name

	rpc_cmd bdev_nvme_attach_controller -t pcie -a "$nvme" -b "$name"

	rpc_cmd nvmf_create_transport $NVMF_TRANSPORT_OPTS -u 8192
	rpc_cmd nvmf_create_subsystem "$subnqn" -a -s "$NVMF_SERIAL"
	rpc_cmd nvmf_subsystem_add_ns "$subnqn" "${name}n1"
	rpc_cmd nvmf_subsystem_add_listener "$subnqn" -t "$TEST_TRANSPORT" -a "$NVMF_FIRST_TARGET_IP" -s "$NVMF_PORT"
	rpc_cmd nvmf_create_subsystem "$NVME_SUBNQN" -a -s "$NVMF_SERIAL"
	rpc_cmd nvmf_subsystem_add_ns "$NVME_SUBNQN" "${name}n1"
	rpc_cmd nvmf_subsystem_add_listener "$NVME_SUBNQN" -t "$TEST_TRANSPORT" -a "$NVMF_FIRST_TARGET_IP" -s "$NVMF_PORT"

	rabort "$TEST_TRANSPORT" IPv4 "$NVMF_FIRST_TARGET_IP" "$NVMF_PORT" "$subnqn"
	rabort "$TEST_TRANSPORT" IPv4 "$NVMF_FIRST_TARGET_IP" "$NVMF_PORT" "$NVME_SUBNQN"

	rpc_cmd nvmf_delete_subsystem "$subnqn"
	rpc_cmd nvmf_delete_subsystem "$NVME_SUBNQN"
	rpc_cmd bdev_nvme_detach_controller "$name"

	# Make sure we fully detached from the ctrl as vfio-pci won't be able to release the
@@ -63,10 +62,8 @@ spdk_target() {
}

kernel_target() {
	local name=kernel_target

	configure_kernel_target "$name"
	rabort "$TEST_TRANSPORT" IPv4 "$NVMF_INITIATOR_IP" "$NVMF_PORT" "$name"
	configure_kernel_target "$NVME_SUBNQN" "$(get_main_ns_ip)"
	rabort "$TEST_TRANSPORT" IPv4 "$NVMF_INITIATOR_IP" "$NVMF_PORT" "$NVME_SUBNQN"
	clean_kernel_target
}