Loading include/spdk/nvme.h +18 −0 Original line number Diff line number Diff line Loading @@ -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); /** * 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. * Loading lib/nvme/nvme.c +40 −0 Original line number Diff line number Diff line Loading @@ -570,4 +570,44 @@ spdk_nvme_transport_id_parse(struct spdk_nvme_transport_id *trid, const char *st 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) test/lib/nvme/unit/nvme_c/nvme_ut.c +15 −13 Original line number Diff line number Diff line Loading @@ -165,25 +165,27 @@ test_opc_data_transfer(void) static void test_trid_parse(void) { struct spdk_nvme_transport_id trid; struct spdk_nvme_transport_id trid1, trid2; memset(&trid, 0, sizeof(trid)); CU_ASSERT(spdk_nvme_transport_id_parse(&trid, memset(&trid1, 0, sizeof(trid1)); CU_ASSERT(spdk_nvme_transport_id_parse(&trid1, "trtype:rdma\n" "adrfam:ipv4\n" "traddr:192.168.100.8\n" "trsvcid:4420\n" "subnqn:nqn.2014-08.org.nvmexpress.discovery") == 0); CU_ASSERT(trid.trtype == SPDK_NVME_TRANSPORT_RDMA); CU_ASSERT(trid.adrfam == SPDK_NVMF_ADRFAM_IPV4); CU_ASSERT(strcmp(trid.traddr, "192.168.100.8") == 0); CU_ASSERT(strcmp(trid.trsvcid, "4420") == 0); CU_ASSERT(strcmp(trid.subnqn, "nqn.2014-08.org.nvmexpress.discovery") == 0); memset(&trid, 0, sizeof(trid)); CU_ASSERT(spdk_nvme_transport_id_parse(&trid, "trtype:PCIe traddr:0000:04:00.0") == 0); CU_ASSERT(trid.trtype == SPDK_NVME_TRANSPORT_PCIE); CU_ASSERT(strcmp(trid.traddr, "0000:04:00.0") == 0); CU_ASSERT(trid1.trtype == SPDK_NVME_TRANSPORT_RDMA); CU_ASSERT(trid1.adrfam == SPDK_NVMF_ADRFAM_IPV4); CU_ASSERT(strcmp(trid1.traddr, "192.168.100.8") == 0); CU_ASSERT(strcmp(trid1.trsvcid, "4420") == 0); CU_ASSERT(strcmp(trid1.subnqn, "nqn.2014-08.org.nvmexpress.discovery") == 0); memset(&trid2, 0, sizeof(trid2)); CU_ASSERT(spdk_nvme_transport_id_parse(&trid2, "trtype:PCIe traddr:0000:04:00.0") == 0); CU_ASSERT(trid2.trtype == SPDK_NVME_TRANSPORT_PCIE); 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) Loading Loading
include/spdk/nvme.h +18 −0 Original line number Diff line number Diff line Loading @@ -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); /** * 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. * Loading
lib/nvme/nvme.c +40 −0 Original line number Diff line number Diff line Loading @@ -570,4 +570,44 @@ spdk_nvme_transport_id_parse(struct spdk_nvme_transport_id *trid, const char *st 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)
test/lib/nvme/unit/nvme_c/nvme_ut.c +15 −13 Original line number Diff line number Diff line Loading @@ -165,25 +165,27 @@ test_opc_data_transfer(void) static void test_trid_parse(void) { struct spdk_nvme_transport_id trid; struct spdk_nvme_transport_id trid1, trid2; memset(&trid, 0, sizeof(trid)); CU_ASSERT(spdk_nvme_transport_id_parse(&trid, memset(&trid1, 0, sizeof(trid1)); CU_ASSERT(spdk_nvme_transport_id_parse(&trid1, "trtype:rdma\n" "adrfam:ipv4\n" "traddr:192.168.100.8\n" "trsvcid:4420\n" "subnqn:nqn.2014-08.org.nvmexpress.discovery") == 0); CU_ASSERT(trid.trtype == SPDK_NVME_TRANSPORT_RDMA); CU_ASSERT(trid.adrfam == SPDK_NVMF_ADRFAM_IPV4); CU_ASSERT(strcmp(trid.traddr, "192.168.100.8") == 0); CU_ASSERT(strcmp(trid.trsvcid, "4420") == 0); CU_ASSERT(strcmp(trid.subnqn, "nqn.2014-08.org.nvmexpress.discovery") == 0); memset(&trid, 0, sizeof(trid)); CU_ASSERT(spdk_nvme_transport_id_parse(&trid, "trtype:PCIe traddr:0000:04:00.0") == 0); CU_ASSERT(trid.trtype == SPDK_NVME_TRANSPORT_PCIE); CU_ASSERT(strcmp(trid.traddr, "0000:04:00.0") == 0); CU_ASSERT(trid1.trtype == SPDK_NVME_TRANSPORT_RDMA); CU_ASSERT(trid1.adrfam == SPDK_NVMF_ADRFAM_IPV4); CU_ASSERT(strcmp(trid1.traddr, "192.168.100.8") == 0); CU_ASSERT(strcmp(trid1.trsvcid, "4420") == 0); CU_ASSERT(strcmp(trid1.subnqn, "nqn.2014-08.org.nvmexpress.discovery") == 0); memset(&trid2, 0, sizeof(trid2)); CU_ASSERT(spdk_nvme_transport_id_parse(&trid2, "trtype:PCIe traddr:0000:04:00.0") == 0); CU_ASSERT(trid2.trtype == SPDK_NVME_TRANSPORT_PCIE); 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) Loading