[PATCH] nvme: add optional ipv6 test flavor

Sagi Grimberg sagi at grimberg.me
Sun Jun 26 07:32:08 PDT 2022


Allow Setting nvme_adrfam=[ipv4|ipv6] and running tests on either
address family. Ignored for non IP transports.

Signed-off-by: Sagi Grimberg <sagi at grimberg.me>
---
 common/multipath-over-rdma | 10 ++++++++++
 tests/nvme/rc              | 31 ++++++++++++++++++++++++++++---
 2 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/common/multipath-over-rdma b/common/multipath-over-rdma
index f9d7b9a236ce..4307ceb4aae1 100644
--- a/common/multipath-over-rdma
+++ b/common/multipath-over-rdma
@@ -74,6 +74,16 @@ get_ipv6_addr() {
 		sed -n 's/.*[[:blank:]]inet6[[:blank:]]*\([^[:blank:]/]*\).*/\1/p'
 }
 
+# grab only the link local address
+get_ipv6_ll_addr() {
+	if [ ! -e "/sys/class/net/$1" ]; then
+		echo "get_ipv6_addr(): $1 is not a network interface" 1>&2
+	fi
+	ll_addr=$(ip -6 -o addr show dev "$1" | grep "scope link" |
+		sed -n 's/.*[[:blank:]]inet6[[:blank:]]*\([^[:blank:]/]*\).*/\1/p')
+	echo "$ll_addr%$1"
+}
+
 # Whether or not $1 is a number.
 is_number() {
 	[ "$1" -eq "0$1" ] 2>/dev/null
diff --git a/tests/nvme/rc b/tests/nvme/rc
index 998b18164306..b36cc19ec3c1 100644
--- a/tests/nvme/rc
+++ b/tests/nvme/rc
@@ -38,6 +38,24 @@ _nvme_requires() {
 		SKIP_REASON="unsupported nvme_trtype=${nvme_trtype}"
 		return 1
 	esac
+
+	if [[ ! -z ${nvme_adrfam} ]]; then
+		case ${nvme_adrfam} in
+		ipv6)
+			def_traddr="::1"
+			def_adrfam="ipv6"
+			;;
+		ipv4)
+			;; # was already set
+		*)
+			# ignore for non ip transports
+			if [[ "${nvme_trtype}" == "tcp" || "${nvme_trtype}" == "rdma" ]]; then
+				SKIP_REASON="unsupported nvme_adrfam=${nvme_adrfam}"
+				return 1
+			fi
+		esac
+	fi
+
 	return 0
 }
 
@@ -148,9 +166,16 @@ _setup_nvmet() {
 		start_soft_rdma
 		for i in $(rdma_network_interfaces)
 		do
-			ipv4_addr=$(get_ipv4_addr "$i")
-			if [ -n "${ipv4_addr}" ]; then
-				def_traddr=${ipv4_addr}
+			if [[ "${nvme_adrfam}" == "ipv6" ]]; then
+				ipv6_addr=$(get_ipv6_ll_addr "$i")
+				if [ -n "${ipv6_addr}" ]; then
+					def_traddr=${ipv6_addr}
+				fi
+			else
+				ipv4_addr=$(get_ipv4_addr "$i")
+				if [ -n "${ipv4_addr}" ]; then
+					def_traddr=${ipv4_addr}
+				fi
 			fi
 		done
 	fi
-- 
2.34.1




More information about the Linux-nvme mailing list