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#ifndef	_FMD_ADM_H
28#define	_FMD_ADM_H
29
30#pragma ident	"%Z%%M%	%I%	%E% SMI"
31
32#include <fm/fmd_api.h>
33
34#ifdef	__cplusplus
35extern "C" {
36#endif
37
38/*
39 * Fault Management Daemon Administrative Interfaces
40 *
41 * Note: The contents of this file are private to the implementation of the
42 * Solaris system and FMD subsystem and are subject to change at any time
43 * without notice.  Applications and drivers using these interfaces will fail
44 * to run on future releases.  These interfaces should not be used for any
45 * purpose until they are publicly documented for use outside of Sun.
46 */
47
48#define	FMD_ADM_VERSION	1		/* library ABI interface version */
49#define	FMD_ADM_PROGRAM	0		/* connect library to system fmd */
50
51typedef struct fmd_adm fmd_adm_t;
52
53extern fmd_adm_t *fmd_adm_open(const char *, uint32_t, int);
54extern void fmd_adm_close(fmd_adm_t *);
55extern const char *fmd_adm_errmsg(fmd_adm_t *);
56
57typedef struct fmd_adm_stats {
58	fmd_stat_t *ams_buf;		/* statistics data array */
59	uint_t ams_len;			/* length of data array */
60} fmd_adm_stats_t;
61
62extern int fmd_adm_stats_read(fmd_adm_t *, const char *, fmd_adm_stats_t *);
63extern int fmd_adm_stats_free(fmd_adm_t *, fmd_adm_stats_t *);
64
65typedef struct fmd_adm_modinfo {
66	const char *ami_name;		/* string name of module */
67	const char *ami_desc;		/* module description */
68	const char *ami_vers;		/* module version */
69	uint_t ami_flags;		/* flags (see below) */
70} fmd_adm_modinfo_t;
71
72#define	FMD_ADM_MOD_FAILED	0x1	/* module has failed */
73
74typedef int fmd_adm_module_f(const fmd_adm_modinfo_t *, void *);
75
76extern int fmd_adm_module_iter(fmd_adm_t *, fmd_adm_module_f *, void *);
77extern int fmd_adm_module_load(fmd_adm_t *, const char *);
78extern int fmd_adm_module_unload(fmd_adm_t *, const char *);
79extern int fmd_adm_module_reset(fmd_adm_t *, const char *);
80extern int fmd_adm_module_stats(fmd_adm_t *, const char *, fmd_adm_stats_t *);
81extern int fmd_adm_module_gc(fmd_adm_t *, const char *);
82
83typedef struct fmd_adm_rsrcinfo {
84	const char *ari_fmri;		/* fmri name of resource */
85	const char *ari_uuid;		/* uuid name of resource */
86	const char *ari_case;		/* uuid of case associated w/ state */
87	uint_t ari_flags;		/* flags (see below) */
88} fmd_adm_rsrcinfo_t;
89
90#define	FMD_ADM_RSRC_FAULTY	0x1	/* resource is faulty */
91#define	FMD_ADM_RSRC_UNUSABLE	0x2	/* resource is unusable */
92#define	FMD_ADM_RSRC_INVISIBLE	0x4	/* resource is not directly visible */
93
94typedef struct fmd_adm_caseinfo {
95	const char *aci_uuid;
96	const char *aci_code;
97	const char *aci_url;
98	nvlist_t *aci_event;
99} fmd_adm_caseinfo_t;
100
101typedef int fmd_adm_rsrc_f(const fmd_adm_rsrcinfo_t *, void *);
102typedef int fmd_adm_case_f(const fmd_adm_caseinfo_t *, void *);
103
104extern int fmd_adm_rsrc_count(fmd_adm_t *, int, uint32_t *);
105extern int fmd_adm_rsrc_iter(fmd_adm_t *, int, fmd_adm_rsrc_f *, void *);
106extern int fmd_adm_rsrc_flush(fmd_adm_t *, const char *);
107extern int fmd_adm_rsrc_repaired(fmd_adm_t *, const char *);
108extern int fmd_adm_rsrc_replaced(fmd_adm_t *, const char *);
109extern int fmd_adm_rsrc_acquit(fmd_adm_t *, const char *, const char *);
110extern int fmd_adm_case_repair(fmd_adm_t *, const char *);
111extern int fmd_adm_case_acquit(fmd_adm_t *, const char *);
112extern int fmd_adm_case_iter(fmd_adm_t *, const char *, fmd_adm_case_f *,
113    void *);
114
115typedef struct fmd_adm_serdinfo {
116	const char *asi_name;		/* name of serd engine */
117	uint64_t asi_delta;		/* nsecs from oldest event to now */
118	uint64_t asi_n;			/* N parameter (event count) */
119	uint64_t asi_t;			/* T parameter (nanoseconds) */
120	uint_t asi_count;		/* number of events in engine */
121	uint_t asi_flags;		/* flags (see below) */
122} fmd_adm_serdinfo_t;
123
124#define	FMD_ADM_SERD_FIRED	0x1	/* serd engine has fired */
125
126typedef int fmd_adm_serd_f(const fmd_adm_serdinfo_t *, void *);
127
128extern int fmd_adm_serd_iter(fmd_adm_t *, const char *,
129    fmd_adm_serd_f *, void *);
130extern int fmd_adm_serd_reset(fmd_adm_t *, const char *, const char *);
131
132typedef int fmd_adm_xprt_f(id_t, void *);
133
134extern int fmd_adm_xprt_iter(fmd_adm_t *, fmd_adm_xprt_f *, void *);
135extern int fmd_adm_xprt_stats(fmd_adm_t *, id_t, fmd_adm_stats_t *);
136
137extern int fmd_adm_log_rotate(fmd_adm_t *, const char *);
138
139#ifdef	__cplusplus
140}
141#endif
142
143#endif	/* _FMD_ADM_H */
144