src/base/ncs_saf_edu.h    |   3 +++
 src/base/saf_edu.c        |  46 ++++++++++++++++++++++++++++++++++++++++++++++
 src/msg/msgd/mqd_mbedu.c  |   2 +-
 src/plm/common/plms_edu.c |   2 +-
 4 files changed, 51 insertions(+), 2 deletions(-)


PLM and MSG standby do not come up in 5.1.0.

Both PLM and MSG make use of arrays of SaNameT structures. These are not
encoded and decoded properly by the new implementation of ncs_edp_sanamet.

A temporary solution is to put back the old functionality only for use
with arrays. Once it is clearly understood how the new function should
handle arrays, this fix can be removed.

diff --git a/src/base/ncs_saf_edu.h b/src/base/ncs_saf_edu.h
--- a/src/base/ncs_saf_edu.h
+++ b/src/base/ncs_saf_edu.h
@@ -97,6 +97,9 @@ extern "C" {
 #define m_NCS_EDP_SABOOLT                           ncs_edp_uns32
 #define m_NCS_EDP_SACLMCLUSTERCHANGEST              ncs_edp_uns32
 
+uint32_t ncs_edp_sanamet_old(EDU_HDL *edu_hdl,
+                         EDU_TKN *edu_tkn, NCSCONTEXT ptr,
+                         uint32_t *ptr_data_len, EDU_BUF_ENV *buf_env, 
EDP_OP_TYPE op, EDU_ERR *o_err);
 uint32_t ncs_edp_sanamet(EDU_HDL *edu_hdl,
                          EDU_TKN *edu_tkn, NCSCONTEXT ptr,
                          uint32_t *ptr_data_len, EDU_BUF_ENV *buf_env, 
EDP_OP_TYPE op, EDU_ERR *o_err);
diff --git a/src/base/saf_edu.c b/src/base/saf_edu.c
--- a/src/base/saf_edu.c
+++ b/src/base/saf_edu.c
@@ -54,6 +54,52 @@
   RETURNS:          NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
 
 *****************************************************************************/
+uint32_t ncs_edp_sanamet_old(EDU_HDL *hdl, EDU_TKN *edu_tkn,
+                     NCSCONTEXT ptr, uint32_t *ptr_data_len, EDU_BUF_ENV 
*buf_env, EDP_OP_TYPE op, EDU_ERR *o_err)
+{
+       uint32_t rc = NCSCC_RC_SUCCESS;
+       SaNameT *struct_ptr = NULL, **d_ptr = NULL;
+
+       EDU_INST_SET saname_rules[] = {
+               {EDU_START, ncs_edp_sanamet_old, 0, 0, 0, sizeof(SaNameT), 0, 
NULL},
+               {EDU_EXEC, m_NCS_EDP_SAUINT16T, 0, 0, 0,
+                (long)&((SaNameT *)0)->length, 0, NULL},
+               {EDU_EXEC, ncs_edp_uns8, EDQ_ARRAY, 0, 0,
+                (long)&((SaNameT *)0)->value, SA_MAX_NAME_LENGTH, NULL},
+               {EDU_END, 0, 0, 0, 0, 0, 0, NULL},
+       };
+
+       if (op == EDP_OP_TYPE_ENC) {
+               struct_ptr = (SaNameT *)ptr;
+       } else if (op == EDP_OP_TYPE_DEC) {
+               d_ptr = (SaNameT **)ptr;
+               if (*d_ptr == NULL) {
+                       *d_ptr = m_MMGR_ALLOC_EDP_SANAMET;
+                       if (*d_ptr == NULL) {
+                               *o_err = EDU_ERR_MEM_FAIL;
+                               return NCSCC_RC_FAILURE;
+                       }
+               }
+               memset(*d_ptr, '\0', sizeof(SaNameT));
+               struct_ptr = *d_ptr;
+       } else {
+               struct_ptr = ptr;
+       }
+       rc = m_NCS_EDU_RUN_RULES(hdl, edu_tkn, saname_rules, struct_ptr, 
ptr_data_len, buf_env, op, o_err);
+       return rc;
+}
+
+/*****************************************************************************
+
+  PROCEDURE NAME:   ncs_edp_sanamet
+
+  DESCRIPTION:      EDU program handler for "SaNameT" data. This function
+                    is invoked by EDU for performing encode/decode operation
+                    on "SaNameT" data.
+
+  RETURNS:          NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
+
+*****************************************************************************/
 uint32_t ncs_edp_sanamet(EDU_HDL *hdl, EDU_TKN *edu_tkn,
                      NCSCONTEXT ptr, uint32_t *ptr_data_len, EDU_BUF_ENV 
*buf_env, EDP_OP_TYPE op, EDU_ERR *o_err)
 {
diff --git a/src/msg/msgd/mqd_mbedu.c b/src/msg/msgd/mqd_mbedu.c
--- a/src/msg/msgd/mqd_mbedu.c
+++ b/src/msg/msgd/mqd_mbedu.c
@@ -582,7 +582,7 @@ uint32_t mqsv_edp_mqd_a2s_queue_info(EDU
                 (long)&((MQD_A2S_QUEUE_INFO *)0)->info.qgrp, 0, NULL},
                {EDU_EXEC, ncs_edp_uns32, 0, 0, 0,
                 (long)&((MQD_A2S_QUEUE_INFO *)0)->ilist_cnt, 0, NULL},
-               {EDU_EXEC, ncs_edp_sanamet, EDQ_VAR_LEN_DATA, ncs_edp_uns32, 0,
+               {EDU_EXEC, ncs_edp_sanamet_old, EDQ_VAR_LEN_DATA, 
ncs_edp_uns32, 0,
                 (long)&((MQD_A2S_QUEUE_INFO *)0)->ilist_info, 
(long)&((MQD_A2S_QUEUE_INFO *)0)->ilist_cnt, NULL},
                {EDU_EXEC_EXT, NULL, NCS_SERVICE_ID_OS_SVCS /* Svc-ID */ , 
NULL, 0, 0 /* Sub-ID */ , 0, NULL},
                {EDU_EXEC, ncs_edp_uns32, 0, 0, 0,
diff --git a/src/plm/common/plms_edu.c b/src/plm/common/plms_edu.c
--- a/src/plm/common/plms_edu.c
+++ b/src/plm/common/plms_edu.c
@@ -111,7 +111,7 @@ uint32_t plms_edp_agent_grp_op(EDU_HDL *
                 {EDU_EXEC, ncs_edp_uns64, 0, 0, 0, (long)&((PLMS_AGENT_GRP_OP 
*)0)->plm_handle, 0, NULL},
                 {EDU_EXEC, ncs_edp_uns64, 0, 0, 0, (long)&((PLMS_AGENT_GRP_OP 
*)0)->grp_handle, 0, NULL},
                 {EDU_EXEC, ncs_edp_uns32, 0, 0, 0, (long)&((PLMS_AGENT_GRP_OP 
*)0)->entity_names_number, 0, NULL},
-                {EDU_EXEC, ncs_edp_sanamet, EDQ_VAR_LEN_DATA, ncs_edp_uns32, 
0, (long)&((PLMS_AGENT_GRP_OP *)0)->entity_names,
+                {EDU_EXEC, ncs_edp_sanamet_old, EDQ_VAR_LEN_DATA, 
ncs_edp_uns32, 0, (long)&((PLMS_AGENT_GRP_OP *)0)->entity_names,
                 (long)&((PLMS_AGENT_GRP_OP *)0)->entity_names_number, NULL},
                 {EDU_EXEC_EXT, NULL, NCS_SERVICE_ID_PLMS, NULL, 0, 
                 1, 0, NULL},


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to