1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 /*
28  * Copyright (c) 2018, Joyent, Inc.
29  */
30 
31 #ifndef	_FMD_ADM_H
32 #define	_FMD_ADM_H
33 
34 #include <fm/fmd_api.h>
35 
36 #ifdef	__cplusplus
37 extern "C" {
38 #endif
39 
40 /*
41  * Fault Management Daemon Administrative Interfaces
42  *
43  * Note: The contents of this file are private to the implementation of the
44  * Solaris system and FMD subsystem and are subject to change at any time
45  * without notice.  Applications and drivers using these interfaces will fail
46  * to run on future releases.  These interfaces should not be used for any
47  * purpose until they are publicly documented for use outside of Sun.
48  */
49 
50 #define	FMD_ADM_VERSION	1		/* library ABI interface version */
51 #define	FMD_ADM_PROGRAM	0		/* connect library to system fmd */
52 
53 typedef struct fmd_adm fmd_adm_t;
54 
55 extern fmd_adm_t *fmd_adm_open(const char *, uint32_t, int);
56 extern void fmd_adm_close(fmd_adm_t *);
57 extern const char *fmd_adm_errmsg(fmd_adm_t *);
58 
59 typedef struct fmd_adm_stats {
60 	fmd_stat_t *ams_buf;		/* statistics data array */
61 	uint_t ams_len;			/* length of data array */
62 } fmd_adm_stats_t;
63 
64 extern int fmd_adm_stats_read(fmd_adm_t *, const char *, fmd_adm_stats_t *);
65 extern int fmd_adm_stats_free(fmd_adm_t *, fmd_adm_stats_t *);
66 
67 typedef struct fmd_adm_modinfo {
68 	const char *ami_name;		/* string name of module */
69 	const char *ami_desc;		/* module description */
70 	const char *ami_vers;		/* module version */
71 	uint_t ami_flags;		/* flags (see below) */
72 } fmd_adm_modinfo_t;
73 
74 #define	FMD_ADM_MOD_FAILED	0x1	/* module has failed */
75 
76 typedef int fmd_adm_module_f(const fmd_adm_modinfo_t *, void *);
77 
78 extern int fmd_adm_module_iter(fmd_adm_t *, fmd_adm_module_f *, void *);
79 extern int fmd_adm_module_load(fmd_adm_t *, const char *);
80 extern int fmd_adm_module_unload(fmd_adm_t *, const char *);
81 extern int fmd_adm_module_reset(fmd_adm_t *, const char *);
82 extern int fmd_adm_module_stats(fmd_adm_t *, const char *, fmd_adm_stats_t *);
83 extern int fmd_adm_module_gc(fmd_adm_t *, const char *);
84 
85 typedef struct fmd_adm_rsrcinfo {
86 	const char *ari_fmri;		/* fmri name of resource */
87 	const char *ari_uuid;		/* uuid name of resource */
88 	const char *ari_case;		/* uuid of case associated w/ state */
89 	uint_t ari_flags;		/* flags (see below) */
90 } fmd_adm_rsrcinfo_t;
91 
92 #define	FMD_ADM_RSRC_FAULTY	0x1	/* resource is faulty */
93 #define	FMD_ADM_RSRC_UNUSABLE	0x2	/* resource is unusable */
94 #define	FMD_ADM_RSRC_INVISIBLE	0x4	/* resource is not directly visible */
95 
96 typedef struct fmd_adm_caseinfo {
97 	const char *aci_uuid;
98 	const char *aci_code;
99 	const char *aci_url;
100 	nvlist_t *aci_event;
101 } fmd_adm_caseinfo_t;
102 
103 typedef int fmd_adm_rsrc_f(const fmd_adm_rsrcinfo_t *, void *);
104 typedef int fmd_adm_case_f(const fmd_adm_caseinfo_t *, void *);
105 
106 extern int fmd_adm_rsrc_count(fmd_adm_t *, int, uint32_t *);
107 extern int fmd_adm_rsrc_iter(fmd_adm_t *, int, fmd_adm_rsrc_f *, void *);
108 extern int fmd_adm_rsrc_flush(fmd_adm_t *, const char *);
109 extern int fmd_adm_rsrc_repaired(fmd_adm_t *, const char *);
110 extern int fmd_adm_rsrc_replaced(fmd_adm_t *, const char *);
111 extern int fmd_adm_rsrc_acquit(fmd_adm_t *, const char *, const char *);
112 extern int fmd_adm_case_repair(fmd_adm_t *, const char *);
113 extern int fmd_adm_case_acquit(fmd_adm_t *, const char *);
114 extern int fmd_adm_case_iter(fmd_adm_t *, const char *, fmd_adm_case_f *,
115     void *);
116 
117 typedef struct fmd_adm_serdinfo {
118 	const char *asi_name;		/* name of serd engine */
119 	uint64_t asi_delta;		/* nsecs from oldest event to now */
120 	uint64_t asi_n;			/* N parameter (event count) */
121 	uint64_t asi_t;			/* T parameter (nanoseconds) */
122 	uint_t asi_count;		/* number of events in engine */
123 	uint_t asi_flags;		/* flags (see below) */
124 } fmd_adm_serdinfo_t;
125 
126 #define	FMD_ADM_SERD_FIRED	0x1	/* serd engine has fired */
127 
128 typedef int fmd_adm_serd_f(const fmd_adm_serdinfo_t *, void *);
129 
130 extern int fmd_adm_serd_iter(fmd_adm_t *, const char *,
131     fmd_adm_serd_f *, void *);
132 extern int fmd_adm_serd_reset(fmd_adm_t *, const char *, const char *);
133 
134 typedef void fmd_adm_xprt_f(id_t, void *);
135 
136 extern int fmd_adm_xprt_iter(fmd_adm_t *, fmd_adm_xprt_f *, void *);
137 extern int fmd_adm_xprt_stats(fmd_adm_t *, id_t, fmd_adm_stats_t *);
138 
139 extern int fmd_adm_log_rotate(fmd_adm_t *, const char *);
140 
141 #ifdef	__cplusplus
142 }
143 #endif
144 
145 #endif	/* _FMD_ADM_H */
146