Please find some comments inline with [Praveen]
Thanks,
Praveen
On 11-Jul-16 3:38 PM, Long HB Nguyen wrote:
> osaf/libs/agents/saf/amfa/Makefile.am | 1 +
> osaf/libs/agents/saf/amfa/amf_agent.cc | 638
> ++++++++++++++-------------
> osaf/libs/agents/saf/amfa/ava_hdl.cc | 246 +++++----
> osaf/libs/agents/saf/amfa/ava_init.cc | 21 +-
> osaf/libs/agents/saf/amfa/ava_mds.cc | 448 +++++++++++++++++++-
> osaf/libs/agents/saf/amfa/ava_op.cc | 23 +-
> osaf/libs/agents/saf/amfa/include/ava.h | 1 +
> osaf/libs/agents/saf/amfa/include/ava_cb.h | 1 +
> osaf/libs/agents/saf/amfa/include/ava_mds.h | 267 +---------
> 9 files changed, 979 insertions(+), 667 deletions(-)
>
>
> diff --git a/osaf/libs/agents/saf/amfa/Makefile.am
> b/osaf/libs/agents/saf/amfa/Makefile.am
> --- a/osaf/libs/agents/saf/amfa/Makefile.am
> +++ b/osaf/libs/agents/saf/amfa/Makefile.am
> @@ -25,6 +25,7 @@ noinst_LTLIBRARIES = libava.la
> libava_la_CXXFLAGS = $(AM_CXXFLAGS)
>
> libava_la_CPPFLAGS = \
> + -DSA_EXTENDED_NAME_SOURCE \
> $(AM_CPPFLAGS) \
> -I$(top_srcdir)/osaf/libs/common/amf/include \
> -I$(top_srcdir)/osaf/libs/agents/saf/amfa/include
> 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
> @@ -366,7 +366,7 @@ SaAisErrorT AmfAgent::Finalize(SaAmfHand
> }
>
> /* populate & send the finalize message */
> - m_AVA_AMF_FINALIZE_MSG_FILL(msg, cb->ava_dest, hdl, cb->comp_name);
> + ava_fill_finalize_msg(&msg, cb->ava_dest, hdl, cb->comp_name);
> rc = static_cast<SaAisErrorT>(ava_mds_send(cb, &msg, 0));
> if (NCSCC_RC_SUCCESS == rc) {
> ncshm_give_hdl(hdl);
> @@ -429,13 +429,12 @@ SaAisErrorT AmfAgent::ComponentRegister(
> AVA_HDL_REC *hdl_rec = 0;
> AVSV_NDA_AVA_MSG msg = {};
> AVSV_NDA_AVA_MSG *msg_rsp = 0;
> - SaNameT pcomp_name = {0};
> + SaNameT pcomp_name;
> SaAisErrorT rc = SA_AIS_OK;
> TRACE_ENTER2("SaAmfHandleT passed is %llx", hdl);
>
> - if (!comp_name || !(comp_name->length) ||
> - (comp_name->length > SA_MAX_NAME_LENGTH) ||
> - (proxy_comp_name && (!proxy_comp_name->length ||
> proxy_comp_name->length > SA_MAX_NAME_LENGTH))) {
> + if (!comp_name || !ava_sanamet_is_valid(comp_name) ||
> + (proxy_comp_name && !ava_sanamet_is_valid(proxy_comp_name))) {
> TRACE_LEAVE2("Incorrect arguments");
> return SA_AIS_ERR_INVALID_PARAM;
> }
> @@ -461,15 +460,17 @@ SaAisErrorT AmfAgent::ComponentRegister(
> }
>
> if (!m_AVA_FLAG_IS_COMP_NAME(cb)) {
> - if (getenv("SA_AMF_COMPONENT_NAME")) {
> - if (strlen(getenv("SA_AMF_COMPONENT_NAME")) < SA_MAX_NAME_LENGTH) {
> - strcpy((char *)cb->comp_name.value, getenv("SA_AMF_COMPONENT_NAME"));
> - cb->comp_name.length = (uint16_t)strlen((char *)cb->comp_name.value);
> - m_AVA_FLAG_SET(cb, AVA_FLAG_COMP_NAME);
> - } else {
> - TRACE_2("Length of SA_AMF_COMPONENT_NAME exceeds SA_MAX_NAME_LENGTH
> bytes");
> + SaConstStringT env_comp_name = getenv("SA_AMF_COMPONENT_NAME");
> + if (env_comp_name) {
> + if (strlen(env_comp_name) > kOsafMaxDnLength) {
> + TRACE_2("Length of SA_AMF_COMPONENT_NAME exceeds "
> + "kOsafMaxDnLength(%d) bytes", kOsafMaxDnLength);
> rc = SA_AIS_ERR_INVALID_PARAM;
> goto done;
> + } else {
> + // @cb->comp_name could be longDN, need to be freed later
> + osaf_extended_name_alloc(env_comp_name, &cb->comp_name);
> + m_AVA_FLAG_SET(cb, AVA_FLAG_COMP_NAME);
> }
> } else {
> TRACE_2("The SA_AMF_COMPONENT_NAME environment variable is NULL");
> @@ -481,26 +482,31 @@ SaAisErrorT AmfAgent::ComponentRegister(
> ncshm_give_hdl(gl_ava_hdl);
>
> /* non-proxied, component Length part of component name should be OK */
> - if (!proxy_comp_name && (comp_name->length != cb->comp_name.length)) {
> + if (!proxy_comp_name && (osaf_extended_name_length(comp_name) !=
> + osaf_extended_name_length(&cb->comp_name))) {
> rc = SA_AIS_ERR_INVALID_PARAM;
> goto done;
> }
>
> /* proxy component, Length part of proxy component name should be Ok */
> - if (proxy_comp_name && (proxy_comp_name->length != cb->comp_name.length)) {
> + if (proxy_comp_name && (osaf_extended_name_length(proxy_comp_name) !=
> + osaf_extended_name_length(&cb->comp_name))) {
> rc = SA_AIS_ERR_INVALID_PARAM;
> goto done;
> }
>
> /* non-proxied component should not forge its name while registering */
> - if (!proxy_comp_name && strncmp((char *)comp_name->value, (char
> *)cb->comp_name.value, comp_name->length)) {
> + if (!proxy_comp_name && strncmp(osaf_extended_name_borrow(comp_name),
> + osaf_extended_name_borrow(&cb->comp_name),
> + osaf_extended_name_length(comp_name))) {
> rc = SA_AIS_ERR_BAD_OPERATION;
> goto done;
> }
>
> /* proxy component should not forge its name while registering its proxied
> */
> - if (proxy_comp_name &&
> - strncmp((char *)proxy_comp_name->value, (char *)cb->comp_name.value,
> proxy_comp_name->length)) {
> + if (proxy_comp_name && strncmp(osaf_extended_name_borrow(proxy_comp_name),
> + osaf_extended_name_borrow(&cb->comp_name),
> + osaf_extended_name_length(proxy_comp_name))) {
> TRACE("proxy component should not forge its name while registering its
> proxied");
> rc = SA_AIS_ERR_BAD_OPERATION;
> goto done;
> @@ -515,8 +521,10 @@ SaAisErrorT AmfAgent::ComponentRegister(
>
> /* 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);
> + osaf_extended_name_lend(osaf_extended_name_borrow(proxy_comp_name),
> &pcomp_name);
> + else
> + memset(&pcomp_name, 0, sizeof(SaNameT));
> + ava_fill_comp_reg_msg(&msg, cb->ava_dest, hdl, *comp_name, pcomp_name);
> 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);
> @@ -573,13 +581,12 @@ SaAisErrorT AmfAgent::ComponentUnregiste
> AVSV_NDA_AVA_MSG *msg_rsp = 0;
> AVA_CB *cb = 0;
> AVA_HDL_REC *hdl_rec = 0;
> - SaNameT pcomp_name = {0};
> + SaNameT pcomp_name;
> SaAisErrorT rc = SA_AIS_OK;
> TRACE_ENTER2("SaAmfHandleT passed is %llx", hdl);
>
> - if (!comp_name || !(comp_name->length) ||
> - (comp_name->length > SA_MAX_NAME_LENGTH) ||
> - (proxy_comp_name && (!proxy_comp_name->length ||
> proxy_comp_name->length > SA_MAX_NAME_LENGTH))) {
> + if (!comp_name || !ava_sanamet_is_valid(comp_name) ||
> + (proxy_comp_name && !ava_sanamet_is_valid(proxy_comp_name))) {
> TRACE_LEAVE2("Incorrect arguments");
> return SA_AIS_ERR_INVALID_PARAM;
> }
> @@ -605,27 +612,31 @@ SaAisErrorT AmfAgent::ComponentUnregiste
> }
>
> /* non-proxied, component Length part of component name should be OK */
> - if (!proxy_comp_name && (comp_name->length != cb->comp_name.length)) {
> + if (!proxy_comp_name && (osaf_extended_name_length(comp_name) !=
> + osaf_extended_name_length(&cb->comp_name))) {
> rc = SA_AIS_ERR_INVALID_PARAM;
> goto done;
> }
>
> /* proxy component, Length part of proxy component name should be Ok */
> - if (proxy_comp_name && (proxy_comp_name->length != cb->comp_name.length)) {
> + if (proxy_comp_name && (osaf_extended_name_length(proxy_comp_name) !=
> + osaf_extended_name_length(&cb->comp_name))) {
> rc = SA_AIS_ERR_INVALID_PARAM;
> goto done;
> }
> -
> - /* non-proxied component should not forge its name while unregistering */
> - if (!proxy_comp_name && strncmp((char *)comp_name->value, (char
> *)cb->comp_name.value, comp_name->length)) {
> + /* non-proxied component should not forge its name while registering */
> + if (!proxy_comp_name && strncmp(osaf_extended_name_borrow(comp_name),
> + osaf_extended_name_borrow(&cb->comp_name),
> + osaf_extended_name_length(comp_name))) {
> TRACE("non-proxied component should not forge its name while
> unregistering");
> rc = SA_AIS_ERR_BAD_OPERATION;
> goto done;
> }
>
> /* proxy component should not forge its name while unregistering proxied */
> - if (proxy_comp_name &&
> - strncmp((char *)proxy_comp_name->value, (char *)cb->comp_name.value,
> proxy_comp_name->length)) {
> + if (proxy_comp_name && strncmp(osaf_extended_name_borrow(proxy_comp_name),
> + osaf_extended_name_borrow(&cb->comp_name),
> + osaf_extended_name_length(proxy_comp_name))) {
> TRACE("proxy component should not forge its name while unregistering
> proxied");
> rc = SA_AIS_ERR_BAD_OPERATION;
> goto done;
> @@ -633,8 +644,10 @@ SaAisErrorT AmfAgent::ComponentUnregiste
>
> /* populate & send the unregister message */
> if (proxy_comp_name)
> - pcomp_name = *proxy_comp_name;
> - m_AVA_COMP_UNREG_MSG_FILL(msg, cb->ava_dest, hdl, *comp_name, pcomp_name);
> + osaf_extended_name_lend(osaf_extended_name_borrow(proxy_comp_name),
> &pcomp_name);
> + else
> + memset(&pcomp_name, 0, sizeof(SaNameT));
> + ava_fill_comp_unreg_msg(&msg, cb->ava_dest, hdl, *comp_name, pcomp_name);
> 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);
> @@ -707,7 +720,7 @@ SaAisErrorT AmfAgent::HealthcheckStart(S
> return SA_AIS_ERR_INVALID_PARAM;
> }
>
> - if (!comp_name || !(comp_name->length) || (comp_name->length >
> SA_MAX_NAME_LENGTH) ||
> + if (!comp_name || !ava_sanamet_is_valid(comp_name) ||
> !hc_key || !(hc_key->keyLen) || (hc_key->keyLen >
> SA_AMF_HEALTHCHECK_KEY_MAX)) {
> TRACE_LEAVE2("Incorrect arguments");
> return SA_AIS_ERR_INVALID_PARAM;
> @@ -757,7 +770,7 @@ SaAisErrorT AmfAgent::HealthcheckStart(S
> }
>
> /* populate & send the healthcheck start message */
> - m_AVA_HC_START_MSG_FILL(msg, cb->ava_dest, hdl, *comp_name, cb->comp_name,
> *hc_key, inv, rec_rcvr);
> + ava_fill_hc_start_msg(&msg, cb->ava_dest, hdl, *comp_name, cb->comp_name,
> *hc_key, inv, rec_rcvr);
> 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);
> @@ -813,7 +826,7 @@ SaAisErrorT AmfAgent::HealthcheckStop(Sa
> SaAisErrorT rc = SA_AIS_OK;
> TRACE_ENTER2("SaAmfHandleT passed is %llx", hdl);
>
> - if (!comp_name || !(comp_name->length) || (comp_name->length >
> SA_MAX_NAME_LENGTH) ||
> + if (!comp_name || !ava_sanamet_is_valid(comp_name) ||
> !hc_key || !(hc_key->keyLen) || (hc_key->keyLen >
> SA_AMF_HEALTHCHECK_KEY_MAX)) {
> TRACE_LEAVE2("Incorrect arguments");
> return SA_AIS_ERR_INVALID_PARAM;
> @@ -833,18 +846,107 @@ SaAisErrorT AmfAgent::HealthcheckStop(Sa
> }
> /* acquire cb read lock */
> m_NCS_LOCK(&cb->lock, NCS_LOCK_READ);
> + /* retrieve hdl rec */
> + if ( !(hdl_rec = (AVA_HDL_REC *)ncshm_take_hdl(NCS_SERVICE_ID_AVA, hdl)) )
> {
> + rc = SA_AIS_ERR_BAD_HANDLE;
> + goto done;
> + }
> +
> + /* populate & send the healthcheck stop message */
> + ava_fill_hc_stop_msg(&msg, cb->ava_dest, hdl, *comp_name, cb->comp_name,
> *hc_key);
> + 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);
> + osafassert(AVSV_AMF_HC_STOP == msg_rsp->info.api_resp_info.type);
> + rc = msg_rsp->info.api_resp_info.rc;
> + } else if (NCSCC_RC_FAILURE == rc)
> + rc = SA_AIS_ERR_TRY_AGAIN;
> + else if (NCSCC_RC_REQ_TIMOUT == rc)
> + rc = SA_AIS_ERR_TIMEOUT;
> +
> +done:
> + /* release cb read lock and return handles */
> + if (cb) {
> + m_NCS_UNLOCK(&cb->lock, NCS_LOCK_READ);
> + ncshm_give_hdl(gl_ava_hdl);
> + }
> + if (hdl_rec)
> + ncshm_give_hdl(hdl);
> +
> + /* free the contents of the request/response message */
> + if (msg_rsp)
> + avsv_nda_ava_msg_free(msg_rsp);
> + avsv_nda_ava_msg_content_free(&msg);
> +
> + TRACE_LEAVE2("rc:%u", rc);
> + return rc;
> +}
> +
> +/****************************************************************************
> + Name : saAmfHealthcheckConfirm
> +
> + Description : This function allows a process (as part of a component) to
> + inform the AMF that it has performed the healthcheck.
> +
> + Arguments : hdl - AMF handle
> + comp_name - ptr to the comp name
> + hc_key - ptr to the healthcheck type
> + hc_result - healthcheck result
> +
> + Return Values : Refer to SAI-AIS specification for various return values.
> +
> + Notes : None.
> +******************************************************************************/
> +SaAisErrorT saAmfHealthcheckConfirm(SaAmfHandleT hdl,
> + const SaNameT *comp_name, const
> SaAmfHealthcheckKeyT *hc_key, SaAisErrorT hc_result)
> +{
> + return AmfAgent::HealthcheckConfirm(hdl, comp_name, hc_key, hc_result);
> +
> +}
> +
> +SaAisErrorT AmfAgent::HealthcheckConfirm(SaAmfHandleT hdl,
> + const SaNameT *comp_name, const
> SaAmfHealthcheckKeyT *hc_key, SaAisErrorT hc_result) {
> +
> + AVA_CB *cb = 0;
> + AVA_HDL_REC *hdl_rec = 0;
> + AVSV_NDA_AVA_MSG msg = {};
> + AVSV_NDA_AVA_MSG *msg_rsp = 0;
> + SaAisErrorT rc = SA_AIS_OK;
> + TRACE_ENTER2("SaAmfHandleT passed is %llx", hdl);
> +
> + if (!comp_name || !ava_sanamet_is_valid(comp_name) ||
> + !hc_key || !(hc_key->keyLen) || (hc_key->keyLen >
> SA_AMF_HEALTHCHECK_KEY_MAX) ||
> + !m_AVA_AMF_RESP_ERR_CODE_IS_VALID(hc_result)) {
> + TRACE_LEAVE2("Incorrect arguments");
> + return SA_AIS_ERR_INVALID_PARAM;
> + }
> +
> + /* Verifying the input Handle & global handle */
> + if(!gl_ava_hdl || hdl > AVSV_UNS32_HDL_MAX) {
> + TRACE_2("Invalid SaAmfHandle passed by component: %llx",hdl);
> + rc = SA_AIS_ERR_BAD_HANDLE;
> + 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;
> + }
> + /* acquire cb read lock */
> + m_NCS_LOCK(&cb->lock, NCS_LOCK_READ);
> /* retrieve hdl rec */
> if ( !(hdl_rec = (AVA_HDL_REC *)ncshm_take_hdl(NCS_SERVICE_ID_AVA, hdl)) )
> {
> rc = SA_AIS_ERR_BAD_HANDLE;
> goto done;
> }
>
> - /* populate & send the healthcheck stop message */
> - m_AVA_HC_STOP_MSG_FILL(msg, cb->ava_dest, hdl, *comp_name, cb->comp_name,
> *hc_key);
> + /* populate & send the healthcheck confirm message */
> + ava_fill_hc_confirm_msg(&msg, cb->ava_dest, hdl, *comp_name,
> cb->comp_name, *hc_key, hc_result);
> 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);
> - osafassert(AVSV_AMF_HC_STOP == msg_rsp->info.api_resp_info.type);
> + osafassert(AVSV_AMF_HC_CONFIRM == msg_rsp->info.api_resp_info.type);
> rc = msg_rsp->info.api_resp_info.rc;
> } else if (NCSCC_RC_FAILURE == rc)
> rc = SA_AIS_ERR_TRY_AGAIN;
> @@ -870,29 +972,35 @@ done:
> }
>
> /****************************************************************************
> - Name : saAmfHealthcheckConfirm
> + Name : saAmfPmStart
>
> - Description : This function allows a process (as part of a component) to
> - inform the AMF that it has performed the healthcheck.
> + Description : This function allows a process (as part of a comp) to start
> + Passive Monitoring.
>
> - Arguments : hdl - AMF handle
> - comp_name - ptr to the comp name
> - hc_key - ptr to the healthcheck type
> - hc_result - healthcheck result
> + Arguments : hdl - AMF handle
> + comp_name - ptr to the comp name
> + processId - Identifier of a process to be monitored
> + desc_TreeDepth - Depth of the tree of descendents of the
> process
> + pmErr - Specifies the type of process errors to monitor
> + rec_Recovery - recommended recovery
> +
>
> Return Values : Refer to SAI-AIS specification for various return values.
>
> Notes : None.
>
> ******************************************************************************/
> -SaAisErrorT saAmfHealthcheckConfirm(SaAmfHandleT hdl,
> - const SaNameT *comp_name, const
> SaAmfHealthcheckKeyT *hc_key, SaAisErrorT hc_result)
> +SaAisErrorT saAmfPmStart(SaAmfHandleT hdl,
> + const SaNameT *comp_name,
> + SaUint64T processId,
> + SaInt32T desc_TreeDepth, SaAmfPmErrorsT pmErr,
> SaAmfRecommendedRecoveryT rec_Recovery)
> {
> - return AmfAgent::HealthcheckConfirm(hdl, comp_name, hc_key, hc_result);
> -
> + return AmfAgent::PmStart(hdl, comp_name, processId, desc_TreeDepth,
> pmErr, rec_Recovery);
> }
>
> -SaAisErrorT AmfAgent::HealthcheckConfirm(SaAmfHandleT hdl,
> - const SaNameT *comp_name, const
> SaAmfHealthcheckKeyT *hc_key, SaAisErrorT hc_result) {
> +SaAisErrorT AmfAgent::PmStart(SaAmfHandleT hdl,
> + const SaNameT *comp_name,
> + SaUint64T processId,
> + SaInt32T desc_TreeDepth, SaAmfPmErrorsT pmErr,
> SaAmfRecommendedRecoveryT rec_Recovery) {
>
> AVA_CB *cb = 0;
> AVA_HDL_REC *hdl_rec = 0;
> @@ -901,13 +1009,45 @@ SaAisErrorT AmfAgent::HealthcheckConfirm
> SaAisErrorT rc = SA_AIS_OK;
> TRACE_ENTER2("SaAmfHandleT passed is %llx", hdl);
>
> - if (!comp_name || !(comp_name->length) || (comp_name->length >
> SA_MAX_NAME_LENGTH) ||
> - !hc_key || !(hc_key->keyLen) || (hc_key->keyLen >
> SA_AMF_HEALTHCHECK_KEY_MAX) ||
> - !m_AVA_AMF_RESP_ERR_CODE_IS_VALID(hc_result)) {
> + /* input validation of component name */
> + if (!comp_name || !ava_sanamet_is_valid(comp_name)) {
> TRACE_LEAVE2("Incorrect arguments");
> return SA_AIS_ERR_INVALID_PARAM;
> }
>
> + /* input validation of descendant tree depth */
> + if (desc_TreeDepth < AVA_PM_START_ALL_DESCENDENTS) {
> + TRACE_LEAVE2("Incorrect Descendants tree depth");
> + return SA_AIS_ERR_INVALID_PARAM;
> + }
> +
> + /* input validation of pmError */
> + if (pmErr != SA_AMF_PM_NON_ZERO_EXIT && pmErr != SA_AMF_PM_ZERO_EXIT &&
> + pmErr != (SA_AMF_PM_NON_ZERO_EXIT | SA_AMF_PM_ZERO_EXIT)) {
> + if ((pmErr == SA_AMF_PM_ABNORMAL_END) ||
> + (pmErr == (SA_AMF_PM_NON_ZERO_EXIT | SA_AMF_PM_ABNORMAL_END)) ||
> + (pmErr == (SA_AMF_PM_ZERO_EXIT | SA_AMF_PM_ABNORMAL_END)) ||
> + (pmErr == (SA_AMF_PM_ZERO_EXIT | SA_AMF_PM_NON_ZERO_EXIT |
> SA_AMF_PM_ABNORMAL_END))) {
> + TRACE_LEAVE2("Unsupported argument specified for SaAmfPmErrorsT ");
> + return SA_AIS_ERR_NOT_SUPPORTED;
> + } else {
> + TRACE_LEAVE2("Incorrect argument specified for SaAmfPmErrorsT ");
> + return SA_AIS_ERR_INVALID_PARAM;
> + }
> + }
> +
> + /* input validation of Recomended recovery */
> + if (rec_Recovery < SA_AMF_NO_RECOMMENDATION || rec_Recovery >
> SA_AMF_CONTAINER_RESTART) {
> + TRACE_LEAVE2("Incorrect argument specified for
> SaAmfRecommendedRecoveryT");
> + return SA_AIS_ERR_INVALID_PARAM;
> + }
> +
> + /* input validation of Process ID */
> + if (processId == 0) {
> + TRACE_LEAVE2("Incorrect argument specified for PID");
> + return SA_AIS_ERR_INVALID_PARAM;
> + }
> +
> /* Verifying the input Handle & global handle */
> if(!gl_ava_hdl || hdl > AVSV_UNS32_HDL_MAX) {
> TRACE_2("Invalid SaAmfHandle passed by component: %llx",hdl);
> @@ -928,12 +1068,13 @@ SaAisErrorT AmfAgent::HealthcheckConfirm
> goto done;
> }
>
> - /* populate & send the healthcheck confirm message */
> - m_AVA_HC_CONFIRM_MSG_FILL(msg, cb->ava_dest, hdl, *comp_name,
> cb->comp_name, *hc_key, hc_result);
> + /* populate & send the passive monitor start message */
> + ava_fill_pm_start_msg(&msg, cb->ava_dest, hdl, *comp_name, processId,
> desc_TreeDepth, pmErr, rec_Recovery);
> +
> 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);
> - osafassert(AVSV_AMF_HC_CONFIRM == msg_rsp->info.api_resp_info.type);
> + osafassert(AVSV_AMF_PM_START == msg_rsp->info.api_resp_info.type);
> rc = msg_rsp->info.api_resp_info.rc;
> } else if (NCSCC_RC_FAILURE == rc)
> rc = SA_AIS_ERR_TRY_AGAIN;
> @@ -959,35 +1100,32 @@ done:
> }
>
> /****************************************************************************
> - Name : saAmfPmStart
> + Name : saAmfPmStop
>
> - Description : This function allows a process (as part of a comp) to start
> - Passive Monitoring.
> + Description : This function allows a process to stop an already started
> + passive monitor.
>
> - Arguments : hdl - AMF handle
> - comp_name - ptr to the comp name
> - processId - Identifier of a process to be monitored
> - desc_TreeDepth - Depth of the tree of descendents of the
> process
> - pmErr - Specifies the type of process errors to monitor
> - rec_Recovery - recommended recovery
> -
> -
> + Arguments : hdl - AMF handle
> + comp_name - ptr to the comp name
> + stopQual - Qualifies which processes should stop being
> monitored
> + processId - Identifier of a process to be monitored
> + pmErr - type of process errors that the Availability
> + Management Framework should stop monitoring
> +
> Return Values : Refer to SAI-AIS specification for various return values.
>
> Notes : None.
>
> ******************************************************************************/
> -SaAisErrorT saAmfPmStart(SaAmfHandleT hdl,
> - const SaNameT *comp_name,
> - SaUint64T processId,
> - SaInt32T desc_TreeDepth, SaAmfPmErrorsT pmErr,
> SaAmfRecommendedRecoveryT rec_Recovery)
> +SaAisErrorT saAmfPmStop(SaAmfHandleT hdl,
> + const SaNameT *comp_name,
> + SaAmfPmStopQualifierT stopQual, SaInt64T processId,
> SaAmfPmErrorsT pmErr)
> {
> - return AmfAgent::PmStart(hdl, comp_name, processId, desc_TreeDepth,
> pmErr, rec_Recovery);
> + return AmfAgent::PmStop(hdl, comp_name, stopQual, processId, pmErr);
> }
>
> -SaAisErrorT AmfAgent::PmStart(SaAmfHandleT hdl,
> - const SaNameT *comp_name,
> - SaUint64T processId,
> - SaInt32T desc_TreeDepth, SaAmfPmErrorsT pmErr,
> SaAmfRecommendedRecoveryT rec_Recovery) {
> +SaAisErrorT AmfAgent::PmStop(SaAmfHandleT hdl,
> + const SaNameT *comp_name,
> + SaAmfPmStopQualifierT stopQual, SaInt64T
> processId, SaAmfPmErrorsT pmErr) {
>
> AVA_CB *cb = 0;
> AVA_HDL_REC *hdl_rec = 0;
> @@ -997,14 +1135,15 @@ SaAisErrorT AmfAgent::PmStart(SaAmfHandl
> TRACE_ENTER2("SaAmfHandleT passed is %llx", hdl);
>
> /* input validation of component name */
> - if (!comp_name || !(comp_name->length) || (comp_name->length >
> SA_MAX_NAME_LENGTH)) {
> - TRACE_LEAVE2("Incorrect arguments");
> + if (!comp_name || !ava_sanamet_is_valid(comp_name)) {
> + TRACE_LEAVE2("Incorrect Arguments");
> return SA_AIS_ERR_INVALID_PARAM;
> }
>
> - /* input validation of descendant tree depth */
> - if (desc_TreeDepth < AVA_PM_START_ALL_DESCENDENTS) {
> - TRACE_LEAVE2("Incorrect Descendants tree depth");
> + /* input validation of StopQualifier */
> + if (stopQual != SA_AMF_PM_PROC && stopQual !=
> SA_AMF_PM_PROC_AND_DESCENDENTS
> + && stopQual != SA_AMF_PM_ALL_PROCESSES) {
> + TRACE_LEAVE2("Incorrect argument specified for SaAmfPmStopQualifierT");
> return SA_AIS_ERR_INVALID_PARAM;
> }
>
> @@ -1018,20 +1157,93 @@ SaAisErrorT AmfAgent::PmStart(SaAmfHandl
> TRACE_LEAVE2("Unsupported argument specified for SaAmfPmErrorsT ");
> return SA_AIS_ERR_NOT_SUPPORTED;
> } else {
> - TRACE_LEAVE2("Incorrect argument specified for SaAmfPmErrorsT ");
> + TRACE_LEAVE2("Incorrect argument specified for SaAmfPmErrorsT");
> return SA_AIS_ERR_INVALID_PARAM;
> }
> }
>
> - /* input validation of Recomended recovery */
> - if (rec_Recovery < SA_AMF_NO_RECOMMENDATION || rec_Recovery >
> SA_AMF_CONTAINER_RESTART) {
> - TRACE_LEAVE2("Incorrect argument specified for
> SaAmfRecommendedRecoveryT");
> + /* input validation of Process ID */
> + if (processId == 0) {
> + TRACE_LEAVE2("Incorrect argument specified for processId");
> return SA_AIS_ERR_INVALID_PARAM;
> }
>
> - /* input validation of Process ID */
> - if (processId == 0) {
> - TRACE_LEAVE2("Incorrect argument specified for PID");
> + /* Verifying the input Handle & global handle */
> + if(!gl_ava_hdl || hdl > AVSV_UNS32_HDL_MAX) {
> + TRACE_2("Invalid SaAmfHandle passed by component: %llx",hdl);
> + rc = SA_AIS_ERR_BAD_HANDLE;
> + 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;
> + }
> + /* acquire cb read lock */
> + m_NCS_LOCK(&cb->lock, NCS_LOCK_READ);
> + /* retrieve hdl rec */
> + if ( !(hdl_rec = (AVA_HDL_REC *)ncshm_take_hdl(NCS_SERVICE_ID_AVA, hdl)) )
> {
> + rc = SA_AIS_ERR_BAD_HANDLE;
> + goto done;
> + }
> +
> + /* populate & send the Passive Monitoring stop message */
> + ava_fill_pm_stop_msg(&msg, cb->ava_dest, hdl, *comp_name, stopQual,
> processId, pmErr);
> + 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);
> + osafassert(AVSV_AMF_PM_STOP == msg_rsp->info.api_resp_info.type);
> + rc = msg_rsp->info.api_resp_info.rc;
> + } else if (NCSCC_RC_FAILURE == rc)
> + rc = SA_AIS_ERR_TRY_AGAIN;
> + else if (NCSCC_RC_REQ_TIMOUT == rc)
> + rc = SA_AIS_ERR_TIMEOUT;
> +
> +done:
> + /* release cb read lock and return handles */
> + if (cb) {
> + m_NCS_UNLOCK(&cb->lock, NCS_LOCK_READ);
> + ncshm_give_hdl(gl_ava_hdl);
> + }
> + if (hdl_rec)
> + ncshm_give_hdl(hdl);
> +
> + /* free the contents of the request/response message */
> + if (msg_rsp)
> + avsv_nda_ava_msg_free(msg_rsp);
> + avsv_nda_ava_msg_content_free(&msg);
> +
> + TRACE_LEAVE2("rc:%u", rc);
> + return rc;
> +}
> +
> +/****************************************************************************
> + Name : saAmfComponentNameGet
> +
> + Description : This function returns the name of the component to which
> the
> + process belongs.
> +
> + Arguments : hdl - AMF handle
> + o_comp_name - ptr to the comp name
> +
> + Return Values : Refer to SAI-AIS specification for various return values.
> +
> + Notes : None.
> +******************************************************************************/
> +SaAisErrorT saAmfComponentNameGet(SaAmfHandleT hdl, SaNameT *o_comp_name)
> +{
> + return AmfAgent::ComponentNameGet(hdl, o_comp_name);
> +}
> +
> +SaAisErrorT AmfAgent::ComponentNameGet(SaAmfHandleT hdl, SaNameT
> *o_comp_name) {
> + AVA_CB *cb = 0;
> + AVA_HDL_REC *hdl_rec = 0;
> + SaAisErrorT rc = SA_AIS_OK;
> + TRACE_ENTER2("SaAmfHandleT passed is %llx", hdl);
> +
> + if (!o_comp_name) {
> + TRACE_LEAVE2("Out param component name is NULL");
> return SA_AIS_ERR_INVALID_PARAM;
> }
>
> @@ -1055,211 +1267,11 @@ SaAisErrorT AmfAgent::PmStart(SaAmfHandl
> goto done;
> }
>
> - /* populate & send the passive monitor start message */
> - m_AVA_PM_START_MSG_FILL(msg, cb->ava_dest, hdl, *comp_name, processId,
> desc_TreeDepth, pmErr, rec_Recovery);
> -
> - 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);
> - osafassert(AVSV_AMF_PM_START == msg_rsp->info.api_resp_info.type);
> - rc = msg_rsp->info.api_resp_info.rc;
> - } else if (NCSCC_RC_FAILURE == rc)
> - rc = SA_AIS_ERR_TRY_AGAIN;
> - else if (NCSCC_RC_REQ_TIMOUT == rc)
> - rc = SA_AIS_ERR_TIMEOUT;
> -
> -done:
> - /* release cb read lock and return handles */
> - if (cb) {
> - m_NCS_UNLOCK(&cb->lock, NCS_LOCK_READ);
> - ncshm_give_hdl(gl_ava_hdl);
> - }
> - if (hdl_rec)
> - ncshm_give_hdl(hdl);
> -
> - /* free the contents of the request/response message */
> - if (msg_rsp)
> - avsv_nda_ava_msg_free(msg_rsp);
> - avsv_nda_ava_msg_content_free(&msg);
> -
> - TRACE_LEAVE2("rc:%u", rc);
> - return rc;
> -}
> -
> -/****************************************************************************
> - Name : saAmfPmStop
> -
> - Description : This function allows a process to stop an already started
> - passive monitor.
> -
> - Arguments : hdl - AMF handle
> - comp_name - ptr to the comp name
> - stopQual - Qualifies which processes should stop being
> monitored
> - processId - Identifier of a process to be monitored
> - pmErr - type of process errors that the Availability
> - Management Framework should stop monitoring
> -
> - Return Values : Refer to SAI-AIS specification for various return values.
> -
> - Notes : None.
> -******************************************************************************/
> -SaAisErrorT saAmfPmStop(SaAmfHandleT hdl,
> - const SaNameT *comp_name,
> - SaAmfPmStopQualifierT stopQual, SaInt64T processId,
> SaAmfPmErrorsT pmErr)
> -{
> - return AmfAgent::PmStop(hdl, comp_name, stopQual, processId, pmErr);
> -}
> -
> -SaAisErrorT AmfAgent::PmStop(SaAmfHandleT hdl,
> - const SaNameT *comp_name,
> - SaAmfPmStopQualifierT stopQual, SaInt64T
> processId, SaAmfPmErrorsT pmErr) {
> -
> - AVA_CB *cb = 0;
> - AVA_HDL_REC *hdl_rec = 0;
> - AVSV_NDA_AVA_MSG msg = {};
> - AVSV_NDA_AVA_MSG *msg_rsp = 0;
> - SaAisErrorT rc = SA_AIS_OK;
> - TRACE_ENTER2("SaAmfHandleT passed is %llx", hdl);
> -
> - /* input validation of component name */
> - if (!comp_name || !(comp_name->length) || (comp_name->length >
> SA_MAX_NAME_LENGTH)) {
> - TRACE_LEAVE2("Incorrect Arguments");
> - return SA_AIS_ERR_INVALID_PARAM;
> - }
> -
> - /* input validation of StopQualifier */
> - if (stopQual != SA_AMF_PM_PROC && stopQual !=
> SA_AMF_PM_PROC_AND_DESCENDENTS
> - && stopQual != SA_AMF_PM_ALL_PROCESSES) {
> - TRACE_LEAVE2("Incorrect argument specified for SaAmfPmStopQualifierT");
> - return SA_AIS_ERR_INVALID_PARAM;
> - }
> -
> - /* input validation of pmError */
> - if (pmErr != SA_AMF_PM_NON_ZERO_EXIT && pmErr != SA_AMF_PM_ZERO_EXIT &&
> - pmErr != (SA_AMF_PM_NON_ZERO_EXIT | SA_AMF_PM_ZERO_EXIT)) {
> - if ((pmErr == SA_AMF_PM_ABNORMAL_END) ||
> - (pmErr == (SA_AMF_PM_NON_ZERO_EXIT | SA_AMF_PM_ABNORMAL_END)) ||
> - (pmErr == (SA_AMF_PM_ZERO_EXIT | SA_AMF_PM_ABNORMAL_END)) ||
> - (pmErr == (SA_AMF_PM_ZERO_EXIT | SA_AMF_PM_NON_ZERO_EXIT |
> SA_AMF_PM_ABNORMAL_END))) {
> - TRACE_LEAVE2("Unsupported argument specified for SaAmfPmErrorsT ");
> - return SA_AIS_ERR_NOT_SUPPORTED;
> - } else {
> - TRACE_LEAVE2("Incorrect argument specified for SaAmfPmErrorsT");
> - return SA_AIS_ERR_INVALID_PARAM;
> - }
> - }
> -
> - /* input validation of Process ID */
> - if (processId == 0) {
> - TRACE_LEAVE2("Incorrect argument specified for processId");
> - return SA_AIS_ERR_INVALID_PARAM;
> - }
> -
> - /* Verifying the input Handle & global handle */
> - if(!gl_ava_hdl || hdl > AVSV_UNS32_HDL_MAX) {
> - TRACE_2("Invalid SaAmfHandle passed by component: %llx",hdl);
> - rc = SA_AIS_ERR_BAD_HANDLE;
> - 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;
> - }
> - /* acquire cb read lock */
> - m_NCS_LOCK(&cb->lock, NCS_LOCK_READ);
> - /* retrieve hdl rec */
> - if ( !(hdl_rec = (AVA_HDL_REC *)ncshm_take_hdl(NCS_SERVICE_ID_AVA, hdl)) )
> {
> - rc = SA_AIS_ERR_BAD_HANDLE;
> - goto done;
> - }
> -
> - /* populate & send the Passive Monitoring stop message */
> - m_AVA_PM_STOP_MSG_FILL(msg, cb->ava_dest, hdl, *comp_name, stopQual,
> processId, pmErr);
> - 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);
> - osafassert(AVSV_AMF_PM_STOP == msg_rsp->info.api_resp_info.type);
> - rc = msg_rsp->info.api_resp_info.rc;
> - } else if (NCSCC_RC_FAILURE == rc)
> - rc = SA_AIS_ERR_TRY_AGAIN;
> - else if (NCSCC_RC_REQ_TIMOUT == rc)
> - rc = SA_AIS_ERR_TIMEOUT;
> -
> -done:
> - /* release cb read lock and return handles */
> - if (cb) {
> - m_NCS_UNLOCK(&cb->lock, NCS_LOCK_READ);
> - ncshm_give_hdl(gl_ava_hdl);
> - }
> - if (hdl_rec)
> - ncshm_give_hdl(hdl);
> -
> - /* free the contents of the request/response message */
> - if (msg_rsp)
> - avsv_nda_ava_msg_free(msg_rsp);
> - avsv_nda_ava_msg_content_free(&msg);
> -
> - TRACE_LEAVE2("rc:%u", rc);
> - return rc;
> -}
> -
> -/****************************************************************************
> - Name : saAmfComponentNameGet
> -
> - Description : This function returns the name of the component to which
> the
> - process belongs.
> -
> - Arguments : hdl - AMF handle
> - o_comp_name - ptr to the comp name
> -
> - Return Values : Refer to SAI-AIS specification for various return values.
> -
> - Notes : None.
> -******************************************************************************/
> -SaAisErrorT saAmfComponentNameGet(SaAmfHandleT hdl, SaNameT *o_comp_name)
> -{
> - return AmfAgent::ComponentNameGet(hdl, o_comp_name);
> -}
> -
> -SaAisErrorT AmfAgent::ComponentNameGet(SaAmfHandleT hdl, SaNameT
> *o_comp_name) {
> - AVA_CB *cb = 0;
> - AVA_HDL_REC *hdl_rec = 0;
> - SaAisErrorT rc = SA_AIS_OK;
> - TRACE_ENTER2("SaAmfHandleT passed is %llx", hdl);
> -
> - if (!o_comp_name) {
> - TRACE_LEAVE2("Out param component name is NULL");
> - return SA_AIS_ERR_INVALID_PARAM;
> - }
> -
> - memset(o_comp_name, '\0', sizeof(SaNameT));
> -
> - /* Verifying the input Handle & global handle */
> - if(!gl_ava_hdl || hdl > AVSV_UNS32_HDL_MAX) {
> - TRACE_2("Invalid SaAmfHandle passed by component: %llx",hdl);
> - rc = SA_AIS_ERR_BAD_HANDLE;
> - 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;
> - }
> - /* acquire cb read lock */
> - m_NCS_LOCK(&cb->lock, NCS_LOCK_READ);
> - /* retrieve hdl rec */
> - if ( !(hdl_rec = (AVA_HDL_REC *)ncshm_take_hdl(NCS_SERVICE_ID_AVA, hdl)) )
> {
> - rc = SA_AIS_ERR_BAD_HANDLE;
> - goto done;
> - }
> -
> /* fetch the comp name */
> if (m_AVA_FLAG_IS_COMP_NAME(cb)) {
> - *o_comp_name = cb->comp_name;
> - o_comp_name->length = cb->comp_name.length;
> + /* reuse longDn in @cb->comp_name if any */
> + osaf_extended_name_lend(osaf_extended_name_borrow(&cb->comp_name),
> + o_comp_name);
> } else {
> TRACE_2("component name does not exist");
> rc = SA_AIS_ERR_NOT_EXIST;
> @@ -1335,7 +1347,7 @@ SaAisErrorT AmfAgent::CSIQuiescingComple
> /* get the list of pending responses for this handle */
> list_resp = &hdl_rec->pend_resp;
> if (!list_resp) {
> - TRACE_2("No pendingresponses for this handle");
> + TRACE_2("No pending responses for this handle");
> rc = SA_AIS_ERR_LIBRARY;
> goto done;
> }
> @@ -1360,7 +1372,7 @@ SaAisErrorT AmfAgent::CSIQuiescingComple
> }
>
> /* populate & send the 'Quiescing Complete' message */
> - m_AVA_CSI_QUIESCING_COMPL_MSG_FILL(msg, cb->ava_dest, hdl, inv, error,
> cb->comp_name);
> + ava_fill_csi_quiescing_complete_msg(&msg, cb->ava_dest, hdl, inv, error,
> cb->comp_name);
> rc = static_cast<SaAisErrorT>(ava_mds_send(cb, &msg, 0));
> if (NCSCC_RC_SUCCESS != rc)
> rc = SA_AIS_ERR_TRY_AGAIN;
> @@ -1417,8 +1429,8 @@ SaAisErrorT AmfAgent::HAStateGet(SaAmfHa
> SaAisErrorT rc = SA_AIS_OK;
> TRACE_ENTER2("SaAmfHandleT passed is %llx", hdl);
>
> - if (!comp_name || !(comp_name->length) || (comp_name->length >
> SA_MAX_NAME_LENGTH) ||
> - !csi_name || !(csi_name->length) || (csi_name->length >
> SA_MAX_NAME_LENGTH) || !o_ha) {
> + if (!comp_name || !ava_sanamet_is_valid(comp_name) ||
> + !csi_name || !ava_sanamet_is_valid(csi_name) || !o_ha) {
> TRACE_LEAVE2("Incorrect arguments");
> return SA_AIS_ERR_INVALID_PARAM;
> }
> @@ -1437,14 +1449,14 @@ SaAisErrorT AmfAgent::HAStateGet(SaAmfHa
> }
> /* acquire cb read lock */
> m_NCS_LOCK(&cb->lock, NCS_LOCK_READ);
> - /* retrieve hdl rec */
> + /* retrieve hdl rec */
> if ( !(hdl_rec = (AVA_HDL_REC *)ncshm_take_hdl(NCS_SERVICE_ID_AVA, hdl)) )
> {
> rc = SA_AIS_ERR_BAD_HANDLE;
> goto done;
> }
>
> /* populate & send the 'ha state get' message */
> - m_AVA_HA_STATE_GET_MSG_FILL(msg, cb->ava_dest, hdl, *comp_name, *csi_name);
> + ava_fill_ha_state_get_msg(&msg, cb->ava_dest, hdl, *comp_name, *csi_name);
> 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);
> @@ -1515,7 +1527,7 @@ SaAisErrorT AmfAgent::ProtectionGroupTra
> SaAisErrorT rc = SA_AIS_OK;
> TRACE_ENTER2("SaAmfHandleT passed is %llx", hdl);
>
> - if (!csi_name || !(csi_name->length) || (csi_name->length >
> SA_MAX_NAME_LENGTH)) {
> + if (!csi_name || !ava_sanamet_is_valid(csi_name)) {
> TRACE_LEAVE2("Incorrect arguments");
> return SA_AIS_ERR_INVALID_PARAM;
> }
> @@ -1577,7 +1589,7 @@ SaAisErrorT AmfAgent::ProtectionGroupTra
> }
>
> /* populate & send the pg start message */
> - m_AVA_PG_START_MSG_FILL(msg, cb->ava_dest, hdl, *csi_name, flags, is_syn);
> + ava_fill_pg_start_msg(&msg, cb->ava_dest, hdl, *csi_name, flags, is_syn);
> rc = static_cast<SaAisErrorT>(ava_mds_send(cb, &msg, &msg_rsp));
> if (NCSCC_RC_SUCCESS == rc) {
> /* the resp may contain only the oper result or the curr pg members */
> @@ -1685,7 +1697,7 @@ SaAisErrorT AmfAgent::ProtectionGroupTra
> SaAisErrorT rc = SA_AIS_OK;
> TRACE_ENTER2("SaAmfHandleT passed is %llx", hdl);
>
> - if (!csi_name || !(csi_name->length) || (csi_name->length >
> SA_MAX_NAME_LENGTH)) {
> + if (!csi_name || !ava_sanamet_is_valid(csi_name)) {
> TRACE_LEAVE2("Incorrect arguments");
> return SA_AIS_ERR_INVALID_PARAM;
> }
> @@ -1711,7 +1723,7 @@ SaAisErrorT AmfAgent::ProtectionGroupTra
> }
>
> /* populate & send the pg stop message */
> - m_AVA_PG_STOP_MSG_FILL(msg, cb->ava_dest, hdl, *csi_name);
> + ava_fill_pg_stop_msg(&msg, cb->ava_dest, hdl, *csi_name);
> 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);
> @@ -1775,7 +1787,7 @@ SaAisErrorT AmfAgent::ComponentErrorRepo
> TRACE_ENTER2("SaAmfHandleT passed is %llx", hdl);
>
> /* validate the component */
> - if (!err_comp || !(err_comp->length) || (err_comp->length >
> SA_MAX_NAME_LENGTH)) {
> + if (!err_comp || !ava_sanamet_is_valid(err_comp)) {
> TRACE_LEAVE2("Incorrect arguments");
> return SA_AIS_ERR_INVALID_PARAM;
> }
> @@ -1811,7 +1823,7 @@ SaAisErrorT AmfAgent::ComponentErrorRepo
> }
>
> /* populate & send the 'error report' message */
> - m_AVA_ERR_REP_MSG_FILL(msg, cb->ava_dest, hdl, *err_comp, err_time,
> rec_rcvr);
> + ava_fill_error_report_msg(&msg, cb->ava_dest, hdl, *err_comp, err_time,
> rec_rcvr);
> 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);
> @@ -1867,7 +1879,7 @@ SaAisErrorT AmfAgent::ComponentErrorClea
> SaAisErrorT rc = SA_AIS_OK;
> TRACE_ENTER2("SaAmfHandleT passed is %llx", hdl);
>
> - if (!comp_name || !(comp_name->length) || (comp_name->length >
> SA_MAX_NAME_LENGTH)) {
> + if (!comp_name || !ava_sanamet_is_valid(comp_name)) {
> TRACE_LEAVE2("Incorrect arguments");
> return SA_AIS_ERR_INVALID_PARAM;
> }
> @@ -1886,14 +1898,14 @@ SaAisErrorT AmfAgent::ComponentErrorClea
> }
> /* acquire cb read lock */
> m_NCS_LOCK(&cb->lock, NCS_LOCK_READ);
> - /* retrieve hdl rec */
> + /* retrieve hdl rec */
> if ( !(hdl_rec = (AVA_HDL_REC *)ncshm_take_hdl(NCS_SERVICE_ID_AVA, hdl)) )
> {
> rc = SA_AIS_ERR_BAD_HANDLE;
> goto done;
> }
>
> /* populate & send the 'error clear' message */
> - m_AVA_ERR_CLEAR_MSG_FILL(msg, cb->ava_dest, hdl, *comp_name);
> + ava_fill_err_clear_msg(&msg, cb->ava_dest, hdl, *comp_name);
> 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);
> @@ -1994,7 +2006,7 @@ SaAisErrorT AmfAgent::Response(SaAmfHand
> }
>
> /* populate & send the 'AMF response' message */
> - m_AVA_AMF_RESP_MSG_FILL(msg, cb->ava_dest, hdl, inv, error, cb->comp_name);
> + ava_fill_response_msg(&msg, cb->ava_dest, hdl, inv, error, cb->comp_name);
>
> if (rec->cbk_info->type == AVSV_AMF_COMP_TERM)
> rc = static_cast<SaAisErrorT>(ava_mds_send(cb, &msg, &msg_rsp));
> @@ -2366,7 +2378,7 @@ SaAisErrorT AmfAgent::ProtectionGroupTra
> /* TODO: check cluster membership, if node is not a member answer back
> with SA_AIS_ERR_UNAVAILABLE */
> /* TODO: check if handle is "old", due to node rejoin as member in
> cluster. If not: SA_AIS_ERR_UNAVAILABLE */
>
> - if (!csi_name || !(csi_name->length) || (csi_name->length >
> SA_MAX_NAME_LENGTH)) {
> + if (!csi_name || !ava_sanamet_is_valid(csi_name)) {
> TRACE_LEAVE2("Incorrect arguments");
> rc = SA_AIS_ERR_INVALID_PARAM;
> goto done;
> @@ -2410,7 +2422,7 @@ SaAisErrorT AmfAgent::ProtectionGroupTra
> }
>
> /* populate & send the pg start message */
> - m_AVA_PG_START_MSG_FILL(msg, cb->ava_dest, hdl, *csi_name, flags, is_syn);
> + ava_fill_pg_start_msg(&msg, cb->ava_dest, hdl, *csi_name, flags, is_syn);
> rc = static_cast<SaAisErrorT>(ava_mds_send(cb, &msg, &msg_rsp));
> if (NCSCC_RC_SUCCESS == rc) {
> /* the resp may contain only the oper result or the curr pg members */
> @@ -2438,7 +2450,6 @@ SaAisErrorT AmfAgent::ProtectionGroupTra
> ava_cpy_protection_group_ntf(buf->notification,
> rsp_buf->notification,
> buf->numberOfItems,
> SA_AMF_HARS_READY_FOR_ASSIGNMENT);
> rc = SA_AIS_ERR_NO_SPACE;
> - buf->numberOfItems = rsp_buf->numberOfItems;
[Praveen] As per spec "When saAmfProtectionGroupTrack_4() returns with
SA_AIS_OK or with SA_AIS_ERR_NO_SPACE, numberOfItems contains the number
of components in the protection group". So no. of items should be set in
the varible buf->numberOfItems.
> }
> } else { /* if(create_memory == false) */
>
> @@ -2542,8 +2553,11 @@ SaAisErrorT AmfAgent::ProtectionGroupNot
> /* TODO: check if handle is "old", due to node rejoin as member in
> cluster. If not: SA_AIS_ERR_UNAVAILABLE */
>
> /* free memory */
> - if(notification)
> + if(notification) {
> + // TODO (minhchau): memleak if notification is an array
> + osaf_extended_name_free(¬ification->member.compName);
> free(notification);
> + }
> else
> rc = SA_AIS_ERR_INVALID_PARAM;
>
> 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 uint32_t ava_hdl_cbk_rec_prc(AVSV_AMF_CBK_INFO *, SaAmfCallbacksT *);
>
> 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);
> @@ -373,7 +373,7 @@ uint32_t ava_hdl_cbk_dispatch_one(AVA_CB
> ncshm_give_hdl(hdl);
>
> /* process the callback list record */
> - ava_hdl_cbk_rec_prc(rec->cbk_info, ®_cbk);
> + rc = ava_hdl_cbk_rec_prc(rec->cbk_info, ®_cbk);
>
> m_NCS_LOCK(&(*cb)->lock, NCS_LOCK_WRITE);
>
> @@ -444,7 +444,7 @@ uint32_t ava_hdl_cbk_dispatch_all(AVA_CB
> ncshm_give_hdl(hdl);
>
> /* process the callback list record */
> - ava_hdl_cbk_rec_prc(rec->cbk_info, ®_cbk);
> + rc = ava_hdl_cbk_rec_prc(rec->cbk_info, ®_cbk);
>
> m_NCS_LOCK(&(*cb)->lock, NCS_LOCK_WRITE);
>
> @@ -527,7 +527,7 @@ uint32_t ava_hdl_cbk_dispatch_block(AVA_
> m_NCS_UNLOCK(&(*cb)->lock, NCS_LOCK_WRITE);
>
> /* process the callback list record */
> - ava_hdl_cbk_rec_prc(rec->cbk_info, ®_cbk);
> + rc = ava_hdl_cbk_rec_prc(rec->cbk_info, ®_cbk);
>
> /* take cb lock, so that any call to SaAmfResponce() will block
> */
> m_NCS_LOCK(&(*cb)->lock, NCS_LOCK_WRITE);
> @@ -577,121 +577,127 @@ uint32_t ava_hdl_cbk_dispatch_block(AVA_
>
> Return Values : None
>
> - Notes : It may so happen that the callbacks that are dispatched may
> + Notes : - It may so happen that the callbacks that are dispatched
> may
> finalize on the amf handle. Release AMF handle to the
> handle
> manager before dispatching. Else Finalize blocks while
> destroying the association with handle manager.
> + - Since AMF supports LongDn, though AMF client still has
> + not supported LongDn, the callback comes may contain LongDn
> + SaNameT. AMF Agent needs to drop this callback so that AMF
> + client will not able to access LongDn SaNameT, otherwise
> + client could be crashed.
>
> ******************************************************************************/
> -void ava_hdl_cbk_rec_prc(AVSV_AMF_CBK_INFO *info, SaAmfCallbacksT *reg_cbk)
> +uint32_t ava_hdl_cbk_rec_prc(AVSV_AMF_CBK_INFO *info, SaAmfCallbacksT
> *reg_cbk)
> {
> + uint32_t rc = SA_AIS_OK;
> + uint32_t i;
> TRACE_ENTER2("CallbackType = %d",info->type);
>
> /* invoke the corresponding callback */
> switch (info->type) {
> - case AVSV_AMF_HC:
> - {
> + case AVSV_AMF_HC: {
> AVSV_AMF_HC_PARAM *hc = &info->param.hc;
> - if (reg_cbk->saAmfHealthcheckCallback) {
> - hc->comp_name.length = hc->comp_name.length;
> - TRACE("Invoking Healthcheck Callback:\
> - InvocationId = %llx, Component Name =
> %s, Healthcheck Key = %s",
> - info->inv, hc->comp_name.value,
> hc->hc_key.key);
> - reg_cbk->saAmfHealthcheckCallback(info->inv,
> &hc->comp_name, &hc->hc_key);
> + if (!ava_sanamet_is_valid(&hc->comp_name)) {
> + rc = SA_AIS_ERR_NAME_TOO_LONG;
> }
> + if (rc == SA_AIS_OK &&
> reg_cbk->saAmfHealthcheckCallback) {
> + TRACE("Invoking Healthcheck Callback:"
> + "InvocationId = %llx, Component
> Name = %s, Healthcheck Key = %s",
> + info->inv,
> osaf_extended_name_borrow(&hc->comp_name), hc->hc_key.key);
> +
> reg_cbk->saAmfHealthcheckCallback(info->inv, &hc->comp_name, &hc->hc_key);
> + }
> +
> + break;
> }
> - break;
> -
> - case AVSV_AMF_COMP_TERM:
> - {
> + case AVSV_AMF_COMP_TERM: {
> AVSV_AMF_COMP_TERM_PARAM *comp_term =
> &info->param.comp_term;
> -
> - if (reg_cbk->saAmfComponentTerminateCallback) {
> - comp_term->comp_name.length =
> comp_term->comp_name.length;
> - TRACE("Invoking component's
> saAmfComponentTerminateCallback: InvocationId = %llx,\
> - component name = %s",info->inv,
> comp_term->comp_name.value);
> -
> reg_cbk->saAmfComponentTerminateCallback(info->inv, &comp_term->comp_name);
> + if (!ava_sanamet_is_valid(&comp_term->comp_name)) {
> + rc = SA_AIS_ERR_NAME_TOO_LONG;
> }
> + if (rc == SA_AIS_OK &&
> reg_cbk->saAmfComponentTerminateCallback) {
> + TRACE("Invoking component's
> saAmfComponentTerminateCallback: InvocationId = %llx,"
> + "component name =
> %s",info->inv, osaf_extended_name_borrow(&comp_term->comp_name));
> +
> reg_cbk->saAmfComponentTerminateCallback(info->inv, &comp_term->comp_name);
> + }
> + break;
> }
> - break;
> -
> - case AVSV_AMF_CSI_SET:
> - {
> + case AVSV_AMF_CSI_SET: {
> AVSV_AMF_CSI_SET_PARAM *csi_set = &info->param.csi_set;
>
> - if (reg_cbk->saAmfCSISetCallback) {
> - csi_set->comp_name.length =
> csi_set->comp_name.length;
> + if (!ava_sanamet_is_valid(&csi_set->csi_desc.csiName) ||
> + !ava_sanamet_is_valid(&csi_set->comp_name) ||
> +
> !ava_sanamet_is_valid(&csi_set->csi_desc.csiStateDescriptor.activeDescriptor.activeCompName)
> ||
> +
> !ava_sanamet_is_valid(&csi_set->csi_desc.csiStateDescriptor.standbyDescriptor.activeCompName))
> {
> + rc = SA_AIS_ERR_NAME_TOO_LONG;
[Praveen] This is being discussed already in other mail thread.
> + }
>
> - if (SA_AMF_CSI_TARGET_ALL !=
> csi_set->csi_desc.csiFlags) {
> - csi_set->csi_desc.csiName.length =
> csi_set->csi_desc.csiName.length;
> - }
> + if (rc == SA_AIS_OK && reg_cbk->saAmfCSISetCallback) {
> + TRACE("CSISet: CSIName = %s, CSIFlags = %d, HA
> state = %d",
> +
> osaf_extended_name_borrow(&csi_set->csi_desc.csiName),csi_set->csi_desc.csiFlags,csi_set->ha);
> + TRACE("CSISet: Active Transition Descriptor =
> %u, Active Component Name = %s",
> +
> csi_set->csi_desc.csiStateDescriptor.activeDescriptor.transitionDescriptor,
> +
> osaf_extended_name_borrow(&csi_set->csi_desc.csiStateDescriptor.activeDescriptor.activeCompName));
> + TRACE("CSISet: ActiveCompName = %s, StandbyRank
> = %u",
> +
> osaf_extended_name_borrow(&csi_set->csi_desc.csiStateDescriptor.standbyDescriptor.activeCompName),
> +
> csi_set->csi_desc.csiStateDescriptor.standbyDescriptor.standbyRank);
> + TRACE("Invoking component's
> saAmfCSISetCallback: InvocationId = %llx, component name = %s",
> +
> info->inv,osaf_extended_name_borrow(&csi_set->comp_name));
> + reg_cbk->saAmfCSISetCallback(info->inv,
> + &csi_set->comp_name, csi_set->ha,
> csi_set->csi_desc);
> + }
>
> - TRACE("CSISet: CSIName = %s, CSIFlags = %d, HA
> state = %d",\
> -
> csi_set->csi_desc.csiName.value,csi_set->csi_desc.csiFlags,csi_set->ha);
> -
> - if ((SA_AMF_HA_ACTIVE == csi_set->ha) &&
> - (SA_AMF_CSI_NEW_ASSIGN !=
> -
> csi_set->csi_desc.csiStateDescriptor.activeDescriptor.transitionDescriptor)) {
> -
> csi_set->csi_desc.csiStateDescriptor.activeDescriptor.activeCompName.length =
> -
> csi_set->csi_desc.csiStateDescriptor.activeDescriptor.activeCompName.length;
> - } else if (SA_AMF_HA_STANDBY == csi_set->ha) {
> -
> csi_set->csi_desc.csiStateDescriptor.standbyDescriptor.activeCompName.length =
> -
> csi_set->csi_desc.csiStateDescriptor.standbyDescriptor.activeCompName.
> - length;
> - }
> -
> - TRACE("CSISet: Active Transition Descriptor =
> %u, Active Component Name = %s",\
> -
> csi_set->csi_desc.csiStateDescriptor.activeDescriptor.transitionDescriptor,\
> -
> csi_set->csi_desc.csiStateDescriptor.activeDescriptor.activeCompName.value);
> - TRACE("CSISet: ActiveCompName = %s, StandbyRank
> = %u",\
> -
> csi_set->csi_desc.csiStateDescriptor.standbyDescriptor.activeCompName.value,\
> -
> csi_set->csi_desc.csiStateDescriptor.standbyDescriptor.standbyRank);
> - TRACE("Invoking component's
> saAmfCSISetCallback: InvocationId = %llx, component name = %s",\
> - info->inv,csi_set->comp_name.value);
> - reg_cbk->saAmfCSISetCallback(info->inv,
> - &csi_set->comp_name,
> csi_set->ha, csi_set->csi_desc);
> + break;
> + }
> + case AVSV_AMF_CSI_REM: {
> + AVSV_AMF_CSI_REM_PARAM *csi_rem = &info->param.csi_rem;
> + if (!ava_sanamet_is_valid(&csi_rem->comp_name) ||
> + !ava_sanamet_is_valid(&csi_rem->csi_name)) {
> + rc = SA_AIS_ERR_NAME_TOO_LONG;
> }
> + if (rc == SA_AIS_OK && reg_cbk->saAmfCSIRemoveCallback)
> {
> + TRACE("Invoking component's
> saAmfCSIRemoveCallback: InvocationId = %llx, component name = %s,"
> + "CSIName =
> %s",info->inv,osaf_extended_name_borrow(&csi_rem->comp_name),
> +
> osaf_extended_name_borrow(&csi_rem->csi_name));
> + reg_cbk->saAmfCSIRemoveCallback(info->inv,
> +
> &csi_rem->comp_name,
> +
> &csi_rem->csi_name, csi_rem->csi_flags);
> + }
> + break;
> }
> - break;
> -
> - case AVSV_AMF_CSI_REM:
> - {
> - AVSV_AMF_CSI_REM_PARAM *csi_rem = &info->param.csi_rem;
> -
> - if (reg_cbk->saAmfCSIRemoveCallback) {
> - csi_rem->comp_name.length =
> csi_rem->comp_name.length;
> - csi_rem->csi_name.length =
> csi_rem->csi_name.length;
> - TRACE("Invoking component's
> saAmfCSIRemoveCallback: InvocationId = %llx, component name = %s,\
> - CSIName =
> %s",info->inv,csi_rem->comp_name.value,csi_rem->csi_name.value);
> - reg_cbk->saAmfCSIRemoveCallback(info->inv,
> -
> &csi_rem->comp_name,
> -
> &csi_rem->csi_name, csi_rem->csi_flags);
> - }
> - }
> - break;
> -
> - case AVSV_AMF_PG_TRACK:
> - {
> + case AVSV_AMF_PG_TRACK: {
> AVSV_AMF_PG_TRACK_PARAM *pg_track =
> &info->param.pg_track;
>
> if(ava_B4_ver_used(0)) {
> SaAmfProtectionGroupNotificationBufferT_4 buf
> ={0};
> -
> - if (reg_cbk->saAmfProtectionGroupTrackCallback)
> {
> - pg_track->csi_name.length =
> pg_track->csi_name.length;
> + for (i = 0 ; i < pg_track->buf.numberOfItems ;
> i++) {
> + if
> (!ava_sanamet_is_valid(&pg_track->buf.notification[i].member.compName)) {
> + rc = SA_AIS_ERR_NAME_TOO_LONG;
> + break;
> + }
> + }
> + if (rc == SA_AIS_OK &&
> reg_cbk->saAmfProtectionGroupTrackCallback) {
> TRACE("PG track Information: Total
> number of items in buffer = %d",pg_track->buf.numberOfItems);
> -
> /* copy the contents into a malloced
> buffer.. appl frees it */
> buf.numberOfItems =
> pg_track->buf.numberOfItems;
> -
> buf.notification =
>
> static_cast<SaAmfProtectionGroupNotificationT_4*>(malloc(buf.numberOfItems *
> sizeof(SaAmfProtectionGroupNotificationT_4)));
> if (buf.notification) {
>
> ava_cpy_protection_group_ntf(buf.notification, pg_track->buf.notification,
>
> pg_track->buf.numberOfItems, SA_AMF_HARS_READY_FOR_ASSIGNMENT);
> - TRACE("Invoking PGTrack
> callback for CSIName = %s",pg_track->csi_name.value);
> +
> + /* allocate LongDn strings for
> notification if any
> + * then client needs to free
> these LongDn string as well
> + */
> + for (i=0 ; i <
> buf.numberOfItems; i++) {
> +
> osaf_extended_name_alloc(
> +
> osaf_extended_name_borrow(&pg_track->buf.notification[i].member.compName),
> +
> &buf.notification[i].member.compName);
> + }
> + TRACE("Invoking PGTrack
> callback for CSIName = %s", osaf_extended_name_borrow(&pg_track->csi_name));
>
> ((SaAmfCallbacksT_4*)reg_cbk)->saAmfProtectionGroupTrackCallback(&pg_track->csi_name,
> -
> &buf,
> -
> pg_track->mem_num, pg_track->err);
> +
> &buf,
> +
> pg_track->mem_num, pg_track->err);
> + free(buf.notification);
[Praveen] This memory should be freed by application by calling the API
saAmfProtectionGroupNotificationFree_4() for B.04.01.
> } else {
> pg_track->err =
> SA_AIS_ERR_NO_MEMORY;
> LOG_CR("Notification is NULL:
> Invoking PGTrack Callback with error SA_AIS_ERR_NO_MEMORY");
> @@ -703,24 +709,38 @@ void ava_hdl_cbk_rec_prc(AVSV_AMF_CBK_IN
> else /* B01 version is used */
> {
> SaAmfProtectionGroupNotificationBufferT buf;
> -
> - if (reg_cbk->saAmfProtectionGroupTrackCallback)
> {
> - pg_track->csi_name.length =
> pg_track->csi_name.length;
> + for (i = 0 ; i < pg_track->buf.numberOfItems ;
> i++) {
> + if
> (!ava_sanamet_is_valid(&pg_track->buf.notification[i].member.compName)) {
> + rc = SA_AIS_ERR_NAME_TOO_LONG;
> + break;
> + }
> + }
> + if (rc == SA_AIS_OK &&
> reg_cbk->saAmfProtectionGroupTrackCallback) {
> TRACE("PG track Information: Total
> number of items in buffer = %d",pg_track->buf.numberOfItems);
> -
> /* copy the contents into a malloced
> buffer.. appl frees it */
> buf.numberOfItems =
> pg_track->buf.numberOfItems;
> buf.notification = 0;
> -
> buf.notification =
>
> static_cast<SaAmfProtectionGroupNotificationT*>(malloc(buf.numberOfItems *
> sizeof(SaAmfProtectionGroupNotificationT)));
> if (buf.notification) {
> memcpy(buf.notification,
> pg_track->buf.notification,
> buf.numberOfItems *
> sizeof(SaAmfProtectionGroupNotificationT));
> - TRACE("Invoking PGTrack
> callback for CSIName = %s",pg_track->csi_name.value);
> + TRACE("Invoking PGTrack
> callback for CSIName = %s",
> +
> osaf_extended_name_borrow(&pg_track->csi_name));
> +
> + /* allocate LongDn strings for
> notification if any
> + * then client needs to free
> these LongDn string as well
> + */
> + for (i=0 ; i <
> buf.numberOfItems; i++) {
> +
> osaf_extended_name_alloc(
> +
> osaf_extended_name_borrow(&pg_track->buf.notification[i].member.compName),
> +
> &buf.notification[i].member.compName);
> + }
> +
> ((SaAmfCallbacksT
> *)reg_cbk)->saAmfProtectionGroupTrackCallback(&pg_track->csi_name,
>
> &buf,
>
> pg_track->mem_num, pg_track->err);
> + free(buf.notification);
[Praveen] Page 187 B.01.01 spec says
"notification - [in/out] If notification is NULL, memory for the
protection group information
is allocated by the Availability Management Framework. The caller is
responsible for freeing the allocated memory."
I think, above case is of memory allocation by Agent, so It will be the
responsibility of application to free it.
> } else {
> pg_track->err =
> SA_AIS_ERR_NO_MEMORY;
> LOG_CR("Notification is NULL:
> Invoking PGTrack Callback with error SA_AIS_ERR_NO_MEMORY");
> @@ -729,40 +749,40 @@ void ava_hdl_cbk_rec_prc(AVSV_AMF_CBK_IN
> }
> }
> }
> + break;
> }
> - break;
> -
> - case AVSV_AMF_PXIED_COMP_INST:
> - {
> + case AVSV_AMF_PXIED_COMP_INST: {
> AVSV_AMF_PXIED_COMP_INST_PARAM *comp_inst =
> &info->param.pxied_comp_inst;
> -
> - if (reg_cbk->saAmfProxiedComponentInstantiateCallback) {
> - comp_inst->comp_name.length =
> comp_inst->comp_name.length;
> - TRACE("Invoking proxiedcomponentInstantiateCbk:
> proxied component name = %s",comp_inst->comp_name.value);
> + if (!ava_sanamet_is_valid(&comp_inst->comp_name)) {
> + rc = SA_AIS_ERR_NAME_TOO_LONG;
> + }
> + if (rc == SA_AIS_OK &&
> reg_cbk->saAmfProxiedComponentInstantiateCallback) {
> + TRACE("Invoking proxiedcomponentInstantiateCbk:
> proxied component name = %s",
> +
> osaf_extended_name_borrow(&comp_inst->comp_name));
>
> reg_cbk->saAmfProxiedComponentInstantiateCallback(info->inv,
> &comp_inst->comp_name);
> }
> + break;
> }
> - break;
> -
> - case AVSV_AMF_PXIED_COMP_CLEAN:
> - {
> + case AVSV_AMF_PXIED_COMP_CLEAN: {
> AVSV_AMF_PXIED_COMP_CLEAN_PARAM *comp_clean =
> &info->param.pxied_comp_clean;
> -
> - if (reg_cbk->saAmfProxiedComponentCleanupCallback) {
> - comp_clean->comp_name.length =
> comp_clean->comp_name.length;
> - TRACE("Invoking proxiedcomponentcleanupCbk:
> proxied component name = %s",comp_clean->comp_name.value);
> + if (!ava_sanamet_is_valid(&comp_clean->comp_name)) {
> + rc = SA_AIS_ERR_NAME_TOO_LONG;
> + }
> + if (rc == SA_AIS_OK &&
> reg_cbk->saAmfProxiedComponentCleanupCallback) {
> + TRACE("Invoking proxiedcomponentcleanupCbk:
> proxied component name = %s",
> +
> osaf_extended_name_borrow(&comp_clean->comp_name));
>
> reg_cbk->saAmfProxiedComponentCleanupCallback(info->inv,
> &comp_clean->comp_name);
> }
> +
> + break;
> }
> - break;
> -
> - default:
> - osafassert(0);
> - break;
> + default:
> + osafassert(0);
> + break;
> } /* switch */
>
> TRACE_LEAVE();
> - return;
> + return rc;
> }
>
> /****************************************************************************
> diff --git a/osaf/libs/agents/saf/amfa/ava_init.cc
> b/osaf/libs/agents/saf/amfa/ava_init.cc
> --- a/osaf/libs/agents/saf/amfa/ava_init.cc
> +++ b/osaf/libs/agents/saf/amfa/ava_init.cc
> @@ -120,6 +120,7 @@ uint32_t ava_create(NCS_LIB_CREATE *crea
> AVA_CB *cb = 0;
> uint32_t rc = NCSCC_RC_SUCCESS;
> EDU_ERR err;
> + SaConstStringT env_comp_name = getenv("SA_AMF_COMPONENT_NAME");
> TRACE_ENTER();
>
> /* allocate AvA cb */
> @@ -129,17 +130,18 @@ uint32_t ava_create(NCS_LIB_CREATE *crea
> goto error;
> }
>
> - /* fetch the comp name from the env variable */
> - if (getenv("SA_AMF_COMPONENT_NAME")) {
> - if (strlen(getenv("SA_AMF_COMPONENT_NAME")) <
> SA_MAX_NAME_LENGTH) {
> - strcpy((char *)cb->comp_name.value,
> getenv("SA_AMF_COMPONENT_NAME"));
> - cb->comp_name.length = (uint16_t)strlen((char
> *)cb->comp_name.value);
> - m_AVA_FLAG_SET(cb, AVA_FLAG_COMP_NAME);
> - TRACE("Component name = %s",cb->comp_name.value);
> - } else {
> - TRACE_2("Length of SA_AMF_COMPONENT_NAME exceeds
> SA_MAX_NAME_LENGTH bytes");
> + /* check the comp name from the env variable */
> + if (env_comp_name) {
> + if (strlen(env_comp_name) > kOsafMaxDnLength) {
> + TRACE_2("Length of SA_AMF_COMPONENT_NAME exceeds "
> + "kOsafMaxDnLength(%d) bytes",
> kOsafMaxDnLength);
> rc = NCSCC_RC_FAILURE;
> goto error;
> + } else {
> + // @cb->comp_name could be longDN, need to be freed
> later
> + osaf_extended_name_alloc(env_comp_name, &cb->comp_name);
> + m_AVA_FLAG_SET(cb, AVA_FLAG_COMP_NAME);
> + TRACE("Component name = %s",
> osaf_extended_name_borrow(&cb->comp_name));
> }
> }
>
> @@ -282,6 +284,7 @@ void ava_destroy(NCS_LIB_DESTROY *destro
> TRACE_1("Removing association with handle manager failed");
>
> /* free the control block */
> + osaf_extended_name_free(&cb->comp_name);
> free(cb);
>
> /* reset the global cb handle */
> 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
> @@ -281,6 +281,7 @@ uint32_t ava_mds_cbk(NCSMDS_CALLBACK_INF
> TRACE("MDS decode callback success");
> }
> break;
> +
> case MDS_CALLBACK_ENC:
> {
> info->info.enc.o_msg_fmt_ver =
> m_NCS_ENC_MSG_FMT_GET(info->info.enc.i_rem_svc_pvt_ver,
> @@ -499,6 +500,137 @@ uint32_t ava_mds_flat_enc(AVA_CB *cb, MD
> case AVSV_AVA_API_MSG:
> /* encode into userbuf */
> rc = ncs_encode_n_octets_in_uba(enc_info->io_uba, (uint8_t
> *)msg, sizeof(AVSV_NDA_AVA_MSG));
> + if (NCSCC_RC_SUCCESS != rc)
> + goto done;
> +
> + switch (msg->info.api_info.type) {
> + case AVSV_AMF_FINALIZE:
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.finalize.comp_name)) {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.finalize.comp_name);
> + }
> + break;
> +
> + case AVSV_AMF_COMP_REG:
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.reg.comp_name)) {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.reg.comp_name);
> + }
> +
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.reg.proxy_comp_name)) {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.reg.proxy_comp_name);
> + }
> + break;
> +
> + case AVSV_AMF_COMP_UNREG:
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.unreg.comp_name)) {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.unreg.comp_name);
> + }
> +
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.unreg.proxy_comp_name)) {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.unreg.proxy_comp_name);
> + }
> +
> + break;
> +
> + case AVSV_AMF_PM_START:
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.pm_start.comp_name)) {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.pm_start.comp_name);
> + }
> + break;
> +
> + case AVSV_AMF_PM_STOP:
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.pm_stop.comp_name)) {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.pm_stop.comp_name);
> + }
> + break;
> +
> + case AVSV_AMF_HC_START:
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.hc_start.comp_name)) {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.hc_start.comp_name);
> + }
> +
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.hc_start.proxy_comp_name))
> {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.hc_start.proxy_comp_name);
> + }
> +
> + break;
> +
> + case AVSV_AMF_HC_STOP:
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.hc_stop.comp_name)) {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.hc_stop.comp_name);
> + }
> +
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.hc_stop.proxy_comp_name))
> {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.hc_stop.proxy_comp_name);
> + }
> +
> + break;
> +
> + case AVSV_AMF_HC_CONFIRM:
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.hc_confirm.comp_name)) {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.hc_confirm.comp_name);
> + }
> +
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.hc_confirm.proxy_comp_name))
> {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.hc_confirm.proxy_comp_name);
> + }
> +
> + break;
> +
> + case AVSV_AMF_CSI_QUIESCING_COMPLETE:
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.csiq_compl.comp_name)) {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.csiq_compl.comp_name);
> + }
> +
> + break;
> +
> + case AVSV_AMF_HA_STATE_GET:
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.ha_get.comp_name)) {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.ha_get.comp_name);
> + }
> +
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.ha_get.csi_name)) {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.ha_get.csi_name);
> + }
> +
> + break;
> +
> + case AVSV_AMF_PG_START:
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.pg_start.csi_name)) {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.pg_start.csi_name);
> + }
> +
> + break;
> +
> + case AVSV_AMF_PG_STOP:
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.pg_stop.csi_name)) {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.pg_stop.csi_name);
> + }
> + break;
> +
> + case AVSV_AMF_ERR_REP:
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.err_rep.err_comp)) {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.err_rep.err_comp);
> + }
> +
> + break;
> +
> + case AVSV_AMF_ERR_CLEAR:
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.err_clear.comp_name)) {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.err_clear.comp_name);
> + }
> +
> + break;
> +
> + case AVSV_AMF_RESP:
> + if
> (osaf_is_an_extended_name(&msg->info.api_info.param.resp.comp_name)) {
> +
> osaf_encode_sanamet(enc_info->io_uba,
> &msg->info.api_info.param.resp.comp_name);
> + }
> +
> + break;
> +
> + default:
> + break;
> + } /* switch */
> break;
>
> case AVSV_AVND_AMF_CBK_MSG:
> @@ -507,6 +639,7 @@ uint32_t ava_mds_flat_enc(AVA_CB *cb, MD
> osafassert(0);
> } /* switch */
>
> +done:
> TRACE_LEAVE2("retval = %u",rc);
> return rc;
> }
> @@ -570,6 +703,15 @@ uint32_t ava_mds_flat_dec(AVA_CB *cb, MD
> AVSV_AMF_CSI_SET_PARAM *csi_set =
> &msg->info.cbk_info->param.csi_set;
> uint16_t len, i;
> uint8_t *p8;
> +
> + if
> (osaf_is_an_extended_name(&csi_set->comp_name)) {
> +
> osaf_decode_sanamet(dec_info->io_uba, &csi_set->comp_name);
> + }
> +
> + if
> (osaf_is_an_extended_name(&csi_set->csi_desc.csiName)) {
> +
> osaf_decode_sanamet(dec_info->io_uba, &csi_set->csi_desc.csiName);
> + }
> +
> if (csi_set->attrs.number) {
> csi_set->attrs.list = 0;
> csi_set->attrs.list =
> @@ -587,6 +729,12 @@ uint32_t ava_mds_flat_dec(AVA_CB *cb, MD
>
> LOG_CR("ncs_decode_n_octets_from_uba failed with rc= %d", rc);
> goto err;
> }
> +
> + // This is to keep the
> backward compatibility
> + if
> (osaf_is_an_extended_name(&csi_set->attrs.list[i].name)) {
> +
> osaf_decode_sanamet(dec_info->io_uba, &csi_set->attrs.list[i].name);
> + }
> + //
> p8 =
> ncs_dec_flatten_space(dec_info->io_uba, (uint8_t *)&len, 2);
> len =
> ncs_decode_16bit(&p8);
>
> ncs_dec_skip_space(dec_info->io_uba, 2);
> @@ -596,17 +744,36 @@ uint32_t ava_mds_flat_dec(AVA_CB *cb, MD
> (uint8_t
> *)csi_set->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);
> +
> LOG_CR("ncs_decode_n_octets_from_uba failed with rc = %d", rc);
> goto err;
> }
> }
> }
> +
> + if (csi_set->ha == SA_AMF_HA_ACTIVE) {
> + if
> (osaf_is_an_extended_name(&csi_set->csi_desc.csiStateDescriptor.activeDescriptor.activeCompName))
> {
> +
> osaf_decode_sanamet(dec_info->io_uba,
> +
>
> &csi_set->csi_desc.csiStateDescriptor.activeDescriptor.activeCompName);
> + }
> + }
> +
> + if (csi_set->ha == SA_AMF_HA_STANDBY) {
> + if
> (osaf_is_an_extended_name(&csi_set->csi_desc.csiStateDescriptor.standbyDescriptor.activeCompName))
> {
> +
> osaf_decode_sanamet(dec_info->io_uba,
> +
>
> &csi_set->csi_desc.csiStateDescriptor.standbyDescriptor.activeCompName);
> + }
> + }
> }
> break;
>
> case AVSV_AMF_PG_TRACK:
> {
> AVSV_AMF_PG_TRACK_PARAM *pg_track =
> &msg->info.cbk_info->param.pg_track;
> + uint16_t i;
> +
> + if
> (osaf_is_an_extended_name(&pg_track->csi_name)) {
> +
> osaf_decode_sanamet(dec_info->io_uba, &pg_track->csi_name);
> + }
>
> if (pg_track->buf.numberOfItems) {
> pg_track->buf.notification = 0;
> @@ -628,16 +795,68 @@ uint32_t ava_mds_flat_dec(AVA_CB *cb, MD
>
> TRACE_2("ncs_decode_n_octets_from_uba failed with rc = %d", rc);
> goto err;
> }
> +
> + for (i = 0; i <
> pg_track->buf.numberOfItems; i++) {
> + if
> (osaf_is_an_extended_name(&pg_track->buf.notification[i].member.compName)) {
> +
> osaf_decode_sanamet(dec_info->io_uba,
> &pg_track->buf.notification[i].member.compName);
> + }
> + }
> }
> }
> break;
>
> case AVSV_AMF_HC:
> + {
> + AVSV_AMF_HC_PARAM *hc =
> &msg->info.cbk_info->param.hc;
> +
> + if
> (osaf_is_an_extended_name(&hc->comp_name)) {
> +
> osaf_decode_sanamet(dec_info->io_uba, &hc->comp_name);
> + }
> + }
> + break;
> +
> case AVSV_AMF_COMP_TERM:
> + {
> + AVSV_AMF_COMP_TERM_PARAM *comp_term =
> &msg->info.cbk_info->param.comp_term;
> +
> + if
> (osaf_is_an_extended_name(&comp_term->comp_name)) {
> +
> osaf_decode_sanamet(dec_info->io_uba, &comp_term->comp_name);
> + }
> + }
> + break;
> +
> case AVSV_AMF_CSI_REM:
> + {
> + AVSV_AMF_CSI_REM_PARAM *csi_rem =
> &msg->info.cbk_info->param.csi_rem;
> +
> + if
> (osaf_is_an_extended_name(&csi_rem->comp_name)) {
> +
> osaf_decode_sanamet(dec_info->io_uba, &csi_rem->comp_name);
> + }
> +
> + if
> (osaf_is_an_extended_name(&csi_rem->csi_name)) {
> +
> osaf_decode_sanamet(dec_info->io_uba, &csi_rem->csi_name);
> + }
> + }
> + break;
> +
> case AVSV_AMF_PXIED_COMP_INST:
> + {
> + AVSV_AMF_PXIED_COMP_INST_PARAM
> *pxied_comp_inst = &msg->info.cbk_info->param.pxied_comp_inst;
> +
> + if
> (osaf_is_an_extended_name(&pxied_comp_inst->comp_name)) {
> +
> osaf_decode_sanamet(dec_info->io_uba, &pxied_comp_inst->comp_name);
> + }
> + }
> + break;
> +
> case AVSV_AMF_PXIED_COMP_CLEAN:
> - /* already decoded above */
> + {
> + AVSV_AMF_PXIED_COMP_CLEAN_PARAM
> *pxied_comp_clean = &msg->info.cbk_info->param.pxied_comp_clean;
> +
> + if
> (osaf_is_an_extended_name(&pxied_comp_clean->comp_name)) {
> +
> osaf_decode_sanamet(dec_info->io_uba, &pxied_comp_clean->comp_name);
> + }
> + }
> break;
>
> default:
> @@ -647,7 +866,19 @@ uint32_t ava_mds_flat_dec(AVA_CB *cb, MD
> break;
>
> case AVSV_AVND_AMF_API_RESP_MSG:
> - /* already decoded above */
> + {
> + AVSV_AMF_API_RESP_INFO *api_resp_info =
> &msg->info.api_resp_info;
> +
> + if (api_resp_info->type == AVSV_AMF_HA_STATE_GET) {
> + if
> (osaf_is_an_extended_name(&api_resp_info->param.ha_get.comp_name)) {
> + osaf_decode_sanamet(dec_info->io_uba,
> &api_resp_info->param.ha_get.comp_name);
> + }
> +
> + if
> (osaf_is_an_extended_name(&api_resp_info->param.ha_get.csi_name)) {
> + osaf_decode_sanamet(dec_info->io_uba,
> &api_resp_info->param.ha_get.csi_name);
> + }
> + }
> + }
> break;
>
> case AVSV_AVA_API_MSG:
> @@ -900,3 +1131,214 @@ extern "C" void ava_install_amf_down_cb(
>
> TRACE_LEAVE();
> }
> +
> +void ava_fill_finalize_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name)
> +{
> + msg->type = AVSV_AVA_API_MSG;
> + msg->info.api_info.type = AVSV_AMF_FINALIZE;
> + msg->info.api_info.dest = dst;
> + msg->info.api_info.param.finalize.hdl = hdl;
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&comp_name),
> + &msg->info.api_info.param.finalize.comp_name);
> +}
> +
> +void ava_fill_comp_reg_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name, SaNameT proxy_comp_name)
> +{
> + msg->type = AVSV_AVA_API_MSG;
> + msg->info.api_info.type = AVSV_AMF_COMP_REG;
> + msg->info.api_info.dest = dst;
> + msg->info.api_info.param.reg.hdl = hdl;
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&comp_name),
> + &msg->info.api_info.param.reg.comp_name);
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&proxy_comp_name),
> + &msg->info.api_info.param.reg.proxy_comp_name);
> +}
> +
> +void ava_fill_comp_unreg_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name, SaNameT proxy_comp_name)
> +{
> + msg->type = AVSV_AVA_API_MSG;
> + msg->info.api_info.type = AVSV_AMF_COMP_UNREG;
> + msg->info.api_info.dest = dst;
> + msg->info.api_info.param.unreg.hdl = hdl;
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&comp_name),
> + &msg->info.api_info.param.unreg.comp_name);
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&proxy_comp_name),
> + &msg->info.api_info.param.unreg.proxy_comp_name);
> +}
> +
> +void ava_fill_hc_start_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name, SaNameT proxy_comp_name,
> + SaAmfHealthcheckKeyT hc_key, SaAmfHealthcheckInvocationT hc_inv,
> + SaAmfRecommendedRecoveryT rcv)
> +{
> + msg->type = AVSV_AVA_API_MSG;
> + msg->info.api_info.type = AVSV_AMF_HC_START;
> + msg->info.api_info.dest = dst;
> + msg->info.api_info.param.hc_start.hdl = hdl;
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&comp_name),
> + &msg->info.api_info.param.hc_start.comp_name);
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&proxy_comp_name),
> + &msg->info.api_info.param.hc_start.proxy_comp_name);
> + memcpy(msg->info.api_info.param.hc_start.hc_key.key,
> + hc_key.key, hc_key.keyLen);
> + msg->info.api_info.param.hc_start.hc_key.keyLen = hc_key.keyLen;
> + msg->info.api_info.param.hc_start.inv_type = hc_inv;
> + msg->info.api_info.param.hc_start.rec_rcvr.saf_amf = rcv;
> +}
> +
> +void ava_fill_hc_stop_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name, SaNameT proxy_comp_name,
> + SaAmfHealthcheckKeyT hc_key)
> +{
> + msg->type = AVSV_AVA_API_MSG;
> + msg->info.api_info.type = AVSV_AMF_HC_STOP;
> + msg->info.api_info.dest = dst;
> + msg->info.api_info.param.hc_stop.hdl = hdl;
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&comp_name),
> + &msg->info.api_info.param.hc_stop.comp_name);
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&proxy_comp_name),
> + &msg->info.api_info.param.hc_stop.proxy_comp_name);
> + memcpy(msg->info.api_info.param.hc_stop.hc_key.key,
> + hc_key.key, hc_key.keyLen);
> + msg->info.api_info.param.hc_stop.hc_key.keyLen = hc_key.keyLen;
> +}
> +
> +void ava_fill_hc_confirm_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name, SaNameT proxy_comp_name,
> + SaAmfHealthcheckKeyT hc_key, SaAisErrorT res)
> +{
> + msg->type = AVSV_AVA_API_MSG;
> + msg->info.api_info.type = AVSV_AMF_HC_CONFIRM;
> + msg->info.api_info.dest = dst;
> + msg->info.api_info.param.hc_confirm.hdl = hdl;
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&comp_name),
> + &msg->info.api_info.param.hc_confirm.comp_name);
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&proxy_comp_name),
> + &msg->info.api_info.param.hc_confirm.proxy_comp_name);
> + memcpy(msg->info.api_info.param.hc_confirm.hc_key.key,
> + hc_key.key, hc_key.keyLen);
> + msg->info.api_info.param.hc_confirm.hc_key.keyLen = hc_key.keyLen;
> + msg->info.api_info.param.hc_confirm.hc_res = res;
> +}
> +
> +void ava_fill_pm_start_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name, SaUint64T processId,
> + SaInt32T depth, SaAmfPmErrorsT pmErr, SaAmfRecommendedRecoveryT
> rcv)
> +{
> + msg->type = AVSV_AVA_API_MSG;
> + msg->info.api_info.type = AVSV_AMF_PM_START;
> + msg->info.api_info.dest = dst;
> + msg->info.api_info.param.pm_start.hdl = hdl;
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&comp_name),
> + &msg->info.api_info.param.pm_start.comp_name);
> + msg->info.api_info.param.pm_start.pid = processId;
> + msg->info.api_info.param.pm_start.desc_tree_depth = depth;
> + msg->info.api_info.param.pm_start.pm_err = pmErr;
> + msg->info.api_info.param.pm_start.rec_rcvr.saf_amf = rcv;
> +
> +}
> +
> +void ava_fill_pm_stop_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name, SaAmfPmStopQualifierT stop,
> + SaUint64T processId, SaAmfPmErrorsT pmErr)
> +{
> + msg->type = AVSV_AVA_API_MSG;
> + msg->info.api_info.type = AVSV_AMF_PM_STOP;
> + msg->info.api_info.dest = dst;
> + msg->info.api_info.param.pm_stop.hdl = hdl;
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&comp_name),
> + &msg->info.api_info.param.pm_stop.comp_name);
> + msg->info.api_info.param.pm_stop.pid = processId;
> + msg->info.api_info.param.pm_stop.stop_qual = stop;
> + msg->info.api_info.param.pm_stop.pm_err = pmErr;
> +}
> +
> +void ava_fill_ha_state_get_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name, SaNameT csi_name)
> +{
> + msg->type = AVSV_AVA_API_MSG;
> + msg->info.api_info.type = AVSV_AMF_HA_STATE_GET;
> + msg->info.api_info.dest = dst;
> + msg->info.api_info.param.ha_get.hdl = hdl;
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&comp_name),
> + &msg->info.api_info.param.ha_get.comp_name);
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&csi_name),
> + &msg->info.api_info.param.ha_get.csi_name);
> +}
> +
> +void ava_fill_pg_start_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT csi_name, SaUint8T flag, bool syn)
> +{
> + msg->type = AVSV_AVA_API_MSG;
> + msg->info.api_info.type = AVSV_AMF_PG_START;
> + msg->info.api_info.dest = dst;
> + msg->info.api_info.param.pg_start.hdl = hdl;
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&csi_name),
> + &msg->info.api_info.param.pg_start.csi_name);
> + msg->info.api_info.param.pg_start.flags = flag;
> + msg->info.api_info.param.pg_start.is_syn = syn;
> +}
> +
> +void ava_fill_pg_stop_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT csi_name)
> +{
> + msg->type = AVSV_AVA_API_MSG;
> + msg->info.api_info.type = AVSV_AMF_PG_STOP;
> + msg->info.api_info.dest = dst;
> + msg->info.api_info.param.ha_get.hdl = hdl;
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&csi_name),
> + &msg->info.api_info.param.ha_get.csi_name);
> +}
> +void ava_fill_error_report_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name, SaTimeT time,
> + SaAmfRecommendedRecoveryT rcv)
> +{
> + msg->type = AVSV_AVA_API_MSG;
> + msg->info.api_info.type = AVSV_AMF_ERR_REP;
> + msg->info.api_info.dest = dst;
> + msg->info.api_info.param.err_rep.hdl = hdl;
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&comp_name),
> + &msg->info.api_info.param.err_rep.err_comp);
> + msg->info.api_info.param.err_rep.detect_time = time;
> + msg->info.api_info.param.err_rep.rec_rcvr.saf_amf = rcv;
> +}
> +
> +void ava_fill_err_clear_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> SaAmfHandleT hdl, SaNameT comp_name)
> +{
> + msg->type = AVSV_AVA_API_MSG;
> + msg->info.api_info.type = AVSV_AMF_ERR_CLEAR;
> + msg->info.api_info.dest = dst;
> + msg->info.api_info.param.err_clear.hdl = hdl;
> + // if hidden longDn in @comp_name, reuse it for @msg
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&comp_name),
> + &msg->info.api_info.param.err_clear.comp_name);
> +}
> +void ava_fill_response_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaInvocationT inv, SaAisErrorT error,
> + SaNameT comp_name)
> +{
> + msg->type = AVSV_AVA_API_MSG;
> + msg->info.api_info.type = AVSV_AMF_RESP;
> + msg->info.api_info.dest = dst;
> + msg->info.api_info.param.resp.hdl = hdl;
> + msg->info.api_info.param.resp.inv = inv;
> + msg->info.api_info.param.resp.err = error;
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&comp_name),
> + &msg->info.api_info.param.resp.comp_name);
> +}
> +void ava_fill_csi_quiescing_complete_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaInvocationT inv, SaAisErrorT error,
> + SaNameT comp_name)
> +{
> + msg->type = AVSV_AVA_API_MSG;
> + msg->info.api_info.type = AVSV_AMF_CSI_QUIESCING_COMPLETE;
> + msg->info.api_info.dest = dst;
> + msg->info.api_info.param.csiq_compl.hdl = hdl;
> + msg->info.api_info.param.csiq_compl.inv = inv;
> + msg->info.api_info.param.csiq_compl.err = error;
> + osaf_extended_name_alloc(osaf_extended_name_borrow(&comp_name),
> + &msg->info.api_info.param.csiq_compl.comp_name);
> +}
> 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
> @@ -148,12 +148,29 @@ void ava_cpy_protection_group_ntf(SaAmfP
> memset(to_ntf, 0, items * sizeof(*to_ntf));
> for(i = 0; i < items; i++) {
> to_ntf[i].change = from_ntf[i].change;
> - memcpy(to_ntf[i].member.compName.value,
> from_ntf[i].member.compName.value,
> - from_ntf[i].member.compName.length);
> - to_ntf[i].member.compName.length =
> from_ntf[i].member.compName.length;
> +
> osaf_extended_name_alloc(osaf_extended_name_borrow(&from_ntf[i].member.compName),
> +
> &to_ntf[i].member.compName);
> to_ntf[i].member.haReadinessState = ha_read_state;
> to_ntf[i].member.haState = from_ntf[i].member.haState;
> to_ntf[i].member.rank = from_ntf[i].member.rank;
> }
> }
>
> +/**
> + * @Brief: Check SaNameT is a valid formation
> + *
> + */
> +bool ava_sanamet_is_valid(const SaNameT* pName)
> +{
> + if (!osaf_is_extended_name_valid(pName)) {
> + LOG_WA("Environment variable SA_ENABLE_EXTENDED_NAMES "
> + "is not set, or not using extended name api");
> + return false;
> + }
> + if (osaf_extended_name_length(pName) > kOsafMaxDnLength) {
> + LOG_ER("Exceeding maximum of extended name length(%u)"
> + ,kOsafMaxDnLength);
> + return false;
> + }
> + return true;
> +}
> diff --git a/osaf/libs/agents/saf/amfa/include/ava.h
> b/osaf/libs/agents/saf/amfa/include/ava.h
> --- a/osaf/libs/agents/saf/amfa/include/ava.h
> +++ b/osaf/libs/agents/saf/amfa/include/ava.h
> @@ -43,6 +43,7 @@
> #include "ava_hdl.h"
> #include "ava_mds.h"
> #include "ava_cb.h"
> +#include "osaf_extended_name.h"
>
> #include<logtrace.h>
>
> 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,7 @@ void ava_cpy_protection_group_ntf(SaAmfP
> const SaAmfProtectionGroupNotificationT
> *from_ntf,
> SaUint32T items,
> SaAmfHAReadinessStateT ha_read_state);
> +bool ava_sanamet_is_valid(const SaNameT* pName);
>
> #ifdef __cplusplus
> }
> 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
> @@ -41,234 +41,47 @@ extern "C" {
> #define AVA_AVND_SUBPART_VER_MAX 1
>
>
> /*****************************************************************************
> - Macros to fill the MDS message structure
> + Function to fill the MDS message structure
>
> *****************************************************************************/
> -/* Macro to populate the 'AMF Initialize' message */
> -#define m_AVA_AMF_INIT_MSG_FILL(m, dst) \
> -{ \
> - (m).type = AVSV_AVA_API_MSG; \
> - (m).info.api_info.type = AVSV_AMF_INITIALIZE; \
> - (m).info.api_info.dest = (dst); \
> -}
> -
> -/* Macro to populate the 'AMF Finalize' message */
> -#define m_AVA_AMF_FINALIZE_MSG_FILL(m, dst, hd, cn) \
> -{ \
> - (m).type = AVSV_AVA_API_MSG; \
> - (m).info.api_info.type = AVSV_AMF_FINALIZE; \
> - (m).info.api_info.dest = (dst); \
> - (m).info.api_info.param.finalize.hdl = (hd); \
> - (m).info.api_info.param.finalize.comp_name = (cn); \
> -}
> -
> -/* Macro to populate the 'component register' message */
> -#define m_AVA_COMP_REG_MSG_FILL(m, dst, hd, cn, pcn) \
> -{ \
> - (m).type = AVSV_AVA_API_MSG; \
> - (m).info.api_info.type = AVSV_AMF_COMP_REG; \
> - (m).info.api_info.dest = (dst); \
> - (m).info.api_info.param.reg.hdl = (hd); \
> - memcpy((m).info.api_info.param.reg.comp_name.value, \
> - (cn).value, (cn).length); \
> - (m).info.api_info.param.reg.comp_name.length = (cn).length; \
> - memcpy((m).info.api_info.param.reg.proxy_comp_name.value, \
> - (pcn).value, (pcn).length); \
> - (m).info.api_info.param.reg.proxy_comp_name.length = (pcn).length; \
> -}
> -
> -/* Macro to populate the 'component unregister' message */
> -#define m_AVA_COMP_UNREG_MSG_FILL(m, dst, hd, cn, pcn) \
> -{ \
> - (m).type = AVSV_AVA_API_MSG; \
> - (m).info.api_info.type = AVSV_AMF_COMP_UNREG; \
> - (m).info.api_info.dest = (dst); \
> - (m).info.api_info.param.unreg.hdl = (hd); \
> - memcpy((m).info.api_info.param.unreg.comp_name.value, \
> - (cn).value, (cn).length); \
> - (m).info.api_info.param.unreg.comp_name.length = (cn).length; \
> - memcpy((m).info.api_info.param.unreg.proxy_comp_name.value, \
> - (pcn).value, (pcn).length); \
> - (m).info.api_info.param.unreg.proxy_comp_name.length = (pcn).length; \
> -}
> -
> -/* Macro to populate the 'healthcheck start' message */
> -#define m_AVA_HC_START_MSG_FILL(m, dst, hd, cn, pcn, hck, inv, rr) \
> -{ \
> - (m).type = AVSV_AVA_API_MSG; \
> - (m).info.api_info.type = AVSV_AMF_HC_START; \
> - (m).info.api_info.dest = (dst); \
> - (m).info.api_info.param.hc_start.hdl = (hd); \
> - memcpy((m).info.api_info.param.hc_start.comp_name.value, \
> - (cn).value, (cn).length); \
> - (m).info.api_info.param.hc_start.comp_name.length = (cn).length; \
> - memcpy((m).info.api_info.param.hc_start.proxy_comp_name.value, \
> - (pcn).value, (pcn).length); \
> - (m).info.api_info.param.hc_start.proxy_comp_name.length = (pcn).length; \
> - memcpy((m).info.api_info.param.hc_start.hc_key.key, \
> - (hck).key, (hck).keyLen); \
> - (m).info.api_info.param.hc_start.hc_key.keyLen = (hck).keyLen; \
> - (m).info.api_info.param.hc_start.inv_type = (inv); \
> - (m).info.api_info.param.hc_start.rec_rcvr.saf_amf = (rr); \
> -}
> -
> -/* Macro to populate the 'healthcheck stop' message */
> -#define m_AVA_HC_STOP_MSG_FILL(m, dst, hd, cn, pcn, hck) \
> -{ \
> - (m).type = AVSV_AVA_API_MSG; \
> - (m).info.api_info.type = AVSV_AMF_HC_STOP; \
> - (m).info.api_info.dest = (dst); \
> - (m).info.api_info.param.hc_stop.hdl = (hd); \
> - memcpy((m).info.api_info.param.hc_stop.comp_name.value, \
> - (cn).value, (cn).length); \
> - (m).info.api_info.param.hc_stop.comp_name.length = (cn).length; \
> - memcpy((m).info.api_info.param.hc_stop.proxy_comp_name.value, \
> - (pcn).value, (pcn).length); \
> - (m).info.api_info.param.hc_stop.proxy_comp_name.length = (pcn).length; \
> - memcpy((m).info.api_info.param.hc_stop.hc_key.key, \
> - (hck).key, (hck).keyLen); \
> - (m).info.api_info.param.hc_stop.hc_key.keyLen = (hck).keyLen; \
> -}
> -
> -/* Macro to populate the 'healthcheck confirm' message */
> -#define m_AVA_HC_CONFIRM_MSG_FILL(m, dst, hd, cn, pcn, hck, res) \
> -{ \
> - (m).type = AVSV_AVA_API_MSG; \
> - (m).info.api_info.type = AVSV_AMF_HC_CONFIRM; \
> - (m).info.api_info.dest = (dst); \
> - (m).info.api_info.param.hc_confirm.hdl = (hd); \
> - memcpy((m).info.api_info.param.hc_confirm.comp_name.value, \
> - (cn).value, (cn).length); \
> - (m).info.api_info.param.hc_confirm.comp_name.length = (cn).length; \
> - memcpy((m).info.api_info.param.hc_confirm.proxy_comp_name.value, \
> - (pcn).value, (pcn).length); \
> - (m).info.api_info.param.hc_confirm.proxy_comp_name.length = (pcn).length;
> \
> - memcpy((m).info.api_info.param.hc_confirm.hc_key.key, \
> - (hck).key, (hck).keyLen); \
> - (m).info.api_info.param.hc_confirm.hc_key.keyLen = (hck).keyLen; \
> - (m).info.api_info.param.hc_confirm.hc_res = (res); \
> -}
> -
> -/* Macro to populate the 'Passive Monitoring start' message */
> -#define m_AVA_PM_START_MSG_FILL(m, dst, hd, cn, processId, depth, pmErr,
> rec) \
> -{ \
> - (m).type = AVSV_AVA_API_MSG; \
> - (m).info.api_info.type = AVSV_AMF_PM_START; \
> - (m).info.api_info.dest = (dst); \
> - (m).info.api_info.param.hc_start.hdl = (hd); \
> - memcpy((m).info.api_info.param.pm_start.comp_name.value, \
> - (cn).value, (cn).length); \
> - (m).info.api_info.param.pm_start.comp_name.length = (cn).length; \
> - (m).info.api_info.param.pm_start.pid = (processId); \
> - (m).info.api_info.param.pm_start.desc_tree_depth = (depth); \
> - (m).info.api_info.param.pm_start.pm_err = (pmErr); \
> - (m).info.api_info.param.pm_start.rec_rcvr.saf_amf = (rec); \
> -}
> -
> -/* Macro to populate the 'Passive Monitoring stop' message */
> -#define m_AVA_PM_STOP_MSG_FILL(m, dst, hd, cn, stop, processId, pmErr) \
> -{ \
> - (m).type = AVSV_AVA_API_MSG; \
> - (m).info.api_info.type = AVSV_AMF_PM_STOP; \
> - (m).info.api_info.dest = (dst); \
> - (m).info.api_info.param.pm_stop.hdl = (hd); \
> - memcpy((m).info.api_info.param.pm_stop.comp_name.value, \
> - (cn).value, (cn).length); \
> - (m).info.api_info.param.pm_stop.comp_name.length = (cn).length; \
> - (m).info.api_info.param.pm_stop.stop_qual = (stop); \
> - (m).info.api_info.param.pm_stop.pid = (processId); \
> - (m).info.api_info.param.pm_stop.pm_err = (pmErr); \
> -}
> -
> -/* Macro to populate the 'ha state get' message */
> -#define m_AVA_HA_STATE_GET_MSG_FILL(m, dst, hd, cn, csi) \
> -{ \
> - (m).type = AVSV_AVA_API_MSG; \
> - (m).info.api_info.type = AVSV_AMF_HA_STATE_GET; \
> - (m).info.api_info.dest = (dst); \
> - (m).info.api_info.param.ha_get.hdl = (hd); \
> - memcpy((m).info.api_info.param.ha_get.comp_name.value, \
> - (cn).value, (cn).length); \
> - (m).info.api_info.param.ha_get.comp_name.length = (cn).length; \
> - memcpy((m).info.api_info.param.ha_get.csi_name.value, \
> - (csi).value, (csi).length); \
> - (m).info.api_info.param.ha_get.csi_name.length = (csi).length; \
> -}
> -
> -/* Macro to populate the 'pg track start' message */
> -#define m_AVA_PG_START_MSG_FILL(m, dst, hd, csin, fl, syn) \
> -{ \
> - (m).type = AVSV_AVA_API_MSG; \
> - (m).info.api_info.type = AVSV_AMF_PG_START; \
> - (m).info.api_info.dest = (dst); \
> - (m).info.api_info.param.pg_start.hdl = (hd); \
> - memcpy((m).info.api_info.param.pg_start.csi_name.value, \
> - (csin).value, (csin).length); \
> - (m).info.api_info.param.pg_start.csi_name.length = (csin).length; \
> - (m).info.api_info.param.pg_start.flags = (fl); \
> - (m).info.api_info.param.pg_start.is_syn = (syn); \
> -}
> -
> -/* Macro to populate the 'pg track stop' message */
> -#define m_AVA_PG_STOP_MSG_FILL(m, dst, hd, csin) \
> -{ \
> - (m).type = AVSV_AVA_API_MSG; \
> - (m).info.api_info.type = AVSV_AMF_PG_STOP; \
> - (m).info.api_info.dest = (dst); \
> - (m).info.api_info.param.pg_stop.hdl = (hd); \
> - memcpy((m).info.api_info.param.pg_stop.csi_name.value, \
> - (csin).value, (csin).length); \
> - (m).info.api_info.param.pg_stop.csi_name.length = (csin).length; \
> -}
> -
> -/* Macro to populate the 'error report' message */
> -#define m_AVA_ERR_REP_MSG_FILL(m, dst, hd, ec, et, rr) \
> -{ \
> - (m).type = AVSV_AVA_API_MSG; \
> - (m).info.api_info.type = AVSV_AMF_ERR_REP; \
> - (m).info.api_info.dest = (dst); \
> - (m).info.api_info.param.err_rep.hdl = (hd); \
> - memcpy((m).info.api_info.param.err_rep.err_comp.value, \
> - (ec).value, (ec).length); \
> - (m).info.api_info.param.err_rep.err_comp.length = (ec).length; \
> - (m).info.api_info.param.err_rep.detect_time = (et); \
> - (m).info.api_info.param.err_rep.rec_rcvr.saf_amf = (rr); \
> -}
> -
> -/* Macro to populate the 'error clear' message */
> -#define m_AVA_ERR_CLEAR_MSG_FILL(m, dst, hd, cn) \
> -{ \
> - (m).type = AVSV_AVA_API_MSG; \
> - (m).info.api_info.type = AVSV_AMF_ERR_CLEAR; \
> - (m).info.api_info.dest = (dst); \
> - (m).info.api_info.param.err_clear.hdl = (hd); \
> - memcpy((m).info.api_info.param.err_clear.comp_name.value, \
> - (cn).value, (cn).length); \
> - (m).info.api_info.param.err_clear.comp_name.length = (cn).length; \
> -}
> -
> -/* Macro to populate the 'AMF response' message */
> -#define m_AVA_AMF_RESP_MSG_FILL(m, dst, hd, in, er, cn) \
> -{ \
> - (m).type = AVSV_AVA_API_MSG; \
> - (m).info.api_info.type = AVSV_AMF_RESP; \
> - (m).info.api_info.dest = (dst); \
> - (m).info.api_info.param.resp.hdl = (hd); \
> - (m).info.api_info.param.resp.inv = (in); \
> - (m).info.api_info.param.resp.err = (er); \
> - (m).info.api_info.param.resp.comp_name = (cn); \
> -}
> -
> -/* Macro to populate the 'AMF response' message */
> -#define m_AVA_CSI_QUIESCING_COMPL_MSG_FILL(m, dst, hd, in, er, cn) \
> -{ \
> - (m).type = AVSV_AVA_API_MSG; \
> - (m).info.api_info.type = AVSV_AMF_CSI_QUIESCING_COMPLETE; \
> - (m).info.api_info.dest = (dst); \
> - (m).info.api_info.param.csiq_compl.hdl = (hd); \
> - (m).info.api_info.param.csiq_compl.inv = (in); \
> - (m).info.api_info.param.csiq_compl.err = (er); \
> - (m).info.api_info.param.csiq_compl.comp_name = (cn); \
> -}
> +void ava_fill_finalize_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name);
> +void ava_fill_comp_reg_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name, SaNameT proxy_comp_name);
> +void ava_fill_comp_unreg_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name, SaNameT proxy_comp_name);
> +void ava_fill_hc_start_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name, SaNameT proxy_comp_name,
> + SaAmfHealthcheckKeyT hc_key, SaAmfHealthcheckInvocationT hc_inv,
> + SaAmfRecommendedRecoveryT rcv);
> +void ava_fill_hc_stop_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name, SaNameT proxy_comp_name,
> + SaAmfHealthcheckKeyT hc_key);
> +void ava_fill_hc_confirm_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name, SaNameT proxy_comp_name,
> + SaAmfHealthcheckKeyT hc_key, SaAisErrorT res);
> +void ava_fill_pm_start_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name, SaUint64T processId,
> + SaInt32T depth, SaAmfPmErrorsT pmErr, SaAmfRecommendedRecoveryT
> rcv);
> +void ava_fill_pm_stop_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name, SaAmfPmStopQualifierT stop,
> + SaUint64T processId, SaAmfPmErrorsT pmErr);
> +void ava_fill_ha_state_get_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name, SaNameT csi_name);
> +void ava_fill_pg_start_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT csi_name, SaUint8T flag, bool syn);
> +void ava_fill_pg_stop_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT csi_name);
> +void ava_fill_error_report_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name, SaTimeT time,
> + SaAmfRecommendedRecoveryT rcv);
> +void ava_fill_err_clear_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaNameT comp_name);
> +void ava_fill_response_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaInvocationT inv, SaAisErrorT error,
> + SaNameT comp_name);
> +void ava_fill_csi_quiescing_complete_msg(AVSV_NDA_AVA_MSG* msg, MDS_DEST dst,
> + SaAmfHandleT hdl, SaInvocationT inv, SaAisErrorT error,
> + SaNameT comp_name);
>
> /*** Extern function declarations ***/
> struct ava_cb_tag;
>
------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel