Bug 1937 - FlowMonitor fails to track multiplexed packets
authorTommaso Pecorella <tommaso.pecorella@unifi.it>
Fri, 27 Jun 2014 22:28:07 +0200
changeset 10823 311e95076ad1
parent 10822 a7270ce0d930
child 10824 c5f41363f688
Bug 1937 - FlowMonitor fails to track multiplexed packets
RELEASE_NOTES
src/flow-monitor/model/ipv4-flow-probe.cc
src/flow-monitor/model/ipv6-flow-probe.cc
--- a/RELEASE_NOTES	Thu Jun 26 13:15:49 2014 -0700
+++ b/RELEASE_NOTES	Fri Jun 27 22:28:07 2014 +0200
@@ -27,6 +27,7 @@
 - Bug 1921 - Icmpv6L4Protocol::ForgeEchoRequest returns a malformed packet
 - Bug 1930 - Use of invalid reference in OLSR RemoveLinkTuple
 - Bug 1932 - NdiscCache entry is not failsafe on double neighbor probing.
+- Bug 1937 - FlowMonitor fails to track multiplexed packets
 
 Known issues
 ------------
--- a/src/flow-monitor/model/ipv4-flow-probe.cc	Thu Jun 26 13:15:49 2014 -0700
+++ b/src/flow-monitor/model/ipv4-flow-probe.cc	Fri Jun 27 22:28:07 2014 +0200
@@ -260,17 +260,15 @@
       // tag the packet with the flow id and packet id, so that the packet can be identified even
       // when Ipv4Header is not accessible at some non-IPv4 protocol layer
       Ipv4FlowProbeTag fTag (flowId, packetId, size);
-      ipPayload->AddPacketTag (fTag);
+      ipPayload->AddByteTag (fTag);
     }
 }
 
 void
 Ipv4FlowProbe::ForwardLogger (const Ipv4Header &ipHeader, Ptr<const Packet> ipPayload, uint32_t interface)
 {
-  // peek the tags that are added by Ipv4FlowProbe::SendOutgoingLogger ()
   Ipv4FlowProbeTag fTag;
-
-  bool found = ipPayload->PeekPacketTag (fTag);
+  bool found = ipPayload->FindFirstMatchingByteTag (fTag);
 
   if (found)
     {
@@ -286,11 +284,8 @@
 void
 Ipv4FlowProbe::ForwardUpLogger (const Ipv4Header &ipHeader, Ptr<const Packet> ipPayload, uint32_t interface)
 {
-  // remove the tags that are added by Ipv4FlowProbe::SendOutgoingLogger ()
   Ipv4FlowProbeTag fTag;
-
-  // ConstCast: see http://www.nsnam.org/bugzilla/show_bug.cgi?id=904
-  bool found = ConstCast<Packet> (ipPayload)->RemovePacketTag (fTag);
+  bool found = ipPayload->FindFirstMatchingByteTag (fTag);
 
   if (found)
     {
@@ -325,11 +320,8 @@
     }
 #endif
 
-  // remove the tags that are added by Ipv4FlowProbe::SendOutgoingLogger ()
   Ipv4FlowProbeTag fTag;
-
-  // ConstCast: see http://www.nsnam.org/bugzilla/show_bug.cgi?id=904
-  bool found = ConstCast<Packet> (ipPayload)->RemovePacketTag (fTag);
+  bool found = ipPayload->FindFirstMatchingByteTag (fTag);
 
   if (found)
     {
@@ -383,11 +375,9 @@
 void 
 Ipv4FlowProbe::QueueDropLogger (Ptr<const Packet> ipPayload)
 {
-  // remove the tags that are added by Ipv4FlowProbe::SendOutgoingLogger ()
   Ipv4FlowProbeTag fTag;
+  bool tagFound = ipPayload->FindFirstMatchingByteTag (fTag);
 
-  // ConstCast: see http://www.nsnam.org/bugzilla/show_bug.cgi?id=904
-  bool tagFound = ConstCast<Packet> (ipPayload)->RemovePacketTag (fTag);
   if (!tagFound)
     {
       return;
--- a/src/flow-monitor/model/ipv6-flow-probe.cc	Thu Jun 26 13:15:49 2014 -0700
+++ b/src/flow-monitor/model/ipv6-flow-probe.cc	Fri Jun 27 22:28:07 2014 +0200
@@ -254,17 +254,15 @@
       // tag the packet with the flow id and packet id, so that the packet can be identified even
       // when Ipv6Header is not accessible at some non-IPv6 protocol layer
       Ipv6FlowProbeTag fTag (flowId, packetId, size);
-      ipPayload->AddPacketTag (fTag);
+      ipPayload->AddByteTag (fTag);
     }
 }
 
 void
 Ipv6FlowProbe::ForwardLogger (const Ipv6Header &ipHeader, Ptr<const Packet> ipPayload, uint32_t interface)
 {
-  // peek the tags that are added by Ipv6FlowProbe::SendOutgoingLogger ()
   Ipv6FlowProbeTag fTag;
-
-  bool found = ipPayload->PeekPacketTag (fTag);
+  bool found = ipPayload->FindFirstMatchingByteTag (fTag);
 
   if (found)
     {
@@ -280,11 +278,8 @@
 void
 Ipv6FlowProbe::ForwardUpLogger (const Ipv6Header &ipHeader, Ptr<const Packet> ipPayload, uint32_t interface)
 {
-  // remove the tags that are added by Ipv6FlowProbe::SendOutgoingLogger ()
   Ipv6FlowProbeTag fTag;
-
-  // ConstCast: see http://www.nsnam.org/bugzilla/show_bug.cgi?id=904
-  bool found = ConstCast<Packet> (ipPayload)->RemovePacketTag (fTag);
+  bool found = ipPayload->FindFirstMatchingByteTag (fTag);
 
   if (found)
     {
@@ -319,11 +314,8 @@
     }
 #endif
 
-  // remove the tags that are added by Ipv6FlowProbe::SendOutgoingLogger ()
   Ipv6FlowProbeTag fTag;
-
-  // ConstCast: see http://www.nsnam.org/bugzilla/show_bug.cgi?id=904
-  bool found = ConstCast<Packet> (ipPayload)->RemovePacketTag (fTag);
+  bool found = ipPayload->FindFirstMatchingByteTag (fTag);
 
   if (found)
     {
@@ -384,11 +376,9 @@
 void 
 Ipv6FlowProbe::QueueDropLogger (Ptr<const Packet> ipPayload)
 {
-  // remove the tags that are added by Ipv6FlowProbe::SendOutgoingLogger ()
   Ipv6FlowProbeTag fTag;
+  bool tagFound = ipPayload->FindFirstMatchingByteTag (fTag);
 
-  // ConstCast: see http://www.nsnam.org/bugzilla/show_bug.cgi?id=904
-  bool tagFound = ConstCast<Packet> (ipPayload)->RemovePacketTag (fTag);
   if (!tagFound)
     {
       return;