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(
"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()
375 if __name__ ==
'__main__':