Пример #1
0
/***********************************************************************//**
* @brief	This routine destroys the PLMA Control block.
*
* @param[in]	destroy_info - A pointer to the NCS_LIB_DESTROY structure.
*
* @return	NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE.
***************************************************************************/
uns32 plma_destroy(NCS_LIB_DESTROY *destroy_info)
{
	PLMA_CB *plma_cb = plma_ctrlblk;
	
	TRACE_ENTER();

	/* MDS unregister. */
	plma_mds_unregister();

	/** flush the EDU handle */
	m_NCS_EDU_HDL_FLUSH(&plma_cb->edu_hdl);	

	/** destroy the client tree */
	plma_client_tree_destroy();

	/** destroy the lock */
	m_NCS_LOCK_DESTROY(&plma_cb->cb_lock);

	/** make reference to plma_cb obsolete */ 
	plma_ctrlblk = NULL;


	TRACE_LEAVE();
	
	return NCSCC_RC_SUCCESS;
}
Пример #2
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;

}
Пример #3
0
/***********************************************************************//**
* @brief	This routine creates and initializes the PLMA Control block.
*
* @param[in]	create_info - A pointer to the structure that has creation 
*			      parameters, if any, are provided to libraries 
*			      in a command-line arguments style.
*
* @return	NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE.
***************************************************************************/
uns32 plma_create(NCS_LIB_CREATE *create_info)
{
	
	PLMA_CB *plma_cb;
	uns32    rc = NCSCC_RC_SUCCESS;
	if(!plma_ctrlblk){
		plma_ctrlblk = &_plma_cb;
	}

	plma_cb = plma_ctrlblk;
	
	TRACE_ENTER();
	/** validate create info */
	if (create_info == NULL){
		LOG_ER("PLMA : INVALID create_info RECEIVED");
		rc =  NCSCC_RC_FAILURE;
		goto end;
	}
	
	
	memset(plma_cb, 0, sizeof(PLMA_CB));


	/** Initialize the PLMA_CB lock */
	if (m_NCS_LOCK_INIT(&plma_cb->cb_lock) != NCSCC_RC_SUCCESS) {
		LOG_ER("PLMA: cb_lock INIT FAILED");
		rc = NCSCC_RC_FAILURE;
		goto lock_fail;
	}
	
	/** initialize the client tree */
	if (plma_client_tree_init() != NCSCC_RC_SUCCESS) {
		LOG_ER("PLMA: CLIENT TREE INIT FAILED");
		rc = NCSCC_RC_FAILURE;
		goto cl_tree_init_fail;
	}
	
	/** initialize the group tree */
	if (plma_group_tree_init() != NCSCC_RC_SUCCESS) {
		LOG_ER("PLMA: GROUP INFO TREE INIT FAILED");
		rc = NCSCC_RC_FAILURE;
		goto gr_tree_init_fail;
	}
	
	/** register with MDS */
	if (plma_mds_register() != NCSCC_RC_SUCCESS) {
		LOG_ER("PLMA: MDS REGISTER FAILED");
		rc = NCSCC_RC_FAILURE;
		goto mds_reg_fail;
	}

	/** EDU initialisation */
	if (m_NCS_EDU_HDL_INIT(&plma_cb->edu_hdl) != NCSCC_RC_SUCCESS) {
		LOG_ER("PLMA: EDU HDL INIT FAILED");
		rc = NCSCC_RC_FAILURE;
		goto edu_init_fail;
	}

	
	plma_sync_with_plms();
	
	TRACE_LEAVE();
	return NCSCC_RC_SUCCESS;
	

edu_init_fail:
	plma_mds_unregister();
mds_reg_fail:
	plma_group_tree_destroy();
gr_tree_init_fail:
	plma_client_tree_destroy();
cl_tree_init_fail:
	/** destroy the lock */
	m_NCS_LOCK_DESTROY(&plma_cb->cb_lock);
lock_fail:
	/** make reference to plma_cb obsolete */ 
	plma_ctrlblk = NULL;
end:
	TRACE_LEAVE();
	return rc;
	

}