If the HA_GS_SUBSCRIPTION_SPECIAL_DATA flag is set in the subscription notification, the gs_subscription_special_data field will point to a special data block of the format:
typedef struct { int gs_length; unsigned int gs_flag; ha_gs_special_block_t *gs_special_data; } ha_gs_special_data_t;
This block acts as a header to point to a linked list of ha_gs_special_data_t elements.
The number of ha_gs_special_data_t elements in the list.
The result of OR'ing together all of the flags defining the types of ha_gs_special_data_t data included in the list. This allows the subscriber to quickly investigate this flag. If none of the included ha_gs_special_data_t types are of interest, it need not continue investigating the block any further.
Each ha_gs_special_block_t contains a single type of subscription special data and looks like the following:
typedef struct { unsigned int gs_special_flag; 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;
This block contains the actual subscription special data.
The flag identifying the type of this block's special data.
A pointer to the next ha_gs_special_block_t in the list. If this is the last ha_gs_special_block_t, this value will be NULL.
The number of entries contained in the data pointed to by the gs_special field for this ha_gs_special_block_t. If this entry is one, then the gs_special_length field is the total size of the data. If this entry is greater than one, the total number of bytes is this value multiplied by gs_special_length.
The number of bytes in each of the entries in the block pointed to by the gs_special field for this ha_gs_special_block_t.
A pointer to the actual data.
The gs_flag field in the gs_special_data_t block and the gs_special_flag field in each ha_gs_special_block_t may contain the following flags. The gs_special_flag field contains only one, whichever kind of data its ha_gs_special_block_t represents. The gs_flag will contain all of the individual gs_special_flags OR'ed together.
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;
These flags describe the contents of the ha_gs_special_block_t that may be included.
Indicates that there is a ha_gs_special_block_t containing the "death reasons" for each adapter listed in the gs_changing_membership field.
Indicates that there is a ha_gs_special_block_t containing the alias IP addresses of each adapter listed in the gs_current_membership field.
Indicates that there is a ha_gs_special_block_t containing the alias IP addresses of each adapter listed in the gs_changing_membership field.