/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ /* * FMA ETM-to-Transport API header * * const/type defns for transporting data between an Event Transport * Module (ETM) and its associated Transport Layer within a fault domain. */ #ifndef _ETM_XPORT_API_H #define _ETM_XPORT_API_H #pragma ident "%Z%%M% %I% %E% SMI" #ifdef __cplusplus extern "C" { #endif #include typedef void* etm_xport_hdl_t; /* transport instance handle */ typedef void* etm_xport_conn_t; /* transport connection handle */ typedef enum etm_callback_flag { ETM_CBFLAG_REINIT, /* reinitialize connection */ ETM_CBFLAG_RECV /* receive message */ } etm_cb_flag_t; /* * Connection Management */ /* * Initialize/setup transport instance before any connections are opened. * Return transport instance handle if successful, or NULL for failure. */ etm_xport_hdl_t etm_xport_init(fmd_hdl_t *hdl, char *endpoint_id, int (*cb_func)(fmd_hdl_t *hdl, etm_xport_conn_t conn, etm_cb_flag_t flag, void *arg), void *cb_func_arg); /* * Callback function provided to etm_xport_init(). * This function is called by the transport layer to notify the common layer * that action is required (receive a message, reinitialize a connection, etc.). * Return zero for success. * For any non-zero return value, the connection should be closed. */ int etm_xport_cb_func(fmd_hdl_t *hdl, etm_xport_conn_t conn, etm_cb_flag_t flag, void *arg); /* * Finish/teardown any transport infrastructure. * Return zero if successful, or nonzero for failure. */ int etm_xport_fini(fmd_hdl_t *hdl, etm_xport_hdl_t tlhdl); /* * Open a connection with the given endpoint. * Return the transport connection handle if successful, or NULL for failure. */ etm_xport_conn_t etm_xport_open(fmd_hdl_t *hdl, etm_xport_hdl_t tlhdl); /* * Close a connection. * Return zero if successful, or nonzero for failure. */ int etm_xport_close(fmd_hdl_t *hdl, etm_xport_conn_t conn); /* * Input/Output */ /* * Try to read byte_cnt bytes from the connection into the given buffer. * Return number of bytes successfully read, or a value < 0 for failure. */ ssize_t etm_xport_read(fmd_hdl_t *hdl, etm_xport_conn_t conn, hrtime_t timeout, void *buf, size_t byte_cnt); /* * Try to write byte_cnt bytes to the connection from the given buffer. * Return number of bytes successfully written, or a value < 0 for failure. */ ssize_t etm_xport_write(fmd_hdl_t *hdl, etm_xport_conn_t conn, hrtime_t timeout, void *buf, size_t byte_cnt); /* * Filter */ #define ETM_XPORT_FILTER_OK (1) /* OK to send/post event */ #define ETM_XPORT_FILTER_DROP (0) /* Do not send/post event */ #define ETM_XPORT_FILTER_ERROR (-1) /* Error */ /* * Make a decision whether or not to send an event to a remote endpoint. * Return ETM_XPORT_FILTER_OK, ETM_XPORT_FILTER_DROP, or ETM_XPORT_FILTER_ERROR * and set errno for failure. */ int etm_xport_send_filter(fmd_hdl_t *hdl, nvlist_t *event, const char *dest); /* * Make a decision whether or not to post an event to FMD. * Return ETM_XPORT_FILTER_OK, ETM_XPORT_FILTER_DROP, or ETM_XPORT_FILTER_ERROR * and set errno for failure. */ int etm_xport_post_filter(fmd_hdl_t *hdl, nvlist_t *event, const char *src); #ifdef __cplusplus } #endif #endif /* _ETM_XPORT_API_H */