[PATCH blktests 09/10] nvme: add testcase for TLS-encrypted connections
Shin'ichiro Kawasaki
shinichiro.kawasaki at wdc.com
Wed Apr 2 00:09:05 PDT 2025
From: Hannes Reinecke <hare at suse.de>
TCP connections can be encrypted using in-kernel TLS, so add a
testcase to exercise the various combinations.
Signed-off-by: Hannes Reinecke <hare at suse.de>
[Shin'ichiro: added _have_libnvme_ver and _have_systemd_tlshd_service]
[Shin'ichiro: used _systemctl_start and _systemctl_stop]
[Shin'ichiro: fixed file mode]
Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki at wdc.com>
---
tests/nvme/060 | 95 ++++++++++++++++++++++++++++++++++++++++++++++
tests/nvme/060.out | 10 +++++
tests/nvme/rc | 14 +++++++
3 files changed, 119 insertions(+)
create mode 100755 tests/nvme/060
create mode 100644 tests/nvme/060.out
diff --git a/tests/nvme/060 b/tests/nvme/060
new file mode 100755
index 0000000..d7424ac
--- /dev/null
+++ b/tests/nvme/060
@@ -0,0 +1,95 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-3.0+
+# Copyright (C) 2024 Hannes Reinecke, SUSE Labs
+#
+# Create TLS-encrypted connections
+
+. tests/nvme/rc
+
+DESCRIPTION="Create TLS-encrypted connections"
+QUICK=1
+
+requires() {
+ _nvme_requires
+ _have_loop
+ _have_kernel_option NVME_TCP_TLS
+ _have_kernel_option NVME_TARGET_TCP_TLS
+ _require_kernel_nvme_fabrics_feature tls
+ _require_nvme_trtype tcp
+ _require_nvme_cli_tls
+ _have_libnvme_ver 1 11
+ _have_systemd_tlshd_service
+}
+
+set_conditions() {
+ _set_nvme_trtype "$@"
+}
+
+test() {
+ echo "Running ${TEST_NAME}"
+
+ _setup_nvmet
+
+ local hostkey
+ local ctrl
+
+ hostkey=$(nvme gen-tls-key -n "${def_hostnqn}" -c "${def_subsysnqn}" -m 1 -I 1 -i 2> /dev/null)
+ if [ -z "$hostkey" ] ; then
+ echo "nvme gen-tls-key failed"
+ return 1
+ fi
+
+ _systemctl_start tlshd
+
+ _nvmet_target_setup --blkdev file --tls
+
+ # Test unencrypted connection
+ echo "Test unencrypted connection w/ tls not required"
+ _nvme_connect_subsys
+
+ ctrl=$(_find_nvme_dev "${def_subsysnqn}")
+ if _nvme_ctrl_tls_key "$ctrl" > /dev/null; then
+ echo "WARNING: connection is encrypted"
+ fi
+
+ _nvme_disconnect_subsys
+
+ # Test encrypted connection
+ echo "Test encrypted connection w/ tls not required"
+ _nvme_connect_subsys --tls
+
+ ctrl=$(_find_nvme_dev "${def_subsysnqn}")
+ if ! _nvme_ctrl_tls_key "$ctrl" > /dev/null ; then
+ echo "WARNING: connection is not encrypted"
+ fi
+
+ _nvme_disconnect_subsys
+
+ # Reset target configuration
+ _nvmet_target_cleanup
+
+ _nvmet_target_setup --blkdev file --force-tls
+
+ # Test unencrypted connection
+ echo "Test unencrypted connection w/ tls required (should fail)"
+ _nvme_connect_subsys
+
+ _nvme_disconnect_subsys
+
+ # Test encrypted connection
+ echo "Test encrypted connection w/ tls required"
+ _nvme_connect_subsys --tls
+
+ ctrl=$(_find_nvme_dev "${def_subsysnqn}")
+ if ! _nvme_ctrl_tls_key "$ctrl" > /dev/null; then
+ echo "WARNING: connection is not encrypted"
+ fi
+
+ _nvme_disconnect_subsys
+
+ _nvmet_target_cleanup
+
+ _systemctl_stop
+
+ echo "Test complete"
+}
diff --git a/tests/nvme/060.out b/tests/nvme/060.out
new file mode 100644
index 0000000..b2975bb
--- /dev/null
+++ b/tests/nvme/060.out
@@ -0,0 +1,10 @@
+Running nvme/060
+Test unencrypted connection w/ tls not required
+disconnected 1 controller(s)
+Test encrypted connection w/ tls not required
+disconnected 1 controller(s)
+Test unencrypted connection w/ tls required (should fail)
+disconnected 0 controller(s)
+Test encrypted connection w/ tls required
+disconnected 1 controller(s)
+Test complete
diff --git a/tests/nvme/rc b/tests/nvme/rc
index e52437f..ac3949a 100644
--- a/tests/nvme/rc
+++ b/tests/nvme/rc
@@ -175,6 +175,14 @@ _require_nvme_cli_auth() {
return 0
}
+_require_nvme_cli_tls() {
+ if ! nvme gen-tls-key --subsysnqn nvmf-test-subsys > /dev/null 2>&1; then
+ SKIP_REASON+=("nvme gen-tls-key command missing")
+ return 1
+ fi
+ return 0
+}
+
_require_kernel_nvme_fabrics_feature() {
local feature="$1"
@@ -630,3 +638,9 @@ _have_libnvme_ver() {
fi
return 0
}
+
+_nvme_ctrl_tls_key() {
+ local ctrl="$1"
+
+ cat /sys/class/nvme/"$ctrl"/tls_key 2>/dev/null
+}
--
2.49.0
More information about the Linux-nvme
mailing list