- The confused error in mds log since disabled FCTRL agent
receive a flow control message type from enabled FCTRL agent.
MDS should ignore flow control message on disabled FCTRL agent.

- Refactor mds_tipc_fctrl_drop_data() for code consistency.

- Also print Adest info detail in logging for easy troubleshoot.
---
 src/mds/mds_dt_common.c        | 65 ++++++++++++++++++----------------
 src/mds/mds_tipc_fctrl_intf.cc | 63 +++++++++++++++++---------------
 2 files changed, 69 insertions(+), 59 deletions(-)

diff --git a/src/mds/mds_dt_common.c b/src/mds/mds_dt_common.c
index ef8425cb9..6f1bd8a2e 100644
--- a/src/mds/mds_dt_common.c
+++ b/src/mds/mds_dt_common.c
@@ -314,9 +314,11 @@ uint32_t mdtm_process_recv_message_common(uint8_t flag, 
uint8_t *buffer,
                 * header length */
                if (len < len_mds_hdr) {
                        m_MDS_LOG_ERR(
-                           "MDTM: Message recd (Non Fragmented) len is less 
than the MDS HDR len  Adest = <%" PRId64
-                           "> len =%d len_mds_hdr=%d",
-                           transport_adest, len, len_mds_hdr);
+                           "MDTM: Message recd (Non Fragmented) len is less 
than the MDS HDR len "
+                           "Adest <0x%08x, %u> len =%d len_mds_hdr=%d",
+                           m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+                           m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest),
+                           len, len_mds_hdr);
 
                        return NCSCC_RC_FAILURE;
                }
@@ -350,10 +352,10 @@ uint32_t mdtm_process_recv_message_common(uint8_t flag, 
uint8_t *buffer,
                                            &dest_svc_hdl)) {
                        *buff_dump = 0; /* For future hack */
                        m_MDS_LOG_ERR(
-                           "MDTM: svc_id = %s(%d) Doesnt exists for the 
message recd, Adest = <%" PRId64
-                           ">\n",
+                           "MDTM: svc_id = %s(%d) Doesnt exists for the 
message recd, Adest <0x%08x, %u>\n",
                            get_svc_names(dest_svc_id), dest_svc_id,
-                           transport_adest);
+                           m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+                           m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest));
                        return NCSCC_RC_FAILURE;
                }
 
@@ -365,9 +367,9 @@ uint32_t mdtm_process_recv_message_common(uint8_t flag, 
uint8_t *buffer,
                if (enc_type > MDS_ENC_TYPE_DIRECT_BUFF) {
                        *buff_dump = 0; /* For future hack */
                        m_MDS_LOG_ERR(
-                           "MDTM: Encoding unsupported, Adest = <%" PRId64
-                           ">\n",
-                           transport_adest);
+                           "MDTM: Encoding unsupported, Adest Adest <0x%08x, 
%u>\n",
+                           m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+                           m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest));
                        return NCSCC_RC_FAILURE;
                }
 
@@ -506,9 +508,10 @@ uint32_t mdtm_process_recv_message_common(uint8_t flag, 
uint8_t *buffer,
                }
 
                m_MDS_LOG_DBG(
-                   "MDTM: Recd Unfragmented message with SVC Seq num =%d, from 
src Adest = <%" PRId64
-                   ">",
-                   svc_seq_num, transport_adest);
+                   "MDTM: Recd Unfragmented message with SVC Seq num =%d, from 
src Adest <0x%08x, %u>",
+                   svc_seq_num,
+                   m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+                   m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest));
 
                if (msg_snd_type == MDS_SENDTYPE_ACK) {
                        /* NOTE: Version in ACK message is ignored */
@@ -603,9 +606,9 @@ uint32_t mdtm_process_recv_message_common(uint8_t flag, 
uint8_t *buffer,
                if (len <= (len_mds_hdr + MDTM_FRAG_HDR_LEN)) {
                        m_MDS_LOG_ERR(
                            "MDTM: Message recd (Fragmented First Pkt) len is 
less than or equal to \
-                            the sum of (len_mds_hdr+MDTM_FRAG_HDR_LEN) len, 
Adest = <%" PRId64
-                           ">",
-                           transport_adest);
+                           the sum of (len_mds_hdr+MDTM_FRAG_HDR_LEN) len, 
Adest <0x%08x, %u>",
+                           m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+                           m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest));
                        return NCSCC_RC_FAILURE;
                }
                data = &buffer[MDS_HEADER_PWE_ID_POSITION + MDTM_FRAG_HDR_LEN];
@@ -796,9 +799,10 @@ uint32_t mdtm_process_recv_message_common(uint8_t flag, 
uint8_t *buffer,
                m_MDS_LOG_INFO("MDTM: Reassembly started\n");
 
                m_MDS_LOG_DBG(
-                   "MDTM: Recd fragmented message(first frag) with Frag 
Seqnum=%d SVC Seq num =%d, from src Adest = <%" PRId64
-                   ">",
-                   seq_num, svc_seq_num, transport_adest);
+                   "MDTM: Recd fragmented message(first frag) with Frag 
Seqnum=%d SVC Seq num =%d, from src Adest <0x%08x, %u>",
+                   seq_num, svc_seq_num,
+                   m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+                   m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest));
 
                if ((len - (len_mds_hdr + MDTM_FRAG_HDR_LEN)) > 0) {
                        if (NCSCC_RC_SUCCESS !=
@@ -1134,9 +1138,10 @@ uint32_t mdtm_process_recv_data(uint8_t *buffer, 
uint16_t len,
                seq_num = ncs_decode_32bit(&data);
 
                m_MDS_LOG_DBG(
-                   "MDTM: Recd message with Fragment Seqnum=%d, frag_num=%d, 
from src_id=<0x%08x:%u>",
-                   seq_num, frag_num, (uint32_t)(transport_adest >> 32),
-                   (uint32_t)(transport_adest));
+                   "MDTM: Recd message with Fragment Seqnum=%d, frag_num=%d, 
from Adest <0x%08x, %u>",
+                   seq_num, frag_num,
+                   m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+                   m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest));
 
                /* Checking in reassembly queue */
                reassem_queue =
@@ -1187,9 +1192,9 @@ uint32_t mdtm_process_recv_data(uint8_t *buffer, uint16_t 
len,
                                          easily without having to relink etc.
                                        */
                                m_MDS_LOG_ERR(
-                                   "MDTM: Message is dropped as msg is out of 
seq Adest = <%" PRIu64
-                                   ">\n",
-                                   transport_adest);
+                                   "MDTM: Message is dropped as msg is out of 
seq Adest <0x%08x, %u>\n",
+                                   
m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+                                   
m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest));
                                return NCSCC_RC_FAILURE;
                        }
 
@@ -1360,9 +1365,9 @@ uint32_t mdtm_process_recv_data(uint8_t *buffer, uint16_t 
len,
                                          easily without having to relink etc.
                                        */
                                m_MDS_LOG_ERR(
-                                   "MDTM: Frag recd is not next frag so 
dropping Adest = <%" PRIu64
-                                   ">\n",
-                                   transport_adest);
+                                   "MDTM: Frag recd is not next frag so 
dropping Adest <0x%08x, %u>\n",
+                                   
m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+                                   
m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest));
                                reassem_queue
                                    ->to_be_dropped = true; /* This is for
                                                               avoiding the
@@ -1409,9 +1414,9 @@ uint32_t mdtm_process_recv_data(uint8_t *buffer, uint16_t 
len,
                        *buff_dump = 0;
                        /* Some stale message, Log and Drop */
                        m_MDS_LOG_ERR(
-                           "MDTM: Some stale message recd, hence dropping 
Adest = <%" PRIu64
-                           ">\n",
-                           transport_adest);
+                           "MDTM: Some stale message recd, hence dropping 
Adest <0x%08x, %u>\n",
+                           m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+                           m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest));
                        return NCSCC_RC_FAILURE;
                }
        } /* ELSE Loop */
diff --git a/src/mds/mds_tipc_fctrl_intf.cc b/src/mds/mds_tipc_fctrl_intf.cc
index 4270cf26a..22af9a59b 100644
--- a/src/mds/mds_tipc_fctrl_intf.cc
+++ b/src/mds/mds_tipc_fctrl_intf.cc
@@ -454,37 +454,20 @@ uint32_t mds_tipc_fctrl_portid_terminate(struct 
tipc_portid id) {
 
 uint32_t mds_tipc_fctrl_drop_data(uint8_t *buffer, uint16_t len,
     struct tipc_portid id) {
-  if (is_fctrl_enabled == false) return NCSCC_RC_SUCCESS;
-
   HeaderMessage header;
   header.Decode(buffer);
   Event* pevt = nullptr;
+
   // if mds support flow control
-  if ((header.pro_ver_ & MDS_PROT_VER_MASK) == MDS_PROT_FCTRL) {
-    if (header.pro_id_ == MDS_PROT_FCTRL_ID) {
-      if (header.msg_type_ == ChunkAck::kChunkAckMsgType) {
-        // receive single ack message
-        ChunkAck ack;
-        ack.Decode(buffer);
-        // send to the event thread
-        pevt = new Event(Event::Type::kEvtSendChunkAck, id, ack.svc_id_,
-            header.mseq_, header.mfrag_, ack.acked_fseq_);
-        pevt->chunk_size_ = ack.chunk_size_;
-        if (m_NCS_IPC_SEND(&mbx_events, pevt,
-            NCS_IPC_PRIORITY_HIGH) != NCSCC_RC_SUCCESS) {
-          m_MDS_LOG_ERR("FCTRL: Failed to send msg to mbx_events, Error[%s]",
-              strerror(errno));
-          return NCSCC_RC_FAILURE;
-        }
-        return NCSCC_RC_SUCCESS;
-      }
-    } else {
-      // receive data message
-      DataMessage data;
-      data.Decode(buffer);
+  if (header.IsControlMessage()) {
+    if (header.msg_type_ == ChunkAck::kChunkAckMsgType) {
+      // receive single ack message
+      ChunkAck ack;
+      ack.Decode(buffer);
       // send to the event thread
-      pevt = new Event(Event::Type::kEvtDropData, id, data.svc_id_,
-          header.mseq_, header.mfrag_, header.fseq_);
+      pevt = new Event(Event::Type::kEvtSendChunkAck, id, ack.svc_id_,
+          header.mseq_, header.mfrag_, ack.acked_fseq_);
+      pevt->chunk_size_ = ack.chunk_size_;
       if (m_NCS_IPC_SEND(&mbx_events, pevt,
           NCS_IPC_PRIORITY_HIGH) != NCSCC_RC_SUCCESS) {
         m_MDS_LOG_ERR("FCTRL: Failed to send msg to mbx_events, Error[%s]",
@@ -495,19 +478,36 @@ uint32_t mds_tipc_fctrl_drop_data(uint8_t *buffer, 
uint16_t len,
     }
   }
 
+  if (header.IsFlowMessage()) {
+    // receive data message
+    DataMessage data;
+    data.Decode(buffer);
+    // send to the event thread
+    pevt = new Event(Event::Type::kEvtDropData, id, data.svc_id_,
+        header.mseq_, header.mfrag_, header.fseq_);
+    if (m_NCS_IPC_SEND(&mbx_events, pevt,
+        NCS_IPC_PRIORITY_HIGH) != NCSCC_RC_SUCCESS) {
+      m_MDS_LOG_ERR("FCTRL: Failed to send msg to mbx_events, Error[%s]",
+          strerror(errno));
+      return NCSCC_RC_FAILURE;
+    }
+    return NCSCC_RC_SUCCESS;
+  }
+
   return NCSCC_RC_SUCCESS;
 }
 
 uint32_t mds_tipc_fctrl_rcv_data(uint8_t *buffer, uint16_t len,
     struct tipc_portid id) {
-  if (is_fctrl_enabled == false) return NCSCC_RC_SUCCESS;
-
   uint32_t rc = NCSCC_RC_SUCCESS;
   HeaderMessage header;
   header.Decode(buffer);
   Event* pevt = nullptr;
-  // if mds support flow control
+
   if (header.IsControlMessage()) {
+    // skip the control message if flow control disabled
+    if (is_fctrl_enabled == false) return NCSCC_RC_FAILURE;
+    // if mds support flow control
     if (header.msg_type_ == ChunkAck::kChunkAckMsgType) {
       m_MDS_LOG_DBG("FCTRL: Receive ChunkAck");
       // receive single ack message
@@ -555,6 +555,10 @@ uint32_t mds_tipc_fctrl_rcv_data(uint8_t *buffer, uint16_t 
len,
     // skip this data msg
     rc = NCSCC_RC_FAILURE;
   }
+
+  // Let the tipc receiving thread (legacy) handle this data message
+  if (is_fctrl_enabled == false) return NCSCC_RC_SUCCESS;
+
   if (header.IsLegacyMessage()) {
     m_MDS_LOG_DBG("FCTRL: [me] <-- [node:%x, ref:%u], "
         "Receive legacy data message, "
@@ -570,6 +574,7 @@ uint32_t mds_tipc_fctrl_rcv_data(uint8_t *buffer, uint16_t 
len,
       portid_map_mutex.unlock();
     }
   }
+
   if (header.IsFlowMessage() || header.IsUndefinedMessage()) {
     // receive flow message explicitly identified by protocol version
     // or if it is still undefined, then consult the stateful portid
-- 
2.17.1



_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to