--- a/src/devices/mesh/mesh-wifi-interface-mac.cc Fri Jul 10 17:59:20 2009 +0400
+++ b/src/devices/mesh/mesh-wifi-interface-mac.cc Fri Jul 10 18:30:39 2009 +0400
@@ -31,6 +31,7 @@
#include "ns3/simulator.h"
#include "ns3/yans-wifi-phy.h"
#include "ns3/pointer.h"
+#include "ns3/qos-tag.h"
NS_LOG_COMPONENT_DEFINE ("MeshWifiInterfaceMac");
@@ -366,6 +367,7 @@
{
// copy packet to allow modifications
Ptr<Packet> packet = const_packet->Copy ();
+ packet->AddPacketTag (QosTag(6));
WifiMacHeader hdr;
hdr.SetTypeData ();
hdr.SetAddr2 (GetAddress ());
@@ -373,6 +375,11 @@
hdr.SetAddr4 (from);
hdr.SetDsFrom ();
hdr.SetDsTo ();
+ // Fill QoS fields:
+ hdr.SetQosAckPolicy (WifiMacHeader::NORMAL_ACK);
+ hdr.SetQosNoEosp ();
+ hdr.SetQosNoAmsdu ();
+ hdr.SetQosTxopLimit (0);
// Address 1 is unknwon here. Routing plugin is responsible to correctly set it.
hdr.SetAddr1 (Mac48Address ());
@@ -400,9 +407,16 @@
}
destination->RecordDisassociated ();
}
+ //Classify: application sets a tag, which is removed here
+ // Get Qos tag:
+ AccessClass ac = AC_BE;
+ QosTag tag;
+ if(packet->RemovePacketTag (tag))
+ ac = QosUtilsMapTidToAc (tag.Get ());
m_stats.sentFrames ++;
m_stats.sentBytes += packet->GetSize ();
- m_queues[AC_BK]->Queue (packet, hdr);
+ NS_ASSERT(m_queues.find(ac) != m_queues.end ());
+ m_queues[ac]->Queue (packet, hdr);
}
void
@@ -597,6 +611,9 @@
if (drop) return; // plugin drops frame
}
+ // Check if QoS tag exists and add it:
+ if (hdr->IsQosData ())
+ packet->AddPacketTag (QosTag (hdr->GetQosTid ()));
// Forward data up
if (hdr->IsData ())
ForwardUp (packet, hdr->GetAddr4(), hdr->GetAddr3());
--- a/src/devices/wifi/qos-tag.cc Fri Jul 10 17:59:20 2009 +0400
+++ b/src/devices/wifi/qos-tag.cc Fri Jul 10 18:30:39 2009 +0400
@@ -43,7 +43,11 @@
return GetTypeId ();
}
-QosTag::QosTag()
+QosTag::QosTag ():
+ m_tid (0)
+{}
+QosTag::QosTag (uint8_t tid):
+ m_tid (tid)
{}
uint32_t
--- a/src/devices/wifi/qos-tag.h Fri Jul 10 17:59:20 2009 +0400
+++ b/src/devices/wifi/qos-tag.h Fri Jul 10 18:30:39 2009 +0400
@@ -33,6 +33,7 @@
virtual TypeId GetInstanceTypeId (void) const;
QosTag ();
+ QosTag (uint8_t tid);
virtual void Serialize (TagBuffer i) const;
virtual void Deserialize (TagBuffer i);
virtual uint32_t GetSerializedSize () const;
--- a/src/devices/wifi/qos-utils.cc Fri Jul 10 17:59:20 2009 +0400
+++ b/src/devices/wifi/qos-utils.cc Fri Jul 10 18:30:39 2009 +0400
@@ -28,30 +28,23 @@
switch (tid) {
case 0 :
return AC_BE;
- break;
case 1 :
return AC_BK;
- break;
case 2 :
return AC_BK;
- break;
case 3 :
return AC_BE;
- break;
case 4 :
return AC_VI;
- break;
case 5 :
return AC_VI;
- break;
case 6 :
return AC_VO;
- break;
case 7 :
return AC_VO;
- break;
+ default:
+ return AC_BE;
}
- return AC_UNDEF;
}
uint8_t