71 from ctypes
import c_int, c_double
72 backboneNodes = c_int(10)
75 stopTime = c_double(20)
76 cmd = ns.CommandLine(__file__)
82 ns.core.Config.SetDefault(
"ns3::OnOffApplication::PacketSize", ns.core.StringValue(
"1472"))
83 ns.core.Config.SetDefault(
"ns3::OnOffApplication::DataRate", ns.core.StringValue(
"100kb/s"))
91 cmd.AddValue(
"backboneNodes",
"number of backbone nodes", backboneNodes)
92 cmd.AddValue(
"infraNodes",
"number of leaf nodes", infraNodes)
93 cmd.AddValue(
"lanNodes",
"number of LAN nodes", lanNodes)
94 cmd.AddValue[
"double"](
"stopTime",
"simulation stop time(seconds)", stopTime)
102 if (stopTime.value < 10):
103 print (
"Use a simulation stop time >= 10 seconds")
115 backbone = ns.network.NodeContainer()
116 backbone.Create(backboneNodes.value)
121 wifi = ns.wifi.WifiHelper()
122 mac = ns.wifi.WifiMacHelper()
123 mac.SetType(
"ns3::AdhocWifiMac")
124 wifi.SetRemoteStationManager(
"ns3::ConstantRateWifiManager",
125 "DataMode", ns.core.StringValue(
"OfdmRate54Mbps"))
126 wifiPhy = ns.wifi.YansWifiPhyHelper()
127 wifiPhy.SetPcapDataLinkType(wifiPhy.DLT_IEEE802_11_RADIO)
128 wifiChannel = ns.wifi.YansWifiChannelHelper.Default()
129 wifiPhy.SetChannel(wifiChannel.Create())
130 backboneDevices = wifi.Install(wifiPhy, mac, backbone)
134 print (
"Enabling OLSR routing on all backbone nodes")
135 internet = ns.internet.InternetStackHelper()
136 olsr = ns.olsr.OlsrHelper()
137 internet.SetRoutingHelper(olsr);
138 internet.Install(backbone);
145 ipAddrs = ns.internet.Ipv4AddressHelper()
146 ipAddrs.SetBase(ns.network.Ipv4Address(
"192.168.0.0"), ns.network.Ipv4Mask(
"255.255.255.0"))
147 ipAddrs.Assign(backboneDevices)
153 mobility = ns.mobility.MobilityHelper()
154 mobility.SetPositionAllocator(
"ns3::GridPositionAllocator",
155 "MinX", ns.core.DoubleValue(20.0),
156 "MinY", ns.core.DoubleValue(20.0),
157 "DeltaX", ns.core.DoubleValue(20.0),
158 "DeltaY", ns.core.DoubleValue(20.0),
159 "GridWidth", ns.core.UintegerValue(5),
160 "LayoutType", ns.core.StringValue(
"RowFirst"))
161 mobility.SetMobilityModel(
"ns3::RandomDirection2dMobilityModel",
162 "Bounds", ns.mobility.RectangleValue(ns.mobility.Rectangle(-500, 500, -500, 500)),
163 "Speed", ns.core.StringValue (
"ns3::ConstantRandomVariable[Constant=2]"),
164 "Pause", ns.core.StringValue (
"ns3::ConstantRandomVariable[Constant=0.2]"))
165 mobility.Install(backbone)
175 ipAddrs.SetBase(ns.network.Ipv4Address(
"172.16.0.0"), ns.network.Ipv4Mask(
"255.255.255.0"))
177 for i
in range(backboneNodes.value):
178 print (
"Configuring local area network for backbone node ", i)
184 newLanNodes = ns.network.NodeContainer()
185 newLanNodes.Create(lanNodes.value - 1)
187 lan = ns.network.NodeContainer(ns.network.NodeContainer(backbone.Get(i)), newLanNodes)
192 csma = ns.csma.CsmaHelper()
193 csma.SetChannelAttribute(
"DataRate", ns.network.DataRateValue(ns.network.DataRate(5000000)))
194 csma.SetChannelAttribute(
"Delay", ns.core.TimeValue(ns.core.MilliSeconds(2)))
195 lanDevices = csma.Install(lan)
199 internet.Install(newLanNodes)
204 ipAddrs.Assign(lanDevices)
214 mobilityLan = ns.mobility.MobilityHelper()
215 positionAlloc = ns.mobility.ListPositionAllocator()
216 for j
in range(newLanNodes.GetN()):
217 positionAlloc.Add(ns.core.Vector(0.0, (j*10 + 10), 0.0))
219 mobilityLan.SetPositionAllocator(positionAlloc)
220 mobilityLan.PushReferenceMobilityModel(backbone.Get(i))
221 mobilityLan.SetMobilityModel(
"ns3::ConstantPositionMobilityModel")
222 mobilityLan.Install(newLanNodes);
232 ipAddrs.SetBase(ns.network.Ipv4Address(
"10.0.0.0"), ns.network.Ipv4Mask(
"255.255.255.0"))
234 for i
in range(backboneNodes.value):
235 print (
"Configuring wireless network for backbone node ", i)
241 stas = ns.network.NodeContainer()
242 stas.Create(infraNodes.value - 1)
244 infra = ns.network.NodeContainer(ns.network.NodeContainer(backbone.Get(i)), stas)
248 ssid = ns.wifi.Ssid(
'wifi-infra' + str(i))
249 wifiInfra = ns.wifi.WifiHelper()
250 wifiPhy.SetChannel(wifiChannel.Create())
251 macInfra = ns.wifi.WifiMacHelper();
252 macInfra.SetType(
"ns3::StaWifiMac",
253 "Ssid", ns.wifi.SsidValue(ssid))
256 staDevices = wifiInfra.Install(wifiPhy, macInfra, stas)
258 macInfra.SetType(
"ns3::ApWifiMac",
259 "Ssid", ns.wifi.SsidValue(ssid))
260 apDevices = wifiInfra.Install(wifiPhy, macInfra, backbone.Get(i))
262 infraDevices = ns.network.NetDeviceContainer(apDevices, staDevices)
266 internet.Install(stas)
271 ipAddrs.Assign(infraDevices)
280 subnetAlloc = ns.mobility.ListPositionAllocator()
283 tempRef.append(subnetAlloc)
289 for j
in range(infra.GetN()):
290 subnetAlloc.Add(ns.core.Vector(0.0, j, 0.0))
292 mobility.PushReferenceMobilityModel(backbone.Get(i))
293 mobility.SetPositionAllocator(subnetAlloc)
294 mobility.SetMobilityModel(
"ns3::RandomDirection2dMobilityModel",
295 "Bounds", ns.mobility.RectangleValue(ns.mobility.Rectangle(-10, 10, -10, 10)),
296 "Speed", ns.core.StringValue (
"ns3::ConstantRandomVariable[Constant=3]"),
297 "Pause", ns.core.StringValue (
"ns3::ConstantRandomVariable[Constant=0.4]"))
298 mobility.Install(stas)
308 print (
"Create Applications.")
311 appSource = ns.network.NodeList.GetNode(backboneNodes.value)
312 lastNodeIndex = backboneNodes.value + backboneNodes.value*(lanNodes.value - 1) + backboneNodes.value*(infraNodes.value - 1) - 1
313 appSink = ns.network.NodeList.GetNode(lastNodeIndex)
316 Ipv4Address getIpv4AddressFromNode(Ptr<Node> node){
317 return node->GetObject<Ipv4>()->GetAddress(1,0).GetLocal();
321 remoteAddr = ns.cppyy.gbl.getIpv4AddressFromNode(appSink)
322 socketAddr = ns.network.InetSocketAddress(remoteAddr, port)
323 onoff = ns.applications.OnOffHelper(
"ns3::UdpSocketFactory", socketAddr.ConvertTo())
324 apps = onoff.Install(ns.network.NodeContainer(appSource))
325 apps.Start(ns.core.Seconds(3))
326 apps.Stop(ns.core.Seconds(stopTime.value - 1))
329 sink = ns.applications.PacketSinkHelper(
"ns3::UdpSocketFactory",
330 ns.network.InetSocketAddress(ns.network.InetSocketAddress(ns.network.Ipv4Address.GetAny(), port)).ConvertTo())
331 sinkContainer = ns.network.NodeContainer(appSink)
332 apps = sink.Install(sinkContainer)
333 apps.Start(ns.core.Seconds(3))
341 print (
"Configure Tracing.")
342 csma = ns.csma.CsmaHelper()
346 ascii = ns.network.AsciiTraceHelper();
347 stream = ascii.CreateFileStream(
"mixed-wireless.tr");
348 wifiPhy.EnableAsciiAll(stream);
349 csma.EnableAsciiAll(stream);
350 internet.EnableAsciiIpv4All(stream);
353 csma.EnablePcapAll(
"mixed-wireless",
False)
355 wifiPhy.EnablePcap(
"mixed-wireless", backboneDevices)
356 wifiPhy.EnablePcap(
"mixed-wireless", appSink.GetId(), 0)
370 print (
"Run Simulation.")
371 ns.core.Simulator.Stop(ns.core.Seconds(stopTime.value))
372 ns.core.Simulator.Run()
373 ns.core.Simulator.Destroy()
375if __name__ ==
'__main__':