Commit 4cdd929b authored by GangCao's avatar GangCao Committed by Jim Harris
Browse files

nvmf: introduce the global and per subsystem listen addresses



Change-Id: I276a71a3280c41b215a9cf4ca85247bd397a85e5
Signed-off-by: default avatarGangCao <gang.cao@intel.com>
parent b865439d
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -451,6 +451,7 @@ spdk_nvmf_construct_subsystem(const char *name,
{
	struct spdk_nvmf_subsystem *subsystem;
	struct nvmf_tgt_subsystem *app_subsys;
	struct spdk_nvmf_listen_addr *listen_addr;
	enum spdk_nvmf_subsystem_mode mode;
	int i;
	uint64_t mask;
@@ -519,8 +520,10 @@ spdk_nvmf_construct_subsystem(const char *name,
			}
		}

		spdk_nvmf_subsystem_add_listener(subsystem, addresses[i].transport, addresses[i].traddr,
						 addresses[i].trsvcid);
		listen_addr = spdk_nvmf_tgt_listen(addresses[i].transport,
						   addresses[i].traddr, addresses[i].trsvcid);
		assert(listen_addr != NULL);
		spdk_nvmf_subsystem_add_listener(subsystem, listen_addr);
	}

	/* Parse Host sections */
+3 −1
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ dump_nvmf_subsystem(struct spdk_json_write_ctx *w, struct nvmf_tgt_subsystem *tg
	struct spdk_nvmf_listen_addr 	*listen_addr;
	struct spdk_nvmf_host		*host;
	struct spdk_nvmf_subsystem	*subsystem = tgt_subsystem->subsystem;
	struct spdk_nvmf_subsystem_allowed_listener 	*allowed_listener;

	spdk_json_write_object_begin(w);

@@ -76,7 +77,8 @@ dump_nvmf_subsystem(struct spdk_json_write_ctx *w, struct nvmf_tgt_subsystem *tg
	spdk_json_write_name(w, "listen_addresses");
	spdk_json_write_array_begin(w);

	TAILQ_FOREACH(listen_addr, &subsystem->listen_addrs, link) {
	TAILQ_FOREACH(allowed_listener, &subsystem->allowed_listeners, link) {
		listen_addr = allowed_listener->listen_addr;
		spdk_json_write_object_begin(w);
		spdk_json_write_name(w, "transport");
		spdk_json_write_string(w, listen_addr->trname);
+15 −4
Original line number Diff line number Diff line
@@ -115,6 +115,11 @@ struct spdk_nvmf_ctrlr_ops {
	void (*detach)(struct spdk_nvmf_subsystem *subsystem);
};

struct spdk_nvmf_subsystem_allowed_listener {
	struct spdk_nvmf_listen_addr				*listen_addr;
	TAILQ_ENTRY(spdk_nvmf_subsystem_allowed_listener)	link;
};

/*
 * The NVMf subsystem, as indicated in the specification, is a collection
 * of virtual controller sessions.  Any individual controller session has
@@ -149,12 +154,11 @@ struct spdk_nvmf_subsystem {

	TAILQ_HEAD(, spdk_nvmf_session)		sessions;

	TAILQ_HEAD(, spdk_nvmf_listen_addr)	listen_addrs;
	uint32_t				num_listen_addrs;

	TAILQ_HEAD(, spdk_nvmf_host)		hosts;
	uint32_t				num_hosts;

	TAILQ_HEAD(, spdk_nvmf_subsystem_allowed_listener)	allowed_listeners;

	TAILQ_ENTRY(spdk_nvmf_subsystem) entries;
};

@@ -181,9 +185,16 @@ bool spdk_nvmf_subsystem_exists(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, const char *traddr, const char *trsvcid);

int
spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem,
				 const char *trname, const char *traddr, const char *trsvcid);
				 struct spdk_nvmf_listen_addr *listen_addr);

bool
spdk_nvmf_subsystem_listener_allowed(struct spdk_nvmf_subsystem *subsystem,
				     struct spdk_nvmf_listen_addr *listen_addr);

int
spdk_nvmf_subsystem_add_host(struct spdk_nvmf_subsystem *subsystem,
+10 −0
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ spdk_nvmf_tgt_init(uint16_t max_queue_depth, uint16_t max_queues_per_sess,
	g_nvmf_tgt.discovery_log_page = NULL;
	g_nvmf_tgt.discovery_log_page_size = 0;
	TAILQ_INIT(&g_nvmf_tgt.subsystems);
	TAILQ_INIT(&g_nvmf_tgt.listen_addrs);

	SPDK_TRACELOG(SPDK_TRACE_NVMF, "Max Queues Per Session: %d\n", max_queues_per_sess);
	SPDK_TRACELOG(SPDK_TRACE_NVMF, "Max Queue Depth: %d\n", max_queue_depth);
@@ -80,6 +81,15 @@ spdk_nvmf_tgt_init(uint16_t max_queue_depth, uint16_t max_queues_per_sess,
int
spdk_nvmf_tgt_fini(void)
{
	struct spdk_nvmf_listen_addr *listen_addr, *listen_addr_tmp;

	TAILQ_FOREACH_SAFE(listen_addr, &g_nvmf_tgt.listen_addrs, link, listen_addr_tmp) {
		TAILQ_REMOVE(&g_nvmf_tgt.listen_addrs, listen_addr, link);
		g_nvmf_tgt.discovery_genctr++;

		spdk_nvmf_listen_addr_destroy(listen_addr);
	}

	spdk_nvmf_transport_fini();

	return 0;
+1 −0
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ struct spdk_nvmf_tgt {
	TAILQ_HEAD(, spdk_nvmf_subsystem)	subsystems;
	struct spdk_nvmf_discovery_log_page	*discovery_log_page;
	size_t					discovery_log_page_size;
	TAILQ_HEAD(, spdk_nvmf_listen_addr)	listen_addrs;
};

extern struct spdk_nvmf_tgt g_nvmf_tgt;
Loading