This is plugin to Mesh WiFi MAC, which implements the interface to dot11s peer management protocol: it takes proper frames from MAC-layer, extracts peer link management information element and mesh configuration element and passes it to main part of protocol. More...
#include "peer-management-protocol-mac.h"
Classes | |
struct | PlinkFrameStart |
This structure keeps all fields in peer link management frame, which are not subclasses of WifiInformationElement. More... | |
struct | Statistics |
Statistics structure. More... | |
Public Member Functions | |
PeerManagementProtocolMac (uint32_t interface, Ptr< PeerManagementProtocol > protocol) | |
Constructor. More... | |
~PeerManagementProtocolMac () override | |
int64_t | AssignStreams (int64_t stream) override |
Assign the streams. More... | |
bool | Receive (Ptr< Packet > packet, const WifiMacHeader &header) override |
Receive and process a packet. More... | |
void | SetParent (Ptr< MeshWifiInterfaceMac > parent) override |
Set pointer to parent. More... | |
void | UpdateBeacon (MeshWifiBeacon &beacon) const override |
Add beacon timing and mesh ID information elements, and notify beacon sent. More... | |
bool | UpdateOutcomingFrame (Ptr< Packet > packet, WifiMacHeader &header, Mac48Address from, Mac48Address to) override |
This method appears to test a few conditions. More... | |
Statistics | |
void | Report (std::ostream &) const |
Report statistics. More... | |
void | ResetStats () |
Reset stats. More... | |
uint32_t | GetLinkMetric (Mac48Address peerAddress) |
Get the link metric. More... | |
Public Member Functions inherited from ns3::MeshWifiInterfaceMacPlugin | |
virtual | ~MeshWifiInterfaceMacPlugin () |
This is for subclasses. More... | |
Public Member Functions inherited from ns3::SimpleRefCount< MeshWifiInterfaceMacPlugin > | |
SimpleRefCount () | |
Default constructor. More... | |
SimpleRefCount (const SimpleRefCount &o[[maybe_unused]]) | |
Copy constructor. More... | |
uint32_t | GetReferenceCount () const |
Get the reference count of the object. More... | |
SimpleRefCount & | operator= (const SimpleRefCount &o[[maybe_unused]]) |
Assignment operator. More... | |
void | Ref () const |
Increment the reference count. More... | |
void | Unref () const |
Decrement the reference count. More... | |
Private Member Functions | |
PeerManagementProtocolMac (const PeerManagementProtocolMac &) | |
type conversion operator More... | |
PeerManagementProtocolMac & | operator= (const PeerManagementProtocolMac &peer) |
assignment operator More... | |
Private Attributes | |
Information about MAC and protocol: | |
Ptr< MeshWifiInterfaceMac > | m_parent |
parent More... | |
uint32_t | m_ifIndex |
IF index. More... | |
Ptr< PeerManagementProtocol > | m_protocol |
protocol More... | |
Friends | |
class | PeerLink |
allow PeerLink class access friend access More... | |
class | PeerManagementProtocol |
allow PeerManagementProtocol class access friend access More... | |
Create peer link management frames | |
Statistics | m_stats |
statistics More... | |
Ptr< Packet > | CreatePeerLinkOpenFrame () |
Create peer link open frame function. More... | |
Ptr< Packet > | CreatePeerLinkConfirmFrame () |
Create peer link confirm frame function. More... | |
Ptr< Packet > | CreatePeerLinkCloseFrame () |
Create peer link clode frame function. More... | |
PlinkFrameStart | ParsePlinkFrame (Ptr< const Packet > packet) |
Parses the start of the frame, where no WifiInformationElements exist. More... | |
void | TxError (WifiMacDropReason reason, Ptr< const WifiMpdu > mpdu) |
Closes link when a proper number of successive transmissions have failed. More... | |
void | TxOk (Ptr< const WifiMpdu > mpdu) |
Transmit OK function. More... | |
void | SetBeaconShift (Time shift) |
Set beacon shift function. More... | |
void | SetPeerManagerProtocol (Ptr< PeerManagementProtocol > protocol) |
Set peer manager protocol function. More... | |
void | SendPeerLinkManagementFrame (Mac48Address peerAddress, Mac48Address peerMpAddress, uint16_t aid, IePeerManagement peerElement, IeConfiguration meshConfig) |
Send peer link management frame function. More... | |
Mac48Address | GetAddress () const |
debug only, used to print established links More... | |
This is plugin to Mesh WiFi MAC, which implements the interface to dot11s peer management protocol: it takes proper frames from MAC-layer, extracts peer link management information element and mesh configuration element and passes it to main part of protocol.
Definition at line 47 of file peer-management-protocol-mac.h.
ns3::dot11s::PeerManagementProtocolMac::PeerManagementProtocolMac | ( | uint32_t | interface, |
Ptr< PeerManagementProtocol > | protocol | ||
) |
Constructor.
interface | interface index |
protocol | peer management protocol |
Definition at line 42 of file peer-management-protocol-mac.cc.
References m_ifIndex, and m_protocol.
|
override |
Definition at line 49 of file peer-management-protocol-mac.cc.
|
private |
type conversion operator
|
overridevirtual |
Assign the streams.
stream | the stream to assign |
Implements ns3::MeshWifiInterfaceMacPlugin.
Definition at line 442 of file peer-management-protocol-mac.cc.
References m_protocol.
Create peer link clode frame function.
Create peer link confirm frame function.
Create peer link open frame function.
|
private |
debug only, used to print established links
Definition at line 360 of file peer-management-protocol-mac.cc.
References m_parent.
Referenced by ns3::dot11s::PeerLink::Report().
uint32_t ns3::dot11s::PeerManagementProtocolMac::GetLinkMetric | ( | Mac48Address | peerAddress | ) |
Get the link metric.
peerAddress | the peer address |
Definition at line 436 of file peer-management-protocol-mac.cc.
References m_parent.
Referenced by ns3::dot11s::PeerLink::Report().
|
private |
assignment operator
peer | the object to assign |
|
private |
Parses the start of the frame, where no WifiInformationElements exist.
packet | the packet |
|
overridevirtual |
Receive and process a packet.
packet | the packet received |
header | the header |
Implements ns3::MeshWifiInterfaceMacPlugin.
Definition at line 76 of file peer-management-protocol-mac.cc.
References ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::aid, ns3::dot11s::PeerManagementProtocolMac::Statistics::brokenMgt, ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::config, ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::config, ns3::Packet::Copy(), ns3::MeshInformationElementVector::FindFirst(), ns3::WifiActionHeader::GetAction(), ns3::WifiMacHeader::GetAddr2(), ns3::WifiMacHeader::GetAddr3(), ns3::MgtProbeResponseHeader::GetBeaconIntervalUs(), ns3::WifiActionHeader::GetCategory(), ns3::dot11s::PeerLinkOpenStart::GetFields(), ns3::dot11s::PeerLinkCloseStart::GetFields(), ns3::dot11s::PeerLinkConfirmStart::GetFields(), ns3::Packet::GetSize(), IE_BEACON_TIMING, IE_MESH_ID, IE_MESH_PEERING_MANAGEMENT, ns3::WifiMacHeader::IsAction(), ns3::WifiMacHeader::IsBeacon(), ns3::dot11s::IeMeshId::IsEqual(), m_ifIndex, m_parent, m_protocol, m_stats, ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::meshId, ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields::meshId, ns3::MicroSeconds(), NS_ASSERT, NS_FATAL_ERROR, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::WifiActionHeader::PEER_LINK_CLOSE, ns3::WifiActionHeader::PEER_LINK_CONFIRM, ns3::WifiActionHeader::PEER_LINK_OPEN, ns3::Packet::RemoveHeader(), ns3::dot11s::PeerManagementProtocolMac::Statistics::rxClose, ns3::dot11s::PeerManagementProtocolMac::Statistics::rxConfirm, ns3::dot11s::PeerManagementProtocolMac::Statistics::rxMgt, ns3::dot11s::PeerManagementProtocolMac::Statistics::rxMgtBytes, ns3::dot11s::PeerManagementProtocolMac::Statistics::rxOpen, ns3::WifiActionHeader::SELF_PROTECTED, and ns3::WifiActionHeader::ActionValue::selfProtectedAction.
void ns3::dot11s::PeerManagementProtocolMac::Report | ( | std::ostream & | os | ) | const |
Report statistics.
os | the output stream |
Definition at line 420 of file peer-management-protocol-mac.cc.
References m_parent, m_stats, and ns3::dot11s::PeerManagementProtocolMac::Statistics::Print().
void ns3::dot11s::PeerManagementProtocolMac::ResetStats | ( | ) |
|
private |
Send peer link management frame function.
peerAddress | the peer MAC address |
peerMpAddress | the peer MP address |
aid | the AID |
peerElement | IePeerManagement |
meshConfig | IeConfiguration |
Definition at line 278 of file peer-management-protocol-mac.cc.
References check-style-clang-format::action, ns3::Packet::AddHeader(), ns3::MeshInformationElementVector::AddInformationElement(), ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::aid, ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::capability, ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::capability, ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::config, ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::config, ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::extendedRates, ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::extendedRates, ns3::Packet::GetSize(), m_parent, m_protocol, m_stats, ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::meshId, ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields::meshId, NS_LOG_FUNCTION, ns3::WifiActionHeader::PEER_LINK_CLOSE, ns3::WifiActionHeader::PEER_LINK_CONFIRM, ns3::WifiActionHeader::PEER_LINK_OPEN, ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::rates, ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::rates, ns3::WifiActionHeader::SELF_PROTECTED, ns3::WifiActionHeader::SetAction(), ns3::WifiMacHeader::SetAddr1(), ns3::WifiMacHeader::SetAddr2(), ns3::WifiMacHeader::SetAddr3(), ns3::WifiMacHeader::SetDsNotFrom(), ns3::WifiMacHeader::SetDsNotTo(), ns3::dot11s::IeConfiguration::SetNeighborCount(), ns3::dot11s::PeerLinkCloseStart::SetPlinkCloseStart(), ns3::dot11s::PeerLinkConfirmStart::SetPlinkConfirmStart(), ns3::dot11s::PeerLinkOpenStart::SetPlinkOpenStart(), ns3::WifiMacHeader::SetType(), ns3::dot11s::IePeerManagement::SubtypeIsClose(), ns3::dot11s::IePeerManagement::SubtypeIsConfirm(), ns3::dot11s::IePeerManagement::SubtypeIsOpen(), ns3::dot11s::PeerManagementProtocolMac::Statistics::txClose, ns3::dot11s::PeerManagementProtocolMac::Statistics::txConfirm, ns3::dot11s::PeerManagementProtocolMac::Statistics::txMgt, ns3::dot11s::PeerManagementProtocolMac::Statistics::txMgtBytes, ns3::dot11s::PeerManagementProtocolMac::Statistics::txOpen, and ns3::WIFI_MAC_MGT_ACTION.
Referenced by ns3::dot11s::PeerLink::SendPeerLinkClose(), ns3::dot11s::PeerLink::SendPeerLinkConfirm(), and ns3::dot11s::PeerLink::SendPeerLinkOpen().
|
private |
Set beacon shift function.
shift | the beacon time shift |
Definition at line 373 of file peer-management-protocol-mac.cc.
References ns3::dot11s::PeerManagementProtocolMac::Statistics::beaconShift, m_parent, m_stats, and ns3::Seconds().
|
overridevirtual |
Set pointer to parent.
parent | Ptr<MeshWifiInterfaceMac> |
Implements ns3::MeshWifiInterfaceMacPlugin.
Definition at line 54 of file peer-management-protocol-mac.cc.
References m_parent, ns3::MakeCallback(), TxError(), and TxOk().
|
private |
Set peer manager protocol function.
protocol | the peer manager protocol |
|
private |
Closes link when a proper number of successive transmissions have failed.
reason | the reason why the MPDU was dropped |
mpdu | the dropped MPDU |
Definition at line 64 of file peer-management-protocol-mac.cc.
References m_ifIndex, and m_protocol.
Referenced by SetParent().
Transmit OK function.
mpdu | the MPDU |
Definition at line 70 of file peer-management-protocol-mac.cc.
References m_ifIndex, and m_protocol.
Referenced by SetParent().
|
overridevirtual |
Add beacon timing and mesh ID information elements, and notify beacon sent.
beacon | the beacon |
Implements ns3::MeshWifiInterfaceMacPlugin.
Definition at line 266 of file peer-management-protocol-mac.cc.
References ns3::MeshWifiBeacon::AddInformationElement(), ns3::MeshWifiBeacon::GetBeaconInterval(), m_ifIndex, and m_protocol.
|
overridevirtual |
This method appears to test a few conditions.
If an action frame, it returns true if SELF_PROTECTED. It then checks if it is either a broadcast or sent on an active link, and returns true if so. Otherwise, it returns false (indicating it is to be dropped)
packet | the packet |
header | the header |
from | the MAC address of the sender |
to | the MAC address of the receiver |
Implements ns3::MeshWifiInterfaceMacPlugin.
Definition at line 232 of file peer-management-protocol-mac.cc.
References ns3::dot11s::PeerManagementProtocolMac::Statistics::dropped, ns3::WifiMacHeader::GetAddr1(), ns3::WifiActionHeader::GetCategory(), ns3::WifiMacHeader::IsAction(), ns3::Mac48Address::IsGroup(), m_ifIndex, m_protocol, m_stats, NS_LOG_FUNCTION, ns3::Packet::PeekHeader(), and ns3::WifiActionHeader::SELF_PROTECTED.
|
friend |
allow PeerLink class access friend access
Definition at line 130 of file peer-management-protocol-mac.h.
|
friend |
allow PeerManagementProtocol class access friend access
Definition at line 128 of file peer-management-protocol-mac.h.
|
private |
IF index.
Definition at line 239 of file peer-management-protocol-mac.h.
Referenced by PeerManagementProtocolMac(), Receive(), TxError(), TxOk(), UpdateBeacon(), and UpdateOutcomingFrame().
|
private |
parent
Definition at line 238 of file peer-management-protocol-mac.h.
Referenced by GetAddress(), GetLinkMetric(), Receive(), Report(), SendPeerLinkManagementFrame(), SetBeaconShift(), and SetParent().
|
private |
protocol
Definition at line 240 of file peer-management-protocol-mac.h.
Referenced by PeerManagementProtocolMac(), AssignStreams(), Receive(), SendPeerLinkManagementFrame(), TxError(), TxOk(), UpdateBeacon(), and UpdateOutcomingFrame().
|
private |
statistics
Definition at line 236 of file peer-management-protocol-mac.h.
Referenced by Receive(), Report(), ResetStats(), SendPeerLinkManagementFrame(), SetBeaconShift(), and UpdateOutcomingFrame().