Common
Common utility for SDK developers including message logging and device detection.
Example
Here is an example of detecting available DPU devices.
#include <libmango.h>
int main()
{
unsigned *dev_idx, dev_num;
// Get available DPU devices
dev_idx = mango_get_hw_accel (MANGO_HW_ACCEL_DPU, &dev_num);
// Print each DPU device's information
for (unsigned i = 0; i < dev_num; i++) {
mango_log (MANGO_LOG_LEVEL_INFO, "/dev/mango%u is available\n", dev_idx[i]);
}
return 0;
}
Datatypes
mango_status_e
typedef enum _mango_status mango_status_e;
Define status codes used in libmango APIs.
Values
MANGO_STATUS_OK | Everything is OK |
MANGO_STATUS_INVALID_HANDLE | Invalid handle |
MANGO_STATUS_INVALID_PARAM | Invalid parameter |
MANGO_STATUS_INVALID_CONFIG | Invalid configuration |
MANGO_STATUS_OUT_OF_MEMORY | Out of memory |
MANGO_STATUS_NOT_SUPPORTED | Not supported |
MANGO_STATUS_NOT_IMPLEMENTED | Not implemented |
MANGO_STATUS_NOT_FOUND | Not found |
MANGO_STATUS_NOT_OPENED | Not opened |
MANGO_STATUS_ALREADY_OPENED | Already opened |
MANGO_STATUS_PERMISSION_DENIED | Permission denied |
MANGO_STATUS_RUNTIME_ERROR | Unexpected runtime error |
MANGO_STATUS_TIMED_OUT | Operation timed out |
MANGO_STATUS_CONN_CLOSED | Connection closed |
MANGO_STATUS_DEPRECATED | Deprecated operation |
MANGO_STATUS_MAP_FAILED | Map failed |
MANGO_STATUS_UNMAP_FAILED | Unmap failed |
MANGO_STATUS_FILE_OP_FAILED | File operation failed |
mango_hw_accel_e
typedef enum _mango_hw_accel mango_hw_accel_e;
Define HW accelerators used in libmango APIs.
Values
MANGO_HW_ACCEL_UNKNOWN | fallback to CPU |
MANGO_HW_ACCEL_CPU | CPU emulated device |
MANGO_HW_ACCEL_DPU | DPU HW accelerator |
mango_hw_feature_e
typedef enum _mango_hw_feature mango_hw_feature_e;
Define HW features accessible from libmango APIs.
Values
MANGO_HW_FEATURE_NET | Ethernet network |
MANGO_HW_FEATURE_TOE | TCP/IP offload |
MANGO_HW_FEATURE_RDMA | RoCEv2 offload |
MANGO_HW_FEATURE_VDPA | vDPA acceleration |
MANGO_HW_FEATURE_NV | Network Virtualization |
MANGO_HW_FEATURE_AI | AI preprocess |
MANGO_HW_FEATURE_SDD | Software-defined Device |
MANGO_HW_FEATURE_RAID | RAID offload |
mango_log_level_e
typedef enum _mango_log_level mango_log_level_e;
Define log level used in libmango APIs.
Values
MANGO_LOG_LEVEL_ERROR | error severity level |
MANGO_LOG_LEVEL_WARN | warning severity level |
MANGO_LOG_LEVEL_INFO | info severity level |
MANGO_LOG_LEVEL_DEBUG | debug severity level |
Functions
mango_get_version
void mango_get_version(unsigned int *major,
unsigned int *minor,
unsigned int *extra)
Get mango libary version.
Parameters
- out
major
major version - out
minor
minor version - out
extra
extra version
mango_get_status_msg
const char * mango_get_status_msg(mango_status_e status)
Get status message.
Parameters
- in
status
mango status enum
Returns the pre-defined status message
mango_get_hw_accel
unsigned int * mango_get_hw_accel(mango_hw_accel_e accel, unsigned int *num)
Get available HW accelerators.
Parameters
- in
accel
The HW accelerator. - out
num
Number of HW accelerators.
Returns the list of HW index on success, Otherwise, nullptr.
The return value is statically allocated. No need to free.
mango_get_option
mango_status_e mango_get_option(const char *section,
const char *field,
char **value)
Get the option value from .ini file.
Parameters
- in
section
The option section. - in
field
The option field. - out
value
The option value newly allocated.
Returns
0
on success, Otherwise, a negative error value.
The caller should free the option value using free().
mango_log
void mango_log(mango_log_level_e level, const char *fmt,...)
Print a log message.
Parameters
- in
level
The log level. - in
fmt
The format string.
The message will be ignore if the system log level is lower.