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_ncs_bool, 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; + bool 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 Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel