Skip to main content

Common

Common utility for SDK developers including message logging and device detection.

Example

Here is an example of detecting available DPU devices.

example_available_dpu.cc
#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_OKEverything is OK
MANGO_STATUS_INVALID_HANDLEInvalid handle
MANGO_STATUS_INVALID_PARAMInvalid parameter
MANGO_STATUS_INVALID_CONFIGInvalid configuration
MANGO_STATUS_OUT_OF_MEMORYOut of memory
MANGO_STATUS_NOT_SUPPORTEDNot supported
MANGO_STATUS_NOT_IMPLEMENTEDNot implemented
MANGO_STATUS_NOT_FOUNDNot found
MANGO_STATUS_NOT_OPENEDNot opened
MANGO_STATUS_ALREADY_OPENEDAlready opened
MANGO_STATUS_PERMISSION_DENIEDPermission denied
MANGO_STATUS_RUNTIME_ERRORUnexpected runtime error
MANGO_STATUS_TIMED_OUTOperation timed out
MANGO_STATUS_CONN_CLOSEDConnection closed
MANGO_STATUS_DEPRECATEDDeprecated operation
MANGO_STATUS_MAP_FAILEDMap failed
MANGO_STATUS_UNMAP_FAILEDUnmap failed
MANGO_STATUS_FILE_OP_FAILEDFile 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_UNKNOWNfallback to CPU
MANGO_HW_ACCEL_CPUCPU emulated device
MANGO_HW_ACCEL_DPUDPU 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_NETEthernet network
MANGO_HW_FEATURE_TOETCP/IP offload
MANGO_HW_FEATURE_RDMARoCEv2 offload
MANGO_HW_FEATURE_VDPAvDPA acceleration
MANGO_HW_FEATURE_NVNetwork Virtualization
MANGO_HW_FEATURE_AIAI preprocess
MANGO_HW_FEATURE_SDDSoftware-defined Device
MANGO_HW_FEATURE_RAIDRAID 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_ERRORerror severity level
MANGO_LOG_LEVEL_WARNwarning severity level
MANGO_LOG_LEVEL_INFOinfo severity level
MANGO_LOG_LEVEL_DEBUGdebug 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.

note

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.

note

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.
note

The message will be ignore if the system log level is lower.