osaf/libs/agents/saf/amfa/ava_api.c | 148 +++++++++++++++++++++++++++-
osaf/libs/agents/saf/amfa/ava_hdl.c | 39 ++++--
osaf/libs/agents/saf/amfa/ava_mds.c | 54 ++++++++++-
osaf/libs/agents/saf/amfa/ava_op.c | 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, 312 insertions(+), 22 deletions(-)
1)Because of different AMF callback struture correponding to each of B.01.01
B.04.01, introduced and internal callback structure OsafAmfCallbacksT.
It consists of callback from each AMF version. Since callback for each
intialization needs to be maintained internally in AVA_HDL_REC. With this
internal structure, same handle can used interanlly for any initialization
of AMF service.
Also added utility function to copy callbacks from AMF callbacks structure to
this internal one.
AMF agent will use OsafAmfCallbacksT internally instead of
SaAmfCallbacksT_<#x>.
2)Implementation of saAmfInitialize_5() in ava_api.c.
3)Now saAmfRegister() also sends SAF version to AMFND.
diff --git a/osaf/libs/agents/saf/amfa/ava_api.c
b/osaf/libs/agents/saf/amfa/ava_api.c
--- a/osaf/libs/agents/saf/amfa/ava_api.c
+++ b/osaf/libs/agents/saf/amfa/ava_api.c
@@ -54,6 +54,8 @@ SaAisErrorT saAmfInitialize(SaAmfHandleT
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) {
@@ -107,8 +109,11 @@ SaAisErrorT saAmfInitialize(SaAmfHandleT
/* 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;
}
@@ -487,10 +492,30 @@ SaAisErrorT saAmfComponentRegister(SaAmf
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.releaseCode =
cb->version.releaseCode;
+ msg.info.api_info.param.reg.version.majorVersion =
cb->version.majorVersion;
+ msg.info.api_info.param.reg.version.minorVersion =
cb->version.minorVersion;
+
rc = ava_mds_send(cb, &msg, &msg_rsp);
if (NCSCC_RC_SUCCESS == rc) {
osafassert(AVSV_AVND_AMF_API_RESP_MSG == msg_rsp->type);
@@ -1985,6 +2010,7 @@ SaAisErrorT saAmfInitialize_4(SaAmfHandl
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 */
@@ -2056,8 +2082,11 @@ SaAisErrorT saAmfInitialize_4(SaAmfHandl
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;
}
@@ -2627,3 +2656,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.c
b/osaf/libs/agents/saf/amfa/ava_hdl.c
--- a/osaf/libs/agents/saf/amfa/ava_hdl.c
+++ b/osaf/libs/agents/saf/amfa/ava_hdl.c
@@ -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);
@@ -217,7 +217,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();
@@ -236,8 +236,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)
@@ -351,12 +350,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);
@@ -421,12 +420,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 {
@@ -492,12 +491,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);
@@ -583,7 +582,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);
@@ -614,7 +613,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.c
b/osaf/libs/agents/saf/amfa/ava_mds.c
--- a/osaf/libs/agents/saf/amfa/ava_mds.c
+++ b/osaf/libs/agents/saf/amfa/ava_mds.c
@@ -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 @@ void ava_install_amf_down_cb(void (*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 = 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 = 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.c
b/osaf/libs/agents/saf/amfa/ava_op.c
--- a/osaf/libs/agents/saf/amfa/ava_op.c
+++ b/osaf/libs/agents/saf/amfa/ava_op.c
@@ -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
@@ -109,5 +109,11 @@ 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);
#endif /* !AVA_CB_H */
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
@@ -58,13 +58,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 */
@@ -185,7 +203,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
@@ -31,10 +31,10 @@
#define AVA_MDS_H
/* 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel