21 #include "peer-link-frame.h"
22 #include "ie-dot11s-peer-management.h"
23 #include "ns3/mesh-wifi-interface-mac.h"
25 #include "ns3/packet.h"
29 NS_OBJECT_ENSURE_REGISTERED (PeerLinkFrameStart);
31 PeerLinkFrameStart::PeerLinkFrameStart () :
32 m_subtype (255), m_capability (0), m_aid (0), m_rates (SupportedRates ()), m_meshId (),
33 m_config (IeConfiguration ()), m_reasonCode ((uint16_t)REASON11S_RESERVED)
44 m_subtype = fields.subtype;
45 m_protocol = fields.protocol;
46 if (m_subtype != (uint8_t)(WifiActionHeader::PEER_LINK_CLOSE))
48 m_capability = fields.capability;
50 if (m_subtype == (uint8_t)(WifiActionHeader::PEER_LINK_CONFIRM))
54 if (m_subtype != (uint8_t)(WifiActionHeader::PEER_LINK_CLOSE))
56 m_rates = fields.rates;
58 if (m_subtype != (uint8_t)(WifiActionHeader::PEER_LINK_CONFIRM))
60 m_meshId = fields.meshId;
62 if (m_subtype != (uint8_t)(WifiActionHeader::PEER_LINK_CLOSE))
64 m_config = fields.config;
68 m_reasonCode = fields.reasonCode;
71 PeerLinkFrameStart::PlinkFrameStartFields
72 PeerLinkFrameStart::GetFields ()
const
74 PlinkFrameStartFields retval;
76 retval.subtype = m_subtype;
77 retval.capability = m_capability;
79 retval.rates = m_rates;
80 retval.meshId = m_meshId;
81 retval.config = m_config;
82 retval.reasonCode = m_reasonCode;
86 PeerLinkFrameStart::GetTypeId ()
88 static TypeId tid = TypeId (
"ns3::dot11s::PeerLinkFrameStart").SetParent<Header> ().AddConstructor<
89 PeerLinkFrameStart> ();
100 os <<
"subtype = " << (uint16_t) m_subtype << std::endl <<
"capability = " << m_capability << std::endl <<
"laid = "
101 << (uint16_t) m_aid << std::endl <<
"rates = " << m_rates << std::endl <<
"meshId = ";
103 os << std::endl <<
"configuration = ";
105 os << std::endl <<
"reason code = " << m_reasonCode;
112 if ((uint8_t)(WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
116 if ((uint8_t)(WifiActionHeader::PEER_LINK_CONFIRM) == m_subtype)
120 if ((uint8_t)(WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
123 size += m_rates.extended.GetSerializedSize ();
125 if ((uint8_t)(WifiActionHeader::PEER_LINK_CONFIRM) != m_subtype)
129 if ((uint8_t)(WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
145 if ((uint8_t)(WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
149 if ((uint8_t)(WifiActionHeader::PEER_LINK_CONFIRM) == m_subtype)
153 if ((uint8_t)(WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
156 i = m_rates.extended.Serialize (i);
158 if ((uint8_t)(WifiActionHeader::PEER_LINK_CONFIRM) != m_subtype)
162 if ((uint8_t)(WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
178 uint8_t length = i.
ReadU8 ();
182 NS_FATAL_ERROR (
"Broken frame: Element ID does not match IE itself!");
186 if ((uint8_t)(WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
190 if ((uint8_t)(WifiActionHeader::PEER_LINK_CONFIRM) == m_subtype)
194 if ((uint8_t)(WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
199 if ((uint8_t)(WifiActionHeader::PEER_LINK_CONFIRM) != m_subtype)
202 uint8_t length = i.
ReadU8 ();
206 NS_FATAL_ERROR (
"Broken frame: Element ID does not match IE itself!");
210 if ((uint8_t)(WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
213 uint8_t length = i.
ReadU8 ();
217 NS_FATAL_ERROR (
"Broken frame: Element ID does not match IE itself!");
230 return ((a.m_subtype == b.m_subtype) && (a.m_capability == b.m_capability) && (a.m_aid == b.m_aid)
231 && (a.m_meshId.IsEqual (b.m_meshId)) && (a.m_config == b.m_config)
232 && (a.m_reasonCode == b.m_reasonCode));
802.11s Peer link management frame
virtual uint8_t DeserializeInformationField(Buffer::Iterator i, uint8_t length)
void SetPlinkFrameSubtype(uint8_t subtype)
virtual TypeId GetInstanceTypeId() const
virtual void Serialize(Buffer::Iterator start) const
#define NS_ASSERT(condition)
virtual WifiInformationElementId ElementId() const
Own unique Element ID.
virtual void Print(std::ostream &os) const
uint32_t GetDistanceFrom(Iterator const &o) const
#define NS_FATAL_ERROR(msg)
fatal error handling
iterator in a Buffer instance
virtual uint8_t DeserializeInformationField(Buffer::Iterator i, uint8_t length)
virtual void Print(std::ostream &os) const
In addition, a subclass may optionally override the following...
virtual void Print(std::ostream &os) const
In addition, a subclass may optionally override the following...
virtual uint8_t DeserializeInformationField(Buffer::Iterator start, uint8_t length)
virtual WifiInformationElementId ElementId() const
Own unique Element ID.
virtual uint8_t GetInformationFieldSize() const
virtual WifiInformationElementId ElementId() const
Own unique Element ID.
void WriteHtolsbU16(uint16_t data)
virtual uint32_t GetSerializedSize() const
uint16_t ReadLsbtohU16(void)
uint8_t WifiInformationElementId
virtual uint8_t GetInformationFieldSize() const
virtual uint32_t Deserialize(Buffer::Iterator start)
virtual uint8_t GetInformationFieldSize() const