xref: /titanic_52/usr/src/lib/libipd/common/libipd.h (revision fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1)
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