mirror_corosync/include/ipc_evt.h
2006-07-17 20:16:14 +00:00

335 lines
10 KiB
C

/*
* Copyright (c) 2004-2005 Mark Haverkamp
* Copyright (c) 2004-2005 Open Source Development Lab
*
* All rights reserved.
*
* This software licensed under BSD license, the text of which follows:
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* - Neither the name of the Open Source Developement Lab nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef IPC_EVT_H_DEFINED
#define IPC_EVT_H_DEFINED
#include <netinet/in.h>
#include "saAis.h"
#include "saEvt.h"
#include "saClm.h"
#include "ipc_gen.h"
#include "mar_evt.h"
enum req_evt_types {
MESSAGE_REQ_EVT_OPEN_CHANNEL = 0,
MESSAGE_REQ_EVT_OPEN_CHANNEL_ASYNC = 1,
MESSAGE_REQ_EVT_CLOSE_CHANNEL = 2,
MESSAGE_REQ_EVT_UNLINK_CHANNEL = 3,
MESSAGE_REQ_EVT_SUBSCRIBE = 4,
MESSAGE_REQ_EVT_UNSUBSCRIBE = 5,
MESSAGE_REQ_EVT_PUBLISH = 6,
MESSAGE_REQ_EVT_CLEAR_RETENTIONTIME = 7,
MESSAGE_REQ_EVT_EVENT_DATA = 8
};
enum res_evt_types {
MESSAGE_RES_EVT_OPEN_CHANNEL = 0,
MESSAGE_RES_EVT_CLOSE_CHANNEL = 1,
MESSAGE_RES_EVT_UNLINK_CHANNEL = 2,
MESSAGE_RES_EVT_SUBSCRIBE = 3,
MESSAGE_RES_EVT_UNSUBSCRIBE = 4,
MESSAGE_RES_EVT_PUBLISH = 5,
MESSAGE_RES_EVT_CLEAR_RETENTIONTIME = 6,
MESSAGE_RES_EVT_CHAN_OPEN_CALLBACK = 7,
MESSAGE_RES_EVT_EVENT_DATA = 8,
MESSAGE_RES_EVT_AVAILABLE = 9
};
/*
* MESSAGE_REQ_EVT_OPEN_CHANNEL
* MESSAGE_REQ_EVT_OPEN_CHANNEL_ASYNC
*
* ico_head Request head
* ico_open_flag: Channel open flags
* ico_channel_name: Name of channel to open
* ico_c_handle: Local lib channel handle (used in returned event data)
* ico_timeout: Used only by open
* ico_invocation: Used only by async open
*
*/
struct req_evt_channel_open {
mar_req_header_t ico_head __attribute__((aligned(8)));
mar_uint8_t ico_open_flag __attribute__((aligned(8)));
mar_name_t ico_channel_name __attribute__((aligned(8)));
mar_evtchannelhandle_t ico_c_handle __attribute__((aligned(8)));
mar_time_t ico_timeout __attribute__((aligned(8)));
mar_invocation_t ico_invocation __attribute__((aligned(8)));
};
/*
* MESSAGE_RES_EVT_OPEN_CHANNEL
*
* Used by both the blocing and non-blocking
* versions. Only the error code in the header is used by the async
* open. The channel handle will be returnd via the channel open
* callback.
*
*
* ico_head: Results head
* ico_error: Request results
* ico_channel_handle: Server side channel handle (used in channel ops)
*
*/
struct res_evt_channel_open {
mar_res_header_t ico_head __attribute__((aligned(8)));
mar_uint32_t ico_channel_handle __attribute__((aligned(8)));/* svr chan handle */
};
/*
* MESSAGE_RES_EVT_CHAN_OPEN_CALLBACK
*
* ica_head: Results head.
* ica_c_handle: Lib size channel handle. So we can look
* up the new open channel info from the callback.
* ica_channel_handle: Server side handle.
* ica_invocation: Supplied by the user in the open call. Passed to
* the callback so the user can assocate the callback
* to the particular open.
*/
struct res_evt_open_chan_async {
mar_res_header_t ica_head __attribute__((aligned(8)));
mar_evtchannelhandle_t ica_c_handle __attribute__((aligned(8)));
mar_uint32_t ica_channel_handle __attribute__((aligned(8)));
mar_invocation_t ica_invocation __attribute__((aligned(8)));
};
/*
* MESSAGE_REQ_EVT_CLOSE_CHANNEL
*
* icc_head: Request head
* icc_channel_handle: Server handle of channel to close
*
*/
struct req_evt_channel_close {
mar_req_header_t icc_head __attribute__((aligned(8)));
mar_uint32_t icc_channel_handle __attribute__((aligned(8)));
};
/*
* MESSAGE_RES_EVT_CLOSE_CHANNEL
*
* icc_head: Results head
*
*/
struct res_evt_channel_close {
mar_res_header_t icc_head __attribute__((aligned(8)));
};
/*
* MESSAGE_REQ_EVT_UNLINK_CHANNEL
*
* iuc_head: Request head
* iuc_channel_name: Name of channel to unlink
*
*/
struct req_evt_channel_unlink {
mar_req_header_t iuc_head __attribute__((aligned(8)));
mar_name_t iuc_channel_name __attribute__((aligned(8)));
};
/*
* MESSAGE_RES_EVT_UNLINK_CHANNEL
*
* iuc_head: Results head
*
*/
struct res_evt_channel_unlink {
mar_res_header_t iuc_head __attribute__((aligned(8)));
};
/*
* MESSAGE_REQ_EVT_SUBSCRIBE
*
* ics_head: Request head
* ics_channel_handle: Server handle of channel
* ics_sub_id: Subscription ID
* ics_filter_size: Size of supplied filter data
* ics_filter_count: Number of filters supplied
* ics_filter_data: Filter data
*
*/
struct req_evt_event_subscribe {
mar_req_header_t ics_head __attribute__((aligned(8)));
mar_uint32_t ics_channel_handle __attribute__((aligned(8)));
mar_evtsubscriptionid_t ics_sub_id __attribute__((aligned(8)));
mar_uint32_t ics_filter_size __attribute__((aligned(8)));
mar_uint32_t ics_filter_count __attribute__((aligned(8)));
mar_uint8_t ics_filter_data[0] __attribute__((aligned(8)));
};
/*
* MESSAGE_RES_EVT_SUBSCRIBE
*
* ics_head: Result head
* ics_error: Request results
*
*/
struct res_evt_event_subscribe {
mar_res_header_t ics_head __attribute__((aligned(8)));
};
/*
* MESSAGE_REQ_EVT_UNSUBSCRIBE
*
* icu_head: Request head
* icu_channel_handle: Server handle of channel
* icu_sub_id: Subscription ID
*
*/
struct req_evt_event_unsubscribe {
mar_req_header_t icu_head __attribute__((aligned(8)));
mar_uint32_t icu_channel_handle __attribute__((aligned(8)));
mar_evtsubscriptionid_t icu_sub_id __attribute__((aligned(8)));
};
/*
* MESSAGE_RES_EVT_UNSUBSCRIBE
*
* icu_head: Results head
* icu_error: request result
*
*/
struct res_evt_event_unsubscribe {
mar_res_header_t icu_head __attribute__((aligned(8)));
};
/*
* MESSAGE_REQ_EVT_EVENT_DATA
* MESSAGE_RES_EVT_AVAILABLE
*
* evd_head: Request Head
*/
struct res_evt_event_data {
mar_res_header_t evd_head __attribute__((aligned(8)));
};
/*
* MESSAGE_REQ_EVT_PUBLISH (1)
* MESSAGE_RES_EVT_EVENT_DATA (2)
* MESSAGE_REQ_EXEC_EVT_EVENTDATA (3)
* MESSAGE_REQ_EXEC_EVT_RECOVERY_EVENTDATA (4)
*
* led_head: Request/Results head
* led_addr: address of node (4 only)
* led_receive_time: Time that the message was received (4 only)
* led_svr_channel_handle: Server channel handle (1 only)
* led_lib_channel_handle: Lib channel handle (2 only)
* led_chan_name: Channel name (3 and 4 only)
* led_chan_unlink_id: directs delivery to unlinked channels.
* led_event_id: Event ID (2, 3 and 4 only)
* led_msg_id: message ID (2, 3 and 4 only)
* led_sub_id: Subscription ID (2 only)
* led_publisher_node_id: Node ID of event publisher
* led_publisher_name: Node name of event publisher
* led_retention_time: Event retention time
* led_publish_time: Publication time of the event
* led_priority: Event priority
* led_user_data_offset: Offset to user data
* led_user_data_size: Size of user data
* led_patterns_number: Number of patterns in the event
* led_body: Pattern and user data
*/
struct lib_event_data {
mar_res_header_t led_head __attribute__((aligned(8)));
mar_uint32_t led_nodeid __attribute__((aligned(8)));
mar_time_t led_receive_time __attribute__((aligned(8)));
mar_uint32_t led_svr_channel_handle __attribute__((aligned(8)));
mar_evtchannelhandle_t led_lib_channel_handle __attribute__((aligned(8)));
mar_name_t led_chan_name __attribute__((aligned(8)));
mar_uint64_t led_chan_unlink_id __attribute__((aligned(8)));
mar_evteventid_t led_event_id __attribute__((aligned(8)));
mar_uint64_t led_msg_id __attribute__((aligned(8)));
mar_evtsubscriptionid_t led_sub_id __attribute__((aligned(8)));
mar_uint32_t led_publisher_node_id __attribute__((aligned(8)));
mar_name_t led_publisher_name __attribute__((aligned(8)));
mar_time_t led_retention_time __attribute__((aligned(8)));
mar_time_t led_publish_time __attribute__((aligned(8)));
mar_evteventpriority_t led_priority __attribute__((aligned(8)));
mar_uint32_t led_user_data_offset __attribute__((aligned(8)));
mar_uint32_t led_user_data_size __attribute__((aligned(8)));
mar_uint32_t led_patterns_number __attribute__((aligned(8)));
mar_uint8_t led_body[0] __attribute__((aligned(8)));
};
/*
* MESSAGE_RES_EVT_PUBLISH
*
* iep_head: Result head
* iep_error: Request results
* iep_event_id: Event ID of published message
*
*/
struct res_evt_event_publish {
mar_res_header_t iep_head __attribute__((aligned(8)));
mar_evteventid_t iep_event_id __attribute__((aligned(8)));
};
/*
* MESSAGE_REQ_EVT_CLEAR_RETENTIONTIME
*
* Request message:
*
* iec_head: Request head
* iec_event_id: ID of event to clear
* iec_channel_handle: Server handle of associate channel
*
*/
struct req_evt_event_clear_retentiontime {
mar_req_header_t iec_head __attribute__((aligned(8)));
mar_evteventid_t iec_event_id __attribute__((aligned(8)));
mar_uint32_t iec_channel_handle __attribute__((aligned(8)));
};
/*
* MESSAGE_RES_EVT_CLEAR_RETENTIONTIME
*
* iec_head: Results head
* iec_error: Request result
*
*/
struct res_evt_event_clear_retentiontime {
mar_res_header_t iec_head __attribute__((aligned(8)));
};
#endif /* AIS_EVT_H_DEFINED */