--- 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);
}