17c478bdstevel@tonic-gate/*
27c478bdstevel@tonic-gate * CDDL HEADER START
37c478bdstevel@tonic-gate *
47c478bdstevel@tonic-gate * The contents of this file are subject to the terms of the
580ab886wesolows * Common Development and Distribution License (the "License").
680ab886wesolows * You may not use this file except in compliance with the License.
77c478bdstevel@tonic-gate *
87c478bdstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bdstevel@tonic-gate * or http://www.opensolaris.org/os/licensing.
107c478bdstevel@tonic-gate * See the License for the specific language governing permissions
117c478bdstevel@tonic-gate * and limitations under the License.
127c478bdstevel@tonic-gate *
137c478bdstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each
147c478bdstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bdstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the
167c478bdstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying
177c478bdstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bdstevel@tonic-gate *
197c478bdstevel@tonic-gate * CDDL HEADER END
207c478bdstevel@tonic-gate */
21d9638e5mws
227c478bdstevel@tonic-gate/*
23f6e214cGavin Maltby * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
247c478bdstevel@tonic-gate */
257c478bdstevel@tonic-gate
267c478bdstevel@tonic-gate#ifndef	_FMD_API_H
277c478bdstevel@tonic-gate#define	_FMD_API_H
287c478bdstevel@tonic-gate
297c478bdstevel@tonic-gate#include <sys/types.h>
307c478bdstevel@tonic-gate#include <libnvpair.h>
317c478bdstevel@tonic-gate#include <stdarg.h>
32f6e214cGavin Maltby#include <door.h>
337c478bdstevel@tonic-gate
347c478bdstevel@tonic-gate#ifdef	__cplusplus
357c478bdstevel@tonic-gateextern "C" {
367c478bdstevel@tonic-gate#endif
377c478bdstevel@tonic-gate
387c478bdstevel@tonic-gate/*
397c478bdstevel@tonic-gate * Fault Management Daemon Client Interfaces
407c478bdstevel@tonic-gate *
417c478bdstevel@tonic-gate * Note: The contents of this file are private to the implementation of the
427c478bdstevel@tonic-gate * Solaris system and FMD subsystem and are subject to change at any time
437c478bdstevel@tonic-gate * without notice.  Applications and drivers using these interfaces will fail
447c478bdstevel@tonic-gate * to run on future releases.  These interfaces should not be used for any
457c478bdstevel@tonic-gate * purpose until they are publicly documented for use outside of Sun.
467c478bdstevel@tonic-gate */
477c478bdstevel@tonic-gate
487c478bdstevel@tonic-gate#define	FMD_API_VERSION_1	1
497c478bdstevel@tonic-gate#define	FMD_API_VERSION_2	2
50d9638e5mws#define	FMD_API_VERSION_3	3
5124db464eschrock#define	FMD_API_VERSION_4	4
52f6e214cGavin Maltby#define	FMD_API_VERSION_5	5
537c478bdstevel@tonic-gate
54f6e214cGavin Maltby#define	FMD_API_VERSION		FMD_API_VERSION_5
557c478bdstevel@tonic-gate
567c478bdstevel@tonic-gatetypedef struct fmd_hdl fmd_hdl_t;
577c478bdstevel@tonic-gatetypedef struct fmd_event fmd_event_t;
587c478bdstevel@tonic-gatetypedef struct fmd_case fmd_case_t;
59d9638e5mwstypedef struct fmd_xprt fmd_xprt_t;
607c478bdstevel@tonic-gate
617aec1d6cindistruct topo_hdl;
627aec1d6cindi
637c478bdstevel@tonic-gate#define	FMD_B_FALSE	0		/* false value for booleans as int */
647c478bdstevel@tonic-gate#define	FMD_B_TRUE	1		/* true value for booleans as int */
657c478bdstevel@tonic-gate
667c478bdstevel@tonic-gate#ifndef	MIN
677c478bdstevel@tonic-gate#define	MIN(x, y) ((x) < (y) ? (x) : (y))
687c478bdstevel@tonic-gate#endif
697c478bdstevel@tonic-gate
707c478bdstevel@tonic-gate#ifndef	MAX
717c478bdstevel@tonic-gate#define	MAX(x, y) ((x) > (y) ? (x) : (y))
727c478bdstevel@tonic-gate#endif
737c478bdstevel@tonic-gate
747c478bdstevel@tonic-gate#define	FMD_TYPE_BOOL	0		/* int */
757c478bdstevel@tonic-gate#define	FMD_TYPE_INT32	1		/* int32_t */
767c478bdstevel@tonic-gate#define	FMD_TYPE_UINT32	2		/* uint32_t */
777c478bdstevel@tonic-gate#define	FMD_TYPE_INT64	3		/* int64_t */
787c478bdstevel@tonic-gate#define	FMD_TYPE_UINT64	4		/* uint64_t */
797c478bdstevel@tonic-gate#define	FMD_TYPE_STRING	5		/* const char* */
807c478bdstevel@tonic-gate#define	FMD_TYPE_TIME	6		/* uint64_t */
817c478bdstevel@tonic-gate#define	FMD_TYPE_SIZE	7		/* uint64_t */
827c478bdstevel@tonic-gate
837c478bdstevel@tonic-gatetypedef struct fmd_prop {
847c478bdstevel@tonic-gate	const char *fmdp_name;		/* property name */
857c478bdstevel@tonic-gate	uint_t fmdp_type;		/* property type (see above) */
867c478bdstevel@tonic-gate	const char *fmdp_defv;		/* default value */
877c478bdstevel@tonic-gate} fmd_prop_t;
887c478bdstevel@tonic-gate
897c478bdstevel@tonic-gatetypedef struct fmd_stat {
907c478bdstevel@tonic-gate	char fmds_name[32];		/* statistic name */
917c478bdstevel@tonic-gate	uint_t fmds_type;		/* statistic type (see above) */
927c478bdstevel@tonic-gate	char fmds_desc[64];		/* statistic description */
937c478bdstevel@tonic-gate	union {
947c478bdstevel@tonic-gate		int bool;		/* FMD_TYPE_BOOL */
957c478bdstevel@tonic-gate		int32_t i32;		/* FMD_TYPE_INT32 */
967c478bdstevel@tonic-gate		uint32_t ui32;		/* FMD_TYPE_UINT32 */
977c478bdstevel@tonic-gate		int64_t i64;		/* FMD_TYPE_INT64 */
987c478bdstevel@tonic-gate		uint64_t ui64;		/* FMD_TYPE_UINT64, TIME, SIZE */
997c478bdstevel@tonic-gate		char *str;		/* FMD_TYPE_STRING */
1007c478bdstevel@tonic-gate	} fmds_value;
1017c478bdstevel@tonic-gate} fmd_stat_t;
1027c478bdstevel@tonic-gate
1037c478bdstevel@tonic-gatetypedef struct fmd_hdl_ops {
1047c478bdstevel@tonic-gate	void (*fmdo_recv)(fmd_hdl_t *, fmd_event_t *, nvlist_t *, const char *);
1057c478bdstevel@tonic-gate	void (*fmdo_timeout)(fmd_hdl_t *, id_t, void *);
1067c478bdstevel@tonic-gate	void (*fmdo_close)(fmd_hdl_t *, fmd_case_t *);
1077c478bdstevel@tonic-gate	void (*fmdo_stats)(fmd_hdl_t *);
1087c478bdstevel@tonic-gate	void (*fmdo_gc)(fmd_hdl_t *);
109d9638e5mws	int (*fmdo_send)(fmd_hdl_t *, fmd_xprt_t *, fmd_event_t *, nvlist_t *);
11024db464eschrock	void (*fmdo_topo)(fmd_hdl_t *, struct topo_hdl *);
1117c478bdstevel@tonic-gate} fmd_hdl_ops_t;
1127c478bdstevel@tonic-gate
113d9638e5mws#define	FMD_SEND_SUCCESS	0	/* fmdo_send queued event */
114d9638e5mws#define	FMD_SEND_FAILED		1	/* fmdo_send unrecoverable error */
115d9638e5mws#define	FMD_SEND_RETRY		2	/* fmdo_send requests retry */
116d9638e5mws
1177c478bdstevel@tonic-gatetypedef struct fmd_hdl_info {
1187c478bdstevel@tonic-gate	const char *fmdi_desc;		/* fmd client description string */
1197c478bdstevel@tonic-gate	const char *fmdi_vers;		/* fmd client version string */
1207c478bdstevel@tonic-gate	const fmd_hdl_ops_t *fmdi_ops;	/* ops vector for client */
1217c478bdstevel@tonic-gate	const fmd_prop_t *fmdi_props;	/* array of configuration props */
1227c478bdstevel@tonic-gate} fmd_hdl_info_t;
1237c478bdstevel@tonic-gate
1247c478bdstevel@tonic-gateextern void _fmd_init(fmd_hdl_t *);
1257c478bdstevel@tonic-gateextern void _fmd_fini(fmd_hdl_t *);
1267c478bdstevel@tonic-gate
1277c478bdstevel@tonic-gateextern int fmd_hdl_register(fmd_hdl_t *, int, const fmd_hdl_info_t *);
1287c478bdstevel@tonic-gateextern void fmd_hdl_unregister(fmd_hdl_t *);
1297c478bdstevel@tonic-gate
1307c478bdstevel@tonic-gateextern void fmd_hdl_subscribe(fmd_hdl_t *, const char *);
1317c478bdstevel@tonic-gateextern void fmd_hdl_unsubscribe(fmd_hdl_t *, const char *);
1327c478bdstevel@tonic-gate
1337c478bdstevel@tonic-gateextern void fmd_hdl_setspecific(fmd_hdl_t *, void *);
1347c478bdstevel@tonic-gateextern void *fmd_hdl_getspecific(fmd_hdl_t *);
1357c478bdstevel@tonic-gate
1367c478bdstevel@tonic-gateextern void fmd_hdl_opendict(fmd_hdl_t *, const char *);
13724db464eschrockextern struct topo_hdl *fmd_hdl_topo_hold(fmd_hdl_t *, int);
13824db464eschrockextern void fmd_hdl_topo_rele(fmd_hdl_t *, struct topo_hdl *);
1397c478bdstevel@tonic-gate
1407c478bdstevel@tonic-gate#define	FMD_NOSLEEP		0x0	/* do not sleep or retry on failure */
1417c478bdstevel@tonic-gate#define	FMD_SLEEP		0x1	/* sleep or retry if alloc fails */
1427c478bdstevel@tonic-gate
1437c478bdstevel@tonic-gateextern void *fmd_hdl_alloc(fmd_hdl_t *, size_t, int);
1447c478bdstevel@tonic-gateextern void *fmd_hdl_zalloc(fmd_hdl_t *, size_t, int);
1457c478bdstevel@tonic-gateextern void fmd_hdl_free(fmd_hdl_t *, void *, size_t);
1467c478bdstevel@tonic-gate
1477c478bdstevel@tonic-gateextern char *fmd_hdl_strdup(fmd_hdl_t *, const char *, int);
1487c478bdstevel@tonic-gateextern void fmd_hdl_strfree(fmd_hdl_t *, char *);
1497c478bdstevel@tonic-gate
15080ab886wesolowsextern void fmd_hdl_vabort(fmd_hdl_t *, const char *, va_list) __NORETURN;
15180ab886wesolowsextern void fmd_hdl_abort(fmd_hdl_t *, const char *, ...) __NORETURN;
1527c478bdstevel@tonic-gate
1537c478bdstevel@tonic-gateextern void fmd_hdl_verror(fmd_hdl_t *, const char *, va_list);
1547c478bdstevel@tonic-gateextern void fmd_hdl_error(fmd_hdl_t *, const char *, ...);
1557c478bdstevel@tonic-gate
1567c478bdstevel@tonic-gateextern void fmd_hdl_vdebug(fmd_hdl_t *, const char *, va_list);
1577c478bdstevel@tonic-gateextern void fmd_hdl_debug(fmd_hdl_t *, const char *, ...);
1587c478bdstevel@tonic-gate
1597c478bdstevel@tonic-gateextern int32_t fmd_prop_get_int32(fmd_hdl_t *, const char *);
1607c478bdstevel@tonic-gateextern int64_t fmd_prop_get_int64(fmd_hdl_t *, const char *);
1617c478bdstevel@tonic-gateextern char *fmd_prop_get_string(fmd_hdl_t *, const char *);
1627c478bdstevel@tonic-gateextern void fmd_prop_free_string(fmd_hdl_t *, char *);
1637c478bdstevel@tonic-gate
1647c478bdstevel@tonic-gate#define	FMD_STAT_NOALLOC	0x0	/* fmd should use caller's memory */
1657c478bdstevel@tonic-gate#define	FMD_STAT_ALLOC		0x1	/* fmd should allocate stats memory */
1667c478bdstevel@tonic-gate
1677c478bdstevel@tonic-gateextern fmd_stat_t *fmd_stat_create(fmd_hdl_t *, uint_t, uint_t, fmd_stat_t *);
1687c478bdstevel@tonic-gateextern void fmd_stat_destroy(fmd_hdl_t *, uint_t, fmd_stat_t *);
1697c478bdstevel@tonic-gateextern void fmd_stat_setstr(fmd_hdl_t *, fmd_stat_t *, const char *);
1707c478bdstevel@tonic-gate
1717c478bdstevel@tonic-gateextern fmd_case_t *fmd_case_open(fmd_hdl_t *, void *);
172f6e214cGavin Maltbyextern fmd_case_t *fmd_case_open_uuid(fmd_hdl_t *, const char *, void *);
1737c478bdstevel@tonic-gateextern void fmd_case_reset(fmd_hdl_t *, fmd_case_t *);
1747c478bdstevel@tonic-gateextern void fmd_case_solve(fmd_hdl_t *, fmd_case_t *);
1757c478bdstevel@tonic-gateextern void fmd_case_close(fmd_hdl_t *, fmd_case_t *);
1767c478bdstevel@tonic-gate
1777c478bdstevel@tonic-gateextern const char *fmd_case_uuid(fmd_hdl_t *, fmd_case_t *);
1787c478bdstevel@tonic-gateextern fmd_case_t *fmd_case_uulookup(fmd_hdl_t *, const char *);
1797c478bdstevel@tonic-gateextern void fmd_case_uuclose(fmd_hdl_t *, const char *);
1807c478bdstevel@tonic-gateextern int fmd_case_uuclosed(fmd_hdl_t *, const char *);
181f6e214cGavin Maltbyextern int fmd_case_uuisresolved(fmd_hdl_t *, const char *);
18225c6ff4stephhextern void fmd_case_uuresolved(fmd_hdl_t *, const char *);
1837c478bdstevel@tonic-gate
1847c478bdstevel@tonic-gateextern int fmd_case_solved(fmd_hdl_t *, fmd_case_t *);
1857c478bdstevel@tonic-gateextern int fmd_case_closed(fmd_hdl_t *, fmd_case_t *);
1867c478bdstevel@tonic-gate
1877c478bdstevel@tonic-gateextern void fmd_case_add_ereport(fmd_hdl_t *, fmd_case_t *, fmd_event_t *);
1887c478bdstevel@tonic-gateextern void fmd_case_add_serd(fmd_hdl_t *, fmd_case_t *, const char *);
1897c478bdstevel@tonic-gateextern void fmd_case_add_suspect(fmd_hdl_t *, fmd_case_t *, nvlist_t *);
1907c478bdstevel@tonic-gate
1917c478bdstevel@tonic-gateextern void fmd_case_setspecific(fmd_hdl_t *, fmd_case_t *, void *);
1927c478bdstevel@tonic-gateextern void *fmd_case_getspecific(fmd_hdl_t *, fmd_case_t *);
1937c478bdstevel@tonic-gate
1947c478bdstevel@tonic-gateextern void fmd_case_setprincipal(fmd_hdl_t *, fmd_case_t *, fmd_event_t *);
1957c478bdstevel@tonic-gateextern fmd_event_t *fmd_case_getprincipal(fmd_hdl_t *, fmd_case_t *);
1967c478bdstevel@tonic-gate
1977c478bdstevel@tonic-gateextern fmd_case_t *fmd_case_next(fmd_hdl_t *, fmd_case_t *);
1987c478bdstevel@tonic-gateextern fmd_case_t *fmd_case_prev(fmd_hdl_t *, fmd_case_t *);
1997c478bdstevel@tonic-gate
2007c478bdstevel@tonic-gateextern void fmd_buf_create(fmd_hdl_t *, fmd_case_t *, const char *, size_t);
2017c478bdstevel@tonic-gateextern void fmd_buf_destroy(fmd_hdl_t *, fmd_case_t *, const char *);
2027c478bdstevel@tonic-gateextern void fmd_buf_read(fmd_hdl_t *, fmd_case_t *,
2037c478bdstevel@tonic-gate    const char *, void *, size_t);
2047c478bdstevel@tonic-gateextern void fmd_buf_write(fmd_hdl_t *, fmd_case_t *,
2057c478bdstevel@tonic-gate    const char *, const void *, size_t);
2067c478bdstevel@tonic-gateextern size_t fmd_buf_size(fmd_hdl_t *, fmd_case_t *, const char *);
2077c478bdstevel@tonic-gate
2087c478bdstevel@tonic-gateextern void fmd_serd_create(fmd_hdl_t *, const char *, uint_t, hrtime_t);
2097c478bdstevel@tonic-gateextern void fmd_serd_destroy(fmd_hdl_t *, const char *);
2107c478bdstevel@tonic-gateextern int fmd_serd_exists(fmd_hdl_t *, const char *);
2117c478bdstevel@tonic-gateextern void fmd_serd_reset(fmd_hdl_t *, const char *);
2127c478bdstevel@tonic-gateextern int fmd_serd_record(fmd_hdl_t *, const char *, fmd_event_t *);
2137c478bdstevel@tonic-gateextern int fmd_serd_fired(fmd_hdl_t *, const char *);
2147c478bdstevel@tonic-gateextern int fmd_serd_empty(fmd_hdl_t *, const char *);
2157c478bdstevel@tonic-gate
2167c478bdstevel@tonic-gateextern pthread_t fmd_thr_create(fmd_hdl_t *, void (*)(void *), void *);
2177c478bdstevel@tonic-gateextern void fmd_thr_destroy(fmd_hdl_t *, pthread_t);
2187c478bdstevel@tonic-gateextern void fmd_thr_signal(fmd_hdl_t *, pthread_t);
2192535165Vuong Nguyenextern void fmd_thr_checkpoint(fmd_hdl_t *);
2207c478bdstevel@tonic-gate
221f6e214cGavin Maltbyextern door_xcreate_server_func_t fmd_doorthr_create;
222f6e214cGavin Maltbyextern door_xcreate_thrsetup_func_t fmd_doorthr_setup;
223f6e214cGavin Maltby
2247c478bdstevel@tonic-gateextern id_t fmd_timer_install(fmd_hdl_t *, void *, fmd_event_t *, hrtime_t);
2257c478bdstevel@tonic-gateextern void fmd_timer_remove(fmd_hdl_t *, id_t);
2267c478bdstevel@tonic-gate
227f6e214cGavin Maltbyextern nvlist_t *fmd_nvl_create_defect(fmd_hdl_t *,
228f6e214cGavin Maltby    const char *, uint8_t, nvlist_t *, nvlist_t *, nvlist_t *);
2297c478bdstevel@tonic-gateextern nvlist_t *fmd_nvl_create_fault(fmd_hdl_t *,
2307c478bdstevel@tonic-gate    const char *, uint8_t, nvlist_t *, nvlist_t *, nvlist_t *);
2317c478bdstevel@tonic-gate
232f6e214cGavin Maltbyextern const nvlist_t *fmd_hdl_fmauth(fmd_hdl_t *);
233f6e214cGavin Maltbyextern const nvlist_t *fmd_hdl_modauth(fmd_hdl_t *);
234f6e214cGavin Maltby
2357c478bdstevel@tonic-gateextern int fmd_nvl_class_match(fmd_hdl_t *, nvlist_t *, const char *);
2367c478bdstevel@tonic-gateextern int fmd_nvl_fmri_expand(fmd_hdl_t *, nvlist_t *);
2377c478bdstevel@tonic-gateextern int fmd_nvl_fmri_present(fmd_hdl_t *, nvlist_t *);
2387c478bdstevel@tonic-gateextern int fmd_nvl_fmri_unusable(fmd_hdl_t *, nvlist_t *);
239e4b8688Cheng Sean Yeextern int fmd_nvl_fmri_retire(fmd_hdl_t *, nvlist_t *);
240e4b8688Cheng Sean Yeextern int fmd_nvl_fmri_unretire(fmd_hdl_t *, nvlist_t *);
24125c6ff4stephhextern int fmd_nvl_fmri_replaced(fmd_hdl_t *, nvlist_t *);
24225c6ff4stephhextern int fmd_nvl_fmri_service_state(fmd_hdl_t *, nvlist_t *);
24325c6ff4stephhextern int fmd_nvl_fmri_has_fault(fmd_hdl_t *, nvlist_t *, int, char *);
24425c6ff4stephh
24525c6ff4stephh#define	FMD_HAS_FAULT_FRU	0
24625c6ff4stephh#define	FMD_HAS_FAULT_ASRU	1
24725c6ff4stephh#define	FMD_HAS_FAULT_RESOURCE	2
24825c6ff4stephh
249e5dcf7bRobert Johnstonextern void fmd_repair_fru(fmd_hdl_t *, const char *);
250a62774dSinanallur Balasubramanianextern int fmd_repair_asru(fmd_hdl_t *, const char *);
251e5dcf7bRobert Johnston
2527c478bdstevel@tonic-gateextern int fmd_nvl_fmri_contains(fmd_hdl_t *, nvlist_t *, nvlist_t *);
253d9638e5mwsextern nvlist_t *fmd_nvl_fmri_translate(fmd_hdl_t *, nvlist_t *, nvlist_t *);
254d9638e5mws
2559af3851eschrockextern nvlist_t *fmd_nvl_alloc(fmd_hdl_t *, int);
2569af3851eschrockextern nvlist_t *fmd_nvl_dup(fmd_hdl_t *, nvlist_t *, int);
2579af3851eschrock
258d9638e5mwsextern int fmd_event_local(fmd_hdl_t *, fmd_event_t *);
25924db464eschrockextern uint64_t fmd_event_ena_create(fmd_hdl_t *);
26024db464eschrock
261d9638e5mws
262d9638e5mws#define	FMD_XPRT_RDONLY		0x1	/* transport is read-only */
263d9638e5mws#define	FMD_XPRT_RDWR		0x3	/* transport is read-write */
264d9638e5mws#define	FMD_XPRT_ACCEPT		0x4	/* transport is accepting connection */
265d9638e5mws#define	FMD_XPRT_SUSPENDED	0x8	/* transport starts suspended */
266cbf75e6Stephen Hanson#define	FMD_XPRT_EXTERNAL	0x80	/* xprt is external to a chassis */
267cbf75e6Stephen Hanson#define	FMD_XPRT_NO_REMOTE_REPAIR 0x100	/* xprt does not allow remote repair */
268cbf75e6Stephen Hanson#define	FMD_XPRT_CACHE_AS_LOCAL 0x200	/* xprt caches fault as if local */
269cbf75e6Stephen Hanson#define	FMD_XPRT_HCONLY		0x400	/* xprt only proxies hc-scheme faults */
270cbf75e6Stephen Hanson#define	FMD_XPRT_HC_PRESENT_ONLY 0x800	/* only locally present hc faults */
271d9638e5mws
272d9638e5mwsextern fmd_xprt_t *fmd_xprt_open(fmd_hdl_t *, uint_t, nvlist_t *, void *);
273d9638e5mwsextern void fmd_xprt_close(fmd_hdl_t *, fmd_xprt_t *);
274d9638e5mwsextern void fmd_xprt_post(fmd_hdl_t *, fmd_xprt_t *, nvlist_t *, hrtime_t);
2752535165Vuong Nguyenextern void fmd_xprt_log(fmd_hdl_t *, fmd_xprt_t *, nvlist_t *, hrtime_t);
276d9638e5mwsextern void fmd_xprt_suspend(fmd_hdl_t *, fmd_xprt_t *);
277d9638e5mwsextern void fmd_xprt_resume(fmd_hdl_t *, fmd_xprt_t *);
278d9638e5mwsextern int fmd_xprt_error(fmd_hdl_t *, fmd_xprt_t *);
279d9638e5mwsextern nvlist_t *fmd_xprt_translate(fmd_hdl_t *, fmd_xprt_t *, fmd_event_t *);
280cbf75e6Stephen Hansonextern void fmd_xprt_add_domain(fmd_hdl_t *, nvlist_t *, char *);
281d9638e5mwsextern void fmd_xprt_setspecific(fmd_hdl_t *, fmd_xprt_t *, void *);
282d9638e5mwsextern void *fmd_xprt_getspecific(fmd_hdl_t *, fmd_xprt_t *);
2837c478bdstevel@tonic-gate
2847c478bdstevel@tonic-gate#ifdef	__cplusplus
2857c478bdstevel@tonic-gate}
2867c478bdstevel@tonic-gate#endif
2877c478bdstevel@tonic-gate
2887c478bdstevel@tonic-gate#endif	/* _FMD_API_H */
289