diff --git a/src/mesh/model/dot11s/peer-link.cc b/src/mesh/model/dot11s/peer-link.cc index 1376f714d..585ed807a 100644 --- a/src/mesh/model/dot11s/peer-link.cc +++ b/src/mesh/model/dot11s/peer-link.cc @@ -87,6 +87,8 @@ PeerLink::GetTypeId () return tid; } +const char* const +PeerLink::PeerStateNames[6] = { "IDLE", "OPN_SNT", "CNF_RCVD", "OPN_RCVD", "ESTAB", "HOLDING" }; //----------------------------------------------------------------------------- // PeerLink public interface @@ -105,6 +107,7 @@ PeerLink::PeerLink () : m_retryCounter (0), m_maxPacketFail (3) { + NS_LOG_FUNCTION (this); } PeerLink::~PeerLink () { @@ -112,6 +115,7 @@ PeerLink::~PeerLink () void PeerLink::DoDispose () { + NS_LOG_FUNCTION (this); m_retryTimer.Cancel (); m_holdingTimer.Cancel (); m_confirmTimer.Cancel (); @@ -161,6 +165,7 @@ PeerLink::MLMESetSignalStatusCallback (PeerLink::SignalStatusCallback cb) void PeerLink::BeaconLoss () { + NS_LOG_FUNCTION (this); StateMachine (CNCL); } void @@ -171,9 +176,11 @@ PeerLink::TransmissionSuccess () void PeerLink::TransmissionFailure () { + NS_LOG_FUNCTION (this); m_packetFail++; if (m_packetFail == m_maxPacketFail) { + NS_LOG_DEBUG ("TransmissionFailure:: CNCL"); StateMachine (CNCL); m_packetFail = 0; } @@ -233,6 +240,7 @@ PeerLink::MLMEPeeringRequestReject () void PeerLink::Close (uint16_t localLinkId, uint16_t peerLinkId, PmpReasonCode reason) { + NS_LOG_FUNCTION (this << localLinkId << peerLinkId << reason); if (peerLinkId != 0 && m_localLinkId != peerLinkId) { return; @@ -253,6 +261,7 @@ PeerLink::Close (uint16_t localLinkId, uint16_t peerLinkId, PmpReasonCode reason void PeerLink::OpenAccept (uint16_t localLinkId, IeConfiguration conf, Mac48Address peerMp) { + NS_LOG_FUNCTION (this << localLinkId << peerMp); m_peerLinkId = localLinkId; m_configuration = conf; if (m_peerMeshPointAddress != Mac48Address::GetBroadcast ()) @@ -268,6 +277,7 @@ PeerLink::OpenAccept (uint16_t localLinkId, IeConfiguration conf, Mac48Address p void PeerLink::OpenReject (uint16_t localLinkId, IeConfiguration conf, Mac48Address peerMp, PmpReasonCode reason) { + NS_LOG_FUNCTION (this << localLinkId << peerMp << reason); if (m_peerLinkId == 0) { m_peerLinkId = localLinkId; @@ -287,6 +297,7 @@ void PeerLink::ConfirmAccept (uint16_t localLinkId, uint16_t peerLinkId, uint16_t peerAid, IeConfiguration conf, Mac48Address peerMp) { + NS_LOG_FUNCTION (this << localLinkId << peerLinkId << peerAid << peerMp); if (m_localLinkId != peerLinkId) { return; @@ -318,6 +329,7 @@ void PeerLink::ConfirmReject (uint16_t localLinkId, uint16_t peerLinkId, IeConfiguration conf, Mac48Address peerMp, PmpReasonCode reason) { + NS_LOG_FUNCTION (this << localLinkId << peerLinkId << peerMp << reason); if (m_localLinkId != peerLinkId) { return; @@ -655,6 +667,7 @@ PeerLink::SetHoldingTimer () void PeerLink::HoldingTimeout () { + NS_LOG_FUNCTION (this); StateMachine (TOH); } void @@ -666,12 +679,15 @@ PeerLink::SetRetryTimer () void PeerLink::RetryTimeout () { + NS_LOG_FUNCTION (this); if (m_retryCounter < m_dot11MeshMaxRetries) { + NS_LOG_LOGIC ("Retry timeout TOR1"); StateMachine (TOR1); } else { + NS_LOG_LOGIC ("Retry timeout TOR2"); StateMachine (TOR2); } } diff --git a/src/mesh/model/dot11s/peer-link.h b/src/mesh/model/dot11s/peer-link.h index 7717545b1..928de72b2 100644 --- a/src/mesh/model/dot11s/peer-link.h +++ b/src/mesh/model/dot11s/peer-link.h @@ -59,6 +59,10 @@ public: ESTAB, HOLDING, }; + /** + * \brief Literal names of Mesh Peer Management states for use in log messages + */ + static const char* const PeerStateNames[6]; /// Process beacon received from peer void SetBeaconInformation (Time lastBeacon, Time BeaconInterval); /** diff --git a/src/mesh/model/dot11s/peer-management-protocol-mac.cc b/src/mesh/model/dot11s/peer-management-protocol-mac.cc index 5f739fc8f..bbe2cb86c 100644 --- a/src/mesh/model/dot11s/peer-management-protocol-mac.cc +++ b/src/mesh/model/dot11s/peer-management-protocol-mac.cc @@ -29,7 +29,11 @@ #include "ns3/wifi-mac-header.h" #include "ns3/mesh-information-element-vector.h" #include "ns3/log.h" + namespace ns3 { + +NS_LOG_COMPONENT_DEFINE ("PeerManagementProtocolMac"); + namespace dot11s { PeerManagementProtocolMac::PeerManagementProtocolMac (uint32_t interface, Ptr protocol) @@ -62,11 +66,13 @@ PeerManagementProtocolMac::TxOk (WifiMacHeader const &hdr) bool PeerManagementProtocolMac::Receive (Ptr const_packet, const WifiMacHeader & header) { + NS_LOG_FUNCTION (this << const_packet << header); // First of all we copy a packet, because we need to remove some //headers Ptr packet = const_packet->Copy (); if (header.IsBeacon ()) { + NS_LOG_DEBUG ("Is Beacon from " << header.GetAddr2 ()); MgtBeaconHeader beacon_hdr; packet->RemoveHeader (beacon_hdr); MeshInformationElementVector elements; @@ -79,6 +85,10 @@ PeerManagementProtocolMac::Receive (Ptr const_packet, const WifiMacHeade m_protocol->ReceiveBeacon (m_ifIndex, header.GetAddr2 (), MicroSeconds ( beacon_hdr.GetBeaconIntervalUs ()), beaconTiming); } + else + { + NS_LOG_DEBUG ("MeshId mismatch " << m_protocol->GetMeshId ()->PeekString () << " " << (*meshId) << "; ignoring"); + } // Beacon shall not be dropped. May be needed to another plugins return true; } @@ -86,12 +96,14 @@ PeerManagementProtocolMac::Receive (Ptr const_packet, const WifiMacHeade IeConfiguration config; if (header.IsAction ()) { + NS_LOG_DEBUG ("Is action"); WifiActionHeader actionHdr; packet->RemoveHeader (actionHdr); WifiActionHeader::ActionValue actionValue = actionHdr.GetAction (); // If can not handle - just return; if (actionHdr.GetCategory () != WifiActionHeader::SELF_PROTECTED) { + NS_LOG_DEBUG ("Cannot handle non SELF PROTECTED"); return m_protocol->IsActiveLink (m_ifIndex, header.GetAddr2 ()); } m_stats.rxMgt++; @@ -100,12 +112,14 @@ PeerManagementProtocolMac::Receive (Ptr const_packet, const WifiMacHeade Mac48Address peerMpAddress = header.GetAddr3 (); if (actionValue.selfProtectedAction == WifiActionHeader::PEER_LINK_OPEN) { + NS_LOG_DEBUG ("Received PEER_LINK_OPEN"); PeerLinkOpenStart::PlinkOpenStartFields fields; PeerLinkOpenStart peerFrame; packet->RemoveHeader (peerFrame); fields = peerFrame.GetFields (); if (!fields.meshId.IsEqual ( *(m_protocol->GetMeshId ()))) { + NS_LOG_DEBUG ("PEER_LINK_OPEN: MeshId mismatch"); m_protocol->ConfigurationMismatch (m_ifIndex, peerAddress); // Broken peer link frame - drop it m_stats.brokenMgt++; @@ -113,6 +127,7 @@ PeerManagementProtocolMac::Receive (Ptr const_packet, const WifiMacHeade } if (!(m_parent->CheckSupportedRates (fields.rates))) { + NS_LOG_DEBUG ("PEER_LINK_OPEN: configuration mismatch"); m_protocol->ConfigurationMismatch (m_ifIndex, peerAddress); // Broken peer link frame - drop it m_stats.brokenMgt++; @@ -122,12 +137,14 @@ PeerManagementProtocolMac::Receive (Ptr const_packet, const WifiMacHeade } else if (actionValue.selfProtectedAction == WifiActionHeader::PEER_LINK_CONFIRM) { + NS_LOG_DEBUG ("Received PEER_LINK_CONFIRM"); PeerLinkConfirmStart::PlinkConfirmStartFields fields; PeerLinkConfirmStart peerFrame; packet->RemoveHeader (peerFrame); fields = peerFrame.GetFields (); if (!(m_parent->CheckSupportedRates (fields.rates))) { + NS_LOG_DEBUG ("PEER_LINK_CONFIRM: configuration mismatch"); m_protocol->ConfigurationMismatch (m_ifIndex, peerAddress); // Broken peer link frame - drop it m_stats.brokenMgt++; @@ -138,12 +155,14 @@ PeerManagementProtocolMac::Receive (Ptr const_packet, const WifiMacHeade } else if (actionValue.selfProtectedAction == WifiActionHeader::PEER_LINK_CLOSE) { + NS_LOG_DEBUG ("Received PEER_LINK_CLOSE"); PeerLinkCloseStart::PlinkCloseStartFields fields; PeerLinkCloseStart peerFrame; packet->RemoveHeader (peerFrame); fields = peerFrame.GetFields (); if (!fields.meshId.IsEqual ( *(m_protocol->GetMeshId ()))) { + NS_LOG_DEBUG ("PEER_LINK_CLOSE: configuration mismatch"); m_protocol->ConfigurationMismatch (m_ifIndex, peerAddress); // Broken peer link frame - drop it m_stats.brokenMgt++; @@ -188,6 +207,7 @@ bool PeerManagementProtocolMac::UpdateOutcomingFrame (Ptr packet, WifiMacHeader & header, Mac48Address from, Mac48Address to) { + NS_LOG_FUNCTION (this << packet << header << from << to); if (header.IsAction ()) { WifiActionHeader actionHdr; @@ -230,6 +250,7 @@ void PeerManagementProtocolMac::SendPeerLinkManagementFrame (Mac48Address peerAddress, Mac48Address peerMpAddress, uint16_t aid, IePeerManagement peerElement, IeConfiguration meshConfig) { + NS_LOG_FUNCTION (this << peerAddress << peerMpAddress); //Create a packet: meshConfig.SetNeighborCount (m_protocol->GetNumberOfLinks ()); Ptr packet = Create (); diff --git a/src/mesh/model/dot11s/peer-management-protocol.cc b/src/mesh/model/dot11s/peer-management-protocol.cc index d94d3ff0b..2c326674f 100644 --- a/src/mesh/model/dot11s/peer-management-protocol.cc +++ b/src/mesh/model/dot11s/peer-management-protocol.cc @@ -365,14 +365,14 @@ PeerManagementProtocol::IsActiveLink (uint32_t interface, Mac48Address peerAddre bool PeerManagementProtocol::ShouldSendOpen (uint32_t interface, Mac48Address peerAddress) { - return (m_stats.linksTotal <= m_maxNumberOfPeerLinks); + return (m_stats.linksTotal < m_maxNumberOfPeerLinks); } bool PeerManagementProtocol::ShouldAcceptOpen (uint32_t interface, Mac48Address peerAddress, PmpReasonCode & reasonCode) { - if (m_stats.linksTotal > m_maxNumberOfPeerLinks) + if (m_stats.linksTotal >= m_maxNumberOfPeerLinks) { reasonCode = REASON11S_MESH_MAX_PEERS; return false; @@ -498,9 +498,11 @@ PeerManagementProtocol::PeerLinkStatus (uint32_t interface, Mac48Address peerAdd { PeerManagementProtocolMacMap::iterator plugin = m_plugins.find (interface); NS_ASSERT (plugin != m_plugins.end ()); - NS_LOG_DEBUG ("Link between me:" << m_address << " my interface:" << plugin->second->GetAddress () - << " and peer mesh point:" << peerMeshPointAddress << " and its interface:" << peerAddress - << ", at my interface ID:" << interface << ". State movement:" << ostate << " -> " << nstate); + NS_LOG_DEBUG ("Link between me:" << m_address << " my interface:" + << plugin->second->GetAddress () + << " and peer mesh point:" << peerMeshPointAddress << " and its interface:" << peerAddress + << ", at my interface ID:" << interface << ". State movement:" << PeerLink::PeerStateNames[ostate] + << " -> " << PeerLink::PeerStateNames[nstate]); if ((nstate == PeerLink::ESTAB) && (ostate != PeerLink::ESTAB)) { NotifyLinkOpen (peerMeshPointAddress, peerAddress, plugin->second->GetAddress (), interface);