nvme: add transport ID comparison function
Change-Id: I4ab7cbad1c31ac57347bb470f3f545d3ca81de43 Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
parent
a3a3d7dddf
commit
b9ca539390
@ -213,6 +213,24 @@ int spdk_nvme_transport_id_parse_trtype(enum spdk_nvme_transport_type *trtype, c
|
|||||||
*/
|
*/
|
||||||
int spdk_nvme_transport_id_parse_adrfam(enum spdk_nvmf_adrfam *adrfam, const char *str);
|
int spdk_nvme_transport_id_parse_adrfam(enum spdk_nvmf_adrfam *adrfam, const char *str);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compare two transport IDs.
|
||||||
|
*
|
||||||
|
* \param trid1 First transport ID to compare.
|
||||||
|
* \param trid2 Second transport ID to compare.
|
||||||
|
*
|
||||||
|
* \return 0 if trid1 == trid2, less than 0 if trid1 < trid2, greater than 0 if trid1 > trid2.
|
||||||
|
*
|
||||||
|
* The result of this function may be used to sort transport IDs in a consistent order; however,
|
||||||
|
* the comparison result is not guaranteed to be consistent across library versions.
|
||||||
|
*
|
||||||
|
* This function uses a case-insensitive comparison for string fields, but it does not otherwise
|
||||||
|
* normalize the transport ID. It is the caller's responsibility to provide the transport IDs in
|
||||||
|
* a consistent format.
|
||||||
|
*/
|
||||||
|
int spdk_nvme_transport_id_compare(const struct spdk_nvme_transport_id *trid1,
|
||||||
|
const struct spdk_nvme_transport_id *trid2);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine whether the NVMe library can handle a specific NVMe over Fabrics transport type.
|
* Determine whether the NVMe library can handle a specific NVMe over Fabrics transport type.
|
||||||
*
|
*
|
||||||
|
@ -570,4 +570,44 @@ spdk_nvme_transport_id_parse(struct spdk_nvme_transport_id *trid, const char *st
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
cmp_int(int a, int b)
|
||||||
|
{
|
||||||
|
return a - b;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
spdk_nvme_transport_id_compare(const struct spdk_nvme_transport_id *trid1,
|
||||||
|
const struct spdk_nvme_transport_id *trid2)
|
||||||
|
{
|
||||||
|
int cmp;
|
||||||
|
|
||||||
|
cmp = cmp_int(trid1->trtype, trid2->trtype);
|
||||||
|
if (cmp) {
|
||||||
|
return cmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmp = cmp_int(trid1->adrfam, trid2->adrfam);
|
||||||
|
if (cmp) {
|
||||||
|
return cmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmp = strcasecmp(trid1->traddr, trid2->traddr);
|
||||||
|
if (cmp) {
|
||||||
|
return cmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmp = strcasecmp(trid1->trsvcid, trid2->trsvcid);
|
||||||
|
if (cmp) {
|
||||||
|
return cmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmp = strcasecmp(trid1->subnqn, trid2->subnqn);
|
||||||
|
if (cmp) {
|
||||||
|
return cmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
SPDK_LOG_REGISTER_TRACE_FLAG("nvme", SPDK_TRACE_NVME)
|
SPDK_LOG_REGISTER_TRACE_FLAG("nvme", SPDK_TRACE_NVME)
|
||||||
|
@ -165,25 +165,27 @@ test_opc_data_transfer(void)
|
|||||||
static void
|
static void
|
||||||
test_trid_parse(void)
|
test_trid_parse(void)
|
||||||
{
|
{
|
||||||
struct spdk_nvme_transport_id trid;
|
struct spdk_nvme_transport_id trid1, trid2;
|
||||||
|
|
||||||
memset(&trid, 0, sizeof(trid));
|
memset(&trid1, 0, sizeof(trid1));
|
||||||
CU_ASSERT(spdk_nvme_transport_id_parse(&trid,
|
CU_ASSERT(spdk_nvme_transport_id_parse(&trid1,
|
||||||
"trtype:rdma\n"
|
"trtype:rdma\n"
|
||||||
"adrfam:ipv4\n"
|
"adrfam:ipv4\n"
|
||||||
"traddr:192.168.100.8\n"
|
"traddr:192.168.100.8\n"
|
||||||
"trsvcid:4420\n"
|
"trsvcid:4420\n"
|
||||||
"subnqn:nqn.2014-08.org.nvmexpress.discovery") == 0);
|
"subnqn:nqn.2014-08.org.nvmexpress.discovery") == 0);
|
||||||
CU_ASSERT(trid.trtype == SPDK_NVME_TRANSPORT_RDMA);
|
CU_ASSERT(trid1.trtype == SPDK_NVME_TRANSPORT_RDMA);
|
||||||
CU_ASSERT(trid.adrfam == SPDK_NVMF_ADRFAM_IPV4);
|
CU_ASSERT(trid1.adrfam == SPDK_NVMF_ADRFAM_IPV4);
|
||||||
CU_ASSERT(strcmp(trid.traddr, "192.168.100.8") == 0);
|
CU_ASSERT(strcmp(trid1.traddr, "192.168.100.8") == 0);
|
||||||
CU_ASSERT(strcmp(trid.trsvcid, "4420") == 0);
|
CU_ASSERT(strcmp(trid1.trsvcid, "4420") == 0);
|
||||||
CU_ASSERT(strcmp(trid.subnqn, "nqn.2014-08.org.nvmexpress.discovery") == 0);
|
CU_ASSERT(strcmp(trid1.subnqn, "nqn.2014-08.org.nvmexpress.discovery") == 0);
|
||||||
|
|
||||||
memset(&trid, 0, sizeof(trid));
|
memset(&trid2, 0, sizeof(trid2));
|
||||||
CU_ASSERT(spdk_nvme_transport_id_parse(&trid, "trtype:PCIe traddr:0000:04:00.0") == 0);
|
CU_ASSERT(spdk_nvme_transport_id_parse(&trid2, "trtype:PCIe traddr:0000:04:00.0") == 0);
|
||||||
CU_ASSERT(trid.trtype == SPDK_NVME_TRANSPORT_PCIE);
|
CU_ASSERT(trid2.trtype == SPDK_NVME_TRANSPORT_PCIE);
|
||||||
CU_ASSERT(strcmp(trid.traddr, "0000:04:00.0") == 0);
|
CU_ASSERT(strcmp(trid2.traddr, "0000:04:00.0") == 0);
|
||||||
|
|
||||||
|
CU_ASSERT(spdk_nvme_transport_id_compare(&trid1, &trid2) != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
|
Loading…
Reference in New Issue
Block a user