xref: /spdk/test/common/lib/test_rdma.c (revision 34f6147c57911b2f8b9d44e63bc8a9d9d9117e17)
1488570ebSJim Harris /*   SPDX-License-Identifier: BSD-3-Clause
2a6dbe372Spaul luse  *   Copyright (C) 2021 Intel Corporation. All rights reserved.
3d9ff7d09SAlexey Marchuk  *   Copyright (c) 2020, 2021 Mellanox Technologies LTD. All rights reserved.
4cf151d60SAlexey Marchuk  *   Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
5ea7a4f3cSAlexey Marchuk  */
6ea7a4f3cSAlexey Marchuk 
7ea7a4f3cSAlexey Marchuk #include "spdk/stdinc.h"
8ea7a4f3cSAlexey Marchuk 
9cf151d60SAlexey Marchuk #include "spdk_internal/rdma_provider.h"
108a01b4d6SAlexey Marchuk #include "spdk_internal/rdma_utils.h"
11ea7a4f3cSAlexey Marchuk #include "spdk_internal/mock.h"
12ea7a4f3cSAlexey Marchuk 
13b6efb964SAlexey Marchuk #define RDMA_UT_LKEY 123
14b6efb964SAlexey Marchuk #define RDMA_UT_RKEY 312
15b6efb964SAlexey Marchuk 
16bcd987eaSShuhei Matsumoto struct spdk_nvme_transport_opts g_spdk_nvme_transport_opts = {};
17cf151d60SAlexey Marchuk struct spdk_rdma_provider_qp g_spdk_rdma_qp = {};
18cf151d60SAlexey Marchuk struct spdk_rdma_provider_srq g_spdk_rdma_srq = {};
19cf151d60SAlexey Marchuk 
20cf151d60SAlexey Marchuk DEFINE_STUB(spdk_rdma_provider_qp_create, struct spdk_rdma_provider_qp *, (struct rdma_cm_id *cm_id,
21cf151d60SAlexey Marchuk 		struct spdk_rdma_provider_qp_init_attr *qp_attr), &g_spdk_rdma_qp);
22cf151d60SAlexey Marchuk DEFINE_STUB(spdk_rdma_provider_qp_accept, int, (struct spdk_rdma_provider_qp *spdk_rdma_qp,
23268aacb2SAlexey Marchuk 		struct rdma_conn_param *conn_param), 0);
24cf151d60SAlexey Marchuk DEFINE_STUB(spdk_rdma_provider_qp_complete_connect, int,
25cf151d60SAlexey Marchuk 	    (struct spdk_rdma_provider_qp *spdk_rdma_qp), 0);
26cf151d60SAlexey Marchuk DEFINE_STUB_V(spdk_rdma_provider_qp_destroy, (struct spdk_rdma_provider_qp *spdk_rdma_qp));
27cf151d60SAlexey Marchuk DEFINE_STUB(spdk_rdma_provider_qp_disconnect, int, (struct spdk_rdma_provider_qp *spdk_rdma_qp), 0);
28cf151d60SAlexey Marchuk DEFINE_STUB(spdk_rdma_provider_qp_queue_send_wrs, bool, (struct spdk_rdma_provider_qp *spdk_rdma_qp,
29bbb493ceSAlexey Marchuk 		struct ibv_send_wr *first), true);
30cf151d60SAlexey Marchuk DEFINE_STUB(spdk_rdma_provider_qp_flush_send_wrs, int, (struct spdk_rdma_provider_qp *spdk_rdma_qp,
31bbb493ceSAlexey Marchuk 		struct ibv_send_wr **bad_wr), 0);
32cf151d60SAlexey Marchuk DEFINE_STUB(spdk_rdma_provider_srq_create, struct spdk_rdma_provider_srq *,
33cf151d60SAlexey Marchuk 	    (struct spdk_rdma_provider_srq_init_attr *init_attr), &g_spdk_rdma_srq);
34cf151d60SAlexey Marchuk DEFINE_STUB(spdk_rdma_provider_srq_destroy, int, (struct spdk_rdma_provider_srq *rdma_srq), 0);
35cf151d60SAlexey Marchuk DEFINE_STUB(spdk_rdma_provider_srq_queue_recv_wrs, bool, (struct spdk_rdma_provider_srq *rdma_srq,
36696e8580SAlexey Marchuk 		struct ibv_recv_wr *first), true);
37cf151d60SAlexey Marchuk DEFINE_STUB(spdk_rdma_provider_srq_flush_recv_wrs, int, (struct spdk_rdma_provider_srq *rdma_srq,
38696e8580SAlexey Marchuk 		struct ibv_recv_wr **bad_wr), 0);
39cf151d60SAlexey Marchuk DEFINE_STUB(spdk_rdma_provider_qp_queue_recv_wrs, bool, (struct spdk_rdma_provider_qp *spdk_rdma_qp,
40d9ff7d09SAlexey Marchuk 		struct ibv_recv_wr *first), true);
41cf151d60SAlexey Marchuk DEFINE_STUB(spdk_rdma_provider_qp_flush_recv_wrs, int, (struct spdk_rdma_provider_qp *spdk_rdma_qp,
42d9ff7d09SAlexey Marchuk 		struct ibv_recv_wr **bad_wr), 0);
438a01b4d6SAlexey Marchuk DEFINE_STUB(spdk_rdma_utils_create_mem_map, struct spdk_rdma_utils_mem_map *, (struct ibv_pd *pd,
448ffb2c09SAlexey Marchuk 		struct spdk_nvme_rdma_hooks *hooks, uint32_t access_flags), NULL)
458a01b4d6SAlexey Marchuk DEFINE_STUB_V(spdk_rdma_utils_free_mem_map, (struct spdk_rdma_utils_mem_map **map));
46*34f6147cSAlexey Marchuk DEFINE_STUB(spdk_rdma_utils_get_memory_domain, struct spdk_memory_domain *, (struct ibv_pd *pd),
47*34f6147cSAlexey Marchuk 	    NULL);
48*34f6147cSAlexey Marchuk DEFINE_STUB(spdk_rdma_utils_put_memory_domain, int, (struct spdk_memory_domain *domain), 0);
49b6efb964SAlexey Marchuk 
50b6efb964SAlexey Marchuk /* used to mock out having to split an SGL over a memory region */
51b6efb964SAlexey Marchuk size_t g_mr_size;
5201f2d0bdSAlexey Marchuk uint64_t g_mr_next_size;
53b6efb964SAlexey Marchuk struct ibv_mr g_rdma_mr = {
54b6efb964SAlexey Marchuk 	.addr = (void *)0xC0FFEE,
55b6efb964SAlexey Marchuk 	.lkey = RDMA_UT_LKEY,
56b6efb964SAlexey Marchuk 	.rkey = RDMA_UT_RKEY
57b6efb964SAlexey Marchuk };
58b6efb964SAlexey Marchuk 
598a01b4d6SAlexey Marchuk DEFINE_RETURN_MOCK(spdk_rdma_utils_get_translation, int);
60b6efb964SAlexey Marchuk int
spdk_rdma_utils_get_translation(struct spdk_rdma_utils_mem_map * map,void * address,size_t length,struct spdk_rdma_utils_memory_translation * translation)618a01b4d6SAlexey Marchuk spdk_rdma_utils_get_translation(struct spdk_rdma_utils_mem_map *map, void *address,
628a01b4d6SAlexey Marchuk 				size_t length, struct spdk_rdma_utils_memory_translation *translation)
63b6efb964SAlexey Marchuk {
64b6efb964SAlexey Marchuk 	translation->mr_or_key.mr = &g_rdma_mr;
658a01b4d6SAlexey Marchuk 	translation->translation_type = SPDK_RDMA_UTILS_TRANSLATION_MR;
668a01b4d6SAlexey Marchuk 	HANDLE_RETURN_MOCK(spdk_rdma_utils_get_translation);
67b6efb964SAlexey Marchuk 
68b6efb964SAlexey Marchuk 	if (g_mr_size && length > g_mr_size) {
6901f2d0bdSAlexey Marchuk 		if (g_mr_next_size) {
7001f2d0bdSAlexey Marchuk 			g_mr_size = g_mr_next_size;
7101f2d0bdSAlexey Marchuk 		}
72b6efb964SAlexey Marchuk 		return -ERANGE;
73b6efb964SAlexey Marchuk 	}
74b6efb964SAlexey Marchuk 
75b6efb964SAlexey Marchuk 	return 0;
76b6efb964SAlexey Marchuk }
77d75daea5SShuhei Matsumoto 
788a01b4d6SAlexey Marchuk DEFINE_RETURN_MOCK(spdk_rdma_utils_get_pd, struct ibv_pd *);
79d75daea5SShuhei Matsumoto struct ibv_pd *
spdk_rdma_utils_get_pd(struct ibv_context * context)808a01b4d6SAlexey Marchuk spdk_rdma_utils_get_pd(struct ibv_context *context)
81d75daea5SShuhei Matsumoto {
828a01b4d6SAlexey Marchuk 	HANDLE_RETURN_MOCK(spdk_rdma_utils_get_pd);
83d75daea5SShuhei Matsumoto 	return NULL;
84d75daea5SShuhei Matsumoto }
85d75daea5SShuhei Matsumoto 
868a01b4d6SAlexey Marchuk DEFINE_STUB_V(spdk_rdma_utils_put_pd, (struct ibv_pd *pd));
87