コード例 #1
0
/****************************************************************************
  Name          : mqnd_mds_enc
 
  Description   : This function encodes an events sent from MQND.
 
  Arguments     : cb    : MQND control Block.
                  info  : Info for encoding
  
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
static uns32 mqnd_mds_enc(MQND_CB *cb, MDS_CALLBACK_ENC_INFO *enc_info)
{
	MQSV_EVT *msg_ptr;
	EDU_ERR ederror = 0;
	uns32 rc = NCSCC_RC_SUCCESS;

	msg_ptr = (MQSV_EVT *)enc_info->i_msg;

	/* Get the Msg Format version from the SERVICE_ID & RMT_SVC_PVT_SUBPART_VERSION */
	switch (enc_info->i_to_svc_id) {
	case NCSMDS_SVC_ID_MQA:
		enc_info->o_msg_fmt_ver = m_NCS_ENC_MSG_FMT_GET(enc_info->i_rem_svc_pvt_ver,
								MQND_WRT_MQA_SUBPART_VER_AT_MIN_MSG_FMT,
								MQND_WRT_MQA_SUBPART_VER_AT_MAX_MSG_FMT,
								mqnd_mqa_msg_fmt_table);
		break;

	case NCSMDS_SVC_ID_MQND:
		enc_info->o_msg_fmt_ver = m_NCS_ENC_MSG_FMT_GET(enc_info->i_rem_svc_pvt_ver,
								MQND_WRT_MQND_SUBPART_VER_AT_MIN_MSG_FMT,
								MQND_WRT_MQND_SUBPART_VER_AT_MAX_MSG_FMT,
								mqnd_mqnd_msg_fmt_table);
		break;

	case NCSMDS_SVC_ID_MQD:
		enc_info->o_msg_fmt_ver = m_NCS_ENC_MSG_FMT_GET(enc_info->i_rem_svc_pvt_ver,
								MQND_WRT_MQD_SUBPART_VER_AT_MIN_MSG_FMT,
								MQND_WRT_MQD_SUBPART_VER_AT_MAX_MSG_FMT,
								mqnd_mqd_msg_fmt_table);
		break;

	default:
		return NCSCC_RC_FAILURE;
	}

	if (enc_info->o_msg_fmt_ver) {
		rc = (m_NCS_EDU_EXEC(&cb->edu_hdl, mqsv_edp_mqsv_evt,
				     enc_info->io_uba, EDP_OP_TYPE_ENC, msg_ptr, &ederror));
		if (rc != NCSCC_RC_SUCCESS) {
			m_LOG_MQSV_ND(MQND_MDS_ENC_FAILED, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, rc, __FILE__, __LINE__);
		}
		return rc;
	} else {
		/* Drop The Message */
		m_LOG_MQSV_ND(MQND_MSG_FRMT_VER_INVALID, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR,
			      enc_info->o_msg_fmt_ver, __FILE__, __LINE__);
		TRACE("mqnd_mds_enc:INVALID MSG FORMAT %d", enc_info->o_msg_fmt_ver);
		return NCSCC_RC_FAILURE;
	}
}
コード例 #2
0
ファイル: cpa_mds.c プロジェクト: helioloureiro/opensaf-fork
/****************************************************************************
  Name          : cpa_mds_enc_flat
 
  Description   : This function encodes an events sent from CPA.
 
  Arguments     : cb    : CPA control Block.
                  enc_info  : Info for encoding
  
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
static uint32_t cpa_mds_enc_flat(CPA_CB *cb, MDS_CALLBACK_ENC_FLAT_INFO *info)
{
	CPSV_EVT *evt = NULL;
	NCS_UBAID *uba = info->io_uba;
	uint32_t rc = NCSCC_RC_SUCCESS;

	TRACE_ENTER();
	/* Get the Msg Format version from the SERVICE_ID & RMT_SVC_PVT_SUBPART_VERSION */
	if (info->i_to_svc_id == NCSMDS_SVC_ID_CPND) {
		info->o_msg_fmt_ver = m_NCS_ENC_MSG_FMT_GET(info->i_rem_svc_pvt_ver,
							    CPA_WRT_CPND_SUBPART_VER_MIN,
							    CPA_WRT_CPND_SUBPART_VER_MAX, cpa_cpnd_msg_fmt_table);
	}
	if (info->o_msg_fmt_ver) {
		if (info->i_to_svc_id == NCSMDS_SVC_ID_CPND) {
			/* as all the event structures are flat */
			evt = (CPSV_EVT *)info->i_msg;
			rc = cpsv_evt_enc_flat(&cb->edu_hdl, evt, uba);
			if (rc != NCSCC_RC_SUCCESS)
				TRACE_4("CPA mds_enc_flat failed with return value:%d",rc);
			TRACE_LEAVE();
			return rc;
		} else {
			TRACE_4("CPA mds_enc_flat failed with return value:%d",rc);
			return NCSCC_RC_FAILURE;
		}
	} else {
		/* Drop The Message */
		TRACE_4("CPA mds_enc_flat failed with return value:%d",rc);
		return NCSCC_RC_FAILURE;
	}


}
コード例 #3
0
ファイル: cpa_mds.c プロジェクト: kenzaburo/OpenSaf-FrameWork
/****************************************************************************
  Name          : cpa_mds_enc_flat
 
  Description   : This function encodes an events sent from CPA.
 
  Arguments     : cb    : CPA control Block.
                  enc_info  : Info for encoding
  
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
static uns32 cpa_mds_enc_flat(CPA_CB *cb, MDS_CALLBACK_ENC_FLAT_INFO *info)
{
	CPSV_EVT *evt = NULL;
	NCS_UBAID *uba = info->io_uba;
	uns32 rc = NCSCC_RC_SUCCESS;

	/* Get the Msg Format version from the SERVICE_ID & RMT_SVC_PVT_SUBPART_VERSION */
	if (info->i_to_svc_id == NCSMDS_SVC_ID_CPND) {
		info->o_msg_fmt_ver = m_NCS_ENC_MSG_FMT_GET(info->i_rem_svc_pvt_ver,
							    CPA_WRT_CPND_SUBPART_VER_MIN,
							    CPA_WRT_CPND_SUBPART_VER_MAX, cpa_cpnd_msg_fmt_table);
	}
	if (info->o_msg_fmt_ver) {
		if (info->i_to_svc_id == NCSMDS_SVC_ID_CPND) {
			/* as all the event structures are flat */
			evt = (CPSV_EVT *)info->i_msg;
			rc = cpsv_evt_enc_flat(&cb->edu_hdl, evt, uba);
			if (rc != NCSCC_RC_SUCCESS)
				m_LOG_CPA_CCLL(CPA_PROC_FAILED, NCSFL_LC_CKPT_MGMT, NCSFL_SEV_ERROR, "mds_enc_flat",
					       __FILE__, __LINE__, rc);
			return rc;
		} else {
			m_LOG_CPA_CCLL(CPA_PROC_FAILED, NCSFL_LC_CKPT_MGMT, NCSFL_SEV_ERROR, "mds_enc_flat", __FILE__,
				       __LINE__, rc);
			return NCSCC_RC_FAILURE;
		}
	} else {
		/* Drop The Message */
		m_LOG_CPA_CCLL(CPA_PROC_FAILED, NCSFL_LC_CKPT_MGMT, NCSFL_SEV_ERROR, "mds_enc_flat", __FILE__, __LINE__,
			       rc);
		return NCSCC_RC_FAILURE;
	}
}
コード例 #4
0
/****************************************************************************
  Name          : immnd_mds_enc_flat
 
  Description   : This function encodes an events sent from IMMA/IMMD.
 
  Arguments     : cb    : IMMND control Block.
                  enc_info  : Info for encoding
  
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
static uint32_t immnd_mds_enc_flat(IMMND_CB *cb, MDS_CALLBACK_ENC_FLAT_INFO *info)
{
	IMMSV_EVT *evt;
	uint32_t rc = NCSCC_RC_SUCCESS;
	NCS_UBAID *uba = info->io_uba;

	/* as all the event structures are flat */
	/* Get the Msg Format version from the SERVICE_ID & 
	   RMT_SVC_PVT_SUBPART_VERSION */
	if (info->i_to_svc_id == NCSMDS_SVC_ID_IMMA_OM) {
		/*
		   info->o_msg_fmt_ver = 
		   m_NCS_ENC_MSG_FMT_GET(info->i_rem_svc_pvt_ver,
		   IMMND_WRT_IMMA_OM_SUBPART_VER_MIN,
		   IMMND_WRT_IMMA_OM_SUBPART_VER_MAX,
		   immnd_imma_msg_fmt_table);
		 */
	} else if (info->i_to_svc_id == NCSMDS_SVC_ID_IMMA_OI) {
		/*
		   info->o_msg_fmt_ver = 
		   m_NCS_ENC_MSG_FMT_GET(info->i_rem_svc_pvt_ver,
		   IMMND_WRT_IMMA_OI_SUBPART_VER_MIN,
		   IMMND_WRT_IMMA_OI_SUBPART_VER_MAX,
		   immnd_imma_msg_fmt_table);
		 */
	} else if (info->i_to_svc_id == NCSMDS_SVC_ID_IMMND) {
		/*
		   info->o_msg_fmt_ver = 
		   m_NCS_ENC_MSG_FMT_GET(info->i_rem_svc_pvt_ver,
		   IMMND_WRT_IMMND_SUBPART_VER_MIN,
		   IMMND_WRT_IMMND_SUBPART_VER_MAX,
		   immnd_immnd_msg_fmt_table);
		 */
	} else if (info->i_to_svc_id == NCSMDS_SVC_ID_IMMD) {
		info->o_msg_fmt_ver =
		    m_NCS_ENC_MSG_FMT_GET(info->i_rem_svc_pvt_ver,
					  IMMND_WRT_IMMD_SUBPART_VER_MIN,
					  IMMND_WRT_IMMD_SUBPART_VER_MAX, immnd_immd_msg_fmt_table);
	}

	if (1 /*info->o_msg_fmt_ver */ ) {	/* TODO: ABT Does not work */
		evt = (IMMSV_EVT *)info->i_msg;
		rc = immsv_evt_enc_flat( /*&cb->immnd_edu_hdl, */ evt, uba);
		if (rc != NCSCC_RC_SUCCESS) {
			LOG_WA("MDS Encode Flat Failed");
		}
		return rc;
	}
	/* Drop The Message  Incompatible Message Format Version */
	LOG_WA("INVALID MSG FORMAT IN ENCODE FLAT");
	return NCSCC_RC_FAILURE;
}
コード例 #5
0
/****************************************************************************
  Name          : immnd_mds_enc
 
  Description   : This function encodes an events sent from IMMND.
 
  Arguments     : cb    : IMMND control Block.
                  info  : Info for encoding
  
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
static uint32_t immnd_mds_enc(IMMND_CB *cb, MDS_CALLBACK_ENC_INFO *enc_info)
{
	IMMSV_EVT *evt;

	/* Get the Msg Format version from the SERVICE_ID & 
	   RMT_SVC_PVT_SUBPART_VERSION */
	if (enc_info->i_to_svc_id == NCSMDS_SVC_ID_IMMA_OM) {
		/*
		   enc_info->o_msg_fmt_ver = 
		   m_NCS_ENC_MSG_FMT_GET(enc_info->i_rem_svc_pvt_ver,
		   IMMND_WRT_IMMA_OM_SUBPART_VER_MIN,
		   IMMND_WRT_IMMA_OM_SUBPART_VER_MAX,
		   immnd_imma_msg_fmt_table);
		 */
	} else if (enc_info->i_to_svc_id == NCSMDS_SVC_ID_IMMA_OI) {
		/*
		   enc_info->o_msg_fmt_ver = 
		   m_NCS_ENC_MSG_FMT_GET(enc_info->i_rem_svc_pvt_ver,
		   IMMND_WRT_IMMA_OI_SUBPART_VER_MIN,
		   IMMND_WRT_IMMA_OI_SUBPART_VER_MAX,
		   immnd_imma_msg_fmt_table);
		 */
	} else if (enc_info->i_to_svc_id == NCSMDS_SVC_ID_IMMND) {
		/*
		   enc_info->o_msg_fmt_ver = 
		   m_NCS_ENC_MSG_FMT_GET(enc_info->i_rem_svc_pvt_ver,
		   IMMND_WRT_IMMND_SUBPART_VER_MIN,
		   IMND_WRT_IMMND_SUBPART_VER_MAX,
		   immnd_immnd_msg_fmt_table);
		 */
	} else if (enc_info->i_to_svc_id == NCSMDS_SVC_ID_IMMD) {
		enc_info->o_msg_fmt_ver =
		    m_NCS_ENC_MSG_FMT_GET(enc_info->i_rem_svc_pvt_ver,
					  IMMND_WRT_IMMD_SUBPART_VER_MIN,
					  IMMND_WRT_IMMD_SUBPART_VER_MAX, immnd_immd_msg_fmt_table);
	}

	if (1 /*enc_info->o_msg_fmt_ver */ ) {	/*TODO: ABT Does not work */
		evt = (IMMSV_EVT *)enc_info->i_msg;

		return immsv_evt_enc( /*&cb->immnd_edu_hdl, */ evt, enc_info->io_uba);
	}

	/* Drop The Message - Incompatible Message Format Version */
	LOG_WA("INVALID MSG FORMAT IN ENCODE FULL");
	return NCSCC_RC_FAILURE;
}
コード例 #6
0
static uns32 mqnd_mds_svc_evt(MQND_CB *cb, MDS_CALLBACK_SVC_EVENT_INFO *svc_evt)
{
	uns32 rc = NCSCC_RC_SUCCESS, to_dest_slotid, o_msg_fmt_ver;
	switch (svc_evt->i_change) {
	case NCSMDS_DOWN:
		if (svc_evt->i_svc_id == NCSMDS_SVC_ID_MQD) {
			if (cb->is_mqd_up == TRUE) {
				/* If MQD is already UP */
				cb->is_mqd_up = FALSE;
				m_LOG_MQSV_ND(MQND_MQD_SERVICE_WENT_DOWN, NCSFL_LC_MQSV_INIT, NCSFL_SEV_NOTICE, rc,
					      __FILE__, __LINE__);
				return NCSCC_RC_SUCCESS;
			}
		} else if (svc_evt->i_svc_id == NCSMDS_SVC_ID_MQA) {
			MQSV_EVT *evt = NULL;

			/* Post the event to Clean all the Queues opened by applications 
			   on this agent */
			evt = m_MMGR_ALLOC_MQSV_EVT(NCS_SERVICE_ID_MQND);

			if (evt == NULL) {
				m_LOG_MQSV_ND(MQND_EVT_ALLOC_FAILED, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR,
					      NCSCC_RC_FAILURE, __FILE__, __LINE__);
				return NCSCC_RC_FAILURE;
			}
			evt->evt_type = MQSV_NOT_DSEND_EVENT;
			evt->type = MQSV_EVT_MQND_CTRL;
			evt->msg.mqnd_ctrl.type = MQND_CTRL_EVT_MDS_INFO;
			evt->msg.mqnd_ctrl.info.mds_info.change = svc_evt->i_change;
			evt->msg.mqnd_ctrl.info.mds_info.dest = svc_evt->i_dest;
			evt->msg.mqnd_ctrl.info.mds_info.svc_id = svc_evt->i_svc_id;
			m_LOG_MQSV_ND(MQND_MQA_SERVICE_WENT_DOWN, NCSFL_LC_MQSV_INIT, NCSFL_SEV_NOTICE,
				      m_NCS_NODE_ID_FROM_MDS_DEST(svc_evt->i_dest), __FILE__, __LINE__);

			/* Post the event to MQND Thread */
			rc = m_NCS_IPC_SEND(&cb->mbx, evt, NCS_IPC_PRIORITY_HIGH);
			if (rc != NCSCC_RC_SUCCESS) {
				m_LOG_MQSV_ND(MQND_MDS_SND_TO_MAILBOX_FAILED, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, rc,
					      __FILE__, __LINE__);
			}
			/*   mqnd_proc_mqa_down(cb, &svc_evt->i_dest); */
		} else
			return NCSCC_RC_SUCCESS;
		break;
	case NCSMDS_UP:
		switch (svc_evt->i_svc_id) {
		case NCSMDS_SVC_ID_MQD:
			{
				cb->is_mqd_up = TRUE;
				cb->mqd_dest = svc_evt->i_dest;
				m_LOG_MQSV_ND(MQND_MQD_SERVICE_CAME_UP, NCSFL_LC_MQSV_INIT, NCSFL_SEV_NOTICE, rc,
					      __FILE__, __LINE__);

				to_dest_slotid = mqsv_get_phy_slot_id(svc_evt->i_dest);

				o_msg_fmt_ver = m_NCS_ENC_MSG_FMT_GET(svc_evt->i_rem_svc_pvt_ver,
								      MQND_WRT_MQD_SUBPART_VER_AT_MIN_MSG_FMT,
								      MQND_WRT_MQD_SUBPART_VER_AT_MAX_MSG_FMT,
								      mqnd_mqd_msg_fmt_table);

				if (!o_msg_fmt_ver)
					/*Log informing the existence of Non compatible MQD version, Slot id being logged */
					m_LOG_MQSV_ND(MQND_MSG_FRMT_VER_INVALID, NCSFL_LC_MQSV_INIT,
						      NCSFL_SEV_ERROR, to_dest_slotid, __FILE__, __LINE__);

			}
			break;
		case NCSMDS_SVC_ID_MQA:
			{
				MQSV_EVT *evt = NULL;

				to_dest_slotid = mqsv_get_phy_slot_id(svc_evt->i_dest);

				o_msg_fmt_ver = m_NCS_ENC_MSG_FMT_GET(svc_evt->i_rem_svc_pvt_ver,
								      MQND_WRT_MQA_SUBPART_VER_AT_MIN_MSG_FMT,
								      MQND_WRT_MQA_SUBPART_VER_AT_MAX_MSG_FMT,
								      mqnd_mqa_msg_fmt_table);

				if (!o_msg_fmt_ver)
					/*Log informing the existence of Non compatible MQA version, Slot id being logged */
					m_LOG_MQSV_ND(MQND_MSG_FRMT_VER_INVALID, NCSFL_LC_MQSV_INIT,
						      NCSFL_SEV_ERROR, to_dest_slotid, __FILE__, __LINE__);

				/* Post the event to Update the MQA list */

				evt = m_MMGR_ALLOC_MQSV_EVT(NCS_SERVICE_ID_MQND);

				if (evt == NULL) {
					m_LOG_MQSV_ND(MQND_EVT_ALLOC_FAILED, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR,
						      NCSCC_RC_FAILURE, __FILE__, __LINE__);
					return NCSCC_RC_FAILURE;
				}
				evt->evt_type = MQSV_NOT_DSEND_EVENT;
				evt->type = MQSV_EVT_MQND_CTRL;
				evt->msg.mqnd_ctrl.type = MQND_CTRL_EVT_MDS_MQA_UP_INFO;
				evt->msg.mqnd_ctrl.info.mqa_up_info.mqa_up_dest = svc_evt->i_dest;
				m_LOG_MQSV_ND(MQND_MQA_CAME_UP, NCSFL_LC_MQSV_INIT, NCSFL_SEV_NOTICE,
					      m_NCS_NODE_ID_FROM_MDS_DEST(svc_evt->i_dest), __FILE__, __LINE__);

				/* Post the event to MQND Thread */
				rc = m_NCS_IPC_SEND(&cb->mbx, evt, NCS_IPC_PRIORITY_HIGH);
				if (rc != NCSCC_RC_SUCCESS) {
					m_LOG_MQSV_ND(MQND_MDS_SND_TO_MAILBOX_FAILED, NCSFL_LC_MQSV_INIT,
						      NCSFL_SEV_ERROR, rc, __FILE__, __LINE__);
					m_MMGR_FREE_MQSV_EVT(evt, NCS_SERVICE_ID_MQND);
					return rc;
				}
			}
			break;
		default:
			break;
		}
		break;
	case NCSMDS_NO_ACTIVE:
		cb->is_mqd_up = FALSE;
		break;
	case NCSMDS_NEW_ACTIVE:
		cb->is_mqd_up = TRUE;
		{
			MQSV_EVT *evt = NULL;
			evt = m_MMGR_ALLOC_MQSV_EVT(NCS_SERVICE_ID_MQND);
			if (evt == NULL) {
				cb->is_mqd_up = TRUE;
				m_LOG_MQSV_ND(MQND_EVT_ALLOC_FAILED, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR,
					      NCSCC_RC_FAILURE, __FILE__, __LINE__);
				return NCSCC_RC_FAILURE;
			}
			memset(evt, 0, sizeof(MQSV_EVT));
			evt->evt_type = MQSV_NOT_DSEND_EVENT;
			evt->type = MQSV_EVT_MQND_CTRL;
			evt->msg.mqnd_ctrl.type = MQND_CTRL_EVT_DEFERRED_MQA_RSP;

			/* Post the event to MQND Thread */
			rc = m_NCS_IPC_SEND(&cb->mbx, evt, NCS_IPC_PRIORITY_HIGH);
			if (rc != NCSCC_RC_SUCCESS) {
				m_LOG_MQSV_ND(MQND_MDS_SND_TO_MAILBOX_FAILED, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, rc,
					      __FILE__, __LINE__);
			}
		}
		break;
	default:
		break;
	}
	return NCSCC_RC_SUCCESS;
}
コード例 #7
0
ファイル: mqa_mds.c プロジェクト: kenzaburo/OpenSaf-FrameWork
static uns32 mqa_mds_svc_evt(MQA_CB *cb, MDS_CALLBACK_SVC_EVENT_INFO *svc_evt)
{
	uns32 to_dest_slotid, o_msg_fmt_ver;

	/* TBD: The MQND and MQD restarts are to be implemented post April release */
	switch (svc_evt->i_change) {
	case NCSMDS_DOWN:
		switch (svc_evt->i_svc_id) {
		case NCSMDS_SVC_ID_MQND:

			cb->ver_mqnd[mqsv_get_phy_slot_id(svc_evt->i_dest)] = 0;

			m_LOG_MQSV_A(MQA_MQND_DOWN, NCSFL_LC_MQSV_INIT, NCSFL_SEV_NOTICE,
				     m_NCS_NODE_ID_FROM_MDS_DEST(svc_evt->i_dest), __FILE__, __LINE__);
			if (m_NCS_NODE_ID_FROM_MDS_DEST(cb->mqa_mds_dest) ==
			    m_NCS_NODE_ID_FROM_MDS_DEST(svc_evt->i_dest)) {
				cb->is_mqnd_up = FALSE;
			}
			break;
		case NCSMDS_SVC_ID_MQD:
			cb->is_mqd_up = FALSE;
			m_LOG_MQSV_A(MQA_MQD_DOWN, NCSFL_LC_MQSV_INIT, NCSFL_SEV_NOTICE, 0, __FILE__, __LINE__);
			break;

		default:
			break;
		}

		break;
	case NCSMDS_UP:
		switch (svc_evt->i_svc_id) {
		case NCSMDS_SVC_ID_MQND:
			to_dest_slotid = mqsv_get_phy_slot_id(svc_evt->i_dest);
			cb->ver_mqnd[to_dest_slotid] = svc_evt->i_rem_svc_pvt_ver;

			o_msg_fmt_ver = m_NCS_ENC_MSG_FMT_GET(svc_evt->i_rem_svc_pvt_ver,
							      MQA_WRT_MQND_SUBPART_VER_AT_MIN_MSG_FMT,
							      MQA_WRT_MQND_SUBPART_VER_AT_MAX_MSG_FMT,
							      mqa_mqnd_msg_fmt_table);

			if (!o_msg_fmt_ver)
				/*Log informing the existence of Non compatible MQND version, Slot id being logged */
				m_LOG_MQSV_A(MQA_MSG_FRMT_VER_INVALID, NCSFL_LC_MQSV_INIT,
					     NCSFL_SEV_ERROR, to_dest_slotid, __FILE__, __LINE__);

			if (m_NCS_NODE_ID_FROM_MDS_DEST(cb->mqa_mds_dest) ==
			    m_NCS_NODE_ID_FROM_MDS_DEST(svc_evt->i_dest)) {
				m_NCS_LOCK(&cb->mqnd_sync_lock, NCS_LOCK_WRITE);

				cb->mqnd_mds_dest = svc_evt->i_dest;
				cb->is_mqnd_up = TRUE;

				if (cb->mqnd_sync_awaited == TRUE) {
					m_NCS_SEL_OBJ_IND(cb->mqnd_sync_sel);
				}

				m_NCS_UNLOCK(&cb->mqnd_sync_lock, NCS_LOCK_WRITE);
			}
			m_LOG_MQSV_A(MQA_MQND_UP, NCSFL_LC_MQSV_INIT, NCSFL_SEV_NOTICE,
				     m_NCS_NODE_ID_FROM_MDS_DEST(svc_evt->i_dest), __FILE__, __LINE__);
			break;

		case NCSMDS_SVC_ID_MQD:
			m_NCS_LOCK(&cb->mqd_sync_lock, NCS_LOCK_WRITE);

			to_dest_slotid = mqsv_get_phy_slot_id(svc_evt->i_dest);

			o_msg_fmt_ver = m_NCS_ENC_MSG_FMT_GET(svc_evt->i_rem_svc_pvt_ver,
							      MQA_WRT_MQD_SUBPART_VER_AT_MIN_MSG_FMT,
							      MQA_WRT_MQD_SUBPART_VER_AT_MAX_MSG_FMT,
							      mqa_mqd_msg_fmt_table);

			if (!o_msg_fmt_ver)
				/*Log informing the existence of Non compatible MQD version, Slot id being logged */
				m_LOG_MQSV_A(MQA_MSG_FRMT_VER_INVALID, NCSFL_LC_MQSV_INIT,
					     NCSFL_SEV_ERROR, to_dest_slotid, __FILE__, __LINE__);

			cb->mqd_mds_dest = svc_evt->i_dest;
			cb->is_mqd_up = TRUE;

			if (cb->mqd_sync_awaited == TRUE) {
				m_NCS_SEL_OBJ_IND(cb->mqd_sync_sel);
			}
			m_LOG_MQSV_A(MQA_MQD_UP, NCSFL_LC_MQSV_INIT, NCSFL_SEV_NOTICE, 0, __FILE__, __LINE__);

			m_NCS_UNLOCK(&cb->mqd_sync_lock, NCS_LOCK_WRITE);
			break;

		default:
			break;
		}
		break;
	default:
		break;
	}

	return NCSCC_RC_SUCCESS;
}
コード例 #8
0
ファイル: cpa_mds.c プロジェクト: helioloureiro/opensaf-fork
/****************************************************************************
  Name          : cpa_mds_enc

  Description   : This function encodes an events sent from CPA to remote CPND.

  Arguments     : cb    : CPA control Block.
                  info  : Info for encoding

  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE

  Notes         : None.
******************************************************************************/
static uint32_t cpa_mds_enc(CPA_CB *cb, MDS_CALLBACK_ENC_INFO *enc_info)
{
	CPSV_EVT *pevt = NULL;
	EDU_ERR ederror = 0;
	NCS_UBAID *io_uba = enc_info->io_uba;
	uint32_t rc = NCSCC_RC_SUCCESS;
	uint8_t *pstream = NULL;

	TRACE_ENTER();

	/* Get the Msg Format version from the SERVICE_ID & RMT_SVC_PVT_SUBPART_VERSION */
	if (enc_info->i_to_svc_id == NCSMDS_SVC_ID_CPND) {
		/* This is special case to handle the 4.2 deployed node upgrade , the 4.2 has inconsistency  between
		   `enc_info->i_rem_svc_pvt_ver` ( CPND_MDS_PVT_SUBPART_VERSION  /CPA_MDS_PVT_SUBPART_VERSION )
		   and  `cpa_cpnd_msg_fmt_table`  ( CPND_WRT_CPND_SUBPART_VER_RANGE  / CPND_WRT_CPA_SUBPART_VER_RANGE)
		   For all other  up coming  version `m_NCS_ENC_MSG_FMT_GET` logic works fine */
		if (enc_info->i_rem_svc_pvt_ver <= 3)
			/* opensaf 4.2  CPND_MDS_PVT_SUBPART_VERSION  was  3 but  CPND_WRT_CPND_SUBPART_VER_RANGE was 2 */
			enc_info->o_msg_fmt_ver = cpa_cpnd_msg_fmt_table[enc_info->i_rem_svc_pvt_ver - 2];
		else
			/* m_NCS_ENC_MSG_FMT_GET call is equal to cpa_cpnd_msg_fmt_table[enc_info->i_rem_svc_pvt_ver - 1] */	
			enc_info->o_msg_fmt_ver = m_NCS_ENC_MSG_FMT_GET(enc_info->i_rem_svc_pvt_ver,
					CPA_WRT_CPND_SUBPART_VER_MIN,
					CPA_WRT_CPND_SUBPART_VER_MAX, cpa_cpnd_msg_fmt_table);
	}
	if (enc_info->o_msg_fmt_ver) {
		pevt = (CPSV_EVT *)enc_info->i_msg;
		if (pevt->type == CPSV_EVT_TYPE_CPND) {
			if (pevt->info.cpnd.type == CPND_EVT_A2ND_CKPT_WRITE) {
				pstream = ncs_enc_reserve_space(io_uba, 12);
				if (!pstream)
					return m_CPSV_DBG_SINK(NCSCC_RC_FAILURE,
							       "Memory alloc failed in cpa_mds_enc \n");
				ncs_encode_32bit(&pstream, pevt->type);	/* CPSV_EVT Type */
				ncs_encode_32bit(&pstream, pevt->info.cpnd.error);	/* cpnd_evt error This is for backword compatible purpose with EDU enc/dec with 3.0.2 */
				ncs_encode_32bit(&pstream, pevt->info.cpnd.type);	/* cpnd_evt SubType */
				ncs_enc_claim_space(io_uba, 12);

				rc = cpsv_ckpt_access_encode(&pevt->info.cpnd.info.ckpt_write, io_uba);
				TRACE_LEAVE();
				return rc;
			} else if (pevt->info.cpnd.type == CPND_EVT_A2ND_CKPT_READ) {
				pstream = ncs_enc_reserve_space(io_uba, 12);
				if (!pstream)
					return m_CPSV_DBG_SINK(NCSCC_RC_FAILURE,
							       "Memory alloc failed in cpa_mds_enc \n");
				ncs_encode_32bit(&pstream, pevt->type);	/* CPSV_EVT Type */
				ncs_encode_32bit(&pstream, pevt->info.cpnd.error);	/* cpnd_evt error This is for backword compatible purpose with EDU enc/dec with 3.0.2 */
				ncs_encode_32bit(&pstream, pevt->info.cpnd.type);	/* cpnd_evt SubType */
				ncs_enc_claim_space(io_uba, 12);

				rc = cpsv_ckpt_access_encode(&pevt->info.cpnd.info.ckpt_read, io_uba);
				TRACE_LEAVE();
				return rc;
			}
         else  if(pevt->info.cpnd.type == CPND_EVT_A2ND_CKPT_REFCNTSET)
         {
             if(enc_info->o_msg_fmt_ver < 2)
		{
			TRACE_LEAVE();
			return NCSCC_RC_FAILURE;
		}
             else
                {
		  pstream = ncs_enc_reserve_space(io_uba, 12);
                  if(!pstream)
                     return m_CPSV_DBG_SINK(NCSCC_RC_FAILURE,"Memory alloc failed in cpa_mds_enc \n");
                  ncs_encode_32bit(&pstream , pevt->type);              
                  ncs_encode_32bit(&pstream , pevt->info.cpnd.error);  
                  ncs_encode_32bit(&pstream , pevt->info.cpnd.type);         
                  ncs_enc_claim_space(io_uba, 12);

                  rc = cpsv_ref_cnt_encode(io_uba,&pevt->info.cpnd.info.refCntsetReq);
		TRACE_LEAVE();
		return rc; 
                }
         }
      }  /* For all other cases call EDU othen than Write/Read API's */
		rc = m_NCS_EDU_EXEC(&cb->edu_hdl, FUNC_NAME(CPSV_EVT),
				    enc_info->io_uba, EDP_OP_TYPE_ENC, pevt, &ederror);
		TRACE_LEAVE();
		return rc;
	} else {
		/* Drop The Message As Msg Fmt Version Not understandable */
		TRACE_4("cpa api processing failed in mds_enc ");
		return NCSCC_RC_FAILURE;
	}
}
コード例 #9
0
ファイル: cpa_mds.c プロジェクト: kenzaburo/OpenSaf-FrameWork
/****************************************************************************
  Name          : cpa_mds_enc

  Description   : This function encodes an events sent from CPA to remote CPND.

  Arguments     : cb    : CPA control Block.
                  info  : Info for encoding

  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE

  Notes         : None.
******************************************************************************/
static uns32 cpa_mds_enc(CPA_CB *cb, MDS_CALLBACK_ENC_INFO *enc_info)
{
	CPSV_EVT *pevt = NULL;
	EDU_ERR ederror = 0;
	NCS_UBAID *io_uba = enc_info->io_uba;
	uns32 rc = NCSCC_RC_SUCCESS;
	uns8 *pstream = NULL;

	/* Get the Msg Format version from the SERVICE_ID & RMT_SVC_PVT_SUBPART_VERSION */
	if (enc_info->i_to_svc_id == NCSMDS_SVC_ID_CPND) {
		enc_info->o_msg_fmt_ver = m_NCS_ENC_MSG_FMT_GET(enc_info->i_rem_svc_pvt_ver,
								CPA_WRT_CPND_SUBPART_VER_MIN,
								CPA_WRT_CPND_SUBPART_VER_MAX, cpa_cpnd_msg_fmt_table);
	}
	if (enc_info->o_msg_fmt_ver) {
		pevt = (CPSV_EVT *)enc_info->i_msg;
		if (pevt->type == CPSV_EVT_TYPE_CPND) {
			if (pevt->info.cpnd.type == CPND_EVT_A2ND_CKPT_WRITE) {
				pstream = ncs_enc_reserve_space(io_uba, 12);
				if (!pstream)
					return m_CPSV_DBG_SINK(NCSCC_RC_FAILURE,
							       "Memory alloc failed in cpa_mds_enc \n");
				ncs_encode_32bit(&pstream, pevt->type);	/* CPSV_EVT Type */
				ncs_encode_32bit(&pstream, pevt->info.cpnd.error);	/* cpnd_evt error This is for backword compatible purpose with EDU enc/dec with 3.0.2 */
				ncs_encode_32bit(&pstream, pevt->info.cpnd.type);	/* cpnd_evt SubType */
				ncs_enc_claim_space(io_uba, 12);

				rc = cpsv_ckpt_access_encode(&pevt->info.cpnd.info.ckpt_write, io_uba);
				return rc;
			} else if (pevt->info.cpnd.type == CPND_EVT_A2ND_CKPT_READ) {
				pstream = ncs_enc_reserve_space(io_uba, 12);
				if (!pstream)
					return m_CPSV_DBG_SINK(NCSCC_RC_FAILURE,
							       "Memory alloc failed in cpa_mds_enc \n");
				ncs_encode_32bit(&pstream, pevt->type);	/* CPSV_EVT Type */
				ncs_encode_32bit(&pstream, pevt->info.cpnd.error);	/* cpnd_evt error This is for backword compatible purpose with EDU enc/dec with 3.0.2 */
				ncs_encode_32bit(&pstream, pevt->info.cpnd.type);	/* cpnd_evt SubType */
				ncs_enc_claim_space(io_uba, 12);

				rc = cpsv_ckpt_access_encode(&pevt->info.cpnd.info.ckpt_read, io_uba);
				return rc;
			}
         else  if(pevt->info.cpnd.type == CPND_EVT_A2ND_CKPT_REFCNTSET)
         {
             if(enc_info->o_msg_fmt_ver < 2)
                return NCSCC_RC_FAILURE;
             else
                {
		  pstream = ncs_enc_reserve_space(io_uba, 12);
                  if(!pstream)
                     return m_CPSV_DBG_SINK(NCSCC_RC_FAILURE,"Memory alloc failed in cpa_mds_enc \n");
                  ncs_encode_32bit(&pstream , pevt->type);              
                  ncs_encode_32bit(&pstream , pevt->info.cpnd.error);  
                  ncs_encode_32bit(&pstream , pevt->info.cpnd.type);         
                  ncs_enc_claim_space(io_uba, 12);

                  rc = cpsv_ref_cnt_encode(io_uba,&pevt->info.cpnd.info.refCntsetReq);
                  return rc; 
                }
         }
      }  /* For all other cases call EDU othen than Write/Read API's */
		rc = m_NCS_EDU_EXEC(&cb->edu_hdl, FUNC_NAME(CPSV_EVT),
				    enc_info->io_uba, EDP_OP_TYPE_ENC, pevt, &ederror);
		return rc;
	} else {
		/* Drop The Message As Msg Fmt Version Not understandable */
		m_LOG_CPA_CCL(CPA_PROC_FAILED, NCSFL_LC_CKPT_MGMT, NCSFL_SEV_ERROR, "mds_enc", __FILE__, __LINE__);
		return NCSCC_RC_FAILURE;
	}
}
コード例 #10
0
/****************************************************************************
  Name          : avnd_mds_flat_enc
 
  Description   : This routine is invoked to (flat) encode AvA messages.
 
  Arguments     : cb       - ptr to the AvND control block
                  enc_info - ptr to the MDS encode info
 
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : This routine also frees the message after encoding it in 
                  the userbuf.
******************************************************************************/
uns32 avnd_mds_flat_enc(AVND_CB *cb, MDS_CALLBACK_ENC_INFO *enc_info)
{
	AVND_MSG *msg;
	uns32 rc = NCSCC_RC_SUCCESS;
	EDU_ERR ederror = 0;

	msg = (AVND_MSG *)enc_info->i_msg;

	switch (msg->type) {
	case AVND_MSG_AVA:
		enc_info->o_msg_fmt_ver = m_NCS_ENC_MSG_FMT_GET(enc_info->i_rem_svc_pvt_ver,
								AVND_AVA_SUBPART_VER_MIN,
								AVND_AVA_SUBPART_VER_MAX, avnd_ava_msg_fmt_map_table);

		if (enc_info->o_msg_fmt_ver < AVSV_AVND_AVA_MSG_FMT_VER_1) {
			return NCSCC_RC_FAILURE;
		}

		rc = avnd_mds_flat_ava_enc(cb, enc_info);
		break;

	case AVND_MSG_AVD:
		enc_info->o_msg_fmt_ver = m_NCS_ENC_MSG_FMT_GET(enc_info->i_rem_svc_pvt_ver,
								AVND_AVD_SUBPART_VER_MIN,
								AVND_AVD_SUBPART_VER_MAX, avnd_avd_msg_fmt_map_table);

		if (enc_info->o_msg_fmt_ver < AVSV_AVD_AVND_MSG_FMT_VER_1) {
			LOG_ER("%s,%u: wrong msg fmt not valid %u, res'%u'", __FUNCTION__, __LINE__,
					enc_info->i_rem_svc_pvt_ver, enc_info->o_msg_fmt_ver);
			return NCSCC_RC_FAILURE;
		}

		rc = m_NCS_EDU_VER_EXEC(&cb->edu_hdl, avsv_edp_dnd_msg, enc_info->io_uba,
					EDP_OP_TYPE_ENC, msg->info.avd, &ederror, enc_info->o_msg_fmt_ver);
		break;

	case AVND_MSG_AVND:
		enc_info->o_msg_fmt_ver = m_NCS_ENC_MSG_FMT_GET(enc_info->i_rem_svc_pvt_ver,
								AVND_AVND_SUBPART_VER_MIN,
								AVND_AVND_SUBPART_VER_MAX, avnd_avnd_msg_fmt_map_table);

		if (enc_info->o_msg_fmt_ver < AVSV_AVND_AVND_MSG_FMT_VER_1) {
			return NCSCC_RC_FAILURE;
		}

		rc = m_NCS_EDU_VER_EXEC(&cb->edu_hdl, avsv_edp_ndnd_msg, enc_info->io_uba,
					EDP_OP_TYPE_ENC, msg->info.avnd, &ederror, enc_info->o_msg_fmt_ver);
		break;

	default:
		assert(0);
		break;
	}			/* switch */

	if (rc != NCSCC_RC_SUCCESS) {
		/* Encode failed!!! */
		return rc;
	}

	/* free the message */
	avnd_msg_content_free(cb, msg);

	return rc;
}
コード例 #11
0
ファイル: lga_mds.c プロジェクト: helioloureiro/opensaf-fork
/****************************************************************************
  Name          : lga_mds_enc
 
  Description   : This is a callback routine that is invoked to encode LGS
                  messages.
 
  Arguments     : pointer to struct ncsmds_callback_info
 
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
static uint32_t lga_mds_enc(struct ncsmds_callback_info *info)
{
	lgsv_msg_t *msg;
	NCS_UBAID *uba;
	uint8_t *p8;
	uint32_t total_bytes = 0;

	MDS_CLIENT_MSG_FORMAT_VER msg_fmt_version;

	TRACE_ENTER();
	msg_fmt_version = m_NCS_ENC_MSG_FMT_GET(info->info.enc.i_rem_svc_pvt_ver,
						LGA_WRT_LGS_SUBPART_VER_AT_MIN_MSG_FMT,
						LGA_WRT_LGS_SUBPART_VER_AT_MAX_MSG_FMT, LGA_WRT_LGS_MSG_FMT_ARRAY);
	if (0 == msg_fmt_version) {
		TRACE("Wrong msg_fmt_version!!\n");
		TRACE_LEAVE();
		return NCSCC_RC_FAILURE;
	}
	info->info.enc.o_msg_fmt_ver = msg_fmt_version;

	msg = (lgsv_msg_t *)info->info.enc.i_msg;
	uba = info->info.enc.io_uba;

	if (uba == NULL) {
		TRACE("uba=NULL");
		TRACE_LEAVE();
		return NCSCC_RC_FAILURE;
	}

    /** encode the type of message **/
	p8 = ncs_enc_reserve_space(uba, 4);
	if (!p8) {
		TRACE("NULL pointer");
		TRACE_LEAVE();
		return NCSCC_RC_FAILURE;
	}
	ncs_encode_32bit(&p8, msg->type);
	ncs_enc_claim_space(uba, 4);
	total_bytes += 4;

	TRACE_2("msgtype: %d", msg->type);
	if (LGSV_LGA_API_MSG == msg->type) {
	/** encode the API msg subtype **/
		p8 = ncs_enc_reserve_space(uba, 4);
		if (!p8) {
			TRACE("encode API msg subtype FAILED");
			TRACE_LEAVE();	/* fixme: ok to do return fail?? */
			return NCSCC_RC_FAILURE;
		}
		ncs_encode_32bit(&p8, msg->info.api_info.type);
		ncs_enc_claim_space(uba, 4);
		total_bytes += 4;

		TRACE_2("api_info.type: %d\n", msg->info.api_info.type);
		switch (msg->info.api_info.type) {
		case LGSV_INITIALIZE_REQ:
			total_bytes += lga_enc_initialize_msg(uba, msg);
			break;

		case LGSV_FINALIZE_REQ:
			total_bytes += lga_enc_finalize_msg(uba, msg);
			break;

		case LGSV_STREAM_OPEN_REQ:
			total_bytes += lga_enc_lstr_open_sync_msg(uba, msg);
			break;

		case LGSV_STREAM_CLOSE_REQ:
			total_bytes += lga_enc_lstr_close_msg(uba, msg);
			break;

		case LGSV_WRITE_LOG_ASYNC_REQ:
			total_bytes += lga_enc_write_log_async_msg(uba, msg);
			break;

		default:
			TRACE("Unknown API type = %d", msg->info.api_info.type);
			break;
		}
	}

	TRACE_LEAVE();
	return NCSCC_RC_SUCCESS;
}
コード例 #12
0
/****************************************************************************
  Name          : ntfa_mds_enc
 
  Description   : This is a callback routine that is invoked to encode NTFS
                  messages.
 
  Arguments     : pointer to struct ncsmds_callback_info
 
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
static uns32 ntfa_mds_enc(struct ncsmds_callback_info *info)
{
	ntfsv_msg_t *msg;
	NCS_UBAID *uba;
	uns8 *p8;
	uns32 total_bytes = 0;

	MDS_CLIENT_MSG_FORMAT_VER msg_fmt_version;

	TRACE_ENTER();
	msg_fmt_version = m_NCS_ENC_MSG_FMT_GET(info->info.enc.i_rem_svc_pvt_ver,
						NTFA_WRT_NTFS_SUBPART_VER_AT_MIN_MSG_FMT,
						NTFA_WRT_NTFS_SUBPART_VER_AT_MAX_MSG_FMT, NTFA_WRT_NTFS_MSG_FMT_ARRAY);
	if (0 == msg_fmt_version) {
		TRACE("Wrong msg_fmt_version!!\n");
		TRACE_LEAVE();
		return NCSCC_RC_FAILURE;
	}
	info->info.enc.o_msg_fmt_ver = msg_fmt_version;

	msg = (ntfsv_msg_t *)info->info.enc.i_msg;
	uba = info->info.enc.io_uba;

	if (uba == NULL) {
		TRACE("uba=NULL");
		TRACE_LEAVE();
		return NCSCC_RC_FAILURE;
	}

    /** encode the type of message **/
	p8 = ncs_enc_reserve_space(uba, 4);
	if (!p8) {
		TRACE("NULL pointer");
		TRACE_LEAVE();
		return NCSCC_RC_FAILURE;
	}
	ncs_encode_32bit(&p8, msg->type);
	ncs_enc_claim_space(uba, 4);
	total_bytes += 4;

	TRACE_2("msgtype: %d", msg->type);
	if (NTFSV_NTFA_API_MSG == msg->type) {
	/** encode the API msg subtype **/
		p8 = ncs_enc_reserve_space(uba, 4);
		if (!p8) {
			TRACE("encode API msg subtype FAILED");
			TRACE_LEAVE();	/* fixme: ok to do return fail?? */
			return NCSCC_RC_FAILURE;
		}
		ncs_encode_32bit(&p8, msg->info.api_info.type);
		ncs_enc_claim_space(uba, 4);
		total_bytes += 4;

		TRACE_2("api_info.type: %d\n", msg->info.api_info.type);
		switch (msg->info.api_info.type) {
		case NTFSV_INITIALIZE_REQ:
			total_bytes += ntfa_enc_initialize_msg(uba, msg);
			break;

		case NTFSV_FINALIZE_REQ:
			total_bytes += ntfa_enc_finalize_msg(uba, msg);
			break;

		case NTFSV_SUBSCRIBE_REQ:
			total_bytes += ntfa_enc_subscribe_msg(uba, msg);
			break;

		case NTFSV_UNSUBSCRIBE_REQ:
			total_bytes += ntfa_enc_unsubscribe_msg(uba, msg);
			break;
		case NTFSV_SEND_NOT_REQ:
			total_bytes += ntfa_enc_send_not_msg(uba, msg);
			break;
		case NTFSV_READER_INITIALIZE_REQ:
			total_bytes += ntfa_enc_reader_initialize_msg(uba, msg);
			break;

		case NTFSV_READER_FINALIZE_REQ:
			total_bytes += ntfa_enc_reader_finalize_msg(uba, msg);
			break;

		case NTFSV_READ_NEXT_REQ:
			total_bytes += ntfa_enc_read_next_msg(uba, msg);
			break;

		default:
			TRACE("Unknown API type = %d", msg->info.api_info.type);
			break;
		}
	}

	TRACE_LEAVE();
	return NCSCC_RC_SUCCESS;
}