osaf/libs/core/include/mds_papi.h     |    8 ++-
 osaf/libs/core/mds/include/mds_core.h |    4 +-
 osaf/libs/core/mds/include/mds_dt.h   |    5 +-
 osaf/libs/core/mds/include/mds_dt2c.h |    6 +-
 osaf/libs/core/mds/mds_c_api.c        |   14 ++-
 osaf/libs/core/mds/mds_c_sndrcv.c     |    5 +
 osaf/libs/core/mds/mds_dt_common.c    |   49 ++++++++++----
 osaf/libs/core/mds/mds_dt_tipc.c      |  116 ++++++++++++++++++++++++---------
 osaf/libs/core/mds/mds_main.c         |   55 +++++++++++----
 9 files changed, 188 insertions(+), 74 deletions(-)


           This patch enhences the Opensaf Transport provides  Node Name of the 
sender
                        as part of ncsmds_callback_info (NCSMDS_CALLBACK_INFO).

                        This enhences implemented for  both TCP & TIPC 
Transport.

                        In addtional to TIPC list DEC_INFO, RECEIVE_INFO & 
DIRECT_RECEIVE,
                        TCP Transport provides Node Name of the sender as part 
of NODE_EVENT event also.

                        Patch supports  in-serrvice upgrade  both TCP & TIPC 
Transport  (NOT YET TESTED).



                         TIPC MDS transport will provide  part of  
ncsmds_callback_info for follwing events :

 - MDS_CALLBACK_DEC_INFO
 - MDS_CALLBACK_RECEIVE_INFO
 - MDS_CALLBACK_DIRECT_RECEIVE_INFO


 Example :

 Feb  5 11:41:06 SC-1 osaflogd[21413]: LGS: mds_dec() node_name : SC-1  
evt.type :0 from ncsmds_callback_info
 Feb  5 11:41:06 SC-1 osaflogd[21413]: LGS: mds_rcv() node_name : SC-1  
evt.type :4 from ncsmds_callback_info
 Feb  5 11:41:06 SC-1 osaflogd[21413]: LGS: mds_dec() node_name : SC-2  
evt.type :0 from ncsmds_callback_info
 Feb  5 11:41:06 SC-1 osaflogd[21413]: LGS: mds_rcv() node_name : SC-2  
evt.type :0 from ncsmds_callback_info

diff --git a/osaf/libs/core/include/mds_papi.h 
b/osaf/libs/core/include/mds_papi.h
--- a/osaf/libs/core/include/mds_papi.h
+++ b/osaf/libs/core/include/mds_papi.h
@@ -700,6 +700,7 @@ typedef uint8_t *MDS_DIRECT_BUFF;
                NCSCONTEXT o_msg;       /* New message resulting from decode  */
                NODE_ID i_node_id;      /* Node id of the sender              */
                MDS_CLIENT_MSG_FORMAT_VER i_msg_fmt_ver;
+               char i_node_name[HOST_NAME_MAX]; /* Node Name of the sender     
         */
 
        } MDS_CALLBACK_DEC_INFO;
 
@@ -732,6 +733,7 @@ unpack individual structure members. */
                MDS_SVC_ID i_to_svc_id;
                MDS_SEND_PRIORITY_TYPE i_priority;      /* Priority with which 
this message was sent */
                NODE_ID i_node_id;      /* Node id of the sender              */
+               char i_node_name[HOST_NAME_MAX]; /* Node Name of the sender     
         */
 
                /* Local handle to the PWE of "svc_id". It is meaningful only 
to "Global
                   MDS services". Global MDS services are global to a 
"MDS_DEST" scope.
@@ -764,6 +766,7 @@ unpack individual structure members. */
                MDS_SVC_ID i_to_svc_id;
                MDS_SEND_PRIORITY_TYPE i_priority;      /* Priority with which 
this message was sent */
                NODE_ID i_node_id;      /* Node id of the sender              */
+               char i_node_name[HOST_NAME_MAX]; /* Node Name of the sender     
         */
 
                /* Local handle to the PWE of "svc_id". It is meaningful only 
to "Global
                   MDS services". Global MDS services are global to a 
"MDS_DEST" scope.
@@ -835,8 +838,11 @@ unpack individual structure members. */
                NCSMDS_NODE_CHG  node_chg;
                NODE_ID node_id;
                uint16_t addr_family;
-               uint16_t length;
+               uint16_t length; /* will be deprecated after few version */
+               uint16_t ip_addr_len;
                uint8_t ip_addr[INET6_ADDRSTRLEN];
+               uint16_t i_node_name_len;
+               char i_node_name[HOST_NAME_MAX]; /* Node Name of the sender */
        } MDS_CALLBACK_NODE_EVENT_INFO;
 
        typedef struct mds_callback_msg_loss_event_info {
diff --git a/osaf/libs/core/mds/include/mds_core.h 
b/osaf/libs/core/mds/include/mds_core.h
--- a/osaf/libs/core/mds/include/mds_core.h
+++ b/osaf/libs/core/mds/include/mds_core.h
@@ -106,9 +106,9 @@ typedef struct mds_mcm_sync_send_queue {
                MDS_DEST adest;
        } dest_sndrack_adest;   /*  Filled, when the sndrack and redrack is 
being sent to originator and checked when ack
                                   is recd for the sent sndrack or redrack */
-
        struct mds_mcm_sync_send_queue *next_send;
        MDS_CLIENT_MSG_FORMAT_VER msg_fmt_ver;
+       char i_node_name[HOST_NAME_MAX]; /* Node Name of the sender*/
 
 } MDS_MCM_SYNC_SEND_QUEUE;
 
@@ -287,6 +287,8 @@ MDS_SVC_INFO *mds_get_svc_info_by_hdl(MD
 typedef struct mds_mcm_cb {
        MDS_DEST adest;
        char adest_details[MDS_MAX_PROCESS_NAME_LEN]; /* 
<node[slotno]:processname[pid]> */
+       char node_name[HOST_NAME_MAX]; /* Node Name of this Node*/
+       uint8_t node_name_len; /* configured Node Name len of this Node*/
 
        /* List of all subscription results MDS_SUBSCRIPTION_RESULTS_INFO */
        NCS_PATRICIA_TREE subtn_results;
diff --git a/osaf/libs/core/mds/include/mds_dt.h 
b/osaf/libs/core/mds/include/mds_dt.h
--- a/osaf/libs/core/mds/include/mds_dt.h
+++ b/osaf/libs/core/mds/include/mds_dt.h
@@ -73,8 +73,7 @@ typedef struct mdtm_reassembly_queue {
 } MDTM_REASSEMBLY_QUEUE;
 
 /* Defines regarding to the Send and receive buff sizes */
-#define MDS_HDR_LEN         24 /* Mds_prot-4bit, Mds_version-2bit , Msg 
prior-2bit, Hdr_len-16bit, Seq_no-32bit, Enc_dec_type-2bit, Msg_snd_type-6bit,
-                                  Pwe_id-16bit, Sndr_vdest_id-16bit, 
Sndr_svc_id-16bit, Rcvr_vdest_id-16bit, Rcvr_svc_id-16bit, Exch_id-32bit, 
App_Vers-16bit */
+#define MDS_HDR_LEN         25 /* Mds_prot-4bit, Mds_version-2bit , Msg 
prior-2bit, Hdr_len-16bit, Seq_no-32bit, Enc_dec_type-2bit, Msg_snd_type-6bit, 
Pwe_id-16bit, Sndr_vdest_id-16bit, Sndr_svc_id-16bit, Rcvr_vdest_id-16bit, 
Rcvr_svc_id-16bit, Exch_id-32bit, App_Vers-16bit  node_name_len-8bit,  dynamic 
value node_name-<HOST_NAME_MAX>bits*/
 
 /* Following defines the positions of each field in the mds hdr */
 #define MDS_HEADER_PROT_VER_PRIOR_POSITION    0
@@ -88,6 +87,8 @@ typedef struct mdtm_reassembly_queue {
 #define MDS_HEADER_RCVR_SVC_ID_POSITION       16
 #define MDS_HEADER_EXCHG_ID_POSITION          18
 #define MDS_HEADER_APP_VERSION_ID_POSITION    22
+#define MDS_HEADER_NODE_NAME_LEN_POSITION     24
+#define MDS_HEADER_NODE_NAME_POSITION         25
 
 #define MDTM_FRAG_HDR_LEN    8 /* Msg Seq_no-32bit, More Frag-1bit, 
Frag_num-15bit, Frag_size-16bit */
 
diff --git a/osaf/libs/core/mds/include/mds_dt2c.h 
b/osaf/libs/core/mds/include/mds_dt2c.h
--- a/osaf/libs/core/mds/include/mds_dt2c.h
+++ b/osaf/libs/core/mds/include/mds_dt2c.h
@@ -43,7 +43,7 @@ typedef uint8_t MDS_SVC_ARCHWORD_TYPE;        /
  *    Version 0 uses 1400 bytes fragmentation.
  *    Version 1 uses TIPC max msg (66000 bytes) fragmentation.
  */
-#define MDS_SELF_ARCHWORD ((MDS_SVC_ARCHWORD_TYPE) ((MDS_WORD_SIZE_TYPE<<3) | 
1))
+#define MDS_SELF_ARCHWORD ((MDS_SVC_ARCHWORD_TYPE) ((MDS_WORD_SIZE_TYPE<<3) | 
2))
 
 typedef enum {
        MDS_VIEW_NORMAL,
@@ -106,6 +106,8 @@ typedef struct mds_data_recv {
        MDS_CLIENT_MSG_FORMAT_VER msg_fmt_ver;  /* message format version 
specification */
        MDS_SVC_PVT_SUB_PART_VER src_svc_sub_part_ver;
        MDS_SVC_ARCHWORD_TYPE msg_arch_word;
+       uint8_t src_node_name_len;
+       char src_node_name[HOST_NAME_MAX]; /* Node Name of the sender/source*/
        uint32_t src_seq_num;
        pid_t pid;
        uid_t uid;
@@ -400,7 +402,7 @@ extern uint32_t mds_mcm_svc_down(PW_ENV_
                              MDS_SVC_PVT_SUB_PART_VER svc_sub_part_ver, 
MDS_SVC_ARCHWORD_TYPE archword_type);
 
 /* NODE UP */
-extern uint32_t mds_mcm_node_up(MDS_SVC_HDL local_svc_hdl, NODE_ID node_id, 
char *node_ip, uint16_t addr_family);
+extern uint32_t mds_mcm_node_up(MDS_SVC_HDL local_svc_hdl, NODE_ID node_id, 
char *node_ip, uint16_t addr_family, char *node_name);
 
 /* NODE DOWN */
 extern uint32_t mds_mcm_node_down(MDS_SVC_HDL local_svc_hdl, NODE_ID node_id, 
uint16_t addr_family);
diff --git a/osaf/libs/core/mds/mds_c_api.c b/osaf/libs/core/mds/mds_c_api.c
--- a/osaf/libs/core/mds/mds_c_api.c
+++ b/osaf/libs/core/mds/mds_c_api.c
@@ -2884,8 +2884,7 @@ else (entry exists)
             2 - NCSCC_RC_FAILURE
 
 *********************************************************/
-uint32_t mds_mcm_node_up(MDS_SVC_HDL local_svc_hdl, NODE_ID node_id, char 
*node_ip, uint16_t addr_family)
-
+uint32_t mds_mcm_node_up(MDS_SVC_HDL local_svc_hdl, NODE_ID node_id, char 
*node_ip, uint16_t addr_family, char *node_name)
 {
        MDS_MCM_MSG_ELEM *event_msg = NULL;
        MDS_SVC_INFO *local_svc_info = NULL;
@@ -2929,13 +2928,18 @@ uint32_t mds_mcm_node_up(MDS_SVC_HDL loc
        cbinfo->info.node_evt.node_id = node_id;
        cbinfo->info.node_evt.addr_family = addr_family;
        if (node_ip) {
-               memcpy(cbinfo->info.node_evt.ip_addr, node_ip, 
INET6_ADDRSTRLEN);
-               cbinfo->info.node_evt.length = strlen(node_ip);
+               cbinfo->info.node_evt.ip_addr_len = strlen(node_ip);
+               cbinfo->info.node_evt.length = 
cbinfo->info.node_evt.ip_addr_len;
+               memcpy(cbinfo->info.node_evt.ip_addr, node_ip, 
cbinfo->info.node_evt.ip_addr_len);
        }
 
        m_MDS_LOG_INFO("MDTM: node up node_ip:%s, length:%d node_id:%u 
addr_family:%d msg_type:%d",
-                       cbinfo->info.node_evt.ip_addr, 
cbinfo->info.node_evt.length, 
+                       cbinfo->info.node_evt.ip_addr, 
cbinfo->info.node_evt.ip_addr_len, 
                        cbinfo->info.node_evt.node_id, 
cbinfo->info.node_evt.addr_family, cbinfo->info.node_evt.node_chg);
+       if (node_name) {
+               cbinfo->info.node_evt.i_node_name_len = strlen(node_name);
+               strncpy(cbinfo->info.node_evt.i_node_name, node_name, 
cbinfo->info.node_evt.i_node_name_len);
+       }  
 
        /* Post to mail box If Q Ownership is enabled Else Call user callback */
        if (local_svc_info->q_ownership == true) {
diff --git a/osaf/libs/core/mds/mds_c_sndrcv.c 
b/osaf/libs/core/mds/mds_c_sndrcv.c
--- a/osaf/libs/core/mds/mds_c_sndrcv.c
+++ b/osaf/libs/core/mds/mds_c_sndrcv.c
@@ -4289,6 +4289,7 @@ static uint32_t mds_mcm_process_recv_snd
                        cbinfo.info.receive.i_to_svc_id = svccb->svc_id;
                        cbinfo.info.receive.i_priority = recv->pri;
                        cbinfo.info.receive.i_msg_fmt_ver = recv->msg_fmt_ver;
+                       strncpy(cbinfo.info.receive.i_node_name, 
recv->src_node_name , recv->src_node_name_len);
                } else if (recv->msg.encoding == MDS_ENC_TYPE_DIRECT_BUFF) {
                        cbinfo.i_op = MDS_CALLBACK_DIRECT_RECEIVE;
                        cbinfo.info.direct_receive.i_fr_anc = recv->src_adest;
@@ -4319,6 +4320,7 @@ static uint32_t mds_mcm_process_recv_snd
                        cbinfo.info.direct_receive.i_to_svc_id = svccb->svc_id;
                        cbinfo.info.direct_receive.i_priority = recv->pri;
                        cbinfo.info.direct_receive.i_msg_fmt_ver = 
recv->msg_fmt_ver;
+                       strncpy(cbinfo.info.direct_receive.i_node_name, 
recv->src_node_name , recv->src_node_name_len);
                } else if (recv->msg.encoding == MDS_ENC_TYPE_CPY) {
                        cbinfo.i_op = MDS_CALLBACK_RECEIVE;
 
@@ -4346,6 +4348,7 @@ static uint32_t mds_mcm_process_recv_snd
                        cbinfo.info.receive.i_to_svc_id = svccb->svc_id;
                        cbinfo.info.receive.i_priority = recv->pri;
                        cbinfo.info.receive.i_msg_fmt_ver = recv->msg_fmt_ver;
+                       strncpy(cbinfo.info.receive.i_node_name, 
recv->src_node_name , recv->src_node_name_len);
                } else {
                        mds_mcm_free_msg_memory(recv->msg);
                        return NCSCC_RC_FAILURE;
@@ -4904,6 +4907,7 @@ static uint32_t mds_mcm_do_decode_full_o
                cbinfo->info.dec.o_msg = orig_msg;
 
                cbinfo->info.dec.i_msg_fmt_ver = recv_msg->msg_fmt_ver;
+               strncpy(cbinfo->info.dec.i_node_name, recv_msg->src_node_name , 
recv_msg->src_node_name_len);
 
                m_MDS_LOG_DBG("MDS_SND_RCV : calling callback ptr\n");
 
@@ -4923,6 +4927,7 @@ static uint32_t mds_mcm_do_decode_full_o
                cbinfo->info.dec_flat.o_msg = orig_msg;
 
                cbinfo->info.dec_flat.i_msg_fmt_ver = recv_msg->msg_fmt_ver;
+               strncpy(cbinfo->info.dec_flat.i_node_name, 
recv_msg->src_node_name , recv_msg->src_node_name_len);
                m_MDS_LOG_DBG("MDS_SND_RCV : calling callback ptr\n");
 
                if ((rc = svccb->cback_ptr(cbinfo)) != NCSCC_RC_SUCCESS) {
diff --git a/osaf/libs/core/mds/mds_dt_common.c 
b/osaf/libs/core/mds/mds_dt_common.c
--- a/osaf/libs/core/mds/mds_dt_common.c
+++ b/osaf/libs/core/mds/mds_dt_common.c
@@ -294,13 +294,7 @@ uint32_t mdtm_process_recv_message_commo
 
                        return NCSCC_RC_FAILURE;
                }
-               /* Check whether mds header length received is not less than 
mds header length of this instance */
-               if (len_mds_hdr < MDS_HDR_LEN) {
-                       m_MDS_LOG_ERR
-                           ("MDTM:Mds hdr len of recd msg (Non frag) = %d is 
less than local mds hdr len = %d",
-                            len_mds_hdr, MDS_HDR_LEN);
-                       return NCSCC_RC_FAILURE;
-               }
+
 
                data = &buffer[MDS_HEADER_PWE_ID_POSITION];
 
@@ -412,9 +406,26 @@ uint32_t mdtm_process_recv_message_commo
                        break;
                }
 
+               data = NULL;
                data = &buffer[MDS_HEADER_APP_VERSION_ID_POSITION];
                reassem_queue->recv.msg_fmt_ver = ncs_decode_16bit(&data);      
/* For the version field */
 
+               data = NULL;
+               data = &buffer[MDS_HEADER_NODE_NAME_LEN_POSITION];
+               reassem_queue->recv.src_node_name_len = ncs_decode_8bit(&data);
+
+               /* Check whether mds header length received is not less than 
mds header length of this instance */
+                if (len_mds_hdr < (MDS_HDR_LEN + 
reassem_queue->recv.src_node_name_len)) {
+                        m_MDS_LOG_ERR
+                            ("MDTM:Mds hdr len of recd msg (Non frag) = %d is 
less than local mds hdr len = %d",
+                             len_mds_hdr, (MDS_HDR_LEN + 
reassem_queue->recv.src_node_name_len));
+                        return NCSCC_RC_FAILURE;
+                }
+
+               data = NULL;
+               data = &buffer[MDS_HEADER_NODE_NAME_POSITION];
+               strncpy((char *)reassem_queue->recv.src_node_name, (char 
*)data, reassem_queue->recv.src_node_name_len);
+
                reassem_queue->recv.exchange_id = xch_id;
                reassem_queue->next_frag_num = 0;
                reassem_queue->recv.dest_svc_hdl = dest_svc_hdl;
@@ -519,13 +530,6 @@ uint32_t mdtm_process_recv_message_commo
                             transport_adest);
                        return NCSCC_RC_FAILURE;
                }
-               /* Check whether mds header length received is not less than 
mds header length of this instance */
-               if (len_mds_hdr < MDS_HDR_LEN) {
-                       m_MDS_LOG_DBG
-                           ("MDTM:Mds hdr len of recd msg(Frag first pkt) = %d 
is less than local mds hdr len = %d",
-                            len_mds_hdr, MDS_HDR_LEN);
-                       return NCSCC_RC_FAILURE;
-               }
                data = &buffer[MDS_HEADER_PWE_ID_POSITION + MDTM_FRAG_HDR_LEN];
 
                pwe_id = ncs_decode_16bit(&data);
@@ -642,6 +646,23 @@ uint32_t mdtm_process_recv_message_commo
                data = &buffer[MDS_HEADER_APP_VERSION_ID_POSITION + 
MDTM_FRAG_HDR_LEN];
                reassem_queue->recv.msg_fmt_ver = ncs_decode_16bit(&data);      
/* For the version field */
 
+
+               data = NULL;
+               data = &buffer[MDS_HEADER_NODE_NAME_LEN_POSITION + 
MDTM_FRAG_HDR_LEN];
+               reassem_queue->recv.src_node_name_len = ncs_decode_8bit(&data);
+
+               /* Check whether mds header length received is not less than 
mds header length of this instance */
+               if (len_mds_hdr < (MDS_HDR_LEN + 
reassem_queue->recv.src_node_name_len)) {
+                       m_MDS_LOG_ERR
+                               ("MDTM:Mds hdr len of recd msg ( frag) = %d is 
less than local mds hdr len = %d",
+                                len_mds_hdr, (MDS_HDR_LEN + 
reassem_queue->recv.src_node_name_len));
+                       return NCSCC_RC_FAILURE;
+                }
+ 
+                data = NULL;
+                data = &buffer[MDS_HEADER_NODE_NAME_POSITION + 
MDTM_FRAG_HDR_LEN];
+                strncpy((char *)reassem_queue->recv.src_node_name, (char 
*)data, reassem_queue->recv.src_node_name_len);
+
                reassem_queue->recv.exchange_id = xch_id;
                reassem_queue->next_frag_num = 2;
                reassem_queue->recv.dest_svc_hdl = dest_svc_hdl;
diff --git a/osaf/libs/core/mds/mds_dt_tipc.c b/osaf/libs/core/mds/mds_dt_tipc.c
--- a/osaf/libs/core/mds/mds_dt_tipc.c
+++ b/osaf/libs/core/mds/mds_dt_tipc.c
@@ -710,9 +710,11 @@ static uint32_t mdtm_process_recv_events
                                                assert(0);
                                        }
                                }
-                       } else if (pfd[0].revents & POLLHUP) {  /* This value 
is returned when the number of subscriptions made cross the tipc max_subscr 
limit, so no more connection to the tipc topserver is present(viz no more 
up/down events), so abort and exit the process */
-                               m_MDS_LOG_CRITICAL
-                                   ("MDTM: POLLHUP returned on Discovery 
Socket, No. of subscriptions=%d",
+                       } else if (pfd[0].revents & POLLHUP) {
+                               /* This value is returned when the number of 
subscriptions made cross the tipc max_subscr limit, 
+                                  so no more connection to the tipc topserver 
is present(viz no more up/down events),
+                                  so abort and exit the process */
+                                  m_MDS_LOG_CRITICAL("MDTM: POLLHUP returned 
on Discovery Socket, No. of subscriptions=%d",
                                     num_subscriptions);
                                abort();        /* This means, the process is 
use less as
                                                   it has lost the connectivity 
with the topology server
@@ -980,7 +982,8 @@ static uint32_t mdtm_process_discovery_e
                        } else {
                                m_MDS_LOG_ERR("MDTM: Dropping  the svc event 
for svc_id = %s(%d), subscribed by " 
                                                "svc_id = %s(%d) as the TIPC 
NODEid is not in the prescribed range=0x%08x, SVC Event type=%d",
-                                    get_svc_names(svc_id), svc_id, 
get_svc_names(m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl)), 
m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl), node, discovery_event);
+                                               get_svc_names(svc_id), svc_id, 
get_svc_names(m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl)),
+                                               
m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl), node, discovery_event);
                                return NCSCC_RC_FAILURE;
                        }
                        
get_subtn_adest_details(m_MDS_GET_PWE_HDL_FROM_SVC_HDL(svc_hdl), 
m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl),
@@ -988,26 +991,30 @@ static uint32_t mdtm_process_discovery_e
 
                        if (TIPC_PUBLISHED == discovery_event) {
                                m_MDS_LOG_NOTIFY("MDTM: svc up event for svc_id 
= %s(%d), subscri. by svc_id = %s(%d) pwe_id=%d Adest = %s",
-                                    get_svc_names(svc_id), svc_id, 
get_svc_names(m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl)), 
m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl), pwe_id, adest_details);
+                                               get_svc_names(svc_id), svc_id, 
get_svc_names(m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl)),
+                                               
m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl), pwe_id, adest_details);
 
                                if (NCSCC_RC_SUCCESS != mds_mcm_svc_up(pwe_id, 
svc_id, role, scope,
                                                                       vdest, 
policy, adest, 0, svc_hdl, subtn_ref_val,
                                                                       
svc_sub_part_ver, archword_type)) {
                                        m_MDS_LOG_ERR("SVC-UP Event processsing 
failed for svc_id = %s(%d), subscribed by svc_id = %s(%d)",
-                                            get_svc_names(svc_id), svc_id, 
get_svc_names(m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl)), 
m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl));
+                                            get_svc_names(svc_id), svc_id, 
get_svc_names(m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl)),
+                                            
m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl));
                                        return NCSCC_RC_FAILURE;
                                }
                                return NCSCC_RC_SUCCESS;
                        } else if (TIPC_WITHDRAWN == discovery_event) {
                                m_MDS_LOG_NOTIFY("MDTM: svc down event for 
svc_id = %s(%d), subscri. by svc_id = %s(%d) pwe_id=%d Adest = %s",
-                                    get_svc_names(svc_id), svc_id, 
get_svc_names(m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl)), 
m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl), pwe_id, adest_details);
+                                               get_svc_names(svc_id), svc_id, 
get_svc_names(m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl)),
+                                               
m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl), pwe_id, adest_details);
 
                                if (NCSCC_RC_SUCCESS != 
mds_mcm_svc_down(pwe_id, svc_id, role, scope,
                                                                         vdest, 
policy, adest, 0, svc_hdl,
                                                                         
subtn_ref_val, svc_sub_part_ver,
                                                                         
archword_type)) {
                                        m_MDS_LOG_ERR("MDTM: SVC-DOWN Event 
processsing failed for svc_id = %s(%d), subscribed by svc_id = %s(%d)\n",
-                                            get_svc_names(svc_id), svc_id, 
get_svc_names(m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl)), 
m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl));
+                                                       get_svc_names(svc_id), 
svc_id, get_svc_names(m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl)),
+                                                       
m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_hdl));
                                        return NCSCC_RC_FAILURE;
                                }
                                return NCSCC_RC_SUCCESS;
@@ -1089,7 +1096,18 @@ static uint32_t mdtm_process_discovery_e
 
                        if (TIPC_PUBLISHED == discovery_event) {
                                m_MDS_LOG_INFO("MDTM: Raising the NODE UP event 
for NODE id = %d", node_id);
-                               return mds_mcm_node_up(svc_hdl, node_id, NULL, 
AF_TIPC);
+                               uint32_t up_node_id;
+                               if ((up_node_id = 
m_MDS_GET_NODE_ID_FROM_ADEST(m_MDS_GET_ADEST)) == node_id) {
+                                       m_MDS_LOG_INFO("MDTM:NODE_UP for 
subtn_ref_val:%lu node_name:%s, node_id:%u addr_family:%d ",
+                                                       
(uint64_t)subtn_ref_val,gl_mds_mcm_cb->node_name, node_id, AF_TIPC);
+                                       return mds_mcm_node_up(svc_hdl, 
node_id, NULL, AF_TIPC, gl_mds_mcm_cb->node_name);
+                               } else {
+
+                                       m_MDS_LOG_INFO("MDTM:NODE_UP for 
subtn_ref_val:%lu node_name:%s, node_id:%u addr_family:%d ",
+                                                        
(uint64_t)subtn_ref_val, "REMOTE_NODE", node_id, AF_TIPC);
+                                       return mds_mcm_node_up(svc_hdl, 
node_id, NULL, AF_TIPC, "REMOTE_NODE");
+                               }
+
                        } else if (TIPC_WITHDRAWN == discovery_event) {
                                m_MDS_LOG_INFO("MDTM: Raising the NODE DOWN 
event for NODE id = %d", node_id);
                                return mds_mcm_node_down(svc_hdl, node_id, 
AF_TIPC);
@@ -2024,6 +2042,15 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_RE
           send message
         */
        uint32_t status = 0;
+       uint32_t sum_mds_hdr_plus_mdtm_hdr_plus_len;
+       int version = req->msg_arch_word & 0x7;
+       if (version > 1) {      
+               sum_mds_hdr_plus_mdtm_hdr_plus_len = 
(SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN + gl_mds_mcm_cb->node_name_len);
+       } else {
+               /* sending message to Old version Node  */
+               sum_mds_hdr_plus_mdtm_hdr_plus_len = 
(SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN - 1 ); 
+               syslog(LOG_ERR, "LOG: inservice-testing sending message to Old 
version Node  hdr_plus_len : %d", sum_mds_hdr_plus_mdtm_hdr_plus_len);
+       }
 
        if (req->to == DESTINATION_SAME_PROCESS) {
                MDS_DATA_RECV recv;
@@ -2043,6 +2070,7 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_RE
                recv.msg_fmt_ver = req->msg_fmt_ver;
                recv.src_svc_sub_part_ver = req->src_svc_sub_part_ver;
 
+               strncpy((char *)recv.src_node_name, (char 
*)gl_mds_mcm_cb->node_name, gl_mds_mcm_cb->node_name_len);
                /* This is exclusively for the Bcast ENC and ENC_FLAT case */
                if (recv.msg.encoding == MDS_ENC_TYPE_FULL) {
                        ncs_dec_init_space(&recv.msg.data.fullenc_uba, 
recv.msg.data.fullenc_uba.start);
@@ -2081,7 +2109,7 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_RE
 
                /* Only for the ack and not for any other message */
                if (req->snd_type == MDS_SENDTYPE_ACK || req->snd_type == 
MDS_SENDTYPE_RACK) {
-                       uint8_t len = SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN;
+                       uint8_t len = sum_mds_hdr_plus_mdtm_hdr_plus_len;
                        uint8_t buffer_ack[len];
 
                        /* Add mds_hdr */
@@ -2124,7 +2152,6 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_RE
 
                                // determine fragment limit using a bit in 
destination archword
                                int frag_size;
-                               int version = req->msg_arch_word & 0x7;
                                if (version > 0) {
                                        // normal mode, use TIPC fragmentation
                                        frag_size = MDS_DIRECT_BUF_MAXSIZE;
@@ -2141,13 +2168,13 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_RE
                                } else {
                                        uint8_t *p8;
                                        uint8_t *body = NULL;
-                                       body = calloc(1, len + 
SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN);
+                                       body = calloc(1, len + 
sum_mds_hdr_plus_mdtm_hdr_plus_len);
 
                                        p8 = (uint8_t 
*)m_MMGR_DATA_AT_START(usrbuf, len, (char *)
-                                                                         (body 
+ SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN));
-
-                                       if (p8 != (body + 
SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN))
-                                               memcpy((body + 
SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN), p8, len);
+                                                                         (body 
+ sum_mds_hdr_plus_mdtm_hdr_plus_len));
+
+                                       if (p8 != (body + 
sum_mds_hdr_plus_mdtm_hdr_plus_len))
+                                               memcpy((body + 
sum_mds_hdr_plus_mdtm_hdr_plus_len), p8, len);
 
                                        if (NCSCC_RC_SUCCESS != 
mdtm_add_mds_hdr(body, req)) {
                                                m_MDS_LOG_ERR("MDTM: Unable to 
add the mds Hdr to the send msg\n");
@@ -2157,7 +2184,7 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_RE
                                        }
 
                                        if (NCSCC_RC_SUCCESS !=
-                                           mdtm_add_frag_hdr(body, (len + 
SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN),
+                                           mdtm_add_frag_hdr(body, (len + 
sum_mds_hdr_plus_mdtm_hdr_plus_len),
                                                              frag_seq_num, 0)) 
{
                                                m_MDS_LOG_ERR("MDTM: Unable to 
add the frag Hdr to the send msg\n");
                                                m_MMGR_FREE_BUFR_LIST(usrbuf);
@@ -2169,7 +2196,7 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_RE
                                            ("MDTM:Sending message with Service 
Seqno=%d, TO Dest_Tipc_id=<0x%08x:%u> ",
                                             req->svc_seq_num, tipc_id.node, 
tipc_id.ref);
 
-                                       len += 
SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN;
+                                       len += 
sum_mds_hdr_plus_mdtm_hdr_plus_len;
                                        if (((req->snd_type == 
MDS_SENDTYPE_RBCAST) || (req->snd_type == MDS_SENDTYPE_BCAST)) && 
                                                        (version > 0) && 
(tipc_mcast_enabled)) {
                                                m_MDS_LOG_DBG("MDTM: User 
Sending Multicast Data lenght=%d From svc_id = %s(%d) to svc_id = %s(%d)\n", 
len,
@@ -2208,7 +2235,7 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_RE
                case MDS_ENC_TYPE_DIRECT_BUFF:
                        {
                                if (req->msg.data.buff_info.len >
-                                   (MDTM_MAX_DIRECT_BUFF_SIZE - 
SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN)) {
+                                   (MDTM_MAX_DIRECT_BUFF_SIZE - 
sum_mds_hdr_plus_mdtm_hdr_plus_len)) {
                                        m_MDS_LOG_CRITICAL
                                            ("MDTM: Passed pkt len is more than 
the single send direct buff\n");
                                        
mds_free_direct_buff(req->msg.data.buff_info.buff);
@@ -2219,7 +2246,7 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_RE
                                               req->msg.data.buff_info.len, 
get_svc_names(req->src_svc_id), req->src_svc_id, 
get_svc_names(req->dest_svc_id), req->dest_svc_id);
 
                                uint8_t *body = NULL;
-                               body = calloc(1, (req->msg.data.buff_info.len + 
SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN));
+                               body = calloc(1, (req->msg.data.buff_info.len + 
sum_mds_hdr_plus_mdtm_hdr_plus_len));
 
                                if (NCSCC_RC_SUCCESS != mdtm_add_mds_hdr(body, 
req)) {
                                        m_MDS_LOG_ERR("MDTM: Unable to add the 
mds Hdr to the send msg\n");
@@ -2229,19 +2256,19 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_RE
                                }
                                if (NCSCC_RC_SUCCESS !=
                                    mdtm_add_frag_hdr(body,
-                                                     
req->msg.data.buff_info.len + SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN,
+                                                     
req->msg.data.buff_info.len + sum_mds_hdr_plus_mdtm_hdr_plus_len,
                                                      frag_seq_num, 0)) {
                                        m_MDS_LOG_ERR("MDTM: Unable to add the 
frag Hdr to the send msg\n");
                                        free(body);
                                        
mds_free_direct_buff(req->msg.data.buff_info.buff);
                                        return NCSCC_RC_FAILURE;
                                }
-                               
memcpy(&body[SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN], req->msg.data.buff_info.buff,
+                               
memcpy(&body[sum_mds_hdr_plus_mdtm_hdr_plus_len], req->msg.data.buff_info.buff,
                                       req->msg.data.buff_info.len);
 
                                if (NCSCC_RC_SUCCESS !=
                                    mdtm_sendto(body,
-                                               (req->msg.data.buff_info.len + 
SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN),
+                                               (req->msg.data.buff_info.len + 
sum_mds_hdr_plus_mdtm_hdr_plus_len),
                                                tipc_id)) {
                                        m_MDS_LOG_ERR("MDTM: Unable to send the 
msg thru TIPC\n");
                                        free(body);
@@ -2298,7 +2325,17 @@ uint32_t mdtm_frag_and_send(MDTM_SEND_RE
        uint8_t *p8;
        uint16_t i = 1;
        uint16_t frag_val = 0;
-       int max_send_pkt_size = frag_size + SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN;
+       uint32_t sum_mds_hdr_plus_mdtm_hdr_plus_len;
+       int version = req->msg_arch_word & 0x7;
+
+       if (version > 1) {
+               sum_mds_hdr_plus_mdtm_hdr_plus_len = 
(SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN + gl_mds_mcm_cb->node_name_len);
+       } else {
+               sum_mds_hdr_plus_mdtm_hdr_plus_len = 
(SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN - 1 );
+               syslog(LOG_ERR, "LOG: inservice-testing sending message to Old 
version Node  hdr_plus_len : %d", sum_mds_hdr_plus_mdtm_hdr_plus_len);
+       }
+
+       int max_send_pkt_size = frag_size + sum_mds_hdr_plus_mdtm_hdr_plus_len;
 
        switch (req->msg.encoding) {
        case MDS_ENC_TYPE_FULL:
@@ -2347,11 +2384,11 @@ uint32_t mdtm_frag_and_send(MDTM_SEND_RE
                        body = calloc(1, len_buf);
                        if (i == 1) {
                                p8 = (uint8_t *)m_MMGR_DATA_AT_START(usrbuf,
-                                                                 (len_buf - 
SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN),
-                                                                 (char *)(body 
+ SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN));
-
-                               if (p8 != (body + 
SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN))
-                                       memcpy((body + 
SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN), p8, (len_buf - 
SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN));
+                                                                 (len_buf - 
sum_mds_hdr_plus_mdtm_hdr_plus_len),
+                                                                 (char *)(body 
+ sum_mds_hdr_plus_mdtm_hdr_plus_len));
+
+                               if (p8 != (body + 
sum_mds_hdr_plus_mdtm_hdr_plus_len))
+                                       memcpy((body + 
sum_mds_hdr_plus_mdtm_hdr_plus_len), p8, (len_buf - 
sum_mds_hdr_plus_mdtm_hdr_plus_len));
 
                                if (NCSCC_RC_SUCCESS != mdtm_add_mds_hdr(body, 
req)) {
                                        m_MDS_LOG_ERR("MDTM: frg MDS hdr 
addition failed\n");
@@ -2370,9 +2407,9 @@ uint32_t mdtm_frag_and_send(MDTM_SEND_RE
                                    ("MDTM:Sending message with Service 
Seqno=%d, Fragment Seqnum=%d, frag_num=%d, TO Dest_Tipc_id=<0x%08x:%u>",
                                     req->svc_seq_num, seq_num, frag_val, 
id.node, id.ref);
                                mdtm_sendto(body, len_buf, id);
-                               m_MMGR_REMOVE_FROM_START(&usrbuf, len_buf - 
SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN);
+                               m_MMGR_REMOVE_FROM_START(&usrbuf, len_buf - 
sum_mds_hdr_plus_mdtm_hdr_plus_len);
                                free(body);
-                               len = len - (len_buf - 
SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN);
+                               len = len - (len_buf - 
sum_mds_hdr_plus_mdtm_hdr_plus_len);
                        } else {
                                p8 = (uint8_t *)m_MMGR_DATA_AT_START(usrbuf, 
len_buf - MDTM_FRAG_HDR_PLUS_LEN_2,
                                                                  (char *)(body 
+ MDTM_FRAG_HDR_PLUS_LEN_2));
@@ -2533,6 +2570,16 @@ static uint32_t mdtm_mcast_sendto(void *
 static uint32_t mdtm_add_mds_hdr(uint8_t *buffer, MDTM_SEND_REQ *req)
 {
        uint8_t prot_ver = 0, enc_snd_type = 0;
+       uint16_t mds_hdr_len;
+       int version = req->msg_arch_word & 0x7;
+       if (version > 1) {
+               mds_hdr_len = (MDS_HDR_LEN + gl_mds_mcm_cb->node_name_len);
+       } else {
+               /* Old MDS_HDR_LEN = 24 */
+               mds_hdr_len  = (MDS_HDR_LEN - 1);
+               syslog(LOG_ERR, "LOG: inservice-testing sending message to Old 
version Node  mds_hdr_len : %d", mds_hdr_len);
+       }
+
 #ifdef MDS_CHECKSUM_ENABLE_FLAG
        uint8_t zero_8 = 0;
 #endif
@@ -2564,7 +2611,7 @@ static uint32_t mdtm_add_mds_hdr(uint8_t
 
        /* MDS HDR */
        ncs_encode_8bit(&ptr, prot_ver);
-       ncs_encode_16bit(&ptr, (uint16_t)MDS_HDR_LEN);  /* Will be updated if 
any additional options are being added at the end */
+       ncs_encode_16bit(&ptr, (uint16_t)mds_hdr_len);  /* Will be updated if 
any additional options are being added at the end */
        ncs_encode_32bit(&ptr, req->svc_seq_num);
        ncs_encode_8bit(&ptr, enc_snd_type);
        ncs_encode_16bit(&ptr, req->src_pwe_id);
@@ -2594,7 +2641,10 @@ static uint32_t mdtm_add_mds_hdr(uint8_t
 
        ncs_encode_32bit(&ptr, xch_id);
        ncs_encode_16bit(&ptr, req->msg_fmt_ver);       /* New field */
-
+       if (version > 1) {
+               ncs_encode_8bit(&ptr, gl_mds_mcm_cb->node_name_len); /* New 
field 1 */
+               ncs_encode_octets(&ptr, (uint8_t *)gl_mds_mcm_cb->node_name, 
gl_mds_mcm_cb->node_name_len); /* New field 2 */
+       }
        return NCSCC_RC_SUCCESS;
 }
 
diff --git a/osaf/libs/core/mds/mds_main.c b/osaf/libs/core/mds/mds_main.c
--- a/osaf/libs/core/mds/mds_main.c
+++ b/osaf/libs/core/mds/mds_main.c
@@ -395,15 +395,47 @@ uint32_t mds_lib_req(NCS_LIB_REQ_INFO *r
                        }
                }
 
-               /* Get tipc_mcast_enabled */
-               if ((ptr = getenv("MDS_TIPC_MCAST_ENABLED")) != NULL) {
-                       tipc_mcast_enabled = atoi(ptr);
-                       if (tipc_mcast_enabled != false)
-                               tipc_mcast_enabled = true;
-                               
-                       m_MDS_LOG_DBG("MDS: TIPC_MCAST_ENABLED: %d  Set 
argument \n",tipc_mcast_enabled);       
+#ifdef ENABLE_TIPC_TRANSPORT
+               int rc;
+               struct stat sockStat;
+               FILE *fp;
+
+               rc = stat(MDS_MDTM_CONNECT_PATH, &sockStat);
+               if (rc != 0) {
+                       /* dtm intra server not exists */
+                       tipc_mode_enabled = true;
                }
 
+               if (tipc_mode_enabled) {
+                       /* Get tipc_mcast_enabled */
+                       if ((ptr = getenv("MDS_TIPC_MCAST_ENABLED")) != NULL) {
+                               tipc_mcast_enabled = atoi(ptr);
+                               if (tipc_mcast_enabled != false)
+                                       tipc_mcast_enabled = true;
+
+                               m_MDS_LOG_DBG("MDS: TIPC_MCAST_ENABLED: %d  Set 
argument \n",tipc_mcast_enabled);       
+                       }
+
+               }
+#endif
+               fp = fopen(PKGSYSCONFDIR "/node_name", "r");
+               if (fp == NULL) {
+                       LOG_ER("MDS:TIPC Could not open file  node_name ");
+                       mds_mcm_destroy();
+                       osaf_mutex_unlock_ordie(&gl_mds_library_mutex);
+                       return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
+               }
+               if (EOF == fscanf(fp, "%s", gl_mds_mcm_cb->node_name)) {
+                       fclose(fp);
+                       LOG_ER("MDS:TIPC Could not get node name ");
+                       mds_mcm_destroy();
+                       osaf_mutex_unlock_ordie(&gl_mds_library_mutex);
+                       return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE);
+               }
+               fclose(fp);
+               gl_mds_mcm_cb->node_name_len = 
(uint8_t)strlen(gl_mds_mcm_cb->node_name);
+               m_MDS_LOG_DBG("MDS:TIPC config->node_name : %s", 
gl_mds_mcm_cb->node_name);
+
                /*  to use cluster id in mds prefix? */
 
                /* Get gl_mds_log_level */
@@ -599,15 +631,6 @@ uint32_t mds_lib_req(NCS_LIB_REQ_INFO *r
 void mds_init_transport(void)
 {
 #ifdef ENABLE_TIPC_TRANSPORT
-       int rc;
-       struct stat sockStat;
-
-       rc = stat(MDS_MDTM_CONNECT_PATH, &sockStat);
-       if (rc != 0) {
-               /* dtm intra server not exists */
-               tipc_mode_enabled = true;
-       }
-
        if (tipc_mode_enabled) {
                mds_mdtm_init = mdtm_tipc_init;
                mds_mdtm_destroy = mdtm_tipc_destroy;

------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to