osaf/libs/agents/saf/amfa/amf_agent.cc | 145 +++++++++++++++++++++++++++- osaf/libs/agents/saf/amfa/ava_hdl.cc | 39 ++++-- osaf/libs/agents/saf/amfa/ava_mds.cc | 54 ++++++++++- osaf/libs/agents/saf/amfa/ava_op.cc | 61 +++++++++++ osaf/libs/agents/saf/amfa/include/ava_cb.h | 6 + osaf/libs/agents/saf/amfa/include/ava_hdl.h | 22 +++- osaf/libs/agents/saf/amfa/include/ava_mds.h | 4 +- 7 files changed, 309 insertions(+), 22 deletions(-)
1)Because of different AMF callback struture correponding to each of B.01.01 B.04.01, this patch introduces an internal callback structure OsafAmfCallbacksT. It consists of callback from each AMF version. Callback for each intialization needs to be maintained internally in AVA_HDL_REC. With this internal structure, same handle can used interanlly for any saAmfInitialize_<*> of AMF service. Also added utility functions to copy callbacks from AMF callbacks structure to this internal one. AMF agent will use OsafAmfCallbacksT internally instead of SaAmfCallbacksT_<*>. 2)Implementation of saAmfInitialize_5() in ava_api.c. 3)Now saAmfRegister() also sends SAF version to AMFND. TODO:In saAmf_B_04_02, rename saAmfInitialize_5(0 to saAmfInitialize_o4(). diff --git a/osaf/libs/agents/saf/amfa/amf_agent.cc b/osaf/libs/agents/saf/amfa/amf_agent.cc --- a/osaf/libs/agents/saf/amfa/amf_agent.cc +++ b/osaf/libs/agents/saf/amfa/amf_agent.cc @@ -63,6 +63,7 @@ SaAisErrorT AmfAgent::Initialize(SaAmfHa AVA_HDL_DB *hdl_db = 0; AVA_HDL_REC *hdl_rec = 0; SaAisErrorT rc = SA_AIS_OK; + OsafAmfCallbacksT osaf_cbks; TRACE_ENTER(); if (!o_hdl || !io_ver) { @@ -115,9 +116,12 @@ SaAisErrorT AmfAgent::Initialize(SaAmfHa /* get the ptr to the hdl db */ hdl_db = &cb->hdl_db; + memset(&osaf_cbks, 0, sizeof(OsafAmfCallbacksT)); + if (reg_cbks != NULL) + amf_copy_from_SaAmfCallbacksT_to_OsafAmfCallbacksT(&osaf_cbks, reg_cbks); /* create the hdl record & store the callbacks */ - if (!(hdl_rec = ava_hdl_rec_add(cb, hdl_db, reg_cbks))) { + if (!(hdl_rec = ava_hdl_rec_add(cb, hdl_db, &osaf_cbks))) { rc = SA_AIS_ERR_NO_MEMORY; goto done; } @@ -513,10 +517,28 @@ SaAisErrorT AmfAgent::ComponentRegister( goto done; } + if (!m_AVA_HDL_ARE_REG_CBKS_PRESENT(hdl_rec, proxy_comp_name)) { + TRACE("Required callbacks were not specified in saAmfInitialize"); + rc = SA_AIS_ERR_INIT; + goto done; + } + + /* For B.04.02 init, check OsafCsiAttributeChangeCallbackT was supplied during saAmfInitialize_5 */ + if ((cb->version.releaseCode == 'B') && + (cb->version.majorVersion == 0x04) && (cb->version.minorVersion == 0x02) && + (hdl_rec->reg_cbk.osafCsiAttributeChangeCallback == NULL)) { + TRACE("Required osafCsiAttributeChangeCallback was not specified in saAmfInitialize_5"); + rc = SA_AIS_ERR_INIT; + goto done; + } + /* populate & send the register message */ if (proxy_comp_name) pcomp_name = *proxy_comp_name; m_AVA_COMP_REG_MSG_FILL(msg, cb->ava_dest, hdl, *comp_name, pcomp_name); + //Fill SAF version of component. + msg.info.api_info.param.reg.version = cb->version; + rc = static_cast<SaAisErrorT>(ava_mds_send(cb, &msg, &msg_rsp)); if (NCSCC_RC_SUCCESS == rc) { osafassert(AVSV_AVND_AMF_API_RESP_MSG == msg_rsp->type); @@ -2090,6 +2112,7 @@ SaAisErrorT AmfAgent::Initialize_4(SaAmf AVA_HDL_DB *hdl_db = 0; AVA_HDL_REC *hdl_rec = 0; SaAisErrorT rc = SA_AIS_OK; + OsafAmfCallbacksT osaf_cbks; TRACE_ENTER(); /* TODO: check cluster membership, if node is not a member answer back with SA_AIS_ERR_UNAVAILABLE */ @@ -2161,8 +2184,11 @@ SaAisErrorT AmfAgent::Initialize_4(SaAmf goto done; } + memset(&osaf_cbks, 0, sizeof(OsafAmfCallbacksT)); + if (reg_cbks != NULL) + amf_copy_from_SaAmfCallbacksT_4_to_OsafAmfCallbacksT(&osaf_cbks, reg_cbks); /* create the hdl record & store the callbacks */ - if (!(hdl_rec = ava_hdl_rec_add(cb, hdl_db, (SaAmfCallbacksT*)reg_cbks))) { + if (!(hdl_rec = ava_hdl_rec_add(cb, hdl_db, &osaf_cbks))) { rc = SA_AIS_ERR_NO_MEMORY; goto done; } @@ -2764,3 +2790,118 @@ done: TRACE_LEAVE2("rc:%u", rc); return rc; } + +/** + * @brief: Implements new version of saAmfInitialize to enable application to + * register for new callback OsafCsiAttributeChangeCallbackT along with + * old ones. This version of initialize API implements saAmfInitialize_5() + * with SAF version updated to B.04.02. + * + * @param o_hdl (ptr to SaAmfHandleT). + * @param reg_cbks (ptr to SaAmfCallbacksT_5) + * @param io_ver (ptr to SaVersionT). + * + * Return Values : Refer to SAI-AIS specification for various return values. + */ +SaAisErrorT saAmfInitialize_5(SaAmfHandleT *o_hdl, const SaAmfCallbacksT_5 *reg_cbks, SaVersionT *io_ver) +{ + AVA_CB *cb = 0; + AVA_HDL_DB *hdl_db = 0; + AVA_HDL_REC *hdl_rec = 0; + SaAisErrorT rc = SA_AIS_OK; + OsafAmfCallbacksT osaf_cbks; + TRACE_ENTER(); + + if (!o_hdl || !io_ver) { + TRACE_2("NULL arguments being passed: SaAmfHandleT and SaVersionT arguments should be non NULL"); + rc = SA_AIS_ERR_INVALID_PARAM; + goto done; + } + + if((io_ver->releaseCode != 'B') || (io_ver->majorVersion != 0x04) || (io_ver->minorVersion != 0x02)) { + TRACE_2("Invalid AMF version specified, supported version is: ReleaseCode = 'B', \ + majorVersion = 0x04, minorVersion = 0x02"); + rc = SA_AIS_ERR_VERSION; + } + + io_ver->releaseCode = 'B'; + io_ver->majorVersion = 4; + io_ver->minorVersion = 2; + + if (SA_AIS_OK != rc) + goto done; + + /* Initialize the environment */ + if (ncs_agents_startup() != NCSCC_RC_SUCCESS) { + TRACE_2("Agents startup failed"); + rc = SA_AIS_ERR_LIBRARY; + goto done; + } + + /* Create AVA/CLA CB */ + if (ncs_ava_startup() != NCSCC_RC_SUCCESS) { + ncs_agents_shutdown(); + rc = SA_AIS_ERR_LIBRARY; + goto done; + } + + /* retrieve AvA CB */ + if (!(cb = (AVA_CB *)ncshm_take_hdl(NCS_SERVICE_ID_AVA, gl_ava_hdl))) { + TRACE_4("SA_AIS_ERR_LIBRARY: Unable to retrieve cb handle"); + rc = SA_AIS_ERR_LIBRARY; + goto done; + } + m_NCS_LOCK(&cb->lock, NCS_LOCK_WRITE); + + cb->version.releaseCode = io_ver->releaseCode; + cb->version.majorVersion = io_ver->majorVersion; + cb->version.minorVersion = io_ver->minorVersion; + + hdl_db = &cb->hdl_db; + + if ((reg_cbks != NULL) && + ((reg_cbks->saAmfContainedComponentCleanupCallback != 0) || + (reg_cbks->saAmfContainedComponentInstantiateCallback != 0))) { + TRACE_4("SA_AIS_ERR_NOT_SUPPORTED: unsupported callbacks"); + rc = SA_AIS_ERR_NOT_SUPPORTED; + goto done; + } + + memset(&osaf_cbks, 0, sizeof(OsafAmfCallbacksT)); + if (reg_cbks != NULL) + amf_copy_from_SaAmfCallbacksT_5_to_OsafAmfCallbacksT(&osaf_cbks, reg_cbks); + /* create the hdl record & store the callbacks */ + if (!(hdl_rec = ava_hdl_rec_add(cb, hdl_db, &osaf_cbks))) { + rc = SA_AIS_ERR_NO_MEMORY; + goto done; + } + + /* Initialize the ipc mailbox for the client for processing pending callbacks */ + if (NCSCC_RC_SUCCESS != ava_callback_ipc_init(hdl_rec)) { + rc = SA_AIS_ERR_LIBRARY; + goto done; + } + + /* pass the handle value to the appl */ + if (SA_AIS_OK == rc) { + TRACE_1("saAmfHandle returned to application is: %llx", *o_hdl); + *o_hdl = hdl_rec->hdl; + } + +done: + if (hdl_rec && SA_AIS_OK != rc) + ava_hdl_rec_del(cb, hdl_db, &hdl_rec); + + if (cb) { + m_NCS_UNLOCK(&cb->lock, NCS_LOCK_WRITE); + ncshm_give_hdl(gl_ava_hdl); + } + + if (SA_AIS_OK != rc) { + ncs_ava_shutdown(); + ncs_agents_shutdown(); + } + + TRACE_LEAVE2("rc:%u", rc); + return rc; +} diff --git a/osaf/libs/agents/saf/amfa/ava_hdl.cc b/osaf/libs/agents/saf/amfa/ava_hdl.cc --- a/osaf/libs/agents/saf/amfa/ava_hdl.cc +++ b/osaf/libs/agents/saf/amfa/ava_hdl.cc @@ -37,7 +37,7 @@ static uint32_t ava_hdl_cbk_dispatch_one static uint32_t ava_hdl_cbk_dispatch_all(AVA_CB **, AVA_HDL_REC **); static uint32_t ava_hdl_cbk_dispatch_block(AVA_CB **, AVA_HDL_REC **); -static void ava_hdl_cbk_rec_prc(AVSV_AMF_CBK_INFO *, SaAmfCallbacksT *); +static void ava_hdl_cbk_rec_prc(AVSV_AMF_CBK_INFO *, OsafAmfCallbacksT *); static void ava_hdl_pend_resp_list_del(AVA_CB *, AVA_PEND_RESP *); static bool ava_hdl_cbk_ipc_mbx_del(NCSCONTEXT arg, NCSCONTEXT msg); @@ -216,7 +216,7 @@ static bool ava_hdl_cbk_ipc_mbx_del(NCSC Notes : None ******************************************************************************/ -AVA_HDL_REC *ava_hdl_rec_add(AVA_CB *cb, AVA_HDL_DB *hdl_db, const SaAmfCallbacksT *reg_cbks) +AVA_HDL_REC *ava_hdl_rec_add(AVA_CB *cb, AVA_HDL_DB *hdl_db, const OsafAmfCallbacksT *reg_cbks) { AVA_HDL_REC *rec = 0; TRACE_ENTER(); @@ -235,8 +235,7 @@ AVA_HDL_REC *ava_hdl_rec_add(AVA_CB *cb, /* store the registered callbacks */ if (reg_cbks) - memcpy((void *)&rec->reg_cbk, (void *)reg_cbks, sizeof(SaAmfCallbacksT)); - + memcpy((void *)&rec->reg_cbk, (void *)reg_cbks, sizeof(OsafAmfCallbacksT)); /* add the record to the hdl db */ rec->hdl_node.key_info = (uint8_t *)&rec->hdl; if (ncs_patricia_tree_add(&hdl_db->hdl_db_anchor, &rec->hdl_node) @@ -350,12 +349,12 @@ uint32_t ava_hdl_cbk_dispatch_one(AVA_CB AVA_PEND_RESP *list_resp = &(*hdl_rec)->pend_resp; AVA_PEND_CBK_REC *rec = 0; uint32_t hdl = (*hdl_rec)->hdl; - SaAmfCallbacksT reg_cbk; + OsafAmfCallbacksT reg_cbk; uint32_t rc = SA_AIS_OK; TRACE_ENTER(); - memset(®_cbk, 0, sizeof(SaAmfCallbacksT)); - memcpy(®_cbk, &(*hdl_rec)->reg_cbk, sizeof(SaAmfCallbacksT)); + memset(®_cbk, 0, sizeof(OsafAmfCallbacksT)); + memcpy(®_cbk, &(*hdl_rec)->reg_cbk, sizeof(OsafAmfCallbacksT)); /* pop the rec from the mailbox queue */ rec = (AVA_PEND_CBK_REC *)m_NCS_IPC_NON_BLK_RECEIVE(&(*hdl_rec)->callbk_mbx, NULL); @@ -420,12 +419,12 @@ uint32_t ava_hdl_cbk_dispatch_all(AVA_CB AVA_PEND_RESP *list_resp = &(*hdl_rec)->pend_resp; AVA_PEND_CBK_REC *rec = 0; uint32_t hdl = (*hdl_rec)->hdl; - SaAmfCallbacksT reg_cbk; + OsafAmfCallbacksT reg_cbk; uint32_t rc = SA_AIS_OK; TRACE_ENTER(); - memset(®_cbk, 0, sizeof(SaAmfCallbacksT)); - memcpy(®_cbk, &(*hdl_rec)->reg_cbk, sizeof(SaAmfCallbacksT)); + memset(®_cbk, 0, sizeof(OsafAmfCallbacksT)); + memcpy(®_cbk, &(*hdl_rec)->reg_cbk, sizeof(OsafAmfCallbacksT)); /* pop all the records from the mailbox & process them */ do { @@ -491,12 +490,12 @@ uint32_t ava_hdl_cbk_dispatch_block(AVA_ AVA_PEND_RESP *list_resp = &(*hdl_rec)->pend_resp; uint32_t hdl = (*hdl_rec)->hdl; AVA_PEND_CBK_REC *rec = 0; - SaAmfCallbacksT reg_cbk; + OsafAmfCallbacksT reg_cbk; uint32_t rc = SA_AIS_OK; TRACE_ENTER(); - memset(®_cbk, 0, sizeof(SaAmfCallbacksT)); - memcpy(®_cbk, &(*hdl_rec)->reg_cbk, sizeof(SaAmfCallbacksT)); + memset(®_cbk, 0, sizeof(OsafAmfCallbacksT)); + memcpy(®_cbk, &(*hdl_rec)->reg_cbk, sizeof(OsafAmfCallbacksT)); /* release all lock and handle - we are abt to go into deep sleep */ m_NCS_UNLOCK(&(*cb)->lock, NCS_LOCK_WRITE); @@ -582,7 +581,7 @@ uint32_t ava_hdl_cbk_dispatch_block(AVA_ manager before dispatching. Else Finalize blocks while destroying the association with handle manager. ******************************************************************************/ -void ava_hdl_cbk_rec_prc(AVSV_AMF_CBK_INFO *info, SaAmfCallbacksT *reg_cbk) +void ava_hdl_cbk_rec_prc(AVSV_AMF_CBK_INFO *info, OsafAmfCallbacksT *reg_cbk) { TRACE_ENTER2("CallbackType = %d",info->type); @@ -613,7 +612,17 @@ void ava_hdl_cbk_rec_prc(AVSV_AMF_CBK_IN } } break; - + case AVSV_AMF_CSI_ATTR_CHANGE: + { + AVSV_AMF_CSI_ATTR_CHANGE_PARAM *csi_attr_change = &info->param.csi_attr_change; + if (reg_cbk->osafCsiAttributeChangeCallback) { + avsv_attrs_to_amf_attrs(&csi_attr_change->csiAttr, &csi_attr_change->attrs); + TRACE("Invoking osafCsiAttributeChangeCallback : InvocationId = %llx,\ + csi = %s",info->inv, csi_attr_change->csi_name.value); + reg_cbk->osafCsiAttributeChangeCallback(info->inv, &csi_attr_change->csi_name, csi_attr_change->csiAttr); + } + } + break; case AVSV_AMF_CSI_SET: { AVSV_AMF_CSI_SET_PARAM *csi_set = &info->param.csi_set; diff --git a/osaf/libs/agents/saf/amfa/ava_mds.cc b/osaf/libs/agents/saf/amfa/ava_mds.cc --- a/osaf/libs/agents/saf/amfa/ava_mds.cc +++ b/osaf/libs/agents/saf/amfa/ava_mds.cc @@ -53,8 +53,10 @@ static uint32_t ava_mds_enc(AVA_CB *cb, static uint32_t ava_mds_dec(AVA_CB *cb, MDS_CALLBACK_DEC_INFO *dec_info); +static uint32_t dec_csi_attr_change_msg(NCS_UBAID *uba, AVSV_NDA_AVA_MSG *msg); + static const MDS_CLIENT_MSG_FORMAT_VER ava_avnd_msg_fmt_map_table[AVA_AVND_SUBPART_VER_MAX] = - { AVSV_AVND_AVA_MSG_FMT_VER_1 }; + { AVSV_AVND_AVA_MSG_FMT_VER_1, AVSV_AVND_AVA_MSG_FMT_VER_2}; /** * function called when MDS down for avnd (AMF) is received @@ -565,6 +567,11 @@ uint32_t ava_mds_flat_dec(AVA_CB *cb, MD } switch (msg->info.cbk_info->type) { + case AVSV_AMF_CSI_ATTR_CHANGE: + { + rc = dec_csi_attr_change_msg(dec_info->io_uba, msg); + } + break; case AVSV_AMF_CSI_SET: { AVSV_AMF_CSI_SET_PARAM *csi_set = &msg->info.cbk_info->param.csi_set; @@ -900,3 +907,48 @@ extern "C" void ava_install_amf_down_cb( TRACE_LEAVE(); } +/** + * @brief Decodes CSI attribute change callback msg. + * + * @param uba (ptr to NCS_UBAID). + * @param msg (ptr to AVSV_NDA_AVA_MSG). + * + * @return NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE. + */ +static uint32_t dec_csi_attr_change_msg(NCS_UBAID *uba, AVSV_NDA_AVA_MSG *msg) +{ + AVSV_AMF_CSI_ATTR_CHANGE_PARAM *csi_attr_change = &msg->info.cbk_info->param.csi_attr_change; + uint32_t rc = NCSCC_RC_SUCCESS; + uint16_t len, i; + uint8_t *p8; + if (csi_attr_change->attrs.number == 0) + goto done; + csi_attr_change->attrs.list = 0; + csi_attr_change->attrs.list = static_cast<AVSV_ATTR_NAME_VAL*>(calloc(1, csi_attr_change->attrs.number * sizeof(AVSV_ATTR_NAME_VAL))); + if (!csi_attr_change->attrs.list) { + rc = NCSCC_RC_FAILURE; + LOG_CR("Calloc failed"); + goto done; + } + for(i=0; i<csi_attr_change->attrs.number; i++) { + rc = ncs_decode_n_octets_from_uba(uba, + (uint8_t *)&csi_attr_change->attrs.list[i].name, sizeof(SaNameT)); + if (NCSCC_RC_SUCCESS != rc) { + LOG_CR("ncs_decode_n_octets_from_uba failed with rc= %d", rc); + goto done; + } + p8 = ncs_dec_flatten_space(uba, (uint8_t *)&len, 2); + len = ncs_decode_16bit(&p8); + ncs_dec_skip_space(uba, 2); + csi_attr_change->attrs.list[i].string_ptr = static_cast<SaStringT>(calloc(1, len+1)); + osafassert(csi_attr_change->attrs.list[i].string_ptr); + rc = ncs_decode_n_octets_from_uba(uba, + (uint8_t *)csi_attr_change->attrs.list[i].string_ptr, (len+1)); + if (NCSCC_RC_SUCCESS != rc) { + LOG_CR("ncs_decode_n_octets_from_uba failed with rc = %d", rc); + goto done; + } + } +done: + return rc; +} diff --git a/osaf/libs/agents/saf/amfa/ava_op.cc b/osaf/libs/agents/saf/amfa/ava_op.cc --- a/osaf/libs/agents/saf/amfa/ava_op.cc +++ b/osaf/libs/agents/saf/amfa/ava_op.cc @@ -157,3 +157,64 @@ void ava_cpy_protection_group_ntf(SaAmfP } } +/** + * @brief Copies callbacks passed by application in saAmfInitialize() API into + AMF internal callback strucutre OsafAmfCallbacksT. + * + * @param osaf_cbk (ptr to OsafAmfCallbacksT). + * @param cbk (ptr to SaAmfCallbacksT). + * + */ +void amf_copy_from_SaAmfCallbacksT_to_OsafAmfCallbacksT(OsafAmfCallbacksT *osaf_cbk, const SaAmfCallbacksT *cbk) +{ + osaf_cbk->saAmfHealthcheckCallback = cbk->saAmfHealthcheckCallback; + osaf_cbk->saAmfComponentTerminateCallback = cbk->saAmfComponentTerminateCallback; + osaf_cbk->saAmfCSISetCallback = cbk->saAmfCSISetCallback; + osaf_cbk->saAmfCSIRemoveCallback = cbk->saAmfCSIRemoveCallback; + osaf_cbk->saAmfProtectionGroupTrackCallback = cbk->saAmfProtectionGroupTrackCallback; + osaf_cbk->saAmfProxiedComponentInstantiateCallback = cbk->saAmfProxiedComponentInstantiateCallback; + osaf_cbk->saAmfProxiedComponentCleanupCallback = cbk->saAmfProxiedComponentCleanupCallback; +} + +/* + * @brief Copies callbacks passed by application in saAmfInitialize_4() API into + AMF internal callback strucutre OsafAmfCallbacksT. + * + * @param osaf_cbk (ptr to OsafAmfCallbacksT). + * @param cbk (ptr to SaAmfCallbacksT_4). + */ +void amf_copy_from_SaAmfCallbacksT_4_to_OsafAmfCallbacksT(OsafAmfCallbacksT *osaf_cbk, const SaAmfCallbacksT_4 *cbk) +{ + osaf_cbk->saAmfHealthcheckCallback = cbk->saAmfHealthcheckCallback; + osaf_cbk->saAmfComponentTerminateCallback = cbk->saAmfComponentTerminateCallback; + osaf_cbk->saAmfCSISetCallback = cbk->saAmfCSISetCallback; + osaf_cbk->saAmfCSIRemoveCallback = cbk->saAmfCSIRemoveCallback; + osaf_cbk->saAmfProtectionGroupTrackCallback_4 = cbk->saAmfProtectionGroupTrackCallback; + osaf_cbk->saAmfProxiedComponentInstantiateCallback = cbk->saAmfProxiedComponentInstantiateCallback; + osaf_cbk->saAmfProxiedComponentCleanupCallback = cbk->saAmfProxiedComponentCleanupCallback; + osaf_cbk->saAmfContainedComponentInstantiateCallback = cbk->saAmfContainedComponentInstantiateCallback; + osaf_cbk->saAmfContainedComponentInstantiateCallback = cbk->saAmfContainedComponentInstantiateCallback; +} + +/* + * @brief Copies callbacks passed by application in saAmfInitialize_5() API into + AMF internal callback strucutre OsafAmfCallbacksT. + * + * @param osaf_cbk (ptr to OsafAmfCallbacksT). + * @param cbk (ptr to SaAmfCallbacksT_5). + */ +void amf_copy_from_SaAmfCallbacksT_5_to_OsafAmfCallbacksT(OsafAmfCallbacksT *osaf_cbk, const SaAmfCallbacksT_5 *cbk) +{ + osaf_cbk->saAmfHealthcheckCallback = cbk->saAmfHealthcheckCallback; + osaf_cbk->saAmfComponentTerminateCallback = cbk->saAmfComponentTerminateCallback; + osaf_cbk->saAmfCSISetCallback = cbk->saAmfCSISetCallback; + osaf_cbk->saAmfCSIRemoveCallback = cbk->saAmfCSIRemoveCallback; + osaf_cbk->saAmfProtectionGroupTrackCallback_4 = cbk->saAmfProtectionGroupTrackCallback; + osaf_cbk->saAmfProxiedComponentInstantiateCallback = cbk->saAmfProxiedComponentInstantiateCallback; + osaf_cbk->saAmfProxiedComponentCleanupCallback = cbk->saAmfProxiedComponentCleanupCallback; + osaf_cbk->saAmfContainedComponentInstantiateCallback = cbk->saAmfContainedComponentInstantiateCallback; + osaf_cbk->saAmfContainedComponentInstantiateCallback = cbk->saAmfContainedComponentInstantiateCallback; + osaf_cbk->saAmfContainedComponentInstantiateCallback = cbk->saAmfContainedComponentInstantiateCallback; + osaf_cbk->osafCsiAttributeChangeCallback = cbk->osafCsiAttributeChangeCallback; + +} diff --git a/osaf/libs/agents/saf/amfa/include/ava_cb.h b/osaf/libs/agents/saf/amfa/include/ava_cb.h --- a/osaf/libs/agents/saf/amfa/include/ava_cb.h +++ b/osaf/libs/agents/saf/amfa/include/ava_cb.h @@ -113,6 +113,12 @@ void ava_cpy_protection_group_ntf(SaAmfP const SaAmfProtectionGroupNotificationT *from_ntf, SaUint32T items, SaAmfHAReadinessStateT ha_read_state); +void amf_copy_from_SaAmfCallbacksT_to_OsafAmfCallbacksT(OsafAmfCallbacksT *osaf_cbk, + const SaAmfCallbacksT *cbk); +void amf_copy_from_SaAmfCallbacksT_4_to_OsafAmfCallbacksT(OsafAmfCallbacksT *osaf_cbk, + const SaAmfCallbacksT_4 *cbk); +void amf_copy_from_SaAmfCallbacksT_5_to_OsafAmfCallbacksT(OsafAmfCallbacksT *osaf_cbk, + const SaAmfCallbacksT_5 *cbk); #ifdef __cplusplus } diff --git a/osaf/libs/agents/saf/amfa/include/ava_hdl.h b/osaf/libs/agents/saf/amfa/include/ava_hdl.h --- a/osaf/libs/agents/saf/amfa/include/ava_hdl.h +++ b/osaf/libs/agents/saf/amfa/include/ava_hdl.h @@ -62,13 +62,31 @@ typedef struct ava_resp_cbk { AVA_PEND_RESP_REC *tail; } AVA_PEND_RESP; +/* + Common structure for different initialize API versions(B.01.01, B.04.01 and B.04.2) + to remember callbacks passed by user application. This is for internal use only. +*/ +typedef struct osaf_amf_cbk { + SaAmfHealthcheckCallbackT saAmfHealthcheckCallback; + SaAmfComponentTerminateCallbackT saAmfComponentTerminateCallback; + SaAmfCSISetCallbackT saAmfCSISetCallback; + SaAmfCSIRemoveCallbackT saAmfCSIRemoveCallback; + SaAmfProtectionGroupTrackCallbackT saAmfProtectionGroupTrackCallback; + SaAmfProtectionGroupTrackCallbackT_4 saAmfProtectionGroupTrackCallback_4; //Only in B.04.01 + SaAmfProxiedComponentInstantiateCallbackT saAmfProxiedComponentInstantiateCallback; + SaAmfProxiedComponentCleanupCallbackT saAmfProxiedComponentCleanupCallback; + SaAmfContainedComponentInstantiateCallbackT saAmfContainedComponentInstantiateCallback; + SaAmfContainedComponentCleanupCallbackT saAmfContainedComponentCleanupCallback; + OsafCsiAttributeChangeCallbackT osafCsiAttributeChangeCallback; //OpenSAF implementation and not from any spec. +} OsafAmfCallbacksT; + /* AvA handle database records */ typedef struct ava_hdl_rec_tag { NCS_PATRICIA_NODE hdl_node; /* hdl-db tree node */ uint32_t hdl; /* AMF handle (derived from hdl-mngr) */ - SaAmfCallbacksT reg_cbk; /* callbacks registered by the application */ + struct osaf_amf_cbk reg_cbk; /* callbacks registered by the application */ SYSF_MBX callbk_mbx; /* mailbox to hold the callback messages */ AVA_PEND_RESP pend_resp; /* list of pending AvSv Response */ @@ -189,7 +207,7 @@ void ava_hdl_del(struct ava_cb_tag *); void ava_hdl_rec_del(struct ava_cb_tag *, AVA_HDL_DB *, AVA_HDL_REC **); -AVA_HDL_REC *ava_hdl_rec_add(struct ava_cb_tag *, AVA_HDL_DB *, const SaAmfCallbacksT *); +AVA_HDL_REC *ava_hdl_rec_add(struct ava_cb_tag *, AVA_HDL_DB *, const OsafAmfCallbacksT *); uint32_t ava_hdl_cbk_dispatch(struct ava_cb_tag **, AVA_HDL_REC **, SaDispatchFlagsT); diff --git a/osaf/libs/agents/saf/amfa/include/ava_mds.h b/osaf/libs/agents/saf/amfa/include/ava_mds.h --- a/osaf/libs/agents/saf/amfa/include/ava_mds.h +++ b/osaf/libs/agents/saf/amfa/include/ava_mds.h @@ -35,10 +35,10 @@ extern "C" { #endif /* In Service upgrade support */ -#define AVA_MDS_SUB_PART_VERSION 1 +#define AVA_MDS_SUB_PART_VERSION 2 #define AVA_AVND_SUBPART_VER_MIN 1 -#define AVA_AVND_SUBPART_VER_MAX 1 +#define AVA_AVND_SUBPART_VER_MAX 2 /***************************************************************************** Macros to fill the MDS message structure ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel