Commit b4ba2c40 authored by Krzysztof Karas's avatar Krzysztof Karas Committed by Jim Harris
Browse files

nvmf: Add PSK path to JSON configuration.



Add path to PSK file, passed via `nvmf_subsystem_add_host`
RPC, to JSON configuraion.

Change-Id: I246f64d6a9222ac4e5ca6a520de14105b27aeb37
Signed-off-by: default avatarKrzysztof Karas <krzysztof.karas@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/18282


Community-CI: Mellanox Build Bot
Reviewed-by: default avatarBen Walker <ben@nvidia.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
parent d040ae7e
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -415,6 +415,14 @@ struct spdk_nvmf_transport_ops {
	void (*subsystem_remove_host)(struct spdk_nvmf_transport *transport,
				      const struct spdk_nvmf_subsystem *subsystem,
				      const char *hostnqn);

	/*
	 * A callback used to dump subsystem's host data for a specific transport.
	 * This callback is optional and not all transports need to implement it.
	 */
	void (*subsystem_dump_host)(struct spdk_nvmf_transport *transport,
				    const struct spdk_nvmf_subsystem *subsystem,
				    const char *hostnqn, struct spdk_json_write_ctx *w);
};

/**
+7 −0
Original line number Diff line number Diff line
@@ -462,6 +462,7 @@ nvmf_write_subsystem_config_json(struct spdk_json_write_ctx *w,
	struct spdk_nvmf_ns_opts ns_opts;
	uint32_t max_namespaces;
	char uuid_str[SPDK_UUID_STRING_LEN];
	struct spdk_nvmf_transport *transport;

	if (spdk_nvmf_subsystem_get_type(subsystem) != SPDK_NVMF_SUBTYPE_NVME) {
		return;
@@ -505,6 +506,12 @@ nvmf_write_subsystem_config_json(struct spdk_json_write_ctx *w,
		spdk_json_write_named_string(w, "nqn", spdk_nvmf_subsystem_get_nqn(subsystem));
		spdk_json_write_named_string(w, "host", spdk_nvmf_host_get_nqn(host));

		TAILQ_FOREACH(transport, &subsystem->tgt->transports, link) {
			if (transport->ops->subsystem_dump_host != NULL) {
				transport->ops->subsystem_dump_host(transport, subsystem, host->nqn, w);
			}
		}

		/*     } "params" */
		spdk_json_write_object_end(w);

+30 −0
Original line number Diff line number Diff line
@@ -3695,6 +3695,14 @@ nvmf_tcp_subsystem_add_host(struct spdk_nvmf_transport *transport,
		entry->psk_size = rc;
	}

	rc = snprintf(entry->psk_path, sizeof(entry->psk_path), "%s", opts.psk);
	if (rc < 0 || (size_t)rc >= sizeof(entry->psk_path)) {
		SPDK_ERRLOG("Could not save PSK path!\n");
		rc = -ENAMETOOLONG;
		free(entry);
		goto end;
	}

	TAILQ_INSERT_TAIL(&ttransport->psks, entry, link);
	rc = 0;

@@ -3730,6 +3738,27 @@ nvmf_tcp_subsystem_remove_host(struct spdk_nvmf_transport *transport,
	}
}

static void
nvmf_tcp_subsystem_dump_host(struct spdk_nvmf_transport *transport,
			     const struct spdk_nvmf_subsystem *subsystem, const char *hostnqn,
			     struct spdk_json_write_ctx *w)
{
	struct spdk_nvmf_tcp_transport *ttransport;
	struct tcp_psk_entry *entry;

	assert(transport != NULL);
	assert(subsystem != NULL);

	ttransport = SPDK_CONTAINEROF(transport, struct spdk_nvmf_tcp_transport, transport);
	TAILQ_FOREACH(entry, &ttransport->psks, link) {
		if ((strncmp(entry->hostnqn, hostnqn, SPDK_NVMF_NQN_MAX_LEN)) == 0 &&
		    (strncmp(entry->subnqn, subsystem->subnqn, SPDK_NVMF_NQN_MAX_LEN)) == 0) {
			spdk_json_write_named_string(w, "psk", entry->psk_path);
			break;
		}
	}
}

static void
nvmf_tcp_opts_init(struct spdk_nvmf_transport_opts *opts)
{
@@ -3776,6 +3805,7 @@ const struct spdk_nvmf_transport_ops spdk_nvmf_transport_tcp = {
	.qpair_abort_request = nvmf_tcp_qpair_abort_request,
	.subsystem_add_host = nvmf_tcp_subsystem_add_host,
	.subsystem_remove_host = nvmf_tcp_subsystem_remove_host,
	.subsystem_dump_host = nvmf_tcp_subsystem_dump_host,
};

SPDK_NVMF_TRANSPORT_REGISTER(tcp, &spdk_nvmf_transport_tcp);
+12 −0
Original line number Diff line number Diff line
@@ -185,5 +185,17 @@ nvmfappstart -m 0x2

NOT setup_nvmf_tgt $key_long_path

# Test #9 - test saving/loading JSON configuration by connecting to bdevperf
killprocess $nvmfpid
chmod 0600 $key_long_path

nvmfappstart -m 0x2
setup_nvmf_tgt $key_long_path
tgtconf=$($rpc_py save_config)
killprocess $nvmfpid

nvmfappstart -m 0x2 -c <(echo "$tgtconf")
run_bdevperf nqn.2016-06.io.spdk:cnode1 nqn.2016-06.io.spdk:host1 "$key_long_path"

trap - SIGINT SIGTERM EXIT
cleanup