/****************************************************************************\ * Function: avnd_ckpt_for_ext * * Purpose: Send checkpoint data to standby using the supplied send type. * * Input: cb - AVND control block pointer. * reo_hdl - object handle. * reo_type - object type. * * Returns: NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE. * * NOTES: * * \**************************************************************************/ uns32 avnd_ckpt_for_ext(AVND_CB *cb, MBCSV_REO_HDL reo_hdl, uns32 reo_type) { uns8 *reo_hdl_ptr = NULL; uns32 rc = NCSCC_RC_FAILURE; reo_hdl_ptr = NCS_INT64_TO_PTR_CAST(reo_hdl); if (NULL == reo_hdl_ptr) return rc; switch (reo_type) { case AVND_CKPT_HLT_CONFIG: case AVND_CKPT_HC_PERIOD: case AVND_CKPT_HC_MAX_DUR: { if (TRUE == ((AVND_HC *)reo_hdl_ptr)->is_ext) rc = NCSCC_RC_SUCCESS; } break; case AVND_CKPT_SU_CONFIG: case AVND_CKPT_SU_FLAG_CHANGE: case AVND_CKPT_SU_ERR_ESC_LEVEL: case AVND_CKPT_SU_COMP_RESTART_PROB: case AVND_CKPT_SU_COMP_RESTART_MAX: case AVND_CKPT_SU_RESTART_PROB: case AVND_CKPT_SU_RESTART_MAX: case AVND_CKPT_SU_COMP_RESTART_CNT: case AVND_CKPT_SU_RESTART_CNT: case AVND_CKPT_SU_ERR_ESC_TMR: case AVND_CKPT_SU_OPER_STATE: case AVND_CKPT_SU_PRES_STATE: { if (TRUE == ((AVND_SU *)reo_hdl_ptr)->su_is_external) rc = NCSCC_RC_SUCCESS; } break; case AVND_CKPT_COMP_PROXY_PROXIED_ADD: case AVND_CKPT_COMP_PROXY_PROXIED_DEL: case AVND_CKPT_COMP_CONFIG: { if (m_AVND_COMP_TYPE_IS_INTER_NODE(((AVND_COMP *)reo_hdl_ptr))) { if (m_AVND_PROXY_IS_FOR_EXT_COMP(((AVND_COMP *)reo_hdl_ptr))) rc = NCSCC_RC_SUCCESS; } else if (TRUE == ((AVND_COMP *)reo_hdl_ptr)->su->su_is_external) rc = NCSCC_RC_SUCCESS; } break; case AVND_CKPT_COMP_FLAG_CHANGE: case AVND_CKPT_COMP_REG_HDL: case AVND_CKPT_COMP_REG_DEST: case AVND_CKPT_COMP_OPER_STATE: case AVND_CKPT_COMP_PRES_STATE: case AVND_CKPT_COMP_TERM_CBK_TIMEOUT: case AVND_CKPT_COMP_CSI_SET_CBK_TIMEOUT: case AVND_CKPT_COMP_QUIES_CMPLT_CBK_TIMEOUT: case AVND_CKPT_COMP_CSI_RMV_CBK_TIMEOUT: case AVND_CKPT_COMP_PXIED_INST_CBK_TIMEOUT: case AVND_CKPT_COMP_PXIED_CLEAN_CBK_TIMEOUT: case AVND_CKPT_COMP_ERR_INFO: case AVND_CKPT_COMP_DEFAULT_RECVR: case AVND_CKPT_COMP_PEND_EVT: case AVND_CKPT_COMP_ORPH_TMR: case AVND_CKPT_COMP_NODE_ID: case AVND_CKPT_COMP_TYPE: case AVND_CKPT_COMP_MDS_CTXT: case AVND_CKPT_COMP_REG_RESP_PENDING: case AVND_CKPT_COMP_INST_CMD: case AVND_CKPT_COMP_TERM_CMD: case AVND_CKPT_COMP_INST_TIMEOUT: case AVND_CKPT_COMP_TERM_TIMEOUT: case AVND_CKPT_COMP_INST_RETRY_MAX: case AVND_CKPT_COMP_INST_RETRY_CNT: case AVND_CKPT_COMP_EXEC_CMD: case AVND_CKPT_COMP_CMD_EXEC_CTXT: case AVND_CKPT_COMP_INST_CMD_TS: case AVND_CKPT_COMP_CLC_REG_TMR: case AVND_CKPT_COMP_INST_CODE_RCVD: { if (m_AVND_COMP_TYPE_IS_INTER_NODE(((AVND_COMP *)reo_hdl_ptr))) { if (m_AVND_PROXY_IS_FOR_EXT_COMP(((AVND_COMP *)reo_hdl_ptr))) rc = NCSCC_RC_SUCCESS; } else if (TRUE == ((AVND_COMP *)reo_hdl_ptr)->su->su_is_external) rc = NCSCC_RC_SUCCESS; } break; case AVND_CKPT_SU_SI_REC: case AVND_CKPT_SU_SI_REC_CURR_STATE: case AVND_CKPT_SU_SI_REC_PRV_STATE: case AVND_CKPT_SU_SI_REC_CURR_ASSIGN_STATE: case AVND_CKPT_SU_SI_REC_PRV_ASSIGN_STATE: { if (TRUE == ((AVND_SU_SI_REC *)reo_hdl_ptr)->su->su_is_external) rc = NCSCC_RC_SUCCESS; } break; case AVND_CKPT_CSI_REC: case AVND_CKPT_COMP_CSI_ACT_COMP_NAME: case AVND_CKPT_COMP_CSI_TRANS_DESC: case AVND_CKPT_COMP_CSI_STANDBY_RANK: case AVND_CKPT_COMP_CSI_CURR_ASSIGN_STATE: case AVND_CKPT_COMP_CSI_PRV_ASSIGN_STATE: { if (TRUE == ((AVND_COMP_CSI_REC *)reo_hdl_ptr)->comp->su->su_is_external) rc = NCSCC_RC_SUCCESS; } break; case AVND_CKPT_COMP_HLT_REC: case AVND_CKPT_COMP_HC_REC_STATUS: case AVND_CKPT_COMP_HC_REC_TMR: { if (TRUE == ((AVND_COMP_HC_REC *)reo_hdl_ptr)->comp->su->su_is_external) rc = NCSCC_RC_SUCCESS; } break; case AVND_CKPT_COMP_CBK_REC: { if (m_AVND_COMP_TYPE_IS_INTER_NODE(((AVND_COMP_CBK *)reo_hdl_ptr)->comp)) { if (m_AVND_PROXY_IS_FOR_EXT_COMP(((AVND_COMP_CBK *)reo_hdl_ptr)->comp)) rc = NCSCC_RC_SUCCESS; } else if (TRUE == ((AVND_COMP_CBK *)reo_hdl_ptr)->comp->su->su_is_external) rc = NCSCC_RC_SUCCESS; } break; case AVND_CKPT_COMP_CBK_REC_AMF_HDL: case AVND_CKPT_COMP_CBK_REC_MDS_DEST: case AVND_CKPT_COMP_CBK_REC_TMR: case AVND_CKPT_COMP_CBK_REC_TIMEOUT: { if (TRUE == ((AVND_COMP_CBK *)reo_hdl_ptr)->comp->su->su_is_external) rc = NCSCC_RC_SUCCESS; } break; case AVND_CKPT_SIQ_REC: /* For AVND_SU_SIQ_REC data structure, we don't have anything to check whether it is a part of an external or internal component. So, while sending ADD/RMV async update for AVND_CKPT_SIQ_REC, validate before sending. */ rc = NCSCC_RC_SUCCESS; break; default: break; } return rc; }
/******************************************************************************************* * Name : glsv_gld_mbcsv_enc_async_update * * Description : To encode the data and to send it to Standby at the time of Async Update * Arguments : NCS_MBCSV_CB_ARG - MBCSv callback Argument * * Return Values : Success / Error * Notes : from io_reo_type - the event is determined and based on the event we encode the MBCSv_MSG This is called at the active side *******************************************************************************************/ static uint32_t glsv_gld_mbcsv_enc_async_update(GLSV_GLD_CB *gld_cb, NCS_MBCSV_CB_ARG *arg) { GLSV_GLD_A2S_CKPT_EVT *a2s_msg; uint32_t rc = NCSCC_RC_SUCCESS; EDU_ERR ederror = 0; uint8_t *gld_type_ptr = NULL; TRACE_ENTER(); /* Increment the async update count gld_cb->gld_async_cnt */ gld_cb->gld_async_cnt++; gld_type_ptr = ncs_enc_reserve_space(&arg->info.encode.io_uba, sizeof(uint8_t)); if (gld_type_ptr == NULL) { LOG_CR("GLD enc reserve space failed:Error %s", strerror(errno)); assert(0); } ncs_enc_claim_space(&arg->info.encode.io_uba, sizeof(uint8_t)); ncs_encode_8bit(&gld_type_ptr, arg->info.encode.io_reo_type); switch (arg->info.encode.io_reo_type) { case GLSV_GLD_EVT_RSC_OPEN: a2s_msg = (GLSV_GLD_A2S_CKPT_EVT *)NCS_INT64_TO_PTR_CAST(arg->info.encode.io_reo_hdl); rc = m_NCS_EDU_EXEC(&gld_cb->edu_hdl, glsv_edp_gld_a2s_evt_rsc_open_info, &arg->info.encode.io_uba, EDP_OP_TYPE_ENC, &a2s_msg->info.rsc_open_info, &ederror); if (rc != NCSCC_RC_SUCCESS) { LOG_ER("EDU exec async rsc open evt failed"); rc = NCSCC_RC_FAILURE; } break; case GLSV_GLD_EVT_RSC_CLOSE: a2s_msg = (GLSV_GLD_A2S_CKPT_EVT *)NCS_INT64_TO_PTR_CAST(arg->info.encode.io_reo_hdl); rc = m_NCS_EDU_EXEC(&gld_cb->edu_hdl, glsv_edp_gld_a2s_evt_rsc_details, &arg->info.encode.io_uba, EDP_OP_TYPE_ENC, &a2s_msg->info.rsc_details, &ederror); if (rc != NCSCC_RC_SUCCESS) { LOG_ER("EDU exec async rsc close evt failed"); rc = NCSCC_RC_FAILURE; } break; case GLSV_GLD_EVT_SET_ORPHAN: a2s_msg = (GLSV_GLD_A2S_CKPT_EVT *)NCS_INT64_TO_PTR_CAST(arg->info.encode.io_reo_hdl); rc = m_NCS_EDU_EXEC(&gld_cb->edu_hdl, glsv_edp_gld_a2s_evt_rsc_details, &arg->info.encode.io_uba, EDP_OP_TYPE_ENC, &a2s_msg->info.rsc_details, &ederror); if (rc != NCSCC_RC_SUCCESS) { LOG_ER("EDU exec async set orphan evt failed"); rc = NCSCC_RC_FAILURE; } break; case GLSV_GLD_EVT_GLND_DOWN: case GLSV_GLD_EVT_GLND_OPERATIONAL: a2s_msg = (GLSV_GLD_A2S_CKPT_EVT *)NCS_INT64_TO_PTR_CAST(arg->info.encode.io_reo_hdl); rc = m_NCS_EDU_EXEC(&gld_cb->edu_hdl, glsv_edp_gld_a2s_evt_glnd_mds_info, &arg->info.encode.io_uba, EDP_OP_TYPE_ENC, &a2s_msg->info.glnd_mds_info, &ederror); if (rc != NCSCC_RC_SUCCESS) { LOG_ER("EDU exec async glnd down evt failed"); rc = NCSCC_RC_FAILURE; } break; default: rc = NCSCC_RC_FAILURE; goto end; } end: TRACE_LEAVE(); return rc; }