16#include "ns3/queue-item.h"
17#include "ns3/socket.h"
26 addressTidPair.first.CopyTo(buffer);
27 buffer[6] = addressTidPair.second;
29 std::string s(buffer, buffer + 7);
30 return std::hash<std::string>{}(s);
37 address.CopyTo(buffer);
39 std::string s(buffer, buffer + 6);
40 return std::hash<std::string>{}(s);
72 NS_ABORT_MSG(
"TID " << tid <<
" does not belong to this AC");
92 return static_cast<uint8_t
>(left) >
static_cast<uint8_t
>(right);
100 return (left == right || left > right);
106 return !(left >= right);
112 return !(left > right);
148 uint16_t numberSeq = (seqControl >> 4) & 0x0fff;
149 integer = (4096 - (endSequence + 1) + numberSeq) % 4096;
151 integer += (seqControl & 0x000f);
160 uint16_t distance = ((seqNumber - startingSeq) + 4096) % 4096;
161 return (distance >= 2048);
175 packet->PeekHeader(baReqHdr);
181 packet->PeekHeader(baRespHdr);
188 pkt->RemoveHeader(actionHdr);
196 pkt->RemoveHeader(reqHdr);
201 pkt->RemoveHeader(respHdr);
206 pkt->RemoveHeader(delHdr);
210 NS_FATAL_ERROR(
"Cannot extract Traffic ID from this BA action frame");
216 NS_FATAL_ERROR(
"Cannot extract Traffic ID from this action frame");
230 uint8_t priority = 0;
236 priority = dscp >> 5;
242 item->GetPacket()->ReplacePacketTag(priorityTag);
Smart pointer class similar to boost::intrusive_ptr.
indicates whether the socket has a priority set.
void SetPriority(uint8_t priority)
Set the tag's priority.
WifiAc(uint8_t lowTid, uint8_t highTid)
Constructor.
uint8_t GetOtherTid(uint8_t tid) const
Given a TID belonging to this Access Category, get the other TID of this AC.
uint8_t m_highTid
the TID with higher priority
uint8_t GetHighTid() const
Get the TID with higher priority.
uint8_t GetLowTid() const
Get the TID with lower priority.
uint8_t m_lowTid
the TID with lower priority
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message.
bool operator>=(const int64x64_t &lhs, const int64x64_t &rhs)
Greater or equal operator.
bool operator<=(const int64x64_t &lhs, const int64x64_t &rhs)
Less or equal operator.
bool operator>(const Length &left, const Length &right)
Check if left has a value greater than right.
AcIndex QosUtilsMapTidToAc(uint8_t tid)
Maps TID (Traffic ID) to Access classes.
bool QosUtilsIsOldPacket(uint16_t startingSeq, uint16_t seqNumber)
This function checks if packet with sequence number seqNumber is an "old" packet.
uint32_t QosUtilsMapSeqControlToUniqueInteger(uint16_t seqControl, uint16_t endSequence)
Next function is useful to correctly sort buffered packets under block ack.
uint8_t GetTid(Ptr< const Packet > packet, const WifiMacHeader hdr)
This function is useful to get traffic id of different packet types.
AcIndex
This enumeration defines the Access Categories as an enumeration with values corresponding to the AC ...
uint8_t SelectQueueByDSField(Ptr< QueueItem > item)
Determine the TX queue for a given packet.
@ AC_UNDEF
Total number of ACs.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
bool operator<(const EventId &a, const EventId &b)
const std::map< AcIndex, WifiAc > wifiAcList
Map containing the four ACs in increasing order of priority (according to Table 10-1 "UP-to-AC Mappin...
std::pair< Mac48Address, uint8_t > WifiAddressTidPair
(MAC address, TID) pair
std::size_t operator()(const Mac48Address &address) const
Functional operator for MAC address hash computation.
std::size_t operator()(const WifiAddressTidPair &addressTidPair) const
Functional operator for (MAC address, TID) hash computation.