1*fe77cc04SRobert Mustacchi /* 2*fe77cc04SRobert Mustacchi * This file and its contents are supplied under the terms of the 3*fe77cc04SRobert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0. 4*fe77cc04SRobert Mustacchi * You may only use this file in accordance with the terms of version 5*fe77cc04SRobert Mustacchi * 1.0 of the CDDL. 6*fe77cc04SRobert Mustacchi * 7*fe77cc04SRobert Mustacchi * A full copy of the text of the CDDL should have accompanied this 8*fe77cc04SRobert Mustacchi * source. A copy of the CDDL is also available via the Internet at 9*fe77cc04SRobert Mustacchi * http://www.illumos.org/license/CDDL. 10*fe77cc04SRobert Mustacchi */ 11*fe77cc04SRobert Mustacchi 12*fe77cc04SRobert Mustacchi /* 13*fe77cc04SRobert Mustacchi * Copyright (c) 2012 Joyent, Inc. All rights reserved. 14*fe77cc04SRobert Mustacchi * Use is subject to license terms. 15*fe77cc04SRobert Mustacchi */ 16*fe77cc04SRobert Mustacchi 17*fe77cc04SRobert Mustacchi #ifndef _LIBIPD_H 18*fe77cc04SRobert Mustacchi #define _LIBIPD_H 19*fe77cc04SRobert Mustacchi 20*fe77cc04SRobert Mustacchi #include <sys/types.h> 21*fe77cc04SRobert Mustacchi 22*fe77cc04SRobert Mustacchi #ifdef __cplusplus 23*fe77cc04SRobert Mustacchi extern "C" { 24*fe77cc04SRobert Mustacchi #endif 25*fe77cc04SRobert Mustacchi 26*fe77cc04SRobert Mustacchi /* 27*fe77cc04SRobert Mustacchi * Bitmask values for ic_mask. 28*fe77cc04SRobert Mustacchi */ 29*fe77cc04SRobert Mustacchi #define IPDM_CORRUPT 0x1000 30*fe77cc04SRobert Mustacchi #define IPDM_DELAY 0x2000 31*fe77cc04SRobert Mustacchi #define IPDM_DROP 0x4000 32*fe77cc04SRobert Mustacchi 33*fe77cc04SRobert Mustacchi typedef enum ipd_errno { 34*fe77cc04SRobert Mustacchi EIPD_NOERROR = 0, 35*fe77cc04SRobert Mustacchi EIPD_NOMEM, 36*fe77cc04SRobert Mustacchi EIPD_ZC_NOENT, 37*fe77cc04SRobert Mustacchi EIPD_RANGE, 38*fe77cc04SRobert Mustacchi EIPD_PERM, 39*fe77cc04SRobert Mustacchi EIPD_FAULT, 40*fe77cc04SRobert Mustacchi EIPD_INTERNAL, 41*fe77cc04SRobert Mustacchi EIPD_UNKNOWN 42*fe77cc04SRobert Mustacchi } ipd_errno_t; 43*fe77cc04SRobert Mustacchi 44*fe77cc04SRobert Mustacchi typedef struct ipd_config { 45*fe77cc04SRobert Mustacchi uint32_t ic_mask; 46*fe77cc04SRobert Mustacchi uint32_t ic_corrupt; 47*fe77cc04SRobert Mustacchi uint32_t ic_drop; 48*fe77cc04SRobert Mustacchi uint32_t ic_delay; 49*fe77cc04SRobert Mustacchi } ipd_config_t; 50*fe77cc04SRobert Mustacchi 51*fe77cc04SRobert Mustacchi struct ipd_stat; 52*fe77cc04SRobert Mustacchi typedef struct ipd_stat *ipd_stathdl_t; 53*fe77cc04SRobert Mustacchi 54*fe77cc04SRobert Mustacchi typedef void (*ipd_status_cb_f)(zoneid_t, const ipd_config_t *, void *); 55*fe77cc04SRobert Mustacchi 56*fe77cc04SRobert Mustacchi extern __thread ipd_errno_t ipd_errno; 57*fe77cc04SRobert Mustacchi extern __thread char ipd_errmsg[]; 58*fe77cc04SRobert Mustacchi 59*fe77cc04SRobert Mustacchi extern const char *ipd_strerror(ipd_errno_t); 60*fe77cc04SRobert Mustacchi extern int ipd_open(const char *); 61*fe77cc04SRobert Mustacchi extern int ipd_close(int); 62*fe77cc04SRobert Mustacchi extern int ipd_status_read(int, ipd_stathdl_t *); 63*fe77cc04SRobert Mustacchi extern void ipd_status_foreach_zone(const ipd_stathdl_t, 64*fe77cc04SRobert Mustacchi ipd_status_cb_f, void *); 65*fe77cc04SRobert Mustacchi extern int ipd_status_get_config(const ipd_stathdl_t, 66*fe77cc04SRobert Mustacchi zoneid_t, ipd_config_t **); 67*fe77cc04SRobert Mustacchi extern void ipd_status_free(ipd_stathdl_t); 68*fe77cc04SRobert Mustacchi extern int ipd_ctl(int, zoneid_t, const ipd_config_t *); 69*fe77cc04SRobert Mustacchi 70*fe77cc04SRobert Mustacchi #ifdef __cplusplus 71*fe77cc04SRobert Mustacchi } 72*fe77cc04SRobert Mustacchi #endif 73*fe77cc04SRobert Mustacchi 74*fe77cc04SRobert Mustacchi #endif /* _LIBIPD_H */ 75