39 using namespace std::string_literals;
45 static auto constexpr pci_addr_len =
sizeof(
"XX:XX.X") -
sizeof(
'\0');
46 static auto constexpr pci_long_addr_len =
sizeof(
"XXXX:XX:XX.X") -
sizeof(
'\0');
50 doca_devinfo **list =
nullptr;
51 uint32_t list_size = 0;
57 doca_devinfo *selected_devinfo =
nullptr;
59 for (uint32_t ii = 0; ii != list_size; ++ii) {
60 auto *devinfo = list[ii];
61 std::array<char, max_name_length> device_name;
63 if (identifier.size() == pci_addr_len || identifier.size() == pci_long_addr_len) {
64 uint8_t is_addr_equal = 0;
67 selected_devinfo = devinfo;
74 if (strcmp(identifier.c_str(), device_name.data()) == 0) {
75 selected_devinfo = devinfo;
82 if (strcmp(identifier.c_str(), device_name.data()) == 0) {
83 selected_devinfo = devinfo;
89 if (selected_devinfo ==
nullptr) {
91 throw std::runtime_error{
"No doca device found that matched given identifier: \"" + identifier +
"\""};
94 doca_dev *opened_device;
101 return opened_device;
107 doca_devinfo_rep **list =
nullptr;
108 uint32_t list_size = 0;
110 uint8_t supports_net_filter = 0;
113 throw std::runtime_error{
"Selected doca device does not support representors"s +
118 throw std::runtime_error{
"Unable to enumerate doca device representors"s +
doca_error_get_name(ret)};
121 for (uint32_t ii = 0; ii != list_size; ++ii) {
122 auto *repinfo = list[ii];
123 uint8_t is_addr_equal;
132 throw std::runtime_error{
"Unable to open doca device representor"s +
142 throw std::runtime_error{
"No doca device representor found that matched given identifier: \"" + identifier +
146 doca_mmap *
make_mmap(doca_dev *dev,
char *memory_region,
size_t memory_region_size, uint32_t permissions)
149 doca_mmap *obj =
nullptr;
154 DOCA_LOG_DBG(
"Created mmap %p: dev: %p, region: %p, size: %lu, permissions: 0x%X",
164 throw std::runtime_error{
"Failed to add doca_dev to doca_mmap: "s +
doca_error_get_name(ret)};
170 throw std::runtime_error{
"Failed to set doca_mmap memory range: "s +
doca_error_get_name(ret)};
176 throw std::runtime_error{
"Failed to set doca_mmap access permissions: "s +
doca_error_get_name(ret)};
188 doca_mmap *
make_mmap(doca_dev *dev,
void const *mmap_export_blob,
size_t mmap_export_blob_size)
190 doca_mmap *
mmap =
nullptr;
193 throw std::runtime_error{
"Failed to create doca_mmap from export: "s +
doca_error_get_name(ret)};
196 DOCA_LOG_DBG(
"Created mmap from export: %p using: dev %p, blob %p, blob_size: %zu",
200 mmap_export_blob_size);
207 doca_buf_inventory *inv;
212 throw std::runtime_error{
"Failed to create doca_buf_inventory: "s +
doca_error_get_name(ret)};
218 throw std::runtime_error{
"Failed to start doca_buf_inventory: "s +
doca_error_get_name(ret)};
227 uint32_t task_pool_size,
234 doca_comch_consumer *obj;
237 throw std::runtime_error{
"Failed to create doca_comch_consumer: "s +
doca_error_get_name(ret)};
241 "Created consumer using; conn: %p, pe: %p, mmap: %p, task_pool_size: %u, callback_user_data: 0x%lX, task_cb: %p, error_cb: %p ",
246 callback_user_data.
u64,
253 throw std::runtime_error{
"Failed to connect doca_comch_consumer to progress engine: "s +
260 throw std::runtime_error{
"Failed to create doca_comch_consumer task pool: "s +
267 throw std::runtime_error{
"Failed to set doca_comch_consumer user data: "s +
doca_error_get_name(ret)};
273 throw std::runtime_error{
"Failed to start doca_comch_consumer: "s +
doca_error_get_name(ret)};
281 uint32_t task_pool_size,
288 doca_comch_producer *obj;
291 throw std::runtime_error{
"Failed to create doca_comch_producer: "s +
doca_error_get_name(ret)};
294 "Created producer using; conn: %p, pe: %p, task_pool_size: %u, callback_user_data: 0x%lX, task_cb: %p, error_cb: %p ",
298 callback_user_data.
u64,
305 throw std::runtime_error{
"Failed to connect doca_comch_producer to progress engine: "s +
312 throw std::runtime_error{
"Failed to create doca_comch_producer task pool: "s +
319 throw std::runtime_error{
"Failed to set doca_comch_producer user data: "s +
doca_error_get_name(ret)};
325 throw std::runtime_error{
"Failed to start doca_comch_producer: "s +
doca_error_get_name(ret)};
344 throw std::runtime_error{
"Failed to set doca_rdma permissions: "s +
doca_error_get_name(ret)};
350 throw std::runtime_error{
"Failed to attach doca_rdma to doca_pe: "s +
doca_error_get_name(ret)};
356 throw std::runtime_error{
"Failed to set doca_rdma user data: "s +
doca_error_get_name(ret)};
371 std::vector<doca_task *> ctx_tasks;
387 if (!ctx_tasks.empty()) {
388 size_t num_inflight_tasks = 0;
391 for (
size_t ii = 0; ii != num_inflight_tasks; ++ii)
393 }
while (num_inflight_tasks != 0);
395 for (
auto *task : ctx_tasks)
414 char const *short_name,
415 char const *long_name,
421 if (!short_name && !long_name) {
422 throw std::runtime_error{
"Unable to register arg parser parameter with no name"};
425 doca_argp_param *param{
nullptr};
429 throw std::runtime_error{
"Failed to create arg parser parameter"};
432 if (short_name !=
nullptr) {
435 if (long_name !=
nullptr) {
450 std::string message{
"Unable to register arg parser parameter: "};
453 message += *short_name;
461 message += long_name;
464 message +=
" reason: ";
467 throw std::runtime_error{message};
505 if (matrix_type ==
"vandermonde") {
509 if (matrix_type ==
"cauchy") {
DOCA_LOG_REGISTER(DOCA_UTILS)
struct doca_log_backend * stdout_logger
static struct doca_pe * pe
DOCA_EXPERIMENTAL void doca_argp_param_set_description(struct doca_argp_param *param, const char *description)
Set the description of the program param, used during program usage.
DOCA_EXPERIMENTAL void doca_argp_param_set_long_name(struct doca_argp_param *param, const char *name)
Set the long name of the program param.
doca_argp_type
Flag input type.
doca_error_t(* doca_argp_param_cb_t)(void *, void *)
Flag callback function type.
DOCA_EXPERIMENTAL void doca_argp_param_set_callback(struct doca_argp_param *param, doca_argp_param_cb_t callback)
Set the callback function of the program param.
DOCA_EXPERIMENTAL void doca_argp_param_set_mandatory(struct doca_argp_param *param)
Mark the program param as mandatory.
DOCA_EXPERIMENTAL doca_error_t doca_argp_param_create(struct doca_argp_param **param)
Create new program param.
DOCA_EXPERIMENTAL void doca_argp_param_set_type(struct doca_argp_param *param, enum doca_argp_type type)
Set the type of the param arguments.
DOCA_EXPERIMENTAL void doca_argp_param_set_short_name(struct doca_argp_param *param, const char *name)
Set the short name of the program param.
DOCA_EXPERIMENTAL doca_error_t doca_argp_register_param(struct doca_argp_param *input_param)
Register a program flag.
DOCA_EXPERIMENTAL void doca_argp_param_set_multiplicity(struct doca_argp_param *param)
Mark the program param as supporting multiple appearances.
DOCA_STABLE doca_error_t doca_buf_inventory_destroy(struct doca_buf_inventory *inventory)
Destroy buffer inventory structure.
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.
void(* doca_comch_consumer_task_post_recv_completion_cb_t)(struct doca_comch_consumer_task_post_recv *task, union doca_data task_user_data, union doca_data ctx_user_data)
DOCA_STABLE doca_error_t doca_comch_consumer_create(struct doca_comch_connection *comch_connection, struct doca_mmap *buf_mmap, struct doca_comch_consumer **consumer)
DOCA_STABLE doca_error_t doca_comch_consumer_destroy(struct doca_comch_consumer *consumer)
DOCA_STABLE doca_error_t doca_comch_consumer_task_post_recv_set_conf(struct doca_comch_consumer *consumer, doca_comch_consumer_task_post_recv_completion_cb_t task_completion_cb, doca_comch_consumer_task_post_recv_completion_cb_t task_error_cb, uint32_t num_post_recv_tasks)
DOCA_STABLE struct doca_ctx * doca_comch_consumer_as_ctx(struct doca_comch_consumer *consumer)
DOCA_STABLE doca_error_t doca_comch_producer_create(struct doca_comch_connection *comch_connection, struct doca_comch_producer **producer)
void(* doca_comch_producer_task_send_completion_cb_t)(struct doca_comch_producer_task_send *task, union doca_data task_user_data, union doca_data ctx_user_data)
DOCA_STABLE doca_error_t doca_comch_producer_task_send_set_conf(struct doca_comch_producer *producer, doca_comch_producer_task_send_completion_cb_t task_completion_cb, doca_comch_producer_task_send_completion_cb_t task_error_cb, uint32_t num_send_tasks)
DOCA_STABLE doca_error_t doca_comch_producer_destroy(struct doca_comch_producer *producer)
DOCA_STABLE struct doca_ctx * doca_comch_producer_as_ctx(struct doca_comch_producer *producer)
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_get_state(const struct doca_ctx *ctx, enum doca_ctx_states *state)
Get context state.
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_get_num_inflight_tasks(const struct doca_ctx *ctx, size_t *num_inflight_tasks)
Get number of in flight tasks in a doca 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_STABLE doca_error_t doca_devinfo_is_equal_pci_addr(const struct doca_devinfo *devinfo, const char *pci_addr_str, uint8_t *is_equal)
Check if a PCI address belongs to a DOCA devinfo.
DOCA_STABLE doca_error_t doca_dev_rep_open(struct doca_devinfo_rep *devinfo, struct doca_dev_rep **dev_rep)
Initialize representor device for use.
DOCA_STABLE doca_error_t doca_devinfo_rep_destroy_list(struct doca_devinfo_rep **dev_list_rep)
Destroy list of representor device info structures.
DOCA_STABLE doca_error_t doca_devinfo_rep_create_list(struct doca_dev *dev, int filter, struct doca_devinfo_rep ***dev_list_rep, uint32_t *nb_devs_rep)
Create list of available representor devices accessible by dev.
DOCA_STABLE doca_error_t doca_devinfo_create_list(struct doca_devinfo ***dev_list, uint32_t *nb_devs)
Creates list of all available local devices.
DOCA_STABLE doca_error_t doca_devinfo_get_ibdev_name(const struct doca_devinfo *devinfo, char *ibdev_name, uint32_t size)
Get the name of the IB device represented by a DOCA devinfo.
DOCA_STABLE doca_error_t doca_devinfo_destroy_list(struct doca_devinfo **dev_list)
Destroy list of local device info structures.
DOCA_STABLE doca_error_t doca_dev_open(struct doca_devinfo *devinfo, struct doca_dev **dev)
Initialize local device for use.
#define DOCA_DEVINFO_IFACE_NAME_SIZE
Buffer size to hold network interface name. Including a null terminator.
DOCA_STABLE doca_error_t doca_devinfo_rep_is_equal_pci_addr(const struct doca_devinfo_rep *devinfo_rep, const char *pci_addr_str, uint8_t *is_equal)
Check if a PCI address belongs to a DOCA devinfo_rep.
DOCA_STABLE struct doca_devinfo * doca_dev_as_devinfo(const struct doca_dev *dev)
Get local device info from device. This should be useful when wanting to query information about devi...
DOCA_STABLE doca_error_t doca_devinfo_rep_cap_is_filter_net_supported(const struct doca_devinfo *devinfo, uint8_t *filter_net_supported)
Get the remote net discovery capability of the device.
DOCA_STABLE doca_error_t doca_devinfo_get_iface_name(const struct doca_devinfo *devinfo, char *iface_name, uint32_t size)
Get the name of the ethernet interface of a DOCA devinfo.
@ DOCA_DEVINFO_REP_FILTER_NET
doca_ec_matrix_type
Types of coding matrix used for erasure codes.
@ DOCA_EC_MATRIX_TYPE_VANDERMONDE
@ DOCA_EC_MATRIX_TYPE_CAUCHY
enum doca_error doca_error_t
DOCA API return codes.
DOCA_STABLE const char * doca_error_get_name(doca_error_t error)
Returns the string representation of an error code name.
DOCA_STABLE const char * doca_error_get_descr(doca_error_t error)
Returns the description string of an error code.
@ DOCA_ERROR_INVALID_VALUE
DOCA_EXPERIMENTAL doca_error_t doca_log_backend_create_standard(void)
Create default, non configurable backend for application messages.
#define DOCA_LOG_TRC(format,...)
Generates a TRACE application log message.
DOCA_EXPERIMENTAL doca_error_t doca_log_backend_create_with_file_sdk(FILE *fptr, struct doca_log_backend **backend)
Create a logging backend with a FILE* stream for SDK messages.
#define DOCA_LOG_DBG(format,...)
Generates a DEBUG application log message.
DOCA_EXPERIMENTAL doca_error_t doca_log_backend_set_sdk_level(struct doca_log_backend *backend, uint32_t level)
Set the log level limit for SDK logging backends.
DOCA_STABLE doca_error_t doca_mmap_set_memrange(struct doca_mmap *mmap, void *addr, size_t len)
Set the memory range of DOCA memory map.
DOCA_STABLE doca_error_t doca_mmap_destroy(struct doca_mmap *mmap)
Destroy DOCA Memory Map structure.
DOCA_STABLE doca_error_t doca_mmap_create(struct doca_mmap **mmap)
Allocates zero size memory map object with default/unset attributes.
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_set_permissions(struct doca_mmap *mmap, uint32_t access_mask)
Set access flags of the registered memory.
DOCA_STABLE doca_error_t doca_mmap_start(struct doca_mmap *mmap)
Start DOCA Memory Map.
DOCA_STABLE doca_error_t doca_mmap_add_dev(struct doca_mmap *mmap, struct doca_dev *dev)
Register DOCA memory map on a given device.
DOCA_STABLE doca_error_t doca_pe_connect_ctx(struct doca_pe *pe, struct doca_ctx *ctx)
This method connects a context 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_destroy(struct doca_rdma *rdma)
Destroy a DOCA RDMA instance.
DOCA_EXPERIMENTAL doca_error_t doca_rdma_set_permissions(struct doca_rdma *rdma, uint32_t permissions)
Set rdma permissions for doca_rdma. The value can be queried using doca_rdma_get_permissions()....
DOCA_EXPERIMENTAL struct doca_ctx * doca_rdma_as_ctx(struct doca_rdma *rdma)
Convert doca_rdma instance into a generalized context for use with doca core objects.
DOCA_EXPERIMENTAL doca_error_t doca_rdma_create(struct doca_dev *dev, struct doca_rdma **rdma)
Create a DOCA RDMA instance.
doca_mmap * make_mmap(doca_dev *dev, void const *mmap_export_blob, size_t mmap_export_blob_size)
doca_buf_inventory * make_buf_inventory(size_t num_elements)
void create_doca_logger_backend(void) noexcept
doca_comch_producer * make_comch_producer(doca_comch_connection *conn, doca_pe *pe, uint32_t task_pool_size, doca_data callback_user_data, doca_comch_producer_task_send_completion_cb_t task_cb, doca_comch_producer_task_send_completion_cb_t error_cb)
doca_rdma * make_rdma_context(doca_dev *dev, doca_pe *pe, doca_data ctx_user_data, uint32_t permissions)
void register_cli_argument(doca_argp_type type, char const *short_name, char const *long_name, char const *description, value_requirement requirement, value_multiplicity multiplicity, doca_argp_param_cb_t callback)
doca_ec_matrix_type matrix_type_from_string(std::string const &matrix_type)
doca_dev_rep * open_representor(doca_dev *dev, std::string const &identifier)
doca_comch_consumer * make_comch_consumer(doca_comch_connection *conn, doca_mmap *mmap, doca_pe *pe, uint32_t task_pool_size, doca_data callback_user_data, doca_comch_consumer_task_post_recv_completion_cb_t task_cb, doca_comch_consumer_task_post_recv_completion_cb_t error_cb)
doca_error_t stop_context(doca_ctx *ctx, doca_pe *pe, std::vector< doca_task * > &ctx_tasks) noexcept
doca_dev * open_device(std::string const &identifier)
static bool is_ctx_running(struct doca_ctx *ctx)
bool support_multiple_values
Convenience type for representing opaque data.
struct upf_accel_ctx * ctx