Hi Praveen,
Thanks for your comments.
I will update the patch and send the V2 version.
Best regards,
Long Nguyen.
On 8/4/2016 4:55 PM, praveen malviya wrote:
> 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