From: Hannes Reinecke Date: Tue, 30 Aug 2022 09:11:18 +0000 (+0200) Subject: nvme/rc: Enable fcloop X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=c63e103ef98df49e44e1f7a08a0066df88576ff3;p=users%2Fsagi%2Fblktests.git nvme/rc: Enable fcloop Add functions to allow tests to run on fcloop as a transport. Signed-off-by: Hannes Reinecke [dwagner: - fixup shellcheck reports - addressed review feedback from Shin'ichiro] Signed-off-by: Daniel Wagner --- diff --git a/tests/nvme/rc b/tests/nvme/rc index ff13ea2..da99646 100644 --- a/tests/nvme/rc +++ b/tests/nvme/rc @@ -10,6 +10,10 @@ def_traddr="127.0.0.1" def_adrfam="ipv4" def_trsvcid="4420" +def_remote_wwnn="0x10001100aa000001" +def_remote_wwpn="0x20001100aa000001" +def_local_wwnn="0x10001100aa000002" +def_local_wwpn="0x20001100aa000002" def_hostnqn="$(cat /etc/nvme/hostnqn 2> /dev/null)" def_hostid="$(cat /etc/nvme/hostid 2> /dev/null)" nvme_trtype=${nvme_trtype:-"loop"} @@ -36,6 +40,12 @@ _nvme_requires() { _have_program rdma _have_driver rdma_rxe || _have_driver siw ;; + fc) + _have_driver nvme-fc + _have_driver nvme-fcloop + _have_configfs + def_adrfam="fc" + ;; *) SKIP_REASONS+=("unsupported nvme_trtype=${nvme_trtype}") return 1 @@ -49,6 +59,9 @@ _nvme_requires() { ;; ipv4) ;; # was already set + fc) + def_adrfam="fc" + ;; *) # ignore for non ip transports if [[ "${nvme_trtype}" == "tcp" || @@ -112,6 +125,82 @@ _test_dev_nvme_nsid() { cat "${TEST_DEV_SYSFS}/nsid" } +_nvme_fcloop_add_rport() { + local local_wwnn="$1" + local local_wwpn="$2" + local remote_wwnn="$3" + local remote_wwpn="$4" + local loopctl=/sys/class/fcloop/ctl + + echo "wwnn=${remote_wwnn},wwpn=${remote_wwpn},lpwwnn=${local_wwnn},lpwwpn=${local_wwpn},roles=0x60" > ${loopctl}/add_remote_port +} + +_nvme_fcloop_add_lport() { + local wwnn="$1" + local wwpn="$2" + local loopctl=/sys/class/fcloop/ctl + + echo "wwnn=${wwnn},wwpn=${wwpn}" > ${loopctl}/add_local_port +} + +_nvme_fcloop_add_tport() { + local wwnn="$1" + local wwpn="$2" + local loopctl=/sys/class/fcloop/ctl + + echo "wwnn=${wwnn},wwpn=${wwpn}" > ${loopctl}/add_target_port +} + +_setup_fcloop() { + local local_wwnn="${1:-$def_local_wwnn}" + local local_wwpn="${2:-$def_local_wwpn}" + local remote_wwnn="${3:-$def_remote_wwnn}" + local remote_wwpn="${4:-$def_remote_wwpn}" + + _nvme_fcloop_add_tport "${remote_wwnn}" "${remote_wwpn}" + _nvme_fcloop_add_lport "${local_wwnn}" "${local_wwpn}" + _nvme_fcloop_add_rport "${local_wwnn}" "${local_wwpn}" \ + "${remote_wwnn}" "${remote_wwpn}" +} + +_nvme_fcloop_del_rport() { + local local_wwnn="$1" + local local_wwpn="$2" + local remote_wwnn="$3" + local remote_wwpn="$4" + local loopctl=/sys/class/fcloop/ctl + + echo "wwnn=${remote_wwnn},wwpn=${remote_wwpn}" > ${loopctl}/del_remote_port 2> /dev/null +} + +_nvme_fcloop_del_lport() { + local wwnn="$1" + local wwpn="$2" + local loopctl=/sys/class/fcloop/ctl + + echo "wwnn=${wwnn},wwpn=${wwpn}" > ${loopctl}/del_local_port 2> /dev/null +} + +_nvme_fcloop_del_tport() { + local wwnn="$1" + local wwpn="$2" + local loopctl=/sys/class/fcloop/ctl + + echo "wwnn=${wwnn},wwpn=${wwpn}" > ${loopctl}/del_target_port 2> /dev/null +} + +_cleanup_fcloop() { + local local_wwnn="${1:-$def_local_wwnn}" + local local_wwpn="${2:-$def_local_wwpn}" + local remote_wwnn="${3:-$def_remote_wwnn}" + local remote_wwpn="${4:-$def_remote_wwpn}" + + _nvme_fcloop_del_rport "${local_wwnn}" "${local_wwpn}" \ + "${remote_wwnn}" "${remote_wwpn}" + _nvme_fcloop_del_tport "${remote_wwnn}" "${remote_wwpn}" + _nvme_fcloop_del_lport "${local_wwnn}" "${local_wwpn}" +} + _cleanup_nvmet() { local dev local port @@ -170,6 +259,10 @@ _cleanup_nvmet() { if [[ "${nvme_trtype}" == "rdma" ]]; then stop_soft_rdma fi + if [[ "${nvme_trtype}" == "fc" ]]; then + _cleanup_fcloop "${def_local_wwnn}" "${def_local_wwpn}" \ + "${def_remote_wwnn}" "${def_remote_wwpn}" + fi } _setup_nvmet() { @@ -196,6 +289,18 @@ _setup_nvmet() { fi done fi + if [[ "${nvme_trtype}" = "fc" ]]; then + modprobe -q nvme-fcloop + _setup_fcloop "${def_local_wwnn}" "${def_local_wwpn}" \ + "${def_remote_wwnn}" "${def_remote_wwpn}" + + def_traddr=$(printf "nn-%s:pn-%s" \ + "${def_remote_wwnn}" \ + "${def_remote_wwpn}") + def_host_traddr=$(printf "nn-%s:pn-%s" \ + "${def_local_wwnn}" \ + "${def_local_wwpn}") + fi } _nvme_disconnect_ctrl() { @@ -214,6 +319,7 @@ _nvme_connect_subsys() { local trtype="$1" local subsysnqn="$2" local traddr="${3:-$def_traddr}" + local host_traddr="${4:-$def_host_traddr}" local trsvcid="${4:-$def_trsvcid}" local hostnqn="${5:-$def_hostnqn}" local hostid="${6:-$def_hostid}" @@ -221,7 +327,9 @@ _nvme_connect_subsys() { local ctrlkey="${8}" ARGS=(-t "${trtype}" -n "${subsysnqn}") - if [[ "${trtype}" != "loop" ]]; then + if [[ "${trtype}" == "fc" ]] ; then + ARGS+=(-a "${traddr}" -w "${host_traddr}") + elif [[ "${trtype}" != "loop" ]]; then ARGS+=(-a "${traddr}" -s "${trsvcid}") fi if [[ "${hostnqn}" != "$def_hostnqn" ]]; then @@ -242,10 +350,13 @@ _nvme_connect_subsys() { _nvme_discover() { local trtype="$1" local traddr="${2:-$def_traddr}" + local host_traddr="${3:-$def_host_traddr}" local trsvcid="${3:-$def_trsvcid}" ARGS=(-t "${trtype}") - if [[ "${trtype}" != "loop" ]]; then + if [[ "${trtype}" = "fc" ]]; then + ARGS+=(-a "${traddr}" -w "${host_traddr}") + elif [[ "${trtype}" != "loop" ]]; then ARGS+=(-a "${traddr}" -s "${trsvcid}") fi nvme discover "${ARGS[@]}" @@ -268,7 +379,9 @@ _create_nvmet_port() { echo "${trtype}" > "${NVMET_CFS}/ports/${port}/addr_trtype" echo "${traddr}" > "${NVMET_CFS}/ports/${port}/addr_traddr" echo "${adrfam}" > "${NVMET_CFS}/ports/${port}/addr_adrfam" - echo "${trsvcid}" > "${NVMET_CFS}/ports/${port}/addr_trsvcid" + if [[ "${adrfam}" != "fc" ]]; then + echo "${trsvcid}" > "${NVMET_CFS}/ports/${port}/addr_trsvcid" + fi echo "${port}" }