PREQ queue bugfix, tested proactive mode, removed unnseded debug messages
authorKirill Andreev <andreev@iitp.ru>
Wed, 01 Apr 2009 17:38:22 +0400
changeset 4926 a9382a693fa1
parent 4925 765deb024525
child 4927 5f402ca784d1
PREQ queue bugfix, tested proactive mode, removed unnseded debug messages
src/devices/mesh/dot11s/hwmp-mac-plugin.cc
src/devices/mesh/dot11s/hwmp-mac-plugin.h
src/devices/mesh/dot11s/hwmp-protocol.cc
src/devices/mesh/dot11s/peer-management-protocol.cc
--- a/src/devices/mesh/dot11s/hwmp-mac-plugin.cc	Wed Apr 01 16:53:20 2009 +0400
+++ b/src/devices/mesh/dot11s/hwmp-mac-plugin.cc	Wed Apr 01 17:38:22 2009 +0400
@@ -145,37 +145,8 @@
 void
 HwmpMacPlugin::SendPreq(IePreq preq)
 {
-  //Create packet
-  Ptr<Packet> packet  = Create<Packet> ();
-  packet->AddHeader(preq);
-  //Multihop action header:
-  WifiMeshMultihopActionHeader multihopHdr;
-  WifiMeshMultihopActionHeader::ACTION_VALUE action;
-  action.pathSelection = WifiMeshMultihopActionHeader::PATH_REQUEST;
-  multihopHdr.SetAction (WifiMeshMultihopActionHeader::MESH_PATH_SELECTION, action);
-  packet->AddHeader (multihopHdr);
-  //Mesh header
-  WifiMeshHeader meshHdr;
-  meshHdr.SetMeshTtl (m_protocol->GetMaxTtl ());
-  //TODO: should seqno be here?
-  meshHdr.SetMeshSeqno (0);
-  meshHdr.SetAddressExt(1);
-  meshHdr.SetAddr4(preq.GetOriginatorAddress ());
-  packet->AddHeader (meshHdr);
-  //create 802.11 header:
-  WifiMacHeader hdr;
-  hdr.SetMultihopAction ();
-  hdr.SetDsNotFrom ();
-  hdr.SetDsNotTo ();
-  hdr.SetAddr2 (m_parent->GetAddress ());
-  hdr.SetAddr3 (Mac48Address::GetBroadcast ());
-  //Send Management frame
-  std::vector <Mac48Address> receivers = m_protocol->GetPreqReceivers (m_ifIndex);
-  for(std::vector<Mac48Address>::iterator i = receivers.begin (); i != receivers.end (); i ++)
-  {
-    hdr.SetAddr1 (*i);
-    m_parent->SendManagementFrame(packet, hdr);
-  }
+  m_preqQueue.push_back (preq);
+  SendOnePreq ();
 }
 void
 HwmpMacPlugin::RequestDestination (Mac48Address dst)
@@ -211,15 +182,44 @@
     return;
   if (m_myPreq == m_preqQueue.begin ())
     m_myPreq == m_preqQueue.end ();
-  SendPreq(m_preqQueue[0]);
-  //erase first!
-  m_preqQueue.erase (m_preqQueue.begin());
   //reschedule sending PREQ
   NS_ASSERT (!m_preqTimer.IsRunning());
   m_preqTimer = Simulator::Schedule (m_protocol->GetPreqMinInterval (), &HwmpMacPlugin::SendOnePreq, this);
+  Ptr<Packet> packet  = Create<Packet> ();
+  packet->AddHeader(m_preqQueue[0]);
+  //Multihop action header:
+  WifiMeshMultihopActionHeader multihopHdr;
+  WifiMeshMultihopActionHeader::ACTION_VALUE action;
+  action.pathSelection = WifiMeshMultihopActionHeader::PATH_REQUEST;
+  multihopHdr.SetAction (WifiMeshMultihopActionHeader::MESH_PATH_SELECTION, action);
+  packet->AddHeader (multihopHdr);
+  //Mesh header
+  WifiMeshHeader meshHdr;
+  meshHdr.SetMeshTtl (m_protocol->GetMaxTtl ());
+  //TODO: should seqno be here?
+  meshHdr.SetMeshSeqno (0);
+  meshHdr.SetAddressExt(1);
+  meshHdr.SetAddr4(m_preqQueue[0].GetOriginatorAddress ());
+  packet->AddHeader (meshHdr);
+  //create 802.11 header:
+  WifiMacHeader hdr;
+  hdr.SetMultihopAction ();
+  hdr.SetDsNotFrom ();
+  hdr.SetDsNotTo ();
+  hdr.SetAddr2 (m_parent->GetAddress ());
+  hdr.SetAddr3 (Mac48Address::GetBroadcast ());
+  //Send Management frame
+  std::vector <Mac48Address> receivers = m_protocol->GetPreqReceivers (m_ifIndex);
+  for(std::vector<Mac48Address>::iterator i = receivers.begin (); i != receivers.end (); i ++)
+  {
+    hdr.SetAddr1 (*i);
+    m_parent->SendManagementFrame(packet, hdr);
+  }
+  //erase queue
+  m_preqQueue.erase (m_preqQueue.begin());
 }
 void
-HwmpMacPlugin::SendPerr()
+HwmpMacPlugin::SendOnePerr()
 {
   if(m_perrTimer.IsRunning ())
     return;
@@ -228,7 +228,7 @@
     m_myPerr.receivers.clear ();
     m_myPerr.receivers.push_back (Mac48Address::GetBroadcast ());
   }
-  m_perrTimer = Simulator::Schedule (m_protocol->GetPerrMinInterval (), &HwmpMacPlugin::SendPerr, this);
+  m_perrTimer = Simulator::Schedule (m_protocol->GetPerrMinInterval (), &HwmpMacPlugin::SendOnePerr, this);
 //Create packet
   Ptr<Packet> packet  = Create<Packet> ();
   packet->AddHeader(m_myPerr.perr);
@@ -294,7 +294,7 @@
   m_parent->SendManagementFrame(packet, hdr);
 }
 void
-HwmpMacPlugin::SendOnePerr(IePerr perr, std::vector<Mac48Address> receivers)
+HwmpMacPlugin::SendPerr(IePerr perr, std::vector<Mac48Address> receivers)
 {
   m_myPerr.perr.Merge(perr);
   for(unsigned int i = 0; i < receivers.size (); i ++)
@@ -306,7 +306,7 @@
     if(should_add)
       m_myPerr.receivers.push_back(receivers[i]);
   }
-  SendPerr ();
+  SendOnePerr ();
 }
 } //namespace dot11s
 }//namespace ns3
--- a/src/devices/mesh/dot11s/hwmp-mac-plugin.h	Wed Apr 01 16:53:20 2009 +0400
+++ b/src/devices/mesh/dot11s/hwmp-mac-plugin.h	Wed Apr 01 17:38:22 2009 +0400
@@ -62,13 +62,13 @@
   //\{
   void SendPreq(IePreq preq);
   void SendPrep(IePrep prep, Mac48Address receiver);
-  void SendOnePerr(IePerr perr, std::vector<Mac48Address> receivers);
+  void SendPerr(IePerr perr, std::vector<Mac48Address> receivers);
   void RequestDestination (Mac48Address dest);
   //\}
   
   /// Sends one PREQ when PreqMinInterval after last PREQ expires (if any PREQ exists in rhe queue)
   void SendOnePreq ();
-  void SendPerr ();
+  void SendOnePerr ();
 private:
   Ptr<MeshWifiInterfaceMac> m_parent;
   uint32_t m_ifIndex;
--- a/src/devices/mesh/dot11s/hwmp-protocol.cc	Wed Apr 01 16:53:20 2009 +0400
+++ b/src/devices/mesh/dot11s/hwmp-protocol.cc	Wed Apr 01 17:38:22 2009 +0400
@@ -541,7 +541,7 @@
     for(unsigned int j = 0; j < receivers.size(); j ++)
       if(i->first == receivers[j].first)
         receivers_for_interface.push_back(receivers[j].second);
-    i->second->SendOnePerr (perr, receivers_for_interface);
+    i->second->SendPerr (perr, receivers_for_interface);
   }
 }
 std::vector<std::pair<uint32_t, Mac48Address> >
@@ -604,8 +604,10 @@
   QueuedPacket retval;
   retval.pkt = NULL;
   if(m_rqueue.size () != 0)
+  {
     retval = m_rqueue[0];
-  m_rqueue.erase (m_rqueue.begin ());
+    m_rqueue.erase (m_rqueue.begin ());
+  }
   return retval;
 }
 void
@@ -714,7 +716,6 @@
 void
 HwmpProtocol::SendProactivePreq ()
 {
-  NS_LOG_DEBUG ("Sending proactive PREQ");
   IePreq preq;
   //By default: must answer
   preq.SetHopcount (0);
@@ -725,6 +726,7 @@
   //\attention: do not forget to set originator address, sequence
   //number and preq ID in HWMP-MAC plugin
   preq.AddDestinationAddressElement (true, true, Mac48Address::GetBroadcast (), 0);
+  preq.SetOriginatorAddress(m_address);
   for(HwmpPluginMap::iterator i = m_interfaces.begin (); i != m_interfaces.end (); i ++)
     i->second->SendPreq(preq);
   m_proactivePreqTimer = Simulator::Schedule (m_dot11MeshHWMPactiveRootTimeout, &HwmpProtocol::SendProactivePreq, this);
--- a/src/devices/mesh/dot11s/peer-management-protocol.cc	Wed Apr 01 16:53:20 2009 +0400
+++ b/src/devices/mesh/dot11s/peer-management-protocol.cc	Wed Apr 01 17:38:22 2009 +0400
@@ -454,17 +454,15 @@
 {
    PeerManagerPluginMap::iterator plugin = m_plugins.find (interface);
    NS_ASSERT(plugin != m_plugins.end());
-   NS_LOG_UNCOND("LINK between me:"<<plugin->second->GetAddress() <<" and peer:"<<peerAddress<<", at interface "<<interface);
+   NS_LOG_DEBUG(
+       "LINK between me:"<<plugin->second->GetAddress() <<
+       " and peer:"<<peerAddress<<
+       ", at interface "<<interface<<
+       "Status(1 - opened, 0 - closed)"<<status);
    if(status)
-   {
-     NS_LOG_UNCOND("Established");
      m_numberOfActivePeers ++;
-   }
    else
-   {
-     NS_LOG_UNCOND("Closed");
      m_numberOfActivePeers --;
-   }
    if(!m_peerStatusCallback.IsNull ())
      m_peerStatusCallback (peerAddress, interface, status);
 }