osaf/libs/common/amf/Makefile.am               |    1 +
 osaf/libs/common/amf/d2nmsg.c                  |  301 +++++++++++++++++++++-
 osaf/libs/common/amf/include/Makefile.am       |    1 +
 osaf/libs/common/amf/include/amf.h             |    2 +-
 osaf/libs/common/amf/include/amf_db_template.h |  146 ++++++++++
 osaf/libs/common/amf/include/amf_n2avamsg.h    |    2 +
 osaf/libs/common/amf/include/amf_util.h        |    8 +-
 osaf/libs/common/amf/n2avaedu.c                |    1 +
 osaf/libs/common/amf/n2avamsg.c                |  332 ++++++++++++++++++++++++-
 osaf/libs/common/amf/util.c                    |  246 +++++------------
 10 files changed, 832 insertions(+), 208 deletions(-)


diff --git a/osaf/libs/common/amf/Makefile.am b/osaf/libs/common/amf/Makefile.am
--- a/osaf/libs/common/amf/Makefile.am
+++ b/osaf/libs/common/amf/Makefile.am
@@ -23,6 +23,7 @@ SUBDIRS = include
 noinst_LTLIBRARIES = libamf_common.la
 
 libamf_common_la_CPPFLAGS = \
+       -DSA_EXTENDED_NAME_SOURCE \
        $(AM_CPPFLAGS) \
        -I$(top_srcdir)/osaf/libs/common/amf/include
 
diff --git a/osaf/libs/common/amf/d2nmsg.c b/osaf/libs/common/amf/d2nmsg.c
--- a/osaf/libs/common/amf/d2nmsg.c
+++ b/osaf/libs/common/amf/d2nmsg.c
@@ -25,6 +25,7 @@
 
 #include "amf.h"
 #include "amf_d2nmsg.h"
+#include "osaf_extended_name.h"
 
 /*****************************************************************************
  * Function: free_d2n_su_msg_info
@@ -47,6 +48,7 @@ static void free_d2n_su_msg_info(AVSV_DN
        while (su_msg->msg_info.d2n_reg_su.su_list != NULL) {
                su_info = su_msg->msg_info.d2n_reg_su.su_list;
                su_msg->msg_info.d2n_reg_su.su_list = su_info->next;
+               osaf_extended_name_free(&su_info->name);
                free(su_info);
        }
 }
@@ -70,9 +72,6 @@ static uint32_t cpy_d2n_su_msg(AVSV_DND_
 {
        AVSV_SU_INFO_MSG *s_su_info, *d_su_info;
 
-       memset(d_su_msg, '\0', sizeof(AVSV_DND_MSG));
-
-       memcpy(d_su_msg, s_su_msg, sizeof(AVSV_DND_MSG));
        d_su_msg->msg_info.d2n_reg_su.su_list = NULL;
 
        s_su_info = s_su_msg->msg_info.d2n_reg_su.su_list;
@@ -85,6 +84,7 @@ static uint32_t cpy_d2n_su_msg(AVSV_DND_
                }
 
                memcpy(d_su_info, s_su_info, sizeof(AVSV_SU_INFO_MSG));
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_su_info->name), 
&d_su_info->name);
                d_su_info->next = d_su_msg->msg_info.d2n_reg_su.su_list;
                d_su_msg->msg_info.d2n_reg_su.su_list = d_su_info;
 
@@ -114,14 +114,24 @@ static uint32_t cpy_d2n_su_msg(AVSV_DND_
 static void free_d2n_susi_msg_info(AVSV_DND_MSG *susi_msg)
 {
        AVSV_SUSI_ASGN *compcsi_info;
+       uint16_t i;
 
        while (susi_msg->msg_info.d2n_su_si_assign.list != NULL) {
                compcsi_info = susi_msg->msg_info.d2n_su_si_assign.list;
                susi_msg->msg_info.d2n_su_si_assign.list = compcsi_info->next;
                if (compcsi_info->attrs.list != NULL) {
+                       for (i = 0; i < compcsi_info->attrs.number; i++) {
+                               
osaf_extended_name_free(&compcsi_info->attrs.list[i].name);
+                               
osaf_extended_name_free(&compcsi_info->attrs.list[i].value);
+                               free(compcsi_info->attrs.list[i].string_ptr);
+                               compcsi_info->attrs.list[i].string_ptr = NULL;
+                       }
                        free(compcsi_info->attrs.list);
                        compcsi_info->attrs.list = NULL;
                }
+               osaf_extended_name_free(&compcsi_info->active_comp_name);
+               osaf_extended_name_free(&compcsi_info->comp_name);
+               osaf_extended_name_free(&compcsi_info->csi_name);
                free(compcsi_info);
        }
 }
@@ -144,10 +154,13 @@ static void free_d2n_susi_msg_info(AVSV_
 static uint32_t cpy_d2n_susi_msg(AVSV_DND_MSG *d_susi_msg, AVSV_DND_MSG 
*s_susi_msg)
 {
        AVSV_SUSI_ASGN *s_compcsi_info, *d_compcsi_info;
+       uint16_t i;
 
-       memset(d_susi_msg, '\0', sizeof(AVSV_DND_MSG));
+       
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_susi_msg->msg_info.d2n_su_si_assign.si_name),
+               &d_susi_msg->msg_info.d2n_su_si_assign.si_name);
+       
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_susi_msg->msg_info.d2n_su_si_assign.su_name),
+               &d_susi_msg->msg_info.d2n_su_si_assign.su_name);
 
-       memcpy(d_susi_msg, s_susi_msg, sizeof(AVSV_DND_MSG));
        d_susi_msg->msg_info.d2n_su_si_assign.list = NULL;
 
        s_compcsi_info = s_susi_msg->msg_info.d2n_su_si_assign.list;
@@ -160,6 +173,9 @@ static uint32_t cpy_d2n_susi_msg(AVSV_DN
                }
 
                memcpy(d_compcsi_info, s_compcsi_info, sizeof(AVSV_SUSI_ASGN));
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_compcsi_info->active_comp_name),
 &d_compcsi_info->active_comp_name);
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_compcsi_info->comp_name), 
&d_compcsi_info->comp_name);
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_compcsi_info->csi_name), 
&d_compcsi_info->csi_name);
 
                if ((s_compcsi_info->attrs.list != NULL) && 
(s_compcsi_info->attrs.number > 0)) {
                        d_compcsi_info->attrs.list =
@@ -171,6 +187,17 @@ static uint32_t cpy_d2n_susi_msg(AVSV_DN
                        }
                        memcpy(d_compcsi_info->attrs.list, 
s_compcsi_info->attrs.list,
                               (s_compcsi_info->attrs.number * 
sizeof(*d_compcsi_info->attrs.list)));
+                       for (i = 0; i < d_compcsi_info->attrs.number; i++) {
+                               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_compcsi_info->attrs.list[i].name),
+                                       &d_compcsi_info->attrs.list[i].name);
+                               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_compcsi_info->attrs.list[i].value),
+                                       &d_compcsi_info->attrs.list[i].value);
+                               if (s_compcsi_info->attrs.list[i].string_ptr != 
NULL) {
+                                       
strcpy(d_compcsi_info->attrs.list[i].string_ptr, 
s_compcsi_info->attrs.list[i].string_ptr);
+                               }
+                       }
+
+
                }
                d_compcsi_info->next = 
d_susi_msg->msg_info.d2n_su_si_assign.list;
                d_susi_msg->msg_info.d2n_su_si_assign.list = d_compcsi_info;
@@ -200,9 +227,14 @@ static uint32_t cpy_d2n_susi_msg(AVSV_DN
 static void free_d2n_pg_msg_info(AVSV_DND_MSG *pg_msg)
 {
        AVSV_D2N_PG_TRACK_ACT_RSP_MSG_INFO *info = 
&pg_msg->msg_info.d2n_pg_track_act_rsp;
+       uint16_t i;
 
-       if (info->mem_list.numberOfItems)
+       if (info->mem_list.numberOfItems) {
+               for (i = 0; i< info->mem_list.numberOfItems; i++) {
+                       
osaf_extended_name_free(&info->mem_list.notification[i].member.compName);
+               }
                free(info->mem_list.notification);
+       }
 
        info->mem_list.notification = 0;
        info->mem_list.numberOfItems = 0;
@@ -228,11 +260,10 @@ static uint32_t cpy_d2n_pg_msg(AVSV_DND_
 {
        AVSV_D2N_PG_TRACK_ACT_RSP_MSG_INFO *d_info = 
&d_pg_msg->msg_info.d2n_pg_track_act_rsp;
        AVSV_D2N_PG_TRACK_ACT_RSP_MSG_INFO *s_info = 
&s_pg_msg->msg_info.d2n_pg_track_act_rsp;
+       uint16_t i;
 
-       memset(d_pg_msg, '\0', sizeof(AVSV_DND_MSG));
-
-       /* copy the common contents */
-       memcpy(d_pg_msg, s_pg_msg, sizeof(AVSV_DND_MSG));
+       
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_pg_msg->msg_info.d2n_pg_track_act_rsp.csi_name),
+               &d_pg_msg->msg_info.d2n_pg_track_act_rsp.csi_name);
 
        if (!s_info->mem_list.numberOfItems)
                return NCSCC_RC_SUCCESS;
@@ -248,6 +279,13 @@ static uint32_t cpy_d2n_pg_msg(AVSV_DND_
        memcpy(d_info->mem_list.notification, s_info->mem_list.notification,
               sizeof(SaAmfProtectionGroupNotificationT) * 
s_info->mem_list.numberOfItems);
 
+       
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_info->mem_list.notification->member.compName),
+               &d_info->mem_list.notification->member.compName);
+       for (i = 0; i < d_info->mem_list.numberOfItems; i++){
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_info->mem_list.notification[i].member.compName),
+                                                                
&d_info->mem_list.notification[i].member.compName);
+       }
+
        return NCSCC_RC_SUCCESS;
 }
 
@@ -273,9 +311,6 @@ static uint32_t cpy_n2d_nd_sisu_state_in
        const AVSV_SU_STATE_MSG *src_su;
        AVSV_SU_STATE_MSG *dst_su;
 
-       memset(dst, '\0', sizeof(AVSV_DND_MSG));
-
-       memcpy(dst, src, sizeof(AVSV_DND_MSG));
        dst->msg_info.n2d_nd_sisu_state_info.sisu_list = NULL;
        dst->msg_info.n2d_nd_sisu_state_info.su_list = NULL;
 
@@ -290,6 +325,12 @@ static uint32_t cpy_n2d_nd_sisu_state_in
                dst_sisu->next = dst->msg_info.n2d_nd_sisu_state_info.sisu_list;
                dst->msg_info.n2d_nd_sisu_state_info.sisu_list = dst_sisu;
 
+               // Copy the SaNameT
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&src_sisu->safSU),
+                                                                
&dst_sisu->safSU);
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&src_sisu->safSI),
+                                                                
&dst_sisu->safSI);
+
                // now go to the next sisu info in source
                src_sisu = src_sisu->next;
        }
@@ -305,6 +346,10 @@ static uint32_t cpy_n2d_nd_sisu_state_in
                dst_su->next = dst->msg_info.n2d_nd_sisu_state_info.su_list;
                dst->msg_info.n2d_nd_sisu_state_info.su_list = dst_su;
 
+               // Copy SaNameT
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&src_su->safSU),
+                                                                
&dst_su->safSU);
+
                // now go to the next su info in source
                src_su = src_su->next;
        }
@@ -333,9 +378,6 @@ static uint32_t cpy_n2d_nd_csicomp_state
        const AVSV_COMP_STATE_MSG *src_comp;
        AVSV_COMP_STATE_MSG *dst_comp;
 
-       memset(dst, '\0', sizeof(AVSV_DND_MSG));
-
-       memcpy(dst, src, sizeof(AVSV_DND_MSG));
        dst->msg_info.n2d_nd_csicomp_state_info.csicomp_list = NULL;
        dst->msg_info.n2d_nd_csicomp_state_info.comp_list = NULL;
 
@@ -350,6 +392,12 @@ static uint32_t cpy_n2d_nd_csicomp_state
                dst_csicomp->next = 
dst->msg_info.n2d_nd_csicomp_state_info.csicomp_list;
                dst->msg_info.n2d_nd_csicomp_state_info.csicomp_list = 
dst_csicomp;
 
+               // Copy SaNameT
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&src_csicomp->safComp),
+                                                                
&dst_csicomp->safComp);
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&src_csicomp->safCSI),
+                                                                
&dst_csicomp->safCSI);
+
                // now go to the next csicomp info in source
                src_csicomp = src_csicomp->next;
        }
@@ -365,6 +413,10 @@ static uint32_t cpy_n2d_nd_csicomp_state
                dst_comp->next = 
dst->msg_info.n2d_nd_csicomp_state_info.comp_list;
                dst->msg_info.n2d_nd_csicomp_state_info.comp_list = dst_comp;
 
+               // Copy SaNameT
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&src_comp->safComp),
+                                                                
&dst_comp->safComp);
+
                // now go to the next comp info in source
                src_comp = src_comp->next;
        }
@@ -372,6 +424,75 @@ static uint32_t cpy_n2d_nd_csicomp_state
        return NCSCC_RC_SUCCESS;
 }
 
+/*****************************************************************************
+ * Function: free_d2n_comp_msg_info
+ *
+ * Purpose:  This function frees the d2n COMP message contents.
+ *
+ * Input: comp_msg - Pointer to the COMP message contents to be freed.
+ *
+ * Returns: None
+ *
+ * NOTES: none.
+ *
+ * 
+ **************************************************************************/
+
+static void free_d2n_comp_msg_info(AVSV_DND_MSG *comp_msg)
+{
+       AVSV_COMP_INFO_MSG *comp_info;
+
+       while (comp_msg->msg_info.d2n_reg_comp.list != NULL) {
+               comp_info = comp_msg->msg_info.d2n_reg_comp.list;
+               comp_msg->msg_info.d2n_reg_comp.list = comp_info->next;
+               osaf_extended_name_free(&comp_info->comp_info.name);
+               free(comp_info);
+       }
+}
+
+/*****************************************************************************
+ * Function: cpy_d2n_comp_msg
+ *
+ * Purpose:  This function makes a copy of the d2n COMP message.
+ *
+ * Input: d_comp_msg - Pointer to the COMP message to be copied to.
+ *        s_comp_msg - Pointer to the COMP message to be copied.
+ *
+ * Returns: NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
+ *
+ * NOTES: none.
+ *
+ * 
+ **************************************************************************/
+
+static uint32_t cpy_d2n_comp_msg(AVSV_DND_MSG *d_comp_msg, AVSV_DND_MSG 
*s_comp_msg)
+{
+       AVSV_COMP_INFO_MSG *s_comp_info, *d_comp_info;
+
+       d_comp_msg->msg_info.d2n_reg_comp.list = NULL;
+
+       s_comp_info = s_comp_msg->msg_info.d2n_reg_comp.list;
+
+       while (s_comp_info != NULL) {
+               d_comp_info = malloc(sizeof(AVSV_COMP_INFO_MSG));
+               if (d_comp_info == NULL) {
+                       free_d2n_comp_msg_info(d_comp_msg);
+                       return NCSCC_RC_FAILURE;
+               }
+
+               memcpy(d_comp_info, s_comp_info, sizeof(AVSV_COMP_INFO_MSG));
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_comp_info->comp_info.name),
+                                                                
&d_comp_info->comp_info.name);
+               d_comp_info->next = d_comp_msg->msg_info.d2n_reg_comp.list;
+               d_comp_msg->msg_info.d2n_reg_comp.list = d_comp_info;
+
+               /* go to the next comp info in source */
+               s_comp_info = s_comp_info->next;
+       }
+
+       return NCSCC_RC_SUCCESS;
+}
+
 /****************************************************************************
   Name          : avsv_dnd_msg_free
  
@@ -399,11 +520,34 @@ void avsv_dnd_msg_free(AVSV_DND_MSG *msg
        case AVSV_D2N_REG_SU_MSG:
                free_d2n_su_msg_info(msg);
                break;
+       case AVSV_D2N_REG_COMP_MSG:
+               free_d2n_comp_msg_info(msg);
+               break;
        case AVSV_D2N_INFO_SU_SI_ASSIGN_MSG:
                free_d2n_susi_msg_info(msg);
+               
osaf_extended_name_free(&msg->msg_info.d2n_su_si_assign.si_name);
+               
osaf_extended_name_free(&msg->msg_info.d2n_su_si_assign.su_name);
                break;
        case AVSV_D2N_PG_TRACK_ACT_RSP_MSG:
                free_d2n_pg_msg_info(msg);
+               
osaf_extended_name_free(&msg->msg_info.d2n_pg_track_act_rsp.csi_name);
+               break;
+       case AVSV_D2N_PG_UPD_MSG:
+               osaf_extended_name_free(&msg->msg_info.d2n_pg_upd.csi_name);
+               
osaf_extended_name_free(&msg->msg_info.d2n_pg_upd.mem.member.compName);
+               break;
+       case AVSV_D2N_OPERATION_REQUEST_MSG:
+               
osaf_extended_name_free(&msg->msg_info.d2n_op_req.param_info.name);
+               
osaf_extended_name_free(&msg->msg_info.d2n_op_req.param_info.name_sec);
+               break;
+       case AVSV_D2N_PRESENCE_SU_MSG:
+               osaf_extended_name_free(&msg->msg_info.d2n_prsc_su.su_name);
+               break;
+       case AVSV_D2N_COMP_VALIDATION_RESP_MSG:
+               
osaf_extended_name_free(&msg->msg_info.d2n_comp_valid_resp_info.comp_name);
+               break;
+       case AVSV_D2N_ADMIN_OP_REQ_MSG:
+               
osaf_extended_name_free(&msg->msg_info.d2n_admin_op_req_info.dn);
                break;
        case AVSV_N2D_ND_SISU_STATE_INFO_MSG:
                avsv_free_n2d_nd_sisu_state_info(msg);
@@ -411,6 +555,37 @@ void avsv_dnd_msg_free(AVSV_DND_MSG *msg
        case AVSV_N2D_ND_CSICOMP_STATE_INFO_MSG:
                avsv_free_n2d_nd_csicomp_state_info(msg);
                break;
+       case AVSV_N2D_NODE_UP_MSG:
+               osaf_extended_name_free(&msg->msg_info.n2d_node_up.node_name);
+               break;
+       case AVSV_N2D_REG_SU_MSG:
+               osaf_extended_name_free(&msg->msg_info.n2d_reg_su.su_name);
+               break;
+       case AVSV_N2D_REG_COMP_MSG:
+               osaf_extended_name_free(&msg->msg_info.n2d_reg_comp.comp_name);
+               break;
+       case AVSV_N2D_OPERATION_STATE_MSG:
+               osaf_extended_name_free(&msg->msg_info.n2d_opr_state.su_name);
+               break;
+       case AVSV_N2D_INFO_SU_SI_ASSIGN_MSG:
+               
osaf_extended_name_free(&msg->msg_info.n2d_su_si_assign.su_name);
+               
osaf_extended_name_free(&msg->msg_info.n2d_su_si_assign.si_name);
+               break;
+       case AVSV_N2D_PG_TRACK_ACT_MSG:
+               osaf_extended_name_free(&msg->msg_info.n2d_pg_trk_act.csi_name);
+               break;
+       case AVSV_N2D_OPERATION_REQUEST_MSG:
+               
osaf_extended_name_free(&msg->msg_info.n2d_op_req.param_info.name);
+               
osaf_extended_name_free(&msg->msg_info.n2d_op_req.param_info.name_sec); 
+               break;
+       case AVSV_N2D_DATA_REQUEST_MSG:
+               
osaf_extended_name_free(&msg->msg_info.n2d_data_req.param_info.name);
+               
osaf_extended_name_free(&msg->msg_info.n2d_data_req.param_info.name_sec);       
+               break;
+       case AVSV_N2D_COMP_VALIDATION_MSG:
+               
osaf_extended_name_free(&msg->msg_info.n2d_comp_valid_info.comp_name);
+               
osaf_extended_name_free(&msg->msg_info.n2d_comp_valid_info.proxy_comp_name);
+               break;
        default:
                break;
        }
@@ -441,23 +616,96 @@ uint32_t avsv_dnd_msg_copy(AVSV_DND_MSG 
                return NCSCC_RC_FAILURE;
        }
 
+       // Copy the raw content
+       memset(dmsg, '\0', sizeof(AVSV_DND_MSG));
+       memcpy(dmsg, smsg, sizeof(AVSV_DND_MSG));
+
        /* these messages have information list in them copy them
         * along with copying the contents.
         */
        switch (smsg->msg_type) {
        case AVSV_D2N_REG_SU_MSG:
                return cpy_d2n_su_msg(dmsg, smsg);
+       case AVSV_D2N_REG_COMP_MSG:
+               return cpy_d2n_comp_msg(dmsg, smsg);
        case AVSV_D2N_INFO_SU_SI_ASSIGN_MSG:
                return cpy_d2n_susi_msg(dmsg, smsg);
        case AVSV_D2N_PG_TRACK_ACT_RSP_MSG:
                return cpy_d2n_pg_msg(dmsg, smsg);
+       case AVSV_D2N_PG_UPD_MSG:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.d2n_pg_upd.csi_name),
+                                                                
&dmsg->msg_info.d2n_pg_upd.csi_name);
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.d2n_pg_upd.mem.member.compName),
+                                                                
&dmsg->msg_info.d2n_pg_upd.mem.member.compName);
+               break;
+       case AVSV_D2N_OPERATION_REQUEST_MSG:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.d2n_op_req.param_info.name),
+                                                                
&dmsg->msg_info.d2n_op_req.param_info.name);
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.d2n_op_req.param_info.name_sec),
+                                                                
&dmsg->msg_info.d2n_op_req.param_info.name_sec);
+               break;
+       case AVSV_D2N_PRESENCE_SU_MSG:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.d2n_prsc_su.su_name),
+                                                                
&dmsg->msg_info.d2n_prsc_su.su_name);
+               break;
+       case AVSV_D2N_COMP_VALIDATION_RESP_MSG:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.d2n_comp_valid_resp_info.comp_name),
+                                                                
&dmsg->msg_info.d2n_comp_valid_resp_info.comp_name);
+               break;
+       case AVSV_D2N_ADMIN_OP_REQ_MSG:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.d2n_admin_op_req_info.dn),
+                                                                
&dmsg->msg_info.d2n_admin_op_req_info.dn);
+               break;
        case AVSV_N2D_ND_SISU_STATE_INFO_MSG:
                return cpy_n2d_nd_sisu_state_info(dmsg, smsg);
        case AVSV_N2D_ND_CSICOMP_STATE_INFO_MSG:
                return cpy_n2d_nd_csicomp_state_info(dmsg, smsg);
+       case AVSV_N2D_NODE_UP_MSG:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_node_up.node_name),
+                                                                
&dmsg->msg_info.n2d_node_up.node_name);
+               break;
+       case AVSV_N2D_REG_SU_MSG:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_reg_su.su_name),
+                                                                
&dmsg->msg_info.n2d_reg_su.su_name);
+               break;
+       case AVSV_N2D_REG_COMP_MSG:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_reg_comp.comp_name),
+                                                                
&dmsg->msg_info.n2d_reg_comp.comp_name);
+               break;
+       case AVSV_N2D_OPERATION_STATE_MSG:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_opr_state.su_name),
+                                                                
&dmsg->msg_info.n2d_opr_state.su_name);
+               break;
+       case AVSV_N2D_INFO_SU_SI_ASSIGN_MSG:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_su_si_assign.su_name),
+                                                                
&dmsg->msg_info.n2d_su_si_assign.su_name);
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_su_si_assign.si_name),
+                                                                
&dmsg->msg_info.n2d_su_si_assign.si_name);
+               break;
+       case AVSV_N2D_PG_TRACK_ACT_MSG:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_pg_trk_act.csi_name),
+                                                                
&dmsg->msg_info.n2d_pg_trk_act.csi_name);
+               break;
+       case AVSV_N2D_OPERATION_REQUEST_MSG:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_op_req.param_info.name),
+                                                                
&dmsg->msg_info.n2d_op_req.param_info.name);
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_op_req.param_info.name_sec),
+                                                                
&dmsg->msg_info.n2d_op_req.param_info.name_sec);
+               break;
+       case AVSV_N2D_DATA_REQUEST_MSG:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_data_req.param_info.name),
+                                                                
&dmsg->msg_info.n2d_data_req.param_info.name);
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_data_req.param_info.name_sec),
+                                                                
&dmsg->msg_info.n2d_data_req.param_info.name_sec);
+               break;
+       case AVSV_N2D_COMP_VALIDATION_MSG:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_comp_valid_info.comp_name),
+                                                                
&dmsg->msg_info.n2d_comp_valid_info.comp_name);
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_comp_valid_info.proxy_comp_name),
+                                                                
&dmsg->msg_info.n2d_comp_valid_info.proxy_comp_name);
+               break;
        default:
-               /* copy only the contents */
-               memcpy(dmsg, smsg, sizeof(AVSV_DND_MSG));
+               /* Already copied above */
                break;
        }
 
@@ -501,7 +749,11 @@ void avsv_free_n2d_nd_csicomp_state_info
        TRACE("%u CSICOMP records to free", info->num_csicomp);
 
        while (csicomp_ptr != NULL) {
-               TRACE("freeing %s:%s", (char*)csicomp_ptr->safCSI.value, 
(char*)csicomp_ptr->safComp.value);
+               TRACE("freeing %s:%s", 
osaf_extended_name_borrow(&csicomp_ptr->safCSI),
+                         osaf_extended_name_borrow(&csicomp_ptr->safComp));
+               // Free SaNameT
+               osaf_extended_name_free(&csicomp_ptr->safCSI);
+               osaf_extended_name_free(&csicomp_ptr->safComp);
                next_csicomp_ptr = csicomp_ptr->next;
                free(csicomp_ptr);
                csicomp_ptr = next_csicomp_ptr;
@@ -516,7 +768,8 @@ void avsv_free_n2d_nd_csicomp_state_info
        TRACE("%u COMP records to free", info->num_comp);
 
        while (comp_ptr != NULL) {
-               TRACE("freeing %s", (char*)comp_ptr->safComp.value);
+               TRACE("freeing %s", 
osaf_extended_name_borrow(&comp_ptr->safComp));
+               osaf_extended_name_free(&comp_ptr->safComp);
                next_comp_ptr = comp_ptr->next;
                free(comp_ptr);
                comp_ptr = next_comp_ptr;
@@ -569,7 +822,10 @@ void avsv_free_n2d_nd_sisu_state_info(AV
        TRACE("%u SISU records to free", info->num_sisu);
 
        while (sisu_ptr != NULL) {
-               TRACE("freeing %s:%s", (char*)sisu_ptr->safSI.value, 
(char*)sisu_ptr->safSU.value);
+               TRACE("freeing %s:%s", 
osaf_extended_name_borrow(&sisu_ptr->safSI),
+                        osaf_extended_name_borrow(&sisu_ptr->safSU));
+               osaf_extended_name_free(&sisu_ptr->safSI);
+               osaf_extended_name_free(&sisu_ptr->safSU);
                next_sisu_ptr = sisu_ptr->next;
                free(sisu_ptr);
                sisu_ptr = next_sisu_ptr;
@@ -584,7 +840,8 @@ void avsv_free_n2d_nd_sisu_state_info(AV
        TRACE("%u SU records to free", info->num_su);
 
        while (su_ptr != NULL) {
-               TRACE("freeing %s", (char*)su_ptr->safSU.value);
+               TRACE("freeing %s", osaf_extended_name_borrow(&su_ptr->safSU));
+               osaf_extended_name_free(&su_ptr->safSU);
                next_su_ptr = su_ptr->next;
                free(su_ptr);
                su_ptr = next_su_ptr;
diff --git a/osaf/libs/common/amf/include/Makefile.am 
b/osaf/libs/common/amf/include/Makefile.am
--- a/osaf/libs/common/amf/include/Makefile.am
+++ b/osaf/libs/common/amf/include/Makefile.am
@@ -26,6 +26,7 @@ noinst_HEADERS = \
    amf_eduutil.h \
    amf.h \
    amf_n2avaedu.h \
+   amf_db_template.h \
    amf_n2avamsg.h \
    amf_si_assign.h \
    amf_util.h \
diff --git a/osaf/libs/common/amf/include/amf.h 
b/osaf/libs/common/amf/include/amf.h
--- a/osaf/libs/common/amf/include/amf.h
+++ b/osaf/libs/common/amf/include/amf.h
@@ -48,5 +48,5 @@
 #include "ncs_hdl_pub.h"
 #include "ncs_main_papi.h"
 #include "ncssysf_def.h"
-
+#include "osaf_extended_name.h"
 #endif
diff --git a/osaf/libs/common/amf/include/amf_db_template.h 
b/osaf/libs/common/amf/include/amf_db_template.h
new file mode 100644
--- /dev/null
+++ b/osaf/libs/common/amf/include/amf_db_template.h
@@ -0,0 +1,146 @@
+/*      -*- OpenSAF  -*-
+ *
+ * (C) Copyright 2014 The OpenSAF Foundation
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. This file and program are licensed
+ * under the GNU Lesser General Public License Version 2.1, February 1999.
+ * The complete license can be accessed from the following location:
+ * http://opensource.org/licenses/lgpl-license.php
+ * See the Copying file included with the OpenSAF distribution for full
+ * licensing terms.
+ *
+ * Author(s): Ericsson AB
+ *
+ */
+#ifndef DB_TEMPLATE_H
+#define        DB_TEMPLATE_H
+
+#include <osaf_extended_name.h>
+#include <map>
+#include <string>
+#include "saAis.h"
+#include "ncsgl_defs.h"
+
+//
+class Amf {
+public:
+  static std::string to_string(const SaNameT *name) {
+    return osaf_extended_name_borrow(name);
+  }
+};
+
+class SaNameTWrapper {
+public:
+  SaNameTWrapper(const std::string& str) {
+    osaf_extended_name_alloc(str.c_str(), &name);
+  };
+  ~SaNameTWrapper() {
+    clear();
+  };
+
+  // note: SaNameT* will become invalid if this SaNameTWrapper is destroyed
+  operator const SaNameT*() const {
+    return &name;
+  };
+ 
+  // note: SaNameT will become invalid if this SaNameTWrapper is destroyed
+  operator const SaNameT() const {
+    return name;
+  }
+
+  void set(const std::string& str) {
+    osaf_extended_name_free(&name);
+    osaf_extended_name_alloc(str.c_str(), &name);
+  };
+
+  void clear() {
+    osaf_extended_name_free(&name);
+  };
+
+  SaNameTWrapper(const SaNameTWrapper&) = delete;
+  SaNameTWrapper& operator=(const SaNameTWrapper&) = delete;
+  SaNameTWrapper() = delete;
+
+private:
+  SaNameT name{};
+};
+       
+//
+template <typename Key, typename T>
+class AmfDb {
+  public:
+   unsigned int insert(const Key &key, T *obj);
+   void erase(const Key &key);
+   T *find(const Key &name);
+   T *findNext(const Key &name);
+   
+   typedef std::map<Key, T*> AmfDbMap;
+   typedef typename AmfDbMap::const_iterator const_iterator;
+   typedef typename AmfDbMap::iterator iterator;
+   typedef typename AmfDbMap::const_reverse_iterator const_reverse_iterator;
+
+   const_iterator begin() const {return db.begin();}
+   const_iterator end() const {return db.end();}
+   typename AmfDbMap::size_type size() const {return db.size();}
+   const_reverse_iterator rbegin() const {return db.rbegin();}
+   const_reverse_iterator rend() const {return db.rend();}
+
+   iterator erase(const iterator &it) {return db.erase(it);}
+
+   iterator begin() {return db.begin();}
+   iterator end() {return db.end();}
+
+   const_iterator cbegin() const {return db.cbegin();}
+   const_iterator cend() const {return db.cend();}
+
+  private:
+   AmfDbMap db;
+};
+
+//
+template <typename Key, typename T>
+unsigned int AmfDb<Key, T>::insert(const Key &key, T *obj) {
+  osafassert(obj);
+  
+  if (db.insert(std::make_pair(key, obj)).second) {
+    return 1; // NCSCC_RC_SUCCESS
+  }
+   else {
+      return 2; // Duplicate (NCSCC_RC_FAILURE)
+    }
+ }
+
+//
+template <typename Key, typename T>
+void AmfDb<Key, T>::erase(const Key &key) {
+  db.erase(key);
+}
+
+//
+template <typename Key, typename T>
+T *AmfDb<Key, T>::find(const Key &key) {
+  typename AmfDbMap::iterator it = db.find(key);
+  if (it == db.end())
+    return 0;
+  else
+    return it->second;
+}
+
+template <typename Key, typename T>
+T * AmfDb<Key, T>::findNext(const Key &key) {
+  typename AmfDbMap::iterator it = db.find(key);
+  if (it == db.end()) {
+    return 0;
+  }
+
+  it++;
+  if (it == db.end())
+    return 0;
+  else {
+    return it->second;
+  }
+}
+
+#endif /* DB_TEMPLATE_H */
diff --git a/osaf/libs/common/amf/include/amf_n2avamsg.h 
b/osaf/libs/common/amf/include/amf_n2avamsg.h
--- a/osaf/libs/common/amf/include/amf_n2avamsg.h
+++ b/osaf/libs/common/amf/include/amf_n2avamsg.h
@@ -103,8 +103,10 @@ void avsv_nda_ava_msg_content_free(AVSV_
 uint32_t avsv_nda_ava_msg_copy(AVSV_NDA_AVA_MSG *, AVSV_NDA_AVA_MSG *);
 
 uint32_t avsv_amf_cbk_copy(AVSV_AMF_CBK_INFO **, AVSV_AMF_CBK_INFO *);
+uint32_t avsv_amf_api_copy(AVSV_AMF_API_INFO *, AVSV_AMF_API_INFO *);
 uint32_t avsv_amf_csi_attr_list_copy(SaAmfCSIAttributeListT *, const 
SaAmfCSIAttributeListT *);
 void avsv_amf_cbk_free(AVSV_AMF_CBK_INFO *);
+void avsv_amf_api_free(AVSV_AMF_API_INFO *);
 void avsv_amf_csi_attr_list_free(SaAmfCSIAttributeListT *);
 
 uint32_t avsv_amf_csi_attr_convert(AVSV_AMF_CBK_INFO *);
diff --git a/osaf/libs/common/amf/include/amf_util.h 
b/osaf/libs/common/amf/include/amf_util.h
--- a/osaf/libs/common/amf/include/amf_util.h
+++ b/osaf/libs/common/amf/include/amf_util.h
@@ -66,22 +66,18 @@ extern "C" {
 /* macro to determine if name is null */
 #define m_AVSV_SA_NAME_IS_NULL(n) avsv_sa_name_is_null(&(n))
 
-extern unsigned int avsv_cpy_SU_DN_from_DN(SaNameT *, SaNameT *);
-extern unsigned int avsv_cpy_node_DN_from_DN(SaNameT *, SaNameT *);
-extern bool avsv_is_external_DN(SaNameT *);
-extern unsigned int avsv_cpy_SI_DN_from_DN(SaNameT *, SaNameT *);
-
+extern int avsv_cmp_horder_sanamet(const SaNameT* , const SaNameT *);
 extern unsigned int avsv_dblist_uns32_cmp(unsigned char *, unsigned char *);
 extern unsigned int avsv_dblist_uns64_cmp(unsigned char *, unsigned char *);
 extern unsigned int avsv_dblist_saname_net_cmp(unsigned char *, unsigned char 
*);
 extern unsigned int avsv_dblist_saname_cmp(unsigned char *, unsigned char *);
 extern unsigned int avsv_dblist_sahckey_cmp(unsigned char *, unsigned char *);
+extern unsigned int avsv_dblist_sastring_cmp(unsigned char *, unsigned char *);
 
 extern bool avsv_sa_name_is_null(SaNameT *);
 
 extern void avsv_create_association_class_dn(const SaNameT *child_dn, const 
SaNameT *parent_dn,
        const char *rdn_tag, SaNameT *dn);
-extern void avsv_sanamet_init(const SaNameT *haystack, SaNameT *dn, const char 
*needle);
 
 extern AVSV_COMP_TYPE_VAL 
avsv_amfcompcategory_to_avsvcomptype(SaAmfCompCategoryT saf_comp_category);
 
diff --git a/osaf/libs/common/amf/n2avaedu.c b/osaf/libs/common/amf/n2avaedu.c
--- a/osaf/libs/common/amf/n2avaedu.c
+++ b/osaf/libs/common/amf/n2avaedu.c
@@ -630,6 +630,7 @@ int avsv_api_resp_info_test_type_fnc(NCS
        case AVSV_AMF_SEL_OBJ_GET:
        case AVSV_AMF_DISPATCH:
        case AVSV_AMF_COMP_NAME_GET:
+       case AVSV_AMF_COMP_TERM_RSP:
                return LCL_JMP_OFFSET_AVSV_N2A_OTHER_API_RESP_INFO;
 
        default:
diff --git a/osaf/libs/common/amf/n2avamsg.c b/osaf/libs/common/amf/n2avamsg.c
--- a/osaf/libs/common/amf/n2avamsg.c
+++ b/osaf/libs/common/amf/n2avamsg.c
@@ -36,6 +36,7 @@
 #include "amf_amfparam.h"
 #include "amf_n2avamsg.h"
 #include "amf_nd2ndmsg.h"
+#include "osaf_extended_name.h"
 
 /****************************************************************************
   Name          : avsv_nda_ava_msg_free
@@ -78,10 +79,19 @@ void avsv_nd2nd_avnd_msg_free(AVSV_ND2ND
        if (!msg)
                return;
 
+       if (osaf_is_an_extended_name(&msg->comp_name)) {
+               osaf_extended_name_free(&msg->comp_name);
+       }
+
        if (AVND_AVND_AVA_MSG == msg->type) {
                /* free the message content after all these are AvA content. */
                avsv_nda_ava_msg_free(msg->info.msg);
+       } else if (AVND_AVND_CBK_DEL == msg->type) {
+               if (osaf_is_an_extended_name(&msg->info.cbk_del.comp_name)) {
+                       osaf_extended_name_free(&msg->info.cbk_del.comp_name);
+               }
        }
+
        /* free the message */
        free(msg);
 
@@ -107,7 +117,7 @@ void avsv_nda_ava_msg_content_free(AVSV_
 
        switch (msg->type) {
        case AVSV_AVA_API_MSG:
-       case AVSV_AVND_AMF_API_RESP_MSG:
+               avsv_amf_api_free(&msg->info.api_info);
                break;
 
        case AVSV_AVND_AMF_CBK_MSG:
@@ -117,6 +127,11 @@ void avsv_nda_ava_msg_content_free(AVSV_
                }
                break;
 
+       case AVSV_AVND_AMF_API_RESP_MSG:
+               if (msg->info.api_resp_info.type == AVSV_AMF_HA_STATE_GET) {
+                       
osaf_extended_name_free(&msg->info.api_resp_info.param.ha_get.comp_name);
+                       
osaf_extended_name_free(&msg->info.api_resp_info.param.ha_get.csi_name);
+               }
        default:
                break;
        }
@@ -147,8 +162,13 @@ uint32_t avsv_ndnd_avnd_msg_copy(AVSV_ND
 
        /* copy the common fields */
        memcpy(dmsg, smsg, sizeof(AVSV_ND2ND_AVND_MSG));
-       if (AVND_AVND_AVA_MSG == smsg->type)
+       osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->comp_name), 
&dmsg->comp_name);
+       if (AVND_AVND_AVA_MSG == smsg->type) {
                rc = avsv_nda_ava_msg_copy(dmsg->info.msg, smsg->info.msg);
+       } else if (AVND_AVND_CBK_DEL == smsg->type) {
+               if (osaf_is_an_extended_name(&smsg->info.cbk_del.comp_name))
+                       
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->info.cbk_del.comp_name),
 &dmsg->info.cbk_del.comp_name);
+       }
 
  done:
        return rc;
@@ -180,7 +200,17 @@ uint32_t avsv_nda_ava_msg_copy(AVSV_NDA_
 
        switch (smsg->type) {
        case AVSV_AVA_API_MSG:
+               rc = avsv_amf_api_copy(&dmsg->info.api_info, 
&smsg->info.api_info);
+               break;
+
        case AVSV_AVND_AMF_API_RESP_MSG:
+               if (smsg->info.api_resp_info.type == AVSV_AMF_HA_STATE_GET) {
+                       
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->info.api_resp_info.param.ha_get.comp_name),
+                                                                        
&dmsg->info.api_resp_info.param.ha_get.comp_name);
+                       
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->info.api_resp_info.param.ha_get.csi_name),
+                                                                        
&dmsg->info.api_resp_info.param.ha_get.csi_name);
+               }
+
                break;
 
        case AVSV_AVND_AMF_CBK_MSG:
@@ -210,6 +240,7 @@ uint32_t avsv_nda_ava_msg_copy(AVSV_NDA_
 uint32_t avsv_amf_cbk_copy(AVSV_AMF_CBK_INFO **o_dcbk, AVSV_AMF_CBK_INFO *scbk)
 {
        uint32_t rc = NCSCC_RC_SUCCESS;
+       uint16_t i;
 
        if (!o_dcbk || !scbk)
                return NCSCC_RC_FAILURE;
@@ -226,13 +257,28 @@ uint32_t avsv_amf_cbk_copy(AVSV_AMF_CBK_
 
        switch (scbk->type) {
        case AVSV_AMF_HC:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.hc.comp_name), 
&(*o_dcbk)->param.hc.comp_name);
+               break;
+
        case AVSV_AMF_COMP_TERM:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.comp_term.comp_name),
 &(*o_dcbk)->param.comp_term.comp_name);
+               break;
+
        case AVSV_AMF_CSI_REM:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.csi_rem.comp_name),
 &(*o_dcbk)->param.csi_rem.comp_name);
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.csi_rem.csi_name),
 &(*o_dcbk)->param.csi_rem.csi_name);
+               break;
+
        case AVSV_AMF_PXIED_COMP_INST:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.pxied_comp_inst.comp_name),
 &(*o_dcbk)->param.pxied_comp_inst.comp_name);
+               break;
+
        case AVSV_AMF_PXIED_COMP_CLEAN:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.pxied_comp_clean.comp_name),
 &(*o_dcbk)->param.pxied_comp_clean.comp_name);
                break;
 
        case AVSV_AMF_PG_TRACK:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.pg_track.csi_name),
 &(*o_dcbk)->param.pg_track.csi_name);
                /* memset notify buffer */
                memset(&(*o_dcbk)->param.pg_track.buf, 0, 
sizeof(SaAmfProtectionGroupNotificationBufferT));
 
@@ -248,11 +294,17 @@ uint32_t avsv_amf_cbk_copy(AVSV_AMF_CBK_
                        memcpy((*o_dcbk)->param.pg_track.buf.notification,
                               scbk->param.pg_track.buf.notification,
                               sizeof(SaAmfProtectionGroupNotificationT) * 
scbk->param.pg_track.buf.numberOfItems);
+                       for (i = 0; i < scbk->param.pg_track.buf.numberOfItems; 
i++) {
+                               
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.pg_track.buf.notification[i].member.compName),
+                                       
&(*o_dcbk)->param.pg_track.buf.notification[i].member.compName);
+                       }
                        (*o_dcbk)->param.pg_track.buf.numberOfItems = 
scbk->param.pg_track.buf.numberOfItems;
                }
                break;
 
        case AVSV_AMF_CSI_SET:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.csi_set.comp_name),
 &(*o_dcbk)->param.csi_set.comp_name);
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.csi_set.csi_desc.csiName),
 &(*o_dcbk)->param.csi_set.csi_desc.csiName);
                /* memset avsv & amf csi attr lists */
                memset(&(*o_dcbk)->param.csi_set.attrs, 0, 
sizeof(AVSV_CSI_ATTRS));
                memset(&(*o_dcbk)->param.csi_set.csi_desc.csiAttr, 0, 
sizeof(SaAmfCSIAttributeListT));
@@ -268,9 +320,32 @@ uint32_t avsv_amf_cbk_copy(AVSV_AMF_CBK_
 
                        memcpy((*o_dcbk)->param.csi_set.attrs.list, 
scbk->param.csi_set.attrs.list,
                               sizeof(AVSV_ATTR_NAME_VAL) * 
scbk->param.csi_set.attrs.number);
+
+                       for (i = 0; i < scbk->param.csi_set.attrs.number; i++) {
+                               
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.csi_set.attrs.list[i].name),
+                                                                               
 &(*o_dcbk)->param.csi_set.attrs.list[i].name);
+                               
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.csi_set.attrs.list[i].value),
+                                                                               
 &(*o_dcbk)->param.csi_set.attrs.list[i].value);
+                       }
+
                        (*o_dcbk)->param.csi_set.attrs.number = 
scbk->param.csi_set.attrs.number;
                }
 
+               /* Copy csi state description */
+               if (scbk->param.csi_set.ha == SA_AMF_HA_ACTIVE) {
+                       if 
(osaf_is_an_extended_name(&scbk->param.csi_set.csi_desc.csiStateDescriptor.activeDescriptor.activeCompName))
 {
+                               
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.csi_set.csi_desc.csiStateDescriptor.activeDescriptor.activeCompName),
+                                                                               
 
&(*o_dcbk)->param.csi_set.csi_desc.csiStateDescriptor.activeDescriptor.activeCompName);
+                       }
+               }
+
+               if (scbk->param.csi_set.ha == SA_AMF_HA_STANDBY) {
+                       if 
(osaf_is_an_extended_name(&scbk->param.csi_set.csi_desc.csiStateDescriptor.standbyDescriptor.activeCompName))
 {
+                               
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.csi_set.csi_desc.csiStateDescriptor.standbyDescriptor.activeCompName),
+                                                                               
 
&(*o_dcbk)->param.csi_set.csi_desc.csiStateDescriptor.standbyDescriptor.activeCompName);
+                       }
+               }
+
                /* copy the amf csi attr list */
                if (scbk->param.csi_set.csi_desc.csiAttr.number) {
                        rc = 
avsv_amf_csi_attr_list_copy(&scbk->param.csi_set.csi_desc.csiAttr,
@@ -304,29 +379,65 @@ uint32_t avsv_amf_cbk_copy(AVSV_AMF_CBK_
 ******************************************************************************/
 void avsv_amf_cbk_free(AVSV_AMF_CBK_INFO *cbk_info)
 {
+       uint16_t i;
+
        if (!cbk_info)
                return;
 
        switch (cbk_info->type) {
        case AVSV_AMF_HC:
+               osaf_extended_name_free(&cbk_info->param.hc.comp_name);
+               break;
+
        case AVSV_AMF_COMP_TERM:
+               osaf_extended_name_free(&cbk_info->param.comp_term.comp_name);
+               break;
+
        case AVSV_AMF_CSI_REM:
+               osaf_extended_name_free(&cbk_info->param.csi_rem.comp_name);
+               osaf_extended_name_free(&cbk_info->param.csi_rem.csi_name);
+               break;
+
        case AVSV_AMF_PXIED_COMP_INST:
+               
osaf_extended_name_free(&cbk_info->param.pxied_comp_inst.comp_name);
+               break;
+
        case AVSV_AMF_PXIED_COMP_CLEAN:
+               
osaf_extended_name_free(&cbk_info->param.pxied_comp_clean.comp_name);
                break;
 
        case AVSV_AMF_PG_TRACK:
+               osaf_extended_name_free(&cbk_info->param.pg_track.csi_name);
                /* free the notify buffer */
-               if (cbk_info->param.pg_track.buf.numberOfItems)
+               if (cbk_info->param.pg_track.buf.numberOfItems) {
+                       for (i = 0; i < 
cbk_info->param.pg_track.buf.numberOfItems; i++) {
+                               
osaf_extended_name_free(&cbk_info->param.pg_track.buf.notification[i].member.compName);
+                       }
                        free(cbk_info->param.pg_track.buf.notification);
+               }
                break;
 
        case AVSV_AMF_CSI_SET:
+               osaf_extended_name_free(&cbk_info->param.csi_set.comp_name);
                /* free the avsv csi attr list */
-               if (cbk_info->param.csi_set.attrs.number)
+               if (cbk_info->param.csi_set.attrs.number) {
+                       if (cbk_info->param.csi_set.attrs.list) {
+                               for (i = 0; i < 
cbk_info->param.csi_set.attrs.number; i++)
+                               {
+                                       
osaf_extended_name_free(&cbk_info->param.csi_set.attrs.list[i].name);
+                                       
osaf_extended_name_free(&cbk_info->param.csi_set.attrs.list[i].value);
+                               }
+                       }
                        free(cbk_info->param.csi_set.attrs.list);
-
+               }
                /* free the amf csi attr list */
+               
osaf_extended_name_free(&cbk_info->param.csi_set.csi_desc.csiName);
+               if (cbk_info->param.csi_set.ha == SA_AMF_HA_ACTIVE) {
+                       
osaf_extended_name_free(&cbk_info->param.csi_set.csi_desc.csiStateDescriptor.activeDescriptor.activeCompName);
+               }
+               if (cbk_info->param.csi_set.ha == SA_AMF_HA_STANDBY) {
+                       
osaf_extended_name_free(&cbk_info->param.csi_set.csi_desc.csiStateDescriptor.standbyDescriptor.activeCompName);
+               }
                
avsv_amf_csi_attr_list_free(&cbk_info->param.csi_set.csi_desc.csiAttr);
                break;
 
@@ -336,11 +447,214 @@ void avsv_amf_cbk_free(AVSV_AMF_CBK_INFO
 
        /* free the cbk-info ptr */
        free(cbk_info);
+       cbk_info = NULL;
 
        return;
 }
 
 /****************************************************************************
+  Name          : avsv_amf_api_free
+ 
+  Description   : This routine frees api information.
+ 
+  Arguments     : api_info - ptr to the api info
+ 
+  Return Values : None.
+ 
+  Notes         : None.
+******************************************************************************/
+void avsv_amf_api_free(AVSV_AMF_API_INFO *api_info)
+{
+       if (!api_info)
+               return;
+
+       switch (api_info->type) {
+       case AVSV_AMF_FINALIZE:
+               osaf_extended_name_free(&api_info->param.finalize.comp_name);
+               break;
+
+       case AVSV_AMF_COMP_REG:
+               osaf_extended_name_free(&api_info->param.reg.comp_name);
+               osaf_extended_name_free(&api_info->param.reg.proxy_comp_name);
+               break;
+
+       case AVSV_AMF_COMP_UNREG:
+               osaf_extended_name_free(&api_info->param.unreg.comp_name);
+               osaf_extended_name_free(&api_info->param.unreg.proxy_comp_name);
+               break;
+
+       case AVSV_AMF_PM_START:
+               osaf_extended_name_free(&api_info->param.pm_start.comp_name);
+               break;
+
+       case AVSV_AMF_PM_STOP:
+               osaf_extended_name_free(&api_info->param.pm_stop.comp_name);
+               break;
+
+       case AVSV_AMF_HC_START:
+               osaf_extended_name_free(&api_info->param.hc_start.comp_name);
+               
osaf_extended_name_free(&api_info->param.hc_start.proxy_comp_name);
+               break;
+
+       case AVSV_AMF_HC_STOP:
+               osaf_extended_name_free(&api_info->param.hc_stop.comp_name);
+               
osaf_extended_name_free(&api_info->param.hc_stop.proxy_comp_name);
+               break;
+
+       case AVSV_AMF_HC_CONFIRM:
+               osaf_extended_name_free(&api_info->param.hc_confirm.comp_name);
+               
osaf_extended_name_free(&api_info->param.hc_confirm.proxy_comp_name);
+               break;
+
+       case AVSV_AMF_CSI_QUIESCING_COMPLETE:
+               osaf_extended_name_free(&api_info->param.csiq_compl.comp_name);
+               break;
+
+       case AVSV_AMF_HA_STATE_GET:
+               osaf_extended_name_free(&api_info->param.ha_get.comp_name);
+               osaf_extended_name_free(&api_info->param.ha_get.csi_name);
+               break;
+               
+       case AVSV_AMF_PG_START:
+               osaf_extended_name_free(&api_info->param.pg_start.csi_name);
+               break;
+
+       case AVSV_AMF_PG_STOP:
+               osaf_extended_name_free(&api_info->param.pg_stop.csi_name);
+               break;
+
+       case AVSV_AMF_ERR_REP:
+               osaf_extended_name_free(&api_info->param.err_rep.err_comp);
+               break;
+
+       case AVSV_AMF_ERR_CLEAR:
+               osaf_extended_name_free(&api_info->param.err_clear.comp_name);
+               break;
+
+       case AVSV_AMF_RESP:
+               osaf_extended_name_free(&api_info->param.resp.comp_name);
+               break;
+
+       default:
+               break;
+       }
+}
+
+/****************************************************************************
+  Name          : avsv_amf_api_copy
+
+  Description   : This routine copies api information.
+
+  Arguments     : api_info - ptr to the api info
+
+  Return Values : None.
+
+  Notes         : None.
+******************************************************************************/
+uint32_t avsv_amf_api_copy(AVSV_AMF_API_INFO *d_api_info, AVSV_AMF_API_INFO 
*s_api_info)
+{
+       uint32_t rc = NCSCC_RC_SUCCESS;
+
+       if (!d_api_info || !s_api_info)
+               return NCSCC_RC_FAILURE;
+
+       switch (s_api_info->type) {
+       case AVSV_AMF_FINALIZE:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.finalize.comp_name),
+                       &s_api_info->param.finalize.comp_name);
+               break;
+
+       case AVSV_AMF_COMP_REG:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.reg.comp_name),
+                       &d_api_info->param.reg.comp_name);
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.reg.proxy_comp_name),
+                       &d_api_info->param.reg.proxy_comp_name);
+               break;
+
+       case AVSV_AMF_COMP_UNREG:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.unreg.comp_name),
+                       &d_api_info->param.unreg.comp_name);
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.unreg.proxy_comp_name),
+                       &d_api_info->param.unreg.proxy_comp_name);
+               break;
+
+       case AVSV_AMF_PM_START:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.pm_start.comp_name),
+                       &d_api_info->param.pm_start.comp_name);
+               break;
+
+       case AVSV_AMF_PM_STOP:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.pm_stop.comp_name),
+                       &d_api_info->param.pm_stop.comp_name);
+               break;
+
+       case AVSV_AMF_HC_START:
+
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.hc_start.comp_name),
+                       &d_api_info->param.ha_get.comp_name);
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.hc_start.proxy_comp_name),
+                       &d_api_info->param.hc_start.proxy_comp_name);
+               break;
+
+       case AVSV_AMF_HC_STOP:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.hc_stop.comp_name),
+                       &d_api_info->param.hc_stop.comp_name);
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.hc_stop.proxy_comp_name),
+                       &d_api_info->param.hc_stop.proxy_comp_name);
+               break;
+
+       case AVSV_AMF_HC_CONFIRM:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.hc_confirm.comp_name),
+                       &d_api_info->param.hc_confirm.comp_name);
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.hc_confirm.proxy_comp_name),
+                       &d_api_info->param.hc_confirm.proxy_comp_name);
+               break;
+
+       case AVSV_AMF_CSI_QUIESCING_COMPLETE:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.csiq_compl.comp_name),
+                       &d_api_info->param.csiq_compl.comp_name);
+               break;
+
+       case AVSV_AMF_HA_STATE_GET:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.ha_get.comp_name),
+                       &d_api_info->param.ha_get.comp_name);
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.ha_get.csi_name),
+                       &d_api_info->param.ha_get.csi_name);
+               break;
+
+       case AVSV_AMF_PG_START:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.pg_start.csi_name),
+                       &d_api_info->param.pg_start.csi_name);
+               break;
+
+       case AVSV_AMF_PG_STOP:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.pg_stop.csi_name),
+                       &d_api_info->param.pg_stop.csi_name);
+               break;
+
+       case AVSV_AMF_ERR_REP:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.err_rep.err_comp),
+                       &d_api_info->param.err_rep.err_comp);
+               break;
+
+       case AVSV_AMF_ERR_CLEAR:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.err_clear.comp_name),
+                       &d_api_info->param.err_clear.comp_name);
+               break;
+
+       case AVSV_AMF_RESP:
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.resp.comp_name),
+                       &d_api_info->param.resp.comp_name);
+               break;
+
+       default:
+               break;
+       }
+
+       return rc;
+}
+
+/****************************************************************************
   Name          : avsv_amf_csi_attr_list_copy
  
   Description   : This routine copies the csi attribute list.
@@ -462,7 +776,7 @@ uint32_t avsv_amf_csi_attr_convert(AVSV_
 
        for (cnt = 0; cnt < avsv_attrs->number; cnt++) {
                /* alloc memory for attr name & value */
-               amf_attrs->attr[cnt].attrName = 
malloc(avsv_attrs->list[cnt].name.length + 1);
+               amf_attrs->attr[cnt].attrName = 
malloc(osaf_extended_name_length(&avsv_attrs->list[cnt].name) + 1);
                if (!amf_attrs->attr[cnt].attrName) {
                        free(amf_attrs->attr[cnt].attrName);
                        goto done;
@@ -476,11 +790,11 @@ uint32_t avsv_amf_csi_attr_convert(AVSV_
                }
 
                /* copy the attr name & value */
-               memcpy(amf_attrs->attr[cnt].attrName, 
avsv_attrs->list[cnt].name.value,
-                      avsv_attrs->list[cnt].name.length);
+               memcpy(amf_attrs->attr[cnt].attrName, 
osaf_extended_name_borrow(&avsv_attrs->list[cnt].name),
+                      osaf_extended_name_length(&avsv_attrs->list[cnt].name));
                memcpy(amf_attrs->attr[cnt].attrValue, 
avsv_attrs->list[cnt].string_ptr,
                        strlen(avsv_attrs->list[cnt].string_ptr));
-               *(amf_attrs->attr[cnt].attrName + 
avsv_attrs->list[cnt].name.length) = '\0';
+               *(amf_attrs->attr[cnt].attrName + 
osaf_extended_name_length(&avsv_attrs->list[cnt].name)) = '\0';
                *(amf_attrs->attr[cnt].attrValue + 
strlen(avsv_attrs->list[cnt].string_ptr)) = '\0';
 
                /* increment the attr name-val pair cnt that is copied */
diff --git a/osaf/libs/common/amf/util.c b/osaf/libs/common/amf/util.c
--- a/osaf/libs/common/amf/util.c
+++ b/osaf/libs/common/amf/util.c
@@ -32,149 +32,14 @@
 */
 
 #include "amf.h"
+#include "osaf_extended_name.h"
 
-/*****************************************************************************
- * Function: avsv_cpy_SU_DN_from_DN
- *
- * Purpose:  This function copies the SU DN from the given DN and places
- *           it in the provided buffer.
- *
- * Input: d_su_dn - Pointer to the SaNameT where the SU DN should be copied.
- *        s_dn_name - Pointer to the SaNameT that contains the SU DN.
- *
- * Returns: NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
- *
- * NOTES: none.
- *
- * 
- **************************************************************************/
+int avsv_cmp_horder_sanamet(const SaNameT* sanamet1, const SaNameT *sanamet2)
+{
+       size_t len1 = osaf_extended_name_length(sanamet1);
+       size_t len2 = osaf_extended_name_length(sanamet2);
 
-uint32_t avsv_cpy_SU_DN_from_DN(SaNameT *d_su_dn, SaNameT *s_dn_name)
-{
-       char *tmp = NULL;
-
-       memset(d_su_dn, 0, sizeof(SaNameT));
-
-       /* SU DN name is  SU name + NODE name */
-
-       /* First get the SU name */
-       tmp = strstr((char*)s_dn_name->value, "safSu");
-
-       /* It might be external SU. */
-       if (NULL == tmp)
-               tmp = strstr((char*)s_dn_name->value, "safEsu");
-
-       if (!tmp)
-               return NCSCC_RC_FAILURE;
-
-       if (strlen(tmp) < SA_MAX_NAME_LENGTH) {
-               strcpy((char*)d_su_dn->value, tmp);
-
-               /* Fill the length and return the pointer */
-               d_su_dn->length = strlen((char*)d_su_dn->value);
-       } else
-               return NCSCC_RC_FAILURE;
-
-       return NCSCC_RC_SUCCESS;
-}
-
-/*****************************************************************************
- * Function: avsv_cpy_node_DN_from_DN
- *
- * Purpose:  This function copies the node DN from the given DN and places
- *           it in the provided buffer.
- *
- * Input: d_node_dn - Pointer to the SaNameT where the node DN should be 
copied.
- *        s_dn_name - Pointer to the SaNameT that contains the node DN.
- *
- * Returns: NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
- *
- * NOTES: none.
- *
- * 
- **************************************************************************/
-
-uint32_t avsv_cpy_node_DN_from_DN(SaNameT *d_node_dn, SaNameT *s_dn_name)
-{
-       char *tmp = NULL;
-
-       memset(d_node_dn, 0, sizeof(SaNameT));
-
-       /* get the node name */
-       tmp = strstr((char*)s_dn_name->value, "safNode");
-
-       if (!tmp)
-               return NCSCC_RC_FAILURE;
-
-       if (strlen(tmp) < SA_MAX_NAME_LENGTH) {
-               strcpy((char*)d_node_dn->value, tmp);
-
-               /* Fill the length and return the pointer */
-               d_node_dn->length = strlen((char*)d_node_dn->value);
-       } else
-               return NCSCC_RC_FAILURE;
-
-       return NCSCC_RC_SUCCESS;
-}
-
-/*****************************************************************************
- * Function: avsv_is_external_DN
- *
- * Purpose:  This function verifies if the DN has externalsuname token in it.
- *           If yes it returns true. This routine will be used for identifying
- *           the external SUs and components.
- *
- * Input: dn_name - Pointer to the SaNameT that contains the DN.
- *
- * Returns: false/TRUE
- *
- * NOTES: none.
- *
- * 
- **************************************************************************/
-
-bool avsv_is_external_DN(SaNameT *dn_name)
-{
-       return false;
-}
-
-/*****************************************************************************
- * Function: avsv_cpy_SI_DN_from_DN
- *
- * Purpose:  This function copies the SI DN from the given DN and places
- *           it in the provided buffer.
- *
- * Input: d_si_dn - Pointer to the SaNameT where the SI DN should be copied.
- *        s_dn_name - Pointer to the SaNameT that contains the SI DN.
- *
- * Returns: NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
- *
- * NOTES: none.
- *
- * 
- **************************************************************************/
-
-uint32_t avsv_cpy_SI_DN_from_DN(SaNameT *d_si_dn, SaNameT *s_dn_name)
-{
-       char *tmp = NULL;
-
-       memset(d_si_dn, 0, sizeof(SaNameT));
-
-       /* get the si name */
-       tmp = strstr((char*)s_dn_name->value, "safSi");
-
-       if (!tmp)
-               return NCSCC_RC_FAILURE;
-
-       if (strlen(tmp) < SA_MAX_NAME_LENGTH) {
-               strcpy((char*)d_si_dn->value, tmp);
-
-               /* Fill the length and return the pointer */
-               d_si_dn->length = strlen((char*)d_si_dn->value);
-       } else
-               return NCSCC_RC_FAILURE;
-
-       return NCSCC_RC_SUCCESS;
+       return (len1 > len2 ? 1 : len1 < len2 ? -1 : 
memcmp(osaf_extended_name_borrow(sanamet1), 
osaf_extended_name_borrow(sanamet2), len1));
 }
 
 /****************************************************************************
@@ -250,7 +115,7 @@ uint32_t avsv_dblist_saname_cmp(uint8_t 
        name1_net = *((SaNameT *)key1);
        name2_net = *((SaNameT *)key2);
 
-       i = m_CMP_HORDER_SANAMET(name1_net, name2_net);
+       i = avsv_cmp_horder_sanamet(&name1_net, &name2_net);
 
        return ((i == 0) ? 0 : ((i > 0) ? 1 : 2));
 }
@@ -298,9 +163,9 @@ bool avsv_sa_name_is_null(SaNameT *name)
 {
        SaNameT null_name;
 
-       memset(&null_name, 0, sizeof(SaNameT));
+       osaf_extended_name_clear(&null_name);
 
-       if (!m_CMP_HORDER_SANAMET(*name, null_name))
+       if (!avsv_cmp_horder_sanamet(name, &null_name))
                return true;
        else
                return false;
@@ -316,44 +181,58 @@ bool avsv_sa_name_is_null(SaNameT *name)
 void avsv_create_association_class_dn(const SaNameT *child_dn, const SaNameT 
*parent_dn,
        const char *rdn_tag, SaNameT *dn)
 {
-       char *p = (char*) dn->value;
+       size_t parent_dn_len = 0;
+       size_t child_dn_len = 0;
+       size_t rdn_tag_len = 0;
+       SaConstStringT child_dn_ptr = 0;
+       SaConstStringT parent_dn_ptr = 0;
+       int num_of_commas_in_child_dn = 0;
+       
+       if (child_dn) {
+               child_dn_len = osaf_extended_name_length(child_dn);
+               child_dn_ptr = osaf_extended_name_borrow(child_dn);
+
+               const char* p_tmp = child_dn_ptr;
+               while(*p_tmp) {
+                       if(*p_tmp++ == ',') num_of_commas_in_child_dn++;
+               }
+
+       }
+       if (parent_dn) {
+               parent_dn_len = osaf_extended_name_length(parent_dn);
+               parent_dn_ptr = osaf_extended_name_borrow(parent_dn);
+       }
+
+       if (rdn_tag) {
+               rdn_tag_len = strlen(rdn_tag);
+       }
+
+       // The + 3 is for,  1. rdn_tag equal char 2. child parent separation 
comma char and 3. terminating null char
+       size_t buf_len = child_dn_len + parent_dn_len + rdn_tag_len + 
num_of_commas_in_child_dn + 3;
+       char *buf = (char*) calloc(1, buf_len);
+       char *p = buf;
        int i;
 
-       memset(dn, 0, sizeof(SaNameT));
-
-       p += sprintf((char*)dn->value, "%s=", rdn_tag);
+       if (rdn_tag) {
+               p += snprintf(buf, buf_len, "%s=", rdn_tag);
+       }
 
        /* copy child DN and escape commas */
-       for (i = 0; i < child_dn->length; i++) {
-               if (child_dn->value[i] == ',')
+       for (i = 0; i < child_dn_len; i++) {
+               if (child_dn_ptr[i] == ',')
                        *p++ = 0x5c; /* backslash */
 
-               *p++ = child_dn->value[i];
+               *p++ = child_dn_ptr[i];
        }
 
        if (parent_dn != NULL) {
                *p++ = ',';
-               strcpy(p, (char*)parent_dn->value);
+               strcpy(p, parent_dn_ptr);
        }
 
-       dn->length = strlen((char*)dn->value);
-}
-
-/**
- * Initialize a DN by searching for needle in haystack
- * @param haystack
- * @param dn
- * @param needle
- */
-void avsv_sanamet_init(const SaNameT *haystack, SaNameT *dn, const char 
*needle)
-{
-       char *p;
-
-       memset(dn, 0, sizeof(SaNameT));
-       p = strstr((char*)haystack->value, needle);
-       osafassert(p);
-       dn->length = strlen(p);
-       memcpy(dn->value, p, dn->length);
+       if (dn) {
+               osaf_extended_name_steal(buf, dn);
+       }
 }
 
 /**
@@ -416,3 +295,30 @@ AVSV_COMP_TYPE_VAL avsv_amfcompcategory_
        return avsv_comp_type;
 }
 
+/****************************************************************************
+  Name          : avsv_dblist_sastring_cmp
+ 
+  Description   : This routine compares the SaStringT keys. It is used by DLL 
+                  library.
+ 
+  Arguments     : key1 - ptr to the 1st key
+                  key2 - ptr to the 2nd key
+ 
+  Return Values : 0, if keys are equal
+                  1, if key1 is greater than key2
+                  2, if key1 is lesser than key2
+ 
+  Notes         : None.
+******************************************************************************/
+uint32_t avsv_dblist_sastring_cmp(uint8_t *key1, uint8_t *key2)
+{
+       int i = 0;
+       SaStringT str1, str2;
+
+       str1 = (SaStringT)key1;
+       str2 = (SaStringT)key2;
+
+       i = strcmp(str1, str2);
+
+       return ((i ==0) ? 0: ((i>0) ? 1 : 2));
+}

------------------------------------------------------------------------------
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to