src/devices/wifi/qap-wifi-mac.cc
changeset 4720 15221757964f
parent 4687 02bf728f7e39
child 5524 efed7493f2c1
--- 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