Scroll to navigation

libdmmp.h(3) Library Functions Manual libdmmp.h(3)

NAME

libdmmp.h - Device Mapper Multipath API.

SYNOPSIS

#include <libdmmp/libdmmp.h>

DESCRIPTION

All the libdmmp public functions ships its own man pages. Use 'man 3 <function_name>' to check the detail usage.

USAGE

To use libdmmp in your project, we suggest to use the 'pkg-config' way:


* Add this line into your configure.ac:


PKG_CHECK_MODULES([LIBDMMP], [libdmmp])


* Add these lines into your Makefile.am:


foo_LDFLAGS += $(LIBDMMP_LIBS)
foo_CFLAGS += $(LIBDMMP_CFLAGS)

LOG HANDLING

The log handler function could be set via 'dmmp_context_log_func_set()'. The log priority could be set via 'dmmp_context_log_priority_set()'.

By default, the log priorities is 'DMMP_LOG_PRIORITY_WARNING'. By default, the log handler is print log to STDERR, and its code is listed below in case you want to create your own log handler.


static int _DMMP_LOG_STRERR_ALIGN_WIDTH = 80;


static void _log_stderr(struct dmmp_context *ctx,
enum dmmp_log_priority priority,
const char *file, int line,
const char *func_name,
const char *format, va_list args)
{
int printed_bytes = 0;


printed_bytes += fprintf(stderr, "libdmmp %s: ",
dmmp_log_priority_str(priority));
printed_bytes += vfprintf(stderr, format, args);
userdata = dmmp_context_userdata_get(ctx);
if (userdata != NULL)
fprintf(stderr, "(with user data at memory address %p)",
userdata);


if (printed_bytes < _DMMP_LOG_STRERR_ALIGN_WIDTH) {
fprintf(stderr, "%*s # %s:%s():%d0,
_DMMP_LOG_STRERR_ALIGN_WIDTH - printed_bytes, "", file,
func_name, line);
} else {
fprintf(stderr, " # %s:%s():%d0, file, func_name, line);
}
}

SAMPLE CODE


#include <libdmmp/libdmmp.h>


int main(int argc, char *argv[]) {
struct dmmp_context *ctx = NULL;
struct dmmp_mpath **dmmp_mps = NULL;
struct dmmp_path_group **dmmp_pgs = NULL;
struct dmmp_path **dmmp_ps = NULL;
uint32_t dmmp_mp_count = 0;
uint32_t dmmp_pg_count = 0;
uint32_t dmmp_p_count = 0;
const char *name = NULL;
const char *wwid = NULL;
uint32_t i = 0;
int rc = DMMP_OK;


ctx = dmmp_context_new();
dmmp_context_log_priority_set(ctx, DMMP_LOG_PRIORITY_DEBUG);
// By default, log will be printed to STDERR, you could
// change that via dmmp_context_log_func_set()
rc = dmmp_mpath_array_get(ctx, &dmmp_mps, &dmmp_mp_count);
if (rc != DMMP_OK) {
printf("dmmp_mpath_array_get() failed with %d: %s", rc,
dmmp_strerror(rc));
goto out;
}
for (i = 0; i < dmmp_mp_count; ++i) {
name = dmmp_mpath_name_get(dmmp_mps[i]);
wwid = dmmp_mpath_wwid_get(dmmp_mps[i]);
printf("dmmp_mpath_array_get(): Got mpath: %s %s0, name,
wwid);
// You could use dmmp_path_group_array_get() to retrieve
// path group information and then invoke dmmp_path_array_get()
// for path information.
}


out:
dmmp_context_free(ctx);
dmmp_mpath_array_free(dmmp_mps, dmmp_mp_count);
if (rc != DMMP_OK)
exit(1);
exit(0);
}

LICENSE

GPLv2+

BUG

Please report bug to <dm-devel@lists.linux.dev>

January 2016 Device Mapper Multipath API - libdmmp Manual