ack, code review. One minor question below. /Thanks HansN
On 01/05/2016 02:33 PM, Minh Hon Chau wrote:
> osaf/libs/common/amf/d2nedu.c | 311
> ++++++++++++++++++++++++--
> osaf/libs/common/amf/d2nmsg.c | 266 +++++++++++++++++++++++
> osaf/libs/common/amf/include/Makefile.am | 1 +
> osaf/libs/common/amf/include/amf_d2nedu.h | 16 +
> osaf/libs/common/amf/include/amf_d2nmsg.h | 61 +++++
> osaf/libs/common/amf/include/amf_defs.h | 3 +
> osaf/libs/common/amf/include/amf_si_assign.h | 49 ++++
> 7 files changed, 680 insertions(+), 27 deletions(-)
>
>
> Outlined changes:
> . Introduce messages sisu_state_info and csicomp_state_info
> to carry sync information which are sent to amfd to recover
> from headless
> . Some encode/decode functions for these 2 new messages
>
> diff --git a/osaf/libs/common/amf/d2nedu.c b/osaf/libs/common/amf/d2nedu.c
> --- a/osaf/libs/common/amf/d2nedu.c
> +++ b/osaf/libs/common/amf/d2nedu.c
> @@ -57,6 +57,7 @@ uint32_t avsv_edp_dnd_msg(EDU_HDL *hdl,
> AVSV_DND_MSG *struct_ptr = NULL, **d_ptr = NULL;
> uint16_t ver3 = AVSV_AVD_AVND_MSG_FMT_VER_3;
> uint16_t ver5 = AVSV_AVD_AVND_MSG_FMT_VER_5;
> + uint16_t ver6 = AVSV_AVD_AVND_MSG_FMT_VER_6;
>
> EDU_INST_SET avsv_dnd_msg_rules[] = {
> {EDU_START, avsv_edp_dnd_msg, 0, 0, 0,
> @@ -71,8 +72,14 @@ uint32_t avsv_edp_dnd_msg(EDU_HDL *hdl,
> /* AVSV_N2D_NODE_UP_MSG_INFO */
> {EDU_EXEC, ncs_edp_uns32, 0, 0, 0,
> (long)&((AVSV_DND_MSG *)0)->msg_info.n2d_node_up.msg_id, 0,
> NULL},
> + {EDU_VER_GE, NULL, 0, 0, 2, 0, 0, (EDU_EXEC_RTINE)((uint16_t
> *)(&(ver6)))},
> + {EDU_EXEC, ncs_edp_uns32, 0, 0, 0,
> + (long)&((AVSV_DND_MSG *)0)->msg_info.n2d_node_up.leds_set, 0,
> NULL},
> {EDU_EXEC, m_NCS_EDP_SACLMNODEIDT, 0, 0, 0,
> (long)&((AVSV_DND_MSG *)0)->msg_info.n2d_node_up.node_id, 0,
> NULL},
> + {EDU_VER_GE, NULL, 0, 0, 2, 0, 0, (EDU_EXEC_RTINE)((uint16_t
> *)(&(ver6)))},
> + {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0,
> + (long)&((AVSV_DND_MSG *)0)->msg_info.n2d_node_up.node_name, 0,
> NULL},
> {EDU_EXEC, ncs_edp_mds_dest, 0, 0, EDU_EXIT,
> (long)&((AVSV_DND_MSG
> *)0)->msg_info.n2d_node_up.adest_address, 0, NULL},
>
> @@ -365,6 +372,34 @@ uint32_t avsv_edp_dnd_msg(EDU_HDL *hdl,
> {EDU_EXEC, m_NCS_EDP_SACLMNODEIDT, 0, 0, EDU_EXIT,
> (long)&((AVSV_DND_MSG
> *)0)->msg_info.d2n_reboot_info.node_id, 0, NULL},
>
> + /* AVSV_N2D_ND_SISU_STATE_INFO_MSG */
> + {EDU_EXEC, ncs_edp_uns32, 0, 0, 0,
> + (long)&((AVSV_DND_MSG
> *)0)->msg_info.n2d_nd_sisu_state_info.msg_id, 0, NULL},
> + {EDU_EXEC, m_NCS_EDP_SACLMNODEIDT, 0, 0, 0,
> + (long)&((AVSV_DND_MSG
> *)0)->msg_info.n2d_nd_sisu_state_info.node_id, 0, NULL},
> + {EDU_EXEC, ncs_edp_uns32, 0, 0, 0,
> +
> (long)&((AVSV_DND_MSG*)0)->msg_info.n2d_nd_sisu_state_info.num_sisu, 0, NULL},
> + {EDU_EXEC, avsv_edp_sisu_state_info_msg, EDQ_POINTER, 0, 0,
> + (long)&((AVSV_DND_MSG
> *)0)->msg_info.n2d_nd_sisu_state_info.sisu_list, 0, NULL},
> + {EDU_EXEC, ncs_edp_uns32, 0, 0, 0,
> +
> (long)&((AVSV_DND_MSG*)0)->msg_info.n2d_nd_sisu_state_info.num_su, 0, NULL},
> + {EDU_EXEC, avsv_edp_su_state_info_msg, EDQ_POINTER, 0, EDU_EXIT,
> + (long)&((AVSV_DND_MSG
> *)0)->msg_info.n2d_nd_sisu_state_info.su_list, 0, NULL},
> +
> + /* AVSV_N2D_ND_CSICOMP_STATE_INFO_MSG */
> + {EDU_EXEC, ncs_edp_uns32, 0, 0, 0,
> + (long)&((AVSV_DND_MSG
> *)0)->msg_info.n2d_nd_csicomp_state_info.msg_id, 0, NULL},
> + {EDU_EXEC, m_NCS_EDP_SACLMNODEIDT, 0, 0, 0,
> + (long)&((AVSV_DND_MSG
> *)0)->msg_info.n2d_nd_csicomp_state_info.node_id, 0, NULL},
> + {EDU_EXEC, ncs_edp_uns32, 0, 0, 0,
> +
> (long)&((AVSV_DND_MSG*)0)->msg_info.n2d_nd_csicomp_state_info.num_csicomp, 0,
> NULL},
> + {EDU_EXEC, avsv_edp_csicomp_state_info_msg, EDQ_POINTER, 0, 0,
> + (long)&((AVSV_DND_MSG
> *)0)->msg_info.n2d_nd_csicomp_state_info.csicomp_list, 0, NULL},
> + {EDU_EXEC, ncs_edp_uns32, 0, 0, 0,
> +
> (long)&((AVSV_DND_MSG*)0)->msg_info.n2d_nd_csicomp_state_info.num_comp, 0,
> NULL},
> + {EDU_EXEC, avsv_edp_comp_state_info_msg, EDQ_POINTER, 0,
> EDU_EXIT,
> + (long)&((AVSV_DND_MSG
> *)0)->msg_info.n2d_nd_csicomp_state_info.comp_list, 0, NULL},
> +
> {EDU_END, 0, 0, 0, 0, 0, 0, NULL},
> };
>
> @@ -404,33 +439,35 @@ int avsv_dnd_msg_test_type_fnc(NCSCONTEX
> {
> enum {
> LCL_JMP_OFFSET_AVSV_N2D_NODE_UP_MSG = 1,
> - LCL_JMP_OFFSET_AVSV_N2D_REG_SU_MSG = 4,
> - LCL_JMP_OFFSET_AVSV_N2D_REG_COMP_MSG = 8,
> - LCL_JMP_OFFSET_AVSV_N2D_OPERATION_STATE_MSG = 12,
> - LCL_JMP_OFFSET_AVSV_N2D_INFO_SU_SI_ASSIGN_MSG = 18,
> - LCL_JMP_OFFSET_AVSV_N2D_PG_TRACK_ACT_MSG = 27,
> - LCL_JMP_OFFSET_AVSV_N2D_OPERATION_REQUEST_MSG = 32,
> - LCL_JMP_OFFSET_AVSV_N2D_DATA_REQUEST_MSG = 36,
> - LCL_JMP_OFFSET_AVSV_N2D_SHUTDOWN_APP_SU_MSG = 39,
> - LCL_JMP_OFFSET_AVSV_N2D_VERIFY_ACK_NACK_MSG = 41,
> - LCL_JMP_OFFSET_AVSV_D2N_CLM_NODE_UP_MSG = 44,
> - LCL_JMP_OFFSET_AVSV_D2N_REG_SU_MSG = 48,
> - LCL_JMP_OFFSET_AVSV_D2N_REG_COMP_MSG = 53,
> - LCL_JMP_OFFSET_AVSV_D2N_INFO_SU_SI_ASSIGN_MSG = 58,
> - LCL_JMP_OFFSET_AVSV_D2N_PG_TRACK_ACT_RSP_MSG = 70,
> - LCL_JMP_OFFSET_AVSV_D2N_PG_UPD_MSG = 77,
> - LCL_JMP_OFFSET_AVSV_D2N_OPERATION_REQUEST_MSG = 81,
> - LCL_JMP_OFFSET_AVSV_D2N_PRESENCE_SU_MSG = 84,
> - LCL_JMP_OFFSET_AVSV_D2N_DATA_VERIFY_MSG = 88,
> - LCL_JMP_OFFSET_AVSV_D2N_DATA_ACK_MSG = 93,
> - LCL_JMP_OFFSET_AVSV_D2N_SHUTDOWN_APP_SU_MSG = 95,
> - LCL_JMP_OFFSET_AVSV_D2N_SET_LEDS_MSG = 97,
> - LCL_JMP_OFFSET_AVSV_N2D_COMP_VALID_MSG = 99,
> - LCL_JMP_OFFSET_AVSV_D2N_COMP_VALID_RESP_MSG = 107,
> - LCL_JMP_OFFSET_AVSV_D2N_ROLE_CHANGE_MSG = 111,
> - LCL_JMP_OFFSET_AVSV_D2N_ADMIN_OP_REQ_MSG = 114,
> - LCL_JMP_OFFSET_AVSV_D2N_HEARTBEAT_MSG = 118,
> - LCL_JMP_OFFSET_AVSV_D2N_REBOOT_MSG = 119
> + LCL_JMP_OFFSET_AVSV_N2D_REG_SU_MSG = 8,
> + LCL_JMP_OFFSET_AVSV_N2D_REG_COMP_MSG = 12,
> + LCL_JMP_OFFSET_AVSV_N2D_OPERATION_STATE_MSG = 16,
> + LCL_JMP_OFFSET_AVSV_N2D_INFO_SU_SI_ASSIGN_MSG = 22,
> + LCL_JMP_OFFSET_AVSV_N2D_PG_TRACK_ACT_MSG = 31,
> + LCL_JMP_OFFSET_AVSV_N2D_OPERATION_REQUEST_MSG = 36,
> + LCL_JMP_OFFSET_AVSV_N2D_DATA_REQUEST_MSG = 40,
> + LCL_JMP_OFFSET_AVSV_N2D_SHUTDOWN_APP_SU_MSG = 43,
> + LCL_JMP_OFFSET_AVSV_N2D_VERIFY_ACK_NACK_MSG = 45,
> + LCL_JMP_OFFSET_AVSV_D2N_CLM_NODE_UP_MSG = 48,
> + LCL_JMP_OFFSET_AVSV_D2N_REG_SU_MSG = 52,
> + LCL_JMP_OFFSET_AVSV_D2N_REG_COMP_MSG = 57,
> + LCL_JMP_OFFSET_AVSV_D2N_INFO_SU_SI_ASSIGN_MSG = 62,
> + LCL_JMP_OFFSET_AVSV_D2N_PG_TRACK_ACT_RSP_MSG = 74,
> + LCL_JMP_OFFSET_AVSV_D2N_PG_UPD_MSG = 81,
> + LCL_JMP_OFFSET_AVSV_D2N_OPERATION_REQUEST_MSG = 85,
> + LCL_JMP_OFFSET_AVSV_D2N_PRESENCE_SU_MSG = 88,
> + LCL_JMP_OFFSET_AVSV_D2N_DATA_VERIFY_MSG = 92,
> + LCL_JMP_OFFSET_AVSV_D2N_DATA_ACK_MSG = 97,
> + LCL_JMP_OFFSET_AVSV_D2N_SHUTDOWN_APP_SU_MSG = 99,
> + LCL_JMP_OFFSET_AVSV_D2N_SET_LEDS_MSG = 101,
> + LCL_JMP_OFFSET_AVSV_N2D_COMP_VALID_MSG = 103,
> + LCL_JMP_OFFSET_AVSV_D2N_COMP_VALID_RESP_MSG = 111,
> + LCL_JMP_OFFSET_AVSV_D2N_ROLE_CHANGE_MSG = 115,
> + LCL_JMP_OFFSET_AVSV_D2N_ADMIN_OP_REQ_MSG = 118,
> + LCL_JMP_OFFSET_AVSV_D2N_HEARTBEAT_MSG = 122,
> + LCL_JMP_OFFSET_AVSV_D2N_REBOOT_MSG = 123,
> + LCL_JMP_OFFSET_AVSV_N2D_ND_SISU_STATE_INFO_MSG = 125,
> + LCL_JMP_OFFSET_AVSV_N2D_ND_CSICOMP_STATE_INFO_MSG = 131
> };
> AVSV_DND_MSG_TYPE type;
>
> @@ -496,6 +533,11 @@ int avsv_dnd_msg_test_type_fnc(NCSCONTEX
> return LCL_JMP_OFFSET_AVSV_D2N_HEARTBEAT_MSG;
> case AVSV_D2N_REBOOT_MSG:
> return LCL_JMP_OFFSET_AVSV_D2N_REBOOT_MSG;
> + case AVSV_N2D_ND_SISU_STATE_INFO_MSG:
> + return LCL_JMP_OFFSET_AVSV_N2D_ND_SISU_STATE_INFO_MSG ;
> + case AVSV_N2D_ND_CSICOMP_STATE_INFO_MSG:
> + return LCL_JMP_OFFSET_AVSV_N2D_ND_CSICOMP_STATE_INFO_MSG ;
> +
> default:
> break;
> }
> @@ -807,3 +849,218 @@ uint32_t avsv_edp_susi_asgn(EDU_HDL *hdl
> rc = m_NCS_EDU_RUN_RULES(hdl, edu_tkn, avsv_susi_asgn_rules,
> struct_ptr, ptr_data_len, buf_env, op, o_err);
> return rc;
> }
> +/*****************************************************************************
> +
> + PROCEDURE NAME: avsv_edp_sisu_state_info_msg
> +
> + DESCRIPTION: EDU program handler for "AVSV_SISU_STATE_MSG" data. This
> function
> + is invoked by EDU for performing encode/decode operation
> + on "AVSV_SISU_STATE_MSG" data.
> +
> + RETURNS: NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
> +
> +*****************************************************************************/
> +uint32_t avsv_edp_sisu_state_info_msg(EDU_HDL *hdl, EDU_TKN *edu_tkn,
> + NCSCONTEXT ptr, uint32_t *ptr_data_len, EDU_BUF_ENV
> *buf_env, EDP_OP_TYPE op, EDU_ERR *o_err)
> +{
> + uint32_t rc = NCSCC_RC_SUCCESS;
> + AVSV_SISU_STATE_MSG *struct_ptr = NULL, **d_ptr = NULL;
> +
> + EDU_INST_SET avsv_sisu_state_msg_rules[] = {
> + {EDU_START, avsv_edp_sisu_state_info_msg, EDQ_LNKLIST, 0, 0,
> + sizeof(AVSV_SISU_STATE_MSG), 0, NULL},
> +
> + {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0,
> + (long)&((AVSV_SISU_STATE_MSG *)0)->safSU, 0, NULL},
> + {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0,
> + (long)&((AVSV_SISU_STATE_MSG *)0)->safSI, 0, NULL},
> + {EDU_EXEC, m_NCS_EDP_SAAMFHASTATET, 0, 0, 0,
> + (long)&((AVSV_SISU_STATE_MSG *)0)->saAmfSISUHAState, 0, NULL},
> +
> + {EDU_TEST_LL_PTR, avsv_edp_sisu_state_info_msg, 0, 0, 0,
> + (long)&((AVSV_SISU_STATE_MSG *)0)->next, 0, NULL},
> + {EDU_END, 0, 0, 0, 0, 0, 0, NULL},
> + };
> +
> + if (op == EDP_OP_TYPE_ENC) {
> + struct_ptr = (AVSV_SISU_STATE_MSG *)ptr;
> + } else if (op == EDP_OP_TYPE_DEC) {
> + d_ptr = (AVSV_SISU_STATE_MSG **)ptr;
> + if (*d_ptr == NULL) {
> + *d_ptr = malloc(sizeof(AVSV_SISU_STATE_MSG));
> + if (*d_ptr == NULL) {
> + *o_err = EDU_ERR_MEM_FAIL;
> + return NCSCC_RC_FAILURE;
> + }
> + }
> + memset(*d_ptr, '\0', sizeof(AVSV_SISU_STATE_MSG));
> + struct_ptr = *d_ptr;
> + } else {
> + struct_ptr = ptr;
> + }
> + rc = m_NCS_EDU_RUN_RULES(hdl, edu_tkn, avsv_sisu_state_msg_rules,
> struct_ptr, ptr_data_len, buf_env, op, o_err);
> + return rc;
> +}
> +/*****************************************************************************
> +
> + PROCEDURE NAME: avsv_edp_su_state_info_msg
> +
> + DESCRIPTION: EDU program handler for "AVSV_SU_STATE_MSG" data. This
> function
> + is invoked by EDU for performing encode/decode operation
> + on "AVSV_SU_STATE_MSG" data.
> +
> + RETURNS: NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
> +
> +*****************************************************************************/
> +uint32_t avsv_edp_su_state_info_msg(EDU_HDL *hdl, EDU_TKN *edu_tkn,
> + NCSCONTEXT ptr, uint32_t *ptr_data_len, EDU_BUF_ENV
> *buf_env, EDP_OP_TYPE op, EDU_ERR *o_err)
> +{
> + uint32_t rc = NCSCC_RC_SUCCESS;
> + AVSV_SU_STATE_MSG *struct_ptr = NULL, **d_ptr = NULL;
> +
> + EDU_INST_SET avsv_su_state_msg_rules[] = {
> + {EDU_START, avsv_edp_su_state_info_msg, EDQ_LNKLIST, 0, 0,
> + sizeof(AVSV_SU_STATE_MSG), 0, NULL},
> +
> + {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0,
> + (long)&((AVSV_SU_STATE_MSG *)0)->safSU, 0, NULL},
> + {EDU_EXEC, ncs_edp_uns32, 0, 0, 0,
> + (long)&((AVSV_SU_STATE_MSG *)0)->su_restart_cnt, 0, NULL},
> + {EDU_EXEC, ncs_edp_uns32, 0, 0, 0,
> + (long)&((AVSV_SU_STATE_MSG *)0)->su_pres_state, 0, NULL},
> + {EDU_EXEC, ncs_edp_uns32, 0, 0, 0,
> + (long)&((AVSV_SU_STATE_MSG *)0)->su_oper_state, 0, NULL},
> +
> + {EDU_TEST_LL_PTR, avsv_edp_su_state_info_msg, 0, 0, 0,
> + (long)&((AVSV_SU_STATE_MSG *)0)->next, 0, NULL},
> + {EDU_END, 0, 0, 0, 0, 0, 0, NULL},
> + };
> +
> + if (op == EDP_OP_TYPE_ENC) {
> + struct_ptr = (AVSV_SU_STATE_MSG *)ptr;
> + } else if (op == EDP_OP_TYPE_DEC) {
> + d_ptr = (AVSV_SU_STATE_MSG **)ptr;
> + if (*d_ptr == NULL) {
> + *d_ptr = malloc(sizeof(AVSV_SU_STATE_MSG));
> + if (*d_ptr == NULL) {
> + *o_err = EDU_ERR_MEM_FAIL;
> + return NCSCC_RC_FAILURE;
> + }
> + }
> + memset(*d_ptr, '\0', sizeof(AVSV_SU_STATE_MSG));
> + struct_ptr = *d_ptr;
> + } else {
> + struct_ptr = ptr;
> + }
> + rc = m_NCS_EDU_RUN_RULES(hdl, edu_tkn, avsv_su_state_msg_rules,
> struct_ptr, ptr_data_len, buf_env, op, o_err);
> + return rc;
> +}
> +/*****************************************************************************
> +
> + PROCEDURE NAME: avsv_edp_csicomp_state_info_msg
> +
> + DESCRIPTION: EDU program handler for "AVSV_CSICOMP_STATE_MSG" data.
> This function
> + is invoked by EDU for performing encode/decode operation
> + on "AVSV_CSICOMP_STATE_MSG" data.
> +
> + RETURNS: NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
> +
> +*****************************************************************************/
> +uint32_t avsv_edp_csicomp_state_info_msg(EDU_HDL *hdl, EDU_TKN *edu_tkn,
> + NCSCONTEXT ptr, uint32_t *ptr_data_len, EDU_BUF_ENV
> *buf_env, EDP_OP_TYPE op, EDU_ERR *o_err)
> +{
> + uint32_t rc = NCSCC_RC_SUCCESS;
> + AVSV_CSICOMP_STATE_MSG *struct_ptr = NULL, **d_ptr = NULL;
> +
> + EDU_INST_SET avsv_csicomp_state_msg_rules[] = {
> + {EDU_START, avsv_edp_csicomp_state_info_msg, EDQ_LNKLIST, 0, 0,
> + sizeof(AVSV_CSICOMP_STATE_MSG), 0, NULL},
> +
> + {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0,
> + (long)&((AVSV_CSICOMP_STATE_MSG *)0)->safComp, 0, NULL},
> + {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0,
> + (long)&((AVSV_CSICOMP_STATE_MSG *)0)->safCSI, 0, NULL},
> + {EDU_EXEC, m_NCS_EDP_SAAMFHASTATET, 0, 0, 0,
> + (long)&((AVSV_CSICOMP_STATE_MSG *)0)->saAmfCSICompHAState, 0,
> NULL},
> +
> + {EDU_TEST_LL_PTR, avsv_edp_csicomp_state_info_msg, 0, 0, 0,
> + (long)&((AVSV_CSICOMP_STATE_MSG *)0)->next, 0, NULL},
> + {EDU_END, 0, 0, 0, 0, 0, 0, NULL},
> + };
> +
> + if (op == EDP_OP_TYPE_ENC) {
> + struct_ptr = (AVSV_CSICOMP_STATE_MSG *)ptr;
> + } else if (op == EDP_OP_TYPE_DEC) {
> + d_ptr = (AVSV_CSICOMP_STATE_MSG **)ptr;
> + if (*d_ptr == NULL) {
> + *d_ptr = malloc(sizeof(AVSV_CSICOMP_STATE_MSG));
> + if (*d_ptr == NULL) {
> + *o_err = EDU_ERR_MEM_FAIL;
> + return NCSCC_RC_FAILURE;
> + }
> + }
> + memset(*d_ptr, '\0', sizeof(AVSV_CSICOMP_STATE_MSG));
> + struct_ptr = *d_ptr;
> + } else {
> + struct_ptr = ptr;
> + }
> + rc = m_NCS_EDU_RUN_RULES(hdl, edu_tkn, avsv_csicomp_state_msg_rules,
> struct_ptr, ptr_data_len, buf_env, op, o_err);
> + return rc;
> +
> +}
> +/*****************************************************************************
> +
> + PROCEDURE NAME: avsv_edp_comp_state_info_msg
> +
> + DESCRIPTION: EDU program handler for "AVSV_COMP_STATE_MSG" data. This
> function
> + is invoked by EDU for performing encode/decode operation
> + on "AVSV_COMP_STATE_MSG" data.
> +
> + RETURNS: NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
> +
> +*****************************************************************************/
> +uint32_t avsv_edp_comp_state_info_msg(EDU_HDL *hdl, EDU_TKN *edu_tkn,
> + NCSCONTEXT ptr, uint32_t *ptr_data_len, EDU_BUF_ENV
> *buf_env, EDP_OP_TYPE op, EDU_ERR *o_err)
> +{
> + uint32_t rc = NCSCC_RC_SUCCESS;
> + AVSV_COMP_STATE_MSG *struct_ptr = NULL, **d_ptr = NULL;
> +
> + EDU_INST_SET avsv_comp_state_msg_rules[] = {
> + {EDU_START, avsv_edp_comp_state_info_msg, EDQ_LNKLIST, 0, 0,
> + sizeof(AVSV_COMP_STATE_MSG), 0, NULL},
> +
> + {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0,
> + (long)&((AVSV_COMP_STATE_MSG *)0)->safComp, 0, NULL},
> + {EDU_EXEC, ncs_edp_uns32, 0, 0, 0,
> + (long)&((AVSV_COMP_STATE_MSG *)0)->comp_restart_cnt, 0, NULL},
> + {EDU_EXEC, ncs_edp_uns32, 0, 0, 0,
> + (long)&((AVSV_COMP_STATE_MSG *)0)->comp_pres_state, 0, NULL},
> + {EDU_EXEC, ncs_edp_uns32, 0, 0, 0,
> + (long)&((AVSV_COMP_STATE_MSG *)0)->comp_oper_state, 0, NULL},
> +
> + {EDU_TEST_LL_PTR, avsv_edp_comp_state_info_msg, 0, 0, 0,
> + (long)&((AVSV_COMP_STATE_MSG *)0)->next, 0, NULL},
> + {EDU_END, 0, 0, 0, 0, 0, 0, NULL},
> + };
> +
> + if (op == EDP_OP_TYPE_ENC) {
> + struct_ptr = (AVSV_COMP_STATE_MSG *)ptr;
> + } else if (op == EDP_OP_TYPE_DEC) {
> + d_ptr = (AVSV_COMP_STATE_MSG **)ptr;
> + if (*d_ptr == NULL) {
> + *d_ptr = malloc(sizeof(AVSV_COMP_STATE_MSG));
> + if (*d_ptr == NULL) {
> + *o_err = EDU_ERR_MEM_FAIL;
> + return NCSCC_RC_FAILURE;
> + }
> + }
> + memset(*d_ptr, '\0', sizeof(AVSV_COMP_STATE_MSG));
> + struct_ptr = *d_ptr;
> + } else {
> + struct_ptr = ptr;
> + }
> + rc = m_NCS_EDU_RUN_RULES(hdl, edu_tkn, avsv_comp_state_msg_rules,
> struct_ptr, ptr_data_len, buf_env, op, o_err);
> + return rc;
> +
> +}
> +
> diff --git a/osaf/libs/common/amf/d2nmsg.c b/osaf/libs/common/amf/d2nmsg.c
> --- a/osaf/libs/common/amf/d2nmsg.c
> +++ b/osaf/libs/common/amf/d2nmsg.c
> @@ -250,6 +250,127 @@ static uint32_t cpy_d2n_pg_msg(AVSV_DND_
> return NCSCC_RC_SUCCESS;
> }
>
> +/*****************************************************************************
> + * Function: cpy_n2d_nd_sisu_state_info
> + *
> + * Purpose: This function makes a copy of the n2d SI SU message contents.
> + *
> + * Input: dst - Pointer to the SU SI message to be copied to.
> + * src - Pointer to the SU SI message to be copied.
> + *
> + * Returns: NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
> + *
> + * NOTES: It also allocates and copies the array of attributes, which are
> separately
> + * allocated and pointed to by AVSV_SISU_STATE_MSG structure.
> + *
> + **************************************************************************/
> +static uint32_t cpy_n2d_nd_sisu_state_info(AVSV_DND_MSG *dst, const
> AVSV_DND_MSG *src)
> +{
> + const AVSV_SISU_STATE_MSG *src_sisu;
> + AVSV_SISU_STATE_MSG *dst_sisu;
> +
> + const AVSV_SU_STATE_MSG *src_su;
> + AVSV_SU_STATE_MSG *dst_su;
> +
> + memset(dst, '\0', sizeof(AVSV_DND_MSG));
> +
> + memcpy(dst, src, sizeof(AVSV_DND_MSG));
> + dst->msg_info.n2d_nd_sisu_state_info.sisu_list = NULL;
> + dst->msg_info.n2d_nd_sisu_state_info.su_list = NULL;
> +
> + // copy SISU stuff
> + src_sisu = src->msg_info.n2d_nd_sisu_state_info.sisu_list;
> + while (src_sisu != NULL) {
> + dst_sisu = malloc(sizeof(AVSV_SISU_STATE_MSG));
> + osafassert(dst_sisu);
> +
> + memcpy(dst_sisu, src_sisu, sizeof(AVSV_SISU_STATE_MSG));
> + // insert at the start
> + dst_sisu->next = dst->msg_info.n2d_nd_sisu_state_info.sisu_list;
> + dst->msg_info.n2d_nd_sisu_state_info.sisu_list = dst_sisu;
> +
> + // now go to the next sisu info in source
> + src_sisu = src_sisu->next;
> + }
> +
> + // copy SU stuff
> + src_su = src->msg_info.n2d_nd_sisu_state_info.su_list;
> + while (src_su != NULL) {
> + dst_su = malloc(sizeof(AVSV_SU_STATE_MSG));
> + osafassert(dst_su);
> +
> + memcpy(dst_su, src_su, sizeof(AVSV_SU_STATE_MSG));
> + // insert at the start
> + dst_su->next = dst->msg_info.n2d_nd_sisu_state_info.su_list;
> + dst->msg_info.n2d_nd_sisu_state_info.su_list = dst_su;
> +
> + // now go to the next su info in source
> + src_su = src_su->next;
> + }
> +
> + return NCSCC_RC_SUCCESS;
> +}
> +/*****************************************************************************
> + * Function: cpy_n2d_nd_csicomp_state_info
> + *
> + * Purpose: This function makes a copy of the n2d csi comp message contents.
> + *
> + * Input: dst - Pointer to the COMPCSI message to be copied to.
> + * src - Pointer to the COMPCSI message to be copied.
> + *
> + * Returns: NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
> + *
> + * NOTES: It also allocates and copies the array of attributes, which are
> separately
> + * allocated and pointed to by AVSV_CSICOMP_STATE_MSG structure.
> + *
> + **************************************************************************/
> +static uint32_t cpy_n2d_nd_csicomp_state_info(AVSV_DND_MSG *dst, const
> AVSV_DND_MSG *src)
> +{
> + const AVSV_CSICOMP_STATE_MSG *src_csicomp;
> + AVSV_CSICOMP_STATE_MSG *dst_csicomp;
> +
> + const AVSV_COMP_STATE_MSG *src_comp;
> + AVSV_COMP_STATE_MSG *dst_comp;
> +
> + memset(dst, '\0', sizeof(AVSV_DND_MSG));
> +
> + memcpy(dst, src, sizeof(AVSV_DND_MSG));
> + dst->msg_info.n2d_nd_csicomp_state_info.csicomp_list = NULL;
> + dst->msg_info.n2d_nd_csicomp_state_info.comp_list = NULL;
> +
> + // CSICOMP
> + src_csicomp = src->msg_info.n2d_nd_csicomp_state_info.csicomp_list;
> + while (src_csicomp != NULL) {
> + dst_csicomp = malloc(sizeof(AVSV_CSICOMP_STATE_MSG));
> + osafassert(dst_csicomp);
> +
> + memcpy(dst_csicomp, src_csicomp,
> sizeof(AVSV_CSICOMP_STATE_MSG));
> + // insert at the start
> + dst_csicomp->next =
> dst->msg_info.n2d_nd_csicomp_state_info.csicomp_list;
> + dst->msg_info.n2d_nd_csicomp_state_info.csicomp_list =
> dst_csicomp;
> +
> + // now go to the next csicomp info in source
> + src_csicomp = src_csicomp->next;
> + }
> +
> + // COMP
> + src_comp = src->msg_info.n2d_nd_csicomp_state_info.comp_list;
> + while (src_comp != NULL) {
> + dst_comp = malloc(sizeof(AVSV_COMP_STATE_MSG));
> + osafassert(dst_comp);
> +
> + memcpy(dst_comp, src_comp, sizeof(AVSV_COMP_STATE_MSG));
> + // insert at the start
> + dst_comp->next =
> dst->msg_info.n2d_nd_csicomp_state_info.comp_list;
> + dst->msg_info.n2d_nd_csicomp_state_info.comp_list = dst_comp;
> +
> + // now go to the next comp info in source
> + src_comp = src_comp->next;
> + }
> +
> + return NCSCC_RC_SUCCESS;
> +}
> +
>
> /****************************************************************************
> Name : avsv_dnd_msg_free
>
> @@ -283,6 +404,12 @@ void avsv_dnd_msg_free(AVSV_DND_MSG *msg
> case AVSV_D2N_PG_TRACK_ACT_RSP_MSG:
> free_d2n_pg_msg_info(msg);
> break;
> + case AVSV_N2D_ND_SISU_STATE_INFO_MSG:
> + avsv_free_n2d_nd_sisu_state_info(msg);
> + break;
> + case AVSV_N2D_ND_CSICOMP_STATE_INFO_MSG:
> + avsv_free_n2d_nd_csicomp_state_info(msg);
> + break;
> default:
> break;
> }
> @@ -323,6 +450,10 @@ uint32_t avsv_dnd_msg_copy(AVSV_DND_MSG
> return cpy_d2n_susi_msg(dmsg, smsg);
> case AVSV_D2N_PG_TRACK_ACT_RSP_MSG:
> return cpy_d2n_pg_msg(dmsg, smsg);
> + case AVSV_N2D_ND_SISU_STATE_INFO_MSG:
> + return cpy_n2d_nd_sisu_state_info(dmsg, smsg);
> + case AVSV_N2D_ND_CSICOMP_STATE_INFO_MSG:
> + return cpy_n2d_nd_csicomp_state_info(dmsg, smsg);
> default:
> /* copy only the contents */
> memcpy(dmsg, smsg, sizeof(AVSV_DND_MSG));
> @@ -331,3 +462,138 @@ uint32_t avsv_dnd_msg_copy(AVSV_DND_MSG
>
> return NCSCC_RC_SUCCESS;
> }
> +/*****************************************************************************
> + * Function: avsv_free_n2d_nd_csicomp_state_info
> + *
> + * Purpose: This function frees the n2d csi comp message contents.
> + *
> + * Input: msg - Pointer to the message contents to be freed.
> + *
> + * Returns: None
> + *
> + * NOTES: None
> + *
> + *
> + **************************************************************************/
> +void avsv_free_n2d_nd_csicomp_state_info(AVSV_DND_MSG *msg)
> +{
> + TRACE_ENTER();
> +
> + AVSV_N2D_ND_CSICOMP_STATE_MSG_INFO *info = NULL;
> + AVSV_CSICOMP_STATE_MSG *csicomp_ptr = NULL;
> + AVSV_CSICOMP_STATE_MSG *next_csicomp_ptr = NULL;
> +
> + AVSV_COMP_STATE_MSG *comp_ptr = NULL;
> + AVSV_COMP_STATE_MSG *next_comp_ptr = NULL;
> +
> + if (msg == NULL)
> + goto done;
> +
> + osafassert(msg->msg_type == AVSV_N2D_ND_CSICOMP_STATE_INFO_MSG);
> +
> + info = &msg->msg_info.n2d_nd_csicomp_state_info;
> + osafassert(info);
> +
> + // free CSICOMP stuff
> + csicomp_ptr = info->csicomp_list;
> +
> + TRACE("%u CSICOMP records to free", info->num_csicomp);
> +
> + while (csicomp_ptr != NULL) {
> + TRACE("freeing %s:%s", (char*)csicomp_ptr->safCSI.value,
> (char*)csicomp_ptr->safComp.value);
> + next_csicomp_ptr = csicomp_ptr->next;
> + free(csicomp_ptr);
> + csicomp_ptr = next_csicomp_ptr;
> + }
> +
> + info->num_csicomp = 0;
> + info->csicomp_list = NULL;
> +
> + // free COMP stuff
> + comp_ptr = info->comp_list;
> +
> + TRACE("%u COMP records to free", info->num_comp);
> +
> + while (comp_ptr != NULL) {
> + TRACE("freeing %s", (char*)comp_ptr->safComp.value);
> + next_comp_ptr = comp_ptr->next;
> + free(comp_ptr);
> + comp_ptr = next_comp_ptr;
> + }
> +
> + info->num_comp = 0;
> + info->comp_list = NULL;
> +
> +done:
> + TRACE_LEAVE();
> +
> +}
> +
> +/*****************************************************************************
> + * Function: avsv_free_n2d_nd_sisu_state_info
> + *
> + * Purpose: This function frees the n2d si su message contents.
> + *
> + * Input: msg - Pointer to the message contents to be freed.
> + *
> + * Returns: None
> + *
> + * NOTES: None
> + *
> + *
> + **************************************************************************/
> +void avsv_free_n2d_nd_sisu_state_info(AVSV_DND_MSG *msg)
> +{
> + TRACE_ENTER();
> +
> + AVSV_N2D_ND_SISU_STATE_MSG_INFO *info =
> &msg->msg_info.n2d_nd_sisu_state_info;
> +
> + AVSV_SISU_STATE_MSG *sisu_ptr = info->sisu_list;
> + AVSV_SISU_STATE_MSG *next_sisu_ptr = NULL;
> +
> + AVSV_SU_STATE_MSG *su_ptr = info->su_list;
> + AVSV_SU_STATE_MSG *next_su_ptr = NULL;
> +
> + if (msg == NULL)
> + goto done;
> +
> + osafassert(msg->msg_type == AVSV_N2D_ND_SISU_STATE_INFO_MSG);
> +
> + info = &msg->msg_info.n2d_nd_sisu_state_info;
> + osafassert(info);
> +
> + // free SISU stuff
> + sisu_ptr = info->sisu_list;
> +
> + TRACE("%u SISU records to free", info->num_sisu);
> +
> + while (sisu_ptr != NULL) {
> + TRACE("freeing %s:%s", (char*)sisu_ptr->safSI.value,
> (char*)sisu_ptr->safSU.value);
> + next_sisu_ptr = sisu_ptr->next;
> + free(sisu_ptr);
> + sisu_ptr = next_sisu_ptr;
> + }
> +
> + info->num_sisu = 0;
> + info->sisu_list = NULL;
> +
> + // free SU stuff
> + su_ptr = info->su_list;
> +
> + TRACE("%u SU records to free", info->num_su);
> +
> + while (su_ptr != NULL) {
> + TRACE("freeing %s", (char*)su_ptr->safSU.value);
> + next_su_ptr = su_ptr->next;
> + free(su_ptr);
> + su_ptr = next_su_ptr;
> + }
> +
> + info->num_su = 0;
> + info->su_list = NULL;
> +
> +done:
> + TRACE_LEAVE();
> +}
> +
> +
> diff --git a/osaf/libs/common/amf/include/Makefile.am
> b/osaf/libs/common/amf/include/Makefile.am
> --- a/osaf/libs/common/amf/include/Makefile.am
> +++ b/osaf/libs/common/amf/include/Makefile.am
> @@ -27,5 +27,6 @@ noinst_HEADERS = \
> amf.h \
> amf_n2avaedu.h \
> amf_n2avamsg.h \
> + amf_si_assign.h \
> amf_util.h \
> amf_nd2ndmsg.h
> diff --git a/osaf/libs/common/amf/include/amf_d2nedu.h
> b/osaf/libs/common/amf/include/amf_d2nedu.h
> --- a/osaf/libs/common/amf/include/amf_d2nedu.h
> +++ b/osaf/libs/common/amf/include/amf_d2nedu.h
> @@ -60,6 +60,22 @@ uint32_t avsv_edp_susi_asgn(EDU_HDL *hdl
> NCSCONTEXT ptr, uint32_t *ptr_data_len,
> EDU_BUF_ENV *buf_env, EDP_OP_TYPE op, EDU_ERR
> *o_err);
>
> +uint32_t avsv_edp_sisu_state_info_msg(EDU_HDL *hdl, EDU_TKN *edu_tkn,
> + NCSCONTEXT ptr, uint32_t *ptr_data_len,
> + EDU_BUF_ENV *buf_env, EDP_OP_TYPE op,
> EDU_ERR *o_err);
> +
> +uint32_t avsv_edp_su_state_info_msg(EDU_HDL *hdl, EDU_TKN *edu_tkn,
> + NCSCONTEXT ptr, uint32_t *ptr_data_len,
> + EDU_BUF_ENV *buf_env, EDP_OP_TYPE op,
> EDU_ERR *o_err);
> +
> +uint32_t avsv_edp_csicomp_state_info_msg(EDU_HDL *hdl, EDU_TKN *edu_tkn,
> + NCSCONTEXT ptr, uint32_t *ptr_data_len,
> + EDU_BUF_ENV *buf_env, EDP_OP_TYPE op,
> EDU_ERR *o_err);
> +
> +uint32_t avsv_edp_comp_state_info_msg(EDU_HDL *hdl, EDU_TKN *edu_tkn,
> + NCSCONTEXT ptr, uint32_t *ptr_data_len,
> + EDU_BUF_ENV *buf_env, EDP_OP_TYPE op,
> EDU_ERR *o_err);
> +
> int avsv_dnd_msg_test_type_fnc(NCSCONTEXT arg);
>
> #ifdef __cplusplus
> diff --git a/osaf/libs/common/amf/include/amf_d2nmsg.h
> b/osaf/libs/common/amf/include/amf_d2nmsg.h
> --- a/osaf/libs/common/amf/include/amf_d2nmsg.h
> +++ b/osaf/libs/common/amf/include/amf_d2nmsg.h
> @@ -49,6 +49,7 @@ extern "C" {
> #define AVSV_AVD_AVND_MSG_FMT_VER_3 3
> #define AVSV_AVD_AVND_MSG_FMT_VER_4 4
> #define AVSV_AVD_AVND_MSG_FMT_VER_5 5
> +#define AVSV_AVD_AVND_MSG_FMT_VER_6 6
>
> /* Internode/External Components Validation result */
> typedef enum {
> @@ -89,6 +90,10 @@ typedef enum {
> AVSV_D2N_ADMIN_OP_REQ_MSG,
> AVSV_D2N_HEARTBEAT_MSG,
> AVSV_D2N_REBOOT_MSG,
> + AVSV_D2D_CHANGE_ROLE_REQ, // to maintain backwards compatibility
> + AVSV_D2D_CHANGE_ROLE_RSP, // to maintain backwards compatibility
> + AVSV_N2D_ND_SISU_STATE_INFO_MSG,
> + AVSV_N2D_ND_CSICOMP_STATE_INFO_MSG,
> AVSV_DND_MSG_MAX
> } AVSV_DND_MSG_TYPE;
>
> @@ -337,8 +342,10 @@ typedef enum {
>
> typedef struct avsv_n2d_node_up_msg_info_tag {
> uint32_t msg_id;
[HansN] isn't leds_set a bool?
> + uint32_t leds_set;
> SaClmNodeIdT node_id;
> MDS_DEST adest_address;
> + SaNameT node_name;
> } AVSV_N2D_NODE_UP_MSG_INFO;
>
> typedef struct avsv_n2d_comp_validation_msg_info_tag {
> @@ -427,6 +434,54 @@ typedef struct avsv_n2d_verify_ack_nack_
> bool ack;
> } AVSV_N2D_VERIFY_ACK_NACK_MSG_INFO;
>
> +typedef struct avsv_sisu_state_msg_tag {
> + SaNameT safSU;
> + SaNameT safSI;
> + SaAmfHAStateT saAmfSISUHAState;
> + struct avsv_sisu_state_msg_tag *next;
> +} AVSV_SISU_STATE_MSG;
> +
> +typedef struct avsv_su_state_msg_tag {
> + SaNameT safSU;
> + uint32_t su_restart_cnt;
> + uint32_t su_pres_state;
> + uint32_t su_oper_state;
> + struct avsv_su_state_msg_tag *next;
> +} AVSV_SU_STATE_MSG;
> +
> +typedef struct avsv_n2d_nd_sisu_state_msg_info_tag {
> + uint32_t msg_id;
> + SaClmNodeIdT node_id;
> + uint32_t num_sisu;
> + AVSV_SISU_STATE_MSG *sisu_list;
> + uint32_t num_su;
> + AVSV_SU_STATE_MSG *su_list;
> +} AVSV_N2D_ND_SISU_STATE_MSG_INFO;
> +
> +typedef struct avsv_csicomp_state_msg_tag {
> + SaNameT safComp;
> + SaNameT safCSI;
> + SaAmfHAStateT saAmfCSICompHAState;
> + struct avsv_csicomp_state_msg_tag *next;
> +} AVSV_CSICOMP_STATE_MSG;
> +
> +typedef struct avsv_comp_state_msg_tag {
> + SaNameT safComp;
> + uint32_t comp_restart_cnt;
> + uint32_t comp_pres_state;
> + uint32_t comp_oper_state;
> + struct avsv_comp_state_msg_tag *next;
> +} AVSV_COMP_STATE_MSG;
> +
> +typedef struct avsv_n2d_nd_csicomp_state_msg_info_tag {
> + uint32_t msg_id;
> + SaClmNodeIdT node_id;
> + uint32_t num_csicomp;
> + AVSV_CSICOMP_STATE_MSG *csicomp_list;
> + uint32_t num_comp;
> + AVSV_COMP_STATE_MSG *comp_list;
> +} AVSV_N2D_ND_CSICOMP_STATE_MSG_INFO;
> +
> typedef struct avsv_d2n_node_up_msg_info_tag {
> SaClmNodeIdT node_id;
> AVSV_AVND_CARD node_type;
> @@ -575,6 +630,8 @@ typedef struct avsv_dnd_msg {
> AVSV_N2D_VERIFY_ACK_NACK_MSG_INFO n2d_ack_nack_info;
> AVSV_N2D_SHUTDOWN_APP_SU_MSG_INFO n2d_shutdown_app_su;
> AVSV_N2D_COMP_VALIDATION_INFO n2d_comp_valid_info;
> + AVSV_N2D_ND_SISU_STATE_MSG_INFO n2d_nd_sisu_state_info;
> + AVSV_N2D_ND_CSICOMP_STATE_MSG_INFO n2d_nd_csicomp_state_info;
> AVSV_D2N_NODE_UP_MSG_INFO d2n_node_up;
> AVSV_D2N_REG_SU_MSG_INFO d2n_reg_su;
> AVSV_D2N_REG_COMP_MSG_INFO d2n_reg_comp;
> @@ -622,6 +679,10 @@ typedef uint32_t (*AVSV_COPY_DND_MSG) (A
> void avsv_dnd_msg_free(AVSV_DND_MSG *);
> uint32_t avsv_dnd_msg_copy(AVSV_DND_MSG *, AVSV_DND_MSG *);
>
> +void avsv_free_n2d_nd_csicomp_state_info(AVSV_DND_MSG *msg);
> +void avsv_free_n2d_nd_sisu_state_info(AVSV_DND_MSG *msg);
> +
> +
> #ifdef __cplusplus
> }
> #endif
> diff --git a/osaf/libs/common/amf/include/amf_defs.h
> b/osaf/libs/common/amf/include/amf_defs.h
> --- a/osaf/libs/common/amf/include/amf_defs.h
> +++ b/osaf/libs/common/amf/include/amf_defs.h
> @@ -60,6 +60,9 @@
> /* Default Heart beat duration */
> #define AVSV_DEF_HB_DURATION (60 * SA_TIME_ONE_SECOND)
>
> +/* Default sync node duration */
> +#define AVSV_DEF_NODE_SYNC_PERIOD (10 * SA_TIME_ONE_SECOND)
> +
> typedef enum {
> AVSV_COMP_TYPE_INVALID,
> AVSV_COMP_TYPE_SA_AWARE,
> diff --git a/osaf/libs/common/amf/include/amf_si_assign.h
> b/osaf/libs/common/amf/include/amf_si_assign.h
> new file mode 100644
> --- /dev/null
> +++ b/osaf/libs/common/amf/include/amf_si_assign.h
> @@ -0,0 +1,49 @@
> +/* -*- OpenSAF -*-
> + *
> + * (C) Copyright 2016 The OpenSAF Foundation
> + *
> + * This program is distributed in the hope that it will be useful, but
> + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
> + * or FITNESS FOR A PARTICULAR PURPOSE. This file and program are licensed
> + * under the GNU Lesser General Public License Version 2.1, February 1999.
> + * The complete license can be accessed from the following location:
> + * http://opensource.org/licenses/lgpl-license.php
> + * See the Copying file included with the OpenSAF distribution for full
> + * licensing terms.
> + *
> + * Author(s): Ericsson AB
> + *
> + */
> +
> +/*****************************************************************************
> +
> + DESCRIPTION:
> +
> +
> +******************************************************************************
> +*/
> +
> +#ifndef AMF_SI_ASSIGN_H
> +#define AMF_SI_ASSIGN_H
> +
> +#include <string>
> +#include <saAmf.h>
> +
> +struct SaAmfSIAssignment {
> + public:
> + SaNameT su;
> + SaNameT si;
> + SaAmfHAStateT saAmfSISUHAState;
> + uint32_t saAmfSISUHAReadinessState;
> +};
> +
> +struct SaAmfCSIAssignment {
> + public:
> + SaNameT csi;
> + SaNameT comp;
> + SaAmfHAStateT saAmfCSICompHAState;
> + uint32_t saAmfCSICompHAReadinessState;
> +};
> +
> +#endif /* AMF_SI_ASSIGN_H */
> +
------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel