src/amf/amfd/mds.cc         |  2 +-
 src/amf/amfd/mds.h          |  4 ++--
 src/amf/amfd/util.cc        |  5 +++++
 src/amf/amfnd/avnd_mds.h    |  4 ++--
 src/amf/amfnd/comp.cc       |  2 +-
 src/amf/amfnd/mds.cc        |  4 ++--
 src/amf/amfnd/sudb.cc       |  2 ++
 src/amf/common/amf_d2nmsg.h |  2 ++
 src/amf/common/d2nedu.c     |  6 ++++++
 src/amf/common/d2nmsg.c     |  2 ++
 10 files changed, 25 insertions(+), 8 deletions(-)


This patch adds support for Section 3.11.1.4.2 of AMF B.04.01 spec: Restrictions
to Auto-Repair.

diff --git a/src/amf/amfd/mds.cc b/src/amf/amfd/mds.cc
--- a/src/amf/amfd/mds.cc
+++ b/src/amf/amfd/mds.cc
@@ -47,7 +47,7 @@ const MDS_CLIENT_MSG_FORMAT_VER avd_avnd
        AVSV_AVD_AVND_MSG_FMT_VER_1, AVSV_AVD_AVND_MSG_FMT_VER_2,
        AVSV_AVD_AVND_MSG_FMT_VER_3, AVSV_AVD_AVND_MSG_FMT_VER_4,
        AVSV_AVD_AVND_MSG_FMT_VER_5, AVSV_AVD_AVND_MSG_FMT_VER_6,
-       AVSV_AVD_AVND_MSG_FMT_VER_7
+       AVSV_AVD_AVND_MSG_FMT_VER_7, AVSV_AVD_AVND_MSG_FMT_VER_8
 };
 
 const MDS_CLIENT_MSG_FORMAT_VER avd_avd_msg_fmt_map_table[] = {
diff --git a/src/amf/amfd/mds.h b/src/amf/amfd/mds.h
--- a/src/amf/amfd/mds.h
+++ b/src/amf/amfd/mds.h
@@ -33,10 +33,10 @@
 
 /* In Service upgrade support */
 #define AVD_MDS_SUB_PART_VERSION_4 4
-#define AVD_MDS_SUB_PART_VERSION   7
+#define AVD_MDS_SUB_PART_VERSION   8
 
 #define AVD_AVND_SUBPART_VER_MIN   1
-#define AVD_AVND_SUBPART_VER_MAX   7
+#define AVD_AVND_SUBPART_VER_MAX   8
 
 #define AVD_AVD_SUBPART_VER_MIN    1
 #define AVD_AVD_SUBPART_VER_MAX    6
diff --git a/src/amf/amfd/util.cc b/src/amf/amfd/util.cc
--- a/src/amf/amfd/util.cc
+++ b/src/amf/amfd/util.cc
@@ -483,6 +483,10 @@ static void reg_su_msg_init_su_info(AVD_
        su_info->su_is_external = su->su_is_external;
        su_info->su_failover = su->saAmfSUFailover;
 
+       SaNameT suCampaign;
+       osaf_extended_name_alloc(su->saAmfSUMaintenanceCampaign.c_str(), 
&suCampaign);
+       su_info->suMaintenanceCampaign = suCampaign;
+
        su_info->next = su_msg->msg_info.d2n_reg_su.su_list;
        su_msg->msg_info.d2n_reg_su.su_list = su_info;
        su_msg->msg_info.d2n_reg_su.num_su++;
@@ -1671,6 +1675,7 @@ static void free_d2n_su_msg_info(AVSV_DN
                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);
+               osaf_extended_name_free(&su_info->suMaintenanceCampaign);
                delete su_info;
        }
 }
diff --git a/src/amf/amfnd/avnd_mds.h b/src/amf/amfnd/avnd_mds.h
--- a/src/amf/amfnd/avnd_mds.h
+++ b/src/amf/amfnd/avnd_mds.h
@@ -31,10 +31,10 @@
 #define AMF_AMFND_AVND_MDS_H_
 
 /* In Service upgrade support */
-#define AVND_MDS_SUB_PART_VERSION   7 
+#define AVND_MDS_SUB_PART_VERSION   8
 
 #define AVND_AVD_SUBPART_VER_MIN   1
-#define AVND_AVD_SUBPART_VER_MAX   7 
+#define AVND_AVD_SUBPART_VER_MAX   8
 
 #define AVND_AVND_SUBPART_VER_MIN   1
 #define AVND_AVND_SUBPART_VER_MAX   1
diff --git a/src/amf/amfnd/comp.cc b/src/amf/amfnd/comp.cc
--- a/src/amf/amfnd/comp.cc
+++ b/src/amf/amfnd/comp.cc
@@ -2675,7 +2675,7 @@ uint32_t comp_restart_initiate(AVND_COMP
        if (NCSCC_RC_SUCCESS != rc)
                goto done;
 
-  if (!comp->su->suMaintenanceCampaign.empty()) {
+  if (!comp->su->suMaintenanceCampaign.empty() && !comp->admin_oper) {
     LOG_NO("not restarting comp because maintenance campaign is set: %s",
     comp->su->suMaintenanceCampaign.c_str());
 
diff --git a/src/amf/amfnd/mds.cc b/src/amf/amfnd/mds.cc
--- a/src/amf/amfnd/mds.cc
+++ b/src/amf/amfnd/mds.cc
@@ -43,7 +43,7 @@ const MDS_CLIENT_MSG_FORMAT_VER avnd_avd
        AVSV_AVD_AVND_MSG_FMT_VER_1, AVSV_AVD_AVND_MSG_FMT_VER_2,
        AVSV_AVD_AVND_MSG_FMT_VER_3, AVSV_AVD_AVND_MSG_FMT_VER_4,
        AVSV_AVD_AVND_MSG_FMT_VER_4, AVSV_AVD_AVND_MSG_FMT_VER_6,
-       AVSV_AVD_AVND_MSG_FMT_VER_7
+       AVSV_AVD_AVND_MSG_FMT_VER_7, AVSV_AVD_AVND_MSG_FMT_VER_8
 };
 
 /* messages from director */
@@ -51,7 +51,7 @@ const MDS_CLIENT_MSG_FORMAT_VER avd_avnd
        AVSV_AVD_AVND_MSG_FMT_VER_1, AVSV_AVD_AVND_MSG_FMT_VER_2,
        AVSV_AVD_AVND_MSG_FMT_VER_3, AVSV_AVD_AVND_MSG_FMT_VER_4,
        AVSV_AVD_AVND_MSG_FMT_VER_5, AVSV_AVD_AVND_MSG_FMT_VER_6,
-       AVSV_AVD_AVND_MSG_FMT_VER_7
+       AVSV_AVD_AVND_MSG_FMT_VER_7, AVSV_AVD_AVND_MSG_FMT_VER_8
 };
 
 const MDS_CLIENT_MSG_FORMAT_VER avnd_avnd_msg_fmt_map_table[] = {
diff --git a/src/amf/amfnd/sudb.cc b/src/amf/amfnd/sudb.cc
--- a/src/amf/amfnd/sudb.cc
+++ b/src/amf/amfnd/sudb.cc
@@ -52,6 +52,7 @@ AVND_SU *avnd_sudb_rec_add(AVND_CB *cb, 
 {
        AVND_SU *su = 0;
        const std::string info_name = Amf::to_string(&info->name);
+       const std::string info_campaign = 
Amf::to_string(&info->suMaintenanceCampaign);
 
        TRACE_ENTER2("SU'%s'", info_name.c_str());
        /* verify if this su is already present in the db */
@@ -80,6 +81,7 @@ AVND_SU *avnd_sudb_rec_add(AVND_CB *cb, 
        su->is_ncs = info->is_ncs;
        su->su_is_external = info->su_is_external;
        su->sufailover = info->su_failover;
+       su->suMaintenanceCampaign = info_campaign;
 
        /*
         * Update the rest of the parameters with default values.
diff --git a/src/amf/common/amf_d2nmsg.h b/src/amf/common/amf_d2nmsg.h
--- a/src/amf/common/amf_d2nmsg.h
+++ b/src/amf/common/amf_d2nmsg.h
@@ -51,6 +51,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 {
@@ -137,6 +138,7 @@ typedef struct avsv_su_info_msg {
        bool is_ncs;
        bool su_is_external;    /*indicates if this SU is external */
        bool su_failover;
+       SaNameT suMaintenanceCampaign;
        struct avsv_su_info_msg *next;
 } AVSV_SU_INFO_MSG;
 
diff --git a/src/amf/common/d2nedu.c b/src/amf/common/d2nedu.c
--- a/src/amf/common/d2nedu.c
+++ b/src/amf/common/d2nedu.c
@@ -635,6 +635,7 @@ uint32_t avsv_edp_su_info_msg(EDU_HDL *h
        AVSV_SU_INFO_MSG *struct_ptr = NULL, **d_ptr = NULL;
        uint16_t ver2 = AVSV_AVD_AVND_MSG_FMT_VER_2;
        uint16_t ver5 = AVSV_AVD_AVND_MSG_FMT_VER_5;
+       uint16_t ver8 = AVSV_AVD_AVND_MSG_FMT_VER_8;
 
        EDU_INST_SET avsv_su_info_msg_rules[] = {
                {EDU_START, avsv_edp_su_info_msg, EDQ_LNKLIST, 0, 0,
@@ -665,6 +666,11 @@ uint32_t avsv_edp_su_info_msg(EDU_HDL *h
                {EDU_EXEC, ncs_edp_ncs_bool, 0, 0, 0,
                 (long)&((AVSV_SU_INFO_MSG *)0)->su_failover, 0, NULL},
 
+               /* Include suMaintenanceCampaign in version 8 and higher */
+               {EDU_VER_GE, NULL, 0, 0, 2, 0, 0, (EDU_EXEC_RTINE)((uint16_t 
*)(&(ver8)))},
+               {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0,
+                (long)&((AVSV_SU_INFO_MSG *)0)->suMaintenanceCampaign, 0, 
NULL},
+
                {EDU_TEST_LL_PTR, avsv_edp_su_info_msg, 0, 0, 0,
                 (long)&((AVSV_SU_INFO_MSG *)0)->next, 0, NULL},
                {EDU_END, 0, 0, 0, 0, 0, 0, NULL},
diff --git a/src/amf/common/d2nmsg.c b/src/amf/common/d2nmsg.c
--- a/src/amf/common/d2nmsg.c
+++ b/src/amf/common/d2nmsg.c
@@ -49,6 +49,7 @@ static void free_d2n_su_msg_info(AVSV_DN
                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);
+               osaf_extended_name_free(&su_info->suMaintenanceCampaign);
                free(su_info);
        }
 }
@@ -85,6 +86,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);
+               
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_su_info->suMaintenanceCampaign),
 &d_su_info->suMaintenanceCampaign);
                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;
 


------------------------------------------------------------------------------
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