Ejemplo n.º 1
0
uint32_t mds_register(smfd_cb_t * cb)
{
	NCSMDS_INFO svc_info;
	MDS_SVC_ID smfnd_id[1] = { NCSMDS_SVC_ID_SMFND };
	MDS_SVC_ID smfd_id[1] = { NCSMDS_SVC_ID_SMFD };

	/* memset the svc_info */
	memset(&svc_info, 0, sizeof(NCSMDS_INFO));

	/* Install with MDS our service ID NCSMDS_SVC_ID_SMFD. */
	svc_info.i_mds_hdl = cb->mds_handle;
	svc_info.i_svc_id = NCSMDS_SVC_ID_SMFD;
	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 =
	    SMFD_MDS_PVT_SUBPART_VERSION;

	if (ncsmds_api(&svc_info) == NCSCC_RC_FAILURE) {
		LOG_ER("smfd_mds_register: mds install SMFD FAILED\n");
		return NCSCC_RC_FAILURE;
	}

	/* Subscribe to SMFD for redundancy events, needed ?? */
	memset(&svc_info, 0, sizeof(NCSMDS_INFO));
	svc_info.i_mds_hdl = cb->mds_handle;
	svc_info.i_svc_id = NCSMDS_SVC_ID_SMFD;
	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 = smfd_id;

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

	/* Subscribe to SMFND up/down events */
	memset(&svc_info, 0, sizeof(NCSMDS_INFO));
	svc_info.i_mds_hdl = cb->mds_handle;
	svc_info.i_svc_id = NCSMDS_SVC_ID_SMFD;
	svc_info.i_op = MDS_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 = smfnd_id;

	if (ncsmds_api(&svc_info) == NCSCC_RC_FAILURE) {
		LOG_ER("smfd_mds_register: mds subscribe SMFD FAILED\n");
		mds_unregister(cb);
		return NCSCC_RC_FAILURE;
	}

	return NCSCC_RC_SUCCESS;
}
Ejemplo n.º 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;
}
Ejemplo n.º 3
0
uint32_t cpa_mds_register(CPA_CB *cb)
{
	NCSMDS_INFO svc_info;
	MDS_SVC_ID subs_id[2] = { NCSMDS_SVC_ID_CPND, NCSMDS_SVC_ID_CPD };
	uint32_t rc = NCSCC_RC_SUCCESS;
	
	TRACE_ENTER();
	/* STEP1: Get the MDS Handle */
	if (cpa_mds_get_handle(cb) != NCSCC_RC_SUCCESS)
		return NCSCC_RC_FAILURE;

	/* memset the svc_info */
	memset(&svc_info, 0, sizeof(NCSMDS_INFO));

	/* STEP 2 : Install on ADEST with MDS with service ID NCSMDS_SVC_ID_CPA. */
	svc_info.i_mds_hdl = cb->cpa_mds_hdl;
	svc_info.i_svc_id = NCSMDS_SVC_ID_CPA;
	svc_info.i_op = MDS_INSTALL;

	svc_info.info.svc_install.i_yr_svc_hdl = cb->agent_handle_id;
	svc_info.info.svc_install.i_install_scope = NCSMDS_SCOPE_NONE;	/* node specific */
	svc_info.info.svc_install.i_svc_cb = cpa_mds_callback;	/* callback */
	svc_info.info.svc_install.i_mds_q_ownership = false;	/* CPA owns the mds queue */
	svc_info.info.svc_install.i_mds_svc_pvt_ver = CPA_MDS_PVT_SUBPART_VERSION;	/* Private Subpart Version of CPA for Versioning infrastructure */

	if ((rc = ncsmds_api(&svc_info)) != NCSCC_RC_SUCCESS) {
		TRACE_4("CPA MDS:INSTALL failed with return value:%d",rc);
		return rc;
	}
	cb->cpa_mds_dest = svc_info.info.svc_install.o_dest;

	/* STEP 3: Subscribe to CPND up/down events */
	svc_info.i_op = MDS_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 = &subs_id[0];

	if ((rc = ncsmds_api(&svc_info)) != NCSCC_RC_SUCCESS) {
		TRACE_4("CPA MDS:SUBSCRIBE failed with return value:%d",rc);
		goto error;
	}

	return NCSCC_RC_SUCCESS;

 error:
	/* Uninstall with the mds */
	cpa_mds_unregister(cb);
	
	TRACE_LEAVE2("retval = %u", rc);
	return NCSCC_RC_FAILURE;
}
Ejemplo n.º 4
0
/***********************************************************************//**
* @brief	This routine registers the PLMA with MDS.
*
* @return	NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE.
***************************************************************************/
uint32_t plma_mds_register()
{
        uint32_t rc = NCSCC_RC_SUCCESS;
        NCSMDS_INFO svc_info;
        MDS_SVC_ID svc_id[1] = { NCSMDS_SVC_ID_PLMS};
	PLMA_CB *plma_cb = plma_ctrlblk;
	TRACE_ENTER();

        /* STEP 1: the MDS handle for PLMA*/
        rc = plma_mds_get_handle();
        if (NCSCC_RC_SUCCESS != rc) {
                LOG_ER("PLMA - mds get handle failed");
                return rc;
        }
        
        /* STEP 2 : Install with MDS with service ID NCSMDS_SVC_ID_PLMA. */
	memset(&svc_info, 0, sizeof(NCSMDS_INFO));

        svc_info.i_mds_hdl = plma_cb->mds_hdl;
        svc_info.i_svc_id = NCSMDS_SVC_ID_PLMA;
        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 = plma_mds_callback; /* callback */
        svc_info.info.svc_install.i_mds_q_ownership = false;
	/***************************FIXME : MDS svc private sub part ver no?.**/
        svc_info.info.svc_install.i_mds_svc_pvt_ver = PLMA_MDS_PVT_SUBPART_VERSION;

        if (ncsmds_api(&svc_info) == NCSCC_RC_FAILURE) {
                LOG_ER("PLMA - MDS Install Failed");
                return NCSCC_RC_FAILURE;
        }

	/* STEP 3 : Subscribe to PLMS up/down events */
        memset(&svc_info, 0, sizeof(NCSMDS_INFO));
        svc_info.i_mds_hdl = plma_cb->mds_hdl;
        svc_info.i_svc_id = NCSMDS_SVC_ID_PLMA;
        svc_info.i_op = MDS_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("PLMA - MDS Subscribe for PLMS up/down Failed");
                plma_mds_unregister();
                return NCSCC_RC_FAILURE;
        }
	TRACE_LEAVE();
	return rc;

}
Ejemplo n.º 5
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;
}
Ejemplo n.º 6
0
uns32 cpa_mds_register(CPA_CB *cb)
{
	NCSMDS_INFO svc_info;
	MDS_SVC_ID subs_id[2] = { NCSMDS_SVC_ID_CPND, NCSMDS_SVC_ID_CPD };
	uns32 rc = NCSCC_RC_SUCCESS;

	/* STEP1: Get the MDS Handle */
	if (cpa_mds_get_handle(cb) != NCSCC_RC_SUCCESS)
		return NCSCC_RC_FAILURE;

	/* memset the svc_info */
	memset(&svc_info, 0, sizeof(NCSMDS_INFO));

	/* STEP 2 : Install on ADEST with MDS with service ID NCSMDS_SVC_ID_CPA. */
	svc_info.i_mds_hdl = cb->cpa_mds_hdl;
	svc_info.i_svc_id = NCSMDS_SVC_ID_CPA;
	svc_info.i_op = MDS_INSTALL;

	svc_info.info.svc_install.i_yr_svc_hdl = cb->agent_handle_id;
	svc_info.info.svc_install.i_install_scope = NCSMDS_SCOPE_NONE;	/* node specific */
	svc_info.info.svc_install.i_svc_cb = cpa_mds_callback;	/* callback */
	svc_info.info.svc_install.i_mds_q_ownership = FALSE;	/* CPA owns the mds queue */
	svc_info.info.svc_install.i_mds_svc_pvt_ver = CPA_MDS_PVT_SUBPART_VERSION;	/* Private Subpart Version of CPA for Versioning infrastructure */

	if ((rc = ncsmds_api(&svc_info)) != NCSCC_RC_SUCCESS) {
		m_LOG_CPA_CCLL(CPA_API_FAILED, NCSFL_LC_CKPT_MGMT, NCSFL_SEV_ERROR, "MDS:INSTALL", __FILE__, __LINE__,
			       rc);
		return rc;
	}
	cb->cpa_mds_dest = svc_info.info.svc_install.o_dest;

	/* STEP 3: Subscribe to CPND up/down events */
	svc_info.i_op = MDS_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 = &subs_id[0];

	if ((rc = ncsmds_api(&svc_info)) != NCSCC_RC_SUCCESS) {
		m_LOG_CPA_CCLL(CPA_API_FAILED, NCSFL_LC_CKPT_MGMT, NCSFL_SEV_ERROR, "MDS:SUBSCRIBE", __FILE__, __LINE__,
			       rc);
		goto error;
	}

	return NCSCC_RC_SUCCESS;

 error:
	/* Uninstall with the mds */
	cpa_mds_unregister(cb);
	return NCSCC_RC_FAILURE;
}
Ejemplo n.º 7
0
uns32 mqnd_mds_register(MQND_CB *cb)
{
	uns32 rc = NCSCC_RC_SUCCESS;
	NCSMDS_INFO svc_info;
	MDS_SVC_ID svc_id[] = { NCSMDS_SVC_ID_MQD, NCSMDS_SVC_ID_MQA };

	/* STEP1: Get the MDS Handle */
	rc = mqnd_mds_get_handle(cb);

	if (rc != NCSCC_RC_SUCCESS)
		return rc;

	/* memset the svc_info */
	memset(&svc_info, 0, sizeof(NCSMDS_INFO));

	/* STEP 2 : Install on ADEST with MDS with service ID NCSMDS_SVC_ID_MQA. */
	svc_info.i_mds_hdl = cb->my_mds_hdl;
	svc_info.i_svc_id = NCSMDS_SVC_ID_MQND;
	svc_info.i_op = MDS_INSTALL;

	svc_info.info.svc_install.i_yr_svc_hdl = cb->cb_hdl;
	svc_info.info.svc_install.i_install_scope = NCSMDS_SCOPE_NONE;	/* node specific */
	svc_info.info.svc_install.i_svc_cb = mqnd_mds_callback;	/* callback */
	svc_info.info.svc_install.i_mds_q_ownership = FALSE;	/* MQND owns the mds queue */
	svc_info.info.svc_install.i_mds_svc_pvt_ver = MQND_PVT_SUBPART_VERSION;

	if ((rc = ncsmds_api(&svc_info)) != NCSCC_RC_SUCCESS) {
		m_LOG_MQSV_ND(MQND_MDS_INSTALL_FAILED, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, rc, __FILE__, __LINE__);
		return NCSCC_RC_FAILURE;
	}
	m_LOG_MQSV_ND(MQND_MDS_INSTALL_SUCCESS, NCSFL_LC_MQSV_INIT, NCSFL_SEV_NOTICE, rc, __FILE__, __LINE__);
	cb->my_dest = svc_info.info.svc_install.o_dest;

	/* STEP 3: Subscribe to MQD/MQA up/down events */
	svc_info.i_op = MDS_SUBSCRIBE;
	svc_info.info.svc_subscribe.i_num_svcs = 2;
	svc_info.info.svc_subscribe.i_scope = NCSMDS_SCOPE_NONE;
	svc_info.info.svc_subscribe.i_svc_ids = svc_id;

	if ((rc = ncsmds_api(&svc_info)) != NCSCC_RC_SUCCESS) {
		m_LOG_MQSV_ND(MQND_MDS_SUBSCRIBE_FAILED, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, rc, __FILE__, __LINE__);
		/* Uninstall with the mds */
		svc_info.i_op = MDS_UNINSTALL;
		ncsmds_api(&svc_info);
		return NCSCC_RC_FAILURE;
	}
	m_LOG_MQSV_ND(MQND_MDS_SUBSCRIBE_SUCCESS, NCSFL_LC_MQSV_INIT, NCSFL_SEV_NOTICE, rc, __FILE__, __LINE__);
	return NCSCC_RC_SUCCESS;
}
Ejemplo n.º 8
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;	 
}
Ejemplo n.º 9
0
/****************************************************************************
  Name          : cpa_mds_msg_send
 
  Description   : This routine sends the CPA message to CPND.
 
  Arguments     : uint32_t cpa_mds_hdl Handle of CPA
                  MDS_DEST  *destination - destintion to send to
                  CPSV_EVT   *i_evt - CPSV_EVT pointer
                  
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
uint32_t cpa_mds_msg_send(uint32_t cpa_mds_hdl, MDS_DEST *destination, CPSV_EVT *i_evt, uint32_t to_svc)
{
	NCSMDS_INFO mds_info;
	uint32_t rc;

	TRACE_ENTER();

	if (!i_evt)
		return NCSCC_RC_FAILURE;

	memset(&mds_info, 0, sizeof(NCSMDS_INFO));
	mds_info.i_mds_hdl = cpa_mds_hdl;
	mds_info.i_svc_id = NCSMDS_SVC_ID_CPA;
	mds_info.i_op = MDS_SEND;

	/* fill the send structure */
	mds_info.info.svc_send.i_msg = (NCSCONTEXT)i_evt;
	mds_info.info.svc_send.i_priority = MDS_SEND_PRIORITY_MEDIUM;
	mds_info.info.svc_send.i_to_svc = to_svc;
	mds_info.info.svc_send.i_sendtype = MDS_SENDTYPE_SND;

	/* fill the send rsp strcuture */
	mds_info.info.svc_send.info.snd.i_to_dest = *destination;

	/* send the message */
	rc = ncsmds_api(&mds_info);

	if (NCSCC_RC_SUCCESS != rc)
		TRACE_4("Cpa MDS send failed");
	else
		TRACE_1("Cpa MDS send success");

	TRACE_LEAVE();
	return rc;
}
Ejemplo n.º 10
0
/*****************************************************************************
  PROCEDURE NAME : gld_process_send_non_master_info

  DESCRIPTION    : This function sends the corresponding resource
                   nonmaster info to the master

  ARGUMENTS      :gld_cb      - ptr to the GLD control block
                  glnd_rsc
                  node_details
                  status

  RETURNS        :NCSCC_RC_FAILURE/NCSCC_RC_SUCCESS

  NOTES         : None
*****************************************************************************/
static uns32 gld_process_send_non_master_info(GLSV_GLD_CB *gld_cb, GLSV_GLD_GLND_RSC_REF *glnd_rsc,
        GLSV_GLD_GLND_DETAILS *node_details, uns32 status)
{
    GLSV_GLND_EVT glnd_evt;
    NCSMDS_INFO snd_mds;
    uns32 res;

    if (glnd_rsc->rsc_info->node_list->node_id != node_details->node_id) {
        memset(&glnd_evt, '\0', sizeof(GLSV_GLND_EVT));

        glnd_evt.type = GLSV_GLND_EVT_NON_MASTER_INFO;
        glnd_evt.info.non_master_info.dest_id = node_details->dest_id;
        glnd_evt.info.non_master_info.status = status;

        snd_mds.i_mds_hdl = gld_cb->mds_handle;
        snd_mds.i_svc_id = NCSMDS_SVC_ID_GLD;
        snd_mds.i_op = MDS_SEND;
        snd_mds.info.svc_send.i_msg = (NCSCONTEXT)&glnd_evt;
        snd_mds.info.svc_send.i_to_svc = NCSMDS_SVC_ID_GLND;
        snd_mds.info.svc_send.i_priority = MDS_SEND_PRIORITY_HIGH;
        snd_mds.info.svc_send.i_sendtype = MDS_SENDTYPE_SND;
        snd_mds.info.svc_send.info.snd.i_to_dest = glnd_rsc->rsc_info->node_list->dest_id;

        res = ncsmds_api(&snd_mds);
        if (res != NCSCC_RC_SUCCESS) {
            m_LOG_GLD_SVC_PRVDR(GLD_MDS_SEND_ERROR, NCSFL_SEV_ERROR, __FILE__, __LINE__);
            return NCSCC_RC_FAILURE;
        }
    }
    return NCSCC_RC_SUCCESS;

}
Ejemplo n.º 11
0
/****************************************************************************
  Name          : cpa_mds_msg_sync_send
 
  Description   : This routine sends the CPA message to CPND.
 
  Arguments     :
                  uint32_t      cpa_mds_hdl Handle of CPA
                  MDS_DEST  *destination - destintion to send to
                  CPSV_EVT   *i_evt - CPSV_EVT pointer
                  CPSV_EVT   **o_evt - CPSV_EVT pointer to result data
                  timeout - timeout value in 10 ms 
 
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
uint32_t cpa_mds_msg_sync_send(uint32_t cpa_mds_hdl, MDS_DEST *destination, CPSV_EVT *i_evt, CPSV_EVT **o_evt, uint32_t timeout)
{
	NCSMDS_INFO mds_info;
	uint32_t rc;
	
	TRACE_ENTER();

	if (!i_evt)
		return NCSCC_RC_FAILURE;

	memset(&mds_info, 0, sizeof(NCSMDS_INFO));
	mds_info.i_mds_hdl = cpa_mds_hdl;
	mds_info.i_svc_id = NCSMDS_SVC_ID_CPA;
	mds_info.i_op = MDS_SEND;

	/* fill the send structure */
	mds_info.info.svc_send.i_msg = (NCSCONTEXT)i_evt;
	mds_info.info.svc_send.i_priority = MDS_SEND_PRIORITY_MEDIUM;
	mds_info.info.svc_send.i_to_svc = NCSMDS_SVC_ID_CPND;
	mds_info.info.svc_send.i_sendtype = MDS_SENDTYPE_SNDRSP;

	/* fill the send rsp strcuture */
	mds_info.info.svc_send.info.sndrsp.i_time_to_wait = timeout;	/* timeto wait in 10ms */
	mds_info.info.svc_send.info.sndrsp.i_to_dest = *destination;

	/* send the message */
	rc = ncsmds_api(&mds_info);

	if (rc == NCSCC_RC_SUCCESS)
		*o_evt = mds_info.info.svc_send.info.sndrsp.o_rsp;

	TRACE_LEAVE2("retval = %u",rc);
	return rc;
}
Ejemplo n.º 12
0
/***************************************************************************
* Name          : fm_mds_sync_send
*
* Description   : Sends a message to destination in SYNC.     
*                                                                        
* Arguments     :  Control Block, Pointer to message, Priority, Send Type, 
*                  Pointer to MDS DEST, Context of the message.   
*                                                                           
* Return Values :  NCSCC_RC_FAILURE/NCSCC_RC_SUCCESS                       
*                                                                           
* Notes         :  None.  
***************************************************************************/
uint32_t fm_mds_sync_send(FM_CB *fm_cb, NCSCONTEXT msg, NCSMDS_SVC_ID svc_id,
		       MDS_SEND_PRIORITY_TYPE priority, MDS_SENDTYPES send_type,
		       MDS_DEST *i_to_dest, MDS_SYNC_SND_CTXT *mds_ctxt)
{
	NCSMDS_INFO info;
	uint32_t return_val;

	memset(&info, '\0', sizeof(NCSMDS_INFO));

	info.i_mds_hdl = (MDS_HDL)fm_cb->adest_pwe1_hdl;
	info.i_svc_id = NCSMDS_SVC_ID_GFM;
	info.i_op = MDS_SEND;

	info.info.svc_send.i_msg = msg;
	info.info.svc_send.i_priority = priority;
	info.info.svc_send.i_to_svc = svc_id;

	if (mds_ctxt) {
		info.info.svc_send.i_sendtype = send_type;
		info.info.svc_send.info.rsp.i_sender_dest = *i_to_dest;
		info.info.svc_send.info.rsp.i_msg_ctxt = *mds_ctxt;
	} else {
		syslog(LOG_INFO, "fm_mds_sync_send: mds_ctxt NULL");
		return NCSCC_RC_FAILURE;
	}

	return_val = ncsmds_api(&info);

	return return_val;
}
Ejemplo n.º 13
0
/****************************************************************************
  Name          : cpa_mds_msg_send
 
  Description   : This routine sends the CPA message to CPND.
 
  Arguments     : uns32 cpa_mds_hdl Handle of CPA
                  MDS_DEST  *destination - destintion to send to
                  CPSV_EVT   *i_evt - CPSV_EVT pointer
                  
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
uns32 cpa_mds_msg_send(uns32 cpa_mds_hdl, MDS_DEST *destination, CPSV_EVT *i_evt, uns32 to_svc)
{

	NCSMDS_INFO mds_info;
	uns32 rc;

	if (!i_evt)
		return NCSCC_RC_FAILURE;

	memset(&mds_info, 0, sizeof(NCSMDS_INFO));
	mds_info.i_mds_hdl = cpa_mds_hdl;
	mds_info.i_svc_id = NCSMDS_SVC_ID_CPA;
	mds_info.i_op = MDS_SEND;

	/* fill the send structure */
	mds_info.info.svc_send.i_msg = (NCSCONTEXT)i_evt;
	mds_info.info.svc_send.i_priority = MDS_SEND_PRIORITY_MEDIUM;
	mds_info.info.svc_send.i_to_svc = to_svc;
	mds_info.info.svc_send.i_sendtype = MDS_SENDTYPE_SND;

	/* fill the send rsp strcuture */
	mds_info.info.svc_send.info.snd.i_to_dest = *destination;

	/* send the message */
	rc = ncsmds_api(&mds_info);

	return rc;
}
Ejemplo n.º 14
0
/****************************************************************************
  Name          : ntfa_mds_msg_sync_send
 
  Description   : This routine sends the NTFA message to NTFS. The send 
                  operation is a synchronous call that 
                  blocks until the response is received from NTFS.
 
  Arguments     : cb  - ptr to the NTFA CB
                  i_msg - ptr to the NTFSv message
                  o_msg - double ptr to NTFSv message response
 
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE/timeout
 
  Notes         : None.
******************************************************************************/
uns32 ntfa_mds_msg_sync_send(ntfa_cb_t *cb, ntfsv_msg_t *i_msg, ntfsv_msg_t **o_msg, uns32 timeout)
{
	NCSMDS_INFO mds_info;
	uns32 rc = NCSCC_RC_SUCCESS;

	TRACE_ENTER();

	assert(cb != NULL && i_msg != NULL && o_msg != NULL);

	*o_msg = NULL;
	memset(&mds_info, '\0', sizeof(NCSMDS_INFO));
	mds_info.i_mds_hdl = cb->mds_hdl;
	mds_info.i_svc_id = NCSMDS_SVC_ID_NTFA;
	mds_info.i_op = MDS_SEND;

	/* Fill the send structure */
	mds_info.info.svc_send.i_msg = (NCSCONTEXT)i_msg;
	mds_info.info.svc_send.i_to_svc = NCSMDS_SVC_ID_NTFS;
	mds_info.info.svc_send.i_sendtype = MDS_SENDTYPE_SNDRSP;
	mds_info.info.svc_send.i_priority = MDS_SEND_PRIORITY_HIGH;	/* fixme? */
	/* fill the sub send rsp strcuture */
	mds_info.info.svc_send.info.sndrsp.i_time_to_wait = timeout;	/* timeto wait in 10ms FIX!!! */
	mds_info.info.svc_send.info.sndrsp.i_to_dest = cb->ntfs_mds_dest;

	/* send the message */
	if (NCSCC_RC_SUCCESS == (rc = ncsmds_api(&mds_info))) {
		/* Retrieve the response and take ownership of the memory  */
		*o_msg = (ntfsv_msg_t *)mds_info.info.svc_send.info.sndrsp.o_rsp;
		mds_info.info.svc_send.info.sndrsp.o_rsp = NULL;
	} else
		TRACE("ntfa_mds_msg_sync_send FAILED");

	TRACE_LEAVE();
	return rc;
}
Ejemplo n.º 15
0
void plms_mds_unregister()
{
	NCSMDS_INFO arg;
	uns32 rc;
	PLMS_CB * cb = plms_cb;
	
	/* NCSVDA_INFO    vda_info; */

	TRACE_ENTER();

	/* Un-install your service into MDS.
	   No need to cancel the services that are subscribed */
	memset(&arg, 0, sizeof(NCSMDS_INFO));

	arg.i_mds_hdl = cb->mds_hdl;
	arg.i_svc_id = NCSMDS_SVC_ID_PLMS;
	arg.i_op = MDS_UNINSTALL;

	if ((rc = ncsmds_api(&arg)) != NCSCC_RC_SUCCESS) {
		LOG_ER("PLMS - MDS Unregister Failed rc:%u", rc);
		goto done;
       }
done:
	TRACE_LEAVE();
	return;
}
Ejemplo n.º 16
0
/****************************************************************************
  Name          : lga_mds_msg_sync_send
 
  Description   : This routine sends the LGA message to LGS. The send 
                  operation is a synchronous call that 
                  blocks until the response is received from LGS.
 
  Arguments     : cb  - ptr to the LGA CB
                  i_msg - ptr to the LGSv message
                  o_msg - double ptr to LGSv message response
 
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE/timeout
 
  Notes         : None.
******************************************************************************/
uint32_t lga_mds_msg_sync_send(lga_cb_t *cb, lgsv_msg_t *i_msg, lgsv_msg_t **o_msg, uint32_t timeout, uint32_t prio)
{
	NCSMDS_INFO mds_info;
	uint32_t rc = NCSCC_RC_SUCCESS;

	TRACE_ENTER();

	osafassert(cb != NULL && i_msg != NULL && o_msg != NULL);

	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_SEND;

	/* Fill the send structure */
	mds_info.info.svc_send.i_msg = (NCSCONTEXT)i_msg;
	mds_info.info.svc_send.i_to_svc = NCSMDS_SVC_ID_LGS;
	mds_info.info.svc_send.i_sendtype = MDS_SENDTYPE_SNDRSP;
	mds_info.info.svc_send.i_priority = prio;	/* fixme? */
	/* fill the sub send rsp strcuture */
	mds_info.info.svc_send.info.sndrsp.i_time_to_wait = timeout;	/* timeto wait in 10ms FIX!!! */
	mds_info.info.svc_send.info.sndrsp.i_to_dest = cb->lgs_mds_dest;

	/* send the message */
	if (NCSCC_RC_SUCCESS == (rc = ncsmds_api(&mds_info))) {
		/* Retrieve the response and take ownership of the memory  */
		*o_msg = (lgsv_msg_t *)mds_info.info.svc_send.info.sndrsp.o_rsp;
		mds_info.info.svc_send.info.sndrsp.o_rsp = NULL;
	} else
		TRACE("lga_mds_msg_sync_send FAILED: %u", rc);

	TRACE_LEAVE();
	return rc;
}
Ejemplo n.º 17
0
/****************************************************************************
  Name          : lga_mds_msg_async_send
 
  Description   : This routine sends the LGA message to LGS.
 
  Arguments     : cb  - ptr to the LGA CB
                  i_msg - ptr to the LGSv message
 
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
uint32_t lga_mds_msg_async_send(lga_cb_t *cb, struct lgsv_msg *i_msg, uint32_t prio)
{
	NCSMDS_INFO mds_info;
	uint32_t rc = NCSCC_RC_SUCCESS;

	TRACE_ENTER();
	osafassert(cb != NULL && i_msg != NULL);

	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_SEND;

	/* fill the main send structure */
	mds_info.info.svc_send.i_msg = (NCSCONTEXT)i_msg;
	mds_info.info.svc_send.i_priority = prio;
	mds_info.info.svc_send.i_to_svc = NCSMDS_SVC_ID_LGS;
	mds_info.info.svc_send.i_sendtype = MDS_SENDTYPE_SND;

	/* fill the sub send strcuture */
	mds_info.info.svc_send.info.snd.i_to_dest = cb->lgs_mds_dest;

	/* send the message */
	rc = ncsmds_api(&mds_info);
	if (rc != NCSCC_RC_SUCCESS)
		TRACE("failed");

	TRACE_LEAVE();
	return rc;
}
Ejemplo n.º 18
0
/****************************************************************************
  Name          : avnd_mds_red_send
 
  Description   : This routine sends the mds message to specified AvD.
 
  Arguments     : cb       - ptr to the AvND control block
                  msg      - ptr to the message
                  dest     - ptr to the MDS destination
                  adest    - ptr to the MDS adest(anchor) 
 
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : This funtion as of now is only used to send the ACK-NACK msg
                  to AvD. This funtion is introduced to overcome the problem
                  of MDS dropping a msg when the role has changed but MDS in 
                  AvND has not updated its tables about the role change.
                  Due to this problem MDS will try to send the msg to old
                  active which may not be there in the system and hence the
                  msg will be dropped.
                  With this funtion we are sending msg to the new active AvD
                  directly, without looking for its MDS role as seen by AvND. 
******************************************************************************/
uns32 avnd_mds_red_send(AVND_CB *cb, AVND_MSG *msg, MDS_DEST *dest, MDS_DEST *adest)
{
	NCSMDS_INFO mds_info;
	MDS_SEND_INFO *send_info = &mds_info.info.svc_send;
	MDS_SENDTYPE_RED_INFO *send = &send_info->info.red;
	uns32 rc = NCSCC_RC_SUCCESS;
	TRACE_ENTER2("Msg type '%u'", msg->type);

	/* populate the mds params */
	memset(&mds_info, 0, sizeof(NCSMDS_INFO));

	mds_info.i_mds_hdl = cb->mds_hdl;
	mds_info.i_svc_id = NCSMDS_SVC_ID_AVND;
	mds_info.i_op = MDS_SEND;

	send_info->i_msg = (NCSCONTEXT)msg;
	send_info->i_priority = MDS_SEND_PRIORITY_MEDIUM;

	/* this is be used only for ACK NACK for AVD */
	if (msg->type != AVND_MSG_AVD)
		assert(0);

	send_info->i_to_svc = NCSMDS_SVC_ID_AVD;
	send_info->i_sendtype = MDS_SENDTYPE_RED;
	send->i_to_vdest = *dest;
	send->i_to_anc = *adest;	/* assumption-:ADEST is same as anchor */

	/* send the message */
	rc = ncsmds_api(&mds_info);
	if (NCSCC_RC_SUCCESS != rc)
		LOG_CR("AVND MDS send failed: Msg type = %u, vdest = %llu, anchor = %llu",msg->type,send->i_to_vdest,send->i_to_anc);

	TRACE_LEAVE2("rc '%u'", rc);
	return rc;
}
Ejemplo n.º 19
0
/****************************************************************************
  Name          : dts_mds_send_msg
 
  Description   : This routine is use for sending the message to the DTA
 
  Arguments     : cb - ptr to the DTScontrol block
 
  Return Values : NONE
 
  Notes         : None.
******************************************************************************/
uns32 dts_mds_send_msg(DTSV_MSG *msg, MDS_DEST dta_dest, MDS_CLIENT_HDL mds_hdl)
{
	NCSMDS_INFO mds_info;

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

	mds_info.i_mds_hdl = mds_hdl;
	mds_info.i_svc_id = NCSMDS_SVC_ID_DTS;
	mds_info.i_op = MDS_SEND;

	mds_info.info.svc_send.i_msg = msg;
	mds_info.info.svc_send.i_to_svc = NCSMDS_SVC_ID_DTA;

	if (TRUE == msg->rsp_reqd) {
		mds_info.info.svc_send.i_priority = MDS_SEND_PRIORITY_HIGH;
		mds_info.info.svc_send.i_sendtype = MDS_SENDTYPE_RSP;
		mds_info.info.svc_send.info.rsp.i_msg_ctxt = msg->msg_ctxt;
		mds_info.info.svc_send.info.rsp.i_sender_dest = dta_dest;
	} else {
		mds_info.info.svc_send.i_priority = MDS_SEND_PRIORITY_LOW;
		mds_info.info.svc_send.i_sendtype = MDS_SENDTYPE_SND;
		mds_info.info.svc_send.info.snd.i_to_dest = dta_dest;
	}

	if (ncsmds_api(&mds_info) == NCSCC_RC_SUCCESS) {
		return NCSCC_RC_SUCCESS;
	} else {
		return m_DTS_DBG_SINK(NCSCC_RC_FAILURE, "dts_mds_send_msg : MDS send failed");
	}
}
Ejemplo n.º 20
0
/****************************************************************************
  Name          : mqnd_mds_msg_sync_send
 
  Description   : This routine sends the Sinc requests from MQND
 
  Arguments     : cb  - ptr to the MQND CB
                  i_evt - ptr to the MQSV message
                  o_evt - ptr to the MQSV message returned
                  timeout - timeout value in 10 ms 
 
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
uns32 mqnd_mds_msg_sync_send(MQND_CB *cb, uns32 to_svc, MDS_DEST to_dest,
			     MQSV_EVT *i_evt, MQSV_EVT **o_evt, uns32 timeout)
{

	NCSMDS_INFO mds_info;
	uns32 rc;

	if (!i_evt)
		return NCSCC_RC_FAILURE;

	memset(&mds_info, 0, sizeof(NCSMDS_INFO));
	mds_info.i_mds_hdl = cb->my_mds_hdl;
	mds_info.i_svc_id = NCSMDS_SVC_ID_MQND;
	mds_info.i_op = MDS_SEND;

	/* fill the send structure */
	mds_info.info.svc_send.i_msg = (NCSCONTEXT)i_evt;
	mds_info.info.svc_send.i_priority = MDS_SEND_PRIORITY_MEDIUM;
	mds_info.info.svc_send.i_to_svc = to_svc;
	mds_info.info.svc_send.i_sendtype = MDS_SENDTYPE_SNDRSP;

	/* fill the send rsp strcuture */
	mds_info.info.svc_send.info.sndrsp.i_time_to_wait = timeout;	/* timeto wait in 10ms */
	mds_info.info.svc_send.info.sndrsp.i_to_dest = to_dest;

	/* send the message */
	rc = ncsmds_api(&mds_info);
	if (rc == NCSCC_RC_SUCCESS)
		*o_evt = mds_info.info.svc_send.info.sndrsp.o_rsp;
	else {
		m_LOG_MQSV_ND(MQND_MDS_SEND_FAIL, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, rc, __FILE__, __LINE__);
	}

	return rc;
}
Ejemplo n.º 21
0
/*****************************************************************************
  PROCEDURE NAME : gld_process_send_non_master_info
        
  DESCRIPTION    : This function sends the corresponding resource 
                   nonmaster info to the master
        
  ARGUMENTS      :gld_cb      - ptr to the GLD control block
                  glnd_rsc      
                  node_details
                  status
            
  RETURNS        :NCSCC_RC_FAILURE/NCSCC_RC_SUCCESS
        
  NOTES         : None
*****************************************************************************/
static uint32_t gld_process_send_non_master_info(GLSV_GLD_CB *gld_cb, GLSV_GLD_GLND_RSC_REF *glnd_rsc,
					      GLSV_GLD_GLND_DETAILS *node_details, uint32_t status)
{
	GLSV_GLND_EVT glnd_evt;
	NCSMDS_INFO snd_mds;
	uint32_t res;
	TRACE_ENTER();

	if (glnd_rsc->rsc_info->node_list->node_id != node_details->node_id) {
		memset(&glnd_evt, '\0', sizeof(GLSV_GLND_EVT));

		glnd_evt.type = GLSV_GLND_EVT_NON_MASTER_INFO;
		glnd_evt.info.non_master_info.dest_id = node_details->dest_id;
		glnd_evt.info.non_master_info.status = status;

		snd_mds.i_mds_hdl = gld_cb->mds_handle;
		snd_mds.i_svc_id = NCSMDS_SVC_ID_GLD;
		snd_mds.i_op = MDS_SEND;
		snd_mds.info.svc_send.i_msg = (NCSCONTEXT)&glnd_evt;
		snd_mds.info.svc_send.i_to_svc = NCSMDS_SVC_ID_GLND;
		snd_mds.info.svc_send.i_priority = MDS_SEND_PRIORITY_HIGH;
		snd_mds.info.svc_send.i_sendtype = MDS_SENDTYPE_SND;
		snd_mds.info.svc_send.info.snd.i_to_dest = glnd_rsc->rsc_info->node_list->dest_id;

		res = ncsmds_api(&snd_mds);
		if (res != NCSCC_RC_SUCCESS) {
			LOG_ER("MDS Send failed");
			goto end;
		}
	}
 end:	
	TRACE_LEAVE();
	return res;

}
Ejemplo n.º 22
0
/***********************************************************************//**
* @brief	This function un-registers the PLMA Service with MDS.
*
* @return	NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE.
***************************************************************************/
void plma_mds_unregister()
{
	NCSMDS_INFO arg;
	uint32_t rc;
	PLMA_CB *plma_cb = plma_ctrlblk;

	TRACE_ENTER();

	/** 
	 * Un-install your service into MDS.
	 * No need to cancel the services that are subscribed 
	 */
	memset(&arg, 0, sizeof(NCSMDS_INFO));

	arg.i_mds_hdl = plma_cb->mds_hdl;
	arg.i_svc_id = NCSMDS_SVC_ID_PLMA;
	arg.i_op = MDS_UNINSTALL;

	if ((rc = ncsmds_api(&arg)) != NCSCC_RC_SUCCESS) {
		LOG_ER("PLMA - MDS Unregister Failed rc:%u", rc);
		goto done;
       }
done:
	TRACE_LEAVE();
	return;
}
Ejemplo n.º 23
0
/****************************************************************************
  Name          : mqnd_mds_send
 
  Description   : This routine sends the Events from MQND
 
  Arguments     : cb  - ptr to the MQND CB
                  i_evt - ptr to the MQSV message
                  o_evt - ptr to the MQSV message returned
                  timeout - timeout value in 10 ms 
 
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
uns32 mqnd_mds_send(MQND_CB *cb, uns32 to_svc, MDS_DEST to_dest, MQSV_EVT *evt)
{
	NCSMDS_INFO mds_info;
	uns32 rc;

	if (!evt)
		return NCSCC_RC_FAILURE;

	memset(&mds_info, 0, sizeof(NCSMDS_INFO));
	mds_info.i_mds_hdl = cb->my_mds_hdl;
	mds_info.i_svc_id = NCSMDS_SVC_ID_MQND;
	mds_info.i_op = MDS_SEND;

	/* fill the send structure */
	mds_info.info.svc_send.i_msg = (NCSCONTEXT)evt;
	mds_info.info.svc_send.i_priority = MDS_SEND_PRIORITY_MEDIUM;
	mds_info.info.svc_send.i_to_svc = to_svc;
	mds_info.info.svc_send.i_sendtype = MDS_SENDTYPE_SND;
	mds_info.info.svc_send.info.snd.i_to_dest = to_dest;

	/* send the message */
	rc = ncsmds_api(&mds_info);

	if (rc != NCSCC_RC_SUCCESS) {
		m_LOG_MQSV_ND(MQND_MDS_SEND_FAIL, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, rc, __FILE__, __LINE__);
	}

	return rc;
}
Ejemplo n.º 24
0
uns32 mqnd_mds_send_rsp_direct(MQND_CB *cb, MQSV_DSEND_INFO *s_info, MQSV_DSEND_EVT *evt)
{
	NCSMDS_INFO mds_info;
	uns32 rc;

	memset(&mds_info, 0, sizeof(NCSMDS_INFO));
	mds_info.i_mds_hdl = cb->my_mds_hdl;
	mds_info.i_svc_id = NCSMDS_SVC_ID_MQND;
	mds_info.i_op = MDS_DIRECT_SEND;

	/* fill the send structure */
	mds_info.info.svc_direct_send.i_direct_buff = (NCSCONTEXT)evt;
	mds_info.info.svc_direct_send.i_direct_buff_len = sizeof(MQSV_DSEND_EVT);
	mds_info.info.svc_direct_send.i_priority = MDS_SEND_PRIORITY_MEDIUM;
	mds_info.info.svc_direct_send.i_to_svc = s_info->to_svc;
	mds_info.info.svc_direct_send.i_msg_fmt_ver = evt->msg_fmt_version;
	mds_info.info.svc_direct_send.i_sendtype = s_info->stype;

	mds_info.info.svc_direct_send.info.rsp.i_msg_ctxt = s_info->ctxt;
	mds_info.info.svc_direct_send.info.rsp.i_sender_dest = s_info->dest;

	/* send the message */
	rc = ncsmds_api(&mds_info);
	if (rc != NCSCC_RC_SUCCESS) {
		m_LOG_MQSV_ND(MQND_MDS_SND_RSP_DIRECT_FAILED, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, rc, __FILE__,
			      __LINE__);
	}

	return rc;
}
Ejemplo n.º 25
0
/****************************************************************************
  Name          : mqa_mds_msg_sync_reply_direct
 
  Description   : This routine sends the MQA message to MQND.
 
  Arguments     : 
                  uns32 mqa_mds_hdl Handle of MQA
                  MDS_DEST  *destination - destintion to send to
                  MQSV_EVT   *i_evt - MQSV_EVT pointer
                  timeout - timeout value in 10 ms 
                 MDS_SYNC_SND_CTXT *context - context of MDS
 
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
uns32 mqa_mds_msg_sync_reply_direct(uns32 mqa_mds_hdl,
				    MDS_DEST *destination,
				    MQSV_DSEND_EVT *i_evt, uns32 timeout, MDS_SYNC_SND_CTXT *context, uns32 length)
{
	NCSMDS_INFO mds_info;
	uns32 rc;
	MQA_CB *mqa_cb;

	if (!i_evt)
		return NCSCC_RC_FAILURE;

	/* retrieve MQA CB */
	mqa_cb = (MQA_CB *)m_MQSV_MQA_RETRIEVE_MQA_CB;

	if (!mqa_cb) {
		m_LOG_MQSV_A(MQA_CB_RETRIEVAL_FAILED, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, NCSCC_RC_FAILURE, __FILE__,
			     __LINE__);
		mds_free_direct_buff((MDS_DIRECT_BUFF)i_evt);
		return NCSCC_RC_FAILURE;
	}

	/* Before entering any mds send function, the caller locks the control block with LOCK_WRITE. 
	   Unlock the control block before MDS send and lock it after we receive the reply * from MDS.  */
	if (m_NCS_UNLOCK(&mqa_cb->cb_lock, NCS_LOCK_WRITE) != NCSCC_RC_SUCCESS) {
		m_MQSV_MQA_GIVEUP_MQA_CB;
		mds_free_direct_buff((MDS_DIRECT_BUFF)i_evt);
		return NCSCC_RC_FAILURE;
	}

	memset(&mds_info, 0, sizeof(NCSMDS_INFO));
	mds_info.i_mds_hdl = mqa_mds_hdl;
	mds_info.i_svc_id = NCSMDS_SVC_ID_MQA;
	mds_info.i_op = MDS_DIRECT_SEND;

	/* fill the send structure */
	mds_info.info.svc_direct_send.i_direct_buff = (NCSCONTEXT)i_evt;
	mds_info.info.svc_direct_send.i_direct_buff_len = length;

	mds_info.info.svc_direct_send.i_priority = MDS_SEND_PRIORITY_MEDIUM;
	mds_info.info.svc_direct_send.i_to_svc = NCSMDS_SVC_ID_MQA;
	mds_info.info.svc_direct_send.i_msg_fmt_ver = i_evt->msg_fmt_version;

	mds_info.info.svc_direct_send.i_sendtype = MDS_SENDTYPE_SNDRACK;

	/* fill the sendinfo  strcuture */
	mds_info.info.svc_direct_send.info.sndrack.i_msg_ctxt = *context;
	mds_info.info.svc_direct_send.info.sndrack.i_sender_dest = *destination;
	mds_info.info.svc_direct_send.info.sndrack.i_time_to_wait = timeout;	/* timeto wait in 10ms */

	/* send the message. If MDS returns successfully, we assume that
	 * the reply message has been successfully delivered to the sender.  */
	rc = ncsmds_api(&mds_info);

	if (rc != NCSCC_RC_SUCCESS)
		m_LOG_MQSV_A(MQA_MDS_SEND_FAILURE, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, rc, __FILE__, __LINE__);

	m_NCS_LOCK(&mqa_cb->cb_lock, NCS_LOCK_WRITE);
	m_MQSV_MQA_GIVEUP_MQA_CB;
	return rc;
}
Ejemplo n.º 26
0
/****************************************************************************
  Name          : mqa_mds_msg_sync_send
 
  Description   : This routine sends the MQA message to MQND.
 
  Arguments     :
                  NCSCONTEXT mqa_mds_hdl Handle of MQA
                  MDS_DEST  *destination - destintion to send to
                  MQSV_EVT   *i_evt - MQSV_EVT pointer
                  MQSV_EVT   **o_evt - MQSV_EVT pointer to result data
                  timeout - timeout value in 10 ms 
 
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
uns32 mqa_mds_msg_sync_send(uns32 mqa_mds_hdl, MDS_DEST *destination, MQSV_EVT *i_evt, MQSV_EVT **o_evt, uns32 timeout)
{

	NCSMDS_INFO mds_info;
	uns32 rc;
	MQA_CB *mqa_cb;

	if (!i_evt)
		return NCSCC_RC_FAILURE;

	/* retrieve MQA CB */
	mqa_cb = (MQA_CB *)m_MQSV_MQA_RETRIEVE_MQA_CB;

	if (!mqa_cb) {
		m_LOG_MQSV_A(MQA_CB_RETRIEVAL_FAILED, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, 0, __FILE__, __LINE__);
		return NCSCC_RC_FAILURE;
	}

	/* Before entering any mds send function, the API locks the control block.
	 * unlock the control block before send and lock it after we receive the reply
	 */

	/* get the client_info */
	if (m_NCS_UNLOCK(&mqa_cb->cb_lock, NCS_LOCK_WRITE) != NCSCC_RC_SUCCESS) {
		m_MQSV_MQA_GIVEUP_MQA_CB;
		return NCSCC_RC_FAILURE;
	}

	memset(&mds_info, 0, sizeof(NCSMDS_INFO));
	mds_info.i_mds_hdl = mqa_mds_hdl;
	mds_info.i_svc_id = NCSMDS_SVC_ID_MQA;
	mds_info.i_op = MDS_SEND;

	/* fill the send structure */
	mds_info.info.svc_send.i_msg = (NCSCONTEXT)i_evt;
	mds_info.info.svc_send.i_priority = MDS_SEND_PRIORITY_MEDIUM;
	mds_info.info.svc_send.i_to_svc = NCSMDS_SVC_ID_MQND;
	mds_info.info.svc_send.i_sendtype = MDS_SENDTYPE_SNDRSP;

	/* fill the send rsp strcuture */
	mds_info.info.svc_send.info.sndrsp.i_time_to_wait = timeout;	/* timeto wait in 10ms */
	mds_info.info.svc_send.info.sndrsp.i_to_dest = *destination;

	/* send the message */
	rc = ncsmds_api(&mds_info);
	m_NCS_LOCK(&mqa_cb->cb_lock, NCS_LOCK_WRITE);

	if (rc == NCSCC_RC_SUCCESS)
		*o_evt = mds_info.info.svc_send.info.sndrsp.o_rsp;
	else
		m_LOG_MQSV_A(MQA_MDS_SEND_FAILURE, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, rc, __FILE__, __LINE__);

	m_MQSV_MQA_GIVEUP_MQA_CB;
	return rc;

}
Ejemplo n.º 27
0
uns32 mqa_mds_msg_async_send_direct(uns32 mqa_mds_hdl,
				    MDS_DEST *destination,
				    MQSV_DSEND_EVT *i_evt, uns32 to_svc, MDS_SEND_PRIORITY_TYPE priority, uns32 length)
{
	NCSMDS_INFO mds_info;
	uns32 rc;
	MQA_CB *mqa_cb;

	if (!i_evt)
		return NCSCC_RC_FAILURE;

	/* retrieve MQA CB */
	mqa_cb = (MQA_CB *)m_MQSV_MQA_RETRIEVE_MQA_CB;

	if (!mqa_cb) {
		m_LOG_MQSV_A(MQA_CB_RETRIEVAL_FAILED, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, NCSCC_RC_FAILURE, __FILE__,
			     __LINE__);
		mds_free_direct_buff((MDS_DIRECT_BUFF)i_evt);
		return NCSCC_RC_FAILURE;
	}

	/* Before entering any mds send function, the API locks the control block.
	 * unlock the control block before send and lock it after we receive the reply */
	if (m_NCS_UNLOCK(&mqa_cb->cb_lock, NCS_LOCK_WRITE) != NCSCC_RC_SUCCESS) {
		m_MQSV_MQA_GIVEUP_MQA_CB;
		mds_free_direct_buff((MDS_DIRECT_BUFF)i_evt);
		return NCSCC_RC_FAILURE;
	}

	memset(&mds_info, 0, sizeof(NCSMDS_INFO));
	mds_info.i_mds_hdl = mqa_mds_hdl;
	mds_info.i_svc_id = NCSMDS_SVC_ID_MQA;
	mds_info.i_op = MDS_DIRECT_SEND;

	/* fill the send structure */
	mds_info.info.svc_direct_send.i_direct_buff = (NCSCONTEXT)i_evt;
	mds_info.info.svc_direct_send.i_direct_buff_len = length;

	mds_info.info.svc_direct_send.i_priority = priority;
	mds_info.info.svc_direct_send.i_to_svc = to_svc;
	mds_info.info.svc_direct_send.i_msg_fmt_ver = i_evt->msg_fmt_version;
	mds_info.info.svc_direct_send.i_sendtype = MDS_SENDTYPE_SND;

	/* fill the sendinfo  strcuture */
	mds_info.info.svc_direct_send.info.snd.i_to_dest = *destination;

	/* send the message */
	rc = ncsmds_api(&mds_info);
	if (rc != NCSCC_RC_SUCCESS)
		m_LOG_MQSV_A(MQA_MDS_SEND_FAILURE, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, rc, __FILE__, __LINE__);

	m_NCS_LOCK(&mqa_cb->cb_lock, NCS_LOCK_WRITE);
	m_MQSV_MQA_GIVEUP_MQA_CB;
	return rc;
}
Ejemplo n.º 28
0
/****************************************************************************
  Name          : avnd_mds_send
 
  Description   : This routine sends the mds message to AvA or AvD or AvND.
 
  Arguments     : cb       - ptr to the AvND control block
                  msg      - ptr to the message
                  dest     - ptr to the MDS destination
                  mds_ctxt - ptr to the MDS message context 
 
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
uns32 avnd_mds_send(AVND_CB *cb, AVND_MSG *msg, MDS_DEST *dest, MDS_SYNC_SND_CTXT *mds_ctxt)
{
	NCSMDS_INFO mds_info;
	MDS_SEND_INFO *send_info = &mds_info.info.svc_send;
	uns32 rc = NCSCC_RC_SUCCESS;

	TRACE_ENTER2("Msg type '%u'", msg->type);
	/* populate the mds params */
	memset(&mds_info, 0, sizeof(NCSMDS_INFO));

	mds_info.i_mds_hdl = cb->mds_hdl;
	mds_info.i_svc_id = NCSMDS_SVC_ID_AVND;
	mds_info.i_op = MDS_SEND;

	send_info->i_msg = (NCSCONTEXT)msg;
	send_info->i_priority = MDS_SEND_PRIORITY_MEDIUM;

	switch (msg->type) {
	case AVND_MSG_AVD:
		send_info->i_to_svc = NCSMDS_SVC_ID_AVD;
		break;

	case AVND_MSG_AVA:
		send_info->i_to_svc = NCSMDS_SVC_ID_AVA;
		break;

	default:
		assert(0);
		break;
	}

	if (!mds_ctxt) {
		/* regular send */
		MDS_SENDTYPE_SND_INFO *send = &send_info->info.snd;

		send_info->i_sendtype = MDS_SENDTYPE_SND;
		send->i_to_dest = *dest;
	} else {
		/* response message (somebody is waiting for it) */
		MDS_SENDTYPE_RSP_INFO *resp = &send_info->info.rsp;

		send_info->i_sendtype = MDS_SENDTYPE_RSP;
		resp->i_sender_dest = *dest;
		resp->i_msg_ctxt = *mds_ctxt;
	}

	/* send the message */
	rc = ncsmds_api(&mds_info);
	if (NCSCC_RC_SUCCESS != rc)
		LOG_ER("ncsmds_api for %u FAILED, dest=%llx", send_info->i_sendtype, *dest);

	TRACE_LEAVE2("%u", rc);
	return rc;
}
Ejemplo n.º 29
0
/****************************************************************************
* Name          : fm_mds_finalize
*
* Description   : Finalizes with MDS.
*
* Arguments     : pointer to FMS control block. 
*
* Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE 
*
* Notes         : None.
*****************************************************************************/
uint32_t fm_mds_finalize(FM_CB *cb)
{
	NCSMDS_INFO arg;
	uint32_t return_val;

	memset(&arg, 0, sizeof(NCSMDS_INFO));
	arg.i_mds_hdl = (MDS_HDL)cb->adest_pwe1_hdl;
	arg.i_svc_id = NCSMDS_SVC_ID_GFM;
	arg.i_op = MDS_UNINSTALL;

	return_val = ncsmds_api(&arg);

	return return_val;
}
Ejemplo n.º 30
0
/*************************************************************************** 
@brief		: Unregister with MDS.
@return		: NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
*****************************************************************************/
uint32_t smfa_mds_unregister()
{
	NCSMDS_INFO svc_info;
	SMFA_CB *cb = &_smfa_cb;

	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_UNINSTALL;
	if (NCSCC_RC_SUCCESS != ncsmds_api(&svc_info)){
		LOG_ER("SMFA: MDS Unregistration FAILED.");
		return NCSCC_RC_FAILURE;
	}
	return NCSCC_RC_SUCCESS;
}