Purpose
ha_gs.h - Header file for the Group Services Application Programming Interface (GSAPI)
Description
The ha_gs.h header file provides data types and structures for use with the Group Services Application Programming Interface (GSAPI) subroutines, which reside in the libha_gs.a library. Any program that uses the GSAPI subroutines must include this file, which resides in the /usr/include directory.
The following listing shows the contents of the ha_gs.h file.
/* IBM_PROLOG_BEGIN_TAG */
/* This is an automatically generated prolog. */
/* */
/* */
/* */
/* Licensed Materials - Property of IBM */
/* */
/* (C) COPYRIGHT International Business Machines Corp. 1996,2001 */
/* All Rights Reserved */
/* */
/* US Government Users Restricted Rights - Use, duplication or */
/* disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */
/* */
/* IBM_PROLOG_END_TAG */
#ifndef _HA_GS_H_
#define _HA_GS_H_
static char *ha_gs_h_sccsid = "@(#)86 1.43 src/rsct/pgs/pgslib/ha_gs.h, gsapi, comm_r43x 5/14/01 11:28:19";
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/types.h>
#include <rsct/ct_ffdc.h>
#include <netinet/in.h>
#define HA_GS_RELEASE 8
typedef enum
{
HA_GS_OK, /* 0 */
HA_GS_OK_SO_FAR = HA_GS_OK, /* 0 */
HA_GS_NOT_OK, /* 1 */
HA_GS_EXISTS, /* 2 */
HA_GS_NO_INIT, /* 3 */
HA_GS_NAME_TOO_LONG, /* 4 */
HA_GS_NO_MEMORY, /* 5 */
HA_GS_NOT_A_MEMBER, /* 6 */
HA_GS_BAD_CLIENT_TOKEN, /* 7 */
HA_GS_BAD_MEMBER_TOKEN, /* 8 */
HA_GS_BAD_PARAMETER, /* 9 */
HA_GS_UNKNOWN_GROUP, /* 10 */
HA_GS_INVALID_GROUP, /* 11 */
HA_GS_NO_SOURCE_GROUP_PROVIDER, /* 12 */
HA_GS_BAD_GROUP_ATTRIBUTES, /* 13 */
HA_GS_WRONG_OLD_STATE, /* 14 */
HA_GS_DUPLICATE_INSTANCE_NUMBER, /* 15 */
HA_GS_COLLIDE, /* 16 */
HA_GS_SOCK_CREATE_FAILED, /* 17 */
HA_GS_SOCK_INIT_FAILED, /* 18 */
HA_GS_CONNECT_FAILED, /* 19 */
HA_GS_VOTE_NOT_EXPECTED, /* 20 */
HA_GS_NOT_SUPPORTED, /* 21 */
HA_GS_INVALID_SOURCE_GROUP, /* 22 */
HA_GS_UNKNOWN_PROVIDER, /* 23 */
HA_GS_INVALID_DEACTIVATE_PHASE, /* 24 */
HA_GS_PROVIDER_APPEARS_TWICE, /* 25 */
HA_GS_BACKLEVEL_PROVIDERS, /* 26 */
HA_GS_NULL_ADAPTER_INFO, /* 27 */
HA_GS_ADAPTER_INFO_NOT_FOUND, /* 28 */
HA_GS_ADAPTER_INFO_NOT_SENT /* 29 */
}ha_gs_rc_t; /* Return Codes */
typedef enum
{
HA_GS_NO_BATCHING = 0x0000,
HA_GS_BATCH_JOINS = 0x0001,
HA_GS_BATCH_LEAVES = 0x0002,
HA_GS_BATCH_BOTH = 0x0003,
HA_GS_DEACTIVATE_ON_FAILURE = 0x0004
} ha_gs_batch_ctrl_t; /* Controls Batching of Requests */
typedef enum
{
HA_GS_1_PHASE = 0x0001,
HA_GS_N_PHASE = 0x0002
} ha_gs_num_phases_t; /* Protocol number of Phases selection */
typedef enum
{
HA_GS_FIRST_MERGE_TYPE, /* 0 */
HA_GS_DISSOLVE_MERGE = HA_GS_FIRST_MERGE_TYPE, /* 0 */
HA_GS_LARGER_MERGE, /* 1 */
HA_GS_SMALLER_MERGE, /* 2 */
HA_GS_DONTCARE_MERGE, /* 3 */
HA_GS_LAST_MERGE_TYPE = HA_GS_DONTCARE_MERGE /* 3 */
} ha_gs_merge_ctrl_t; /* Controlling Merges */
typedef enum
{
HA_GS_NULL_VOTE,
HA_GS_VOTE_APPROVE,
HA_GS_VOTE_CONTINUE,
HA_GS_VOTE_REJECT
} ha_gs_vote_value_t; /* Allowable Vote Responses */
typedef enum
{
HA_GS_SOCKET_NO_SIGNAL = 0x00,
HA_GS_SOCKET_SIGNAL = 0x01,
HA_GS_ENABLE_ADAPTER_INFO = 0x02
} ha_gs_socket_ctrl_t; /* Socket Control */
typedef enum
{
HA_GS_NON_BLOCKING,
HA_GS_BLOCKING
} ha_gs_dispatch_flag_t; /* Modify behavior of ha_gs_dispatch */
typedef enum
{
HA_GS_RESPONSIVENESS_NOTIFICATION, /* 0 */
HA_GS_QUERY_NOTIFICATION, /* 1 */
HA_GS_DELAYED_ERROR_NOTIFICATION, /* 2 */
HA_GS_N_PHASE_NOTIFICATION, /* 3 */
HA_GS_APPROVED_NOTIFICATION, /* 4 */
HA_GS_REJECTED_NOTIFICATION, /* 5 */
HA_GS_ANNOUNCEMENT_NOTIFICATION, /* 6 */
HA_GS_SUBSCRIPTION_NOTIFICATION, /* 7 */
HA_GS_MERGE_NOTIFICATION, /* 8 */
HA_GS_NOTIFICATION_RESERVED_1 = 99, /* 99 */
HA_GS_NOTIFICATION_RESERVED_2 = 100,/* 100 for node number*/
HA_GS_NOTIFICATION_RESERVED_3 = 101, /* 101 for adapter info*/
HA_GS_NOTIFICATION_RESERVED_4 = 102 /* 102 for delta adapter info*/
} ha_gs_notification_type_t; /* Identify types of notifications */
typedef enum
{
HA_GS_RESPONSIVENESS, /* 0 */
HA_GS_JOIN, /* 1 */
HA_GS_FAILURE_LEAVE, /* 2 */
HA_GS_LEAVE, /* 3 */
HA_GS_EXPEL, /* 4 */
HA_GS_STATE_VALUE_CHANGE, /* 5 */
HA_GS_PROVIDER_MESSAGE, /* 6 */
HA_GS_CAST_OUT, /* 7 */
HA_GS_SOURCE_STATE_REFLECTION, /* 8 */
HA_GS_MERGE, /* 9 */
HA_GS_SUBSCRIPTION, /* 10 */
HA_GS_GROUP_ATTRIBUTE_CHANGE, /* 11 */
MAX_REQUEST = HA_GS_GROUP_ATTRIBUTE_CHANGE, /* 11 */
HA_GS_REQ_RESERVED_1 = 99, /* 99 */
HA_GS_REQ_RESERVED_2 = 100, /* 100 */
HA_GS_REQ_RESERVED_3 = 101, /* 101 */
HA_GS_REQ_RESERVED_4 = 102 /* 102 */
} ha_gs_request_t; /* Type of request a notification was for */
typedef enum
{
HA_GS_NO_RESPONSIVENESS,
HA_GS_PING_RESPONSIVENESS,
HA_GS_COUNTER_RESPONSIVENESS
} ha_gs_responsiveness_type_t; /* Type of responsiveness checking */
typedef enum
{
HA_GS_NO_CHANGE = 0x0000, /* 0 */
HA_GS_PROPOSED_MEMBERSHIP = 0x0001, /* 1 */
HA_GS_ONGOING_MEMBERSHIP = 0x0002, /* 2 */
HA_GS_PROPOSED_STATE_VALUE = 0x0004, /* 4 */
HA_GS_ONGOING_STATE_VALUE = 0x0008, /* 8 */
HA_GS_UPDATED_PROVIDER_MESSAGE = 0x0010, /* 16 */
HA_GS_UPDATED_MEMBERSHIP = 0x0020, /* 32 */
HA_GS_REJECTED_MEMBERSHIP = 0x0040, /* 64 */
HA_GS_UPDATED_STATE_VALUE = 0x0080, /* 128 */
HA_GS_REFLECTED_SOURCE_STATE_VALUE = 0x0100, /* 256 */
HA_GS_EXPEL_INFORMATION = 0x0200, /* 512 */
HA_GS_PROPOSED_GROUP_ATTRIBUTES = 0x0400, /* 1024 */
HA_GS_ONGOING_GROUP_ATTRIBUTES = 0x0800, /* 2048 */
HA_GS_UPDATED_GROUP_ATTRIBUTES = 0x1000, /* 4096 */
HA_GS_REJECTED_GROUP_ATTRIBUTES = 0x2000 /* 8192 */
} ha_gs_updates_t; /* Whats Changed */
typedef enum
{
HA_GS_MIN_SUMMARY_CODE = 0x0001, /* 1 */
HA_GS_EXPLICIT_APPROVE = 0x0001, /* 1 */
HA_GS_EXPLICIT_REJECT = 0x0002, /* 2 */
HA_GS_DEFAULT_APPROVE = 0x0004, /* 4 */
HA_GS_DEFAULT_REJECT = 0x0008, /* 8 */
HA_GS_TIME_LIMIT_EXCEEDED = 0x0010, /* 16 */
HA_GS_PROVIDER_FAILED = 0x0020, /* 32 */
HA_GS_RESPONSIVENESS_NO_RESPONSE = 0x0040, /* 64 */
HA_GS_RESPONSIVENESS_RESPONSE = 0x0080, /* 128 */
HA_GS_GROUP_DISSOLVED = 0x0100, /* 256 */
HA_GS_GROUP_SERVICES_HAS_DIED_HORRIBLY = 0x0200, /* 512 */
HA_GS_DEACTIVATE_UNSUCCESSFUL = 0x0400, /* 1024 */
HA_GS_DEACTIVATE_TIME_LIMIT_EXCEEDED = 0x0800, /* 2048 */
HA_GS_GROUP_ATTRIBUTES_CHANGED = 0x1000, /* 4096 */
HA_GS_MAX_SUMMARY_CODE = 0x1000 /* 4096 */
} ha_gs_summary_code_t; /* Notification summary */
typedef enum
{
HA_GS_CALLBACK_NOT_OK,
HA_GS_CALLBACK_OK
} ha_gs_callback_rc_t; /* Callback Return Codes */
typedef enum
{
HA_GS_VOLUNTARY_LEAVE = 0x0001, /* 1 */
HA_GS_PROVIDER_FAILURE = 0x0002, /* 2 */
HA_GS_HOST_FAILURE = 0x0004, /* 4 */
HA_GS_PROVIDER_EXPELLED = 0x0008, /* 8 */
HA_GS_SOURCE_PROVIDER_LEAVE = 0x0010, /* 16 */
HA_GS_PROVIDER_SAID_GOODBYE = 0x0020 /* 32 */
} ha_gs_leave_reasons_t;
typedef enum
{
HA_GS_QUERY_ALL,
HA_GS_QUERY_GROUP
} ha_gs_query_type_t;
typedef enum
{
HA_GS_SUBSCRIBE_STATE = 0x01,
HA_GS_SUBSCRIBE_DELTA_JOINS = 0x02,
HA_GS_SUBSCRIBE_DELTA_LEAVES = 0x04,
HA_GS_SUBSCRIBE_DELTAS_ONLY = 0x06,
HA_GS_SUBSCRIBE_MEMBERSHIP = 0x08,
HA_GS_SUBSCRIBE_ALL_MEMBERSHIP = 0x0e,
HA_GS_SUBSCRIBE_STATE_AND_MEMBERSHIP= 0x0f
} ha_gs_subscription_ctrl_t;
typedef enum
{
HA_GS_SUBSCRIPTION_STATE = 0x01, /* 1 */
HA_GS_SUBSCRIPTION_DELTA_JOIN = 0x02, /* 2 */
HA_GS_SUBSCRIPTION_DELTA_LEAVE = 0x04, /* 4 */
HA_GS_SUBSCRIPTION_MEMBERSHIP = 0x08, /* 8 */
HA_GS_SUBSCRIPTION_SPECIAL_DATA = 0x40, /* 64 */
HA_GS_SUBSCRIPTION_DISSOLVED = 0x80, /* 128 */
HA_GS_SUBSCRIPTION_GS_HAS_DIED = 0x100 /* 256 */
} ha_gs_subscription_type_t;
typedef int ha_gs_token_t;
typedef int ha_gs_descriptor_t;
typedef unsigned short ha_gs_time_limit_t;
#define HA_GS_MAX_GROUP_NAME_LENGTH 32
typedef char *ha_gs_group_name_t;
/* Use this name to subscribe to processor membership. */
#define HA_GS_HOST_MEMBERSHIP_GROUP "HostMembership"
#define HA_GS_ENET_MEMBERSHIP_GROUP "enMembership"
#define HA_GS_CSSRAW_MEMBERSHIP_GROUP "cssRawMembership"
#define HA_GS_CSS_MEMBERSHIP_GROUP "cssMembership"
#define HA_GS_CSS0_MEMBERSHIP_GROUP HA_GS_CSS_MEMBERSHIP_GROUP
#define HA_GS_CSS1_MEMBERSHIP_GROUP "css1Membership"
#define HA_GS_ML0_MEMBERSHIP_GROUP "ml0Membership"
#define HA_GS_TOKENRING_MEMBERSHIP_GROUP "trMembership"
#define HA_GS_FDDI_MEMBERSHIP_GROUP "fddiMembership"
#define HA_GS_RS232_MEMBERSHIP_GROUP "rs232Membership"
#define HA_GS_TMSCSI_MEMBERSHIP_GROUP "tmscsiMembership"
#define HA_GS_TMSSA_MEMBERSHIP_GROUP "tmssaMembership"
#define HA_GS_SLIP_MEMBERSHIP_GROUP "slipMembership"
#define HA_GS_ATM_MEMBERSHIP_GROUP "atmMembership"
#define HA_GS_MYRINET_MEMBERSHIP_GROUP "myriMembership"
typedef struct
{
short gs_version;
short gs_sizeof_group_attributes;
short gs_client_version;
ha_gs_batch_ctrl_t gs_batch_control;
ha_gs_num_phases_t gs_num_phases;
ha_gs_num_phases_t gs_source_reflection_num_phases;
ha_gs_vote_value_t gs_group_default_vote;
ha_gs_merge_ctrl_t gs_merge_control;
ha_gs_time_limit_t gs_time_limit;
ha_gs_time_limit_t gs_source_reflection_time_limit;
ha_gs_group_name_t gs_group_name;
ha_gs_group_name_t gs_source_group_name;
} ha_gs_group_attributes_t; /* Identify Group Attributes */
#ifdef __cplusplus
const short HA_GS_node_number = -1;
const short HA_GS_instance_number = -1;
#else
#define HA_GS_node_number ((short)-1)
#define HA_GS_instance_number ((short)-1)
#endif
#define gs_node_number _gs_provider_info._gs_node_number
#define gs_instance_number _gs_provider_info._gs_instance_number
typedef union
{
struct
{
short _gs_instance_number;
short _gs_node_number;
} _gs_provider_info;
int gs_provider_id;
} ha_gs_provider_t; /* Provider ID */
typedef struct
{
int gs_length;
char *gs_state;
} ha_gs_state_value_t; /* State Vector */
typedef struct
{
short gs_version;
ha_gs_state_value_t gs_group_state_value;
} ha_gs_group_state_t; /* encapsulation of state vector */
typedef struct
{
int gs_length;
char *gs_message;
} ha_gs_provider_message_t; /* provider message */
typedef struct
{
ha_gs_responsiveness_type_t gs_responsiveness_type;
unsigned int gs_responsiveness_interval;
ha_gs_time_limit_t gs_responsiveness_response_time_limit;
void *gs_counter_location;
unsigned int gs_counter_length;
} ha_gs_responsiveness_t; /* responsiveness attributes */
typedef union
{
struct {
ha_gs_state_value_t *_gs_info_state;
ha_gs_provider_t *_gs_info_providers;
} _gs_group_info;
ha_gs_group_name_t gs_groups;
} ha_gs_group_info_t;
#define gs_group_info_state _gs_group_info._gs_info_state
#define gs_group_info_providers _gs_group_info._gs_info_providers
typedef struct
{
ha_gs_query_type_t gs_query_type;
ha_gs_rc_t gs_query_return_code;
int gs_number_of_groups;
ha_gs_group_info_t *gs_group_info;
} ha_gs_query_info_t;
typedef struct
{
unsigned int gs_count;
ha_gs_provider_t *gs_providers;
} ha_gs_membership_t; /* Membership List */
typedef struct {
int gs_deactivate_phase;
int gs_expel_flag_length;
char *gs_expel_flag;
} ha_gs_expel_info_t;
typedef struct
{
unsigned int gs_voluntary_or_failure;
unsigned int gs_voluntary_leave_code;
} ha_gs_leave_info_t;
typedef struct
{
unsigned int gs_count;
ha_gs_leave_info_t *gs_leave_codes;
} ha_gs_leave_array_t;
typedef struct {
unsigned short gs_num_phases;
unsigned short gs_phase_number;
} ha_gs_phase_info_t;
typedef enum {
HA_GS_ADAPTER_DEATH_ARRAY = 0x01,
HA_GS_CURRENT_ADAPTER_ALIAS_ARRAY = 0x02,
HA_GS_CHANGING_ADAPTER_ALIAS_ARRAY = 0x04
} ha_gs_subscription_special_type_t;
typedef enum
{
HA_GS_ADAPTER_DEAD = 0x0001,
HA_GS_ADAPTER_REMOVED = 0x0002
} ha_gs_adapter_death_t;
typedef struct {
int gs_length;
unsigned int gs_flag;
void *gs_special_data;
} ha_gs_special_data_t;
typedef struct ha_gs_special_block_t {
unsigned int gs_special_flag;
struct ha_gs_special_block_t *gs_next_special_block;
int gs_special_num_entries;
int gs_special_length;
void *gs_special;
} ha_gs_special_block_t;
/* NOTE: at this moment, only IP4 will be supported */
typedef union {
struct in_addr ip4;
struct in6_addr ip6;
} ha_gs_ip_addr;
typedef struct {
ha_gs_ip_addr ip_addr;
short node_number;
const char *interface_name;
ha_gs_provider_t gs_member_id; /* not used yet */
const ha_gs_group_name_t gs_group_name; /* not used yet */
} ha_gs_adapter_info;
typedef struct
{
ha_gs_phase_info_t gs_phase_info;
ha_gs_provider_t gs_proposed_by;
ha_gs_updates_t gs_whats_changed;
ha_gs_membership_t *gs_current_providers;
ha_gs_membership_t *gs_changing_providers;
ha_gs_leave_array_t *gs_leave_info;
ha_gs_expel_info_t *gs_expel_info;
ha_gs_state_value_t *gs_current_state_value;
ha_gs_state_value_t *gs_proposed_state_value;
ha_gs_state_value_t *gs_source_state_value;
ha_gs_provider_message_t *gs_provider_message;
ha_gs_group_attributes_t *gs_new_group_attributes;
} ha_gs_proposal_t;
typedef struct
{
ha_gs_notification_type_t gs_notification_type;
ha_gs_responsiveness_t gs_responsiveness_information;
} ha_gs_responsiveness_notification_t;
typedef struct
{
ha_gs_notification_type_t gs_notification_type;
unsigned int gs_number_of_queries;
ha_gs_query_info_t *gs_query_info;
} ha_gs_query_notification_t;
typedef struct
{
ha_gs_notification_type_t gs_notification_type;
ha_gs_token_t gs_provider_token;
ha_gs_request_t gs_protocol_type;
ha_gs_summary_code_t gs_summary_code;
ha_gs_time_limit_t gs_time_limit;
ha_gs_proposal_t *gs_proposal;
} ha_gs_n_phase_notification_t;
typedef struct
{
ha_gs_notification_type_t gs_notification_type;
ha_gs_token_t gs_provider_token;
ha_gs_request_t gs_protocol_type;
ha_gs_summary_code_t gs_summary_code;
ha_gs_proposal_t *gs_proposal;
} ha_gs_approved_notification_t;
typedef struct
{
ha_gs_notification_type_t gs_notification_type;
ha_gs_token_t gs_provider_token;
ha_gs_request_t gs_protocol_type;
ha_gs_summary_code_t gs_summary_code;
ha_gs_proposal_t *gs_proposal;
} ha_gs_rejected_notification_t;
typedef struct
{
ha_gs_notification_type_t gs_notification_type;
ha_gs_token_t gs_provider_token;
ha_gs_summary_code_t gs_summary_code;
ha_gs_membership_t *gs_announcement;
} ha_gs_announcement_notification_t;
typedef struct
{
ha_gs_notification_type_t gs_notification_type;
ha_gs_token_t gs_provider_token;
ha_gs_request_t gs_protocol_type;
ha_gs_proposal_t *gs_proposal;
ha_gs_merge_ctrl_t gs_merge_control;
ha_gs_group_state_t gs_alpha_group_state;
ha_gs_group_state_t gs_omega_group_state;
} ha_gs_merge_notification_t;
typedef struct
{
ha_gs_notification_type_t gs_notification_type;
ha_gs_token_t gs_subscriber_token;
ha_gs_subscription_type_t gs_subscription_type;
ha_gs_state_value_t *gs_state_value;
ha_gs_membership_t *gs_full_membership;
ha_gs_membership_t *gs_changing_membership;
ha_gs_special_data_t *gs_subscription_special_data;
} ha_gs_subscription_notification_t;
typedef void (ha_gs_subscription_cb_t)(const ha_gs_subscription_notification_t*);
typedef void (ha_gs_query_cb_t)(const ha_gs_query_notification_t*);
typedef ha_gs_callback_rc_t (ha_gs_responsiveness_cb_t)(const ha_gs_responsiveness_notification_t*);
typedef void (ha_gs_n_phase_cb_t)(const ha_gs_n_phase_notification_t*);
typedef void (ha_gs_approved_cb_t)(const ha_gs_approved_notification_t*);
typedef void (ha_gs_rejected_cb_t)(const ha_gs_rejected_notification_t*);
typedef void (ha_gs_announcement_cb_t)(const ha_gs_announcement_notification_t*);
typedef void (ha_gs_merge_cb_t)(const ha_gs_merge_notification_t*);
typedef struct {
ha_gs_group_attributes_t *gs_group_attributes;
short gs_provider_instance;
char *gs_provider_local_name;
ha_gs_n_phase_cb_t *gs_n_phase_protocol_callback;
ha_gs_approved_cb_t *gs_protocol_approved_callback;
ha_gs_rejected_cb_t *gs_protocol_rejected_callback;
ha_gs_announcement_cb_t *gs_announcement_callback;
ha_gs_merge_cb_t *gs_merge_callback;
} ha_gs_join_request_t;
typedef struct {
ha_gs_num_phases_t gs_num_phases;
ha_gs_time_limit_t gs_time_limit;
ha_gs_state_value_t gs_new_state;
} ha_gs_state_change_request_t;
typedef struct {
ha_gs_num_phases_t gs_num_phases;
ha_gs_time_limit_t gs_time_limit;
ha_gs_provider_message_t gs_message;
} ha_gs_message_request_t;
typedef struct {
ha_gs_num_phases_t gs_num_phases;
ha_gs_time_limit_t gs_time_limit;
unsigned int gs_leave_code;
} ha_gs_leave_request_t;
typedef struct {
ha_gs_num_phases_t gs_num_phases;
ha_gs_time_limit_t gs_time_limit;
ha_gs_membership_t gs_expel_list;
int gs_deactivate_phase;
char *gs_deactivate_flag;
} ha_gs_expel_request_t;
typedef struct {
ha_gs_subscription_ctrl_t gs_subscription_control;
ha_gs_group_name_t gs_subscription_group;
ha_gs_subscription_cb_t *gs_subscription_callback;
} ha_gs_subscribe_request_t;
typedef struct {
ha_gs_num_phases_t gs_num_phases;
ha_gs_time_limit_t gs_time_limit;
ha_gs_group_attributes_t *gs_group_attributes;
ha_gs_membership_t *gs_backlevel_providers;
} ha_gs_attribute_change_request_t;
#define gs_join_request _gs_protocol_info._gs_join_request
#define gs_state_change_request _gs_protocol_info._gs_state_change_request
#define gs_message_request _gs_protocol_info._gs_message_request
#define gs_leave_request _gs_protocol_info._gs_leave_request
#define gs_expel_request _gs_protocol_info._gs_expel_request
#define gs_subscribe_request _gs_protocol_info._gs_subscribe_request
#define gs_attribute_change_request _gs_protocol_info._gs_attribute_change_request
typedef struct {
union {
ha_gs_join_request_t _gs_join_request;
ha_gs_state_change_request_t _gs_state_change_request;
ha_gs_message_request_t _gs_message_request;
ha_gs_leave_request_t _gs_leave_request;
ha_gs_expel_request_t _gs_expel_request;
ha_gs_subscribe_request_t _gs_subscribe_request;
ha_gs_attribute_change_request_t _gs_attribute_change_request;
} _gs_protocol_info;
} ha_gs_proposal_info_t;
typedef struct
{
ha_gs_notification_type_t gs_notification_type;
ha_gs_token_t gs_request_token;
ha_gs_request_t gs_protocol_type;
ha_gs_rc_t gs_delayed_return_code;
ha_gs_proposal_info_t *gs_failing_request;
} ha_gs_delayed_error_notification_t;
typedef void (ha_gs_delayed_error_cb_t)(const ha_gs_delayed_error_notification_t*);
/* The following macro is for the compatibility to the previous versions */
#ifndef _HA_GS_BUILD_COMPATIBLE_FUNCTION_
/* This section will always be included for the applications */
ha_gs_rc_t ha_gs_setup(int compiled_version, int argcount,
ha_gs_descriptor_t *descriptor_addr,
const ha_gs_socket_ctrl_t socket_control,
const ha_gs_responsiveness_t *responsiveness_control,
const char *deactivate_script,
ha_gs_responsiveness_cb_t *responsiveness_cb_addr,
ha_gs_delayed_error_cb_t *delayed_error_cb_addr,
ha_gs_query_cb_t *query_cb_addr, ...);
#ifdef __cplusplus
inline ha_gs_rc_t ha_gs_init(ha_gs_descriptor_t *descriptor_addr,
const ha_gs_socket_ctrl_t socket_control,
const ha_gs_responsiveness_t *responsiveness_control,
const char *deactivate_script,
ha_gs_responsiveness_cb_t *responsiveness_cb_addr,
ha_gs_delayed_error_cb_t *delayed_error_cb_addr,
ha_gs_query_cb_t *query_cb_addr)
{
return ha_gs_setup(HA_GS_RELEASE, 7,
descriptor_addr,
socket_control,
responsiveness_control,
deactivate_script,
responsiveness_cb_addr,
delayed_error_cb_addr,
query_cb_addr);
}
#else
#define ha_gs_init(a,b,c,d,e,f,g) ha_gs_setup(HA_GS_RELEASE,7,a,b,c,d,e,f,g)
#endif
#endif
ha_gs_rc_t ha_gs_get_node_number(int *node_number);
ha_gs_rc_t ha_gs_get_adapter_info(ha_gs_adapter_info *adapter);
ha_gs_rc_t ha_gs_dispatch(const ha_gs_dispatch_flag_t);
ha_gs_rc_t ha_gs_join(ha_gs_token_t *,
const ha_gs_proposal_info_t *);
ha_gs_rc_t ha_gs_change_state_value(ha_gs_token_t,
const ha_gs_proposal_info_t *);
ha_gs_rc_t ha_gs_send_message(ha_gs_token_t,
const ha_gs_proposal_info_t *);
ha_gs_rc_t ha_gs_leave(ha_gs_token_t,
const ha_gs_proposal_info_t *);
ha_gs_rc_t ha_gs_expel(ha_gs_token_t,
const ha_gs_proposal_info_t *);
ha_gs_rc_t ha_gs_change_attributes(ha_gs_token_t,
const ha_gs_proposal_info_t *);
ha_gs_rc_t ha_gs_goodbye(ha_gs_token_t);
ha_gs_rc_t ha_gs_vote(ha_gs_token_t,
ha_gs_vote_value_t,
const ha_gs_state_value_t *,
const ha_gs_provider_message_t *,
ha_gs_vote_value_t);
ha_gs_rc_t ha_gs_quit(void);
ha_gs_rc_t ha_gs_query_group_list(void);
ha_gs_rc_t ha_gs_query_group_info(const ha_gs_group_name_t);
ha_gs_rc_t ha_gs_subscribe(ha_gs_token_t *,
const ha_gs_proposal_info_t *);
ha_gs_rc_t ha_gs_unsubscribe(ha_gs_token_t);
void ha_gs_copy_group_attributes(ha_gs_group_attributes_t *gAttrsTarg,
ha_gs_group_attributes_t *gAttrsSrc);
ha_gs_rc_t ha_gs_get_ffdc_id(fc_eid_t fcid);
#ifdef __cplusplus
} /* end extern "C" */
#endif
#endif /* _HA_GS_H_ */
Related Information
GSAPI subroutines: ha_gs_change_state_value, ha_gs_dispatch, ha_gs_init, ha_gs_expel, ha_gs_join, ha_gs_leave, ha_gs_quit, ha_gs_send_message, ha_gs_subscribe, ha_gs_unsubscribe, ha_gs_vote, ha_gs_change_attributes, ha_gs_goodbye