Commit 1c830742 authored by Ben Walker's avatar Ben Walker Committed by Daniel Verkamp
Browse files

nvmf: Use spdk_nvme_transport_id



The NVMe-oF target was written before we defined
spdk_nvme_transport_id. Now that we have it, go back
and replace all of the locations where we individually
tracked traddr, trsvcid, trtype, etc. and use a trid.

Change-Id: I84334a12c7581f414c1e84680f122fe885a3b9dd
Signed-off-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/370744


Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
parent 29f6172a
Loading
Loading
Loading
Loading
+8 −13
Original line number Diff line number Diff line
@@ -428,8 +428,7 @@ spdk_nvmf_construct_subsystem(const char *name, int32_t lcore,
	for (i = 0; i < num_listen_addresses; i++) {
		int nic_numa_node = spdk_get_ifaddr_numa_node(addresses[i].traddr);
		unsigned subsys_numa_node = spdk_env_get_socket_id(app_subsys->lcore);
		const char *adrfam_str;
		enum spdk_nvmf_adrfam adrfam;
		struct spdk_nvme_transport_id trid = {};

		if (nic_numa_node >= 0) {
			if (subsys_numa_node != (unsigned)nic_numa_node) {
@@ -443,27 +442,23 @@ spdk_nvmf_construct_subsystem(const char *name, int32_t lcore,
			}
		}

		if (addresses[i].transport == NULL) {
		if (spdk_nvme_transport_id_parse_trtype(&trid.trtype, addresses[i].transport)) {
			SPDK_ERRLOG("Missing listen address transport type\n");
			goto error;
		}

		adrfam_str = addresses[i].adrfam;
		if (adrfam_str == NULL) {
			adrfam_str = "IPv4";
		if (spdk_nvme_transport_id_parse_adrfam(&trid.adrfam, addresses[i].adrfam)) {
			trid.adrfam = SPDK_NVMF_ADRFAM_IPV4;
		}

		if (spdk_nvme_transport_id_parse_adrfam(&adrfam, adrfam_str)) {
			SPDK_ERRLOG("Unknown address family '%s'\n", adrfam_str);
			goto error;
		}
		snprintf(trid.traddr, sizeof(trid.traddr), "%s", addresses[i].traddr);
		snprintf(trid.trsvcid, sizeof(trid.trsvcid), "%s", addresses[i].trsvcid);

		listen_addr = spdk_nvmf_tgt_listen(addresses[i].transport, adrfam,
						   addresses[i].traddr, addresses[i].trsvcid);
		listen_addr = spdk_nvmf_tgt_listen(&trid);
		if (listen_addr == NULL) {
			SPDK_ERRLOG("Failed to listen on transport %s, adrfam %s, traddr %s, trsvcid %s\n",
				    addresses[i].transport,
				    adrfam_str,
				    addresses[i].adrfam,
				    addresses[i].traddr,
				    addresses[i].trsvcid);
			goto error;
+6 −11
Original line number Diff line number Diff line
@@ -70,24 +70,19 @@ dump_nvmf_subsystem(struct spdk_json_write_ctx *w, struct nvmf_tgt_subsystem *tg

	TAILQ_FOREACH(allowed_listener, &subsystem->allowed_listeners, link) {
		listen_addr = allowed_listener->listen_addr;
		const char *adrfam = spdk_nvme_transport_id_adrfam_str(listen_addr->adrfam);

		spdk_json_write_object_begin(w);
		/* NOTE: "transport" is kept for compatibility; new code should use "trtype" */
		spdk_json_write_name(w, "transport");
		spdk_json_write_string(w, spdk_nvme_transport_id_trtype_str(listen_addr->trtype));
		spdk_json_write_string(w, spdk_nvme_transport_id_trtype_str(listen_addr->trid.trtype));
		spdk_json_write_name(w, "trtype");
		spdk_json_write_string(w, spdk_nvme_transport_id_trtype_str(listen_addr->trtype));

		if (adrfam) {
		spdk_json_write_string(w, spdk_nvme_transport_id_trtype_str(listen_addr->trid.trtype));
		spdk_json_write_name(w, "adrfam");
			spdk_json_write_string(w, adrfam);
		}

		spdk_json_write_string(w, spdk_nvme_transport_id_adrfam_str(listen_addr->trid.adrfam));
		spdk_json_write_name(w, "traddr");
		spdk_json_write_string(w, listen_addr->traddr);
		spdk_json_write_string(w, listen_addr->trid.traddr);
		spdk_json_write_name(w, "trsvcid");
		spdk_json_write_string(w, listen_addr->trsvcid);
		spdk_json_write_string(w, listen_addr->trid.trsvcid);
		spdk_json_write_object_end(w);
	}
	spdk_json_write_array_end(w);
+2 −6
Original line number Diff line number Diff line
@@ -68,10 +68,7 @@ typedef void (*spdk_nvmf_subsystem_connect_fn)(void *cb_ctx, struct spdk_nvmf_re
typedef void (*spdk_nvmf_subsystem_disconnect_fn)(void *cb_ctx, struct spdk_nvmf_conn *conn);

struct spdk_nvmf_listen_addr {
	enum spdk_nvme_transport_type		trtype;
	char					*traddr;
	char					*trsvcid;
	enum spdk_nvmf_adrfam			adrfam;
	struct spdk_nvme_transport_id		trid;
	TAILQ_ENTRY(spdk_nvmf_listen_addr)	link;
};

@@ -138,8 +135,7 @@ struct spdk_nvmf_subsystem *spdk_nvmf_find_subsystem(const char *subnqn);

bool spdk_nvmf_subsystem_host_allowed(struct spdk_nvmf_subsystem *subsystem, const char *hostnqn);

struct spdk_nvmf_listen_addr *spdk_nvmf_tgt_listen(const char *trname, enum spdk_nvmf_adrfam adrfam,
		const char *traddr, const char *trsvcid);
struct spdk_nvmf_listen_addr *spdk_nvmf_tgt_listen(struct spdk_nvme_transport_id *trid);

int spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem,
				     struct spdk_nvmf_listen_addr *listen_addr);
+1 −1
Original line number Diff line number Diff line
@@ -99,7 +99,7 @@ nvmf_update_discovery_log(void)
			entry->subtype = subsystem->subtype;
			snprintf(entry->subnqn, sizeof(entry->subnqn), "%s", subsystem->subnqn);

			transport = spdk_nvmf_transport_get(listen_addr->trtype);
			transport = spdk_nvmf_transport_get(listen_addr->trid.trtype);
			assert(transport != NULL);

			transport->listen_addr_discover(listen_addr, entry);
+4 −29
Original line number Diff line number Diff line
@@ -97,15 +97,12 @@ spdk_nvmf_tgt_fini(void)
}

struct spdk_nvmf_listen_addr *
spdk_nvmf_listen_addr_create(enum spdk_nvme_transport_type trtype,
			     enum spdk_nvmf_adrfam adrfam,
			     const char *traddr,
			     const char *trsvcid)
spdk_nvmf_listen_addr_create(struct spdk_nvme_transport_id *trid)
{
	struct spdk_nvmf_listen_addr *listen_addr;
	const struct spdk_nvmf_transport *transport;

	transport = spdk_nvmf_transport_get(trtype);
	transport = spdk_nvmf_transport_get(trid->trtype);
	if (!transport) {
		return NULL;
	}
@@ -115,21 +112,7 @@ spdk_nvmf_listen_addr_create(enum spdk_nvme_transport_type trtype,
		return NULL;
	}

	listen_addr->trtype = trtype;
	listen_addr->adrfam = adrfam;

	listen_addr->traddr = strdup(traddr);
	if (!listen_addr->traddr) {
		free(listen_addr);
		return NULL;
	}

	listen_addr->trsvcid = strdup(trsvcid);
	if (!listen_addr->trsvcid) {
		free(listen_addr->traddr);
		free(listen_addr);
		return NULL;
	}
	listen_addr->trid = *trid;

	return listen_addr;
}
@@ -139,18 +122,10 @@ spdk_nvmf_listen_addr_destroy(struct spdk_nvmf_listen_addr *addr)
{
	const struct spdk_nvmf_transport *transport;

	transport = spdk_nvmf_transport_get(addr->trtype);
	transport = spdk_nvmf_transport_get(addr->trid.trtype);
	assert(transport != NULL);
	transport->listen_addr_remove(addr);

	spdk_nvmf_listen_addr_cleanup(addr);
}

void
spdk_nvmf_listen_addr_cleanup(struct spdk_nvmf_listen_addr *addr)
{
	free(addr->trsvcid);
	free(addr->traddr);
	free(addr);
}

Loading