You are right , the less time taken is with #654 Patch , I just corrected it please check below.
-AVM On 2/4/2014 5:48 PM, Anders Björnerstedt wrote: > Hi Mahesh, > Under each point both pairs of figures are headed by "Without #654 Patch". > I think one of them should bw "With #654 patch" right ? > > /AndersBj > > -----Original Message----- > From: A V Mahesh [mailto:mahesh.va...@oracle.com] > Sent: den 4 februari 2014 12:00 > To: praveen malviya > Cc: opensaf-devel@lists.sourceforge.net > Subject: Re: [devel] [PATCH 1 of 3] MDS: TIPC performance improvement [#654] > > Sorry for that , > > 1) Standby Controller jointing the Active Controller by Syncing 300K of > objects > in IMM with PBE enabled ( 2 node Controller configuration 'SC-2' > joined the 'SC-1' as Standby ) > > Performance Statistics Without #654 Patch : > TIPC : 100 seconds > TCP : 101 seconds > > Performance Statistics Without #654 Patch : [AVM] The below the with #654 Patch which is 5 time performance improvement: > TIPC : 18 seconds > TCP : 20 seconds > > 2) 3 Node's simultaneously joining the 'SC-1' by loading /syncing 300K of > objects in IMM with PBE enabled > (4 node 2-Controller 2-payload configuration- 'SC-2','PL-3' & 'PL-4' > joined the cluster simultaneously ) > > Performance Statistics Without #654 Patch : > TIPC : 115 seconds > TCP : 116 seconds > > Performance Statistics Without #654 Patch : [AVM] The below the with #654 Patch which is 5 time performance improvement: > TIPC : 26 seconds > TCP : 26 seconds > > 3) Time taken to Open A Checkpoint on node B with checkpoint memory Used > :15000000 bytes > (2 node's SC-1' & 'SC-2' nodes are in the cluster now with patch TCP > case SOCK_SND_RCV_BUF_SIZE > is configured to 16777216 bytes previously it was not configurable > previously) > > Performance Statistics Without #654 Patch : > TIPC : 9 seconds > TCP : Doesn't work & Timeout > > Performance Statistics Without #654 Patch : [AVM] The below the with #654 Patch which is 2/3 rd time performance improvement: > TIPC : 6 seconds > TCP : 7 seconds > > -AVM > > On 2/4/2014 4:27 PM, praveen malviya wrote: >> I am not seeing any attachment. >> Can you please send it in text format. >> >> >> Thanks, >> Praveen >> On 04-Feb-14 4:11 PM, A V Mahesh wrote: >>> People who ware viewing Mail text format didint received the >>> performance statistics Table , please find it as attachment . >>> >>> -AVM >>> >>> On 2/4/2014 3:59 PM, A V Mahesh wrote: >>>> Hi All, >>>> >>>> This patch adjusted the MDS send fragmentation size from 1400 to >>>> 65479. This value is derived from TIPC_MAX_USER_MSG_SIZE >>>> (linux/tipc.h) which is 66000 and TCP max packet size. >>>> >>>> Following are some performance statistics with and without the patch >>>> for your reference. The `cpuinfo` & `meminfo` of node is provide in >>>> attached `nodes_cpuinfo_meminfo.txt`file. >>>> >>>> The fragmentation size (65479) can be tuned or made configurable >>>> based on the review comments. >>>> >>>> The rest of the changes in the patch are related to backward >>>> compatibility. >>>> Patch 3, changes imm to max utilize this increased fragment size. >>>> >>>> >>>> >>>> IMP Note : While testing performance WITH patch , imm.db (300k >>>> objects ) is re-generate, In old imm.db the value of >>>> `opensafImmSyncBatchSize` attr of >>>> `safRdn=immManagement,safApp=safImmService` object is persistently >>>> saved with old value of 4096, it has to be updated to new value of >>>> 65479. >>>> >>>> -AVM >>>> >>>> On 1/29/2014 4:58 PM, mahesh.va...@oracle.com wrote: >>>>> osaf/libs/core/include/mds_papi.h | 4 +- >>>>> osaf/libs/core/include/ncsusrbuf.h | 17 ++- >>>>> osaf/libs/core/mds/include/mds_core.h | 25 +++ >>>>> osaf/libs/core/mds/include/mds_dt.h | 25 +++- >>>>> osaf/libs/core/mds/include/mds_dt2c.h | 1 + >>>>> osaf/libs/core/mds/include/mds_dt_tipc.h | 2 + >>>>> osaf/libs/core/mds/mds_c_api.c | 20 +++ >>>>> osaf/libs/core/mds/mds_c_db.c | 83 ++++++++++++ >>>>> osaf/libs/core/mds/mds_c_sndrcv.c | 2 +- >>>>> osaf/libs/core/mds/mds_dt_tipc.c | 206 >>>>> ++++++++++++++++++++++++++++-- >>>>> osaf/libs/core/mds/mds_dt_trans.c | 18 +- >>>>> 11 files changed, 374 insertions(+), 29 deletions(-) >>>>> >>>>> >>>>> 1) MDS fragmentation value changed from 1400 to >>>>> MDS_DIRECT_BUF_MAXSIZE (65535 maximum packet size)-(56 MDS header) >>>>> , #defined MDTM_NORMAL_MSG_FRAG_SIZE_MAX MDS_DIRECT_BUF_MAXSIZE . >>>>> >>>>> 2) MDS MDS_DIRECT_BUF_MAXSIZE value changed from 8000 to (65535 >>>>> maximum packet size)-(56 MDS header) , #defined >>>>> MDTM_NORMAL_MSG_FRAG_SIZE_MAX (65535 maximum packet >>>>> size)-(56 MDS header) >>>>> >>>>> 3) This PAYLOAD_BUF_SIZE value is suppose to be equal to >>>>> MDS_DIRECT_BUF_MAXSIZE >>>>> (65535 maximum packet size)-(56 MDS header) ,but in the previous >>>>> releases of Opensaf the value of TIPC inbuf size of >>>>> MDTM_RECV_BUFFER_SIZE >>>>> (mds_dt_tipc.c) >>>>> TIPC was limited to(8000+MDS header ) , we have in-service Upgrade >>>>> issue, so it is not possible to send the new MDS_DIRECT_BUF_MAXSIZE >>>>> (65535 maximum packet size)-(56 MDS header) value previous Opensaf >>>>> version nodes , so for the current release it is limited to 8000, >>>>> possibly adjust this in the future Opensaf releases to >>>>> MDS_DIRECT_BUF_MAXSIZE. >>>>> >>>>> >>>>> 4) To support in-service MDS TIPC Upgrade issue >>>>> MDTM_NORMAL_MSG_FRAG_SIZE_MIN is provide, and this fragment size is >>>>> used to send to previous version of Opensaf Node while in-service >>>>> Upgrade. >>>>> >>>>> In the previous releases of Opensaf the value of TIPC inbuf size of >>>>> MDTM_RECV_BUFFER_SIZE (mds_dt_tipc.c) TIPC was limited to(8000+MDS >>>>> header) , >>>>> we have in-service Upgrade issue, so it is not possible to send the >>>>> new MDS_DIRECT_BUF_MAXSIZE (65535 maximum packet size)-(56 MDS >>>>> header) value previous Opensaf version nodes , so for the current >>>>> release it is limited to 8000, possibly this will be removed in the >>>>> future Opensaf releases . >>>>> >>>>> 5) To handle in-service Upgrade of fragmentation changes , New node >>>>> do install & subscribe its Node Mds version. >>>>> the MDTM_NORMAL_MSG_FRAG_SIZE_MIN fragment size is used to send to >>>>> previous version of Opensaf Node while in-service Upgrade ,and the >>>>> old nodes will not publishes so we need to fragment to >>>>> MDTM_NORMAL_MSG_FRAG_SIZE_MIN >>>>> size.mds_mdtm_node_info_install_tipc() & >>>>> mds_mdtm_node_info_subscribe_tipc() >>>>> >>>>> 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 >>>>> @@ -57,6 +57,8 @@ extern "C" { >>>>> 1) Basic data type >>>>> \****************************************************************** >>>>> ****/ >>>>> >>>>> +/* The NODE version of MDS */ >>>>> +#define MDS_NODE_VERSION 1 >>>>> /* The version of MDS that this header ships with */ >>>>> #define MDS_MAJOR_VERSION 2 >>>>> #define MDS_MINOR_VERSION 1 >>>>> @@ -208,7 +210,7 @@ extern "C" { >>>>> #define NCSMDS_MAX_VDEST 32767 >>>>> #define NCSMDS_MAX_SVCS 1023 >>>>> -#define MDS_DIRECT_BUF_MAXSIZE 8000 >>>>> +#define MDS_DIRECT_BUF_MAXSIZE (65535 - 56) /*(65535 maximum >>>>> packet size)-(56 MDS header)*/ >>>>> typedef uint8_t *MDS_DIRECT_BUFF; >>>>> #define m_MDS_ALLOC_DIRECT_BUFF(size) mds_alloc_direct_buff(size) >>>>> #define m_MDS_FREE_DIRECT_BUFF(x) mds_free_direct_buff(x) diff >>>>> --git a/osaf/libs/core/include/ncsusrbuf.h >>>>> b/osaf/libs/core/include/ncsusrbuf.h >>>>> --- a/osaf/libs/core/include/ncsusrbuf.h >>>>> +++ b/osaf/libs/core/include/ncsusrbuf.h >>>>> @@ -47,8 +47,23 @@ >>>>> #ifdef __cplusplus >>>>> extern "C" { >>>>> #endif >>>>> + /* This PAYLOAD_BUF_SIZE value is suppose to be equal to >>>>> MDS_DIRECT_BUF_MAXSIZE , >>>>> + but in the previous releases of Opensaf the value of TIPC >>>>> inbuf size of >>>>> + MDTM_RECV_BUFFER_SIZE (mds_dt_tipc.c) TIPC was limited >>>>> to(8000+MDS header ) , >>>>> + we have in-service Upgrade issue, so it is not possible to >>>>> send the new >>>>> + MDS_DIRECT_BUF_MAXSIZE (65535 maximum packet size)-(56 MDS >>>>> header) >>>>> + value previous Opensaf version nodes , so for the current >>>>> release it is limited to 8000, >>>>> + possibly adjust this in the future Opensaf releases to >>>>> MDS_DIRECT_BUF_MAXSIZE. >>>>> -#define PAYLOAD_BUF_SIZE 1400 /* default size of packet_data >>>>> bufrs */ >>>>> + IMP TCP Note : Their is NO issue with TCP in-service >>>>> Upgrade ,The value of >>>>> + SO_RCVBUF & SO_SNDBUF of TCP sockets was set to 64000 ( >>>>> MDS_SND_RCV_SIZE) >>>>> + using setsockopt() ,the kernel doubles this value ,and >>>>> this doubled value is returned by >>>>> + getsockopt(). >>>>> + Replace PAYLOAD_BUF_SIZE 8000 value with >>>>> MDS_DIRECT_BUF_MAXSIZE (65535 maximum packet size)-(56 MDS header) >>>>> , >>>>> + after one cycle of in-service upgrade (below 4.4.FC >>>>> Opensaf rpms ) #define PAYLOAD_BUF_SIZE (65535 - 56) >>>>> + */ >>>>> + >>>>> +#define PAYLOAD_BUF_SIZE 8000 >>>>> /****************************************************************** >>>>> *********** >>>>> >>>>> 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 >>>>> @@ -240,6 +240,19 @@ typedef struct mds_vdest_info { >>>>> } MDS_VDEST_INFO; >>>>> +typedef struct mds_node_info { >>>>> + >>>>> + /* Indexing info */ >>>>> + NCS_PATRICIA_NODE node; >>>>> + >>>>> + /* Node info */ >>>>> + NODE_ID node_id; /* Serves as Node ID. Key for Patricia node */ >>>>> + uint16_t node_mds_ver; /* Node MDS version */ >>>>> + /* PWE and service list */ >>>>> + MDS_PWE_INFO *pwe_list; >>>>> + >>>>> +} MDS_NODE_INFO; >>>>> + >>>>> typedef struct mds_svc_info { >>>>> /* Indexing info */ >>>>> @@ -284,6 +297,7 @@ typedef struct mds_mcm_cb { >>>>> NCS_PATRICIA_TREE subtn_results; >>>>> NCS_PATRICIA_TREE svc_list; /* Tree of MDS_SVC_INFO >>>>> information */ >>>>> NCS_PATRICIA_TREE vdest_list; /* Tree of MDS_VDEST_INFO >>>>> information */ >>>>> + NCS_PATRICIA_TREE node_list; /* Tree of MDS_NODE_INFO >>>>> information */ >>>>> } MDS_MCM_CB; >>>>> /* Global MDSCB */ >>>>> @@ -376,6 +390,11 @@ extern uint32_t mds_vdest_tbl_get_subtn_ >>>>> extern uint32_t mds_vdest_tbl_get_vdest_info_cb(MDS_VDEST_ID >>>>> vdest_id, MDS_VDEST_INFO **vdest_info); >>>>> extern uint32_t mds_vdest_tbl_cleanup(void); >>>>> +/* NODE TABLE Operations */ >>>>> +extern uint32_t mds_node_tbl_add(NODE_ID node_id, uint16_t >>>>> node_mds_ver); >>>>> +extern uint32_t mds_node_tbl_del(NODE_ID node_id); extern uint32_t >>>>> +mds_node_tbl_query(NODE_ID node_id); >>>>> + >>>>> /* PWE TABLE Operations */ >>>>> extern uint32_t mds_pwe_tbl_add(MDS_VDEST_HDL vdest_hdl, >>>>> PW_ENV_ID pwe_id, MDS_PWE_HDL *pwe_hdl); @@ -512,6 +531,12 @@ >>>>> extern uint32_t mds_mcm_free_msg_uba_sta >>>>> #define m_MMGR_FREE_VDEST_INFO(p) m_NCS_MEM_FREE(p, >>>>> NCS_MEM_REGION_TRANSIENT, \ >>>>> NCS_SERVICE_ID_MDS, >>>>> MDS_MEM_VDEST_INFO) >>>>> +#define m_MMGR_ALLOC_NODE_INFO (MDS_NODE_INFO >>>>> *)m_NCS_MEM_ALLOC(sizeof(MDS_NODE_INFO), \ >>>>> + NCS_MEM_REGION_TRANSIENT, NCS_SERVICE_ID_MDS, >>>>> MDS_MEM_NODE_INFO) >>>>> + >>>>> +#define m_MMGR_FREE_NODE_INFO(p) m_NCS_MEM_FREE(p, >>>>> NCS_MEM_REGION_TRANSIENT, \ >>>>> + NCS_SERVICE_ID_MDS, MDS_MEM_NODE_INFO) >>>>> + >>>>> #define m_MMGR_ALLOC_PWE_INFO (MDS_PWE_INFO >>>>> *)m_NCS_MEM_ALLOC(sizeof(MDS_PWE_INFO), \ NCS_MEM_REGION_TRANSIENT, >>>>> \ >>>>> NCS_SERVICE_ID_MDS, >>>>> MDS_MEM_PWE_INFO) >>>>> 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 >>>>> @@ -109,10 +109,28 @@ typedef struct mdtm_reassembly_queue { >>>>> #define MDTM_MAX_DIRECT_BUFF_SIZE MDTM_MAX_SEGMENT_SIZE >>>>> -#define MDTM_NORMAL_MSG_FRAG_SIZE 1400 >>>>> +/* To support in-service Upgrade issue MDTM_NORMAL_MSG_FRAG_SIZE_MIN >>>>> + is provide, and this fragment size is used to send to previous >>>>> version of Opensaf Node >>>>> + while in-service Upgrade. >>>>> -#define MDTM_RECV_BUFFER_SIZE >>>>> ((MDS_DIRECT_BUF_MAXSIZE>MDTM_NORMAL_MSG_FRAG_SIZE)? \ >>>>> - >>>>> (MDS_DIRECT_BUF_MAXSIZE+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN):(MDTM_N >>>>> ORMAL_MSG_FRAG_SIZE+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN)) >>>>> + In the previous releases of Opensaf the value of TIPC inbuf >>>>> size of >>>>> + MDTM_RECV_BUFFER_SIZE (mds_dt_tipc.c) TIPC was limited >>>>> to(8000+MDS header) , >>>>> + we have in-service Upgrade issue, so it is not possible to send >>>>> the new >>>>> + MDS_DIRECT_BUF_MAXSIZE (65535 maximum packet size)-(56 MDS header) >>>>> + value previous Opensaf version nodes , so for the current >>>>> release it is limited to 8000, >>>>> + possibly adjust this in the future Opensaf releases to >>>>> MDS_DIRECT_BUF_MAXSIZE. >>>>> + >>>>> + IMP TCP Note : Their is NO issue with TCP in-service Upgrade >>>>> ,The value of >>>>> + SO_RCVBUF & SO_SNDBUF of TCP sockets was set to 64000 ( >>>>> MDS_SND_RCV_SIZE) >>>>> + using setsockopt() ,the kernel doubles this value ,and this >>>>> doubled value is returned by >>>>> + getsockopt(). So MDTM_NORMAL_MSG_FRAG_SIZE_MAX size is used to >>>>> send for >>>>> + for both previous & current versitions of Opensaf nodes which >>>>> are using MDS TCP as transport*/ >>>>> +#define MDTM_NORMAL_MSG_FRAG_SIZE_MIN 8000 >>>>> + >>>>> +#define MDTM_NORMAL_MSG_FRAG_SIZE_MAX MDS_DIRECT_BUF_MAXSIZE >>>>> + >>>>> +#define MDTM_RECV_BUFFER_SIZE >>>>> ((MDS_DIRECT_BUF_MAXSIZE>MDTM_NORMAL_MSG_FRAG_SIZE_MAX)? \ >>>>> + >>>>> (MDS_DIRECT_BUF_MAXSIZE+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN):(MDTM_NORMAL_MSG_FRAG_SIZE_MAX+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN)) >>>>> /* Prefixes and defines regarding to the MDS_TIPC*/ >>>>> @@ -124,6 +142,7 @@ typedef enum { >>>>> MDS_PCON_INST_TYPE = 0x00030000, >>>>> MDS_NODE_INST_TYPE = 0x00000000, >>>>> MDS_PROCESS_INST_TYPE = 0x00050000, >>>>> + MDS_NODE_INFO_TYPE = 0x00060000, >>>>> } MDS_MDTM_INST_TYPES; >>>>> /* Common to TCP and TIPC */ >>>>> 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 >>>>> @@ -223,6 +223,7 @@ typedef enum { >>>>> MDS_MEM_HDL_LIST, >>>>> MDS_MEM_CACHED_EVENTS_LIST, >>>>> MDS_MEM_BCAST_BUFF_LIST, >>>>> + MDS_MEM_NODE_INFO, >>>>> } MDS_MEM_SUB_ID; >>>>> /* ******************************************** */ diff --git >>>>> a/osaf/libs/core/mds/include/mds_dt_tipc.h >>>>> b/osaf/libs/core/mds/include/mds_dt_tipc.h >>>>> --- a/osaf/libs/core/mds/include/mds_dt_tipc.h >>>>> +++ b/osaf/libs/core/mds/include/mds_dt_tipc.h >>>>> @@ -92,6 +92,8 @@ extern uint32_t mds_mdtm_vdest_subscribe >>>>> extern uint32_t mds_mdtm_vdest_unsubscribe_tipc(MDS_VDEST_ID >>>>> vdest_id, MDS_SUBTN_REF_VAL subtn_ref_val); >>>>> extern uint32_t mds_mdtm_tx_hdl_register_tipc(MDS_DEST adest); >>>>> extern uint32_t mds_mdtm_tx_hdl_unregister_tipc(MDS_DEST adest); >>>>> +extern uint32_t mds_mdtm_node_info_install_tipc(); >>>>> +extern uint32_t >>>>> mds_mdtm_node_info_subscribe_tipc(MDS_SUBTN_REF_VAL *subtn_ref_val); >>>>> extern uint32_t mds_mdtm_send_tipc(MDTM_SEND_REQ *req); >>>>> 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 >>>>> @@ -3782,6 +3782,23 @@ uint32_t mds_mcm_init(void) >>>>> return NCSCC_RC_FAILURE; >>>>> } >>>>> + /* NODE TREE */ >>>>> + memset(&pat_tree_params, 0, sizeof(NCS_PATRICIA_PARAMS)); >>>>> + pat_tree_params.key_size = sizeof(NODE_ID); >>>>> + if (NCSCC_RC_SUCCESS != >>>>> ncs_patricia_tree_init(&gl_mds_mcm_cb->node_list, >>>>> &pat_tree_params)) { >>>>> + m_MDS_LOG_ERR("MCM_API : patricia_tree_init: subscription: >>>>> failure, L mds_mcm_init"); >>>>> + if (NCSCC_RC_SUCCESS != >>>>> ncs_patricia_tree_destroy(&gl_mds_mcm_cb->svc_list)) { >>>>> + m_MDS_LOG_ERR("MCM_API : patricia_tree_destroy: >>>>> service :failure, L mds_mcm_init"); >>>>> + } >>>>> + if (NCSCC_RC_SUCCESS != >>>>> ncs_patricia_tree_destroy(&gl_mds_mcm_cb->vdest_list)) { >>>>> + m_MDS_LOG_ERR("MCM_API : patricia_tree_destroy: vdest >>>>> :failure, L mds_mcm_init"); >>>>> + } >>>>> + if (NCSCC_RC_SUCCESS != >>>>> ncs_patricia_tree_destroy(&gl_mds_mcm_cb->subtn_results)) { >>>>> + m_MDS_LOG_ERR("MCM_API : patricia_tree_destroy: >>>>> subtn_results :failure, L mds_mcm_init"); >>>>> + } >>>>> + return NCSCC_RC_FAILURE; >>>>> + } >>>>> + >>>>> /* Add VDEST for ADEST entry in tree */ >>>>> vdest_for_adest_node = m_MMGR_ALLOC_VDEST_INFO; >>>>> memset(vdest_for_adest_node, 0, sizeof(MDS_VDEST_INFO)); @@ >>>>> -3824,6 +3841,9 @@ uint32_t mds_mcm_destroy(void) >>>>> /* VDEST TREE */ >>>>> ncs_patricia_tree_destroy(&gl_mds_mcm_cb->vdest_list); >>>>> + /* NODE TREE */ >>>>> + ncs_patricia_tree_destroy(&gl_mds_mcm_cb->node_list); >>>>> + >>>>> /* Free MCM control block */ >>>>> m_MMGR_FREE_MCM_CB(gl_mds_mcm_cb); >>>>> diff --git a/osaf/libs/core/mds/mds_c_db.c >>>>> b/osaf/libs/core/mds/mds_c_db.c >>>>> --- a/osaf/libs/core/mds/mds_c_db.c >>>>> +++ b/osaf/libs/core/mds/mds_c_db.c >>>>> @@ -376,6 +376,89 @@ uint32_t mds_vdest_tbl_cleanup(void) >>>>> /* ******************************************** */ >>>>> /* ******************************************** */ >>>>> +/* NODE TABLE Operations */ >>>>> +/* ******************************************** */ >>>>> +/* ******************************************** */ >>>>> +/********************************************************* >>>>> + Function NAME: mds_node_tbl_add >>>>> + *********************************************************/ >>>>> +uint32_t mds_node_tbl_add(NODE_ID node_id, uint16_t node_mds_ver) >>>>> +{ >>>>> + MDS_NODE_INFO *node_info; >>>>> + >>>>> + m_MDS_LOG_DBG("MCM_DB : Entering : mds_node_tbl_add"); >>>>> + >>>>> + /* Check if node is not already created */ >>>>> + if (ncs_patricia_tree_get(&gl_mds_mcm_cb->node_list, (uint8_t >>>>> *)&node_id) != NULL) { >>>>> + m_MDS_LOG_DBG("MCM_DB : Leaving : F : mds_node_tbl_add : >>>>> VDEST already present"); >>>>> + return NCSCC_RC_FAILURE; >>>>> + } >>>>> + >>>>> + >>>>> + node_info = m_MMGR_ALLOC_NODE_INFO; >>>>> + memset(node_info, 0, sizeof(MDS_NODE_INFO)); >>>>> + >>>>> + node_info->node_id = node_id; >>>>> + node_info->node_mds_ver = node_mds_ver; >>>>> + >>>>> + >>>>> + m_MDS_LOG_DBG("node_id=%d node_mds_ver=%d", >>>>> node_info->node_id, node_info->node_mds_ver); >>>>> + node_info->node.key_info = (uint8_t *)&node_info->node_id; >>>>> + >>>>> + ncs_patricia_tree_add(&gl_mds_mcm_cb->node_list, >>>>> (NCS_PATRICIA_NODE *)&node_info->node); >>>>> + >>>>> + m_MDS_LOG_DBG("MCM_DB : Leaving : S : mds_node_tbl_added >>>>> node_id : %d",node_id); >>>>> + return NCSCC_RC_SUCCESS; >>>>> +} >>>>> + >>>>> +/********************************************************* >>>>> + Function NAME: mds_node_tbl_del >>>>> + *********************************************************/ >>>>> +uint32_t mds_node_tbl_del(NODE_ID node_id) { >>>>> + MDS_NODE_INFO *node_info = NULL; >>>>> + >>>>> + m_MDS_LOG_DBG("MCM_DB : Entering : mds_node_tbl_del"); >>>>> + >>>>> + /* Check if node is already created */ >>>>> + node_info = (MDS_NODE_INFO >>>>> *)ncs_patricia_tree_get(&gl_mds_mcm_cb->node_list, (uint8_t >>>>> *)&node_id); >>>>> + if (node_info == NULL) { >>>>> + m_MDS_LOG_DBG("MCM_DB : Leaving : F : mds_node_tbl_del : >>>>> NODE_ID not present"); >>>>> + return NCSCC_RC_FAILURE; >>>>> + } else { >>>>> + >>>>> + ncs_patricia_tree_del(&gl_mds_mcm_cb->node_list, >>>>> (NCS_PATRICIA_NODE *)node_info); >>>>> + >>>>> + /* Free memory of NODE_INFO */ >>>>> + m_MMGR_FREE_NODE_INFO(node_info); >>>>> + } >>>>> + m_MDS_LOG_DBG("MCM_DB : Leaving : S : mds_node_tbl_del"); >>>>> + return NCSCC_RC_SUCCESS; >>>>> +} >>>>> + >>>>> +/********************************************************* >>>>> + Function NAME: mds_node_tbl_query >>>>> +*********************************************************/ >>>>> +uint32_t mds_node_tbl_query(NODE_ID node_id) { >>>>> + MDS_NODE_INFO *node_info = NULL; >>>>> + >>>>> + m_MDS_LOG_DBG("MCM_DB : Entering : mds_node_tbl_query"); >>>>> + >>>>> + /* Check if node is already created */ >>>>> + node_info = (MDS_NODE_INFO >>>>> *)ncs_patricia_tree_get(&gl_mds_mcm_cb->node_list, (uint8_t >>>>> *)&node_id); >>>>> + if (node_info == NULL) { >>>>> + m_MDS_LOG_DBG("MCM_DB : Leaving : F : mds_node_tbl_query : >>>>> NODE_ID not present"); >>>>> + return NCSCC_RC_FAILURE; >>>>> + } else { >>>>> + m_MDS_LOG_DBG("MCM_DB : Leaving : S : mds_node_tbl_query"); >>>>> + return NCSCC_RC_SUCCESS; >>>>> + } >>>>> + >>>>> +} >>>>> + >>>>> +/* ******************************************** */ >>>>> +/* ******************************************** */ >>>>> /* PWE TABLE Operations */ >>>>> /* ******************************************** */ >>>>> /* ******************************************** */ 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 >>>>> @@ -34,7 +34,7 @@ >>>>> 2. Direct send in which the user provides MDS with a flat >>>>> buffer pointer and length >>>>> of the buffer. Memory will be allocated to the flat >>>>> buffer by using the MDS api >>>>> m_MDS_ALLOC_DIRECT_BUFF(size) (where size is the >>>>> number of bytes of memory to be >>>>> - allocated and is limited to 8000 bytes). As buffer >>>>> pointer is allocated by MDS, in all the >>>>> + allocated and is limited to MDS_DIRECT_BUF_MAXSIZE >>>>> bytes). As buffer pointer is allocated by MDS, in all the >>>>> cases of success and failure of DIRECT sends, memory >>>>> will be freed by the MDS and application >>>>> should not free the memory. >>>>> 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 >>>>> @@ -85,6 +85,8 @@ uint32_t mds_mdtm_vdest_install_tipc(MDS >>>>> uint32_t mds_mdtm_vdest_uninstall_tipc(MDS_VDEST_ID vdest_id); >>>>> uint32_t mds_mdtm_vdest_subscribe_tipc(MDS_VDEST_ID vdest_id, >>>>> MDS_SUBTN_REF_VAL *subtn_ref_val); >>>>> uint32_t mds_mdtm_vdest_unsubscribe_tipc(MDS_VDEST_ID vdest_id, >>>>> MDS_SUBTN_REF_VAL subtn_ref_val); >>>>> +uint32_t mds_mdtm_node_info_install_tipc(); >>>>> +uint32_t mds_mdtm_node_info_subscribe_tipc(MDS_SUBTN_REF_VAL >>>>> *subtn_ref_val); >>>>> uint32_t mds_mdtm_tx_hdl_register_tipc(MDS_DEST adest); >>>>> uint32_t mds_mdtm_tx_hdl_unregister_tipc(MDS_DEST adest); >>>>> @@ -128,6 +130,10 @@ static MDS_SUBTN_REF_VAL handle; >>>>> static uint16_t num_subscriptions; >>>>> uint32_t mdtm_global_frag_num; >>>>> +#define MDTM_MAX_SEND_PKT_SIZE >>>>> (MDTM_NORMAL_MSG_FRAG_SIZE_MAX+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN) >>>>> /* Includes the 30 header bytes(2+8+20) */ >>>>> +static uint32_t msg_frag_size = MDTM_NORMAL_MSG_FRAG_SIZE_MAX; >>>>> +static uint32_t max_send_pkt_size = MDTM_MAX_SEND_PKT_SIZE; >>>>> + >>>>> /********************************************************* >>>>> Function NAME: mdtm_tipc_init @@ -158,6 +164,7 @@ uint32_t >>>>> mdtm_tipc_init(NODE_ID nodeid, >>>>> num_subscriptions = 0; >>>>> handle = 0; >>>>> mdtm_global_frag_num = 0; >>>>> + MDS_SUBTN_REF_VAL subtn_ref_ptr; >>>>> /* REASSEMBLY TREE */ >>>>> memset(&pat_tree_params, 0, sizeof(pat_tree_params)); @@ >>>>> -307,6 +314,21 @@ uint32_t mdtm_tipc_init(NODE_ID nodeid, >>>>> } else { >>>>> m_MDS_LOG_INFO("MDTM: Successfully set default >>>>> socket option TIPC_IMP = %d", TIPCIMPORTANCE); >>>>> } >>>>> + /* To handle in-service Upgrade of fragmentation changes , >>>>> theMDTM_NORMAL_MSG_FRAG_SIZE_MIN >>>>> + fragment size is used to send to previous version of >>>>> Opensaf Node while in-service Upgrade , >>>>> + so the only new node do install & subscribe its Node Mds >>>>> version >>>>> + ( old nodes will not publishes so we need to fragment to >>>>> MDTM_NORMAL_MSG_FRAG_SIZE_MIN size. >>>>> + >>>>> + In the previous releases of Opensaf the value of TIPC inbuf >>>>> size of >>>>> + MDTM_RECV_BUFFER_SIZE (mds_dt_tipc.c) TIPC was limited >>>>> to(8000+MDS header) */ >>>>> + if (mds_mdtm_node_info_install_tipc() != NCSCC_RC_SUCCESS) { >>>>> + LOG_ER("MDTM: Can't mds_mdtm_node_info_install_tipc >>>>> TIPC_IMP err \n"); >>>>> + osafassert(0); >>>>> + } >>>>> + if (mds_mdtm_node_info_subscribe_tipc(&subtn_ref_ptr) != >>>>> NCSCC_RC_SUCCESS) { >>>>> + LOG_ER("MDTM: Can't mds_mdtm_node_info_subscribe_tipc >>>>> TIPC_IMP err \n"); >>>>> + osafassert(0); >>>>> + } >>>>> return NCSCC_RC_SUCCESS; >>>>> } >>>>> @@ -1016,11 +1038,43 @@ static uint32_t mdtm_process_discovery_e >>>>> } >>>>> break; >>>>> - >>>>> - default: >>>>> + case MDS_NODE_INFO_TYPE: >>>>> + { >>>>> + /* To handle in-service Upgrade of fragmentation >>>>> changes , >>>>> + theMDTM_NORMAL_MSG_FRAG_SIZE_MIN fragment size is >>>>> used to send >>>>> + to previous version of Opensaf Node while >>>>> in-service Upgrade , >>>>> + so the only new node publishes its Node Mds version >>>>> + ( old nodes will not publishes so we need to >>>>> fragment to >>>>> + MDTM_NORMAL_MSG_FRAG_SIZE_MIN size. >>>>> + >>>>> + In the previous releases of Opensaf the value of >>>>> TIPC inbuf size of >>>>> + MDTM_RECV_BUFFER_SIZE (mds_dt_tipc.c) TIPC was >>>>> limited to(8000+MDS header) */ >>>>> + >>>>> + uint32_t node_status = 0; >>>>> + NODE_ID node_id = 0; >>>>> + uint32_t node_ver = 0; >>>>> + >>>>> + node_ver = (uint32_t)lower; >>>>> + >>>>> + m_MDS_LOG_INFO("MDTM: Received NODE event"); >>>>> + >>>>> + node_status = m_MDS_CHECK_TIPC_NODE_ID_RANGE(node); >>>>> + >>>>> + if (NCSCC_RC_SUCCESS == node_status) { >>>>> + node_id = >>>>> ((NODE_ID)(m_MDS_GET_NCS_NODE_ID_FROM_TIPC_NODE_ID(node))); >>>>> + >>>>> + } else { >>>>> + LOG_ER("MDTM: Dropping the node event,as the TIPC >>>>> NODE_ID is not in the prescribed range=0x%08x, Event type=%d", >>>>> + node, discovery_event); >>>>> + return NCSCC_RC_FAILURE; >>>>> + } >>>>> + mds_node_tbl_add(node_id,node_ver); >>>>> + } >>>>> + break; >>>>> + default: >>>>> { >>>>> m_MDS_LOG_ERR >>>>> - ("MDTM: TIPC EVENT UNSUPPORTED (default). If this >>>>> case comes this should assert as there no other events being >>>>> processed"); >>>>> + ("MDTM: TIPC EVENT UNSUPPORTED (default). If this >>>>> case comes this should assert as there no other events being >>>>> processed"); >>>>> return NCSCC_RC_FAILURE; >>>>> } >>>>> break; >>>>> @@ -1530,6 +1584,107 @@ uint32_t mds_mdtm_svc_subscribe_tipc(PW_ >>>>> } >>>>> /********************************************************* >>>>> + Function NAME: mds_mdtm_node_info_install_tipc >>>>> + >>>>> + DESCRIPTION: >>>>> + >>>>> + ARGUMENTS: >>>>> + >>>>> + RETURNS: 1 - NCSCC_RC_SUCCESS >>>>> + 2 - NCSCC_RC_FAILURE >>>>> + >>>>> +*********************************************************/ >>>>> +uint32_t mds_mdtm_node_info_install_tipc() { >>>>> + /* >>>>> + STEP 1: Bind to socket BSRSock with Tipc name sequence >>>>> + TIPC Name: >>>>> + <MDS-prefix, MDS_NODE_INFO_TYPE, 0> >>>>> + TIPC Range: >>>>> + <0,ROLE=0,POLICY=0,NODE_VERSION > to >>>>> + <0,ROLE=0,POLICY=0,NODE_VERSION > >>>>> + */ >>>>> + struct sockaddr_tipc server_addr; >>>>> + uint32_t server_type = 0, server_inst = 0; >>>>> + >>>>> + memset(&server_addr, 0, sizeof(server_addr)); >>>>> + server_addr.family = AF_TIPC; >>>>> + >>>>> + server_addr.addrtype = TIPC_ADDR_NAMESEQ; >>>>> + >>>>> + server_type = server_type | MDS_TIPC_PREFIX | MDS_NODE_INFO_TYPE; >>>>> + server_inst |= MDS_NODE_VERSION; >>>>> + >>>>> + server_addr.addr.nameseq.type = server_type; >>>>> + server_addr.addr.nameseq.lower = server_inst; >>>>> + server_addr.addr.nameseq.upper = server_inst; >>>>> + server_addr.scope = TIPC_CLUSTER_SCOPE; >>>>> + >>>>> + if (0 != bind(tipc_cb.BSRsock, (struct sockaddr >>>>> *)&server_addr, sizeof(server_addr))) { >>>>> + m_MDS_LOG_ERR("MDTM: MDS-NODE-INFO-INSTALL Failure err >>>>> :%s\n", strerror(errno)); >>>>> + return NCSCC_RC_FAILURE; >>>>> + } >>>>> + return NCSCC_RC_SUCCESS; >>>>> +} >>>>> + >>>>> +/********************************************************* >>>>> + >>>>> + Function NAME: mds_mdtm_node_info_subscribe_tipc >>>>> + >>>>> + DESCRIPTION: >>>>> + >>>>> + ARGUMENTS: >>>>> + >>>>> + RETURNS: 1 - NCSCC_RC_SUCCESS >>>>> + 2 - NCSCC_RC_FAILURE >>>>> + >>>>> +*********************************************************/ >>>>> +uint32_t mds_mdtm_node_info_subscribe_tipc(MDS_SUBTN_REF_VAL >>>>> *subtn_ref_val) >>>>> +{ >>>>> + /* >>>>> + STEP 1: Subscribe to socket DSock with Tipc name sequence >>>>> + TIPC Name: >>>>> + <MDS-prefix, VDEST_INST_TYPE, 0> >>>>> + TIPC Range: >>>>> + <0,ROLE=0,POLICY=0,VDEST_ID > to >>>>> + <0,ROLE=0,POLICY=0,VDEST_ID > >>>>> + */ >>>>> + >>>>> + uint32_t inst = 0, server_type = 0; >>>>> + struct tipc_subscr subscr; >>>>> + >>>>> + if (num_subscriptions > MAX_SUBSCRIPTIONS) { >>>>> + m_MDS_LOG_ERR("MDTM: SYSTEM CRITICAL Crossing =%d >>>>> subscriptions\n", num_subscriptions); >>>>> + if (num_subscriptions > MAX_SUBSCRIPTIONS_RETURN_ERROR) { >>>>> + m_MDS_LOG_ERR >>>>> + ("MDTM: SYSTEM has crossed the max =%d >>>>> subscriptions , Returning failure to the user", >>>>> + MAX_SUBSCRIPTIONS_RETURN_ERROR); >>>>> + return NCSCC_RC_FAILURE; >>>>> + } >>>>> + } >>>>> + >>>>> + server_type = server_type | MDS_TIPC_PREFIX | MDS_NODE_INFO_TYPE; >>>>> + inst |= MDS_NODE_VERSION; >>>>> + memset(&subscr, 0, sizeof(subscr)); >>>>> + subscr.seq.type = HTONL(server_type); >>>>> + subscr.seq.lower = HTONL(inst); >>>>> + subscr.seq.upper = HTONL(inst); >>>>> + subscr.timeout = HTONL(FOREVER); >>>>> + subscr.filter = HTONL(TIPC_SUB_PORTS); >>>>> + *subtn_ref_val = 0; >>>>> + *subtn_ref_val = ++handle; >>>>> + *((uint64_t *)subscr.usr_handle) = *subtn_ref_val; >>>>> + >>>>> + if (send(tipc_cb.Dsock, &subscr, sizeof(subscr), 0) != >>>>> sizeof(subscr)) { >>>>> + m_MDS_LOG_ERR("MDTM: MDS-NODE-INFO-SUBSCRIBE Failure\n"); >>>>> + return NCSCC_RC_FAILURE; >>>>> + } >>>>> + ++num_subscriptions; >>>>> + >>>>> + return NCSCC_RC_SUCCESS; >>>>> +} >>>>> + >>>>> +/********************************************************* >>>>> Function NAME: mds_mdtm_node_subscribe_tipc >>>>> @@ -2034,12 +2189,32 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_RE >>>>> { >>>>> uint32_t len = 0; >>>>> len = m_MMGR_LINK_DATA_LEN(usrbuf); /* Getting >>>>> total len */ >>>>> - >>>>> - m_MDS_LOG_INFO("MDTM: User Sending Data lenght=%d >>>>> Fr_svc=%d to_svc=%d\n", len, >>>>> - req->src_svc_id, req->dest_svc_id); >>>>> - >>>>> - if (len > MDTM_NORMAL_MSG_FRAG_SIZE) { >>>>> - /* Packet needs to be fragmented and send */ >>>>> + /* To support in-service Upgrade issue >>>>> MDTM_NORMAL_MSG_FRAG_SIZE_MIN >>>>> + is provide, and this fragment size is used to >>>>> send to previous version of Opensaf Node >>>>> + while in-service Upgrade. >>>>> + >>>>> + In the previous releases of Opensaf the value >>>>> of TIPC inbuf size of >>>>> + MDTM_RECV_BUFFER_SIZE (mds_dt_tipc.c) TIPC was >>>>> limited to(8000+MDS header) , >>>>> + we have in-service Upgrade issue, so it is not >>>>> possible to send the new >>>>> + MDS_DIRECT_BUF_MAXSIZE (65535 maximum packet >>>>> size)-(56 MDS header) >>>>> + value previous Opensaf version nodes , so for >>>>> the current release it is limited to 8000, >>>>> + possibly adjust this in the future Opensaf >>>>> releases to MDS_DIRECT_BUF_MAXSIZE. >>>>> + >>>>> + IMP TCP Note : Their is NO issue with TCP >>>>> in-service Upgrade ,The value of >>>>> + SO_RCVBUF & SO_SNDBUF of TCP sockets was set >>>>> to 64000 ( MDS_SND_RCV_SIZE) >>>>> + using setsockopt() ,the kernel doubles this >>>>> value ,and this doubled value is returned by >>>>> + getsockopt(). So MDTM_NORMAL_MSG_FRAG_SIZE_MAX >>>>> size is used to send for >>>>> + for both previous & current versitions of >>>>> Opensaf nodes which are using MDS TCP as transport*/ >>>>> + if (len > MDTM_NORMAL_MSG_FRAG_SIZE_MIN) { >>>>> + if >>>>> (mds_node_tbl_query(m_MDS_GET_NODE_ID_FROM_ADEST(req->adest)) != >>>>> NCSCC_RC_SUCCESS) { >>>>> + msg_frag_size = >>>>> MDTM_NORMAL_MSG_FRAG_SIZE_MIN; >>>>> + max_send_pkt_size = >>>>> (MDTM_NORMAL_MSG_FRAG_SIZE_MIN+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN); >>>>> + m_MDS_LOG_DBG("MDTM:Sending message TO >>>>> node_id=%d with msg_frag_size = %d max_send_pkt_size = %d", >>>>> + m_MDS_GET_NODE_ID_FROM_ADEST(req->adest), msg_frag_size, >>>>> max_send_pkt_size); >>>>> + } >>>>> + } >>>>> + >>>>> + if (len > msg_frag_size) { >>>>> status = mdtm_frag_and_send(req, >>>>> frag_seq_num, tipc_id); >>>>> return status; >>>>> @@ -2155,7 +2330,6 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_RE >>>>> 2 - NCSCC_RC_FAILURE >>>>> *********************************************************/ >>>>> -#define MDTM_MAX_SEND_PKT_SIZE >>>>> (MDTM_NORMAL_MSG_FRAG_SIZE+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN) /* >>>>> Includes the 30 header bytes(2+8+20) */ >>>>> #ifdef MDS_CHECKSUM_ENABLE_FLAG >>>>> #define MDTM_FRAG_HDR_PLUS_LEN_2 13 >>>>> @@ -2187,22 +2361,22 @@ uint32_t mdtm_frag_and_send(MDTM_SEND_RE >>>>> len = m_MMGR_LINK_DATA_LEN(usrbuf); /* Getting total len */ >>>>> - if (len > (32767 * MDTM_NORMAL_MSG_FRAG_SIZE)) { /* We >>>>> have 15 bits for frag number so 2( pow 15) -1=32767 */ >>>>> + if (len > (32767 * MDTM_NORMAL_MSG_FRAG_SIZE_MAX)) { /* We >>>>> have 15 bits for frag number so 2( pow 15) -1=32767 */ >>>>> m_MDS_LOG_CRITICAL >>>>> ("MDTM: App. is trying to send data more than MDTM >>>>> Can fragment and send, Max size is =%d\n", >>>>> - 32767 * MDTM_NORMAL_MSG_FRAG_SIZE); >>>>> + 32767 * MDTM_NORMAL_MSG_FRAG_SIZE_MAX); >>>>> m_MMGR_FREE_BUFR_LIST(usrbuf); >>>>> return NCSCC_RC_FAILURE; >>>>> } >>>>> while (len != 0) { >>>>> - if (len > MDTM_NORMAL_MSG_FRAG_SIZE) { >>>>> + if (len > msg_frag_size) { >>>>> if (i == 1) { >>>>> - len_buf = MDTM_MAX_SEND_PKT_SIZE; >>>>> + len_buf = max_send_pkt_size; >>>>> frag_val = MORE_FRAG_BIT | i; >>>>> } else { >>>>> - if ((len + MDTM_FRAG_HDR_PLUS_LEN_2) > >>>>> MDTM_MAX_SEND_PKT_SIZE) { >>>>> - len_buf = MDTM_MAX_SEND_PKT_SIZE; >>>>> + if ((len + MDTM_FRAG_HDR_PLUS_LEN_2) > >>>>> max_send_pkt_size) { >>>>> + len_buf = max_send_pkt_size; >>>>> frag_val = MORE_FRAG_BIT | i; >>>>> } else { >>>>> len_buf = len + MDTM_FRAG_HDR_PLUS_LEN_2; >>>>> diff --git a/osaf/libs/core/mds/mds_dt_trans.c >>>>> b/osaf/libs/core/mds/mds_dt_trans.c >>>>> --- a/osaf/libs/core/mds/mds_dt_trans.c >>>>> +++ b/osaf/libs/core/mds/mds_dt_trans.c >>>>> @@ -41,7 +41,7 @@ >>>>> #define SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN_TCP ((2 + >>>>> MDS_SEND_ADDRINFO_TCP + MDTM_FRAG_HDR_LEN_TCP + MDS_HDR_LEN_TCP)) >>>>> -#define MDTM_MAX_SEND_PKT_SIZE_TCP >>>>> (MDTM_NORMAL_MSG_FRAG_SIZE+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN_TCP) >>>>> /* Includes the 30 header bytes(2+8+20) */ >>>>> +#define MDTM_MAX_SEND_PKT_SIZE_TCP >>>>> (MDTM_NORMAL_MSG_FRAG_SIZE_MAX+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN_T >>>>> CP) >>>>> /* Includes the 30 header bytes(2+8+20) */ >>>>> uint32_t mdtm_global_frag_num_tcp; >>>>> extern struct pollfd pfd[2]; >>>>> @@ -363,16 +363,16 @@ static uint32_t mdtm_frag_and_send_tcp(M >>>>> len = m_MMGR_LINK_DATA_LEN(usrbuf); /* Getting total len */ >>>>> - if (len > (32767 * MDTM_NORMAL_MSG_FRAG_SIZE)) { /* We >>>>> have 15 bits for frag number so 2( pow 15) -1=32767 */ >>>>> + if (len > (32767 * MDTM_NORMAL_MSG_FRAG_SIZE_MAX)) { /* We >>>>> have 15 bits for frag number so 2( pow 15) -1=32767 */ >>>>> m_MDS_LOG_CRITICAL >>>>> ("MDTM: App. is trying to send data more than MDTM >>>>> Can fragment and send, Max size is =%d\n", >>>>> - 32767 * MDTM_NORMAL_MSG_FRAG_SIZE); >>>>> + 32767 * MDTM_NORMAL_MSG_FRAG_SIZE_MAX); >>>>> m_MMGR_FREE_BUFR_LIST(usrbuf); >>>>> return NCSCC_RC_FAILURE; >>>>> } >>>>> while (len != 0) { >>>>> - if (len > MDTM_NORMAL_MSG_FRAG_SIZE) { >>>>> + if (len > MDTM_NORMAL_MSG_FRAG_SIZE_MAX) { >>>>> if (i == 1) { >>>>> len_buf = MDTM_MAX_SEND_PKT_SIZE_TCP; >>>>> frag_val = MORE_FRAG_BIT | i; @@ -551,8 +551,12 >>>>> @@ uint32_t mds_mdtm_send_tcp(MDTM_SEND_REQ >>>>> m_MDS_LOG_INFO("MDTM: User Sending Data >>>>> lenght=%d Fr_svc=%d to_svc=%d\n", len, >>>>> req->src_svc_id, req->dest_svc_id); >>>>> - >>>>> - if (len > MDTM_NORMAL_MSG_FRAG_SIZE) { >>>>> + /*Their is NO implication on TCP in-service >>>>> Upgrade because of >>>>> + MDTM_NORMAL_MSG_FRAG_SIZE_MAX (65535 maximum >>>>> packet size)-(56 MDS header) change , >>>>> + The value of SO_RCVBUF & SO_SNDBUF of TCP >>>>> sockets was set to 64000 ( MDS_SND_RCV_SIZE) >>>>> + using setsockopt() ,the kernel doubles this >>>>> value ,and this doubled value is returned by >>>>> + getsockopt().*/ >>>>> + if (len > MDTM_NORMAL_MSG_FRAG_SIZE_MAX) { >>>>> /* Packet needs to be fragmented and send */ >>>>> status = mdtm_frag_and_send_tcp(req, >>>>> frag_seq_num, id); >>>>> return status; @@ -678,7 +682,7 @@ void >>>>> mdtm_process_poll_recv_data_tcp(voi >>>>> /* Receive all incoming data on this socket */ >>>>> /*******************************************************/ >>>>> - recd_bytes = recv(tcp_cb->DBSRsock, >>>>> tcp_cb->len_buff, 2, 0); >>>>> + recd_bytes = recv(tcp_cb->DBSRsock, tcp_cb->len_buff, >>>>> 2, MSG_NOSIGNAL); >>>>> if (0 == recd_bytes) { >>>>> LOG_ER("MDTM:socket_recv() = %d, conn lost with >>>>> dh server, exiting library err :%s", recd_bytes, strerror(errno)); >>>>> close(tcp_cb->DBSRsock); >>>>> >>>>> ------------------------------------------------------------------- >>>>> ----------- >>>>> >>>>> WatchGuard Dimension instantly turns raw network data into >>>>> actionable security intelligence. It gives you real-time visual >>>>> feedback on key security issues and trends. Skip the complicated >>>>> setup - simply import a virtual appliance and go from zero to >>>>> informed in seconds. >>>>> http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/os >>>>> tg.clktrk >>>>> >>>>> _______________________________________________ >>>>> Opensaf-devel mailing list >>>>> Opensaf-devel@lists.sourceforge.net >>>>> https://lists.sourceforge.net/lists/listinfo/opensaf-devel >>>> >>>> >>>> -------------------------------------------------------------------- >>>> ---------- >>>> >>>> Managing the Performance of Cloud-Based Applications Take advantage >>>> of what the Cloud has to offer - Avoid Common Pitfalls. >>>> Read the Whitepaper. >>>> http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ost >>>> g.clktrk >>>> >>>> >>>> >>>> _______________________________________________ >>>> Opensaf-devel mailing list >>>> Opensaf-devel@lists.sourceforge.net >>>> https://lists.sourceforge.net/lists/listinfo/opensaf-devel >>> >>> >>> --------------------------------------------------------------------- >>> --------- Managing the Performance of Cloud-Based Applications Take >>> advantage of what the Cloud has to offer - Avoid Common Pitfalls. >>> Read the Whitepaper. >>> http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg >>> .clktrk >>> >>> >>> _______________________________________________ >>> Opensaf-devel mailing list >>> Opensaf-devel@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/opensaf-devel > ------------------------------------------------------------------------------ > Managing the Performance of Cloud-Based Applications Take advantage of what > the Cloud has to offer - Avoid Common Pitfalls. > Read the Whitepaper. > http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk > _______________________________________________ > Opensaf-devel mailing list > Opensaf-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/opensaf-devel ------------------------------------------------------------------------------ Managing the Performance of Cloud-Based Applications Take advantage of what the Cloud has to offer - Avoid Common Pitfalls. Read the Whitepaper. http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel