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