mesh: Logging and some cleanup of peer link models
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
/**
|
||||
|
||||
@@ -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<PeerManagementProtocol> protocol)
|
||||
@@ -62,11 +66,13 @@ PeerManagementProtocolMac::TxOk (WifiMacHeader const &hdr)
|
||||
bool
|
||||
PeerManagementProtocolMac::Receive (Ptr<Packet> 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> 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<Packet> 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<Packet> 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<Packet> 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<Packet> 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<Packet> 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<Packet> 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> 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> packet = Create<Packet> ();
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user