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 |