Ack.

Thanks,
Ramesh.

----- Original Message -----
From: [email protected]
To: [email protected], [email protected]
Cc: [email protected]
Sent: Wednesday, October 1, 2014 6:41:20 PM GMT +05:30 Chennai, Kolkata, 
Mumbai, New Delhi
Subject: [PATCH 1 of 1] mds: use correct buff-length to distinguish mcast or 
multi-unicast [#1036]

 osaf/libs/core/mds/mds_c_sndrcv.c |  41 +++++++++++++-------------------------
 osaf/libs/core/mds/mds_dt_tipc.c  |   2 +
 2 files changed, 16 insertions(+), 27 deletions(-)


In the curent implementtaion of MDS Broadcast , if the Broadcast message size is
below 2^16 ,mds send that Broadcast message as Multicast , otherwise
as multi-unicast  ,so that it can be fragmented and send.

Because of checking with unpopulated Bcast buff length value ( zero value )
 which distinguishes Broadcast message to sent as Multicast or multi-unicast.
So mds end up with sending one one multi-unicast  in cluster( fist avalible 
IMMND subscription list)
and  the reaming (IMMNDs detecting out of order messages.

Now used the populated Bcast buff length value

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
@@ -102,6 +102,8 @@ typedef struct send_msg {
 
        /* The following part is used only for the BCAST and Red BCAST sends 
only  and no where it is used */
        MDS_BCAST_BUFF_LIST *mds_bcast_list_hdr;
+    /* Parameter only used in case of bcast to determine whether to send mcast 
or multi unicast*/
+    uint32_t bcast_buff_len;
 } SEND_MSG;
 
 /* Functions for bcast list add, search and free all the list */
@@ -1514,6 +1516,9 @@ static uint32_t mcm_msg_encode_full_or_f
        }
        m_MDS_LOG_INFO("MDS_SND_RCV: Sending the data to MDTM layer\n");
        m_MDS_LOG_DBG("MDS_SND_RCV : Leaving 
mcm_msg_encode_full_or_flat_and_send\n");
+
+       /* used only for case of bcast with full encode */ 
+       to_msg->bcast_buff_len = 
m_MMGR_LINK_DATA_LEN(msg_send.msg.data.fullenc_uba.start);
        return mds_mdtm_send(&msg_send);
 }
 
@@ -3809,7 +3814,7 @@ static uint32_t mcm_pvt_process_svc_bcas
        } 
 
 
-
+       to_msg.bcast_buff_len = 0;
        /* Get each destination and send */
        while (1) {
                if (flag == 0) {
@@ -3849,37 +3854,16 @@ static uint32_t mcm_pvt_process_svc_bcas
                        break;
                }
 
-               /* If Mcast allwasy send full encode */
-               if ((svc_cb->subtn_info->prev_ver_sub_count == 0) && 
(strcmp(tipc_or_tcp, "TIPC") == 0)
-                               && (to_msg.data.info.len < 
MDS_DIRECT_BUF_MAXSIZE)) {
-                       to = DESTINATION_OFF_NODE;
-               } else {
-                       
mcm_query_for_node_dest_on_archword(info_result->key.adest, &to, 
info_result->rem_svc_arch_word);
-               }
-
-               if (to == DESTINATION_SAME_PROCESS) {
-                       if (to_msg.msg_type != MSG_NCSCONTEXT) {
-                               SEND_MSG t_msg;
-                               memset(&t_msg, 0, sizeof(t_msg));
-                               t_msg.msg_type = MSG_DIRECT_BUFF;
-                               t_msg.data.info.buff = 
mds_alloc_direct_buff(to_msg.data.info.len);
-                               memcpy(t_msg.data.info.buff, 
to_msg.data.info.buff, to_msg.data.info.len);
-                               t_msg.data.info.len = to_msg.data.info.len;
-                               t_msg.msg_fmt_ver = to_msg.msg_fmt_ver;
-
-                               mds_mcm_send_msg_enc(to, svc_cb, &t_msg, 
to_svc_id, info_result->key.vdest_id,
-                                                    req, 0, 
info_result->key.adest, pri);
-                               continue;
-                       }
-               }
+               /* Bcast allwasy send full encode */
+               to = DESTINATION_OFF_NODE;
 
                status = mds_mcm_send_msg_enc(to, svc_cb, &to_msg, to_svc_id, 
info_result->key.vdest_id,
                                req, 0, info_result->key.adest, pri);
                if ((svc_cb->subtn_info->prev_ver_sub_count == 0) && 
(strcmp(tipc_or_tcp, "TIPC") == 0)
-                               && (to_msg.data.info.len < 
MDS_DIRECT_BUF_MAXSIZE)) {
-                               m_MDS_LOG_DBG("MDTM: Break while(1) 
prev_ver_sub_count: %d  svc_id =%s  data.len: %d ",
+                               && (to_msg.bcast_buff_len < 
MDS_DIRECT_BUF_MAXSIZE)) {
+                               m_MDS_LOG_DBG("MDTM: Break while(1) 
prev_ver_sub_count: %d  svc_id =%s  to_msg.bcast_buff_len: %d ",
                                        svc_cb->subtn_info->prev_ver_sub_count,
-                                       
ncsmds_svc_names[m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_cb->svc_hdl)], 
to_msg.data.info.len);        
+                                       
ncsmds_svc_names[m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_cb->svc_hdl)], 
to_msg.bcast_buff_len);       
                        if (status == NCSCC_RC_SUCCESS) {
                                /* Break after one successful Mcast message */
                                break;
@@ -3887,6 +3871,9 @@ static uint32_t mcm_pvt_process_svc_bcas
                        else
                                m_MDS_LOG_ERR("MDTM:Continue while(1) status = 
mds_mcm_send_msg_enc = NCSCC_RC_FAILURE");
                }
+               
+               m_MDS_LOG_DBG("MDTM: Continue multi-unicast  svc_id =%s  
to_msg.bcast_buff_len: %d ",
+                               
ncsmds_svc_names[m_MDS_GET_SVC_ID_FROM_SVC_HDL(svc_cb->svc_hdl)], 
to_msg.bcast_buff_len);
        }                       /* While Loop */
 
 #if 1
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
@@ -2042,6 +2042,8 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_RE
 
                                if (len > frag_size) {
                                        /* Packet needs to be fragmented and 
send */
+                                       m_MDS_LOG_DBG("MDTM: User fragment and 
Sending Data lenght=%d From svc_id = %s to svc_id = %s\n", len,
+                                               
ncsmds_svc_names[req->src_svc_id], ncsmds_svc_names[req->dest_svc_id]);
                                        return mdtm_frag_and_send(req, 
frag_seq_num, tipc_id, frag_size);
                                } else {
                                        uint8_t *p8;

------------------------------------------------------------------------------
Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer
Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports
Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper
Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer
http://pubads.g.doubleclick.net/gampad/clk?id=154622311&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to