#ifndef _LIBIPD_H
#define _LIBIPD_H
#include <sys/types.h>
#ifdef __cplusplus
extern "C" {
#endif
#define IPDM_CORRUPT 0x1000
#define IPDM_DELAY 0x2000
#define IPDM_DROP 0x4000
typedef enum ipd_errno {
EIPD_NOERROR = 0,
EIPD_NOMEM,
EIPD_ZC_NOENT,
EIPD_RANGE,
EIPD_PERM,
EIPD_FAULT,
EIPD_INTERNAL,
EIPD_UNKNOWN
} ipd_errno_t;
typedef struct ipd_config {
uint32_t ic_mask;
uint32_t ic_corrupt;
uint32_t ic_drop;
uint32_t ic_delay;
} ipd_config_t;
struct ipd_stat;
typedef struct ipd_stat *ipd_stathdl_t;
typedef void (*ipd_status_cb_f)(zoneid_t, const ipd_config_t *, void *);
extern __thread ipd_errno_t ipd_errno;
extern __thread char ipd_errmsg[];
extern const char *ipd_strerror(ipd_errno_t);
extern int ipd_open(const char *);
extern int ipd_close(int);
extern int ipd_status_read(int, ipd_stathdl_t *);
extern void ipd_status_foreach_zone(const ipd_stathdl_t,
ipd_status_cb_f, void *);
extern int ipd_status_get_config(const ipd_stathdl_t,
zoneid_t, ipd_config_t **);
extern void ipd_status_free(ipd_stathdl_t);
extern int ipd_ctl(int, zoneid_t, const ipd_config_t *);
#ifdef __cplusplus
}
#endif
#endif