opensaf.spec.in | 1 +
osaf/libs/agents/saf/cpa/cpa_api.c | 547 ++++++++++++++++++++++++++++++-
osaf/libs/agents/saf/cpa/cpa_proc.c | 6 +-
osaf/libs/common/cpsv/cpsv_edu.c | 22 +-
osaf/libs/common/cpsv/include/cpa_cb.h | 4 +-
osaf/libs/common/cpsv/include/cpa_def.h | 2 +-
osaf/libs/common/cpsv/include/cpa_proc.h | 2 +-
osaf/libs/common/cpsv/include/cpsv.h | 7 +
osaf/libs/common/cpsv/include/cpsv_evt.h | 8 +-
osaf/libs/saf/include/Makefile.am | 1 +
osaf/libs/saf/include/saCkpt_B_02_03.h | 152 ++++++++
osaf/services/saf/cpsv/cpnd/cpnd_evt.c | 39 ++-
12 files changed, 775 insertions(+), 16 deletions(-)
diff --git a/opensaf.spec.in b/opensaf.spec.in
--- a/opensaf.spec.in
+++ b/opensaf.spec.in
@@ -1399,6 +1399,7 @@ fi
%{_includedir}/saAis.h
%{_includedir}/saAmf.h
%{_includedir}/saCkpt.h
+%{_includedir}/saCkpt_B_02_03.h
%{_includedir}/saClm.h
%{_includedir}/saEvt.h
%{_includedir}/saImm.h
diff --git a/osaf/libs/agents/saf/cpa/cpa_api.c
b/osaf/libs/agents/saf/cpa/cpa_api.c
--- a/osaf/libs/agents/saf/cpa/cpa_api.c
+++ b/osaf/libs/agents/saf/cpa/cpa_api.c
@@ -119,8 +119,9 @@ SaAisErrorT saCkptInitialize(SaCkptHandl
/* Store the callback functions, if set */
if (ckptCallbacks) {
- cl_node->ckpt_callbk = *ckptCallbacks;
-
+ cl_node->ckpt_callbk.saCkptCheckpointOpenCallback =
ckptCallbacks->saCkptCheckpointOpenCallback;
+ cl_node->ckpt_callbk.saCkptCheckpointSynchronizeCallback =
ckptCallbacks->saCkptCheckpointSynchronizeCallback;
+ cl_node->ckpt_callbk.saCkptCheckpointTrackCallback = NULL;
}
proc_rc = cpa_callback_ipc_init(cl_node);
@@ -278,11 +279,269 @@ SaAisErrorT saCkptInitialize(SaCkptHandl
}
/****************************************************************************
- Name : saCkptSelectionObjectGet
+ Name : SaCkptInitialize_2
- Description : This function returns the operating system handle
- associated with the ckptHandle.
+ Description : This function initializes the Checkpoint Service for the
+ invoking process and registers the various callback
functions.
+ The handle 'ckptHandle' is returned as the reference to this
+ association between the process and the Checkpoint Service.
+
+ Arguments : ckptHandle - A pointer to the handle designating this
+ particular initialization of the Checkpoint
+ service that it to be returned by the
Checkpoint
+ Service.
+ callbacks - Pointer to a SaCkptCallbacksT_2 structure,
+ containing the callback functions of the
process
+ that the Checkpoint Service may invoke.
+ version - Is a pointer to the version of the Checkpoint
+ Service that the invoking process is using.
+
+ Return Values : Refer to SAI-AIS specification for various return values.
+
+ Notes :
+******************************************************************************/
+SaAisErrorT saCkptInitialize_2(SaCkptHandleT *ckptHandle, const
SaCkptCallbacksT_2 *ckptCallbacks, SaVersionT *version)
+{
+ CPA_CB *cb = NULL;
+ SaAisErrorT rc = SA_AIS_OK;
+ CPSV_EVT init_evt;
+ CPSV_EVT *out_evt = NULL;
+ uint32_t proc_rc = NCSCC_RC_SUCCESS;
+ CPA_CLIENT_NODE *cl_node = NULL;
+ bool locked = true;
+ SaVersionT client_version;
+
+ TRACE_ENTER();
+ proc_rc = ncs_agents_startup();
+ if (NCSCC_RC_SUCCESS != proc_rc) {
+ TRACE_4("cpa CkptInit:agents_startup Api failed with return
value:%d", proc_rc);
+ return SA_AIS_ERR_LIBRARY;
+ }
+
+ proc_rc = ncs_cpa_startup();
+ if (NCSCC_RC_SUCCESS != proc_rc) {
+ TRACE_4("cpa CkptInit:agents_startup Api failed with return
value:%d" , proc_rc);
+ ncs_agents_shutdown();
+ return SA_AIS_ERR_LIBRARY;
+ }
+
+ if ((!ckptHandle) || (!version)) {
+ rc = SA_AIS_ERR_INVALID_PARAM;
+ TRACE_4("cpa CkptInit Api failed with return value :%d", rc);
+ goto end;
+ }
+
+ *ckptHandle = 0;
+
+ memcpy(&client_version, version, sizeof(SaVersionT));
+
+ if (m_CPA_VER_IS_BELOW_B_2_3(version)) {
+ rc = SA_AIS_ERR_VERSION;
+ TRACE_2("ERR_VERSION: Cpa version incompatible
saCkptInitialize_2 SHOULD BE A VERSION B.02.03 and above initialize but claims
to be"
+ "%c %u %u", version->releaseCode,
version->majorVersion, version->minorVersion);
+ version->releaseCode = CPA_RELEASE_CODE;
+ version->majorVersion = CPA_MAJOR_VERSION;
+ version->minorVersion = CPA_MINOR_VERSION;
+ goto end;
+ }
+
+ /* Draft Validations : Version */
+ rc = cpa_version_validate(version);
+ if (rc != SA_AIS_OK) {
+ TRACE_4("cpa CkptInit Api failed with return value:%d", rc);
+ goto end;
+ }
+
+ /* retrieve CPA CB */
+ m_CPA_RETRIEVE_CB(cb);
+ if (cb == NULL) {
+ TRACE_4("cpa CkptInit:HDL_TAKE");
+ return SA_AIS_ERR_LIBRARY;
+ }
+
+ /* Take the CB Lock */
+ if (m_NCS_LOCK(&cb->cb_lock, NCS_LOCK_WRITE) != NCSCC_RC_SUCCESS) {
+ TRACE_4("cpa CkptInit:LOCK");
+ rc = SA_AIS_ERR_LIBRARY;
+ goto lock_fail;
+ }
+
+ /* Alloc the client info data structure & put it in the Pat tree */
+ cl_node = (CPA_CLIENT_NODE *)m_MMGR_ALLOC_CPA_CLIENT_NODE;
+ if (cl_node == NULL) {
+ TRACE_4("cpa mem alloc CkptInit:CPA_CLIENT_NODE");
+ rc = SA_AIS_ERR_NO_MEMORY;
+ goto cnode_alloc_fail;
+ }
+ memset(cl_node, 0, sizeof(CPA_CLIENT_NODE));
+
+ /* Store the callback functions, if set */
+ if (ckptCallbacks) {
+ cl_node->ckpt_callbk = *ckptCallbacks;
+ }
+
+ proc_rc = cpa_callback_ipc_init(cl_node);
+ if (proc_rc != NCSCC_RC_SUCCESS) {
+ /* Error handling */
+ rc = SA_AIS_ERR_LIBRARY;
+ /* ALready looged by cpa_callback_ipc_init */
+ goto ipc_init_fail;
+ }
+
+ /* populate the EVT structure */
+ memset(&init_evt, 0, sizeof(CPSV_EVT));
+ init_evt.type = CPSV_EVT_TYPE_CPND;
+ init_evt.info.cpnd.type = CPND_EVT_A2ND_CKPT_INIT;
+ init_evt.info.cpnd.info.initReq.version = client_version;
+
+ /* Release the CB lock Before MDS Send */
+ if (locked)
+ m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE);
+ locked = false;
+
+ /* CPND GOES DOWN */
+ if (false == cb->is_cpnd_up) {
+ rc = SA_AIS_ERR_TRY_AGAIN;
+ TRACE_4("cpa: api failed in CkptInit:CPND_DOWN");
+ goto mds_fail;
+ }
+
+ /* send the request to the CPND */
+ proc_rc = cpa_mds_msg_sync_send(cb->cpa_mds_hdl, &cb->cpnd_mds_dest,
&init_evt, &out_evt, CPSV_WAIT_TIME);
+
+ /* Error Handling */
+ switch (proc_rc) {
+ case NCSCC_RC_SUCCESS:
+ break;
+ case NCSCC_RC_REQ_TIMOUT:
+ TRACE_4("cpa CkptInit:MDS Api failed with return
value:%d,cpnd_mds_dest:%"PRIu64, proc_rc, cb->cpa_mds_dest);
+ rc = SA_AIS_ERR_TIMEOUT;
+ goto mds_fail;
+ default:
+ TRACE_4("cpa CkptInit:MDS Api failed with return
value:%d,cpnd_mds_dest:%"PRIu64, proc_rc, cb->cpa_mds_dest);
+ rc = SA_AIS_ERR_TRY_AGAIN;
+ goto mds_fail;
+ }
+
+ if (out_evt) {
+ rc = out_evt->info.cpa.info.initRsp.error;
+ if (rc != SA_AIS_OK) {
+ TRACE_4("cpa CkptInit:CPND_ERR Api failed with return
value:%d",rc);
+ goto rsp_not_ok;
+ }
+
+ if (m_CPA_VER_IS_ABOVE_B_1_1(version)) {
+ if (rc == SA_AIS_ERR_UNAVAILABLE) {
+ cb->is_cpnd_joined_clm = false;
+ if (locked)
+ m_NCS_UNLOCK(&cb->cb_lock,
NCS_LOCK_WRITE);
+ locked = false;
+ goto clm_left;
+ } else {
+ cb->is_cpnd_joined_clm = true;
+ }
+ }
+ /* Take the CB lock after MDS Send */
+ if (m_NCS_LOCK(&cb->cb_lock, NCS_LOCK_WRITE) !=
NCSCC_RC_SUCCESS) {
+ TRACE_4("cpa CkptInit:LOCK");
+ rc = SA_AIS_ERR_LIBRARY;
+ goto lock_fail1;
+ } else
+ locked = true;
+
+ cl_node->cl_hdl = out_evt->info.cpa.info.initRsp.ckptHandle;
+ cl_node->stale = false;
+ proc_rc = cpa_client_node_add(&cb->client_tree, cl_node);
+ if (proc_rc != NCSCC_RC_SUCCESS) {
+ rc = SA_AIS_ERR_LIBRARY;
+ TRACE_4("cpa api processing failed in
CkptInit:client_node_add Api failed with return value:%d,cl_hdl:%llx ", rc,
cl_node->cl_hdl);
+ goto node_add_fail;
+ }
+ } else {
+ TRACE_4("cpa api processing failed in CkptInit Api failed with
return value:%d", rc);
+ rc = SA_AIS_ERR_NO_RESOURCES;
+ }
+
+ if (rc != SA_AIS_OK) {
+ TRACE_4("cpa CkptInit:CPND_ERR Api failed with return
value:%d",rc);
+ goto cpnd_rsp_fail;
+ }
+
+ /*Error handling */
+cpnd_rsp_fail:
+node_add_fail:
+lock_fail1:
+ if (rc != SA_AIS_OK) {
+ CPSV_EVT finalize_evt, *out_evt1;
+
+ out_evt1 = NULL;
+ /* populate the structure */
+ memset(&finalize_evt, 0, sizeof(CPSV_EVT));
+ finalize_evt.type = CPSV_EVT_TYPE_CPND;
+ finalize_evt.info.cpnd.type = CPND_EVT_A2ND_CKPT_FINALIZE;
+ finalize_evt.info.cpnd.info.finReq.client_hdl = cl_node->cl_hdl;
+
+ if (locked)
+ m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE);
+ locked = false;
+
+ /* send the request to the CPND */
+ proc_rc = cpa_mds_msg_sync_send(cb->cpa_mds_hdl,
&(cb->cpnd_mds_dest),
+ &finalize_evt, &out_evt1, CPSV_WAIT_TIME);
+ if (out_evt1)
+ m_MMGR_FREE_CPSV_EVT(out_evt1, NCS_SERVICE_ID_CPA);
+ }
+
+rsp_not_ok:
+mds_fail:
+
+ /* Free the IPC initialized for this client */
+ if (rc != SA_AIS_OK)
+ cpa_callback_ipc_destroy(cl_node);
+
+ipc_init_fail:
+ /* Free the Client NODE */
+ if (rc != SA_AIS_OK)
+ m_MMGR_FREE_CPA_CLIENT_NODE(cl_node);
+
+cnode_alloc_fail:
+ /* Release the CB lock */
+ if (locked)
+ m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE);
+
+lock_fail:
+clm_left:
+ /* Release the CB handle */
+ m_CPA_GIVEUP_CB;
+
+ /* Free the Out Event */
+ if (out_evt)
+ m_MMGR_FREE_CPSV_EVT(out_evt, NCS_SERVICE_ID_CPA);
+
+ if (rc == SA_AIS_OK) {
+ memcpy(&(cl_node->version), &client_version,
sizeof(SaVersionT));
+ /* Went well, return ckptHandle to the application */
+ *ckptHandle = cl_node->cl_hdl;
+ TRACE_1("cpa ckptInit Api success with return value:%d and
cl_hdl:%llx", SA_AIS_OK, cl_node->cl_hdl);
+ }
+end:
+ if (rc != SA_AIS_OK) {
+ ncs_cpa_shutdown();
+ ncs_agents_shutdown();
+ }
+
+ TRACE_LEAVE2("API Return code = %u", rc);
+ return rc;
+}
+
+
+/****************************************************************************
+Name : saCkptSelectionObjectGet
+
+Description : This function returns the operating system handle
+associated with the ckptHandle.
+
Arguments : ckptHandle - Checkpoint service handle.
selectionObject - Pointer to the operating system handle.
@@ -4166,7 +4425,7 @@ ncsCkptRegisterCkptArrivalCallback(SaCkp
}
if (ckptArrivalCallback) {
- cl_node->ckptArrivalCallback = ckptArrivalCallback;
+ cl_node->ckpt_callbk.saCkptCheckpointTrackCallback =
ckptArrivalCallback;
if (cl_node->callbk_mbx == 0)
proc_rc = cpa_callback_ipc_init(cl_node);
else
@@ -4226,3 +4485,279 @@ ncsCkptRegisterCkptArrivalCallback(SaCkp
TRACE_LEAVE2("API return code = %u", rc);
return rc;
}
+
+/****************************************************************************
+Name : saCkptTrack
+
+Description : This function enable the Ckpt Track call back
+
+Arguments : ckptHandle - Checkpoint handle.
+
+Return Values : Refer to SAI-AIS specification for various return values.
+
+Notes :
+
******************************************************************************/
+SaAisErrorT saCkptTrack(SaCkptHandleT ckptHandle)
+{
+ SaAisErrorT rc = SA_AIS_OK;
+ CPSV_EVT evt;
+ uint32_t proc_rc = NCSCC_RC_SUCCESS;
+ CPA_CLIENT_NODE *cl_node = NULL;
+ CPA_CB *cb = NULL;
+ bool is_locked = false;
+
+ /* retrieve CPA CB */
+ m_CPA_RETRIEVE_CB(cb);
+ if (!cb) {
+ rc = SA_AIS_ERR_BAD_HANDLE;
+ TRACE_4("cpa CkptArrivalCallback Api failed with return
value:%d,ckptHandle:%llx",rc, ckptHandle);
+ goto done;
+ }
+
+ /* get the CB Lock */
+ if (m_NCS_LOCK(&cb->cb_lock, NCS_LOCK_WRITE) != NCSCC_RC_SUCCESS) {
+ rc = SA_AIS_ERR_LIBRARY;
+ TRACE_4("cpa CkptArrivalCallback:LOCK Api failed with return
value:%d,ckptHandle:%llx", rc, ckptHandle);
+ goto lock_fail;
+ }
+
+ is_locked = true;
+
+ /* Get the Client info */
+ rc = cpa_client_node_get(&cb->client_tree, &ckptHandle, &cl_node);
+
+ if (!cl_node) {
+ rc = SA_AIS_ERR_BAD_HANDLE;
+ TRACE_4("cpa CkptArrivalCallback:client_node_get Api failed
with return value:%d,ckptHandle:%llx", rc, ckptHandle);
+ goto proc_fail;
+ }
+
+ if (m_CPA_VER_IS_BELOW_B_2_3(&cl_node->version)) {
+ rc = SA_AIS_ERR_VERSION;
+ TRACE_2("ERR_VERSION: saCkptTrack SHOULD BE A VERSION B.02.03
and above API but claims to be"
+ "%c %u %u", cl_node->version.releaseCode,
cl_node->version.majorVersion, cl_node->version.minorVersion);
+ goto proc_fail;
+ }
+
+ if (cl_node->ckpt_callbk.saCkptCheckpointTrackCallback) {
+ if (cl_node->callbk_mbx == 0)
+ proc_rc = cpa_callback_ipc_init(cl_node);
+ else
+ proc_rc = NCSCC_RC_SUCCESS;
+ } else {
+ rc = SA_AIS_ERR_INIT;
+ TRACE_4("cpa CkptArrivalCallback Api failed with return
value:%d,ckptHandle:%llx", rc, ckptHandle);
+ goto proc_fail;
+
+ }
+
+ if (proc_rc != NCSCC_RC_SUCCESS) {
+ /* Error handling */
+ rc = SA_AIS_ERR_LIBRARY;
+ TRACE_4("cpa CkptArrivalCallback Api failed with return
value:%d,ckptHandle:%llx", rc, ckptHandle);
+ goto proc_fail;
+ }
+ /* Send it to CPND */
+ memset(&evt, 0, sizeof(CPSV_EVT));
+ evt.type = CPSV_EVT_TYPE_CPND;
+ evt.info.cpnd.type = CPND_EVT_A2ND_ARRIVAL_CB_REG;
+ evt.info.cpnd.info.arr_ntfy.client_hdl = ckptHandle;
+
+ m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE);
+ is_locked = false;
+ /* IF CPND IS DOWN */
+ if (false == cb->is_cpnd_up) {
+ rc = SA_AIS_ERR_TRY_AGAIN;
+ TRACE_4("cpa CkptArrivalCallback Api failed with return
value:%d,ckptHandle:%llx", rc, ckptHandle);
+ goto lock_fail;
+ }
+ proc_rc = cpa_mds_msg_send(cb->cpa_mds_hdl, &cb->cpnd_mds_dest, &evt,
NCSMDS_SVC_ID_CPND);
+ /* Generate rc from proc_rc */
+ switch (proc_rc) {
+ case NCSCC_RC_SUCCESS:
+ cl_node->is_track_enabled = true;
+ break;
+ case NCSCC_RC_REQ_TIMOUT:
+ rc = SA_AIS_ERR_TIMEOUT;
+ TRACE_4("cpa CkptArrivalCallback:MDS Api failed with
return value:%d,ckptHandle:%llx,cpnd_mds_dest:%"PRIu64, proc_rc, ckptHandle,
cb->cpnd_mds_dest);
+ goto proc_fail;
+ default:
+ rc = SA_AIS_ERR_NO_RESOURCES;
+ TRACE_4("cpa CkptArrivalCallback:MDS Api failed with
return value:%d,ckptHandle:%llx,cpnd_mds_dest:%"PRIu64, proc_rc, ckptHandle,
cb->cpnd_mds_dest);
+ goto proc_fail;
+ }
+
+proc_fail:
+ if (is_locked)
+ m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE);
+lock_fail:
+ m_CPA_GIVEUP_CB;
+
+done:
+ TRACE_LEAVE2("API return code = %u", rc);
+ return rc;
+}
+
+/****************************************************************************
+Name : saCkptTrackStop
+
+Description : This function disable the Ckpt Track call back
+
+Arguments : ckptHandle - Checkpoint handle.
+
+Return Values : Refer to SAI-AIS specification for various return values.
+
+Notes :
+
******************************************************************************/
+SaAisErrorT saCkptTrackStop(SaCkptHandleT ckptHandle)
+{
+ SaAisErrorT rc = SA_AIS_OK;
+ CPSV_EVT evt;
+ uint32_t proc_rc = NCSCC_RC_SUCCESS;
+ CPA_CLIENT_NODE *cl_node = NULL;
+ CPA_CB *cb = NULL;
+ bool is_locked = false;
+
+ /* retrieve CPA CB */
+ m_CPA_RETRIEVE_CB(cb);
+ if (!cb) {
+ rc = SA_AIS_ERR_BAD_HANDLE;
+ TRACE_4("cpa CkptArrivalCallback Api failed with return
value:%d,ckptHandle:%llx",rc, ckptHandle);
+ goto done;
+ }
+
+ /* get the CB Lock */
+ if (m_NCS_LOCK(&cb->cb_lock, NCS_LOCK_WRITE) != NCSCC_RC_SUCCESS) {
+ rc = SA_AIS_ERR_LIBRARY;
+ TRACE_4("cpa CkptArrivalCallback:LOCK Api failed with return
value:%d,ckptHandle:%llx", rc, ckptHandle);
+ goto lock_fail;
+ }
+
+ is_locked = true;
+
+ /* Get the Client info */
+ rc = cpa_client_node_get(&cb->client_tree, &ckptHandle, &cl_node);
+
+ if (!cl_node) {
+ rc = SA_AIS_ERR_BAD_HANDLE;
+ TRACE_4("cpa CkptArrivalCallback:client_node_get Api failed
with return value:%d,ckptHandle:%llx", rc, ckptHandle);
+ goto proc_fail;
+ }
+
+ if (m_CPA_VER_IS_BELOW_B_2_3(&cl_node->version)) {
+ rc = SA_AIS_ERR_VERSION;
+ TRACE_2("ERR_VERSION: saCkptTrackStop SHOULD BE A VERSION
B.02.03 and above API but claims to be"
+ "%c %u %u", cl_node->version.releaseCode,
cl_node->version.majorVersion, cl_node->version.minorVersion);
+ goto proc_fail;
+ }
+
+ if (cl_node->ckpt_callbk.saCkptCheckpointTrackCallback) {
+ if ((cl_node->callbk_mbx == 0) || (cl_node->is_track_enabled !=
true))
+ proc_rc = SA_AIS_ERR_NOT_EXIST;
+ else
+ proc_rc = NCSCC_RC_SUCCESS;
+ } else {
+ rc = SA_AIS_ERR_INIT;
+ TRACE_4("cpa CkptArrivalCallback Api failed with return
value:%d,ckptHandle:%llx", rc, ckptHandle);
+ goto proc_fail;
+
+ }
+
+ if (proc_rc != NCSCC_RC_SUCCESS) {
+ /* Error handling */
+ rc = SA_AIS_ERR_NOT_EXIST;
+ TRACE_4("cpa CkptArrivalCallback Api failed with return
value:%d,ckptHandle:%llx", rc, ckptHandle);
+ goto proc_fail;
+ }
+
+ /* Send it to CPND */
+ memset(&evt, 0, sizeof(CPSV_EVT));
+ evt.type = CPSV_EVT_TYPE_CPND;
+ evt.info.cpnd.type = CPND_EVT_A2ND_ARRIVAL_CB_UNREG;
+ evt.info.cpnd.info.arr_ntfy.client_hdl = ckptHandle;
+
+ m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE);
+ is_locked = false;
+
+ /* IF CPND IS DOWN */
+ if (false == cb->is_cpnd_up) {
+ rc = SA_AIS_ERR_TRY_AGAIN;
+ TRACE_4("cpa CkptArrivalCallback Api failed with return
value:%d,ckptHandle:%llx", rc, ckptHandle);
+ goto lock_fail;
+ }
+ proc_rc = cpa_mds_msg_send(cb->cpa_mds_hdl, &cb->cpnd_mds_dest, &evt,
NCSMDS_SVC_ID_CPND);
+
+ /* Generate rc from proc_rc */
+ switch (proc_rc) {
+ case NCSCC_RC_SUCCESS:
+ cl_node->is_track_enabled = false;
+ break;
+ case NCSCC_RC_REQ_TIMOUT:
+ rc = SA_AIS_ERR_TIMEOUT;
+ TRACE_4("cpa CkptArrivalCallback:MDS Api failed with
return value:%d,ckptHandle:%llx,cpnd_mds_dest:%"PRIu64, proc_rc, ckptHandle,
cb->cpnd_mds_dest);
+ goto proc_fail;
+ default:
+ rc = SA_AIS_ERR_NO_RESOURCES;
+ TRACE_4("cpa CkptArrivalCallback:MDS Api failed with
return value:%d,ckptHandle:%llx,cpnd_mds_dest:%"PRIu64, proc_rc, ckptHandle,
cb->cpnd_mds_dest);
+ goto proc_fail;
+ }
+
+proc_fail:
+ if (is_locked)
+ m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE);
+lock_fail:
+ m_CPA_GIVEUP_CB;
+
+done:
+ TRACE_LEAVE2("API return code = %u", rc);
+ return rc;
+}
+
+/****************************************************************************
+Name : saCkptCheckpointTrack
+
+Description : This function enables the specific Checkpoint Track call back
+
+Arguments : checkpointHandle - The handle that designates the checkpoint
+to enables Track.
+
+Return Values : Refer to SAI-AIS specification for various return values.
+
+Notes :
+
******************************************************************************/
+SaAisErrorT saCkptCheckpointTrack(SaCkptCheckpointHandleT checkpointHandle)
+{
+ /* TODO: Not supported yet.
+ In future to support checkpoint tracking start "per (checkpoint -
handle) SaCkptCheckpointHandleT ".
+ this is a placeholder for future enhancement the
saCkptCheckpointTrack() is in place, but
+ will return SA_AIS_ERR_NOT_SUPPORTED */
+ SaAisErrorT rc = SA_AIS_ERR_NOT_SUPPORTED;
+ TRACE_ENTER();
+ TRACE_LEAVE2("API return code = %u", rc);
+ return rc;
+}
+
+/****************************************************************************
+Name : saCkptCheckpointTrackStop
+
+Description : This function disables the specific Checkpoint Track call
back
+
+Arguments : checkpointHandle - The handle that designates the checkpoint
+to disables Track.
+
+Return Values : Refer to SAI-AIS specification for various return values.
+
+Notes :
+
******************************************************************************/
+SaAisErrorT saCkptCheckpointTrackStop(SaCkptCheckpointHandleT checkpointHandle)
+{
+ /* TODO: Not supported yet.
+ In future to support checkpoint tracking stop "per (checkpoint -
handle) SaCkptCheckpointHandleT ".
+ this is a placeholder for future enhancement the
saCkptCheckpointTrack() is in place, but
+ will return SA_AIS_ERR_NOT_SUPPORTED */
+ SaAisErrorT rc = SA_AIS_ERR_NOT_SUPPORTED;
+ TRACE_ENTER();
+ TRACE_LEAVE2("API return code = %u", rc);
+ return rc;
+}
+
diff --git a/osaf/libs/agents/saf/cpa/cpa_proc.c
b/osaf/libs/agents/saf/cpa/cpa_proc.c
--- a/osaf/libs/agents/saf/cpa/cpa_proc.c
+++ b/osaf/libs/agents/saf/cpa/cpa_proc.c
@@ -1031,10 +1031,10 @@ static void cpa_process_callback_info(CP
}
break;
case CPA_CALLBACK_TYPE_ARRIVAL_NTFY:
- if (cl_node->ckptArrivalCallback) {
+ if (cl_node->ckpt_callbk.saCkptCheckpointTrackCallback) {
uint32_t i = 0;
- cl_node->ckptArrivalCallback(callback->lcl_ckpt_hdl,
callback->ioVector,
- callback->num_of_elmts);
+
cl_node->ckpt_callbk.saCkptCheckpointTrackCallback(callback->lcl_ckpt_hdl,
callback->ioVector,
+ callback->num_of_elmts);
for (i = 0; i < callback->num_of_elmts; i++) {
if (callback->ioVector[i].sectionId.id != NULL
&& callback->ioVector[i].sectionId.idLen !=
0)
diff --git a/osaf/libs/common/cpsv/cpsv_edu.c b/osaf/libs/common/cpsv/cpsv_edu.c
--- a/osaf/libs/common/cpsv/cpsv_edu.c
+++ b/osaf/libs/common/cpsv/cpsv_edu.c
@@ -87,7 +87,7 @@ FUNC_DECLARATION(CPD_EVT);
FUNC_DECLARATION(CPA_EVT);
FUNC_DECLARATION(CPSV_EVT);
FUNC_DECLARATION(CPSV_A2ND_CKPT_LIST_UPDATE);
-
+FUNC_DECLARATION(CPSV_A2ND_ARRIVAL_UNREG);
/* Test function declaration */
TEST_FUNC_DECLARATION(CPSV_EVT);
TEST_FUNC_DECLARATION(CPA_EVT);
@@ -1086,6 +1086,21 @@ FUNC_DECLARATION(DS)
#undef DS
+#define DS CPSV_A2ND_ARRIVAL_UNREG
+FUNC_DECLARATION(DS)
+{
+ NCS_ENC_DEC_DECLARATION(DS);
+ NCS_ENC_DEC_ARRAY(DS) {
+
+ {
+ EDU_START, FUNC_NAME(CPSV_A2ND_ARRIVAL_UNREG), 0, 0, 0,
sizeof(DS), 0, NULL}, {
+ EDU_EXEC, ncs_edp_uns64, 0, 0, 0, (long)&((DS
*) 0)->client_hdl, 0, NULL}, {
+ EDU_END, 0, 0, 0, 0, 0, 0, NULL},};
+ NCS_ENC_DEC_REM_FLOW(DS)
+}
+
+#undef DS
+
/* CPD --> CPND */
#define DS CPSV_CPND_DEST_INFO
FUNC_DECLARATION(DS)
@@ -1234,6 +1249,7 @@ FUNC_DECLARATION(DS)
#undef DS
+
#define DS CPND_EVT
TEST_FUNC_DECLARATION(DS)
{
@@ -1301,6 +1317,7 @@ TEST_FUNC_DECLARATION(DS)
LCL_TEST_JUMP_OFFSET_CPND_EVT_D2ND_CKPT_NUM_SECTIONS,
LCL_TEST_JUMP_OFFSET_CPND_EVT_A2ND_CKPT_LIST_UPDATE,
+ LCL_TEST_JUMP_OFFSET_CPND_EVT_A2ND_ARRIVAL_CB_UNREG,
};
@@ -1416,6 +1433,8 @@ TEST_FUNC_DECLARATION(DS)
return LCL_TEST_JUMP_OFFSET_CPSV_D2ND_RESTART_DONE;
case CPND_EVT_A2ND_CKPT_LIST_UPDATE:
return LCL_TEST_JUMP_OFFSET_CPND_EVT_A2ND_CKPT_LIST_UPDATE;
+ case CPND_EVT_A2ND_ARRIVAL_CB_UNREG:
+ return LCL_TEST_JUMP_OFFSET_CPND_EVT_A2ND_ARRIVAL_CB_UNREG;
default:
return EDU_FAIL;
}
@@ -1520,6 +1539,7 @@ FUNC_DECLARATION(DS)
EDU_EXEC, FUNC_NAME(CPSV_CKPT_NUM_SECTIONS), 0, 0, EDU_EXIT,
(long)&((DS *) 0)->info.ckpt_sections, 0, NULL}, {
EDU_EXEC, FUNC_NAME(CPSV_A2ND_CKPT_LIST_UPDATE), 0, 0,
EDU_EXIT, (long)&((DS *) 0)->info.ckptListUpdate, 0, NULL},{
+ EDU_EXEC, FUNC_NAME(CPSV_A2ND_ARRIVAL_UNREG), 0, 0,
EDU_EXIT, (long)&((DS *) 0)->info.arr_ntfy, 0, NULL},{
EDU_END, 0, 0, 0, 0, 0, 0, NULL},};
NCS_ENC_DEC_REM_FLOW(DS)
}
diff --git a/osaf/libs/common/cpsv/include/cpa_cb.h
b/osaf/libs/common/cpsv/include/cpa_cb.h
--- a/osaf/libs/common/cpsv/include/cpa_cb.h
+++ b/osaf/libs/common/cpsv/include/cpa_cb.h
@@ -28,9 +28,9 @@ typedef struct cpa_client_node {
SaCkptHandleT cl_hdl; /* index for the tree */
uint8_t stale; /*Loss of connection with cpnd because of clm
node left
will set this to true for the connection. */
- SaCkptCallbacksT ckpt_callbk;
+ SaCkptCallbacksT_2 ckpt_callbk;
SYSF_MBX callbk_mbx; /* Mailbox Queue for client messages */
- ncsCkptCkptArrivalCallbackT ckptArrivalCallback; /* NCS callback
extention */
+ bool is_track_enabled;
SaVersionT version;
} CPA_CLIENT_NODE;
diff --git a/osaf/libs/common/cpsv/include/cpa_def.h
b/osaf/libs/common/cpsv/include/cpa_def.h
--- a/osaf/libs/common/cpsv/include/cpa_def.h
+++ b/osaf/libs/common/cpsv/include/cpa_def.h
@@ -21,7 +21,7 @@
/* Macros for Validating Version */
#define CPA_RELEASE_CODE 'B'
#define CPA_MAJOR_VERSION 0x02
-#define CPA_MINOR_VERSION 0x02
+#define CPA_MINOR_VERSION 0x03
#define CPA_BASE_MAJOR_VERSION 0x01
#define CPA_BASE_MINOR_VERSION 0x01
diff --git a/osaf/libs/common/cpsv/include/cpa_proc.h
b/osaf/libs/common/cpsv/include/cpa_proc.h
--- a/osaf/libs/common/cpsv/include/cpa_proc.h
+++ b/osaf/libs/common/cpsv/include/cpa_proc.h
@@ -23,7 +23,7 @@ typedef enum cpa_callback_type {
CPA_CALLBACK_TYPE_OPEN = 1,
CPA_CALLBACK_TYPE_SYNC,
CPA_CALLBACK_TYPE_ARRIVAL_NTFY,
- CPA_CALLBACK_TYPE_MAX = CPA_CALLBACK_TYPE_SYNC
+ CPA_CALLBACK_TYPE_MAX = CPA_CALLBACK_TYPE_ARRIVAL_NTFY
} CPA_CALLBACK_TYPE;
/* Info required for Call back */
diff --git a/osaf/libs/common/cpsv/include/cpsv.h
b/osaf/libs/common/cpsv/include/cpsv.h
--- a/osaf/libs/common/cpsv/include/cpsv.h
+++ b/osaf/libs/common/cpsv/include/cpsv.h
@@ -74,6 +74,13 @@
((ver)->releaseCode > 'B') )&& \
((ver)->majorVersion > 0x01 ) && \
((ver)->minorVersion > 0x01 ) )
+
+#define m_CPA_VER_IS_BELOW_B_2_3(ver) \
+ (((ver)->releaseCode != 'B') || \
+ ((ver)->majorVersion != 0x02 ) || \
+ ((ver)->minorVersion < 0x03 ) )
+
+
#define m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(attr) \
((attr)->creationFlags & SA_CKPT_CHECKPOINT_COLLOCATED)
diff --git a/osaf/libs/common/cpsv/include/cpsv_evt.h
b/osaf/libs/common/cpsv/include/cpsv_evt.h
--- a/osaf/libs/common/cpsv/include/cpsv_evt.h
+++ b/osaf/libs/common/cpsv/include/cpsv_evt.h
@@ -30,6 +30,7 @@
#define CPSV_EVT_H
#include <saCkpt.h>
+#include <saCkpt_B_02_03.h>
#include "ncssysf_tmr.h"
/*****************************************************************************
@@ -115,7 +116,7 @@ typedef enum cpnd_evt_type {
CPND_EVT_A2ND_CKPT_ITER_GETNEXT, /* Checkpoint Section
Iternation Getnext Call */
- CPND_EVT_A2ND_ARRIVAL_CB_REG, /* Checkpoint Arrival Callback */
+ CPND_EVT_A2ND_ARRIVAL_CB_REG, /* Checkpoint Arrival Callback
Register*/
CPND_EVT_A2ND_CKPT_WRITE, /* Checkpoint Write And overwrite call
*/
CPND_EVT_A2ND_CKPT_READ, /* Checkpoint Read Call */
@@ -177,6 +178,7 @@ typedef enum cpnd_evt_type {
CPND_EVT_D2ND_CKPT_NUM_SECTIONS,
CPND_EVT_A2ND_CKPT_REFCNTSET, /* ref cont opener's set call */
CPND_EVT_A2ND_CKPT_LIST_UPDATE, /* Checkpoint ckpt list update Call */
+ CPND_EVT_A2ND_ARRIVAL_CB_UNREG, /* Checkpoint Arrival Callback
Un-Register*/
CPND_EVT_MAX
}CPND_EVT_TYPE;
@@ -394,6 +396,10 @@ typedef struct cpsv_a2nd_arrival_reg {
SaCkptCheckpointHandleT client_hdl;
} CPSV_A2ND_ARRIVAL_REG;
+typedef struct cpsv_a2nd_arrival_unreg {
+ SaCkptCheckpointHandleT client_hdl;
+} CPSV_A2ND_ARRIVAL_UNREG;
+
typedef struct cpsv_a2nd_sync_ckpt {
SaCkptCheckpointHandleT ckpt_id;
SaCkptCheckpointHandleT lcl_ckpt_hdl;
diff --git a/osaf/libs/saf/include/Makefile.am
b/osaf/libs/saf/include/Makefile.am
--- a/osaf/libs/saf/include/Makefile.am
+++ b/osaf/libs/saf/include/Makefile.am
@@ -22,6 +22,7 @@ include_HEADERS = \
saAis.h \
saAmf.h \
saCkpt.h \
+ saCkpt_B_02_03.h \
saClm.h \
saEvt.h \
saImm.h \
diff --git a/osaf/libs/saf/include/saCkpt_B_02_03.h
b/osaf/libs/saf/include/saCkpt_B_02_03.h
new file mode 100644
--- /dev/null
+++ b/osaf/libs/saf/include/saCkpt_B_02_03.h
@@ -0,0 +1,152 @@
+/* -*- OpenSAF -*-
+ *
+ * (C) Copyright 2008 The OpenSAF Foundation
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. This file and program are licensed
+ * under the GNU Lesser General Public License Version 2.1, February 1999.
+ * The complete license can be accessed from the following location:
+ * http://opensource.org/licenses/lgpl-license.php
+ * See the Copying file included with the OpenSAF distribution for full
+ * licensing terms.
+ *
+ * Author(s): Goahead
+ */
+
+/*
+ * DESCRIPTION:
+ * This file provides the suggested additions to the C language binding for
+ * the Service Availability(TM) Forum Information Model Management Service
(CKPT).
+ * It contains only the prototypes and type definitions that are part of this
+ * proposed addition.
+ * These additions are currently NON STANDARD. But the intention is to get
these
+ * additions approved formally by SAF in the future.
+ *
+ */
+
+#ifndef _SA_CKPT_B_02_03_H
+#define _SA_CKPT_B_02_03_H
+
+#include "saAis.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
/***************************************************************************
+ @brief : The Checkpoint Service invokes this callback function when
the
+ ckpt write, ckpt section create and ckpt section delete
happens
+ for the ALL the Checkpoints which are opened with
CHECKPOINT_WRITE
+ Open Flags by the ckptHandle invoking process .
+ @param[in] : checkpointHandle - A pointer to the checkpoint handle
which was
+ obtained by saCkptCheckpointOpen.
+ @param[out] : ioVector - A pointer to an array that contains elements
ioVector[0],
+ @param[out] : numberOfElements - Size of the ioVector.
+
****************************************************************************/
+ typedef void
+ (*SaCkptCheckpointTrackCallbackT) (SaCkptCheckpointHandleT
checkpointHandle,
+ SaCkptIOVectorElementT *ioVector,
+ SaUint32T numberOfElements);
+
+
/***************************************************************************
+ @brief : The callbacks structure is supplied to the Checkpoint
Service by a
+ process and contains the callback functions that the
+ Checkpoint Service can invoke.
+
*****************************************************************************/
+ typedef struct {
+ SaCkptCheckpointOpenCallbackT saCkptCheckpointOpenCallback;
+ SaCkptCheckpointSynchronizeCallbackT
saCkptCheckpointSynchronizeCallback;
+ SaCkptCheckpointTrackCallbackT saCkptCheckpointTrackCallback;
+ } SaCkptCallbacksT_2;
+
+
/***************************************************************************
+ @brief : saCkptInitialize_2 function initializes the Checkpoint
Service
+ for the invoking process and registers the various
callback functions.
+ The handle 'ckptHandle' is returned as the reference to
this
+ association between the process and the Checkpoint
Service..
+ @param[out] : ckptHandle - A pointer to the handle designating this
+ particular initialization of the Checkpoint
+ service that it to be returned by the Checkpoint
Service.
+ @param[in] : ckptCallbacks-Pointer to a SaCkptCallbacksT_2 structure,
+ containing the callback functions of the process
+ that the Checkpoint Service may invoke.
+ @param[in] : version - Is a pointer to the version of the Checkpoint
+ Service that the invoking process is using.
+ @return : SA_AIS_OK if successful otherwise appropriate err code,
+ Refer to SAI-AIS specification for various return
values.
+
*****************************************************************************/
+ extern SaAisErrorT
+ saCkptInitialize_2(SaCkptHandleT *ckptHandle, const
SaCkptCallbacksT_2 *callbacks, SaVersionT *version);
+
+
/***************************************************************************
+ @brief : saCkptTrack function enable/starts the Ckpt Track callback
+ function (saCkptCheckpointTrackCallback) which was
registered
+ at the time of initializes for the ckptHandle invoking
process.
+ The registered Track Callback function will be invoked
whenever
+ ckpt write, ckpt section create and ckpt section delete
happens
+ for the ALL the Checkpoints which are opened with
CHECKPOINT_WRITE
+ Open Flags by the ckptHandle invoking process .
+ @param[in] : ckptHandle - A pointer to the handle designating this
+ particular initialization of the Checkpoint
+ service which was returned at the time of initialize().
+ @return : SA_AIS_OK if successful otherwise appropriate err code,
+ Refer to SAI-AIS specification for various return
values.
+
*****************************************************************************/
+ extern SaAisErrorT
+ saCkptTrack(SaCkptHandleT ckptHandle);
+
+
/***************************************************************************
+ @brief : saCkptTrackStop function disables/stops the Ckpt Track
callback
+ function (saCkptCheckpointTrackCallback) which was
registered at
+ the time of initializes for the ckptHandle invoking
process.
+ The registered Track Callback function will be disabled
for
+ ckpt write, ckpt section create and ckpt section delete
happens
+ for the ALL the Checkpoints which are opened with
CHECKPOINT_WRITE
+ Open Flags by the ckptHandle invoking process .
+ @param[in] : ckptHandle - A pointer to the handle designating this
+ particular initialization of the Checkpoint
+ service which was returned at the time of initialize().
+ @return : SA_AIS_OK if successful otherwise appropriate err code ,
+ Refer to SAI-AIS specification for various return
values.
+
*****************************************************************************/
+ extern SaAisErrorT
+ saCkptTrackStop(SaCkptHandleT ckptHandle);
+
+
/***************************************************************************
+ @brief : saCkptCheckpointTrack function enable/starts the Ckpt Track
+ callback function (saCkptCheckpointTrackCallback) which
was
+ registered at the time of initializes for a particular
checkpointHandle.
+ The registered Track Callback function will be invoked
+ whenever ckpt write, ckpt section create and ckpt
section
+ delete happens for the Checkpoints which are opened with
+ CHECKPOINT_WRITE Open Flags by a particular
checkpointHandle.
+ @param[in] : checkpointHandle -A pointer to the checkpoint handle
+ which was obtained by saCkptCheckpointOpen
+ @return : SA_AIS_OK if successful otherwise appropriate err code,
+ Refer to SAI-AIS specification for various return
values.
+
*****************************************************************************/
+ extern SaAisErrorT
+ saCkptCheckpointTrack(SaCkptCheckpointHandleT checkpointHandle);
+
+
/***************************************************************************
+ @brief : saCkptCheckpointTrack function disables/stops the Ckpt Track
+ callback function (saCkptCheckpointTrackCallback) which
was
+ registered at the time of initializes for a particular
checkpointHandle.
+ The registered Track Callback function will be disabled
for
+ ckpt write, ckpt section create and ckpt section delete
happens
+ for the Checkpoints which are opened with
CHECKPOINT_WRITE
+ Open Flags by a particular checkpointHandle .
+ @param[in] : checkpointHandle -A pointer to the checkpoint handle which
+ was obtained by saCkptCheckpointOpen
+ @return : SA_AIS_OK if successful otherwise appropriate err code,
+ Refer to SAI-AIS specification for various return
values.
+
*****************************************************************************/
+ extern SaAisErrorT
+ saCkptCheckpointTrackStop(SaCkptCheckpointHandleT
checkpointHandle);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SA_CKPT_B_02_03_H */
diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_evt.c
b/osaf/services/saf/cpsv/cpnd/cpnd_evt.c
--- a/osaf/services/saf/cpsv/cpnd/cpnd_evt.c
+++ b/osaf/services/saf/cpsv/cpnd/cpnd_evt.c
@@ -59,6 +59,7 @@ static uint32_t cpnd_evt_proc_nd2nd_ckpt
static uint32_t cpnd_evt_proc_nd2nd_ckpt_active_data_access_rsp(CPND_CB *cb,
CPND_EVT *evt, CPSV_SEND_INFO *sinfo);
static uint32_t cpnd_evt_proc_ckpt_sync(CPND_CB *cb, CPND_EVT *evt,
CPSV_SEND_INFO *sinfo);
static uint32_t cpnd_evt_proc_arrival_cbreg(CPND_CB *cb, CPND_EVT *evt,
CPSV_SEND_INFO *sinfo);
+static uint32_t cpnd_evt_proc_arrival_cbunreg(CPND_CB *cb, CPND_EVT *evt,
CPSV_SEND_INFO *sinfo);
static uint32_t cpnd_evt_proc_nd2nd_ckpt_sync_req(CPND_CB *cb, CPND_EVT *evt,
CPSV_SEND_INFO *sinfo);
static uint32_t cpnd_evt_proc_nd2nd_ckpt_active_sync(CPND_CB *cb, CPND_EVT
*evt, CPSV_SEND_INFO *sinfo);
static uint32_t cpnd_evt_proc_ckpt_read(CPND_CB *cb, CPND_EVT *evt,
CPSV_SEND_INFO *sinfo);
@@ -105,7 +106,7 @@ static char *cpnd_evt_str[] = {
"CPND_EVT_A2ND_CKPT_READ", /* Checkpoint Read Call */
"CPND_EVT_A2ND_CKPT_SYNC", /* Checkpoint Synchronize call */
"CPND_EVT_A2ND_CKPT_READ_ACK", /* read ack */
- "CPND_EVT_A2ND_ARRIVAL_CB_REG", /* Arrival Callback Register */
+ "CPND_EVT_A2ND_ARRIVAL_CB_REG", /* Track Callback Register */
"CPND_EVT_ND2ND_ACTIVE_STATUS", /* ckpt status info from active */
/* Not used Anywhere from 3.0.2 */
"CPND_EVT_ND2ND_ACTIVE_STATUS_ACK", /* ckpt status ack from active
*/ /*Not used Anywhere from 3.0.2 */
@@ -148,6 +149,7 @@ static char *cpnd_evt_str[] = {
"CPND_EVT_D2ND_CKPT_NUM_SECTIONS",
"CPND_EVT_A2ND_CKPT_REFCNTSET",
"CPND_EVT_A2ND_CKPT_LIST_UPDATE", /* Checkpoint ckpt list update
Call */
+ "CPND_EVT_A2ND_ARRIVAL_CB_UNREG", /* Track Callback Un-Register
*/
"CPND_EVT_MAX"
};
#endif
@@ -264,6 +266,9 @@ void cpnd_process_evt(CPSV_EVT *evt)
case CPND_EVT_A2ND_ARRIVAL_CB_REG:
(void)cpnd_evt_proc_arrival_cbreg(cb, &evt->info.cpnd,
&evt->sinfo);
break;
+ case CPND_EVT_A2ND_ARRIVAL_CB_UNREG:
+ (void)cpnd_evt_proc_arrival_cbunreg(cb, &evt->info.cpnd,
&evt->sinfo);
+ break;
case CPND_EVT_D2ND_CKPT_ACTIVE_SET: /* broadcast message */
(void)cpnd_evt_proc_ckpt_active_set(cb, &evt->info.cpnd,
&evt->sinfo);
break;
@@ -3312,6 +3317,38 @@ static uint32_t cpnd_evt_proc_arrival_cb
return rc;
}
+/******************************************************************************
+ * Name : cpnd_evt_proc_arrival_cbunreg
+ *
+ * Description : Function to process the arrival callback registration
+ *
+ * Arguments : CPND_CB *cb - CPND CB pointer
+ * CPSV_EVT *evt - Received Event structure
+ * CPSV_SEND_INFO *sinfo - Sender MDS information.
+ *
+ * Return Values : NCSCC_RC_SUCCESS/Error
+ *
+ *****************************************************************************/
+static uint32_t cpnd_evt_proc_arrival_cbunreg(CPND_CB *cb, CPND_EVT *evt,
CPSV_SEND_INFO *sinfo)
+{
+ CPND_CKPT_CLIENT_NODE *cl_node = NULL;
+ uint32_t rc = NCSCC_RC_SUCCESS;
+
+ TRACE_ENTER();
+ cpnd_client_node_get(cb, evt->info.arr_ntfy.client_hdl, &cl_node);
+ if (cl_node == NULL) {
+ TRACE_4("cpnd client hdl get failed for
client_hdl:%llx",evt->info.arr_ntfy.client_hdl);
+ rc = NCSCC_RC_FAILURE;
+ TRACE_LEAVE();
+ return rc;
+ }
+ cl_node->arrival_cb_flag = false;
+
+ cpnd_restart_set_arrcb(cb, cl_node);
+ TRACE_LEAVE();
+ return rc;
+}
+
/****************************************************************************
* Name : cpnd_evt_proc_nd2nd_ckpt_sync_req
*
------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT
organizations don't have a clear picture of how application performance
affects their revenue. With AppDynamics, you get 100% visibility into your
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel