NVIDIA DOCA SDK Data Center on a Chip Framework Documentation
comch_ctrl_path_common.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023 NVIDIA CORPORATION AND AFFILIATES. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without modification, are permitted
5  * provided that the following conditions are met:
6  * * Redistributions of source code must retain the above copyright notice, this list of
7  * conditions and the following disclaimer.
8  * * Redistributions in binary form must reproduce the above copyright notice, this list of
9  * conditions and the following disclaimer in the documentation and/or other materials
10  * provided with the distribution.
11  * * Neither the name of the NVIDIA CORPORATION nor the names of its contributors may be used
12  * to endorse or promote products derived from this software without specific prior written
13  * permission.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
17  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
19  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
20  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
21  * STRICT LIABILITY, OR TOR (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  *
24  */
25 
26 #include <string.h>
27 #include <time.h>
28 
29 #include <doca_argp.h>
30 #include <doca_comch.h>
31 #include <doca_ctx.h>
32 #include <doca_dev.h>
33 #include <doca_error.h>
34 #include <doca_log.h>
35 #include <doca_pe.h>
36 
37 #include "comch_ctrl_path_common.h"
38 #include "common.h"
39 
40 DOCA_LOG_REGISTER(COMCH_CTRL_PATH_COMMON);
41 
42 #define CC_REC_QUEUE_SIZE 10 /* Maximum amount of message in queue */
43 #define CC_SEND_TASK_NUM 1024 /* Number of CC send tasks */
44 
49 /*
50  * ARGP Callback - Handle Comm Channel DOCA device PCI address parameter
51  *
52  * @param [in]: Input parameter
53  * @config [in/out]: Program configuration context
54  * @return: DOCA_SUCCESS on success and DOCA_ERROR otherwise
55  */
56 static doca_error_t pci_addr_callback(void *param, void *config)
57 {
58  struct comch_config *cfg = (struct comch_config *)config;
59  const char *dev_pci_addr = (char *)param;
60  int len;
61 
62  len = strnlen(dev_pci_addr, DOCA_DEVINFO_PCI_ADDR_SIZE);
63  /* Check using >= to make static code analysis satisfied */
65  DOCA_LOG_ERR("Entered device PCI address exceeding the maximum size of %d",
68  }
69 
70  /* The string will be '\0' terminated due to the strnlen check above */
71  strncpy(cfg->comch_dev_pci_addr, dev_pci_addr, len + 1);
72 
73  return DOCA_SUCCESS;
74 }
75 
76 /*
77  * ARGP Callback - Handle Comm Channel DOCA device representor PCI address parameter
78  *
79  * @param [in]: Input parameter
80  * @config [in/out]: Program configuration context
81  * @return: DOCA_SUCCESS on success and DOCA_ERROR otherwise
82  */
83 static doca_error_t rep_pci_addr_callback(void *param, void *config)
84 {
85  struct comch_config *cfg = (struct comch_config *)config;
86  const char *rep_pci_addr = (char *)param;
87  int len;
88 
89  len = strnlen(rep_pci_addr, DOCA_DEVINFO_PCI_ADDR_SIZE);
90  /* Check using >= to make static code analysis satisfied */
92  DOCA_LOG_ERR("Entered device representor PCI address exceeding the maximum size of %d",
95  }
96 
97  /* The string will be '\0' terminated due to the strnlen check above */
98  strncpy(cfg->comch_dev_rep_pci_addr, rep_pci_addr, len + 1);
99 
100  return DOCA_SUCCESS;
101 }
102 
103 /*
104  * ARGP Callback - Handle text to copy parameter
105  *
106  * @param [in]: Input parameter
107  * @config [in/out]: Program configuration context
108  * @return: DOCA_SUCCESS on success and DOCA_ERROR otherwise
109  */
110 static doca_error_t text_callback(void *param, void *config)
111 {
112  struct comch_config *conf = (struct comch_config *)config;
113  const char *txt = (char *)param;
114  int txt_len = strnlen(txt, MAX_TXT_SIZE);
115 
116  /* Check using >= to make static code analysis satisfied */
117  if (txt_len >= MAX_TXT_SIZE) {
118  DOCA_LOG_ERR("Entered text exceeded buffer size of: %d", MAX_TXT_SIZE);
120  }
121 
122  /* The string will be '\0' terminated due to the strnlen check above */
123  strncpy(conf->text, txt, txt_len + 1);
124  conf->text_size = txt_len;
125 
126  return DOCA_SUCCESS;
127 }
128 
130 {
132 
133  struct doca_argp_param *dev_pci_addr_param, *text_param, *rep_pci_addr_param;
134 
135  /* Create and register Comm Channel DOCA device PCI address */
136  result = doca_argp_param_create(&dev_pci_addr_param);
137  if (result != DOCA_SUCCESS) {
138  DOCA_LOG_ERR("Failed to create ARGP param: %s", doca_error_get_descr(result));
139  return result;
140  }
141  doca_argp_param_set_short_name(dev_pci_addr_param, "p");
142  doca_argp_param_set_long_name(dev_pci_addr_param, "pci-addr");
143  doca_argp_param_set_description(dev_pci_addr_param, "DOCA Comm Channel device PCI address");
144  doca_argp_param_set_callback(dev_pci_addr_param, pci_addr_callback);
145  doca_argp_param_set_type(dev_pci_addr_param, DOCA_ARGP_TYPE_STRING);
146  result = doca_argp_register_param(dev_pci_addr_param);
147  if (result != DOCA_SUCCESS) {
148  DOCA_LOG_ERR("Failed to register program param: %s", doca_error_get_descr(result));
149  return result;
150  }
151 
152  /* Create and register Comm Channel DOCA device representor PCI address */
153  result = doca_argp_param_create(&rep_pci_addr_param);
154  if (result != DOCA_SUCCESS) {
155  DOCA_LOG_ERR("Failed to create ARGP param: %s", doca_error_get_descr(result));
156  return result;
157  }
158  doca_argp_param_set_short_name(rep_pci_addr_param, "r");
159  doca_argp_param_set_long_name(rep_pci_addr_param, "rep-pci");
160  doca_argp_param_set_description(rep_pci_addr_param,
161  "DOCA Comm Channel device representor PCI address (needed only on DPU)");
163  doca_argp_param_set_type(rep_pci_addr_param, DOCA_ARGP_TYPE_STRING);
164  result = doca_argp_register_param(rep_pci_addr_param);
165  if (result != DOCA_SUCCESS) {
166  DOCA_LOG_ERR("Failed to register program param: %s", doca_error_get_descr(result));
167  return result;
168  }
169 
170  /* Create and register text to send param */
171  result = doca_argp_param_create(&text_param);
172  if (result != DOCA_SUCCESS) {
173  DOCA_LOG_ERR("Failed to create ARGP param: %s", doca_error_get_descr(result));
174  return result;
175  }
176  doca_argp_param_set_short_name(text_param, "t");
177  doca_argp_param_set_long_name(text_param, "text");
178  doca_argp_param_set_description(text_param, "Text to be sent to the other side of channel");
181  result = doca_argp_register_param(text_param);
182  if (result != DOCA_SUCCESS) {
183  DOCA_LOG_ERR("Failed to register program param: %s", doca_error_get_descr(result));
184  return result;
185  }
186 
187  return DOCA_SUCCESS;
188 }
189 
190 void clean_comch_ctrl_path_client(struct doca_comch_client *client, struct doca_pe *pe)
191 {
193 
194  if (client != NULL) {
196  if (result != DOCA_SUCCESS)
197  DOCA_LOG_ERR("Failed to destroy client properly with error = %s", doca_error_get_name(result));
198  }
199 
200  if (pe != NULL) {
202  if (result != DOCA_SUCCESS)
203  DOCA_LOG_ERR("Failed to destroy pe properly with error = %s", doca_error_get_name(result));
204  }
205 }
206 
208  struct doca_dev *hw_dev,
209  struct comch_ctrl_path_client_cb_config *cb_cfg,
210  struct doca_comch_client **client,
211  struct doca_pe **pe)
212 {
214  struct doca_ctx *ctx;
215  union doca_data user_data;
216  uint32_t max_msg_size;
217 
219  if (result != DOCA_SUCCESS) {
220  DOCA_LOG_ERR("Failed creating pe with error = %s", doca_error_get_name(result));
221  return result;
222  }
223 
224  result = doca_comch_client_create(hw_dev, server_name, client);
225  if (result != DOCA_SUCCESS) {
226  DOCA_LOG_ERR("Failed to create client with error = %s", doca_error_get_name(result));
227  goto destroy_pe;
228  }
229 
230  ctx = doca_comch_client_as_ctx(*client);
231 
233  if (result != DOCA_SUCCESS) {
234  DOCA_LOG_ERR("Failed adding pe context to client with error = %s", doca_error_get_name(result));
235  goto destroy_client;
236  }
237 
239  if (result != DOCA_SUCCESS) {
240  DOCA_LOG_ERR("Failed setting state change callback with error = %s", doca_error_get_name(result));
241  goto destroy_client;
242  }
243 
245  cb_cfg->send_task_comp_cb,
246  cb_cfg->send_task_comp_err_cb,
248  if (result != DOCA_SUCCESS) {
249  DOCA_LOG_ERR("Failed setting send task cbs with error = %s", doca_error_get_name(result));
250  goto destroy_client;
251  }
252 
254  if (result != DOCA_SUCCESS) {
255  DOCA_LOG_ERR("Failed adding message recv event cb with error = %s", doca_error_get_name(result));
256  goto destroy_client;
257  }
258 
259  /* Config the data path related events */
260  if (cb_cfg->data_path_mode == true) {
262  cb_cfg->new_consumer_cb,
263  cb_cfg->expired_consumer_cb);
264  if (result != DOCA_SUCCESS) {
265  DOCA_LOG_ERR("Failed adding consumer event cb with error = %s", doca_error_get_name(result));
266  goto destroy_client;
267  }
268  }
269 
270  /* Set client properties */
271 
273  if (result != DOCA_SUCCESS) {
274  DOCA_LOG_ERR("Failed to get max message size with error = %s", doca_error_get_name(result));
275  goto destroy_client;
276  }
277 
278  result = doca_comch_client_set_max_msg_size(*client, max_msg_size);
279  if (result != DOCA_SUCCESS) {
280  DOCA_LOG_ERR("Failed to set msg size property with error = %s", doca_error_get_name(result));
281  goto destroy_client;
282  }
283 
285  if (result != DOCA_SUCCESS) {
286  DOCA_LOG_ERR("Failed to set msg size property with error = %s", doca_error_get_name(result));
287  goto destroy_client;
288  }
289 
290  user_data.ptr = cb_cfg->ctx_user_data;
291  result = doca_ctx_set_user_data(ctx, user_data);
292  if (result != DOCA_SUCCESS) {
293  DOCA_LOG_ERR("Failed to set ctx user data with error = %s", doca_error_get_name(result));
294  goto destroy_client;
295  }
296 
297  /* Client is not started until connection is finished, so getting connection in progress */
300  DOCA_LOG_ERR("Failed to start client context with error = %s", doca_error_get_name(result));
301  goto destroy_client;
302  }
303 
304  return DOCA_SUCCESS;
305 
306 destroy_client:
307  doca_comch_client_destroy(*client);
308  *client = NULL;
309 destroy_pe:
311  *pe = NULL;
312  return result;
313 }
314 
315 void clean_comch_ctrl_path_server(struct doca_comch_server *server, struct doca_pe *pe)
316 {
318 
319  if (server != NULL) {
321  if (result != DOCA_SUCCESS)
322  DOCA_LOG_ERR("Failed to destroy server properly with error = %s", doca_error_get_name(result));
323  }
324 
325  if (pe != NULL) {
327  if (result != DOCA_SUCCESS)
328  DOCA_LOG_ERR("Failed to destroy pe properly with error = %s", doca_error_get_name(result));
329  }
330 }
331 
333  struct doca_dev *hw_dev,
334  struct doca_dev_rep *rep_dev,
335  struct comch_ctrl_path_server_cb_config *cb_cfg,
336  struct doca_comch_server **server,
337  struct doca_pe **pe)
338 {
340  union doca_data user_data;
341  struct doca_ctx *ctx;
342  uint32_t max_msg_size;
343 
345  if (result != DOCA_SUCCESS) {
346  DOCA_LOG_ERR("Failed creating pe with error = %s", doca_error_get_name(result));
347  return result;
348  }
349 
350  result = doca_comch_server_create(hw_dev, rep_dev, server_name, server);
351  if (result != DOCA_SUCCESS) {
352  DOCA_LOG_ERR("Failed to create server with error = %s", doca_error_get_name(result));
353  goto destroy_pe;
354  }
355 
356  ctx = doca_comch_server_as_ctx(*server);
357 
359  if (result != DOCA_SUCCESS) {
360  DOCA_LOG_ERR("Failed adding pe context to server with error = %s", doca_error_get_name(result));
361  goto destroy_server;
362  }
363 
365  if (result != DOCA_SUCCESS) {
366  DOCA_LOG_ERR("Failed setting state change callback with error = %s", doca_error_get_name(result));
367  goto destroy_server;
368  }
369 
371  cb_cfg->send_task_comp_cb,
372  cb_cfg->send_task_comp_err_cb,
374  if (result != DOCA_SUCCESS) {
375  DOCA_LOG_ERR("Failed setting send task cbs with error = %s", doca_error_get_name(result));
376  goto destroy_server;
377  }
378 
380  if (result != DOCA_SUCCESS) {
381  DOCA_LOG_ERR("Failed adding message recv event cb with error = %s", doca_error_get_name(result));
382  goto destroy_server;
383  }
384 
388  if (result != DOCA_SUCCESS) {
389  DOCA_LOG_ERR("Failed adding connection event cbs with error = %s", doca_error_get_name(result));
390  goto destroy_server;
391  }
392 
393  /* Config the data_path related events */
394  if (cb_cfg->data_path_mode == true) {
396  cb_cfg->new_consumer_cb,
397  cb_cfg->expired_consumer_cb);
398  if (result != DOCA_SUCCESS) {
399  DOCA_LOG_ERR("Failed adding consumer event cb with error = %s", doca_error_get_name(result));
400  goto destroy_server;
401  }
402  }
403 
404  /* Set server properties */
405 
407  if (result != DOCA_SUCCESS) {
408  DOCA_LOG_ERR("Failed to get max message size with error = %s", doca_error_get_name(result));
409  goto destroy_server;
410  }
411 
412  result = doca_comch_server_set_max_msg_size(*server, max_msg_size);
413  if (result != DOCA_SUCCESS) {
414  DOCA_LOG_ERR("Failed to set msg size property with error = %s", doca_error_get_name(result));
415  goto destroy_server;
416  }
417 
419  if (result != DOCA_SUCCESS) {
420  DOCA_LOG_ERR("Failed to set msg size property with error = %s", doca_error_get_name(result));
421  goto destroy_server;
422  }
423 
424  user_data.ptr = cb_cfg->ctx_user_data;
425  result = doca_ctx_set_user_data(ctx, user_data);
426  if (result != DOCA_SUCCESS) {
427  DOCA_LOG_ERR("Failed to set ctx user data with error = %s", doca_error_get_name(result));
428  goto destroy_server;
429  }
430 
432  if (result != DOCA_SUCCESS) {
433  DOCA_LOG_ERR("Failed to start server context with error = %s", doca_error_get_name(result));
434  goto destroy_server;
435  }
436 
437  return DOCA_SUCCESS;
438 
439 destroy_server:
440  doca_comch_server_destroy(*server);
441  *server = NULL;
442 destroy_pe:
444  *pe = NULL;
445  return result;
446 }
#define NULL
Definition: __stddef_null.h:26
int32_t result
#define CC_REC_QUEUE_SIZE
doca_error_t register_comch_params(void)
static doca_error_t pci_addr_callback(void *param, void *config)
static doca_error_t text_callback(void *param, void *config)
DOCA_LOG_REGISTER(COMCH_CTRL_PATH_COMMON)
#define CC_SEND_TASK_NUM
static doca_error_t rep_pci_addr_callback(void *param, void *config)
doca_error_t init_comch_ctrl_path_client(const char *server_name, struct doca_dev *hw_dev, struct comch_ctrl_path_client_cb_config *cb_cfg, struct doca_comch_client **client, struct doca_pe **pe)
void clean_comch_ctrl_path_client(struct doca_comch_client *client, struct doca_pe *pe)
void clean_comch_ctrl_path_server(struct doca_comch_server *server, struct doca_pe *pe)
doca_error_t init_comch_ctrl_path_server(const char *server_name, struct doca_dev *hw_dev, struct doca_dev_rep *rep_dev, struct comch_ctrl_path_server_cb_config *cb_cfg, struct doca_comch_server **server, struct doca_pe **pe)
#define MAX_TXT_SIZE
uint64_t len
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_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 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_ARGP_TYPE_STRING
Definition: doca_argp.h:56
DOCA_STABLE doca_error_t doca_comch_client_set_max_msg_size(struct doca_comch_client *comch_client, uint32_t size)
DOCA_STABLE doca_error_t doca_comch_server_event_msg_recv_register(struct doca_comch_server *comch_server, doca_comch_event_msg_recv_cb_t recv_event_cb)
Configure the doca_comch recv event callback for server context.
DOCA_STABLE doca_error_t doca_comch_server_event_connection_status_changed_register(struct doca_comch_server *comch_server, doca_comch_event_connection_status_changed_cb_t connect_event_cb, doca_comch_event_connection_status_changed_cb_t disconnect_event_cb)
Configure the doca_comch recv event callback for server context.
DOCA_STABLE doca_error_t doca_comch_client_event_consumer_register(struct doca_comch_client *comch_client, doca_comch_event_consumer_cb_t new_consumer_event_cb, doca_comch_event_consumer_cb_t expired_consumer_event_cb)
Configure the doca_comch callback for for receiving consumer events on client context.
DOCA_STABLE doca_error_t doca_comch_client_set_recv_queue_size(struct doca_comch_client *comch_client, uint32_t size)
DOCA_STABLE struct doca_ctx * doca_comch_client_as_ctx(struct doca_comch_client *comch_client)
DOCA_STABLE doca_error_t doca_comch_server_event_consumer_register(struct doca_comch_server *comch_server, doca_comch_event_consumer_cb_t new_consumer_event_cb, doca_comch_event_consumer_cb_t expired_consumer_event_cb)
Configure the doca_comch callback for for receiving consumer events on server context.
DOCA_STABLE doca_error_t doca_comch_cap_get_max_msg_size(const struct doca_devinfo *devinfo, uint32_t *size)
DOCA_STABLE doca_error_t doca_comch_server_destroy(struct doca_comch_server *comch_server)
DOCA_STABLE doca_error_t doca_comch_server_task_send_set_conf(struct doca_comch_server *comch_server, doca_comch_task_send_completion_cb_t task_completion_cb, doca_comch_task_send_completion_cb_t task_error_cb, uint32_t num_send_tasks)
DOCA_STABLE doca_error_t doca_comch_client_task_send_set_conf(struct doca_comch_client *comch_client, doca_comch_task_send_completion_cb_t task_completion_cb, doca_comch_task_send_completion_cb_t task_error_cb, uint32_t num_send_tasks)
DOCA_STABLE doca_error_t doca_comch_server_set_recv_queue_size(struct doca_comch_server *comch_server, uint32_t size)
DOCA_STABLE doca_error_t doca_comch_client_event_msg_recv_register(struct doca_comch_client *comch_client, doca_comch_event_msg_recv_cb_t recv_event_cb)
Configure the doca_comch recv event callback for client context.
DOCA_STABLE doca_error_t doca_comch_client_destroy(struct doca_comch_client *comch_client)
DOCA_STABLE doca_error_t doca_comch_server_create(struct doca_dev *dev, struct doca_dev_rep *repr, const char *name, struct doca_comch_server **comch_server)
DOCA_STABLE doca_error_t doca_comch_server_set_max_msg_size(struct doca_comch_server *comch_server, uint32_t size)
DOCA_STABLE doca_error_t doca_comch_client_create(struct doca_dev *dev, const char *name, struct doca_comch_client **comch_client)
DOCA_STABLE struct doca_ctx * doca_comch_server_as_ctx(struct doca_comch_server *comch_server)
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
#define DOCA_DEVINFO_PCI_ADDR_SIZE
Buffer size to hold PCI BDF format: "XXXX:XX:XX.X". Including a null terminator.
Definition: doca_dev.h:313
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...
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
Definition: doca_error.h:44
@ DOCA_SUCCESS
Definition: doca_error.h:38
@ DOCA_ERROR_IN_PROGRESS
Definition: doca_error.h:64
#define DOCA_LOG_ERR(format,...)
Generates an ERROR application log message.
Definition: doca_log.h:466
DOCA_STABLE doca_error_t doca_pe_destroy(struct doca_pe *pe)
Destroy doca progress engine.
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 doca_error_t doca_pe_create(struct doca_pe **pe)
Creates DOCA progress engine.
const struct ip_frag_config * cfg
Definition: ip_frag_dp.c:0
char text[MAX_TXT_SIZE]
doca_comch_task_send_completion_cb_t send_task_comp_cb
doca_comch_event_consumer_cb_t new_consumer_cb
doca_comch_event_msg_recv_cb_t msg_recv_cb
doca_ctx_state_changed_callback_t ctx_state_changed_cb
doca_comch_event_consumer_cb_t expired_consumer_cb
doca_comch_task_send_completion_cb_t send_task_comp_err_cb
doca_comch_event_connection_status_changed_cb_t server_connection_event_cb
doca_comch_task_send_completion_cb_t send_task_comp_err_cb
doca_comch_event_msg_recv_cb_t msg_recv_cb
doca_comch_task_send_completion_cb_t send_task_comp_cb
doca_comch_event_consumer_cb_t expired_consumer_cb
doca_ctx_state_changed_callback_t ctx_state_changed_cb
doca_comch_event_connection_status_changed_cb_t server_disconnection_event_cb
doca_comch_event_consumer_cb_t new_consumer_cb
Convenience type for representing opaque data.
Definition: doca_types.h:56
void * ptr
Definition: doca_types.h:57
struct upf_accel_ctx * ctx