Hi Mahesh, I see you are using constant HOST_NAME_MAX for node_name string.
Referring to following page, it states HOST_NAME_MAX value possibly "is unspecified." http://pubs.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html With _POSIX_HOST_NAME_MAX constant, the value is determined. Its value is 255. I wonder it is safe to use HOST_NAME_MAX or not. Regards, Vu. >-----Original Message----- >From: [email protected] [mailto:[email protected]] >Sent: Friday, February 05, 2016 1:26 PM >To: [email protected]; [email protected]; >[email protected]; [email protected] >Cc: [email protected] >Subject: [devel] [PATCH 1 of 3] MDS:TIPC include node name as a part of >callback_info events [#1522] > > 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 ------------------------------------------------------------------------------ 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
