Add support for container/contained amf common.
---
 src/amf/common/amf_amfparam.h | 22 ++++++++++++++++++++++
 src/amf/common/amf_d2nmsg.h   | 11 +++++++++++
 src/amf/common/amf_defs.h     |  2 ++
 src/amf/common/amf_util.h     |  3 ++-
 src/amf/common/d2nedu.c       | 22 +++++++++++++++++++++-
 src/amf/common/n2avaedu.c     |  6 +++++-
 src/amf/common/n2avamsg.c     | 13 +++++++++++++
 src/amf/common/util.c         | 32 +++++++++++++++++++++++++++++---
 8 files changed, 105 insertions(+), 6 deletions(-)

diff --git a/src/amf/common/amf_amfparam.h b/src/amf/common/amf_amfparam.h
index ca3d7c869..2baa35fa8 100644
--- a/src/amf/common/amf_amfparam.h
+++ b/src/amf/common/amf_amfparam.h
@@ -67,6 +67,8 @@ typedef enum avsv_amf_cbk_type {
   AVSV_AMF_PXIED_COMP_CLEAN,
   AVSV_AMF_CSI_ATTR_CHANGE,
   AVSV_AMF_SC_STATUS_CHANGE,
+  AVSV_AMF_CONTAINED_COMP_INST,
+  AVSV_AMF_CONTAINED_COMP_CLEAN,
   AVSV_AMF_CBK_MAX
 } AVSV_AMF_CBK_TYPE;
 
@@ -105,6 +107,14 @@ typedef struct avsv_amf_comp_reg_param_tag {
   SaNameT comp_name;       /* comp name */
   SaNameT proxy_comp_name; /* proxy comp name */
   SaVersionT version;      // SAF VERSION of component.
+#define AVSV_AMF_CALLBACK_TERMINATE       0x01
+#define AVSV_AMF_CALLBACK_CSI_SET         0x02
+#define AVSV_AMF_CALLBACK_CSI_REMOVE      0x04
+#define AVSV_AMF_CALLBACK_CONTAINED_INST  0x08
+#define AVSV_AMF_CALLBACK_CONTAINED_CLEAN 0x10
+#define AVSV_AMF_CALLBACK_PROXIED_INST    0x20
+#define AVSV_AMF_CALLBACK_PROXIED_CLEAN   0x40
+  SaUint64T callbacks;
 } AVSV_AMF_COMP_REG_PARAM;
 
 /* component unregister */
@@ -284,6 +294,16 @@ typedef struct avsv_amf_pxied_comp_clean_param_tag {
   SaNameT comp_name; /* comp name */
 } AVSV_AMF_PXIED_COMP_CLEAN_PARAM;
 
+/* contained component instantiate */
+typedef struct avsv_amf_contained_comp_inst_param_tag {
+  SaNameT comp_name; /* comp name */
+} AVSV_AMF_CONTAINED_COMP_INST_PARAM;
+
+/* contained component cleanup */
+typedef struct avsv_amf_contained_comp_clean_param_tag {
+  SaNameT comp_name; /* comp name */
+} AVSV_AMF_CONTAINED_COMP_CLEAN_PARAM;
+
 /* wrapper structure for all the callbacks */
 typedef struct avsv_amf_cbk_info_tag {
   SaAmfHandleT hdl;       /* AMF handle */
@@ -299,6 +319,8 @@ typedef struct avsv_amf_cbk_info_tag {
     AVSV_AMF_PXIED_COMP_CLEAN_PARAM pxied_comp_clean;
     AVSV_AMF_CSI_ATTR_CHANGE_PARAM csi_attr_change;
     AVSV_AMF_SC_STATUS_CHANGE_PARAM sc_status_change;
+    AVSV_AMF_CONTAINED_COMP_INST_PARAM contained_inst;
+    AVSV_AMF_CONTAINED_COMP_CLEAN_PARAM contained_clean;
   } param;
 } AVSV_AMF_CBK_INFO;
 
diff --git a/src/amf/common/amf_d2nmsg.h b/src/amf/common/amf_d2nmsg.h
index e99c0399c..187279d2a 100644
--- a/src/amf/common/amf_d2nmsg.h
+++ b/src/amf/common/amf_d2nmsg.h
@@ -52,6 +52,7 @@ extern "C" {
 #define AVSV_AVD_AVND_MSG_FMT_VER_5 5
 #define AVSV_AVD_AVND_MSG_FMT_VER_6 6
 #define AVSV_AVD_AVND_MSG_FMT_VER_7 7
+#define AVSV_AVD_AVND_MSG_FMT_VER_8 8
 
 /* Internode/External Components Validation result */
 typedef enum {
@@ -110,6 +111,7 @@ typedef enum {
   AVSV_N2D_ND_SISU_STATE_INFO_MSG,
   AVSV_N2D_ND_CSICOMP_STATE_INFO_MSG,
   AVSV_D2N_COMPCSI_ASSIGN_MSG,
+  AVSV_D2N_CONTAINED_SU_MSG,
   AVSV_DND_MSG_MAX
 } AVSV_DND_MSG_TYPE;
 
@@ -603,6 +605,14 @@ typedef struct avsv_d2n_presence_su_msg_info_tag {
   bool term_state;
 } AVSV_D2N_PRESENCE_SU_MSG_INFO;
 
+typedef struct avsv_d2n_contained_su_msg_info_tag {
+  uint32_t msg_id;
+  SaClmNodeIdT node_id;
+  SaNameT container_su_name;
+  SaNameT contained_su_name;
+  bool term_state;
+} AVSV_D2N_CONTAINED_SU_MSG_INFO;
+
 typedef struct avsv_d2n_data_verify_msg_info {
   uint32_t snd_id_cnt;
   uint32_t rcv_id_cnt;
@@ -701,6 +711,7 @@ typedef struct avsv_dnd_msg {
     AVSV_D2N_HB_MSG_INFO d2n_hb_info;
     AVSV_D2N_REBOOT_MSG_INFO d2n_reboot_info;
     AVSV_D2N_COMPCSI_ASSIGN_MSG_INFO d2n_compcsi_assign_msg_info;
+    AVSV_D2N_CONTAINED_SU_MSG_INFO d2n_contained_su_msg_info;
   } msg_info;
 } AVSV_DND_MSG;
 
diff --git a/src/amf/common/amf_defs.h b/src/amf/common/amf_defs.h
index 24549b3af..3ee5a5aca 100644
--- a/src/amf/common/amf_defs.h
+++ b/src/amf/common/amf_defs.h
@@ -72,6 +72,8 @@ typedef enum {
   AVSV_COMP_TYPE_EXTERNAL_PRE_INSTANTIABLE,
   AVSV_COMP_TYPE_EXTERNAL_NON_PRE_INSTANTIABLE,
   AVSV_COMP_TYPE_NON_SAF,
+  AVSV_COMP_TYPE_CONTAINER,
+  AVSV_COMP_TYPE_CONTAINED
 } AVSV_COMP_TYPE_VAL;
 
 /*
diff --git a/src/amf/common/amf_util.h b/src/amf/common/amf_util.h
index ffb8b21c6..15ecbcaad 100644
--- a/src/amf/common/amf_util.h
+++ b/src/amf/common/amf_util.h
@@ -50,7 +50,8 @@ extern "C" {
 #define IS_COMP_PROXIED_NPI(category) (((category)&SA_AMF_COMP_PROXIED_NPI))
 
 #define IS_COMP_LOCAL(category) \
-  (((category)&SA_AMF_COMP_SA_AWARE) || ((category)&SA_AMF_COMP_LOCAL))
+  (((category)&SA_AMF_COMP_SA_AWARE) || ((category)&SA_AMF_COMP_LOCAL) || \
+   ((category)&SA_AMF_COMP_CONTAINER) || ((category)&SA_AMF_COMP_CONTAINED))
 
 #define IS_COMP_CONTAINER(category) (((category)&SA_AMF_COMP_CONTAINER))
 
diff --git a/src/amf/common/d2nedu.c b/src/amf/common/d2nedu.c
index c3e2485b0..e7c1006cf 100644
--- a/src/amf/common/d2nedu.c
+++ b/src/amf/common/d2nedu.c
@@ -558,6 +558,23 @@ uint32_t avsv_edp_dnd_msg(EDU_HDL *hdl, EDU_TKN *edu_tkn, 
NCSCONTEXT ptr,
                 ->msg_info.d2n_compcsi_assign_msg_info.info.attrs,
             0, NULL},
 
+           /* AVSV_D2N_CONTAINED_SU_MSG_INFO*/
+            {EDU_EXEC, ncs_edp_uns32, 0, 0, 0,
+             (long)&((AVSV_DND_MSG *)0)->
+                msg_info.d2n_contained_su_msg_info.msg_id, 0, NULL},
+            {EDU_EXEC, m_NCS_EDP_SACLMNODEIDT, 0, 0, 0,
+             (long)&((AVSV_DND_MSG *)0)->
+                msg_info.d2n_contained_su_msg_info.node_id, 0, NULL},
+            {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0,
+             (long)&((AVSV_DND_MSG *)0)->
+                msg_info.d2n_contained_su_msg_info.container_su_name, 0, NULL},
+            {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0,
+             (long)&((AVSV_DND_MSG *)0)->
+                msg_info.d2n_contained_su_msg_info.contained_su_name, 0, NULL},
+            {EDU_EXEC, ncs_edp_ncs_bool, 0, 0, EDU_EXIT,
+             (long)&((AVSV_DND_MSG *)0)->
+                msg_info.d2n_contained_su_msg_info.term_state, 0, NULL},
+
            {EDU_END, 0, 0, 0, 0, 0, 0, NULL},
        };
 
@@ -626,7 +643,8 @@ int avsv_dnd_msg_test_type_fnc(NCSCONTEXT arg)
               LCL_JMP_OFFSET_AVSV_D2N_REBOOT_MSG = 123,
               LCL_JMP_OFFSET_AVSV_N2D_ND_SISU_STATE_INFO_MSG = 125,
               LCL_JMP_OFFSET_AVSV_N2D_ND_CSICOMP_STATE_INFO_MSG = 131,
-              LCL_JMP_OFFSET_AVSV_D2N_COMPCSI_ASSIGN_MSG = 137 };
+              LCL_JMP_OFFSET_AVSV_D2N_COMPCSI_ASSIGN_MSG = 137,
+              LCL_JMP_OFFSET_AVSV_D2N_CONTAINED_SU_MSG = 143 };
        AVSV_DND_MSG_TYPE type;
 
        if (arg == NULL)
@@ -697,6 +715,8 @@ int avsv_dnd_msg_test_type_fnc(NCSCONTEXT arg)
                return LCL_JMP_OFFSET_AVSV_N2D_ND_CSICOMP_STATE_INFO_MSG;
        case AVSV_D2N_COMPCSI_ASSIGN_MSG:
                return LCL_JMP_OFFSET_AVSV_D2N_COMPCSI_ASSIGN_MSG;
+       case AVSV_D2N_CONTAINED_SU_MSG:
+               return LCL_JMP_OFFSET_AVSV_D2N_CONTAINED_SU_MSG;
 
        default:
                break;
diff --git a/src/amf/common/n2avaedu.c b/src/amf/common/n2avaedu.c
index 98be90d8c..5171d5fe1 100644
--- a/src/amf/common/n2avaedu.c
+++ b/src/amf/common/n2avaedu.c
@@ -299,9 +299,13 @@ uint32_t avsv_edp_api_info(EDU_HDL *hdl, EDU_TKN *edu_tkn, 
NCSCONTEXT ptr,
             (long)&((AVSV_AMF_API_INFO *)0)->param.reg.hdl, 0, NULL},
            {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0,
             (long)&((AVSV_AMF_API_INFO *)0)->param.reg.comp_name, 0, NULL},
-           {EDU_EXEC, ncs_edp_sanamet, 0, 0, EDU_EXIT,
+           {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0,
             (long)&((AVSV_AMF_API_INFO *)0)->param.reg.proxy_comp_name, 0,
             NULL},
+           /* XXX really need to use version here */
+           {EDU_EXEC, m_NCS_EDP_SAUINT64T, 0, 0, EDU_EXIT,
+            (long)&((AVSV_AMF_API_INFO *)0)->param.reg.callbacks, 0,
+            NULL},
 
            {EDU_EXEC, m_NCS_EDP_SAAMFHANDLET, 0, 0, 0,
             (long)&((AVSV_AMF_API_INFO *)0)->param.unreg.hdl, 0, NULL},
diff --git a/src/amf/common/n2avamsg.c b/src/amf/common/n2avamsg.c
index e4f659e0b..6415139b7 100644
--- a/src/amf/common/n2avamsg.c
+++ b/src/amf/common/n2avamsg.c
@@ -484,6 +484,19 @@ uint32_t avsv_amf_cbk_copy(AVSV_AMF_CBK_INFO **o_dcbk, 
AVSV_AMF_CBK_INFO *scbk)
                            &scbk->param.csi_attr_change.csiAttr);
                }
                break;
+
+       case AVSV_AMF_CONTAINED_COMP_INST:
+               osaf_extended_name_alloc(osaf_extended_name_borrow(
+                                       &scbk->param.contained_inst.comp_name),
+                               &(*o_dcbk)->param.contained_inst.comp_name);
+                break;
+
+        case AVSV_AMF_CONTAINED_COMP_CLEAN:
+                osaf_extended_name_alloc(osaf_extended_name_borrow(
+                                       &scbk->param.contained_clean.comp_name),
+                               &(*o_dcbk)->param.contained_clean.comp_name);
+                break;
+
        default:
                osafassert(0);
        }
diff --git a/src/amf/common/util.c b/src/amf/common/util.c
index fc2c0f4af..ec76c3245 100644
--- a/src/amf/common/util.c
+++ b/src/amf/common/util.c
@@ -194,6 +194,7 @@ void avsv_create_association_class_dn(const SaNameT 
*child_dn,
        SaConstStringT parent_dn_ptr = 0;
        int num_of_commas_in_child_dn = 0;
 
+       TRACE_ENTER();
        if (child_dn) {
                child_dn_len = osaf_extended_name_length(child_dn);
                child_dn_ptr = osaf_extended_name_borrow(child_dn);
@@ -241,6 +242,10 @@ void avsv_create_association_class_dn(const SaNameT 
*child_dn,
        if (dn) {
                osaf_extended_name_steal(buf, dn);
        }
+       TRACE_LEAVE2("child_dn: %s parent_dn: %s dn: %s",
+                       child_dn_ptr ? child_dn_ptr : "no child dn",
+                       parent_dn_ptr ? parent_dn_ptr : "no parent dn",
+                       buf);
 }
 
 void avsv_sanamet_init_from_association_dn(const SaNameT *haystack, SaNameT 
*dn,
@@ -295,6 +300,30 @@ avsv_amfcompcategory_to_avsvcomptype(SaAmfCompCategoryT 
saf_comp_category)
 {
        AVSV_COMP_TYPE_VAL avsv_comp_type = AVSV_COMP_TYPE_INVALID;
 
+       /* proxy is currently not supported */
+
+       if (saf_comp_category & SA_AMF_COMP_CONTAINER) {
+               /* proxy and container not currently supported */
+               if (saf_comp_category & SA_AMF_COMP_PROXY ||
+                       saf_comp_category & SA_AMF_COMP_PROXIED ||
+                       saf_comp_category & SA_AMF_COMP_CONTAINED ||
+                       saf_comp_category & SA_AMF_COMP_PROXIED_NPI) {
+                       return AVSV_COMP_TYPE_INVALID;
+               } else
+                       return AVSV_COMP_TYPE_CONTAINER;
+       }
+
+       if (saf_comp_category & SA_AMF_COMP_CONTAINED) {
+               /* proxy and container not currently supported */
+               if (saf_comp_category & SA_AMF_COMP_PROXY ||
+                       saf_comp_category & SA_AMF_COMP_PROXIED ||
+                       saf_comp_category & SA_AMF_COMP_CONTAINER ||
+                       saf_comp_category & SA_AMF_COMP_PROXIED_NPI) {
+                       return AVSV_COMP_TYPE_INVALID;
+               } else
+                       return AVSV_COMP_TYPE_CONTAINED;
+       }
+
        if (saf_comp_category & SA_AMF_COMP_SA_AWARE) {
                if ((saf_comp_category &
                     ~(SA_AMF_COMP_SA_AWARE | SA_AMF_COMP_LOCAL)) == 0)
@@ -348,9 +377,6 @@ avsv_amfcompcategory_to_avsvcomptype(SaAmfCompCategoryT 
saf_comp_category)
                        return AVSV_COMP_TYPE_EXTERNAL_NON_PRE_INSTANTIABLE;
        }
 
-       /* Container type not yet supported, will return AVSV_COMP_TYPE_INVALID
-        */
-
        return avsv_comp_type;
 }
 
-- 
2.14.4


------------------------------------------------------------------------------
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
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to