Added path update to FLAME
authorKirill Andreev <andreev@iitp.ru>
Mon, 03 Aug 2009 19:13:46 +0400
changeset 5145 7f50ab7ce59d
parent 5144 b8a77656a7b8
child 5146 9e0edb76a8c7
Added path update to FLAME
examples/mesh.cc
src/devices/mesh/dot11s/hwmp-protocol.cc
src/devices/mesh/flame/flame-protocol.cc
src/devices/wifi/mac-low.cc
--- a/examples/mesh.cc	Fri Jul 31 19:38:26 2009 +0400
+++ b/examples/mesh.cc	Mon Aug 03 19:13:46 2009 +0400
@@ -179,6 +179,7 @@
   Simulator::Schedule (Seconds(totalTime), & MeshTest::Report, this);
   Simulator::Stop (Seconds (totalTime));
   Simulator::Run ();
+  std::cerr << "finish success\n";
   Simulator::Destroy ();
   return 0;
 }
--- a/src/devices/mesh/dot11s/hwmp-protocol.cc	Fri Jul 31 19:38:26 2009 +0400
+++ b/src/devices/mesh/dot11s/hwmp-protocol.cc	Mon Aug 03 19:13:46 2009 +0400
@@ -201,13 +201,12 @@
     {
       i->second.Cancel ();
     }
+  m_proactivePreqTimer.Cancel();
   m_preqTimeouts.clear ();
   m_lastDataSeqno.clear ();
   m_lastHwmpSeqno.clear ();
   m_rqueue.clear ();
   m_rtable = 0;
-
-  //TODO: clear plugins
 }
 
 bool
--- a/src/devices/mesh/flame/flame-protocol.cc	Fri Jul 31 19:38:26 2009 +0400
+++ b/src/devices/mesh/flame/flame-protocol.cc	Mon Aug 03 19:13:46 2009 +0400
@@ -186,9 +186,14 @@
       FlameHeader flameHdr;
       packet->RemoveHeader (flameHdr);
       FlameTag tag;
+      
       if (!packet->RemovePacketTag (tag))
         {
-          NS_FATAL_ERROR ("FLAME tag must exust here");
+          NS_FATAL_ERROR ("FLAME tag must exist here");
+        }
+      if (HandleDataFrame (flameHdr.GetSeqno (), source, flameHdr, tag.transmitter, sourceIface))
+        {
+          return false;
         }
       if (source == GetAddress ())
         {
@@ -215,10 +220,7 @@
         }
       else
         {
-          if (HandleDataFrame (flameHdr.GetSeqno (), source, flameHdr, tag.transmitter, sourceIface))
-            {
-              return false;
-            }
+          
           FlameRtable::LookupResult result = m_rtable->Lookup (destination);
           if (tag.receiver != Mac48Address::GetBroadcast ())
             {
@@ -265,12 +267,22 @@
     {
       NS_FATAL_ERROR ("FLAME tag must exist when packet is coming to protocol");
     }
-  //TODO: send path update
   FlameHeader flameHdr;
   packet->RemoveHeader (flameHdr);
+  if ((destination == GetAddress ()) && (m_lastBroadcast + m_broadcastInterval < Simulator::Now ()))
+      {
+        Ptr<Packet> packet = Create<Packet> ();
+        m_mp->Send(packet, Mac48Address::GetBroadcast (), 0);
+        m_lastBroadcast = Simulator::Now ();
+      }
   NS_ASSERT (protocolType == FLAME_PROTOCOL);
   protocolType = flameHdr.GetProtocol ();
-  return (!HandleDataFrame (flameHdr.GetSeqno (), source, flameHdr, tag.transmitter, fromIface));
+  if ((HandleDataFrame (flameHdr.GetSeqno (), source, flameHdr, tag.transmitter, fromIface))
+      || packet->GetSize () == 0)
+    {
+      return false;
+    }
+  return true;
 }
 bool
 FlameProtocol::Install (Ptr<MeshPointDevice> mp)
@@ -316,12 +328,7 @@
       return true;
     }
   FlameRtable::LookupResult result = m_rtable->Lookup (source);
-  if (result.retransmitter == Mac48Address::GetBroadcast ())
-    {
-      m_rtable->AddPath (source, receiver, fromInterface, flameHdr.GetCost (), flameHdr.GetSeqno ());
-      return false;
-    }
-  if (result.seqnum >= seqno)
+  if ((result.retransmitter != Mac48Address::GetBroadcast ()) && (result.seqnum >= seqno))
     {
       return true;
     }
--- a/src/devices/wifi/mac-low.cc	Fri Jul 31 19:38:26 2009 +0400
+++ b/src/devices/wifi/mac-low.cc	Mon Aug 03 19:13:46 2009 +0400
@@ -331,6 +331,7 @@
       m_listener->Cancel ();
       m_listener = 0;
     }
+  NS_LOG_UNCOND("DONE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
 }
 
 void