Ejemplo n.º 1
0
/****************************************************************************\
 * 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;
}
Ejemplo n.º 2
0
/*******************************************************************************************
 * 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;

}