nvmf: Remove spdk_nvmf_listen_addr
Everywhere this is used, we can just use spdk_nvme_transport_id instead. Change-Id: I407c812cd6a1ca3afcb3d1fe87c7e22183b09d7a Signed-off-by: Ben Walker <benjamin.walker@intel.com> Reviewed-on: https://review.gerrithub.io/375461 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
ff4f68a55f
commit
6428de9e34
@ -362,8 +362,7 @@ spdk_nvmf_construct_subsystem(const char *name, int32_t lcore,
|
|||||||
{
|
{
|
||||||
struct spdk_nvmf_subsystem *subsystem;
|
struct spdk_nvmf_subsystem *subsystem;
|
||||||
struct nvmf_tgt_subsystem *app_subsys;
|
struct nvmf_tgt_subsystem *app_subsys;
|
||||||
struct spdk_nvmf_listen_addr *listen_addr;
|
int i, rc;
|
||||||
int i;
|
|
||||||
uint64_t mask;
|
uint64_t mask;
|
||||||
struct spdk_bdev *bdev;
|
struct spdk_bdev *bdev;
|
||||||
const char *namespace;
|
const char *namespace;
|
||||||
@ -429,8 +428,8 @@ spdk_nvmf_construct_subsystem(const char *name, int32_t lcore,
|
|||||||
snprintf(trid.traddr, sizeof(trid.traddr), "%s", addresses[i].traddr);
|
snprintf(trid.traddr, sizeof(trid.traddr), "%s", addresses[i].traddr);
|
||||||
snprintf(trid.trsvcid, sizeof(trid.trsvcid), "%s", addresses[i].trsvcid);
|
snprintf(trid.trsvcid, sizeof(trid.trsvcid), "%s", addresses[i].trsvcid);
|
||||||
|
|
||||||
listen_addr = spdk_nvmf_tgt_listen(g_tgt, &trid);
|
rc = spdk_nvmf_tgt_listen(g_tgt, &trid);
|
||||||
if (listen_addr == NULL) {
|
if (rc) {
|
||||||
SPDK_ERRLOG("Failed to listen on transport %s, adrfam %s, traddr %s, trsvcid %s\n",
|
SPDK_ERRLOG("Failed to listen on transport %s, adrfam %s, traddr %s, trsvcid %s\n",
|
||||||
addresses[i].transport,
|
addresses[i].transport,
|
||||||
addresses[i].adrfam,
|
addresses[i].adrfam,
|
||||||
@ -438,7 +437,7 @@ spdk_nvmf_construct_subsystem(const char *name, int32_t lcore,
|
|||||||
addresses[i].trsvcid);
|
addresses[i].trsvcid);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
spdk_nvmf_subsystem_add_listener(subsystem, listen_addr);
|
spdk_nvmf_subsystem_add_listener(subsystem, &trid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Parse Host sections */
|
/* Parse Host sections */
|
||||||
|
@ -77,9 +77,14 @@ void spdk_nvmf_tgt_destroy(struct spdk_nvmf_tgt *tgt);
|
|||||||
* The connections will be matched with a subsystem, which may or may not allow
|
* The connections will be matched with a subsystem, which may or may not allow
|
||||||
* the connection based on a subsystem-specific whitelist. See
|
* the connection based on a subsystem-specific whitelist. See
|
||||||
* spdk_nvmf_subsystem_add_host() and spdk_nvmf_subsystem_add_listener()
|
* spdk_nvmf_subsystem_add_host() and spdk_nvmf_subsystem_add_listener()
|
||||||
|
*
|
||||||
|
* \param tgt The target associated with this listen address
|
||||||
|
* \param trid The address to listen at
|
||||||
|
*
|
||||||
|
* \return 0 on success. Negated errno on failure.
|
||||||
*/
|
*/
|
||||||
struct spdk_nvmf_listen_addr *spdk_nvmf_tgt_listen(struct spdk_nvmf_tgt *tgt,
|
int spdk_nvmf_tgt_listen(struct spdk_nvmf_tgt *tgt,
|
||||||
struct spdk_nvme_transport_id *trid);
|
struct spdk_nvme_transport_id *trid);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Poll the target for incoming connections.
|
* Poll the target for incoming connections.
|
||||||
@ -98,11 +103,6 @@ struct spdk_nvmf_listener;
|
|||||||
typedef void (*spdk_nvmf_subsystem_connect_fn)(void *cb_ctx, struct spdk_nvmf_request *req);
|
typedef void (*spdk_nvmf_subsystem_connect_fn)(void *cb_ctx, struct spdk_nvmf_request *req);
|
||||||
typedef void (*spdk_nvmf_subsystem_disconnect_fn)(void *cb_ctx, struct spdk_nvmf_qpair *qpair);
|
typedef void (*spdk_nvmf_subsystem_disconnect_fn)(void *cb_ctx, struct spdk_nvmf_qpair *qpair);
|
||||||
|
|
||||||
struct spdk_nvmf_listen_addr {
|
|
||||||
struct spdk_nvme_transport_id trid;
|
|
||||||
TAILQ_ENTRY(spdk_nvmf_listen_addr) link;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The NVMf subsystem, as indicated in the specification, is a collection
|
* The NVMf subsystem, as indicated in the specification, is a collection
|
||||||
* of controllers. Any individual controller has
|
* of controllers. Any individual controller has
|
||||||
@ -180,21 +180,21 @@ const char *spdk_nvmf_host_get_nqn(struct spdk_nvmf_host *host);
|
|||||||
* Accept new connections on the address provided
|
* Accept new connections on the address provided
|
||||||
*
|
*
|
||||||
* \param subsystem Subsystem to add listener to
|
* \param subsystem Subsystem to add listener to
|
||||||
* \param listen_addr The address to listen on.
|
* \param trid The address to accept connections from
|
||||||
* \return 0 on success. Negated errno value on failure.
|
* \return 0 on success. Negated errno value on failure.
|
||||||
*/
|
*/
|
||||||
int spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem,
|
int spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem,
|
||||||
struct spdk_nvmf_listen_addr *listen_addr);
|
struct spdk_nvme_transport_id *trid);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if connections originated from the given address are allowed to connect to the subsystem.
|
* Check if connections originated from the given address are allowed to connect to the subsystem.
|
||||||
*
|
*
|
||||||
* \param subsystem The subsystem to query
|
* \param subsystem The subsystem to query
|
||||||
* \param listen_addr The listen address
|
* \param trid The listen address
|
||||||
* \return true if allowed, false if not.
|
* \return true if allowed, false if not.
|
||||||
*/
|
*/
|
||||||
bool spdk_nvmf_subsystem_listener_allowed(struct spdk_nvmf_subsystem *subsystem,
|
bool spdk_nvmf_subsystem_listener_allowed(struct spdk_nvmf_subsystem *subsystem,
|
||||||
struct spdk_nvmf_listen_addr *listen_addr);
|
struct spdk_nvme_transport_id *trid);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the first allowed listen address in the subsystem.
|
* Return the first allowed listen address in the subsystem.
|
||||||
|
@ -56,7 +56,6 @@ nvmf_update_discovery_log(struct spdk_nvmf_tgt *tgt)
|
|||||||
uint64_t numrec = 0;
|
uint64_t numrec = 0;
|
||||||
struct spdk_nvmf_subsystem *subsystem;
|
struct spdk_nvmf_subsystem *subsystem;
|
||||||
struct spdk_nvmf_listener *listener;
|
struct spdk_nvmf_listener *listener;
|
||||||
struct spdk_nvmf_listen_addr *listen_addr;
|
|
||||||
struct spdk_nvmf_discovery_log_page_entry *entry;
|
struct spdk_nvmf_discovery_log_page_entry *entry;
|
||||||
struct spdk_nvmf_transport *transport;
|
struct spdk_nvmf_transport *transport;
|
||||||
struct spdk_nvmf_discovery_log_page *disc_log;
|
struct spdk_nvmf_discovery_log_page *disc_log;
|
||||||
@ -87,8 +86,6 @@ nvmf_update_discovery_log(struct spdk_nvmf_tgt *tgt)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
listen_addr = listener->listen_addr;
|
|
||||||
|
|
||||||
disc_log = new_log_page;
|
disc_log = new_log_page;
|
||||||
cur_size = new_size;
|
cur_size = new_size;
|
||||||
|
|
||||||
@ -100,10 +97,10 @@ nvmf_update_discovery_log(struct spdk_nvmf_tgt *tgt)
|
|||||||
entry->subtype = subsystem->subtype;
|
entry->subtype = subsystem->subtype;
|
||||||
snprintf(entry->subnqn, sizeof(entry->subnqn), "%s", subsystem->subnqn);
|
snprintf(entry->subnqn, sizeof(entry->subnqn), "%s", subsystem->subnqn);
|
||||||
|
|
||||||
transport = spdk_nvmf_tgt_get_transport(tgt, listen_addr->trid.trtype);
|
transport = spdk_nvmf_tgt_get_transport(tgt, listener->trid.trtype);
|
||||||
assert(transport != NULL);
|
assert(transport != NULL);
|
||||||
|
|
||||||
spdk_nvmf_transport_listen_addr_discover(transport, listen_addr, entry);
|
spdk_nvmf_transport_listener_discover(transport, &listener->trid, entry);
|
||||||
|
|
||||||
numrec++;
|
numrec++;
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,6 @@ spdk_nvmf_tgt_create(struct spdk_nvmf_tgt_opts *opts)
|
|||||||
tgt->discovery_log_page_size = 0;
|
tgt->discovery_log_page_size = 0;
|
||||||
tgt->current_subsystem_id = 0;
|
tgt->current_subsystem_id = 0;
|
||||||
TAILQ_INIT(&tgt->subsystems);
|
TAILQ_INIT(&tgt->subsystems);
|
||||||
TAILQ_INIT(&tgt->listen_addrs);
|
|
||||||
TAILQ_INIT(&tgt->transports);
|
TAILQ_INIT(&tgt->transports);
|
||||||
|
|
||||||
SPDK_DEBUGLOG(SPDK_TRACE_NVMF, "Max Queue Pairs Per Controller: %d\n",
|
SPDK_DEBUGLOG(SPDK_TRACE_NVMF, "Max Queue Pairs Per Controller: %d\n",
|
||||||
@ -97,63 +96,41 @@ spdk_nvmf_tgt_create(struct spdk_nvmf_tgt_opts *opts)
|
|||||||
void
|
void
|
||||||
spdk_nvmf_tgt_destroy(struct spdk_nvmf_tgt *tgt)
|
spdk_nvmf_tgt_destroy(struct spdk_nvmf_tgt *tgt)
|
||||||
{
|
{
|
||||||
struct spdk_nvmf_listen_addr *listen_addr, *listen_addr_tmp;
|
|
||||||
struct spdk_nvmf_transport *transport, *transport_tmp;
|
struct spdk_nvmf_transport *transport, *transport_tmp;
|
||||||
|
|
||||||
TAILQ_FOREACH_SAFE(listen_addr, &tgt->listen_addrs, link, listen_addr_tmp) {
|
|
||||||
TAILQ_REMOVE(&tgt->listen_addrs, listen_addr, link);
|
|
||||||
tgt->discovery_genctr++;
|
|
||||||
|
|
||||||
spdk_nvmf_listen_addr_destroy(listen_addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
TAILQ_FOREACH_SAFE(transport, &tgt->transports, link, transport_tmp) {
|
TAILQ_FOREACH_SAFE(transport, &tgt->transports, link, transport_tmp) {
|
||||||
TAILQ_REMOVE(&tgt->transports, transport, link);
|
TAILQ_REMOVE(&tgt->transports, transport, link);
|
||||||
spdk_nvmf_transport_destroy(transport);
|
spdk_nvmf_transport_destroy(transport);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct spdk_nvmf_listen_addr *
|
int
|
||||||
spdk_nvmf_tgt_listen(struct spdk_nvmf_tgt *tgt,
|
spdk_nvmf_tgt_listen(struct spdk_nvmf_tgt *tgt,
|
||||||
struct spdk_nvme_transport_id *trid)
|
struct spdk_nvme_transport_id *trid)
|
||||||
{
|
{
|
||||||
struct spdk_nvmf_listen_addr *listen_addr;
|
|
||||||
struct spdk_nvmf_transport *transport;
|
struct spdk_nvmf_transport *transport;
|
||||||
int rc;
|
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);
|
transport = spdk_nvmf_tgt_get_transport(tgt, trid->trtype);
|
||||||
if (!transport) {
|
if (!transport) {
|
||||||
transport = spdk_nvmf_transport_create(tgt, trid->trtype);
|
transport = spdk_nvmf_transport_create(tgt, trid->trtype);
|
||||||
if (!transport) {
|
if (!transport) {
|
||||||
SPDK_ERRLOG("Transport initialization failed\n");
|
SPDK_ERRLOG("Transport initialization failed\n");
|
||||||
return NULL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
TAILQ_INSERT_TAIL(&tgt->transports, transport, link);
|
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);
|
rc = spdk_nvmf_transport_listen(transport, trid);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
free(listen_addr);
|
|
||||||
SPDK_ERRLOG("Unable to listen on address '%s'\n", trid->traddr);
|
SPDK_ERRLOG("Unable to listen on address '%s'\n", trid->traddr);
|
||||||
return NULL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
TAILQ_INSERT_HEAD(&tgt->listen_addrs, listen_addr, link);
|
|
||||||
tgt->discovery_genctr++;
|
tgt->discovery_genctr++;
|
||||||
|
|
||||||
return listen_addr;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct spdk_nvmf_subsystem *
|
struct spdk_nvmf_subsystem *
|
||||||
@ -232,36 +209,6 @@ spdk_nvmf_tgt_get_transport(struct spdk_nvmf_tgt *tgt, enum spdk_nvme_transport_
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct spdk_nvmf_listen_addr *
|
|
||||||
spdk_nvmf_listen_addr_create(struct spdk_nvme_transport_id *trid)
|
|
||||||
{
|
|
||||||
struct spdk_nvmf_listen_addr *listen_addr;
|
|
||||||
|
|
||||||
listen_addr = calloc(1, sizeof(*listen_addr));
|
|
||||||
if (!listen_addr) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
listen_addr->trid = *trid;
|
|
||||||
|
|
||||||
return listen_addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
spdk_nvmf_listen_addr_destroy(struct spdk_nvmf_listen_addr *addr)
|
|
||||||
{
|
|
||||||
struct spdk_nvmf_transport *transport;
|
|
||||||
|
|
||||||
transport = spdk_nvmf_tgt_get_transport(&g_nvmf_tgt, addr->trid.trtype);
|
|
||||||
if (!transport) {
|
|
||||||
SPDK_ERRLOG("Attempted to destroy listener without a valid transport\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
spdk_nvmf_transport_stop_listen(transport, &addr->trid);
|
|
||||||
free(addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
spdk_nvmf_tgt_accept(struct spdk_nvmf_tgt *tgt)
|
spdk_nvmf_tgt_accept(struct spdk_nvmf_tgt *tgt)
|
||||||
{
|
{
|
||||||
|
@ -53,7 +53,6 @@ struct spdk_nvmf_tgt {
|
|||||||
TAILQ_HEAD(, spdk_nvmf_subsystem) subsystems;
|
TAILQ_HEAD(, spdk_nvmf_subsystem) subsystems;
|
||||||
struct spdk_nvmf_discovery_log_page *discovery_log_page;
|
struct spdk_nvmf_discovery_log_page *discovery_log_page;
|
||||||
size_t discovery_log_page_size;
|
size_t discovery_log_page_size;
|
||||||
TAILQ_HEAD(, spdk_nvmf_listen_addr) listen_addrs;
|
|
||||||
uint32_t current_subsystem_id;
|
uint32_t current_subsystem_id;
|
||||||
TAILQ_HEAD(, spdk_nvmf_transport) transports;
|
TAILQ_HEAD(, spdk_nvmf_transport) transports;
|
||||||
};
|
};
|
||||||
@ -64,7 +63,7 @@ struct spdk_nvmf_host {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct spdk_nvmf_listener {
|
struct spdk_nvmf_listener {
|
||||||
struct spdk_nvmf_listen_addr *listen_addr;
|
struct spdk_nvme_transport_id trid;
|
||||||
TAILQ_ENTRY(spdk_nvmf_listener) link;
|
TAILQ_ENTRY(spdk_nvmf_listener) link;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -111,9 +110,6 @@ struct spdk_nvmf_subsystem {
|
|||||||
|
|
||||||
extern struct spdk_nvmf_tgt g_nvmf_tgt;
|
extern struct spdk_nvmf_tgt g_nvmf_tgt;
|
||||||
|
|
||||||
struct spdk_nvmf_listen_addr *spdk_nvmf_listen_addr_create(struct spdk_nvme_transport_id *trid);
|
|
||||||
void spdk_nvmf_listen_addr_destroy(struct spdk_nvmf_listen_addr *addr);
|
|
||||||
|
|
||||||
uint16_t spdk_nvmf_tgt_gen_cntlid(struct spdk_nvmf_tgt *tgt);
|
uint16_t spdk_nvmf_tgt_gen_cntlid(struct spdk_nvmf_tgt *tgt);
|
||||||
|
|
||||||
struct spdk_nvmf_transport *spdk_nvmf_tgt_get_transport(struct spdk_nvmf_tgt *tgt,
|
struct spdk_nvmf_transport *spdk_nvmf_tgt_get_transport(struct spdk_nvmf_tgt *tgt,
|
||||||
|
@ -1176,11 +1176,17 @@ static int
|
|||||||
spdk_nvmf_rdma_destroy(struct spdk_nvmf_transport *transport)
|
spdk_nvmf_rdma_destroy(struct spdk_nvmf_transport *transport)
|
||||||
{
|
{
|
||||||
struct spdk_nvmf_rdma_transport *rtransport;
|
struct spdk_nvmf_rdma_transport *rtransport;
|
||||||
|
struct spdk_nvmf_rdma_port *port, *port_tmp;
|
||||||
struct spdk_nvmf_rdma_device *device, *device_tmp;
|
struct spdk_nvmf_rdma_device *device, *device_tmp;
|
||||||
|
|
||||||
rtransport = SPDK_CONTAINEROF(transport, struct spdk_nvmf_rdma_transport, transport);
|
rtransport = SPDK_CONTAINEROF(transport, struct spdk_nvmf_rdma_transport, transport);
|
||||||
|
|
||||||
assert(TAILQ_EMPTY(&rtransport->ports));
|
TAILQ_FOREACH_SAFE(port, &rtransport->ports, link, port_tmp) {
|
||||||
|
TAILQ_REMOVE(&rtransport->ports, port, link);
|
||||||
|
rdma_destroy_id(port->id);
|
||||||
|
free(port);
|
||||||
|
}
|
||||||
|
|
||||||
if (rtransport->event_channel != NULL) {
|
if (rtransport->event_channel != NULL) {
|
||||||
rdma_destroy_event_channel(rtransport->event_channel);
|
rdma_destroy_event_channel(rtransport->event_channel);
|
||||||
}
|
}
|
||||||
@ -1414,15 +1420,15 @@ spdk_nvmf_rdma_accept(struct spdk_nvmf_transport *transport)
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
spdk_nvmf_rdma_discover(struct spdk_nvmf_transport *transport,
|
spdk_nvmf_rdma_discover(struct spdk_nvmf_transport *transport,
|
||||||
struct spdk_nvmf_listen_addr *port,
|
struct spdk_nvme_transport_id *trid,
|
||||||
struct spdk_nvmf_discovery_log_page_entry *entry)
|
struct spdk_nvmf_discovery_log_page_entry *entry)
|
||||||
{
|
{
|
||||||
entry->trtype = SPDK_NVMF_TRTYPE_RDMA;
|
entry->trtype = SPDK_NVMF_TRTYPE_RDMA;
|
||||||
entry->adrfam = port->trid.adrfam;
|
entry->adrfam = trid->adrfam;
|
||||||
entry->treq.secure_channel = SPDK_NVMF_TREQ_SECURE_CHANNEL_NOT_SPECIFIED;
|
entry->treq.secure_channel = SPDK_NVMF_TREQ_SECURE_CHANNEL_NOT_SPECIFIED;
|
||||||
|
|
||||||
spdk_strcpy_pad(entry->trsvcid, port->trid.trsvcid, sizeof(entry->trsvcid), ' ');
|
spdk_strcpy_pad(entry->trsvcid, trid->trsvcid, sizeof(entry->trsvcid), ' ');
|
||||||
spdk_strcpy_pad(entry->traddr, port->trid.traddr, sizeof(entry->traddr), ' ');
|
spdk_strcpy_pad(entry->traddr, trid->traddr, sizeof(entry->traddr), ' ');
|
||||||
|
|
||||||
entry->tsas.rdma.rdma_qptype = SPDK_NVMF_RDMA_QPTYPE_RELIABLE_CONNECTED;
|
entry->tsas.rdma.rdma_qptype = SPDK_NVMF_RDMA_QPTYPE_RELIABLE_CONNECTED;
|
||||||
entry->tsas.rdma.rdma_prtype = SPDK_NVMF_RDMA_PRTYPE_NONE;
|
entry->tsas.rdma.rdma_prtype = SPDK_NVMF_RDMA_PRTYPE_NONE;
|
||||||
@ -1703,7 +1709,7 @@ const struct spdk_nvmf_transport_ops spdk_nvmf_transport_rdma = {
|
|||||||
.stop_listen = spdk_nvmf_rdma_stop_listen,
|
.stop_listen = spdk_nvmf_rdma_stop_listen,
|
||||||
.accept = spdk_nvmf_rdma_accept,
|
.accept = spdk_nvmf_rdma_accept,
|
||||||
|
|
||||||
.listen_addr_discover = spdk_nvmf_rdma_discover,
|
.listener_discover = spdk_nvmf_rdma_discover,
|
||||||
|
|
||||||
.poll_group_create = spdk_nvmf_rdma_poll_group_create,
|
.poll_group_create = spdk_nvmf_rdma_poll_group_create,
|
||||||
.poll_group_destroy = spdk_nvmf_rdma_poll_group_destroy,
|
.poll_group_destroy = spdk_nvmf_rdma_poll_group_destroy,
|
||||||
|
@ -277,7 +277,7 @@ spdk_nvmf_host_get_nqn(struct spdk_nvmf_host *host)
|
|||||||
|
|
||||||
int
|
int
|
||||||
spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem,
|
spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem,
|
||||||
struct spdk_nvmf_listen_addr *listen_addr)
|
struct spdk_nvme_transport_id *trid)
|
||||||
{
|
{
|
||||||
struct spdk_nvmf_listener *listener;
|
struct spdk_nvmf_listener *listener;
|
||||||
|
|
||||||
@ -286,7 +286,7 @@ spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
listener->listen_addr = listen_addr;
|
listener->trid = *trid;
|
||||||
|
|
||||||
TAILQ_INSERT_HEAD(&subsystem->listeners, listener, link);
|
TAILQ_INSERT_HEAD(&subsystem->listeners, listener, link);
|
||||||
|
|
||||||
@ -298,7 +298,7 @@ spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem,
|
|||||||
*/
|
*/
|
||||||
bool
|
bool
|
||||||
spdk_nvmf_subsystem_listener_allowed(struct spdk_nvmf_subsystem *subsystem,
|
spdk_nvmf_subsystem_listener_allowed(struct spdk_nvmf_subsystem *subsystem,
|
||||||
struct spdk_nvmf_listen_addr *listen_addr)
|
struct spdk_nvme_transport_id *trid)
|
||||||
{
|
{
|
||||||
struct spdk_nvmf_listener *listener;
|
struct spdk_nvmf_listener *listener;
|
||||||
|
|
||||||
@ -307,7 +307,7 @@ spdk_nvmf_subsystem_listener_allowed(struct spdk_nvmf_subsystem *subsystem,
|
|||||||
}
|
}
|
||||||
|
|
||||||
TAILQ_FOREACH(listener, &subsystem->listeners, link) {
|
TAILQ_FOREACH(listener, &subsystem->listeners, link) {
|
||||||
if (listener->listen_addr == listen_addr) {
|
if (spdk_nvme_transport_id_compare(&listener->trid, trid) == 0) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -332,7 +332,7 @@ spdk_nvmf_subsystem_get_next_listener(struct spdk_nvmf_subsystem *subsystem,
|
|||||||
const struct spdk_nvme_transport_id *
|
const struct spdk_nvme_transport_id *
|
||||||
spdk_nvmf_listener_get_trid(struct spdk_nvmf_listener *listener)
|
spdk_nvmf_listener_get_trid(struct spdk_nvmf_listener *listener)
|
||||||
{
|
{
|
||||||
return &listener->listen_addr->trid;
|
return &listener->trid;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void spdk_nvmf_ctrlr_hot_remove(void *remove_ctx)
|
static void spdk_nvmf_ctrlr_hot_remove(void *remove_ctx)
|
||||||
|
@ -113,11 +113,11 @@ spdk_nvmf_transport_accept(struct spdk_nvmf_transport *transport)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
spdk_nvmf_transport_listen_addr_discover(struct spdk_nvmf_transport *transport,
|
spdk_nvmf_transport_listener_discover(struct spdk_nvmf_transport *transport,
|
||||||
struct spdk_nvmf_listen_addr *listen_addr,
|
struct spdk_nvme_transport_id *trid,
|
||||||
struct spdk_nvmf_discovery_log_page_entry *entry)
|
struct spdk_nvmf_discovery_log_page_entry *entry)
|
||||||
{
|
{
|
||||||
transport->ops->listen_addr_discover(transport, listen_addr, entry);
|
transport->ops->listener_discover(transport, trid, entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct spdk_nvmf_poll_group *
|
struct spdk_nvmf_poll_group *
|
||||||
|
@ -39,8 +39,6 @@
|
|||||||
#include "spdk/nvme.h"
|
#include "spdk/nvme.h"
|
||||||
#include "spdk/nvmf.h"
|
#include "spdk/nvmf.h"
|
||||||
|
|
||||||
struct spdk_nvmf_listen_addr;
|
|
||||||
|
|
||||||
struct spdk_nvmf_transport {
|
struct spdk_nvmf_transport {
|
||||||
struct spdk_nvmf_tgt *tgt;
|
struct spdk_nvmf_tgt *tgt;
|
||||||
const struct spdk_nvmf_transport_ops *ops;
|
const struct spdk_nvmf_transport_ops *ops;
|
||||||
@ -85,9 +83,9 @@ struct spdk_nvmf_transport_ops {
|
|||||||
/**
|
/**
|
||||||
* Fill out a discovery log entry for a specific listen address.
|
* Fill out a discovery log entry for a specific listen address.
|
||||||
*/
|
*/
|
||||||
void (*listen_addr_discover)(struct spdk_nvmf_transport *transport,
|
void (*listener_discover)(struct spdk_nvmf_transport *transport,
|
||||||
struct spdk_nvmf_listen_addr *listen_addr,
|
struct spdk_nvme_transport_id *trid,
|
||||||
struct spdk_nvmf_discovery_log_page_entry *entry);
|
struct spdk_nvmf_discovery_log_page_entry *entry);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new poll group
|
* Create a new poll group
|
||||||
@ -145,8 +143,8 @@ int spdk_nvmf_transport_stop_listen(struct spdk_nvmf_transport *transport,
|
|||||||
|
|
||||||
void spdk_nvmf_transport_accept(struct spdk_nvmf_transport *transport);
|
void spdk_nvmf_transport_accept(struct spdk_nvmf_transport *transport);
|
||||||
|
|
||||||
void spdk_nvmf_transport_listen_addr_discover(struct spdk_nvmf_transport *transport,
|
void spdk_nvmf_transport_listener_discover(struct spdk_nvmf_transport *transport,
|
||||||
struct spdk_nvmf_listen_addr *listen_addr,
|
struct spdk_nvme_transport_id *trid,
|
||||||
struct spdk_nvmf_discovery_log_page_entry *entry);
|
struct spdk_nvmf_discovery_log_page_entry *entry);
|
||||||
|
|
||||||
struct spdk_nvmf_poll_group *spdk_nvmf_transport_poll_group_create(struct spdk_nvmf_transport
|
struct spdk_nvmf_poll_group *spdk_nvmf_transport_poll_group_create(struct spdk_nvmf_transport
|
||||||
|
@ -43,27 +43,6 @@ struct spdk_nvmf_tgt g_nvmf_tgt = {
|
|||||||
.subsystems = TAILQ_HEAD_INITIALIZER(g_nvmf_tgt.subsystems)
|
.subsystems = TAILQ_HEAD_INITIALIZER(g_nvmf_tgt.subsystems)
|
||||||
};
|
};
|
||||||
|
|
||||||
struct spdk_nvmf_listen_addr *
|
|
||||||
spdk_nvmf_listen_addr_create(struct spdk_nvme_transport_id *trid)
|
|
||||||
{
|
|
||||||
struct spdk_nvmf_listen_addr *listen_addr;
|
|
||||||
|
|
||||||
listen_addr = calloc(1, sizeof(*listen_addr));
|
|
||||||
if (!listen_addr) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
listen_addr->trid = *trid;
|
|
||||||
|
|
||||||
return listen_addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
spdk_nvmf_listen_addr_destroy(struct spdk_nvmf_listen_addr *addr)
|
|
||||||
{
|
|
||||||
free(addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
spdk_bdev_open(struct spdk_bdev *bdev, bool write, spdk_bdev_remove_cb_t remove_cb,
|
spdk_bdev_open(struct spdk_bdev *bdev, bool write, spdk_bdev_remove_cb_t remove_cb,
|
||||||
void *remove_ctx, struct spdk_bdev_desc **desc)
|
void *remove_ctx, struct spdk_bdev_desc **desc)
|
||||||
@ -85,9 +64,9 @@ spdk_nvmf_transport_listen(struct spdk_nvmf_transport *transport,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
spdk_nvmf_transport_listen_addr_discover(struct spdk_nvmf_transport *transport,
|
spdk_nvmf_transport_listener_discover(struct spdk_nvmf_transport *transport,
|
||||||
struct spdk_nvmf_listen_addr *listen_addr,
|
struct spdk_nvme_transport_id *trid,
|
||||||
struct spdk_nvmf_discovery_log_page_entry *entry)
|
struct spdk_nvmf_discovery_log_page_entry *entry)
|
||||||
{
|
{
|
||||||
entry->trtype = 42;
|
entry->trtype = 42;
|
||||||
}
|
}
|
||||||
@ -186,7 +165,7 @@ test_discovery_log(void)
|
|||||||
uint8_t buffer[8192];
|
uint8_t buffer[8192];
|
||||||
struct spdk_nvmf_discovery_log_page *disc_log;
|
struct spdk_nvmf_discovery_log_page *disc_log;
|
||||||
struct spdk_nvmf_discovery_log_page_entry *entry;
|
struct spdk_nvmf_discovery_log_page_entry *entry;
|
||||||
struct spdk_nvmf_listen_addr listen_addr = {};
|
struct spdk_nvme_transport_id trid = {};
|
||||||
|
|
||||||
/* Reset discovery-related globals */
|
/* Reset discovery-related globals */
|
||||||
g_nvmf_tgt.discovery_genctr = 0;
|
g_nvmf_tgt.discovery_genctr = 0;
|
||||||
@ -200,11 +179,11 @@ test_discovery_log(void)
|
|||||||
NULL, NULL, NULL);
|
NULL, NULL, NULL);
|
||||||
SPDK_CU_ASSERT_FATAL(subsystem != NULL);
|
SPDK_CU_ASSERT_FATAL(subsystem != NULL);
|
||||||
|
|
||||||
listen_addr.trid.trtype = SPDK_NVME_TRANSPORT_RDMA;
|
trid.trtype = SPDK_NVME_TRANSPORT_RDMA;
|
||||||
listen_addr.trid.adrfam = SPDK_NVMF_ADRFAM_IPV4;
|
trid.adrfam = SPDK_NVMF_ADRFAM_IPV4;
|
||||||
snprintf(listen_addr.trid.traddr, sizeof(listen_addr.trid.traddr), "1234");
|
snprintf(trid.traddr, sizeof(trid.traddr), "1234");
|
||||||
snprintf(listen_addr.trid.trsvcid, sizeof(listen_addr.trid.trsvcid), "5678");
|
snprintf(trid.trsvcid, sizeof(trid.trsvcid), "5678");
|
||||||
SPDK_CU_ASSERT_FATAL(spdk_nvmf_subsystem_add_listener(subsystem, &listen_addr) == 0);
|
SPDK_CU_ASSERT_FATAL(spdk_nvmf_subsystem_add_listener(subsystem, &trid) == 0);
|
||||||
|
|
||||||
/* Get only genctr (first field in the header) */
|
/* Get only genctr (first field in the header) */
|
||||||
memset(buffer, 0xCC, sizeof(buffer));
|
memset(buffer, 0xCC, sizeof(buffer));
|
||||||
|
@ -53,27 +53,6 @@ spdk_nvmf_subsystem_bdev_detach(struct spdk_nvmf_subsystem *subsystem)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
struct spdk_nvmf_listen_addr *
|
|
||||||
spdk_nvmf_listen_addr_create(struct spdk_nvme_transport_id *trid)
|
|
||||||
{
|
|
||||||
struct spdk_nvmf_listen_addr *listen_addr;
|
|
||||||
|
|
||||||
listen_addr = calloc(1, sizeof(*listen_addr));
|
|
||||||
if (!listen_addr) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
listen_addr->trid = *trid;
|
|
||||||
|
|
||||||
return listen_addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
spdk_nvmf_listen_addr_destroy(struct spdk_nvmf_listen_addr *addr)
|
|
||||||
{
|
|
||||||
free(addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
spdk_nvmf_transport_listen(struct spdk_nvmf_transport *transport,
|
spdk_nvmf_transport_listen(struct spdk_nvmf_transport *transport,
|
||||||
const struct spdk_nvme_transport_id *trid)
|
const struct spdk_nvme_transport_id *trid)
|
||||||
@ -82,9 +61,9 @@ spdk_nvmf_transport_listen(struct spdk_nvmf_transport *transport,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
spdk_nvmf_transport_listen_addr_discover(struct spdk_nvmf_transport *transport,
|
spdk_nvmf_transport_listener_discover(struct spdk_nvmf_transport *transport,
|
||||||
struct spdk_nvmf_listen_addr *listen_addr,
|
struct spdk_nvme_transport_id *trid,
|
||||||
struct spdk_nvmf_discovery_log_page_entry *entry)
|
struct spdk_nvmf_discovery_log_page_entry *entry)
|
||||||
{
|
{
|
||||||
entry->trtype = 42;
|
entry->trtype = 42;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user