Switch to side-by-side view

--- a/src/DIF/RMT/RMT.h
+++ b/src/DIF/RMT/RMT.h
@@ -26,6 +26,8 @@
 #define RMT_H_
 
 #include <omnetpp.h>
+#include <fstream>
+#include <bitset>
 
 #include "RINASignals.h"
 #include "ExternConsts.h"
@@ -33,7 +35,7 @@
 #include "PDU.h"
 #include "CDAPMessage_m.h"
 
-#include "PDUForwardingTable.h"
+#include "IntPDUForwarding.h"
 #include "QueueAllocBase.h"
 #include "AddressComparatorBase.h"
 
@@ -44,7 +46,11 @@
 #include "RMTQMonitorBase.h"
 #include "RMTMaxQBase.h"
 
+// mapping of cepIDs to output gates
 typedef std::map<int, cGate*> EfcpiMapping;
+
+// shared access to trace logger
+extern std::ofstream rmtTraceFile;
 
 class RMT : public RMTBase
 {
@@ -58,9 +64,11 @@
     virtual bool getRelayStatus() { return relayOn; };
     virtual bool isOnWire() { return onWire; };
 
-    virtual void invokeQueueArrivalPolicies(cObject* obj);
-    virtual void invokeQueueDeparturePolicies(cObject* obj);
-    virtual void invokePortReadyPolicies(cObject* obj);
+    virtual void onQueueArrival(cObject* obj);
+    virtual void preQueueDeparture(cObject* obj);
+    virtual void postQueueDeparture(cObject* obj);
+    virtual void writeToPort(cObject* obj);
+    virtual void readFromPort(cObject* obj);
 
   protected:
     virtual void initialize();
@@ -68,7 +76,7 @@
     virtual void finish();
 
   private:
-    PDUForwardingTable* fwTable;
+    IntPDUForwarding* fwd;
     RMTModuleAllocator* rmtAllocator;
 
     bool relayOn;
@@ -85,21 +93,35 @@
     QueueIDGenBase* queueIdGenerator;
     AddressComparatorBase* addrComparator;
 
+    enum TraceEventType
+    {
+        MSG_SEND = 's', MSG_RECEIVE = 'r', MSG_ENQUEUE = '+', MSG_DEQUEUE = '-',
+        MSG_DROP = 'd'
+    };
+    bool tracing;
+
     void processMessage(cMessage* msg);
     void efcpiToPort(PDU* msg);
+    void portToEfcpi(PDU* msg);
     void efcpiToEfcpi(PDU* msg);
-    void portToEfcpi(PDU* msg);
     void ribToPort(CDAPMessage* msg);
     void portToRIB(CDAPMessage* msg);
+    void ribToRIB(CDAPMessage* msg);
     void portToPort(cMessage* msg);
 
-    RMTPort* fwTableLookup(Address& destAddr, short pduQosId, bool useQoS = true);
+    RMTPort* fwTableLookup(const Address& destAddr, const unsigned short &pduQosId);
+    RMTPort* fwTableLookup(const PDU * pdu);
     std::deque<cMessage*> invalidPDUs;
 
+    void tracePDUEvent(const cPacket* pkt, TraceEventType eventType);
+
     simsignal_t sigRMTNoConnID;
+    simsignal_t sigRMTPacketError;
     LisRMTQueuePDURcvd* lisRMTQueuePDURcvd;
+    LisRMTQueuePDUPreSend* lisRMTQueuePDUPreSend;
     LisRMTQueuePDUSent* lisRMTQueuePDUSent;
-    LisRMTPortReady* lisRMTPortReady;
+    LisRMTPortReadyToServe* lisRMTPortReadyToServe;
+    LisRMTPortReadyForRead* lisRMTPortReadyForRead;
 
     // management methods for Resource Allocator
     void setOnWire(bool status) { onWire = status; };