From f10a91ed0df8290ce8a6350421ec802855ee5c02 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Mon, 10 Sep 2018 14:28:04 -0700 Subject: [PATCH] nvmf: Add function to get local addr for a qpair Change-Id: I19b9834c709bf97b1bbc1a9278b8c3b9350546e2 Signed-off-by: Ben Walker Reviewed-on: https://review.gerrithub.io/425185 Tested-by: SPDK CI Jenkins Chandler-Test-Pool: SPDK Automated Test System Reviewed-by: Jim Harris Reviewed-by: Changpeng Liu Reviewed-by: Shuhei Matsumoto --- include/spdk/nvmf.h | 12 ++++++++++++ lib/nvmf/nvmf.c | 7 +++++++ lib/nvmf/rdma.c | 12 ++++++++++++ lib/nvmf/transport.c | 7 +++++++ lib/nvmf/transport.h | 9 +++++++++ 5 files changed, 47 insertions(+) diff --git a/include/spdk/nvmf.h b/include/spdk/nvmf.h index 89ff6b4e5..26e2214d4 100644 --- a/include/spdk/nvmf.h +++ b/include/spdk/nvmf.h @@ -218,6 +218,18 @@ int spdk_nvmf_qpair_disconnect(struct spdk_nvmf_qpair *qpair, nvmf_qpair_disconn int spdk_nvmf_qpair_get_peer_trid(struct spdk_nvmf_qpair *qpair, struct spdk_nvme_transport_id *trid); +/** + * Get the local transport ID for this queue pair. + * + * \param qpair The NVMe-oF qpair + * \param trid Output parameter that will contain the transport id. + * + * \return 0 for success. + * \return -EINVAL if the qpair is not connected. + */ +int spdk_nvmf_qpair_get_local_trid(struct spdk_nvmf_qpair *qpair, + struct spdk_nvme_transport_id *trid); + /** * Get the associated listener transport ID for this queue pair. * diff --git a/lib/nvmf/nvmf.c b/lib/nvmf/nvmf.c index c54054aae..35e3e040d 100644 --- a/lib/nvmf/nvmf.c +++ b/lib/nvmf/nvmf.c @@ -753,6 +753,13 @@ spdk_nvmf_qpair_get_peer_trid(struct spdk_nvmf_qpair *qpair, return spdk_nvmf_transport_qpair_get_peer_trid(qpair, trid); } +int +spdk_nvmf_qpair_get_local_trid(struct spdk_nvmf_qpair *qpair, + struct spdk_nvme_transport_id *trid) +{ + return spdk_nvmf_transport_qpair_get_local_trid(qpair, trid); +} + int spdk_nvmf_qpair_get_listen_trid(struct spdk_nvmf_qpair *qpair, struct spdk_nvme_transport_id *trid) diff --git a/lib/nvmf/rdma.c b/lib/nvmf/rdma.c index cccb0d38f..6836b0ae3 100644 --- a/lib/nvmf/rdma.c +++ b/lib/nvmf/rdma.c @@ -2757,6 +2757,17 @@ spdk_nvmf_rdma_qpair_get_peer_trid(struct spdk_nvmf_qpair *qpair, return spdk_nvmf_rdma_trid_from_cm_id(rqpair->cm_id, trid, true); } +static int +spdk_nvmf_rdma_qpair_get_local_trid(struct spdk_nvmf_qpair *qpair, + struct spdk_nvme_transport_id *trid) +{ + struct spdk_nvmf_rdma_qpair *rqpair; + + rqpair = SPDK_CONTAINEROF(qpair, struct spdk_nvmf_rdma_qpair, qpair); + + return spdk_nvmf_rdma_trid_from_cm_id(rqpair->cm_id, trid, false); +} + static int spdk_nvmf_rdma_qpair_get_listen_trid(struct spdk_nvmf_qpair *qpair, struct spdk_nvme_transport_id *trid) @@ -2790,6 +2801,7 @@ const struct spdk_nvmf_transport_ops spdk_nvmf_transport_rdma = { .qpair_fini = spdk_nvmf_rdma_close_qpair, .qpair_is_idle = spdk_nvmf_rdma_qpair_is_idle, .qpair_get_peer_trid = spdk_nvmf_rdma_qpair_get_peer_trid, + .qpair_get_local_trid = spdk_nvmf_rdma_qpair_get_local_trid, .qpair_get_listen_trid = spdk_nvmf_rdma_qpair_get_listen_trid, }; diff --git a/lib/nvmf/transport.c b/lib/nvmf/transport.c index 26767ddad..20203c991 100644 --- a/lib/nvmf/transport.c +++ b/lib/nvmf/transport.c @@ -217,6 +217,13 @@ spdk_nvmf_transport_qpair_get_peer_trid(struct spdk_nvmf_qpair *qpair, return qpair->transport->ops->qpair_get_peer_trid(qpair, trid); } +int +spdk_nvmf_transport_qpair_get_local_trid(struct spdk_nvmf_qpair *qpair, + struct spdk_nvme_transport_id *trid) +{ + return qpair->transport->ops->qpair_get_local_trid(qpair, trid); +} + int spdk_nvmf_transport_qpair_get_listen_trid(struct spdk_nvmf_qpair *qpair, struct spdk_nvme_transport_id *trid) diff --git a/lib/nvmf/transport.h b/lib/nvmf/transport.h index 254a7f05d..47c9ad2e6 100644 --- a/lib/nvmf/transport.h +++ b/lib/nvmf/transport.h @@ -137,6 +137,12 @@ struct spdk_nvmf_transport_ops { int (*qpair_get_peer_trid)(struct spdk_nvmf_qpair *qpair, struct spdk_nvme_transport_id *trid); + /* + * Get the local transport ID for the queue pair. + */ + int (*qpair_get_local_trid)(struct spdk_nvmf_qpair *qpair, + struct spdk_nvme_transport_id *trid); + /* * Get the listener transport ID that accepted this qpair originally. */ @@ -183,6 +189,9 @@ bool spdk_nvmf_transport_qpair_is_idle(struct spdk_nvmf_qpair *qpair); int spdk_nvmf_transport_qpair_get_peer_trid(struct spdk_nvmf_qpair *qpair, struct spdk_nvme_transport_id *trid); +int spdk_nvmf_transport_qpair_get_local_trid(struct spdk_nvmf_qpair *qpair, + struct spdk_nvme_transport_id *trid); + int spdk_nvmf_transport_qpair_get_listen_trid(struct spdk_nvmf_qpair *qpair, struct spdk_nvme_transport_id *trid);