예제 #1
0
/***********************************************************************//**
* @brief	This routine gets MDS handle for PLMA.
*
* @return	NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE.
***************************************************************************/
uint32_t plma_mds_get_handle()
{
	NCSADA_INFO arg;
	uint32_t rc;
	PLMA_CB *plma_cb = plma_ctrlblk;
	
	TRACE_ENTER();
	
	memset(&arg, 0, sizeof(NCSADA_INFO));
	arg.req = NCSADA_GET_HDLS;
	rc = ncsada_api(&arg);

	if (rc != NCSCC_RC_SUCCESS) {
		return rc;
	}

	plma_cb->mds_hdl = arg.info.adest_get_hdls.o_mds_pwe1_hdl;
	plma_cb->mdest_id = arg.info.adest_get_hdls.o_adest;
	TRACE_5("PLM agent handle got : %d", plma_cb->mds_hdl);
	TRACE_5("PLM agent mdest ID got : %" PRIu64, plma_cb->mdest_id);

	
	TRACE_LEAVE();
	
	return rc;
}
예제 #2
0
/****************************************************************************
  Name          : lga_mds_init
 
  Description   : This routine registers the LGA Service with MDS.
 
  Arguments     : cb - ptr to the LGA control block
 
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
uint32_t lga_mds_init(lga_cb_t *cb)
{
	NCSADA_INFO ada_info;
	NCSMDS_INFO mds_info;
	uint32_t rc = NCSCC_RC_SUCCESS;
	MDS_SVC_ID svc = NCSMDS_SVC_ID_LGS;

	TRACE_ENTER();
    /** Create the ADEST for LGA and get the pwe hdl**/
	memset(&ada_info, '\0', sizeof(ada_info));
	ada_info.req = NCSADA_GET_HDLS;

	if (NCSCC_RC_SUCCESS != (rc = ncsada_api(&ada_info))) {
		TRACE("NCSADA_GET_HDLS failed, rc = %d", rc);
		return NCSCC_RC_FAILURE;
	}

    /** Store the info obtained from MDS ADEST creation  **/
	cb->mds_hdl = ada_info.info.adest_get_hdls.o_mds_pwe1_hdl;

    /** Now install into mds **/
	memset(&mds_info, '\0', sizeof(NCSMDS_INFO));
	mds_info.i_mds_hdl = cb->mds_hdl;
	mds_info.i_svc_id = NCSMDS_SVC_ID_LGA;
	mds_info.i_op = MDS_INSTALL;

	mds_info.info.svc_install.i_yr_svc_hdl = 0;
	mds_info.info.svc_install.i_install_scope = NCSMDS_SCOPE_NONE;	/* PWE scope */
	mds_info.info.svc_install.i_svc_cb = lga_mds_callback;	/* callback */
	mds_info.info.svc_install.i_mds_q_ownership = false;	/* LGA doesn't own the mds queue */
	mds_info.info.svc_install.i_mds_svc_pvt_ver = LGA_SVC_PVT_SUBPART_VERSION;

	if ((rc = ncsmds_api(&mds_info)) != NCSCC_RC_SUCCESS) {
		TRACE("mds api call failed");
		return NCSCC_RC_FAILURE;
	}

	/* Now subscribe for events that will be generated by MDS */
	memset(&mds_info, '\0', sizeof(NCSMDS_INFO));

	mds_info.i_mds_hdl = cb->mds_hdl;
	mds_info.i_svc_id = NCSMDS_SVC_ID_LGA;
	mds_info.i_op = MDS_SUBSCRIBE;

	mds_info.info.svc_subscribe.i_scope = NCSMDS_SCOPE_NONE;
	mds_info.info.svc_subscribe.i_num_svcs = 1;
	mds_info.info.svc_subscribe.i_svc_ids = &svc;

	rc = ncsmds_api(&mds_info);
	if (rc != NCSCC_RC_SUCCESS) {
		TRACE("mds api call failed");
		return rc;
	}
	TRACE_LEAVE();
	return rc;
}
예제 #3
0
uns32 rde_mds_register(RDE_CONTROL_BLOCK *cb)
{
	NCSADA_INFO ada_info;
	NCSMDS_INFO svc_info;
	MDS_SVC_ID svc_id[1] = { NCSMDS_SVC_ID_RDE };
	MDS_DEST mds_adest;

	TRACE_ENTER();

	ada_info.req = NCSADA_GET_HDLS;
	if (ncsada_api(&ada_info) != NCSCC_RC_SUCCESS) {
		LOG_ER("%s: NCSADA_GET_HDLS Failed", __FUNCTION__);
		return NCSCC_RC_FAILURE;
	}

	mds_hdl = ada_info.info.adest_get_hdls.o_mds_pwe1_hdl;
	mds_adest = ada_info.info.adest_get_hdls.o_adest;

	svc_info.i_mds_hdl = mds_hdl;
	svc_info.i_svc_id = NCSMDS_SVC_ID_RDE;
	svc_info.i_op = MDS_INSTALL;

	svc_info.info.svc_install.i_yr_svc_hdl = 0;
	svc_info.info.svc_install.i_install_scope = NCSMDS_SCOPE_NONE;	/*node specific */
	svc_info.info.svc_install.i_svc_cb = mds_callback;	/* callback */
	svc_info.info.svc_install.i_mds_q_ownership = FALSE;
	svc_info.info.svc_install.i_mds_svc_pvt_ver = RDE_MDS_PVT_SUBPART_VERSION;

	if (ncsmds_api(&svc_info) == NCSCC_RC_FAILURE) {
		LOG_ER("%s: MDS Install Failed", __FUNCTION__);
		return NCSCC_RC_FAILURE;
	}

	memset(&svc_info, 0, sizeof(NCSMDS_INFO));
	svc_info.i_mds_hdl = mds_hdl;
	svc_info.i_svc_id = NCSMDS_SVC_ID_RDE;
	svc_info.i_op = MDS_RED_SUBSCRIBE;
	svc_info.info.svc_subscribe.i_num_svcs = 1;
	svc_info.info.svc_subscribe.i_scope = NCSMDS_SCOPE_NONE;
	svc_info.info.svc_subscribe.i_svc_ids = svc_id;

	if (ncsmds_api(&svc_info) == NCSCC_RC_FAILURE) {
		LOG_ER("MDS Subscribe for redundancy Failed");
		return NCSCC_RC_FAILURE;
	}

	TRACE_LEAVE2("NodeId:%x, mds_adest:%llx", ncs_get_node_id(), mds_adest);

	return NCSCC_RC_SUCCESS;
}
예제 #4
0
/*************************************************************************** 
@brief		: Register with MDS and Subscribe to SMFND svc evts.
@return		: NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
*****************************************************************************/
uint32_t smfa_mds_register()
{
	NCSADA_INFO arg;
	NCSMDS_INFO svc_info;
	MDS_SVC_ID svc_id[1] = { NCSMDS_SVC_ID_SMFND };
	SMFA_CB *cb = &_smfa_cb;
	
	/* Get MDS handle.*/		
	memset(&arg, 0, sizeof(NCSADA_INFO));
	arg.req = NCSADA_GET_HDLS;
	if (NCSCC_RC_SUCCESS != ncsada_api(&arg)){
		LOG_ER("SMFA: MDS get handle FAILED.");
		return NCSCC_RC_FAILURE;
	}
	cb->smfa_mds_hdl = arg.info.adest_get_hdls.o_mds_pwe1_hdl;

	/* Install with MDS. */ 
	memset(&svc_info, 0, sizeof(NCSMDS_INFO));
	svc_info.i_mds_hdl = cb->smfa_mds_hdl;
	svc_info.i_svc_id = NCSMDS_SVC_ID_SMFA;
	svc_info.i_op = MDS_INSTALL;

	svc_info.info.svc_install.i_yr_svc_hdl = 0;
	svc_info.info.svc_install.i_install_scope = NCSMDS_SCOPE_INTRANODE;
	svc_info.info.svc_install.i_svc_cb = smfa_mds_callback;
	svc_info.info.svc_install.i_mds_q_ownership = false;
	if (NCSCC_RC_SUCCESS != ncsmds_api(&svc_info)){
		LOG_ER("SMFA: MDS Install FAILED.");
		return NCSCC_RC_FAILURE;
	}

	/* Subscribe for SMFND UP/DOWN evetns.*/
	memset(&svc_info, 0, sizeof(NCSMDS_INFO));
	svc_info.i_mds_hdl = cb->smfa_mds_hdl;
	svc_info.i_svc_id = NCSMDS_SVC_ID_SMFA;
	svc_info.i_op = MDS_SUBSCRIBE;

	svc_info.info.svc_subscribe.i_num_svcs = 1;
	svc_info.info.svc_subscribe.i_scope = NCSMDS_SCOPE_INTRANODE;
	svc_info.info.svc_subscribe.i_svc_ids = svc_id;
	if (NCSCC_RC_SUCCESS != ncsmds_api(&svc_info)){
		LOG_ER("SMFA: MDS Subscription FAILED.");
		smfa_mds_unregister();
		return NCSCC_RC_FAILURE;
	}
	
	return NCSCC_RC_SUCCESS;	 
}
예제 #5
0
/****************************************************************************
 * Name          : immnd_mds_get_handle
 *
 * Description   : This function Gets the Handles of local MDS destination
 *
 * Arguments     : cb   : IMMND control Block pointer.
 *
 * Return Values : NCSCC_RC_SUCCESS/Error Code.
 *
 * Notes         : None.
 *****************************************************************************/
uint32_t immnd_mds_get_handle(IMMND_CB *cb)
{
	NCSADA_INFO arg;
	uint32_t rc;

	memset(&arg, 0, sizeof(NCSADA_INFO));
	arg.req = NCSADA_GET_HDLS;
	rc = ncsada_api(&arg);

	if (rc != NCSCC_RC_SUCCESS) {
		LOG_WA("MDS Handle Get Failed");
		return rc;
	}
	cb->immnd_mds_hdl = arg.info.adest_get_hdls.o_mds_pwe1_hdl;
	return rc;
}
예제 #6
0
uns32 mqa_mds_get_handle(MQA_CB *cb)
{
	NCSADA_INFO arg;
	uns32 rc;

	memset(&arg, 0, sizeof(NCSADA_INFO));
	arg.req = NCSADA_GET_HDLS;
	rc = ncsada_api(&arg);

	if (rc != NCSCC_RC_SUCCESS) {
		m_LOG_MQSV_A(MQA_MDS_GET_HANDLE_FAILED, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, rc, __FILE__, __LINE__);
		return rc;
	}
	cb->mqa_mds_hdl = arg.info.adest_get_hdls.o_mds_pwe1_hdl;
	return rc;
}
예제 #7
0
uint32_t cpa_mds_get_handle(CPA_CB *cb)
{
	NCSADA_INFO arg;
	uint32_t rc;

	memset(&arg, 0, sizeof(NCSADA_INFO));
	arg.req = NCSADA_GET_HDLS;
	rc = ncsada_api(&arg);

	if (rc != NCSCC_RC_SUCCESS) {
		TRACE_4("CPA processing failed for ADA:GET_HDLS with return value:%d",rc);
		return rc;
	}
	cb->cpa_mds_hdl = arg.info.adest_get_hdls.o_mds_pwe1_hdl;
	return rc;
}
예제 #8
0
uns32 cpa_mds_get_handle(CPA_CB *cb)
{
	NCSADA_INFO arg;
	uns32 rc;

	memset(&arg, 0, sizeof(NCSADA_INFO));
	arg.req = NCSADA_GET_HDLS;
	rc = ncsada_api(&arg);

	if (rc != NCSCC_RC_SUCCESS) {
		/*m_LOG_CPA_HEADLINE(CPA_MDS_GET_HANDLE_FAILED,NCSFL_SEV_ERROR); */
		m_LOG_CPA_CCLL(CPA_API_FAILED, NCSFL_LC_CKPT_MGMT, NCSFL_SEV_ERROR, "ADA:GET_HDLS", __FILE__, __LINE__,
			       rc);
		return rc;
	}
	cb->cpa_mds_hdl = arg.info.adest_get_hdls.o_mds_pwe1_hdl;
	return rc;
}
예제 #9
0
/****************************************************************************
* Name          : fm_mds_get_adest_hdls
*
* Description   : Gets a handle to the MDS ADEST 
*
* Arguments     : pointer to the FMS control block. 
*
* Return Values : 
*
* Notes         : None.
*****************************************************************************/
static uint32_t fm_mds_get_adest_hdls(FM_CB *cb)
{
	NCSADA_INFO arg;

	memset(&arg, 0, sizeof(NCSADA_INFO));

	arg.req = NCSADA_GET_HDLS;

	if (ncsada_api(&arg) != NCSCC_RC_SUCCESS) {
		return NCSCC_RC_FAILURE;
	}

	cb->adest = arg.info.adest_get_hdls.o_adest;
	cb->adest_hdl = arg.info.adest_get_hdls.o_mds_adest_hdl;
	cb->adest_pwe1_hdl = arg.info.adest_get_hdls.o_mds_pwe1_hdl;

	return NCSCC_RC_SUCCESS;
}
예제 #10
0
/****************************************************************************
 * Name          : avnd_mds_param_get
 *
 * Description   : This routine gets the mds handle & AvND MDS address.
 *
 * Arguments     : cb - ptr to the AvND control block
 *
 * Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 *
 * Notes         : None.
 *****************************************************************************/
uns32 avnd_mds_param_get(AVND_CB *cb)
{
	NCSADA_INFO ada_info;
	uns32 rc = NCSCC_RC_SUCCESS;

	memset(&ada_info, 0, sizeof(ada_info));

	ada_info.req = NCSADA_GET_HDLS;

	/* invoke ada request */
	rc = ncsada_api(&ada_info);
	if (NCSCC_RC_SUCCESS != rc)
		goto done;

	/* store values returned by ada */
	cb->mds_hdl = ada_info.info.adest_get_hdls.o_mds_pwe1_hdl;
	cb->avnd_dest = ada_info.info.adest_get_hdls.o_adest;

	/* get the node-id from mds */
	cb->node_info.nodeId = m_NCS_NODE_ID_FROM_MDS_DEST(cb->avnd_dest);

 done:
	return rc;
}
예제 #11
0
/****************************************************************************
  Name          : avnd_mds_reg
 
  Description   : This routine registers the AVND Service with MDS. It does 
                  the following:
                  a) Gets the MDS handle & AvND MDS address
                  b) installs AvND service with MDS
                  c) Subscribes to MDS events
 
  Arguments     : cb - ptr to the AVND control block
 
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
uns32 avnd_mds_reg(AVND_CB *cb)
{
	NCSMDS_INFO mds_info;
	NCSADA_INFO ada_info;
	MDS_SVC_ID svc_ids[2];
	uns32 rc = NCSCC_RC_SUCCESS;

	/* get the mds-hdl & avnd mds address */
	rc = avnd_mds_param_get(cb);
	if (NCSCC_RC_SUCCESS != rc) {
		LOG_CR("MDS param get failed");
		return NCSCC_RC_FAILURE;
	}
	TRACE("MDS param get success");

	/* fill common fields */
	memset(&mds_info, 0, sizeof(NCSMDS_INFO));
	mds_info.i_mds_hdl = cb->mds_hdl;
	mds_info.i_svc_id = NCSMDS_SVC_ID_AVND;

   /*** install avnd service with mds ***/
	mds_info.i_op = MDS_INSTALL;
	mds_info.info.svc_install.i_mds_q_ownership = FALSE;
	mds_info.info.svc_install.i_svc_cb = avnd_mds_cbk;
	mds_info.info.svc_install.i_install_scope = NCSMDS_SCOPE_NONE;
	mds_info.info.svc_install.i_mds_svc_pvt_ver = AVND_MDS_SUB_PART_VERSION;

	rc = ncsmds_api(&mds_info);
	if (NCSCC_RC_SUCCESS != rc) {
		LOG_CR("MDS install failed");
		goto done;
	}
	TRACE("MDS install success");

   /*** subscribe to mds events ***/
	mds_info.i_op = MDS_SUBSCRIBE;
	mds_info.info.svc_subscribe.i_svc_ids = svc_ids;

	/* subscribe to events from avd */
	mds_info.info.svc_subscribe.i_scope = NCSMDS_SCOPE_NONE;
	mds_info.info.svc_subscribe.i_num_svcs = 1;
	svc_ids[0] = NCSMDS_SVC_ID_AVD;
	rc = ncsmds_api(&mds_info);
	if (NCSCC_RC_SUCCESS != rc) {
		LOG_CR("MDS subscription for AVD events failed");
		goto done;
	}
	TRACE("MDS subscription for AVD events success");

	/* subscribe to events from ava */
	mds_info.info.svc_subscribe.i_scope = NCSMDS_SCOPE_INTRANODE;
	mds_info.info.svc_subscribe.i_num_svcs = 1;
	svc_ids[0] = NCSMDS_SVC_ID_AVA;
	rc = ncsmds_api(&mds_info);
	if (NCSCC_RC_SUCCESS != rc) {
		LOG_CR("MDS subscription for AVA events failed");
		goto done;
	}
	TRACE("MDS subscription for AVA events success");

	/* Subscribe for AvND itself. Will be used for External/Inernode proxy support */
	mds_info.i_op = MDS_SUBSCRIBE;
	mds_info.info.svc_subscribe.i_svc_ids = svc_ids;

	/* subscribe to events from avd */
	mds_info.info.svc_subscribe.i_scope = NCSMDS_SCOPE_NONE;
	mds_info.info.svc_subscribe.i_num_svcs = 1;
	svc_ids[0] = NCSMDS_SVC_ID_AVND;
	rc = ncsmds_api(&mds_info);
	if (NCSCC_RC_SUCCESS != rc) {
		LOG_CR("MDS subscription for AVND events failed");
		goto done;
	}
	TRACE("MDS subscription for AVND events success");

	/* Subscribe for Controller AvND Vdest. 
	   It will be used for External Comp support */
	mds_info.i_op = MDS_SUBSCRIBE;
	mds_info.info.svc_subscribe.i_svc_ids = svc_ids;

	/* subscribe to events from avd */
	mds_info.info.svc_subscribe.i_scope = NCSMDS_SCOPE_NONE;
	mds_info.info.svc_subscribe.i_num_svcs = 1;
	svc_ids[0] = NCSMDS_SVC_ID_AVND_CNTLR;
	rc = ncsmds_api(&mds_info);
	if (NCSCC_RC_SUCCESS != rc) {
		LOG_CR("MDS subscription for Controller AVND vdest failed");
		goto done;
	}
	TRACE("MDS subscription for Controller AVND vdest success");

	/* get the handle from MDS */

	memset(&ada_info, 0, sizeof(ada_info));

	ada_info.req = NCSADA_GET_HDLS;

	rc = ncsada_api(&ada_info);

	if (rc != NCSCC_RC_SUCCESS) {
		goto done;
	}

	/* Temp: For AvD down handling */
	cb->is_avd_down = FALSE;

 done:
	if (NCSCC_RC_SUCCESS != rc)
		rc = avnd_mds_unreg(cb);

	return rc;
}