osaf/services/saf/immsv/immd/immd_cb.h    |   2 +-
 osaf/services/saf/immsv/immd/immd_evt.c   |   3 -
 osaf/services/saf/immsv/immd/immd_mbcsv.c |  56 ++++++++++++++++++++++++++++++-
 3 files changed, 56 insertions(+), 5 deletions(-)


SC absence allowed part will prevent that controllers don't have different SC 
absence configuration.
When 2PBE or SC absence allowed misconfiguration on controllers is detected, 
IMMD will exit in cold sync.

After few times restarting due to SC absence or 2PBE misconfiguration, AMF will 
reboot the node.

diff --git a/osaf/services/saf/immsv/immd/immd_cb.h 
b/osaf/services/saf/immsv/immd/immd_cb.h
--- a/osaf/services/saf/immsv/immd/immd_cb.h
+++ b/osaf/services/saf/immsv/immd/immd_cb.h
@@ -39,7 +39,7 @@
          IMMD_WRT_IMMND_SUBPART_VER_MIN + 1 )
 
 #define IMMSV_IMMD_MBCSV_VERSION_MIN 4
-#define IMMSV_IMMD_MBCSV_VERSION 4
+#define IMMSV_IMMD_MBCSV_VERSION 5
 
 typedef struct immd_saved_fevs_msg {
        IMMSV_FEVS fevsMsg;
diff --git a/osaf/services/saf/immsv/immd/immd_evt.c 
b/osaf/services/saf/immsv/immd/immd_evt.c
--- a/osaf/services/saf/immsv/immd/immd_evt.c
+++ b/osaf/services/saf/immsv/immd/immd_evt.c
@@ -721,9 +721,6 @@ static void immd_accept_node(IMMD_CB *cb
                        if(cb->mIs2Pbe) {
                                /* 2PBE is true => joining SC must sync AND get 
informed of 2PBE. */
                                accept_evt.info.immnd.info.ctrl.canBeCoord = 3; 
-                       } else {
-                               /* 1PBE or 0PBE joining SC must sync */
-                               accept_evt.info.immnd.info.ctrl.canBeCoord = 
(node_info->isOnController)?1:(cb->mScAbsenceAllowed)?4:0;
                        }
                }
        } else if(cb->immnd_coord == 0 && cb->mScAbsenceAllowed && 
knownVeteran) {
diff --git a/osaf/services/saf/immsv/immd/immd_mbcsv.c 
b/osaf/services/saf/immsv/immd/immd_mbcsv.c
--- a/osaf/services/saf/immsv/immd/immd_mbcsv.c
+++ b/osaf/services/saf/immsv/immd/immd_mbcsv.c
@@ -628,7 +628,8 @@ static uint32_t mbcsv_enc_msg_resp(IMMD_
        TRACE_ENTER();
        uint32_t rc = NCSCC_RC_SUCCESS;
        uint8_t *header, num_fevs = 0, *sync_cnt_ptr;
-       uint8_t *uns32_ptr, *uns64_ptr, *uns8_ptr;
+       uint8_t *uns32_ptr, *uns64_ptr, *uns8_ptr, *uns16_ptr;
+       uint16_t peer_version;
 
        /* COLD_SYNC_RESP IS DONE BY THE ACTIVE */
        if (cb->ha_state == SA_AMF_HA_STANDBY) {
@@ -644,6 +645,9 @@ static uint32_t mbcsv_enc_msg_resp(IMMD_
                return rc;
        }
 
+       peer_version = m_NCS_MBCSV_FMT_GET(arg->info.encode.i_peer_version,
+                       IMMSV_IMMD_MBCSV_VERSION, IMMSV_IMMD_MBCSV_VERSION_MIN);
+
        /* First reserve space to store the number of X that will be sent */
 
        header = ncs_enc_reserve_space(&arg->info.encode.io_uba, 
sizeof(uint8_t));
@@ -759,6 +763,18 @@ static uint32_t mbcsv_enc_msg_resp(IMMD_
        ncs_enc_claim_space(&arg->info.encode.io_uba, sizeof(uint8_t));
        ncs_encode_8bit(&uns8_ptr, 0x0);
 
+       if(peer_version >= 5) {
+               uns8_ptr = ncs_enc_reserve_space(&arg->info.encode.io_uba, 
sizeof(uint8_t));
+               osafassert(uns8_ptr);
+               ncs_enc_claim_space(&arg->info.encode.io_uba, sizeof(uint8_t));
+               ncs_encode_8bit(&uns8_ptr, cb->mIs2Pbe);
+
+               uns16_ptr = ncs_enc_reserve_space(&arg->info.encode.io_uba, 
sizeof(uint16_t));
+               osafassert(uns16_ptr);
+               ncs_enc_claim_space(&arg->info.encode.io_uba, sizeof(uint16_t));
+               ncs_encode_16bit(&uns16_ptr, cb->mScAbsenceAllowed);
+       }
+
        /* Alter this to follow same pattern as logsv */
        if (num_fevs < IMMD_MBCSV_MAX_MSG_CNT) {
                if (arg->info.encode.io_msg_type == 
NCS_MBCSV_MSG_COLD_SYNC_RESP) {
@@ -1030,6 +1046,7 @@ static uint32_t mbcsv_dec_sync_resp(IMMD
 {
        uint8_t *ptr, num_fevs, continue_marker, data[16];
        uint32_t count = 0, rc = NCSCC_RC_SUCCESS;
+       uint16_t peer_version;
 
        TRACE_ENTER();
        TRACE_5("RECEIVED COLD SYNC MESSAGE");
@@ -1039,6 +1056,14 @@ static uint32_t mbcsv_dec_sync_resp(IMMD
                return NCSCC_RC_SUCCESS;
        }
 
+       peer_version = m_NCS_MBCSV_FMT_GET(arg->info.decode.i_peer_version,
+                       IMMSV_IMMD_MBCSV_VERSION, IMMSV_IMMD_MBCSV_VERSION_MIN);
+
+       if(cb->mScAbsenceAllowed && peer_version < 5) {
+               LOG_ER("SC absence allowed is allowed on standby IMMD. Active 
IMMD is not from OpenSAF 5.0 or above. Exiting.");
+               exit(1);
+       }
+
        /* 1. Decode the 1st uint8_t region ,  to get the num of fevs msgs to 
sync */
        ptr = ncs_dec_flatten_space(&arg->info.decode.i_uba, data, 
sizeof(uint8_t));
        num_fevs = ncs_decode_8bit(&ptr);
@@ -1140,6 +1165,35 @@ static uint32_t mbcsv_dec_sync_resp(IMMD
                ncs_dec_skip_space(&arg->info.decode.i_uba, sizeof(uint8_t));
        }
 
+       if(peer_version >= 5) {
+               uint8_t is2Pbe;
+               uint16_t scAbsenceAllowed;
+
+               ptr = ncs_dec_flatten_space(&arg->info.decode.i_uba, data, 
sizeof(uint8_t));
+               is2Pbe = ncs_decode_8bit(&ptr);
+               ncs_dec_skip_space(&arg->info.decode.i_uba, sizeof(uint8_t));
+
+               if(cb->mIs2Pbe && !is2Pbe) {
+                       LOG_ER("2PBE is disabled on active IMMD. Exiting.");
+                       exit(1);
+               }
+               if(!cb->mIs2Pbe && is2Pbe) {
+                       LOG_ER("2PBE is enabled on active IMMD. Exiting.");
+                       exit(1);
+               }
+
+               ptr = ncs_dec_flatten_space(&arg->info.decode.i_uba, data, 
sizeof(uint16_t));
+               scAbsenceAllowed = ncs_decode_16bit(&ptr);
+               ncs_dec_skip_space(&arg->info.decode.i_uba, sizeof(uint16_t));
+
+               if(cb->mScAbsenceAllowed != scAbsenceAllowed) {
+                       LOG_ER("SC absence allowed in not the same as on active 
IMMD. "
+                                       "Active: %u, Standby: %d. Exiting.",
+                                       scAbsenceAllowed, 
cb->mScAbsenceAllowed);
+                       exit(1);
+               }
+       }
+
        TRACE_LEAVE();
        return rc;
 }

------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to