21 #include "ie-dot11s-perr.h"
22 #include "ns3/address-utils.h"
23 #include "ns3/packet.h"
40 os << std::endl <<
"<information_element id=" <<
ElementId () <<
">" << std::endl;
41 os <<
"Number of failed destinations: = " << m_addressUnits.size ();
42 for (
unsigned int j = 0; j < m_addressUnits.size (); j++)
44 os <<
"Failed destination address: = " << m_addressUnits[j].destination <<
", sequence number = "
45 << m_addressUnits[j].seqnum;
47 os << std::endl <<
"</information_element>" << std::endl;
50 IePerr::GetNumOfDest ()
const
52 return m_addressUnits.size ();
58 i.
WriteU8 (m_addressUnits.size ());
59 for (
unsigned int j = 0; j < m_addressUnits.size (); j++)
61 WriteTo (i, m_addressUnits[j].destination);
70 uint8_t numOfDest = i.
ReadU8 ();
71 NS_ASSERT ((2 + 10 * numOfDest ) == length);
73 for (
unsigned int j = 0; j < numOfDest; j++)
76 ReadFrom (i, unit.destination);
78 m_addressUnits.push_back (unit);
88 + (6 + 4) * m_addressUnits.size ();
95 for (
unsigned int i = 0; i < m_addressUnits.size (); i++)
97 if (m_addressUnits[i].destination == unit.destination)
102 if ((m_addressUnits.size () + 1) * 10 + 2 > 255)
106 m_addressUnits.push_back (unit);
109 IePerr::IsFull ()
const
113 std::vector<HwmpProtocol::FailedDestination>
114 IePerr::GetAddressUnitVector ()
const
116 return m_addressUnits;
119 IePerr::DeleteAddressUnit (Mac48Address address)
121 for (std::vector<HwmpProtocol::FailedDestination>::iterator i = m_addressUnits.begin (); i
122 != m_addressUnits.end (); i++)
124 if (i->destination == address)
126 m_addressUnits.erase (i);
134 m_addressUnits.clear ();
137 operator== (
const IePerr & a,
const IePerr & b)
139 if (a.m_addressUnits.size () != b.m_addressUnits.size ())
143 for (
unsigned int i = 0; i < a.m_addressUnits.size (); i++)
145 if (a.m_addressUnits[i].destination != b.m_addressUnits[i].destination)
149 if (a.m_addressUnits[i].seqnum != b.m_addressUnits[i].seqnum)
virtual void SerializeInformationField(Buffer::Iterator i) const
structure of unreachable destination - address and sequence number
#define NS_ASSERT(condition)
virtual uint8_t DeserializeInformationField(Buffer::Iterator start, uint8_t length)
virtual uint8_t GetInformationFieldSize() const
uint32_t GetDistanceFrom(Iterator const &o) const
iterator in a Buffer instance
virtual void Print(std::ostream &os) const
In addition, a subclass may optionally override the following...
std::ostream & operator<<(std::ostream &os, const Angles &a)
void WriteU8(uint8_t data)
virtual WifiInformationElementId ElementId() const
Own unique Element ID.
uint8_t WifiInformationElementId
uint32_t ReadLsbtohU32(void)
void WriteHtolsbU32(uint32_t data)