32 #include "rdma_common.h"
34 #define MAX_BUFF_SIZE (256)
61 DOCA_LOG_INFO(
"You can now copy %s to the responder",
cfg->local_connection_desc_path);
65 "Please copy %s and %s from the responder and then press enter after pressing enter in the responder side",
66 cfg->remote_connection_desc_path,
67 cfg->remote_resource_desc_path);
86 DOCA_LOG_ERR(
"Failed to read the remote RDMA mmap connection details: %s",
126 DOCA_LOG_INFO(
"Read from responder: \"%s\"", (
char *)dst_buf_data);
202 if (
cfg->use_rdma_cm ==
true)
218 DOCA_LOG_ERR(
"Failed to write and read connection details from the responder: %s",
229 DOCA_LOG_ERR(
"Failed to connect the sender's RDMA to the responder's RDMA: %s",
243 struct doca_rdma_task_read *rdma_read_task =
NULL;
245 char *remote_mmap_range;
246 size_t remote_mmap_range_len;
274 DOCA_LOG_ERR(
"Failed to allocate DOCA buffer to DOCA buffer inventory: %s",
286 DOCA_LOG_ERR(
"Failed to allocate DOCA buffer to DOCA buffer inventory: %s",
288 goto destroy_src_buf;
302 goto destroy_dst_buf;
343 struct doca_ctx *
ctx,
352 switch (next_state) {
361 DOCA_LOG_ERR(
"rdma_read_requester_export_and_connect() failed: %s",
367 if (
cfg->use_rdma_cm ==
true)
382 DOCA_LOG_INFO(
"RDMA context entered into stopping state. Any inflight tasks will be flushed");
413 struct timespec ts = {
436 goto destroy_resources;
442 goto destroy_resources;
450 goto destroy_resources;
457 goto destroy_resources;
464 goto destroy_buf_inventory;
468 if (
cfg->use_rdma_cm ==
true) {
476 DOCA_LOG_ERR(
"Failed to config RDMA CM callbacks and negotiation functions: %s",
478 goto destroy_buf_inventory;
486 goto stop_buf_inventory;
508 destroy_buf_inventory:
doca_error_t destroy_rdma_resources(struct rdma_resources *resources)
void wait_for_enter(void)
doca_error_t write_file(const char *file_path, const char *string, size_t string_len)
doca_error_t rdma_cm_connect(struct rdma_resources *resources)
doca_error_t allocate_rdma_resources(struct rdma_config *cfg, const uint32_t mmap_permissions, const uint32_t rdma_permissions, task_check func, struct rdma_resources *resources)
doca_error_t config_rdma_cm_callback_and_negotiation_task(struct rdma_resources *resources, bool need_send_task, bool need_recv_task)
doca_error_t rdma_cm_disconnect(struct rdma_resources *resources)
#define INVENTORY_NUM_INITIAL_ELEMENTS
struct rdma_resources resources
DOCA_STABLE doca_error_t doca_buf_inventory_destroy(struct doca_buf_inventory *inventory)
Destroy buffer inventory structure.
static doca_error_t doca_buf_inventory_buf_get_by_addr(struct doca_buf_inventory *inventory, struct doca_mmap *mmap, void *addr, size_t len, struct doca_buf **buf)
Allocate single element from buffer inventory and point it to the buffer defined by addr & len argume...
static doca_error_t doca_buf_inventory_buf_get_by_data(struct doca_buf_inventory *inventory, struct doca_mmap *mmap, void *data, size_t data_len, struct doca_buf **buf)
Allocate single element from buffer inventory and point it to the buffer defined by data & data_len a...
DOCA_STABLE doca_error_t doca_buf_inventory_start(struct doca_buf_inventory *inventory)
Start element retrieval from inventory.
DOCA_STABLE doca_error_t doca_buf_inventory_create(size_t num_elements, struct doca_buf_inventory **inventory)
Allocates buffer inventory with default/unset attributes.
DOCA_STABLE doca_error_t doca_buf_inventory_stop(struct doca_buf_inventory *inventory)
Stop element retrieval from inventory.
DOCA_STABLE doca_error_t doca_buf_dec_refcount(struct doca_buf *buf, uint16_t *refcount)
Decrease the object reference count by 1, if 0 reached, return the element back to the inventory.
DOCA_STABLE doca_error_t doca_buf_get_data(const struct doca_buf *buf, void **data)
Get the buffer's data.
DOCA_STABLE doca_error_t doca_ctx_start(struct doca_ctx *ctx)
Finalizes all configurations, and starts the DOCA CTX.
DOCA_STABLE doca_error_t doca_ctx_set_state_changed_cb(struct doca_ctx *ctx, doca_ctx_state_changed_callback_t cb)
Set state changed callback.
DOCA_STABLE doca_error_t doca_ctx_set_user_data(struct doca_ctx *ctx, union doca_data user_data)
set user data to context
DOCA_STABLE doca_error_t doca_ctx_stop(struct doca_ctx *ctx)
Stops the context allowing reconfiguration.
doca_ctx_states
This enum defines the states of a context.
@ DOCA_CTX_STATE_STARTING
@ DOCA_CTX_STATE_STOPPING
#define DOCA_ERROR_PROPAGATE(r, t)
Save the first encountered doca_error_t.
enum doca_error doca_error_t
DOCA API return codes.
DOCA_STABLE const char * doca_error_get_descr(doca_error_t error)
Returns the description string of an error code.
@ DOCA_ERROR_INVALID_VALUE
#define DOCA_LOG_ERR(format,...)
Generates an ERROR application log message.
#define DOCA_LOG_INFO(format,...)
Generates an INFO application log message.
DOCA_STABLE doca_error_t doca_mmap_create_from_export(const union doca_data *user_data, const void *export_desc, size_t export_desc_len, struct doca_dev *dev, struct doca_mmap **mmap)
Creates a memory map object representing memory ranges in remote system memory space.
DOCA_STABLE doca_error_t doca_mmap_get_memrange(const struct doca_mmap *mmap, void **addr, size_t *len)
Get the memory range of DOCA memory map.
DOCA_STABLE doca_error_t doca_task_get_status(const struct doca_task *task)
Get task status.
DOCA_STABLE doca_error_t doca_task_submit(struct doca_task *task)
Submit a task to a progress engine.
DOCA_STABLE uint8_t doca_pe_progress(struct doca_pe *pe)
Run the progress engine.
DOCA_STABLE void doca_task_free(struct doca_task *task)
Free a task back to where it was allocated from.
DOCA_EXPERIMENTAL doca_error_t doca_rdma_task_read_allocate_init(struct doca_rdma *rdma, struct doca_rdma_connection *rdma_connection, const struct doca_buf *src_buf, struct doca_buf *dst_buf, union doca_data user_data, struct doca_rdma_task_read **task)
This method allocates and initializes a read task.
DOCA_EXPERIMENTAL doca_error_t doca_rdma_task_read_set_conf(struct doca_rdma *rdma, doca_rdma_task_read_completion_cb_t successful_task_completion_cb, doca_rdma_task_read_completion_cb_t error_task_completion_cb, uint32_t num_tasks)
This method sets the read tasks configuration.
DOCA_EXPERIMENTAL doca_error_t doca_rdma_export(struct doca_rdma *rdma, const void **local_rdma_conn_details, size_t *local_rdma_conn_details_size, struct doca_rdma_connection **rdma_connection)
Export doca_rdma connection details object The doca_rdma_conn_details are used in doca_rdma_connect()...
DOCA_EXPERIMENTAL struct doca_task * doca_rdma_task_read_as_task(struct doca_rdma_task_read *task)
This method converts a read task to a doca_task.
DOCA_EXPERIMENTAL doca_error_t doca_rdma_connect(struct doca_rdma *rdma, const void *remote_rdma_conn_details, size_t remote_rdma_conn_details_size, struct doca_rdma_connection *rdma_connection)
Connect to remote doca_rdma peer. Can only be called when the ctx is in DOCA_CTX_STATE_STARTING state...
DOCA_EXPERIMENTAL doca_error_t doca_rdma_cap_task_read_is_supported(const struct doca_devinfo *devinfo)
@ DOCA_RDMA_TRANSPORT_TYPE_RC
@ DOCA_ACCESS_FLAG_LOCAL_READ_WRITE
const struct ip_frag_config * cfg
static void rdma_read_completed_callback(struct doca_rdma_task_read *rdma_read_task, union doca_data task_user_data, union doca_data ctx_user_data)
static void rdma_read_requester_state_change_callback(const union doca_data user_data, struct doca_ctx *ctx, enum doca_ctx_states prev_state, enum doca_ctx_states next_state)
static doca_error_t rdma_read_prepare_and_submit_task(struct rdma_resources *resources)
static doca_error_t rdma_read_requester_export_and_connect(struct rdma_resources *resources)
DOCA_LOG_REGISTER(RDMA_READ_REQUESTER::SAMPLE)
doca_error_t rdma_read_requester(struct rdma_config *cfg)
static doca_error_t write_read_connection(struct rdma_config *cfg, struct rdma_resources *resources)
static void rdma_read_error_callback(struct doca_rdma_task_read *rdma_read_task, union doca_data task_user_data, union doca_data ctx_user_data)
size_t remote_rdma_conn_descriptor_size
doca_error_t first_encountered_error
struct doca_ctx * rdma_ctx
struct doca_mmap * remote_mmap
size_t num_remaining_tasks
prepare_and_submit_task_fn task_fn
const void * rdma_conn_descriptor
size_t remote_mmap_descriptor_size
void * remote_mmap_descriptor
void * remote_rdma_conn_descriptor
struct doca_rdma_connection * connections[MAX_NUM_CONNECTIONS]
struct doca_buf * dst_buf
struct doca_dev * doca_device
struct doca_buf * src_buf
struct doca_buf_inventory * buf_inventory
size_t rdma_conn_descriptor_size
Convenience type for representing opaque data.
struct upf_accel_ctx * ctx
doca_error_t read_file(char const *path, char **out_bytes, size_t *out_bytes_len)