fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi/*
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi * This file and its contents are supplied under the terms of the
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0.
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi * You may only use this file in accordance with the terms of version
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi * 1.0 of the CDDL.
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi *
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi * A full copy of the text of the CDDL should have accompanied this
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi * source. A copy of the CDDL is also available via the Internet at
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi * http://www.illumos.org/license/CDDL.
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi */
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi/*
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi * Copyright (c) 2012 Joyent, Inc. All rights reserved.
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi * Use is subject to license terms.
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi */
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi#ifndef _LIBIPD_H
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi#define _LIBIPD_H
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi#include <sys/types.h>
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi#ifdef __cplusplus
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchiextern "C" {
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi#endif
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi/*
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi * Bitmask values for ic_mask.
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi */
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi#define IPDM_CORRUPT 0x1000
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi#define IPDM_DELAY 0x2000
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi#define IPDM_DROP 0x4000
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchitypedef enum ipd_errno {
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi EIPD_NOERROR = 0,
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi EIPD_NOMEM,
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi EIPD_ZC_NOENT,
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi EIPD_RANGE,
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi EIPD_PERM,
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi EIPD_FAULT,
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi EIPD_INTERNAL,
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi EIPD_UNKNOWN
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi} ipd_errno_t;
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchitypedef struct ipd_config {
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi uint32_t ic_mask;
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi uint32_t ic_corrupt;
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi uint32_t ic_drop;
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi uint32_t ic_delay;
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi} ipd_config_t;
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchistruct ipd_stat;
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchitypedef struct ipd_stat *ipd_stathdl_t;
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchitypedef void (*ipd_status_cb_f)(zoneid_t, const ipd_config_t *, void *);
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchiextern __thread ipd_errno_t ipd_errno;
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchiextern __thread char ipd_errmsg[];
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchiextern const char *ipd_strerror(ipd_errno_t);
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchiextern int ipd_open(const char *);
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchiextern int ipd_close(int);
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchiextern int ipd_status_read(int, ipd_stathdl_t *);
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchiextern void ipd_status_foreach_zone(const ipd_stathdl_t,
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi ipd_status_cb_f, void *);
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchiextern int ipd_status_get_config(const ipd_stathdl_t,
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi zoneid_t, ipd_config_t **);
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchiextern void ipd_status_free(ipd_stathdl_t);
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchiextern int ipd_ctl(int, zoneid_t, const ipd_config_t *);
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi#ifdef __cplusplus
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi}
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi#endif
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi#endif /* _LIBIPD_H */