/***********************************************************************//** * @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; }
/**************************************************************************** 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; }
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; }
/*************************************************************************** @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; }
/**************************************************************************** * 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; }
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; }
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; }
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; }
/**************************************************************************** * 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; }
/**************************************************************************** * 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; }
/**************************************************************************** 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; }