src/wifi/helper/wifi-helper.cc
changeset 8981 7e1c95c4d1a7
parent 7141 072fb225b714
child 10206 ecd136bcb899
equal deleted inserted replaced
8980:0202e0b04282 8981:7e1c95c4d1a7
    20  * Author: Mirko Banchi <mk.banchi@gmail.com>
    20  * Author: Mirko Banchi <mk.banchi@gmail.com>
    21  */
    21  */
    22 #include "wifi-helper.h"
    22 #include "wifi-helper.h"
    23 #include "ns3/wifi-net-device.h"
    23 #include "ns3/wifi-net-device.h"
    24 #include "ns3/wifi-mac.h"
    24 #include "ns3/wifi-mac.h"
       
    25 #include "ns3/regular-wifi-mac.h"
       
    26 #include "ns3/dca-txop.h"
       
    27 #include "ns3/edca-txop-n.h"
       
    28 #include "ns3/minstrel-wifi-manager.h"
    25 #include "ns3/wifi-phy.h"
    29 #include "ns3/wifi-phy.h"
    26 #include "ns3/wifi-remote-station-manager.h"
    30 #include "ns3/wifi-remote-station-manager.h"
    27 #include "ns3/wifi-channel.h"
    31 #include "ns3/wifi-channel.h"
    28 #include "ns3/yans-wifi-channel.h"
    32 #include "ns3/yans-wifi-channel.h"
    29 #include "ns3/propagation-delay-model.h"
    33 #include "ns3/propagation-delay-model.h"
    30 #include "ns3/propagation-loss-model.h"
    34 #include "ns3/propagation-loss-model.h"
    31 #include "ns3/mobility-model.h"
    35 #include "ns3/mobility-model.h"
    32 #include "ns3/log.h"
    36 #include "ns3/log.h"
    33 #include "ns3/config.h"
    37 #include "ns3/config.h"
       
    38 #include "ns3/pointer.h"
    34 #include "ns3/simulator.h"
    39 #include "ns3/simulator.h"
    35 #include "ns3/names.h"
    40 #include "ns3/names.h"
    36 
    41 
    37 NS_LOG_COMPONENT_DEFINE ("WifiHelper");
    42 NS_LOG_COMPONENT_DEFINE ("WifiHelper");
    38 
    43 
   161   LogComponentEnable ("YansErrorRateModel", LOG_LEVEL_ALL);
   166   LogComponentEnable ("YansErrorRateModel", LOG_LEVEL_ALL);
   162   LogComponentEnable ("YansWifiChannel", LOG_LEVEL_ALL);
   167   LogComponentEnable ("YansWifiChannel", LOG_LEVEL_ALL);
   163   LogComponentEnable ("YansWifiPhy", LOG_LEVEL_ALL);
   168   LogComponentEnable ("YansWifiPhy", LOG_LEVEL_ALL);
   164 }
   169 }
   165 
   170 
       
   171 int64_t
       
   172 WifiHelper::AssignStreams (NetDeviceContainer c, int64_t stream)
       
   173 {
       
   174   int64_t currentStream = stream;
       
   175   Ptr<NetDevice> netDevice;
       
   176   for (NetDeviceContainer::Iterator i = c.Begin (); i != c.End (); ++i)
       
   177     {
       
   178       netDevice = (*i);
       
   179       Ptr<WifiNetDevice> wifi = DynamicCast<WifiNetDevice> (netDevice);
       
   180       if (wifi)
       
   181         {
       
   182           // Handle any random numbers in the PHY objects.
       
   183           currentStream += wifi->GetPhy ()->AssignStreams (currentStream);
       
   184 
       
   185           // Handle any random numbers in the station managers.
       
   186           Ptr<WifiRemoteStationManager> manager = wifi->GetRemoteStationManager ();
       
   187           Ptr<MinstrelWifiManager> minstrel = DynamicCast<MinstrelWifiManager> (manager);
       
   188           if (minstrel)
       
   189             {
       
   190               currentStream += minstrel->AssignStreams (currentStream);
       
   191             }
       
   192 
       
   193           // Handle any random numbers in the MAC objects.
       
   194           Ptr<WifiMac> mac = wifi->GetMac ();
       
   195           Ptr<RegularWifiMac> rmac = DynamicCast<RegularWifiMac> (mac);
       
   196           if (rmac)
       
   197             {
       
   198               PointerValue ptr;
       
   199               rmac->GetAttribute ("DcaTxop", ptr);
       
   200               Ptr<DcaTxop> dcaTxop = ptr.Get<DcaTxop> ();
       
   201               currentStream += dcaTxop->AssignStreams (currentStream);
       
   202 
       
   203               rmac->GetAttribute ("VO_EdcaTxopN", ptr);
       
   204               Ptr<EdcaTxopN> vo_edcaTxopN = ptr.Get<EdcaTxopN> ();
       
   205               currentStream += vo_edcaTxopN->AssignStreams (currentStream);
       
   206 
       
   207               rmac->GetAttribute ("VI_EdcaTxopN", ptr);
       
   208               Ptr<EdcaTxopN> vi_edcaTxopN = ptr.Get<EdcaTxopN> ();
       
   209               currentStream += vi_edcaTxopN->AssignStreams (currentStream);
       
   210 
       
   211               rmac->GetAttribute ("BE_EdcaTxopN", ptr);
       
   212               Ptr<EdcaTxopN> be_edcaTxopN = ptr.Get<EdcaTxopN> ();
       
   213               currentStream += be_edcaTxopN->AssignStreams (currentStream);
       
   214 
       
   215               rmac->GetAttribute ("BK_EdcaTxopN", ptr);
       
   216               Ptr<EdcaTxopN> bk_edcaTxopN = ptr.Get<EdcaTxopN> ();
       
   217               currentStream += bk_edcaTxopN->AssignStreams (currentStream);
       
   218             }
       
   219         }
       
   220     }
       
   221   return (currentStream - stream);
       
   222 }
       
   223 
   166 } // namespace ns3
   224 } // namespace ns3