--- a/bindings/python/ns3_module_helper.py Thu Aug 13 13:39:23 2009 +0200
+++ b/bindings/python/ns3_module_helper.py Fri Aug 14 12:21:39 2009 +0200
@@ -1121,6 +1121,10 @@
'ns3::NetDeviceContainer',
[param('ns3::WifiPhyHelper const &', 'phy'), param('ns3::WifiMacHelper const &', 'mac'), param('std::string', 'nodeName')],
is_const=True)
+ ## wifi-helper.h: void ns3::WifiHelper::SetStandard(ns3::WifiPhyStandard standard) [member function]
+ cls.add_method('SetStandard',
+ 'void',
+ [param('ns3::WifiPhyStandard', 'standard')])
## wifi-helper.h: static void ns3::WifiHelper::EnableLogComponents() [member function]
cls.add_method('EnableLogComponents',
'void',
@@ -1310,10 +1314,6 @@
cls.add_method('SetType',
'void',
[param('std::string', 'type'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
- ## nqos-wifi-mac-helper.h: void ns3::NqosWifiMacHelper::SetDcaParameters(std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue()) [member function]
- cls.add_method('SetDcaParameters',
- 'void',
- [param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()')])
## nqos-wifi-mac-helper.h: ns3::Ptr<ns3::WifiMac> ns3::NqosWifiMacHelper::Create() const [member function]
cls.add_method('Create',
'ns3::Ptr< ns3::WifiMac >',
@@ -1339,10 +1339,6 @@
cls.add_method('SetMsduAggregatorForAc',
'void',
[param('ns3::AccessClass', 'accessClass'), param('std::string', 'type'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()')])
- ## qos-wifi-mac-helper.h: void ns3::QosWifiMacHelper::SetEdcaParametersForAc(ns3::AccessClass accessClass, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue()) [member function]
- cls.add_method('SetEdcaParametersForAc',
- 'void',
- [param('ns3::AccessClass', 'accessClass'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()')])
## qos-wifi-mac-helper.h: ns3::Ptr<ns3::WifiMac> ns3::QosWifiMacHelper::Create() const [member function]
cls.add_method('Create',
'ns3::Ptr< ns3::WifiMac >',
--- a/bindings/python/ns3_module_wifi.py Thu Aug 13 13:39:23 2009 +0200
+++ b/bindings/python/ns3_module_wifi.py Fri Aug 14 12:21:39 2009 +0200
@@ -2286,10 +2286,15 @@
cls.add_method('NotifyRxDrop',
'void',
[param('ns3::Ptr< ns3::Packet const >', 'packet')])
- ## wifi-mac.h: void ns3::WifiMac::SetStandard(ns3::WifiPhyStandard standard) [member function]
- cls.add_method('SetStandard',
+ ## wifi-mac.h: void ns3::WifiMac::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
+ cls.add_method('ConfigureStandard',
'void',
[param('ns3::WifiPhyStandard', 'standard')])
+ ## wifi-mac.h: void ns3::WifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
+ cls.add_method('FinishConfigureStandard',
+ 'void',
+ [param('ns3::WifiPhyStandard', 'standard')],
+ is_pure_virtual=True, visibility='private', is_virtual=True)
return
def register_Ns3WifiMacHeader_methods(root_module, cls):
@@ -2836,6 +2841,11 @@
'uint16_t',
[],
is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## wifi-phy.h: void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
+ cls.add_method('ConfigureStandard',
+ 'void',
+ [param('ns3::WifiPhyStandard', 'standard')],
+ is_pure_virtual=True, is_virtual=True)
## wifi-phy.h: ns3::Ptr<ns3::WifiChannel> ns3::WifiPhy::GetChannel() const [member function]
cls.add_method('GetChannel',
'ns3::Ptr< ns3::WifiChannel >',
@@ -3160,10 +3170,6 @@
cls.add_method('StartReceivePacket',
'void',
[param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxPowerDbm'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble')])
- ## yans-wifi-phy.h: void ns3::YansWifiPhy::SetStandard(ns3::WifiPhyStandard standard) [member function]
- cls.add_method('SetStandard',
- 'void',
- [param('ns3::WifiPhyStandard', 'standard')])
## yans-wifi-phy.h: void ns3::YansWifiPhy::SetRxNoiseFigure(double noiseFigureDb) [member function]
cls.add_method('SetRxNoiseFigure',
'void',
@@ -3347,6 +3353,11 @@
'ns3::Ptr< ns3::WifiChannel >',
[],
is_const=True, is_virtual=True)
+ ## yans-wifi-phy.h: void ns3::YansWifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
+ cls.add_method('ConfigureStandard',
+ 'void',
+ [param('ns3::WifiPhyStandard', 'standard')],
+ is_virtual=True)
## yans-wifi-phy.h: void ns3::YansWifiPhy::DoDispose() [member function]
cls.add_method('DoDispose',
'void',
@@ -3514,6 +3525,11 @@
'void',
[],
visibility='private', is_virtual=True)
+ ## adhoc-wifi-mac.h: void ns3::AdhocWifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
+ cls.add_method('FinishConfigureStandard',
+ 'void',
+ [param('ns3::WifiPhyStandard', 'standard')],
+ visibility='private', is_virtual=True)
return
def register_Ns3AmrrWifiManager_methods(root_module, cls):
@@ -4450,6 +4466,11 @@
'void',
[],
visibility='private', is_virtual=True)
+ ## nqap-wifi-mac.h: void ns3::NqapWifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
+ cls.add_method('FinishConfigureStandard',
+ 'void',
+ [param('ns3::WifiPhyStandard', 'standard')],
+ visibility='private', is_virtual=True)
return
def register_Ns3NqstaWifiMac_methods(root_module, cls):
@@ -4606,6 +4627,11 @@
'void',
[],
visibility='private', is_virtual=True)
+ ## nqsta-wifi-mac.h: void ns3::NqstaWifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
+ cls.add_method('FinishConfigureStandard',
+ 'void',
+ [param('ns3::WifiPhyStandard', 'standard')],
+ visibility='private', is_virtual=True)
return
def register_Ns3OnoeWifiManager_methods(root_module, cls):
@@ -4763,6 +4789,11 @@
'void',
[],
visibility='private', is_virtual=True)
+ ## qadhoc-wifi-mac.h: void ns3::QadhocWifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
+ cls.add_method('FinishConfigureStandard',
+ 'void',
+ [param('ns3::WifiPhyStandard', 'standard')],
+ visibility='private', is_virtual=True)
return
def register_Ns3QapWifiMac_methods(root_module, cls):
@@ -4916,6 +4947,11 @@
'void',
[],
visibility='private', is_virtual=True)
+ ## qap-wifi-mac.h: void ns3::QapWifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
+ cls.add_method('FinishConfigureStandard',
+ 'void',
+ [param('ns3::WifiPhyStandard', 'standard')],
+ visibility='private', is_virtual=True)
return
def register_Ns3QstaWifiMac_methods(root_module, cls):
@@ -5072,6 +5108,11 @@
'void',
[],
visibility='private', is_virtual=True)
+ ## qsta-wifi-mac.h: void ns3::QstaWifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
+ cls.add_method('FinishConfigureStandard',
+ 'void',
+ [param('ns3::WifiPhyStandard', 'standard')],
+ visibility='private', is_virtual=True)
return
def register_Ns3RraaWifiManager_methods(root_module, cls):
--- a/src/devices/wifi/adhoc-wifi-mac.cc Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/adhoc-wifi-mac.cc Fri Aug 14 12:21:39 2009 +0200
@@ -46,8 +46,7 @@
.AddConstructor<AdhocWifiMac> ()
.AddAttribute ("DcaTxop", "The DcaTxop object",
PointerValue (),
- MakePointerAccessor (&AdhocWifiMac::GetDcaTxop,
- &AdhocWifiMac::SetDcaTxop),
+ MakePointerAccessor (&AdhocWifiMac::GetDcaTxop),
MakePointerChecker<DcaTxop> ())
;
return tid;
@@ -64,6 +63,10 @@
m_dcfManager = new DcfManager ();
m_dcfManager->SetupLowListener (m_low);
+
+ m_dca = CreateObject<DcaTxop> ();
+ m_dca->SetLow (m_low);
+ m_dca->SetManager (m_dcfManager);
}
AdhocWifiMac::~AdhocWifiMac ()
{}
@@ -251,12 +254,27 @@
return m_dca;
}
-void
-AdhocWifiMac::SetDcaTxop (Ptr<DcaTxop> dcaTxop)
+void
+AdhocWifiMac::FinishConfigureStandard (enum WifiPhyStandard standard)
{
- m_dca = dcaTxop;
- m_dca->SetLow (m_low);
- m_dca->SetManager (m_dcfManager);
+ switch (standard)
+ {
+ case WIFI_PHY_STANDARD_holland:
+ // fall through
+ case WIFI_PHY_STANDARD_80211_10Mhz:
+ // fall through
+ case WIFI_PHY_STANDARD_80211_5Mhz:
+ // fall through
+ case WIFI_PHY_STANDARD_80211a:
+ ConfigureDcf (m_dca, 15, 1023, AC_BE_NQOS);
+ break;
+ case WIFI_PHY_STANDARD_80211b:
+ ConfigureDcf (m_dca, 31, 1023, AC_BE_NQOS);
+ break;
+ default:
+ NS_ASSERT (false);
+ break;
+ }
}
--- a/src/devices/wifi/adhoc-wifi-mac.h Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/adhoc-wifi-mac.h Fri Aug 14 12:21:39 2009 +0200
@@ -87,7 +87,7 @@
AdhocWifiMac (const AdhocWifiMac & ctor_arg);
AdhocWifiMac &operator = (const AdhocWifiMac &o);
Ptr<DcaTxop> GetDcaTxop(void) const;
- void SetDcaTxop (Ptr<DcaTxop> dcaTxop);
+ virtual void FinishConfigureStandard (enum WifiPhyStandard standard);
Ptr<DcaTxop> m_dca;
Callback<void,Ptr<Packet>, Mac48Address, Mac48Address> m_upCallback;
--- a/src/devices/wifi/dca-txop.cc Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/dca-txop.cc Fri Aug 14 12:21:39 2009 +0200
@@ -101,21 +101,6 @@
static TypeId tid = TypeId ("ns3::DcaTxop")
.SetParent<Object> ()
.AddConstructor<DcaTxop> ()
- .AddAttribute ("MinCw", "The minimum value of the contention window.",
- UintegerValue (15),
- MakeUintegerAccessor (&DcaTxop::SetMinCw,
- &DcaTxop::GetMinCw),
- MakeUintegerChecker<uint32_t> ())
- .AddAttribute ("MaxCw", "The maximum value of the contention window.",
- UintegerValue (1023),
- MakeUintegerAccessor (&DcaTxop::SetMaxCw,
- &DcaTxop::GetMaxCw),
- MakeUintegerChecker<uint32_t> ())
- .AddAttribute ("Aifsn", "The AIFSN: the default value conforms to simple DCA.",
- UintegerValue (2),
- MakeUintegerAccessor (&DcaTxop::SetAifsn,
- &DcaTxop::GetAifsn),
- MakeUintegerChecker<uint32_t> ())
;
return tid;
}
--- a/src/devices/wifi/dca-txop.h Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/dca-txop.h Fri Aug 14 12:21:39 2009 +0200
@@ -29,6 +29,7 @@
#include "wifi-mac-header.h"
#include "wifi-mode.h"
#include "wifi-remote-station-manager.h"
+#include "dcf.h"
namespace ns3 {
@@ -62,7 +63,7 @@
* The rts/cts policy is similar to the fragmentation policy: when
* a packet is bigger than a threshold, the rts/cts protocol is used.
*/
-class DcaTxop : public Object
+class DcaTxop : public Dcf
{
public:
static TypeId GetTypeId (void);
@@ -90,12 +91,12 @@
void SetMaxQueueSize (uint32_t size);
void SetMaxQueueDelay (Time delay);
- void SetMinCw (uint32_t minCw);
- void SetMaxCw (uint32_t maxCw);
- void SetAifsn (uint32_t aifsn);
- uint32_t GetMinCw (void) const;
- uint32_t GetMaxCw (void) const;
- uint32_t GetAifsn (void) const;
+ virtual void SetMinCw (uint32_t minCw);
+ virtual void SetMaxCw (uint32_t maxCw);
+ virtual void SetAifsn (uint32_t aifsn);
+ virtual uint32_t GetMinCw (void) const;
+ virtual uint32_t GetMaxCw (void) const;
+ virtual uint32_t GetAifsn (void) const;
/**
* \param packet packet to send
--- a/src/devices/wifi/edca-txop-n.cc Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/edca-txop-n.cc Fri Aug 14 12:21:39 2009 +0200
@@ -98,21 +98,6 @@
static TypeId tid = TypeId ("ns3::EdcaTxopN")
.SetParent<Object> ()
.AddConstructor<EdcaTxopN> ()
- .AddAttribute ("MinCw", "The minimun value of the contention window.",
- UintegerValue (31),
- MakeUintegerAccessor (&EdcaTxopN::SetMinCw,
- &EdcaTxopN::GetMinCw),
- MakeUintegerChecker<uint32_t> ())
- .AddAttribute ("MaxCw", "The maximum value of the contention window.",
- UintegerValue (1023),
- MakeUintegerAccessor (&EdcaTxopN::SetMaxCw,
- &EdcaTxopN::GetMaxCw),
- MakeUintegerChecker<uint32_t> ())
- .AddAttribute ("Aifsn", "The AIFSN: the default value conforms to simple DCA.",
- UintegerValue (3),
- MakeUintegerAccessor (&EdcaTxopN::SetAifsn,
- &EdcaTxopN::GetAifsn),
- MakeUintegerChecker<uint32_t> ())
;
return tid;
}
--- a/src/devices/wifi/edca-txop-n.h Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/edca-txop-n.h Fri Aug 14 12:21:39 2009 +0200
@@ -30,6 +30,7 @@
#include "wifi-mac.h"
#include "wifi-mac-header.h"
#include "qos-utils.h"
+#include "dcf.h"
#include <map>
#include <list>
@@ -62,7 +63,7 @@
ADHOC_STA
};
-class EdcaTxopN : public Object
+class EdcaTxopN : public Dcf
{
public:
@@ -85,12 +86,12 @@
void SetMaxQueueSize (uint32_t size);
void SetMaxQueueDelay (Time delay);
- void SetMinCw (uint32_t minCw);
- void SetMaxCw (uint32_t maxCw);
- void SetAifsn (uint32_t aifsn);
- uint32_t GetMinCw (void) const;
- uint32_t GetMaxCw (void) const;
- uint32_t GetAifsn (void) const;
+ virtual void SetMinCw (uint32_t minCw);
+ virtual void SetMaxCw (uint32_t maxCw);
+ virtual void SetAifsn (uint32_t aifsn);
+ virtual uint32_t GetMinCw (void) const;
+ virtual uint32_t GetMaxCw (void) const;
+ virtual uint32_t GetAifsn (void) const;
Ptr<MacLow> Low (void);
Ptr<MsduAggregator> GetMsduAggregator (void) const;
--- a/src/devices/wifi/nqap-wifi-mac.cc Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/nqap-wifi-mac.cc Fri Aug 14 12:21:39 2009 +0200
@@ -60,8 +60,7 @@
MakeBooleanChecker ())
.AddAttribute ("DcaTxop", "The DcaTxop object",
PointerValue (),
- MakePointerAccessor (&NqapWifiMac::GetDcaTxop,
- &NqapWifiMac::SetDcaTxop),
+ MakePointerAccessor (&NqapWifiMac::GetDcaTxop),
MakePointerChecker<DcaTxop> ())
;
return tid;
@@ -85,6 +84,12 @@
m_beaconDca->SetMaxCw(0);
m_beaconDca->SetLow (m_low);
m_beaconDca->SetManager (m_dcfManager);
+
+ m_dca = CreateObject<DcaTxop> ();
+ m_dca->SetLow (m_low);
+ m_dca->SetManager (m_dcfManager);
+ m_dca->SetTxOkCallback (MakeCallback (&NqapWifiMac::TxOk, this));
+ m_dca->SetTxFailedCallback (MakeCallback (&NqapWifiMac::TxFailed, this));
}
NqapWifiMac::~NqapWifiMac ()
{
@@ -565,14 +570,28 @@
return m_dca;
}
-void
-NqapWifiMac::SetDcaTxop (Ptr<DcaTxop> dcaTxop)
+void
+NqapWifiMac::FinishConfigureStandard (enum WifiPhyStandard standard)
{
- m_dca = dcaTxop;
- m_dca->SetLow (m_low);
- m_dca->SetManager (m_dcfManager);
- m_dca->SetTxOkCallback (MakeCallback (&NqapWifiMac::TxOk, this));
- m_dca->SetTxFailedCallback (MakeCallback (&NqapWifiMac::TxFailed, this));
+ switch (standard)
+ {
+ case WIFI_PHY_STANDARD_holland:
+ // fall through
+ case WIFI_PHY_STANDARD_80211_10Mhz:
+ // fall through
+ case WIFI_PHY_STANDARD_80211_5Mhz:
+ // fall through
+ case WIFI_PHY_STANDARD_80211a:
+ ConfigureDcf (m_dca, 15, 1023, AC_BE_NQOS);
+ break;
+ case WIFI_PHY_STANDARD_80211b:
+ ConfigureDcf (m_dca, 31, 1023, AC_BE_NQOS);
+ break;
+ default:
+ NS_ASSERT (false);
+ break;
+ }
}
+
} // namespace ns3
--- a/src/devices/wifi/nqap-wifi-mac.h Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/nqap-wifi-mac.h Fri Aug 14 12:21:39 2009 +0200
@@ -115,7 +115,7 @@
NqapWifiMac (const NqapWifiMac & ctor_arg);
NqapWifiMac &operator = (const NqapWifiMac &o);
Ptr<DcaTxop> GetDcaTxop (void) const;
- void SetDcaTxop (Ptr<DcaTxop> dcaTxop);
+ virtual void FinishConfigureStandard (enum WifiPhyStandard standard);
Ptr<DcaTxop> m_dca;
Ptr<DcaTxop> m_beaconDca;
--- a/src/devices/wifi/nqsta-wifi-mac.cc Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/nqsta-wifi-mac.cc Fri Aug 14 12:21:39 2009 +0200
@@ -89,8 +89,7 @@
MakeBooleanChecker ())
.AddAttribute ("DcaTxop", "The DcaTxop object",
PointerValue (),
- MakePointerAccessor (&NqstaWifiMac::GetDcaTxop,
- &NqstaWifiMac::SetDcaTxop),
+ MakePointerAccessor (&NqstaWifiMac::GetDcaTxop),
MakePointerChecker<DcaTxop> ())
.AddTraceSource ("Assoc", "Associated with an access point.",
MakeTraceSourceAccessor (&NqstaWifiMac::m_assocLogger))
@@ -115,6 +114,10 @@
m_dcfManager = new DcfManager ();
m_dcfManager->SetupLowListener (m_low);
+
+ m_dca = CreateObject<DcaTxop> ();
+ m_dca->SetLow (m_low);
+ m_dca->SetManager (m_dcfManager);
}
NqstaWifiMac::~NqstaWifiMac ()
@@ -208,13 +211,6 @@
{
return m_dca;
}
-void
-NqstaWifiMac::SetDcaTxop (Ptr<DcaTxop> dcaTxop)
-{
- m_dca = dcaTxop;
- m_dca->SetLow (m_low);
- m_dca->SetManager (m_dcfManager);
-}
void
NqstaWifiMac::SetWifiPhy (Ptr<WifiPhy> phy)
{
@@ -668,4 +664,27 @@
m_state = value;
}
+void
+NqstaWifiMac::FinishConfigureStandard (enum WifiPhyStandard standard)
+{
+ switch (standard)
+ {
+ case WIFI_PHY_STANDARD_holland:
+ // fall through
+ case WIFI_PHY_STANDARD_80211_10Mhz:
+ // fall through
+ case WIFI_PHY_STANDARD_80211_5Mhz:
+ // fall through
+ case WIFI_PHY_STANDARD_80211a:
+ ConfigureDcf (m_dca, 15, 1023, AC_BE_NQOS);
+ break;
+ case WIFI_PHY_STANDARD_80211b:
+ ConfigureDcf (m_dca, 31, 1023, AC_BE_NQOS);
+ break;
+ default:
+ NS_ASSERT (false);
+ break;
+ }
+}
+
} // namespace ns3
--- a/src/devices/wifi/nqsta-wifi-mac.h Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/nqsta-wifi-mac.h Fri Aug 14 12:21:39 2009 +0200
@@ -139,8 +139,8 @@
NqstaWifiMac (const NqstaWifiMac & ctor_arg);
NqstaWifiMac &operator = (const NqstaWifiMac & ctor_arg);
Ptr<DcaTxop> GetDcaTxop(void) const;
- void SetDcaTxop (Ptr<DcaTxop> dcaTxop);
void SetState (enum MacState value);
+ virtual void FinishConfigureStandard (enum WifiPhyStandard standard);
enum MacState m_state;
Time m_probeRequestTimeout;
--- a/src/devices/wifi/qadhoc-wifi-mac.cc Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/qadhoc-wifi-mac.cc Fri Aug 14 12:21:39 2009 +0200
@@ -50,26 +50,22 @@
.AddAttribute ("VO_EdcaTxopN",
"Queue that manages packets belonging to AC_VO access class",
PointerValue (),
- MakePointerAccessor(&QadhocWifiMac::GetVOQueue,
- &QadhocWifiMac::SetVOQueue),
+ MakePointerAccessor(&QadhocWifiMac::GetVOQueue),
MakePointerChecker<EdcaTxopN> ())
.AddAttribute ("VI_EdcaTxopN",
"Queue that manages packets belonging to AC_VI access class",
PointerValue (),
- MakePointerAccessor(&QadhocWifiMac::GetVIQueue,
- &QadhocWifiMac::SetVIQueue),
+ MakePointerAccessor(&QadhocWifiMac::GetVIQueue),
MakePointerChecker<EdcaTxopN> ())
.AddAttribute ("BE_EdcaTxopN",
"Queue that manages packets belonging to AC_BE access class",
PointerValue (),
- MakePointerAccessor(&QadhocWifiMac::GetBEQueue,
- &QadhocWifiMac::SetBEQueue),
+ MakePointerAccessor(&QadhocWifiMac::GetBEQueue),
MakePointerChecker<EdcaTxopN> ())
.AddAttribute ("BK_EdcaTxopN",
"Queue that manages packets belonging to AC_BK access class",
PointerValue (),
- MakePointerAccessor(&QadhocWifiMac::GetBKQueue,
- &QadhocWifiMac::SetBKQueue),
+ MakePointerAccessor(&QadhocWifiMac::GetBKQueue),
MakePointerChecker<EdcaTxopN> ())
;
return tid;
@@ -88,6 +84,11 @@
m_dcfManager = new DcfManager ();
m_dcfManager->SetupLowListener (m_low);
+
+ SetQueue (AC_VO);
+ SetQueue (AC_VI);
+ SetQueue (AC_BE);
+ SetQueue (AC_BK);
}
QadhocWifiMac::~QadhocWifiMac ()
@@ -112,10 +113,9 @@
m_beEdca = 0;
m_bkEdca = 0;
m_stationManager = 0;
- std::map<AccessClass, Ptr<EdcaTxopN> >::iterator it = m_queues.begin ();
- for (;it != m_queues.end (); it++)
+ for (Queues::iterator i = m_queues.begin (); i != m_queues.end (); ++i)
{
- it->second = 0;
+ (*i).second = 0;
}
WifiMac::DoDispose ();
}
@@ -208,10 +208,10 @@
{
NS_LOG_FUNCTION (this << stationManager);
m_stationManager = stationManager;
- m_voEdca->SetWifiRemoteStationManager (stationManager);
- m_viEdca->SetWifiRemoteStationManager (stationManager);
- m_beEdca->SetWifiRemoteStationManager (stationManager);
- m_bkEdca->SetWifiRemoteStationManager (stationManager);
+ for (Queues::iterator i = m_queues.begin (); i != m_queues.end (); ++i)
+ {
+ (*i).second->SetWifiRemoteStationManager (stationManager);
+ }
m_low->SetWifiRemoteStationManager (stationManager);
}
@@ -373,69 +373,65 @@
Ptr<EdcaTxopN>
QadhocWifiMac::GetVOQueue (void) const
{
- return m_voEdca;
+ return m_queues.find (AC_VO)->second;
}
Ptr<EdcaTxopN>
QadhocWifiMac::GetVIQueue (void) const
{
- return m_viEdca;
+ return m_queues.find (AC_VI)->second;
}
Ptr<EdcaTxopN>
QadhocWifiMac::GetBEQueue (void) const
{
- return m_beEdca;
+ return m_queues.find (AC_BE)->second;
}
Ptr<EdcaTxopN>
QadhocWifiMac::GetBKQueue (void) const
{
- return m_bkEdca;
-}
-
-void
-QadhocWifiMac::SetVOQueue (Ptr<EdcaTxopN> voQueue)
-{
- m_voEdca = voQueue;
- m_queues.insert (std::make_pair(AC_VO, m_voEdca));
- m_queues[AC_VO]->SetLow (m_low);
- m_queues[AC_VO]->SetManager (m_dcfManager);
- m_queues[AC_VO]->SetTypeOfStation (ADHOC_STA);
- m_queues[AC_VO]->SetTxMiddle (m_txMiddle);
+ return m_queues.find (AC_BK)->second;
}
void
-QadhocWifiMac::SetVIQueue (Ptr<EdcaTxopN> viQueue)
+QadhocWifiMac::SetQueue (enum AccessClass ac)
{
- m_viEdca = viQueue;
- m_queues.insert (std::make_pair(AC_VI, m_viEdca));
- m_queues[AC_VI]->SetLow (m_low);
- m_queues[AC_VI]->SetManager (m_dcfManager);
- m_queues[AC_VI]->SetTypeOfStation (ADHOC_STA);
- m_queues[AC_VI]->SetTxMiddle (m_txMiddle);
+ Ptr<EdcaTxopN> edca = CreateObject<EdcaTxopN> ();
+ edca->SetLow (m_low);
+ edca->SetManager (m_dcfManager);
+ edca->SetTypeOfStation (ADHOC_STA);
+ edca->SetTxMiddle (m_txMiddle);
+ m_queues.insert (std::make_pair(ac, edca));
}
-void
-QadhocWifiMac::SetBEQueue (Ptr<EdcaTxopN> beQueue)
+void
+QadhocWifiMac::FinishConfigureStandard (enum WifiPhyStandard standard)
{
- m_beEdca = beQueue;
- m_queues.insert (std::make_pair(AC_BE, m_beEdca));
- m_queues[AC_BE]->SetLow (m_low);
- m_queues[AC_BE]->SetManager (m_dcfManager);
- m_queues[AC_BE]->SetTypeOfStation (ADHOC_STA);
- m_queues[AC_BE]->SetTxMiddle (m_txMiddle);
-}
-
-void
-QadhocWifiMac::SetBKQueue (Ptr<EdcaTxopN> bkQueue)
-{
- m_bkEdca = bkQueue;
- m_queues.insert (std::make_pair(AC_BK, m_bkEdca));
- m_queues[AC_BK]->SetLow (m_low);
- m_queues[AC_BK]->SetManager (m_dcfManager);
- m_queues[AC_BK]->SetTypeOfStation (ADHOC_STA);
- m_queues[AC_BK]->SetTxMiddle (m_txMiddle);
+ switch (standard)
+ {
+ case WIFI_PHY_STANDARD_holland:
+ // fall through
+ case WIFI_PHY_STANDARD_80211a:
+ // fall through
+ case WIFI_PHY_STANDARD_80211_10Mhz:
+ // fall through
+ case WIFI_PHY_STANDARD_80211_5Mhz:
+ ConfigureDcf (m_queues[AC_BK], 15, 1023, AC_BK);
+ ConfigureDcf (m_queues[AC_BE], 15, 1023, AC_BE);
+ ConfigureDcf (m_queues[AC_VI], 15, 1023, AC_VI);
+ ConfigureDcf (m_queues[AC_VO], 15, 1023, AC_VO);
+ break;
+ case WIFI_PHY_STANDARD_80211b:
+ ConfigureDcf (m_queues[AC_BK], 31, 1023, AC_BK);
+ ConfigureDcf (m_queues[AC_BE], 31, 1023, AC_BE);
+ ConfigureDcf (m_queues[AC_VI], 31, 1023, AC_VI);
+ ConfigureDcf (m_queues[AC_VO], 31, 1023, AC_VO);
+ break;
+ default:
+ NS_ASSERT (false);
+ break;
+ }
}
} //namespace ns3
--- a/src/devices/wifi/qadhoc-wifi-mac.h Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/qadhoc-wifi-mac.h Fri Aug 14 12:21:39 2009 +0200
@@ -74,6 +74,7 @@
virtual void SetSsid (Ssid ssid);
virtual Mac48Address GetBssid (void) const;
+
private:
Callback<void, Ptr<Packet>, Mac48Address, Mac48Address> m_forwardUp;
virtual void DoDispose (void);
@@ -92,16 +93,13 @@
typedef std::list<std::pair<Ptr<Packet>, AmsduSubframeHeader> > DeaggregatedMsdus;
typedef std::list<std::pair<Ptr<Packet>, AmsduSubframeHeader> >::const_iterator DeaggregatedMsdusCI;
+ virtual void FinishConfigureStandard (enum WifiPhyStandard standard);
+ void SetQueue (enum AccessClass ac);
Ptr<EdcaTxopN> GetVOQueue (void) const;
Ptr<EdcaTxopN> GetVIQueue (void) const;
Ptr<EdcaTxopN> GetBEQueue (void) const;
Ptr<EdcaTxopN> GetBKQueue (void) const;
- void SetVOQueue (Ptr<EdcaTxopN> voQueue);
- void SetVIQueue (Ptr<EdcaTxopN> viQueue);
- void SetBEQueue (Ptr<EdcaTxopN> beQueue);
- void SetBKQueue (Ptr<EdcaTxopN> bkQueue);
-
Queues m_queues;
Ptr<EdcaTxopN> m_voEdca;
Ptr<EdcaTxopN> m_viEdca;
--- a/src/devices/wifi/qap-wifi-mac.cc Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/qap-wifi-mac.cc Fri Aug 14 12:21:39 2009 +0200
@@ -63,26 +63,22 @@
.AddAttribute ("VO_EdcaTxopN",
"Queue that manages packets belonging to AC_VO access class",
PointerValue (),
- MakePointerAccessor(&QapWifiMac::GetVOQueue,
- &QapWifiMac::SetVOQueue),
+ MakePointerAccessor(&QapWifiMac::GetVOQueue),
MakePointerChecker<EdcaTxopN> ())
.AddAttribute ("VI_EdcaTxopN",
"Queue that manages packets belonging to AC_VI access class",
PointerValue (),
- MakePointerAccessor(&QapWifiMac::GetVIQueue,
- &QapWifiMac::SetVIQueue),
+ MakePointerAccessor(&QapWifiMac::GetVIQueue),
MakePointerChecker<EdcaTxopN> ())
.AddAttribute ("BE_EdcaTxopN",
"Queue that manages packets belonging to AC_BE access class",
PointerValue (),
- MakePointerAccessor(&QapWifiMac::GetBEQueue,
- &QapWifiMac::SetBEQueue),
+ MakePointerAccessor(&QapWifiMac::GetBEQueue),
MakePointerChecker<EdcaTxopN> ())
.AddAttribute ("BK_EdcaTxopN",
"Queue that manages packets belonging to AC_BK access class",
PointerValue (),
- MakePointerAccessor(&QapWifiMac::GetBKQueue,
- &QapWifiMac::SetBKQueue),
+ MakePointerAccessor(&QapWifiMac::GetBKQueue),
MakePointerChecker<EdcaTxopN> ())
;
return tid;
@@ -108,6 +104,11 @@
m_beaconDca->SetMaxCw(0);
m_beaconDca->SetLow (m_low);
m_beaconDca->SetManager (m_dcfManager);
+
+ SetQueue (AC_VO);
+ SetQueue (AC_VI);
+ SetQueue (AC_BE);
+ SetQueue (AC_BK);
}
QapWifiMac::~QapWifiMac ()
@@ -129,15 +130,10 @@
m_phy = 0;
m_beaconDca = 0;
m_beaconEvent.Cancel ();
- m_voEdca = 0;
- m_viEdca = 0;
- m_beEdca = 0;
- m_bkEdca = 0;
m_stationManager = 0;
- std::map<AccessClass, Ptr<EdcaTxopN> >::iterator it = m_queues.begin ();
- for (;it != m_queues.end (); it++)
+ for (Queues::iterator i = m_queues.begin (); i != m_queues.end (); ++i)
{
- it->second = 0;
+ (*i).second = 0;
}
WifiMac::DoDispose ();
}
@@ -259,10 +255,10 @@
{
NS_LOG_FUNCTION (this << stationManager);
m_stationManager = stationManager;
- m_voEdca->SetWifiRemoteStationManager (stationManager);
- m_viEdca->SetWifiRemoteStationManager (stationManager);
- m_beEdca->SetWifiRemoteStationManager (stationManager);
- m_bkEdca->SetWifiRemoteStationManager (stationManager);
+ for (Queues::iterator i = m_queues.begin (); i != m_queues.end (); ++i)
+ {
+ (*i).second->SetWifiRemoteStationManager (stationManager);
+ }
m_beaconDca->SetWifiRemoteStationManager (stationManager);
m_low->SetWifiRemoteStationManager (stationManager);
}
@@ -713,77 +709,67 @@
Ptr<EdcaTxopN>
QapWifiMac::GetVOQueue (void) const
{
- return m_voEdca;
+ return m_queues.find (AC_VO)->second;
}
Ptr<EdcaTxopN>
QapWifiMac::GetVIQueue (void) const
{
- return m_viEdca;
+ return m_queues.find (AC_VI)->second;
}
Ptr<EdcaTxopN>
QapWifiMac::GetBEQueue (void) const
{
- return m_beEdca;
+ return m_queues.find (AC_BE)->second;
}
Ptr<EdcaTxopN>
QapWifiMac::GetBKQueue (void) const
{
- return m_bkEdca;
-}
-
-void
-QapWifiMac::SetVOQueue (Ptr<EdcaTxopN> voQueue)
-{
- m_voEdca = voQueue;
- m_queues.insert (std::make_pair(AC_VO, m_voEdca));
- m_queues[AC_VO]->SetLow (m_low);
- m_queues[AC_VO]->SetManager (m_dcfManager);
- m_queues[AC_VO]->SetTypeOfStation (AP);
- m_queues[AC_VO]->SetTxMiddle (m_txMiddle);
- m_queues[AC_VO]->SetTxOkCallback (MakeCallback (&QapWifiMac::TxOk, this));
- m_queues[AC_VO]->SetTxFailedCallback (MakeCallback (&QapWifiMac::TxFailed, this));
+ return m_queues.find (AC_BK)->second;
}
void
-QapWifiMac::SetVIQueue (Ptr<EdcaTxopN> viQueue)
+QapWifiMac::SetQueue (enum AccessClass ac)
{
- m_viEdca = viQueue;
- m_queues.insert (std::make_pair(AC_VI, m_viEdca));
- m_queues[AC_VI]->SetLow (m_low);
- m_queues[AC_VI]->SetManager (m_dcfManager);
- m_queues[AC_VI]->SetTypeOfStation (AP);
- m_queues[AC_VI]->SetTxMiddle (m_txMiddle);
- m_queues[AC_VI]->SetTxOkCallback (MakeCallback (&QapWifiMac::TxOk, this));
- m_queues[AC_VI]->SetTxFailedCallback (MakeCallback (&QapWifiMac::TxFailed, this));
+ Ptr<EdcaTxopN> edca = CreateObject<EdcaTxopN> ();
+ edca->SetLow (m_low);
+ edca->SetManager (m_dcfManager);
+ edca->SetTypeOfStation (AP);
+ edca->SetTxMiddle (m_txMiddle);
+ edca->SetTxOkCallback (MakeCallback (&QapWifiMac::TxOk, this));
+ edca->SetTxFailedCallback (MakeCallback (&QapWifiMac::TxFailed, this));
+ m_queues.insert (std::make_pair(ac, edca));
}
-void
-QapWifiMac::SetBEQueue (Ptr<EdcaTxopN> beQueue)
+void
+QapWifiMac::FinishConfigureStandard (enum WifiPhyStandard standard)
{
- m_beEdca = beQueue;
- m_queues.insert (std::make_pair(AC_BE, m_beEdca));
- m_queues[AC_BE]->SetLow (m_low);
- m_queues[AC_BE]->SetManager (m_dcfManager);
- m_queues[AC_BE]->SetTypeOfStation (AP);
- m_queues[AC_BE]->SetTxMiddle (m_txMiddle);
- m_queues[AC_BE]->SetTxOkCallback (MakeCallback (&QapWifiMac::TxOk, this));
- m_queues[AC_BE]->SetTxFailedCallback (MakeCallback (&QapWifiMac::TxFailed, this));
-}
-
-void
-QapWifiMac::SetBKQueue (Ptr<EdcaTxopN> bkQueue)
-{
- m_bkEdca = bkQueue;
- m_queues.insert (std::make_pair(AC_BK, m_bkEdca));
- m_queues[AC_BK]->SetLow (m_low);
- m_queues[AC_BK]->SetManager (m_dcfManager);
- m_queues[AC_BK]->SetTypeOfStation (AP);
- m_queues[AC_BK]->SetTxMiddle (m_txMiddle);
- m_queues[AC_BK]->SetTxOkCallback (MakeCallback (&QapWifiMac::TxOk, this));
- m_queues[AC_BK]->SetTxFailedCallback (MakeCallback (&QapWifiMac::TxFailed, this));
+ switch (standard)
+ {
+ case WIFI_PHY_STANDARD_holland:
+ // fall through
+ case WIFI_PHY_STANDARD_80211a:
+ // fall through
+ case WIFI_PHY_STANDARD_80211_10Mhz:
+ // fall through
+ case WIFI_PHY_STANDARD_80211_5Mhz:
+ ConfigureDcf (m_queues[AC_BK], 15, 1023, AC_BK);
+ ConfigureDcf (m_queues[AC_BE], 15, 1023, AC_BE);
+ ConfigureDcf (m_queues[AC_VI], 15, 1023, AC_VI);
+ ConfigureDcf (m_queues[AC_VO], 15, 1023, AC_VO);
+ break;
+ case WIFI_PHY_STANDARD_80211b:
+ ConfigureDcf (m_queues[AC_BK], 31, 1023, AC_BK);
+ ConfigureDcf (m_queues[AC_BE], 31, 1023, AC_BE);
+ ConfigureDcf (m_queues[AC_VI], 31, 1023, AC_VI);
+ ConfigureDcf (m_queues[AC_VO], 31, 1023, AC_VO);
+ break;
+ default:
+ NS_ASSERT (false);
+ break;
+ }
}
} //namespace ns3
--- a/src/devices/wifi/qap-wifi-mac.h Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/qap-wifi-mac.h Fri Aug 14 12:21:39 2009 +0200
@@ -87,6 +87,10 @@
void StartBeaconing (void);
private:
+ typedef std::map<AccessClass, Ptr<EdcaTxopN> > Queues;
+ typedef std::list<std::pair<Ptr<Packet>, AmsduSubframeHeader> > DeaggregatedMsdus;
+ typedef std::list<std::pair<Ptr<Packet>, AmsduSubframeHeader> >::const_iterator DeaggregatedMsdusCI;
+
virtual void DoDispose (void);
void Receive (Ptr<Packet> packet, WifiMacHeader const*hdr);
void ForwardUp (Ptr<Packet> packet, Mac48Address from, Mac48Address to);
@@ -107,28 +111,15 @@
QapWifiMac &operator = (const QapWifiMac &);
QapWifiMac (const QapWifiMac &);
- typedef std::map<AccessClass, Ptr<EdcaTxopN> > Queues;
- typedef std::list<std::pair<Ptr<Packet>, AmsduSubframeHeader> > DeaggregatedMsdus;
- typedef std::list<std::pair<Ptr<Packet>, AmsduSubframeHeader> >::const_iterator DeaggregatedMsdusCI;
-
- Callback<void,Ptr<Packet>, Mac48Address, Mac48Address> m_forwardUp;
-
Ptr<EdcaTxopN> GetVOQueue (void) const;
Ptr<EdcaTxopN> GetVIQueue (void) const;
Ptr<EdcaTxopN> GetBEQueue (void) const;
Ptr<EdcaTxopN> GetBKQueue (void) const;
-
- void SetVOQueue (Ptr<EdcaTxopN> voQueue);
- void SetVIQueue (Ptr<EdcaTxopN> viQueue);
- void SetBEQueue (Ptr<EdcaTxopN> beQueue);
- void SetBKQueue (Ptr<EdcaTxopN> bkQueue);
+ void SetQueue (enum AccessClass ac);
- /*Next map is used only for an esay access to a specific queue*/
+ virtual void FinishConfigureStandard (enum WifiPhyStandard standard);
+
Queues m_queues;
- Ptr<EdcaTxopN> m_voEdca;
- Ptr<EdcaTxopN> m_viEdca;
- Ptr<EdcaTxopN> m_beEdca;
- Ptr<EdcaTxopN> m_bkEdca;
Ptr<DcaTxop> m_beaconDca;
Ptr<MacLow> m_low;
Ptr<WifiPhy> m_phy;
@@ -139,6 +130,7 @@
Ssid m_ssid;
EventId m_beaconEvent;
Time m_beaconInterval;
+ Callback<void,Ptr<Packet>, Mac48Address, Mac48Address> m_forwardUp;
};
} //namespace ns3
--- a/src/devices/wifi/qos-utils.h Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/qos-utils.h Fri Aug 14 12:21:39 2009 +0200
@@ -31,6 +31,7 @@
AC_VI = 1,
AC_BE = 2,
AC_BK = 3,
+ AC_BE_NQOS = 4,
AC_UNDEF
};
--- a/src/devices/wifi/qsta-wifi-mac.cc Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/qsta-wifi-mac.cc Fri Aug 14 12:21:39 2009 +0200
@@ -69,26 +69,22 @@
.AddAttribute ("VO_EdcaTxopN",
"Queue that manages packets belonging to AC_VO access class",
PointerValue (),
- MakePointerAccessor(&QstaWifiMac::GetVOQueue,
- &QstaWifiMac::SetVOQueue),
+ MakePointerAccessor(&QstaWifiMac::GetVOQueue),
MakePointerChecker<EdcaTxopN> ())
.AddAttribute ("VI_EdcaTxopN",
"Queue that manages packets belonging to AC_VI access class",
PointerValue (),
- MakePointerAccessor(&QstaWifiMac::GetVIQueue,
- &QstaWifiMac::SetVIQueue),
+ MakePointerAccessor(&QstaWifiMac::GetVIQueue),
MakePointerChecker<EdcaTxopN> ())
.AddAttribute ("BE_EdcaTxopN",
"Queue that manages packets belonging to AC_BE access class",
PointerValue (),
- MakePointerAccessor(&QstaWifiMac::GetBEQueue,
- &QstaWifiMac::SetBEQueue),
+ MakePointerAccessor(&QstaWifiMac::GetBEQueue),
MakePointerChecker<EdcaTxopN> ())
.AddAttribute ("BK_EdcaTxopN",
"Queue that manages packets belonging to AC_BK access class",
PointerValue (),
- MakePointerAccessor(&QstaWifiMac::GetBKQueue,
- &QstaWifiMac::SetBKQueue),
+ MakePointerAccessor(&QstaWifiMac::GetBKQueue),
MakePointerChecker<EdcaTxopN> ())
;
return tid;
@@ -111,6 +107,11 @@
m_dcfManager = new DcfManager ();
m_dcfManager->SetupLowListener (m_low);
+
+ SetQueue (AC_VO);
+ SetQueue (AC_VI);
+ SetQueue (AC_BE);
+ SetQueue (AC_BK);
}
QstaWifiMac::~QstaWifiMac ()
@@ -131,15 +132,10 @@
m_low = 0;
m_phy = 0;
m_dcfManager = 0;
- m_voEdca = 0;
- m_viEdca = 0;
- m_beEdca = 0;
- m_bkEdca = 0;
m_stationManager = 0;
- std::map<AccessClass, Ptr<EdcaTxopN> >::iterator it = m_queues.begin ();
- for (;it != m_queues.end (); it++)
+ for (Queues::iterator i = m_queues.begin (); i != m_queues.end (); ++i)
{
- it->second = 0;
+ (*i).second = 0;
}
WifiMac::DoDispose ();
}
@@ -706,69 +702,66 @@
Ptr<EdcaTxopN>
QstaWifiMac::GetVOQueue (void) const
{
- return m_voEdca;
+ return m_queues.find (AC_VO)->second;
}
Ptr<EdcaTxopN>
QstaWifiMac::GetVIQueue (void) const
{
- return m_viEdca;
+ return m_queues.find (AC_VI)->second;
}
Ptr<EdcaTxopN>
QstaWifiMac::GetBEQueue (void) const
{
- return m_beEdca;
+ return m_queues.find (AC_BE)->second;
}
Ptr<EdcaTxopN>
QstaWifiMac::GetBKQueue (void) const
{
- return m_bkEdca;
-}
-
-void
-QstaWifiMac::SetVOQueue (Ptr<EdcaTxopN> voQueue)
-{
- m_voEdca = voQueue;
- m_queues.insert (std::make_pair(AC_VO, m_voEdca));
- m_queues[AC_VO]->SetLow (m_low);
- m_queues[AC_VO]->SetManager (m_dcfManager);
- m_queues[AC_VO]->SetTypeOfStation (STA);
- m_queues[AC_VO]->SetTxMiddle (m_txMiddle);
+ return m_queues.find (AC_BK)->second;
}
void
-QstaWifiMac::SetVIQueue (Ptr<EdcaTxopN> viQueue)
+QstaWifiMac::SetQueue (enum AccessClass ac)
{
- m_viEdca = viQueue;
- m_queues.insert (std::make_pair(AC_VI, m_viEdca));
- m_queues[AC_VI]->SetLow (m_low);
- m_queues[AC_VI]->SetManager (m_dcfManager);
- m_queues[AC_VI]->SetTypeOfStation (STA);
- m_queues[AC_VI]->SetTxMiddle (m_txMiddle);
+ Ptr<EdcaTxopN> edca = CreateObject<EdcaTxopN> ();
+ edca->SetLow (m_low);
+ edca->SetManager (m_dcfManager);
+ edca->SetTypeOfStation (STA);
+ edca->SetTxMiddle (m_txMiddle);
+ m_queues.insert (std::make_pair(ac, edca));
}
-void
-QstaWifiMac::SetBEQueue (Ptr<EdcaTxopN> beQueue)
+void
+QstaWifiMac::FinishConfigureStandard (enum WifiPhyStandard standard)
{
- m_beEdca = beQueue;
- m_queues.insert (std::make_pair(AC_BE, m_beEdca));
- m_queues[AC_BE]->SetLow (m_low);
- m_queues[AC_BE]->SetManager (m_dcfManager);
- m_queues[AC_BE]->SetTypeOfStation (STA);
- m_queues[AC_BE]->SetTxMiddle (m_txMiddle);
+ switch (standard)
+ {
+ case WIFI_PHY_STANDARD_holland:
+ // fall through
+ case WIFI_PHY_STANDARD_80211a:
+ // fall through
+ case WIFI_PHY_STANDARD_80211_10Mhz:
+ // fall through
+ case WIFI_PHY_STANDARD_80211_5Mhz:
+ ConfigureDcf (m_queues[AC_BK], 15, 1023, AC_BK);
+ ConfigureDcf (m_queues[AC_BE], 15, 1023, AC_BE);
+ ConfigureDcf (m_queues[AC_VI], 15, 1023, AC_VI);
+ ConfigureDcf (m_queues[AC_VO], 15, 1023, AC_VO);
+ break;
+ case WIFI_PHY_STANDARD_80211b:
+ ConfigureDcf (m_queues[AC_BK], 31, 1023, AC_BK);
+ ConfigureDcf (m_queues[AC_BE], 31, 1023, AC_BE);
+ ConfigureDcf (m_queues[AC_VI], 31, 1023, AC_VI);
+ ConfigureDcf (m_queues[AC_VO], 31, 1023, AC_VO);
+ break;
+ default:
+ NS_ASSERT (false);
+ break;
+ }
}
-void
-QstaWifiMac::SetBKQueue (Ptr<EdcaTxopN> bkQueue)
-{
- m_bkEdca = bkQueue;
- m_queues.insert (std::make_pair(AC_BK, m_bkEdca));
- m_queues[AC_BK]->SetLow (m_low);
- m_queues[AC_BK]->SetManager (m_dcfManager);
- m_queues[AC_BK]->SetTypeOfStation (STA);
- m_queues[AC_BK]->SetTxMiddle (m_txMiddle);
-}
} //namespace ns3
--- a/src/devices/wifi/qsta-wifi-mac.h Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/qsta-wifi-mac.h Fri Aug 14 12:21:39 2009 +0200
@@ -111,19 +111,15 @@
*/
void DeaggregateAmsduAndForward (Ptr<Packet> aggregatedPacket, WifiMacHeader const *hdr);
+ QstaWifiMac &operator = (const QstaWifiMac &);
+ QstaWifiMac (const QstaWifiMac &);
+ virtual void FinishConfigureStandard (enum WifiPhyStandard standard);
+ void SetQueue (enum AccessClass ac);
Ptr<EdcaTxopN> GetVOQueue (void) const;
Ptr<EdcaTxopN> GetVIQueue (void) const;
Ptr<EdcaTxopN> GetBEQueue (void) const;
Ptr<EdcaTxopN> GetBKQueue (void) const;
- void SetVOQueue (Ptr<EdcaTxopN> voQueue);
- void SetVIQueue (Ptr<EdcaTxopN> viQueue);
- void SetBEQueue (Ptr<EdcaTxopN> beQueue);
- void SetBKQueue (Ptr<EdcaTxopN> bkQueue);
-
- QstaWifiMac &operator = (const QstaWifiMac &);
- QstaWifiMac (const QstaWifiMac &);
-
typedef std::map<AccessClass, Ptr<EdcaTxopN> > Queues;
typedef std::list<std::pair<Ptr<Packet>, AmsduSubframeHeader> > DeaggregatedMsdus;
typedef std::list<std::pair<Ptr<Packet>, AmsduSubframeHeader> >::const_iterator DeaggregatedMsdusCI;
@@ -136,13 +132,7 @@
REFUSED
} m_state;
- /*Next map is used only for an esay access to a specific queue*/
Queues m_queues;
- Ptr<EdcaTxopN> m_voEdca;
- Ptr<EdcaTxopN> m_viEdca;
- Ptr<EdcaTxopN> m_beEdca;
- Ptr<EdcaTxopN> m_bkEdca;
-
Ptr<MacLow> m_low;
Ptr<WifiPhy> m_phy;
Ptr<WifiRemoteStationManager> m_stationManager;
--- a/src/devices/wifi/wifi-mac.cc Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/wifi-mac.cc Fri Aug 14 12:21:39 2009 +0200
@@ -18,6 +18,7 @@
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
*/
#include "wifi-mac.h"
+#include "dcf.h"
#include "ns3/uinteger.h"
#include "ns3/trace-source-accessor.h"
@@ -117,14 +118,6 @@
MakeSsidAccessor (&WifiMac::GetSsid,
&WifiMac::SetSsid),
MakeSsidChecker ())
- .AddAttribute ("Standard", "The standard chosen configures some MAC-specific constants",
- EnumValue (WIFI_PHY_STANDARD_80211a),
- MakeEnumAccessor (&WifiMac::SetStandard),
- MakeEnumChecker (WIFI_PHY_STANDARD_80211a, "802.11a",
- WIFI_PHY_STANDARD_80211b, "802.11b",
- WIFI_PHY_STANDARD_80211_10Mhz,"802.11_10Mhz",
- WIFI_PHY_STANDARD_80211_5Mhz,"802-11_5Mhz",
- WIFI_PHY_STANDARD_holland, "holland"))
.AddTraceSource ("MacTx",
"A packet has been received from higher layers and is being processed in preparation for "
"queueing for transmission.",
@@ -209,9 +202,8 @@
}
void
-WifiMac::SetStandard (enum WifiPhyStandard standard)
+WifiMac::ConfigureStandard (enum WifiPhyStandard standard)
{
- m_standard = standard;
switch (standard) {
case WIFI_PHY_STANDARD_80211a:
Configure80211a ();
@@ -232,6 +224,7 @@
NS_ASSERT (false);
break;
}
+ FinishConfigureStandard (standard);
}
void
@@ -278,4 +271,41 @@
SetAckTimeout(MicroSeconds(64+176+21+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2));
}
+void
+WifiMac::ConfigureDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax, enum AccessClass ac)
+{
+ /* see IEE802.11 section 7.3.2.29 */
+ switch (ac) {
+ case AC_VO:
+ dcf->SetMinCw ((cwmin+1)/4-1);
+ dcf->SetMaxCw ((cwmin+1)/2-1);
+ dcf->SetAifsn (2);
+ break;
+ case AC_VI:
+ dcf->SetMinCw ((cwmin+1)/2-1);
+ dcf->SetMaxCw (cwmin);
+ dcf->SetAifsn (2);
+ break;
+ case AC_BE:
+ dcf->SetMinCw (cwmin);
+ dcf->SetMaxCw (cwmax);
+ dcf->SetAifsn (3);
+ break;
+ case AC_BK:
+ dcf->SetMinCw (cwmin);
+ dcf->SetMaxCw (cwmax);
+ dcf->SetAifsn (7);
+ break;
+ case AC_BE_NQOS:
+ dcf->SetMinCw (cwmin);
+ dcf->SetMaxCw (cwmax);
+ dcf->SetAifsn (2);
+ break;
+ case AC_UNDEF:
+ NS_FATAL_ERROR ("I don't know what to do with this");
+ break;
+ }
+}
+
+
} // namespace ns3
--- a/src/devices/wifi/wifi-mac.h Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/wifi-mac.h Fri Aug 14 12:21:39 2009 +0200
@@ -26,9 +26,12 @@
#include "wifi-phy.h"
#include "wifi-remote-station-manager.h"
#include "ssid.h"
+#include "qos-utils.h"
namespace ns3 {
+class Dcf;
+
/**
* \brief base class for all MAC-level wifi objects.
*
@@ -209,8 +212,10 @@
/**
* \param standard the wifi standard to be configured
*/
- void SetStandard (enum WifiPhyStandard standard);
+ void ConfigureStandard (enum WifiPhyStandard standard);
+protected:
+ void ConfigureDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax, enum AccessClass ac);
private:
static Time GetDefaultMaxPropagationDelay (void);
static Time GetDefaultSlot (void);
@@ -218,10 +223,18 @@
static Time GetDefaultEifsNoDifs (void);
static Time GetDefaultCtsAckDelay (void);
static Time GetDefaultCtsAckTimeout (void);
+ /**
+ * \param standard the phy standard to be used
+ *
+ * This method is called by ns3::WifiMac::ConfigureStandard to complete
+ * the configuration process for a requested phy standard. Subclasses should
+ * implement this method to configure their dcf queues according to the
+ * requested standard.
+ */
+ virtual void FinishConfigureStandard (enum WifiPhyStandard standard) = 0;
Time m_maxPropagationDelay;
uint32_t m_maxMsduSize;
- WifiPhyStandard m_standard;
void Configure80211a (void);
void Configure80211b (void);
--- a/src/devices/wifi/wifi-phy.h Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/wifi-phy.h Fri Aug 14 12:21:39 2009 +0200
@@ -253,6 +253,8 @@
virtual void SetChannelNumber (uint16_t id) = 0;
/// Return current channel number, see SetChannelNumber()
virtual uint16_t GetChannelNumber () const = 0;
+
+ virtual void ConfigureStandard (enum WifiPhyStandard standard) = 0;
virtual Ptr<WifiChannel> GetChannel (void) const = 0;
--- a/src/devices/wifi/wifi-test.cc Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/wifi-test.cc Fri Aug 14 12:21:39 2009 +0200
@@ -71,9 +71,8 @@
Ptr<Node> node = CreateObject<Node> ();
Ptr<WifiNetDevice> dev = CreateObject<WifiNetDevice> ();
- Ptr<DcaTxop> queue = CreateObject<DcaTxop> ();
Ptr<WifiMac> mac = m_mac.Create<WifiMac> ();
- mac->SetAttribute("DcaTxop", PointerValue (queue));
+ mac->ConfigureStandard (WIFI_PHY_STANDARD_80211a);
Ptr<ConstantPositionMobilityModel> mobility = CreateObject<ConstantPositionMobilityModel> ();
Ptr<YansWifiPhy> phy = CreateObject<YansWifiPhy> ();
Ptr<ErrorRateModel> error = CreateObject<YansErrorRateModel> ();
@@ -81,6 +80,7 @@
phy->SetChannel (channel);
phy->SetDevice (dev);
phy->SetMobility (node);
+ phy->ConfigureStandard (WIFI_PHY_STANDARD_80211a);
Ptr<WifiRemoteStationManager> manager = m_manager.Create<WifiRemoteStationManager> ();
mobility->SetPosition (pos);
--- a/src/devices/wifi/wscript Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/wscript Fri Aug 14 12:21:39 2009 +0200
@@ -64,6 +64,7 @@
'amsdu-subframe-header.cc',
'msdu-standard-aggregator.cc',
'minstrel-wifi-manager.cc',
+ 'dcf.cc',
]
headers = bld.new_task_gen('ns3header')
headers.module = 'wifi'
@@ -107,14 +108,14 @@
'msdu-aggregator.h',
'amsdu-subframe-header.h',
'qos-tag.h',
-# Need this for module devices/mesh
'mgt-headers.h',
'status-code.h',
'capability-information.h',
'dcf-manager.h',
'mac-rx-middle.h',
'mac-low.h',
- 'minstrel-wifi-manager.h'
+ 'minstrel-wifi-manager.h',
+ 'dcf.h',
]
if bld.env['ENABLE_GSL']:
--- a/src/devices/wifi/yans-wifi-phy.cc Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/yans-wifi-phy.cc Fri Aug 14 12:21:39 2009 +0200
@@ -105,15 +105,6 @@
MakeDoubleAccessor (&YansWifiPhy::SetRxNoiseFigure,
&YansWifiPhy::GetRxNoiseFigure),
MakeDoubleChecker<double> ())
- .AddAttribute ("Standard", "The standard chosen configures a set of transmission modes"
- " and some PHY-specific constants.",
- EnumValue (WIFI_PHY_STANDARD_80211a),
- MakeEnumAccessor (&YansWifiPhy::SetStandard),
- MakeEnumChecker (WIFI_PHY_STANDARD_80211a, "802.11a",
- WIFI_PHY_STANDARD_80211b, "802.11b",
- WIFI_PHY_STANDARD_80211_10Mhz,"802.11_10Mhz",
- WIFI_PHY_STANDARD_80211_5Mhz,"802.11_5Mhz",
- WIFI_PHY_STANDARD_holland, "holland"))
.AddAttribute ("State", "The state of the PHY layer",
PointerValue (),
MakePointerAccessor (&YansWifiPhy::m_state),
@@ -151,10 +142,9 @@
}
void
-YansWifiPhy::SetStandard (enum WifiPhyStandard standard)
+YansWifiPhy::ConfigureStandard (enum WifiPhyStandard standard)
{
NS_LOG_FUNCTION (this << standard);
- m_standard = standard;
switch (standard) {
case WIFI_PHY_STANDARD_80211a:
Configure80211a ();
--- a/src/devices/wifi/yans-wifi-phy.h Thu Aug 13 13:39:23 2009 +0200
+++ b/src/devices/wifi/yans-wifi-phy.h Fri Aug 14 12:21:39 2009 +0200
@@ -89,7 +89,6 @@
WifiMode mode,
WifiPreamble preamble);
- void SetStandard (enum WifiPhyStandard standard);
void SetRxNoiseFigure (double noiseFigureDb);
void SetTxPowerStart (double start);
void SetTxPowerEnd (double end);
@@ -133,6 +132,7 @@
virtual WifiMode GetMode (uint32_t mode) const;
virtual double CalculateSnr (WifiMode txMode, double ber) const;
virtual Ptr<WifiChannel> GetChannel (void) const;
+ virtual void ConfigureStandard (enum WifiPhyStandard standard);
private:
typedef std::vector<WifiMode> Modes;
@@ -170,7 +170,6 @@
Modes m_modes;
EventId m_endSyncEvent;
UniformVariable m_random;
- WifiPhyStandard m_standard;
/// Standard-dependent center frequency of 0-th channel, MHz
double m_channelStartingFrequency;
Ptr<WifiPhyStateHelper> m_state;
--- a/src/helper/nqos-wifi-mac-helper.cc Thu Aug 13 13:39:23 2009 +0200
+++ b/src/helper/nqos-wifi-mac-helper.cc Fri Aug 14 12:21:39 2009 +0200
@@ -25,9 +25,7 @@
namespace ns3 {
NqosWifiMacHelper::NqosWifiMacHelper ()
-{
- m_queue.SetTypeId ("ns3::DcaTxop");
-}
+{}
NqosWifiMacHelper::~NqosWifiMacHelper ()
{}
@@ -62,24 +60,10 @@
m_mac.Set (n7, v7);
}
-void
-NqosWifiMacHelper::SetDcaParameters (std::string n0, const AttributeValue &v0,
- std::string n1, const AttributeValue &v1,
- std::string n2, const AttributeValue &v2,
- std::string n3, const AttributeValue &v3)
-{
- m_queue.Set (n0, v0);
- m_queue.Set (n1, v1);
- m_queue.Set (n2, v2);
- m_queue.Set (n3, v3);
-}
-
Ptr<WifiMac>
NqosWifiMacHelper::Create (void) const
{
Ptr<WifiMac> mac = m_mac.Create<WifiMac> ();
- Ptr<DcaTxop> queue = m_queue.Create<DcaTxop> ();
- mac->SetAttribute ("DcaTxop", PointerValue (queue));
return mac;
}
--- a/src/helper/nqos-wifi-mac-helper.h Thu Aug 13 13:39:23 2009 +0200
+++ b/src/helper/nqos-wifi-mac-helper.h Fri Aug 14 12:21:39 2009 +0200
@@ -69,20 +69,6 @@
std::string n5 = "", const AttributeValue &v5 = EmptyAttributeValue (),
std::string n6 = "", const AttributeValue &v6 = EmptyAttributeValue (),
std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue ());
- /**
- * \param n0 the name of the attribute to set
- * \param v0 the value of the attribute to set
- * \param n1 the name of the attribute to set
- * \param v1 the value of the attribute to set
- * \param n2 the name of the attribute to set
- * \param v2 the value of the attribute to set
- * \param n3 the name of the attribute to set
- * \param v3 the value of the attribute to set
- */
- void SetDcaParameters (std::string n0 = "", const AttributeValue &v0 = EmptyAttributeValue (),
- std::string n1 = "", const AttributeValue &v1 = EmptyAttributeValue (),
- std::string n2 = "", const AttributeValue &v2 = EmptyAttributeValue (),
- std::string n3 = "", const AttributeValue &v3 = EmptyAttributeValue ());
private:
/**
* \returns a newly-created MAC object.
@@ -92,7 +78,6 @@
virtual Ptr<WifiMac> Create (void) const;
ObjectFactory m_mac;
- ObjectFactory m_queue;
};
} //namespace ns3
--- a/src/helper/qos-wifi-mac-helper.cc Thu Aug 13 13:39:23 2009 +0200
+++ b/src/helper/qos-wifi-mac-helper.cc Fri Aug 14 12:21:39 2009 +0200
@@ -28,20 +28,12 @@
QosWifiMacHelper::QosWifiMacHelper ()
{
- m_aggregators.insert (std::make_pair (AC_VO, ObjectFactory ()));
- m_aggregators.insert (std::make_pair (AC_VI, ObjectFactory ()));
- m_aggregators.insert (std::make_pair (AC_BE, ObjectFactory ()));
- m_aggregators.insert (std::make_pair (AC_BK, ObjectFactory ()));
-
- m_queues.insert (std::make_pair (AC_VO, ObjectFactory ()));
- m_queues.insert (std::make_pair (AC_VI, ObjectFactory ()));
- m_queues.insert (std::make_pair (AC_BE, ObjectFactory ()));
- m_queues.insert (std::make_pair (AC_BK, ObjectFactory ()));
-
- m_queues[AC_VO].SetTypeId ("ns3::EdcaTxopN");
- m_queues[AC_VI].SetTypeId ("ns3::EdcaTxopN");
- m_queues[AC_BE].SetTypeId ("ns3::EdcaTxopN");
- m_queues[AC_BK].SetTypeId ("ns3::EdcaTxopN");
+ ObjectFactory defaultAggregator;
+ defaultAggregator.SetTypeId ("ns3::MsduStandardAggregator");
+ m_aggregators.insert (std::make_pair (AC_VO, defaultAggregator));
+ m_aggregators.insert (std::make_pair (AC_VI, defaultAggregator));
+ m_aggregators.insert (std::make_pair (AC_BE, defaultAggregator));
+ m_aggregators.insert (std::make_pair (AC_BK, defaultAggregator));
}
QosWifiMacHelper::~QosWifiMacHelper ()
@@ -52,19 +44,7 @@
{
QosWifiMacHelper helper;
helper.SetType ("ns3::QstaWifiMac");
- /* For more details about this default parameters see IEE802.11 section 7.3.2.29 */
- helper.SetEdcaParametersForAc (AC_VO,"MinCw", UintegerValue (3),
- "MaxCw", UintegerValue (7),
- "Aifsn", UintegerValue (2));
- helper.SetEdcaParametersForAc (AC_VI,"MinCw", UintegerValue (7),
- "MaxCw", UintegerValue (15),
- "Aifsn", UintegerValue (2));
- helper.SetEdcaParametersForAc (AC_BE,"MinCw", UintegerValue (15),
- "MaxCw", UintegerValue (1023),
- "Aifsn", UintegerValue (3));
- helper.SetEdcaParametersForAc (AC_BK,"MinCw", UintegerValue (15),
- "MaxCw", UintegerValue (1023),
- "Aifsn", UintegerValue (7));
+
return helper;
}
@@ -110,80 +90,26 @@
}
void
-QosWifiMacHelper::SetEdcaParametersForAc (AccessClass accessClass,
- std::string n0, const AttributeValue &v0,
- std::string n1, const AttributeValue &v1,
- std::string n2, const AttributeValue &v2,
- std::string n3, const AttributeValue &v3)
+QosWifiMacHelper::Setup (Ptr<WifiMac> mac, enum AccessClass ac, std::string dcaAttrName) const
{
- std::map<AccessClass, ObjectFactory>::iterator it;
- it = m_queues.find (accessClass);
- if (it != m_queues.end ())
- {
- it->second.Set (n0, v0);
- it->second.Set (n1, v1);
- it->second.Set (n2, v2);
- it->second.Set (n3, v3);
- }
+ ObjectFactory factory = m_aggregators.find (ac)->second;
+ PointerValue ptr;
+ mac->GetAttribute (dcaAttrName, ptr);
+ Ptr<EdcaTxopN> edca = ptr.Get<EdcaTxopN> ();
+ Ptr<MsduAggregator> aggregator = factory.Create<MsduAggregator> ();
+ edca->SetMsduAggregator (aggregator);
}
+
Ptr<WifiMac>
QosWifiMacHelper::Create (void) const
{
Ptr<WifiMac> mac = m_mac.Create<WifiMac> ();
- Ptr<EdcaTxopN> edcaQueue;
- Ptr<MsduAggregator> aggregator;
- std::map<AccessClass, ObjectFactory>::const_iterator itQueue;
- std::map<AccessClass, ObjectFactory>::const_iterator itAggr;
-
- /* Setting for VO queue */
- itQueue = m_queues.find (AC_VO);
- itAggr = m_aggregators.find (AC_VO);
-
- edcaQueue = itQueue->second.Create<EdcaTxopN> ();
- if (itAggr->second.GetTypeId ().GetUid () != 0)
- {
- aggregator = itAggr->second.Create<MsduAggregator> ();
- edcaQueue->SetMsduAggregator (aggregator);
- }
- mac->SetAttribute ("VO_EdcaTxopN", PointerValue (edcaQueue));
-
- /* Setting for VI queue */
- itQueue = m_queues.find (AC_VI);
- itAggr = m_aggregators.find (AC_VI);
-
- edcaQueue = itQueue->second.Create<EdcaTxopN> ();
- if (itAggr->second.GetTypeId ().GetUid () != 0)
- {
- aggregator = itAggr->second.Create<MsduAggregator> ();
- edcaQueue->SetMsduAggregator (aggregator);
- }
- mac->SetAttribute ("VI_EdcaTxopN", PointerValue (edcaQueue));
-
- /* Setting for BE queue */
- itQueue = m_queues.find (AC_BE);
- itAggr = m_aggregators.find (AC_BE);
-
- edcaQueue = itQueue->second.Create<EdcaTxopN> ();
- if (itAggr->second.GetTypeId ().GetUid () != 0)
- {
- aggregator = itAggr->second.Create<MsduAggregator> ();
- edcaQueue->SetMsduAggregator (aggregator);
- }
- mac->SetAttribute ("BE_EdcaTxopN", PointerValue (edcaQueue));
-
- /* Setting for BK queue */
- itQueue = m_queues.find (AC_BK);
- itAggr = m_aggregators.find (AC_BK);
-
- edcaQueue = itQueue->second.Create<EdcaTxopN> ();
- if (itAggr->second.GetTypeId ().GetUid () != 0)
- {
- aggregator = itAggr->second.Create<MsduAggregator> ();
- edcaQueue->SetMsduAggregator (aggregator);
- }
- mac->SetAttribute ("BK_EdcaTxopN", PointerValue (edcaQueue));
+ Setup (mac, AC_VO, "VO_EdcaTxopN");
+ Setup (mac, AC_VI, "VI_EdcaTxopN");
+ Setup (mac, AC_BE, "BE_EdcaTxopN");
+ Setup (mac, AC_BK, "BK_EdcaTxopN");
return mac;
}
--- a/src/helper/qos-wifi-mac-helper.h Thu Aug 13 13:39:23 2009 +0200
+++ b/src/helper/qos-wifi-mac-helper.h Fri Aug 14 12:21:39 2009 +0200
@@ -92,23 +92,6 @@
std::string n1 = "", const AttributeValue &v1 = EmptyAttributeValue (),
std::string n2 = "", const AttributeValue &v2 = EmptyAttributeValue (),
std::string n3 = "", const AttributeValue &v3 = EmptyAttributeValue ());
- /**
- * \param accessClass access class for which we are setting edca params. Possibilities
- * are: AC_BK, AC_BE, AC_VI, AC_VO.
- * \param n0 the name of the attribute to set
- * \param v0 the value of the attribute to set
- * \param n1 the name of the attribute to set
- * \param v1 the value of the attribute to set
- * \param n2 the name of the attribute to set
- * \param v2 the value of the attribute to set
- * \param n3 the name of the attribute to set
- * \param v3 the value of the attribute to set
- */
- void SetEdcaParametersForAc (AccessClass accessClass,
- std::string n0 = "", const AttributeValue &v0 = EmptyAttributeValue (),
- std::string n1 = "", const AttributeValue &v1 = EmptyAttributeValue (),
- std::string n2 = "", const AttributeValue &v2 = EmptyAttributeValue (),
- std::string n3 = "", const AttributeValue &v3 = EmptyAttributeValue ());
private:
/**
* \returns a newly-created MAC object.
@@ -116,9 +99,10 @@
* This method implements the pure virtual method defined in \ref ns3::WifiMacHelper.
*/
virtual Ptr<WifiMac> Create (void) const;
+ void Setup (Ptr<WifiMac> mac, enum AccessClass ac, std::string dcaAttrName) const;
+
ObjectFactory m_mac;
- std::map<AccessClass, ObjectFactory> m_queues;
std::map<AccessClass, ObjectFactory> m_aggregators;
};
--- a/src/helper/wifi-helper.cc Thu Aug 13 13:39:23 2009 +0200
+++ b/src/helper/wifi-helper.cc Fri Aug 14 12:21:39 2009 +0200
@@ -46,6 +46,7 @@
{}
WifiHelper::WifiHelper ()
+ : m_standard (WIFI_PHY_STANDARD_80211a)
{}
WifiHelper
@@ -79,6 +80,12 @@
m_stationManager.Set (n7, v7);
}
+void
+WifiHelper::SetStandard (enum WifiPhyStandard standard)
+{
+ m_standard = standard;
+}
+
NetDeviceContainer
WifiHelper::Install (const WifiPhyHelper &phyHelper,
const WifiMacHelper &macHelper, NodeContainer c) const
@@ -92,6 +99,8 @@
Ptr<WifiMac> mac = macHelper.Create ();
Ptr<WifiPhy> phy = phyHelper.Create (node, device);
mac->SetAddress (Mac48Address::Allocate ());
+ mac->ConfigureStandard (m_standard);
+ phy->ConfigureStandard (m_standard);
device->SetMac (mac);
device->SetPhy (phy);
device->SetRemoteStationManager (manager);
--- a/src/helper/wifi-helper.h Thu Aug 13 13:39:23 2009 +0200
+++ b/src/helper/wifi-helper.h Fri Aug 14 12:21:39 2009 +0200
@@ -27,6 +27,7 @@
#include "ns3/object-factory.h"
#include "ns3/node-container.h"
#include "ns3/net-device-container.h"
+#include "ns3/wifi-phy-standard.h"
namespace ns3 {
@@ -155,6 +156,8 @@
NetDeviceContainer Install (const WifiPhyHelper &phy,
const WifiMacHelper &mac, std::string nodeName) const;
+ void SetStandard (enum WifiPhyStandard standard);
+
/**
* Helper to enable all WifiNetDevice log components with one statement
*/
@@ -162,6 +165,7 @@
private:
ObjectFactory m_stationManager;
+ enum WifiPhyStandard m_standard;
};
} // namespace ns3