static int __init_dts(void)
{
	NCS_LIB_REQ_INFO lib_create;
	char *env;

	/* Init LIB_CREATE request for Server */
	memset(&lib_create, 0, sizeof(lib_create));
	lib_create.i_op = NCS_LIB_REQ_CREATE;
	lib_create.info.create.argc = 0;
	lib_create.info.create.argv = NULL;

	if (ncs_agents_startup() != NCSCC_RC_SUCCESS)
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);

	/* DTSV default service severity level */
	env = getenv("DTS_LOG_ALL");
	if (env != NULL) {
		if (atoi(env)) {
			TRACE("\nINFO:DTS default service severity = ALL\n");
			gl_severity_filter = GLOBAL_SEVERITY_FILTER_ALL;
		}
	}

	TRACE("\nDTSV:DTS:ON");
	if (dts_lib_req(&lib_create) != NCSCC_RC_SUCCESS) {
		fprintf(stderr, "dts_lib_req FAILED\n");
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
	}

	return (NCSCC_RC_SUCCESS);
}
/**************************************************************************\
 *
 * add_new_req_pid_in_list
 *
 * Description: Add new request in the list..
 *
 * Synopsis:
 *
 * Call Arguments:
 *   pid - Process ID for which timeout has occurrend.
 *
 * Returns:
 *   None.
 *
 * Notes:
 *
\**************************************************************************/
uns32 add_new_req_pid_in_list(NCS_OS_PROC_EXECUTE_TIMED_INFO *req, uns32 pid)
{
	SYSF_PID_LIST *list_entry;

	if (module_cb.init == FALSE)
		return m_LEAP_DBG_SINK(NCSCC_RC_SUCCESS);

	if (NULL == (list_entry = m_MMGR_ALLOC_PRO_EXC))
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);

	list_entry->timeout_in_ms = req->i_timeout_in_ms;
	list_entry->exec_cb = req->i_cb;
	list_entry->usr_hdl = req->i_usr_hdl;
	list_entry->exec_hdl = req->o_exec_hdl = NCS_PTR_TO_UNS64_CAST(list_entry);
	list_entry->pid = pid;
	list_entry->pat_node.key_info = (uns8 *)&list_entry->pid;
	list_entry->exec_info_type = SYSF_EXEC_INFO_SIG_CHLD;

	m_NCS_LOCK(&module_cb.tree_lock, NCS_LOCK_WRITE);

	if (NCSCC_RC_SUCCESS != ncs_patricia_tree_add(&module_cb.pid_list, (NCS_PATRICIA_NODE *)list_entry)) {
		m_MMGR_FREE_PRO_EXC(list_entry);
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
	}

	ncs_exc_mdl_start_timer(list_entry);

	m_NCS_UNLOCK(&module_cb.tree_lock, NCS_LOCK_WRITE);

	return NCSCC_RC_SUCCESS;
}
Exemple #3
0
uint32_t hm_init_pools(HM_PMGR *pmgr, HM_POOL *pool)
{
	uint32_t i;
	int32_t last_max = -1;

	for (i = 0; i < HM_POOL_CNT; i++) {
		/* force pool units to be contiguous & non-overlapping */

		if (!((last_max + 1) == pool->min))	/* contiguous */
			return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);

		if (pool->max >= 256)	/* greater than max units */
			return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);

		if (pool->min > pool->max)	/* malformed range spec */
			return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);

		last_max = pool->max;

		pmgr->curr = pool->min;
		pmgr->max = pool->max;

		pmgr++;
		pool++;
	}

	return NCSCC_RC_SUCCESS;
}
Exemple #4
0
static uint32_t vda_uninstantiate(NCS_LIB_REQ_INFO *req)
{
	MDS_DEST gone_vdest;
	bool is_named_vdest;

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

	/* STEP : Check for "reserved" instance names */
	switch (mda_get_inst_name_type(&req->info.uninst.i_inst_name)) {
	case MDA_INST_NAME_TYPE_UNNAMED_VDEST:
		is_named_vdest = false;
		break;

	case MDA_INST_NAME_TYPE_NAMED_VDEST:
		is_named_vdest = true;
		break;

	default:
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
	}

	if (is_named_vdest) {
		return NCSCC_RC_FAILURE;
	}

	/* STEP : Create VDEST locally. */
	if (vda_destroy_vdest_locally(req->info.uninst.i_inst_hdl) != NCSCC_RC_SUCCESS) {
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
	}
	return NCSCC_RC_FAILURE;
}
unsigned int ncs_patricia_tree_init(NCS_PATRICIA_TREE *const pTree, const NCS_PATRICIA_PARAMS *const pParams)
{
	if (pParams == NULL)
		return (unsigned int)m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);

	if ((pParams->key_size < 1)
	    || (pParams->key_size > NCS_PATRICIA_MAX_KEY_SIZE)
	    ) {
		return (unsigned int)m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
	}

	pTree->params = *pParams;

	/* Initialize the root node, which is actually part of the tree structure. */
	pTree->root_node.key_info = (uint8_t *)0;
	pTree->root_node.bit = -1;
	pTree->root_node.left = pTree->root_node.right = &pTree->root_node;
	if ((pTree->root_node.key_info = (NCS_PATRICIA_LEXICAL_STACK *)malloc(pTree->params.key_size)) == NULL) {
		return (unsigned int)m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
	}

	memset(pTree->root_node.key_info, '\0', (uint32_t)pTree->params.key_size);
	pTree->n_nodes = 0;

	return NCSCC_RC_SUCCESS;
}
static int __init_mqnd(void)
{
	NCS_LIB_REQ_INFO lib_create;
	TRACE_ENTER();

	/* Init LIB_CREATE request for Server */
	memset(&lib_create, 0, sizeof(lib_create));
	lib_create.i_op = NCS_LIB_REQ_CREATE;
	lib_create.info.create.argc = 0;
	lib_create.info.create.argv = NULL;

	if (ncs_agents_startup() != NCSCC_RC_SUCCESS) {
		TRACE_4("ncs_agents_startup failed");
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
	}

	/* Init MQND */
	printf("\nMQSV:MQND:ON");
	if (mqnd_lib_req(&lib_create) != NCSCC_RC_SUCCESS) {
		fprintf(stderr, "mqnd_lib_req FAILED\n");
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
	}

	TRACE_LEAVE();
	return (NCSCC_RC_SUCCESS);
}
Exemple #7
0
/*****************************************************************************

   PROCEDURE NAME:   ncs_make_free_cells

   DESCRIPTION:      create a bunch of cells and put them in the free pool.

*****************************************************************************/
uint32_t hm_make_free_cells(HM_PMGR *pmgr)
{
	HM_UNIT *unit;
	HM_CELLS *cells;
	HM_CELL *cell;
	HM_HDL hdl;
	uint32_t i;

	unit = gl_hm.unit[pmgr->curr];

	/* first time this pool has been used ?? */

	if (unit == NULL) {
		if ((unit = (HM_UNIT*) malloc(sizeof(HM_UNIT))) == NULL)
			return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);

		memset(unit, 0, sizeof(HM_UNIT));
		gl_hm.unit[pmgr->curr] = unit;
	}

	/* another million hdls used up ?? */

	/* Check to see if BACKUP has caused random cell banks to be created */

	while (unit->cells[unit->curr] != NULL) {	/* BACKUP has been here!! */
		/* Commenting as condition is always false and it was giving warnings */
		++unit->curr;
	}

	/* Now go make HM_CELL_CNT (4096) new cells */
	if ((cells = (HM_CELLS*) malloc(sizeof(HM_CELLS))) == NULL)
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);

	memset(cells, 0, sizeof(HM_CELLS));

	hdl.idx1 = pmgr->curr;	/* set handle conditions */
	hdl.idx2 = unit->curr;
	hdl.seq_id = 0;

	unit->cells[unit->curr++] = cells;	/* update curr++ for next time */

	for (i = 0; i < HM_CELL_CNT; i++) {	/* carve um up and put in free-po0l */
		hdl.idx3 = i;
		cell = &(cells->cell[i]);
		hm_free_cell(cell, &hdl, false);
	}

	return NCSCC_RC_SUCCESS;
}
Exemple #8
0
/***************************************************************************
* Name          : fm_fm_mds_dec
*                                                                           
* Description   : To decode GFM related messages                                                      
*                                                                        
* Arguments     : Ptr to the MDS callback info struct MDS_CALLBACK_DEC_INFO
*                                                                           
* Return Values : NCSCC_RC_FAILURE/NCSCC_RC_SUCCESS                        
*                                                                           
* Notes         : None.
***************************************************************************/
static uint32_t fm_fm_mds_dec(MDS_CALLBACK_DEC_INFO *dec_info)
{
	GFM_GFM_MSG *msg;
	NCS_UBAID *uba;
	uint8_t *data;
	uint8_t data_buff[256];

	if (NULL == dec_info->io_uba) {
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
	}

	msg = m_MMGR_ALLOC_FM_FM_MSG;
	if (NULL == msg)
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);

	memset(msg, 0, sizeof(GFM_GFM_MSG));

	dec_info->o_msg = msg;
	uba = dec_info->io_uba;

	data = ncs_dec_flatten_space(uba, data_buff, sizeof(uint8_t));
	if (NULL == data)
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);

	msg->msg_type = (GFM_GFM_MSG_TYPE)ncs_decode_8bit(&data);
	ncs_dec_skip_space(uba, sizeof(uint8_t));

	switch (msg->msg_type) {
	case GFM_GFM_EVT_NODE_INFO_EXCHANGE:
		data = ncs_dec_flatten_space(uba, data_buff, 2 * sizeof(uint32_t));
		if (data == NULL) {
			return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
		}

		msg->info.node_info.node_id = (uint32_t)ncs_decode_32bit(&data);
		msg->info.node_info.node_name.length = (uint32_t)ncs_decode_32bit(&data);
		ncs_dec_skip_space(uba, 2 * sizeof(uint32_t));

		ncs_decode_n_octets_from_uba(uba, msg->info.node_info.node_name.value,
					     msg->info.node_info.node_name.length);
		break;
	default:
		syslog(LOG_INFO, "fm_fm_mds_dec: Invalid msg for decoding.");
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
		break;
	}

	return NCSCC_RC_SUCCESS;
}
Exemple #9
0
/*-------------------------------------------------------------------------*\
     FUNCTION NAME : vda_create_vdest_locally (public)
\*-------------------------------------------------------------------------*/
uint32_t vda_create_vdest_locally(uint32_t i_pol, MDS_DEST *i_vdest, MDS_HDL *o_mds_vdest_hdl)
{
	NCSMDS_ADMOP_INFO admop_info;

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

	/* STEP : We first check if the VDEST has already been created locally */
	admop_info.i_op = MDS_ADMOP_VDEST_QUERY;
	admop_info.info.vdest_query.i_local_vdest = *i_vdest;
	if (ncsmds_adm_api(&admop_info) == NCSCC_RC_SUCCESS) {
		/* VDEST already created */
		MDA_TRACE1_ARG1("VDEST already created locally.\n");
		*o_mds_vdest_hdl = admop_info.info.vdest_query.o_local_vdest_hdl;
		return NCSCC_RC_SUCCESS;
	}

	/* STEP : We need to created the VDEST locally, because it is not already 
	   created */
	admop_info.i_op = MDS_ADMOP_VDEST_CREATE;
	admop_info.info.vdest_create.i_vdest = *i_vdest;
	admop_info.info.vdest_create.i_policy = i_pol;
	/* Invoke MDS api */
	if (ncsmds_adm_api(&admop_info) != NCSCC_RC_SUCCESS)
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);

	*o_mds_vdest_hdl = admop_info.info.vdest_create.o_mds_vdest_hdl;
	return NCSCC_RC_SUCCESS;
}
Exemple #10
0
/***************************************************************************\
                        PRIVATE ADA FUNCTIONS
\***************************************************************************/
static uint32_t vda_create(NCS_LIB_REQ_INFO *req)
{
	NCS_SPLR_REQ_INFO splr_req;
	NCS_SPIR_REQ_INFO spir_req;
	memset(&splr_req, 0, sizeof(splr_req));

	/* STEP : Register VDA as a service provider */
	splr_req.i_sp_abstract_name = m_VDA_SP_ABST_NAME;
	splr_req.type = NCS_SPLR_REQ_REG;
	splr_req.info.reg.instantiation_api = vda_lib_req;
	splr_req.info.reg.instantiation_flags = NCS_SPLR_INSTANTIATION_PER_INST_NAME;
	splr_req.info.reg.user_se_api = (NCSCONTEXT)ncsvda_api;

	if (ncs_splr_api(&splr_req) != NCSCC_RC_SUCCESS) {
		return NCSCC_RC_FAILURE;
	}

	/* STEP : Get the MDS-handle to the ADEST */
	memset(&spir_req, 0, sizeof(spir_req));
	spir_req.type = NCS_SPIR_REQ_LOOKUP_CREATE_INST;
	spir_req.i_environment_id = 1;
	spir_req.i_instance_name = m_MDS_SPIR_ADEST_NAME;
	spir_req.i_sp_abstract_name = m_MDS_SP_ABST_NAME;
	spir_req.info.lookup_create_inst.i_inst_attrs.number = 0;

	if (ncs_spir_api(&spir_req) != NCSCC_RC_SUCCESS) {
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
	}
	gl_vda_info.mds_adest_pwe1_hdl = (MDS_HDL)spir_req.info.lookup_create_inst.o_handle;

	return NCSCC_RC_SUCCESS;
}
Exemple #11
0
/****************************************************************************
  Name          :  ncs_mqa_startup

  Description   :  This routine creates a MQSv agent infrastructure to interface
                   with MQSv service. Once the infrastructure is created from
                   then on use_count is incremented for every startup request.

  Arguments     :  - NIL-

  Return Values :  NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE

  Notes         :  None
******************************************************************************/
unsigned int ncs_mqa_startup(void)
{
	NCS_LIB_REQ_INFO lib_create;
	char *value = NULL;

	osaf_mutex_lock_ordie(&s_agent_startup_mutex);
	if (mqa_use_count > 0) {
		/* Already created, so just increment the use_count */
		mqa_use_count++;
		osaf_mutex_unlock_ordie(&s_agent_startup_mutex);
		return NCSCC_RC_SUCCESS;
	}

   /*** Init MQA ***/
	memset(&lib_create, 0, sizeof(lib_create));
	lib_create.i_op = NCS_LIB_REQ_CREATE;
	if (mqa_lib_req(&lib_create) != NCSCC_RC_SUCCESS) {
		osaf_mutex_unlock_ordie(&s_agent_startup_mutex);
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
	} else {
		printf("\nMQSV:MQA:ON");
		mqa_use_count = 1;
	}

	/* Initialize trace system first of all so we can see what is going. */
	if ((value = getenv("MQA_TRACE_PATHNAME")) != NULL) {
		logtrace_init("mqa", value, CATEGORY_ALL);
	}

	osaf_mutex_unlock_ordie(&s_agent_startup_mutex);
	return NCSCC_RC_SUCCESS;
}
Exemple #12
0
/*****************************************************************************

   PROCEDURE NAME:   ncshm_take_hdl

   DESCRIPTION:      If all validation stuff is in order return the associated
                     data that this hdl leads to.

*****************************************************************************/
NCSCONTEXT ncshm_take_hdl(NCS_SERVICE_ID id, uint32_t uhdl)
{
	HM_CELL *cell = NULL;
	HM_HDL *hdl = (HM_HDL *)&uhdl;
	NCSCONTEXT data = NULL;
	uint32_t pool_id = 0;

	pool_id = m_HM_DETM_POOL_FRM_HDL(&uhdl);
	if (pool_id >= HM_POOL_CNT)
		return NULL;

	m_NCS_LOCK(&gl_hm.lock[pool_id], NCS_LOCK_WRITE);

	if ((cell = hm_find_cell(hdl)) != NULL) {
		if ((cell->seq_id == hdl->seq_id) && ((NCS_SERVICE_ID)cell->svc_id == id) && (cell->busy == true)) {
			if (++cell->use_ct == 0) {
				m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);	/* Too many takes()s!! */
			}

			data = cell->data;
		}
	}

	m_NCS_UNLOCK(&gl_hm.lock[pool_id], NCS_LOCK_WRITE);
	return data;
}
Exemple #13
0
/*****************************************************************************

   PROCEDURE NAME:   ncshm_give_hdl

   DESCRIPTION:      Inform Hdl Manager that you are done with associated 
                     data.

*****************************************************************************/
void ncshm_give_hdl(uint32_t uhdl)
{
	HM_CELL *cell = NULL;
	HM_HDL *hdl = (HM_HDL *)&uhdl;
	uint32_t pool_id = 0;

	pool_id = m_HM_DETM_POOL_FRM_HDL(&uhdl);
	if (pool_id >= HM_POOL_CNT)
		return;

	m_NCS_LOCK(&gl_hm.lock[pool_id], NCS_LOCK_WRITE);

	if ((cell = hm_find_cell(hdl)) != NULL) {
		if (cell->seq_id == hdl->seq_id) {
			if (--cell->use_ct < 1) {
				m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);	/* Client BUG..Too many give()s!! */
				cell->use_ct++;
			} else {
				if ((cell->busy == false) && (cell->use_ct == 1))
					hm_unblock_him(cell);
			}
		}
	}
	m_NCS_UNLOCK(&gl_hm.lock[pool_id], NCS_LOCK_WRITE);
}
Exemple #14
0
uns32 ncs_decode_key(uns8 **stream, NCS_KEY *key)
{
	uns8 len;

	key->svc = *(*stream)++;
	key->fmat = *(*stream)++;
	key->type = *(*stream)++;

	switch (key->fmat) {
	case NCS_FMT_NUM:
		key->val.num = ncs_decode_32bit(stream);
		return 7;
		break;
	case NCS_FMT_STR:
		len = *(*stream)++;
		m_KEY_CHK_LEN(key->val.oct.len);
		strncpy((char *)key->val.str, (char *)(*stream), len);
		*stream = *stream + len;	/* move pointer beyond what was consumed */
		return (3 + len + 1);
		break;

	case NCS_FMT_OCT:
		len = *(*stream)++;
		m_KEY_CHK_LEN(key->val.oct.len);
		key->val.oct.len = len;
		memcpy(key->val.oct.data, *stream, len);
		*stream = *stream + len;	/* move pointer beyond what was consumed */
		return (3 + len + 1);
		break;
	}
	return m_LEAP_DBG_SINK(0);
}
/****************************************************************************
  Name          :  ncs_eda_startup

  Description   :  This routine creates a EDSv agent infrastructure to interface
                   with EDSv service. Once the infrastructure is created from
                   then on use_count is incremented for every startup request.

  Arguments     :  - NIL-

  Return Values :  NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE

  Notes         :  None
******************************************************************************/
unsigned int ncs_eda_startup(void)
{
	NCS_LIB_REQ_INFO lib_create;

	m_EDA_AGENT_LOCK;
	if (eda_use_count > 0) {
		/* Already created, so just increment the use_count */
		eda_use_count++;
		m_EDA_AGENT_UNLOCK;
		return NCSCC_RC_SUCCESS;
	}

   /*** Init EDA ***/
	memset(&lib_create, 0, sizeof(lib_create));
	lib_create.i_op = NCS_LIB_REQ_CREATE;
	if (ncs_eda_lib_req(&lib_create) != NCSCC_RC_SUCCESS) {
		m_EDA_AGENT_UNLOCK;
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
	} else {
		m_NCS_DBG_PRINTF("\nEDSV:EDA:ON");
		eda_use_count = 1;
	}

	m_EDA_AGENT_UNLOCK;
	return NCSCC_RC_SUCCESS;
}
Exemple #16
0
/****************************************************************************
 * Name          : gld_quisced_process
 *
 * Description   : Instruction from the GLND to set the orphan flag
 *
 * Arguments     : evt  - Event structure
 *
 * Return Values : NCSCC_RC_SUCCESS/ NCSCC_RC_FAILURE
 *
 * Notes         : None.
 *****************************************************************************/
static uint32_t gld_quisced_process(GLSV_GLD_EVT *evt)
{
	GLSV_GLD_CB *gld_cb = evt->gld_cb;
	SaAisErrorT saErr = SA_AIS_OK;
	uint32_t rc = NCSCC_RC_SUCCESS;
	TRACE_ENTER();

	if ((evt == GLSV_GLD_EVT_NULL) || (gld_cb == NULL)){
		rc = NCSCC_RC_FAILURE;
		goto end;
	}

	if (gld_cb->is_quiasced) {
		gld_cb->ha_state = SA_AMF_HA_QUIESCED;
		/* Give up our IMM OI implementer role */
		rc = immutil_saImmOiImplementerClear(gld_cb->immOiHandle);
		if (rc != SA_AIS_OK) {
			LOG_ER("saImmOiImplementerClear failed: err = %d", rc);
		}
		gld_cb->is_impl_set = false;
		rc = glsv_gld_mbcsv_chgrole(gld_cb);
		if (rc != NCSCC_RC_SUCCESS) {
			m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
			goto end;
		}
		saAmfResponse(gld_cb->amf_hdl, gld_cb->invocation, saErr);
		gld_cb->is_quiasced = false;
	}
 end:
	TRACE_LEAVE();
	return rc;

}
/***********************************************************************//**
* @brief	This routine creates a PLMSv agent infrastructure to interface
*		with PLMSv service. Once the infrastructure is created from
*		then on use_count is incremented for every startup request.
*
* @return	NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE.
***************************************************************************/
uns32 ncs_plma_startup()
{
	NCS_LIB_REQ_INFO lib_create;
		
	TRACE_ENTER();
	m_PLM_AGENT_LOCK;
	if (plma_use_count > 0) {
		/** Already created, so just increment the use_count */
		plma_use_count++;
		m_PLM_AGENT_UNLOCK;
		return NCSCC_RC_SUCCESS;
	}
	/** Initialize PLMA library */
	memset(&lib_create, 0, sizeof(lib_create));
	lib_create.i_op = NCS_LIB_REQ_CREATE;
	if (plma_lib_req(&lib_create) != NCSCC_RC_SUCCESS) {
		m_PLM_AGENT_UNLOCK;
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
	}else{
		/** Initialize the library for the first time */
		m_NCS_DBG_PRINTF("\nPLMSV:PLMA:ON");
		plma_use_count = 1;
	}
	m_PLM_AGENT_UNLOCK;

	TRACE_LEAVE();
	return NCSCC_RC_SUCCESS;
}
Exemple #18
0
/****************************************************************************
  Name          : cpa_mds_callback
 
  Description   : This callback routine will be called by MDS on event arrival
 
  Arguments     : info - pointer to the mds callback info
 
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
uns32 cpa_mds_callback(struct ncsmds_callback_info *info)
{
	CPA_CB *cpa_cb = NULL;
	uns32 rc = NCSCC_RC_FAILURE;

	if (info == NULL)
		return rc;

	cpa_cb = (CPA_CB *)ncshm_take_hdl(NCS_SERVICE_ID_CPA, gl_cpa_hdl);

	if (!cpa_cb) {
		m_LOG_CPA_CCLL(CPA_PROC_FAILED, NCSFL_LC_CKPT_MGMT, NCSFL_SEV_ERROR, "mds_callback:HDL_TAKE", __FILE__,
			       __LINE__, rc);
		return m_LEAP_DBG_SINK(rc);
	}

	switch (info->i_op) {
	case MDS_CALLBACK_COPY:
		rc = NCSCC_RC_FAILURE;
		break;

	case MDS_CALLBACK_ENC_FLAT:
		rc = cpa_mds_enc_flat(cpa_cb, &info->info.enc_flat);
		break;

	case MDS_CALLBACK_DEC_FLAT:
		rc = cpa_mds_dec_flat(cpa_cb, &info->info.dec_flat);
		break;
	case MDS_CALLBACK_RECEIVE:
		rc = cpa_mds_rcv(cpa_cb, &info->info.receive);
		break;

	case MDS_CALLBACK_SVC_EVENT:
		rc = cpa_mds_svc_evt(cpa_cb, &info->info.svc_evt);
		break;

	case MDS_CALLBACK_ENC:
		rc = cpa_mds_enc(cpa_cb, &info->info.enc);
		break;

	case MDS_CALLBACK_DEC:
		rc = cpa_mds_dec(cpa_cb, &info->info.dec);
		break;

	default:
		m_LOG_CPA_CCLL(CPA_PROC_FAILED, NCSFL_LC_CKPT_MGMT, NCSFL_SEV_INFO, "mds_callback:unknown_op", __FILE__,
			       __LINE__, rc);
		break;
	}

	if (rc != NCSCC_RC_SUCCESS) {
		m_LOG_CPA_CCLL(CPA_PROC_FAILED, NCSFL_LC_CKPT_MGMT, NCSFL_SEV_INFO, "mds_callback", __FILE__, __LINE__,
			       rc);
	}

	ncshm_give_hdl(gl_cpa_hdl);

	return rc;
}
Exemple #19
0
uint32_t ncslpg_create(NCSLPG_OBJ *pg)
{
	if (pg->open == true)
		m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
	pg->open = true;
	pg->inhere = 0;
	return NCSCC_RC_SUCCESS;
}
Exemple #20
0
HM_CELL *hm_find_cell(HM_HDL *hdl)
{
	HM_UNIT *unit;
	HM_CELLS *spot;

	if ((unit = gl_hm.unit[hdl->idx1]) == NULL) {
		m_LEAP_DBG_SINK(NULL);
		return NULL;
	}

	if ((spot = unit->cells[hdl->idx2]) == NULL) {
		m_LEAP_DBG_SINK(NULL);
		return NULL;
	}

	return &(spot->cell[hdl->idx3]);
}
Exemple #21
0
uns8 *ncs_flatten_n_octets(USRBUF *u, uns8 *os, uns32 count)
{
	if (u == BNULL) {
		m_LEAP_DBG_SINK(0);
		return NULL;
	}

	return (uns8 *)m_MMGR_DATA_AT_START(u, count, (char *)os);
}
Exemple #22
0
/***************************************************************************
* Name          : fm_fm_mds_enc
*
* Description   :  To encode GFM related messages
*                                                                        
* Arguments     :Pointer to the MDS callback info struct MDS_CALLBACK_DEC_INFO
*                                                                           
* Return Values :  NCSCC_RC_FAILURE/NCSCC_RC_SUCCESS                       
*                                                                           
* Notes         :    None.
***************************************************************************/
static uint32_t fm_fm_mds_enc(MDS_CALLBACK_ENC_INFO *enc_info)
{
	GFM_GFM_MSG *msg;
	NCS_UBAID *uba;
	uint8_t *data;

	if (NULL == enc_info)
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);

	if ((NULL == enc_info->i_msg) || (NULL == enc_info->io_uba))
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);

	uba = enc_info->io_uba;
	msg = (GFM_GFM_MSG *)enc_info->i_msg;

	data = ncs_enc_reserve_space(uba, sizeof(uint8_t));
	if (NULL == data)
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);

	ncs_encode_8bit(&data, msg->msg_type);
	ncs_enc_claim_space(uba, sizeof(uint8_t));

	switch (msg->msg_type) {
	case GFM_GFM_EVT_NODE_INFO_EXCHANGE:
		data = ncs_enc_reserve_space(uba, (2 * sizeof(uint32_t)));
		if (data == NULL) {
			m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
		}

		ncs_encode_32bit(&data, msg->info.node_info.node_id);
		ncs_encode_32bit(&data, msg->info.node_info.node_name.length);
		ncs_enc_claim_space(uba, 2 * sizeof(uint32_t));
		ncs_encode_n_octets_in_uba(uba, msg->info.node_info.node_name.value,
					   (uint32_t)msg->info.node_info.node_name.length);
		break;

	default:
		syslog(LOG_INFO, "fm_fm_mds_enc: Invalid msg type for encode.");
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
		break;
	}

	return NCSCC_RC_SUCCESS;
}
Exemple #23
0
static uint32_t vda_destroy(NCS_LIB_REQ_INFO *req)
{
	NCS_SPLR_REQ_INFO splr_req;
	NCS_SPIR_REQ_INFO spir_req;

	NCSMDS_INFO svc_info;

	if (vda_vdest_create == true) {
		/* STEP : Uninstall from ADEST with MDS as service NCSMDS_SVC_ID_VDA. */
		memset(&svc_info, 0, sizeof(svc_info));
		svc_info.i_mds_hdl = gl_vda_info.mds_adest_pwe1_hdl;
		svc_info.i_svc_id = NCSMDS_SVC_ID_VDA;
		svc_info.i_op = MDS_UNINSTALL;
		svc_info.info.svc_uninstall.i_msg_free_cb = NULL;	/* NULL for callback-model services */
		/* Invoke MDS api */
		if (ncsmds_api(&svc_info) != NCSCC_RC_SUCCESS)
			return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);

	}
	/* STEP : Release the use of ADEST MDS handle */
	memset(&spir_req, 0, sizeof(spir_req));
	spir_req.type = NCS_SPIR_REQ_REL_INST;
	spir_req.i_environment_id = 1;
	spir_req.i_instance_name = m_MDS_SPIR_ADEST_NAME;
	spir_req.i_sp_abstract_name = m_MDS_SP_ABST_NAME;
	spir_req.info.rel_inst = 0;	/* dummy value */
	if (ncs_spir_api(&spir_req) != NCSCC_RC_SUCCESS) {
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
	}
	gl_vda_info.mds_adest_pwe1_hdl = 0;

	/* STEP : Deregister VDA as a service provider */
	memset(&splr_req, 0, sizeof(splr_req));
	splr_req.i_sp_abstract_name = m_VDA_SP_ABST_NAME;
	splr_req.type = NCS_SPLR_REQ_DEREG;
	splr_req.info.dereg.dummy = 0;
	if (ncs_splr_api(&splr_req) != NCSCC_RC_SUCCESS) {
		return NCSCC_RC_FAILURE;
	}

	vda_vdest_create = false;

	return NCSCC_RC_SUCCESS;
}
Exemple #24
0
uint32_t hm_pool_id(uint8_t unit)
{
	uint32_t i = 0;

	for (i = 0; i < HM_POOL_CNT; i++) {
		if (gl_hpool[i].max >= unit)
			return i;
	}
	return m_LEAP_DBG_SINK(i);	/* This can't/shouldn't happen really */
}
uns32 leap_env_init()
{

	if (leap_env_init_count++ != 0) {
		return NCSCC_RC_SUCCESS;
	}

	/* 
	 ** Change buffering type for the stdout stream to line buffered.
	 ** Otherwise printf output will be block buffered and not immidiately
	 ** printed to file.
	 ** TODO: to be removed in OpenSAF 4.0
	 */
	if (setvbuf(stdout, (char *)NULL, _IOLBF, 0) != 0) {
		fprintf(stderr, "%s:%d - setvbuf failed\n", __FILE__, __LINE__);
		return NCSCC_RC_FAILURE;
	}

	m_NCS_DBG_PRINTF("\n\n\nINITIALIZING LEAP ENVIRONMENT\n");

	/* initialize OS target */
	m_NCS_OS_TARGET_INIT;
	ncs_os_atomic_init();

#if (NCSL_ENV_INIT_TMR == 1)
	/* initialize LEAP Timer Service */
	if (sysfTmrCreate() != NCSCC_RC_SUCCESS) {
		printf("\nleap_env_init: FAILED to initialize Timer Service\n");
		return NCSCC_RC_FAILURE;
	}
#endif   /* #if (NCSL_ENV_INIT_TMR == 1) */

#if (NCSL_ENV_INIT_HM == 1)
	/* initialize Handle Manager */
	if (ncshm_init() != NCSCC_RC_SUCCESS) {
		printf("\nleap_env_init: FAILED to initialize Handle Manager\n");

#if (NCSL_ENV_INIT_TMR == 1)
		(void)sysfTmrDestroy();
#endif
		return NCSCC_RC_FAILURE;
	}
#endif   /* #if (NCSL_ENV_INIT_HM == 1) */

	/* Initialize script execution control block */
	if (NCSCC_RC_SUCCESS != init_exec_mod_cb()) {
		/* Log error */
		printf("\nleap_env_init: FAILED to initialize Execute Module CB \n");

		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
	}
	m_NCS_DBG_PRINTF("\nDONE INITIALIZING LEAP ENVIRONMENT\n");

	return NCSCC_RC_SUCCESS;
}
/**************************************************************************\
 *
 * start_exec_mod_cb
 *
 * Description: Initialize execute module control block.
 *
 * Synopsis:
 *
 * Call Arguments:
 *   SUCCESS/FAILURE
 *
 * Returns:
 *   None.
 *
 * Notes:
 *
\**************************************************************************/
uns32 start_exec_mod_cb(void)
{
	NCS_PATRICIA_PARAMS pt_params;
	int spair[2];

	pt_params.key_size = sizeof(uns32);

	if (ncs_patricia_tree_init(&module_cb.pid_list, &pt_params) != NCSCC_RC_SUCCESS) {
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
	}

	if (0 != socketpair(AF_UNIX, SOCK_DGRAM, 0, spair)) {
		perror("init_exec_mod_cb: socketpair: ");
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
	}

	module_cb.read_fd = spair[0];
	module_cb.write_fd = spair[1];

	/* Create a task which will handle the signal and give call back  */

	if (m_NCS_TASK_CREATE((NCS_OS_CB)ncs_exec_mod_hdlr,
			      0,
			      NCS_EXEC_MOD_TASKNAME,
			      NCS_EXEC_MOD_PRIORITY,
			      NCS_EXEC_MOD_STACKSIZE, &module_cb.em_task_handle) != NCSCC_RC_SUCCESS) {
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);;
	}

	if (m_NCS_TASK_START(module_cb.em_task_handle) != NCSCC_RC_SUCCESS) {
		m_NCS_TASK_RELEASE(module_cb.em_task_handle);
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);;
	}

	module_cb.init = TRUE;

	m_NCS_SIGNAL(SIGCHLD, ncs_exec_module_signal_hdlr);

	return NCSCC_RC_SUCCESS;

}
Exemple #27
0
/****************************************************************************
  Name          : mqa_mds_callback
 
  Description   : This callback routine will be called by MDS on event arrival
 
  Arguments     : info - pointer to the mds callback info
 
  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
  Notes         : None.
******************************************************************************/
uns32 mqa_mds_callback(struct ncsmds_callback_info *info)
{
	MQA_CB *mqa_cb = NULL;
	uns32 rc = NCSCC_RC_SUCCESS;

	if (info == NULL)
		return rc;

	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 m_LEAP_DBG_SINK(rc);
	}

	switch (info->i_op) {
	case MDS_CALLBACK_COPY:
		rc = mqa_mds_cpy(mqa_cb, &info->info.cpy);
		break;
	case MDS_CALLBACK_ENC:
		rc = mqa_mds_enc(mqa_cb, &info->info.enc);
		break;
	case MDS_CALLBACK_DEC:
		rc = mqa_mds_dec(mqa_cb, &info->info.dec);
		break;
	case MDS_CALLBACK_ENC_FLAT:
		rc = mqa_mds_enc(mqa_cb, &info->info.enc_flat);
		break;

	case MDS_CALLBACK_DEC_FLAT:
		rc = mqa_mds_dec(mqa_cb, &info->info.dec_flat);
		break;
	case MDS_CALLBACK_RECEIVE:
		rc = mqa_mds_rcv(mqa_cb, &info->info.receive);
		break;

	case MDS_CALLBACK_SVC_EVENT:
		rc = mqa_mds_svc_evt(mqa_cb, &info->info.svc_evt);
		break;

	default:
		m_LOG_MQSV_A(MQA_MDS_CALLBK_UNKNOWN_OP, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, 0, __FILE__, __LINE__);
		break;
	}

	if (rc != NCSCC_RC_SUCCESS) {
		m_LOG_MQSV_A(MQA_MDS_CALLBK_FAILURE, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, rc, __FILE__, __LINE__);
	}

	m_MQSV_MQA_GIVEUP_MQA_CB;

	return rc;
}
Exemple #28
0
static int __init_gld(void)
{
    NCS_LIB_REQ_INFO lib_create;

    /* Init LIB_CREATE request for Server */
    memset(&lib_create, 0, sizeof(lib_create));
    lib_create.i_op = NCS_LIB_REQ_CREATE;
    lib_create.info.create.argc = 0;
    lib_create.info.create.argv = NULL;

    if (ncs_agents_startup() != NCSCC_RC_SUCCESS)
        return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);

    /* Init GLD */
    TRACE("GLSV:GLD:ON");
    if (gld_lib_req(&lib_create) != NCSCC_RC_SUCCESS) {
        fprintf(stderr, "gld_lib_req FAILED\n");
        return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
    }

    return (NCSCC_RC_SUCCESS);
}
Exemple #29
0
uint32_t ncshm_init(void)
{
	/* Hdl Mgr does bit-fields; here we do a few exercises up front to make */
	/* sure YOUR target system can cope with bit-stuff we do............... */
	HM_HDL ha;
	HM_HDL hb;
	HM_HDL *p_hdl;
	uint32_t *p_temp;
	uint32_t cnt = 0;

	gl_im_created++;
	if (gl_im_created > 1)
		return NCSCC_RC_SUCCESS;

	assert(sizeof(HM_FREE) == sizeof(HM_CELL));	/* must be same size */

	assert(sizeof(uint32_t) == sizeof(HM_HDL));	/* must be same size */

	ha.idx1 = 1;		/* make up a fake handle with values */
	ha.idx2 = 2;
	ha.idx3 = 3;
	ha.seq_id = 6;

	/* cast to INT PTR, to HDL PTR, deref to HDL; bit-fields still stable ? */

	p_temp = (uint32_t *)(&ha);
	p_hdl = (HM_HDL *)p_temp;
	hb = *p_hdl;

	/* are all the bitfields still in tact?? .............................. */

	assert(((ha.idx1 == hb.idx1) && (ha.idx2 == hb.idx2) && (ha.idx3 == hb.idx3) && (ha.seq_id == hb.seq_id)));

	/* Done with basic tests; now we move on to normal initialization      */

	memset(&gl_hm, 0, sizeof(HM_CORE));
	for (cnt = 0; cnt < HM_POOL_CNT; cnt++)
		m_NCS_LOCK_INIT(&gl_hm.lock[cnt]);

	if (hm_init_pools(gl_hm.pool, gl_hpool) != NCSCC_RC_SUCCESS)
		return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);

	return NCSCC_RC_SUCCESS;
}
Exemple #30
0
USRBUF *ncs_decode_n_octets(USRBUF *u, uns8 *os, uns32 count)
{

	char *s;

  /** Xtract "count" # of octets from the packet...
   **/
	if ((s = m_MMGR_DATA_AT_START(u, count, (char *)os)) != (char *)os) {
		if (s == 0) {
			m_LEAP_DBG_SINK(0);
			return (USRBUF *)0;
		}
		memcpy(os, s, (size_t)count);
	}

  /** Strip off "count" number of octets from the packet...
   **/
	m_MMGR_REMOVE_FROM_START(&u, count);
	return u;		/* Return the new head */

}