nvmf: spdk_nvmf_tgt_listen now takes a target parameter
Also, move the implementation into the appropriate compilation unit. Change-Id: Ie1c56bc5e077b81d744414716f9267ceaf591e49 Signed-off-by: Ben Walker <benjamin.walker@intel.com> Reviewed-on: https://review.gerrithub.io/375034 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
70bc390c82
commit
656e443dd1
@ -427,7 +427,7 @@ spdk_nvmf_construct_subsystem(const char *name, int32_t lcore,
|
||||
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(&trid);
|
||||
listen_addr = spdk_nvmf_tgt_listen(g_tgt, &trid);
|
||||
if (listen_addr == NULL) {
|
||||
SPDK_ERRLOG("Failed to listen on transport %s, adrfam %s, traddr %s, trsvcid %s\n",
|
||||
addresses[i].transport,
|
||||
|
@ -74,6 +74,16 @@ struct spdk_nvmf_tgt *spdk_nvmf_tgt_create(struct spdk_nvmf_tgt_opts *opts);
|
||||
*/
|
||||
void spdk_nvmf_tgt_destroy(struct spdk_nvmf_tgt *tgt);
|
||||
|
||||
/**
|
||||
* Begin accepting new connections at the address provided.
|
||||
*
|
||||
* The connections will be matched with a subsystem, which may or may not allow
|
||||
* the connection based on a subsystem-specific whitelist. See
|
||||
* spdk_nvmf_subsystem_add_host() and spdk_nvmf_subsystem_add_listener()
|
||||
*/
|
||||
struct spdk_nvmf_listen_addr *spdk_nvmf_tgt_listen(struct spdk_nvmf_tgt *tgt,
|
||||
struct spdk_nvme_transport_id *trid);
|
||||
|
||||
int spdk_nvmf_check_pools(void);
|
||||
|
||||
struct spdk_nvmf_subsystem;
|
||||
@ -165,8 +175,6 @@ struct spdk_nvmf_host *spdk_nvmf_subsystem_get_next_host(struct spdk_nvmf_subsys
|
||||
*/
|
||||
const char *spdk_nvmf_host_get_nqn(struct spdk_nvmf_host *host);
|
||||
|
||||
struct spdk_nvmf_listen_addr *spdk_nvmf_tgt_listen(struct spdk_nvme_transport_id *trid);
|
||||
|
||||
/**
|
||||
* Accept new connections on the address provided
|
||||
*
|
||||
|
@ -112,6 +112,49 @@ spdk_nvmf_tgt_destroy(struct spdk_nvmf_tgt *tgt)
|
||||
}
|
||||
}
|
||||
|
||||
struct spdk_nvmf_listen_addr *
|
||||
spdk_nvmf_tgt_listen(struct spdk_nvmf_tgt *tgt,
|
||||
struct spdk_nvme_transport_id *trid)
|
||||
{
|
||||
struct spdk_nvmf_listen_addr *listen_addr;
|
||||
struct spdk_nvmf_transport *transport;
|
||||
int rc;
|
||||
|
||||
TAILQ_FOREACH(listen_addr, &tgt->listen_addrs, link) {
|
||||
if (spdk_nvme_transport_id_compare(&listen_addr->trid, trid) == 0) {
|
||||
return listen_addr;
|
||||
}
|
||||
}
|
||||
|
||||
transport = spdk_nvmf_tgt_get_transport(tgt, trid->trtype);
|
||||
if (!transport) {
|
||||
transport = spdk_nvmf_transport_create(tgt, trid->trtype);
|
||||
if (!transport) {
|
||||
SPDK_ERRLOG("Transport initialization failed\n");
|
||||
return NULL;
|
||||
}
|
||||
TAILQ_INSERT_TAIL(&tgt->transports, transport, link);
|
||||
}
|
||||
|
||||
|
||||
listen_addr = spdk_nvmf_listen_addr_create(trid);
|
||||
if (!listen_addr) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
rc = spdk_nvmf_transport_listen(transport, trid);
|
||||
if (rc < 0) {
|
||||
free(listen_addr);
|
||||
SPDK_ERRLOG("Unable to listen on address '%s'\n", trid->traddr);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
TAILQ_INSERT_HEAD(&tgt->listen_addrs, listen_addr, link);
|
||||
tgt->discovery_genctr++;
|
||||
|
||||
return listen_addr;
|
||||
}
|
||||
|
||||
struct spdk_nvmf_subsystem *
|
||||
spdk_nvmf_tgt_find_subsystem(struct spdk_nvmf_tgt *tgt, const char *subnqn)
|
||||
{
|
||||
|
@ -273,48 +273,6 @@ spdk_nvmf_host_get_nqn(struct spdk_nvmf_host *host)
|
||||
return host->nqn;
|
||||
}
|
||||
|
||||
struct spdk_nvmf_listen_addr *
|
||||
spdk_nvmf_tgt_listen(struct spdk_nvme_transport_id *trid)
|
||||
{
|
||||
struct spdk_nvmf_listen_addr *listen_addr;
|
||||
struct spdk_nvmf_transport *transport;
|
||||
int rc;
|
||||
|
||||
TAILQ_FOREACH(listen_addr, &g_nvmf_tgt.listen_addrs, link) {
|
||||
if (spdk_nvme_transport_id_compare(&listen_addr->trid, trid) == 0) {
|
||||
return listen_addr;
|
||||
}
|
||||
}
|
||||
|
||||
transport = spdk_nvmf_tgt_get_transport(&g_nvmf_tgt, trid->trtype);
|
||||
if (!transport) {
|
||||
transport = spdk_nvmf_transport_create(&g_nvmf_tgt, trid->trtype);
|
||||
if (!transport) {
|
||||
SPDK_ERRLOG("Transport initialization failed\n");
|
||||
return NULL;
|
||||
}
|
||||
TAILQ_INSERT_TAIL(&g_nvmf_tgt.transports, transport, link);
|
||||
}
|
||||
|
||||
|
||||
listen_addr = spdk_nvmf_listen_addr_create(trid);
|
||||
if (!listen_addr) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
rc = spdk_nvmf_transport_listen(transport, trid);
|
||||
if (rc < 0) {
|
||||
free(listen_addr);
|
||||
SPDK_ERRLOG("Unable to listen on address '%s'\n", trid->traddr);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
TAILQ_INSERT_HEAD(&g_nvmf_tgt.listen_addrs, listen_addr, link);
|
||||
g_nvmf_tgt.discovery_genctr++;
|
||||
|
||||
return listen_addr;
|
||||
}
|
||||
|
||||
int
|
||||
spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem,
|
||||
struct spdk_nvmf_listen_addr *listen_addr)
|
||||
|
@ -186,8 +186,7 @@ test_discovery_log(void)
|
||||
uint8_t buffer[8192];
|
||||
struct spdk_nvmf_discovery_log_page *disc_log;
|
||||
struct spdk_nvmf_discovery_log_page_entry *entry;
|
||||
struct spdk_nvmf_listen_addr *listen_addr;
|
||||
struct spdk_nvme_transport_id trid = {};
|
||||
struct spdk_nvmf_listen_addr listen_addr = {};
|
||||
|
||||
/* Reset discovery-related globals */
|
||||
g_nvmf_tgt.discovery_genctr = 0;
|
||||
@ -201,26 +200,23 @@ test_discovery_log(void)
|
||||
NULL, NULL, NULL);
|
||||
SPDK_CU_ASSERT_FATAL(subsystem != NULL);
|
||||
|
||||
trid.trtype = SPDK_NVME_TRANSPORT_RDMA;
|
||||
trid.adrfam = SPDK_NVMF_ADRFAM_IPV4;
|
||||
snprintf(trid.traddr, sizeof(trid.traddr), "1234");
|
||||
snprintf(trid.trsvcid, sizeof(trid.trsvcid), "5678");
|
||||
listen_addr = spdk_nvmf_tgt_listen(&trid);
|
||||
SPDK_CU_ASSERT_FATAL(listen_addr != NULL);
|
||||
|
||||
SPDK_CU_ASSERT_FATAL(spdk_nvmf_subsystem_add_listener(subsystem, listen_addr) == 0);
|
||||
listen_addr.trid.trtype = SPDK_NVME_TRANSPORT_RDMA;
|
||||
listen_addr.trid.adrfam = SPDK_NVMF_ADRFAM_IPV4;
|
||||
snprintf(listen_addr.trid.traddr, sizeof(listen_addr.trid.traddr), "1234");
|
||||
snprintf(listen_addr.trid.trsvcid, sizeof(listen_addr.trid.trsvcid), "5678");
|
||||
SPDK_CU_ASSERT_FATAL(spdk_nvmf_subsystem_add_listener(subsystem, &listen_addr) == 0);
|
||||
|
||||
/* Get only genctr (first field in the header) */
|
||||
memset(buffer, 0xCC, sizeof(buffer));
|
||||
disc_log = (struct spdk_nvmf_discovery_log_page *)buffer;
|
||||
spdk_nvmf_get_discovery_log_page(buffer, 0, sizeof(disc_log->genctr));
|
||||
CU_ASSERT(disc_log->genctr == 2); /* one added subsystem + one added listen address */
|
||||
CU_ASSERT(disc_log->genctr == 1); /* one added subsystem */
|
||||
|
||||
/* Get only the header, no entries */
|
||||
memset(buffer, 0xCC, sizeof(buffer));
|
||||
disc_log = (struct spdk_nvmf_discovery_log_page *)buffer;
|
||||
spdk_nvmf_get_discovery_log_page(buffer, 0, sizeof(*disc_log));
|
||||
CU_ASSERT(disc_log->genctr == 2);
|
||||
CU_ASSERT(disc_log->genctr == 1);
|
||||
CU_ASSERT(disc_log->numrec == 1);
|
||||
|
||||
/* Offset 0, exact size match */
|
||||
|
@ -185,29 +185,6 @@ spdk_bdev_get_name(const struct spdk_bdev *bdev)
|
||||
return "test";
|
||||
}
|
||||
|
||||
static void
|
||||
test_spdk_nvmf_tgt_listen(void)
|
||||
{
|
||||
struct spdk_nvmf_listen_addr *listen_addr;
|
||||
struct spdk_nvme_transport_id trid = {};
|
||||
|
||||
/* Invalid trtype */
|
||||
trid.trtype = 55;
|
||||
trid.adrfam = SPDK_NVMF_ADRFAM_IPV4;
|
||||
snprintf(trid.traddr, sizeof(trid.traddr), "192.168.100.1");
|
||||
snprintf(trid.trsvcid, sizeof(trid.trsvcid), "4420");
|
||||
CU_ASSERT(spdk_nvmf_tgt_listen(&trid) == NULL);
|
||||
|
||||
trid.trtype = SPDK_NVME_TRANSPORT_RDMA;
|
||||
trid.adrfam = SPDK_NVMF_ADRFAM_IPV4;
|
||||
snprintf(trid.traddr, sizeof(trid.traddr), "192.168.100.1");
|
||||
snprintf(trid.trsvcid, sizeof(trid.trsvcid), "4420");
|
||||
listen_addr = spdk_nvmf_tgt_listen(&trid);
|
||||
SPDK_CU_ASSERT_FATAL(listen_addr != NULL);
|
||||
spdk_nvmf_listen_addr_destroy(listen_addr);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
test_spdk_nvmf_subsystem_add_ns(void)
|
||||
{
|
||||
@ -290,7 +267,6 @@ int main(int argc, char **argv)
|
||||
|
||||
if (
|
||||
CU_add_test(suite, "create_subsystem", nvmf_test_create_subsystem) == NULL ||
|
||||
CU_add_test(suite, "nvmf_tgt_listen", test_spdk_nvmf_tgt_listen) == NULL ||
|
||||
CU_add_test(suite, "nvmf_subsystem_add_ns", test_spdk_nvmf_subsystem_add_ns) == NULL) {
|
||||
CU_cleanup_registry();
|
||||
return CU_get_error();
|
||||
|
Loading…
Reference in New Issue
Block a user