15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
16 # |
16 # |
17 # Authors: Gustavo Carneiro <gjc@inescporto.pt> |
17 # Authors: Gustavo Carneiro <gjc@inescporto.pt> |
18 |
18 |
19 import sys |
19 import sys |
20 import ns3 |
20 |
|
21 import ns.applications |
|
22 import ns.core |
|
23 import ns.flow_monitor |
|
24 import ns.internet |
|
25 import ns.mobility |
|
26 import ns.network |
|
27 import ns.olsr |
|
28 import ns.wifi |
21 |
29 |
22 DISTANCE = 100 # (m) |
30 DISTANCE = 100 # (m) |
23 NUM_NODES_SIDE = 3 |
31 NUM_NODES_SIDE = 3 |
24 |
32 |
25 def main(argv): |
33 def main(argv): |
26 |
34 |
27 cmd = ns3.CommandLine() |
35 cmd = ns.core.CommandLine() |
28 |
36 |
29 cmd.NumNodesSide = None |
37 cmd.NumNodesSide = None |
30 cmd.AddValue("NumNodesSide", "Grid side number of nodes (total number of nodes will be this number squared)") |
38 cmd.AddValue("NumNodesSide", "Grid side number of nodes (total number of nodes will be this number squared)") |
31 |
39 |
32 cmd.Results = None |
40 cmd.Results = None |
35 cmd.Plot = None |
43 cmd.Plot = None |
36 cmd.AddValue("Plot", "Plot the results using the matplotlib python module") |
44 cmd.AddValue("Plot", "Plot the results using the matplotlib python module") |
37 |
45 |
38 cmd.Parse(argv) |
46 cmd.Parse(argv) |
39 |
47 |
40 wifi = ns3.WifiHelper.Default() |
48 wifi = ns.wifi.WifiHelper.Default() |
41 wifiMac = ns3.NqosWifiMacHelper.Default() |
49 wifiMac = ns.wifi.NqosWifiMacHelper.Default() |
42 wifiPhy = ns3.YansWifiPhyHelper.Default() |
50 wifiPhy = ns.wifi.YansWifiPhyHelper.Default() |
43 wifiChannel = ns3.YansWifiChannelHelper.Default() |
51 wifiChannel = ns.wifi.YansWifiChannelHelper.Default() |
44 wifiPhy.SetChannel(wifiChannel.Create()) |
52 wifiPhy.SetChannel(wifiChannel.Create()) |
45 ssid = ns3.Ssid("wifi-default") |
53 ssid = ns.wifi.Ssid("wifi-default") |
46 wifi.SetRemoteStationManager("ns3::ArfWifiManager") |
54 wifi.SetRemoteStationManager("ns3::ArfWifiManager") |
47 wifiMac.SetType ("ns3::AdhocWifiMac", |
55 wifiMac.SetType ("ns3::AdhocWifiMac", |
48 "Ssid", ns3.SsidValue(ssid)) |
56 "Ssid", ns.wifi.SsidValue(ssid)) |
49 |
57 |
50 internet = ns3.InternetStackHelper() |
58 internet = ns.internet.InternetStackHelper() |
51 list_routing = ns3.Ipv4ListRoutingHelper() |
59 list_routing = ns.internet.Ipv4ListRoutingHelper() |
52 olsr_routing = ns3.OlsrHelper() |
60 olsr_routing = ns.olsr.OlsrHelper() |
53 static_routing = ns3.Ipv4StaticRoutingHelper() |
61 static_routing = ns.internet.Ipv4StaticRoutingHelper() |
54 list_routing.Add(static_routing, 0) |
62 list_routing.Add(static_routing, 0) |
55 list_routing.Add(olsr_routing, 100) |
63 list_routing.Add(olsr_routing, 100) |
56 internet.SetRoutingHelper(list_routing) |
64 internet.SetRoutingHelper(list_routing) |
57 |
65 |
58 ipv4Addresses = ns3.Ipv4AddressHelper() |
66 ipv4Addresses = ns.internet.Ipv4AddressHelper() |
59 ipv4Addresses.SetBase(ns3.Ipv4Address("10.0.0.0"), ns3.Ipv4Mask("255.255.255.0")) |
67 ipv4Addresses.SetBase(ns.network.Ipv4Address("10.0.0.0"), ns.network.Ipv4Mask("255.255.255.0")) |
60 |
68 |
61 port = 9 # Discard port(RFC 863) |
69 port = 9 # Discard port(RFC 863) |
62 onOffHelper = ns3.OnOffHelper("ns3::UdpSocketFactory", |
70 onOffHelper = ns.applications.OnOffHelper("ns3::UdpSocketFactory", |
63 ns3.Address(ns3.InetSocketAddress(ns3.Ipv4Address("10.0.0.1"), port))) |
71 ns.network.Address(ns.network.InetSocketAddress(ns.network.Ipv4Address("10.0.0.1"), port))) |
64 onOffHelper.SetAttribute("DataRate", ns3.DataRateValue(ns3.DataRate("100kbps"))) |
72 onOffHelper.SetAttribute("DataRate", ns.network.DataRateValue(ns.network.DataRate("100kbps"))) |
65 onOffHelper.SetAttribute("OnTime", ns3.RandomVariableValue(ns3.ConstantVariable(1))) |
73 onOffHelper.SetAttribute("OnTime", ns.core.RandomVariableValue(ns.core.ConstantVariable(1))) |
66 onOffHelper.SetAttribute("OffTime", ns3.RandomVariableValue(ns3.ConstantVariable(0))) |
74 onOffHelper.SetAttribute("OffTime", ns.core.RandomVariableValue(ns.core.ConstantVariable(0))) |
67 |
75 |
68 addresses = [] |
76 addresses = [] |
69 nodes = [] |
77 nodes = [] |
70 |
78 |
71 if cmd.NumNodesSide is None: |
79 if cmd.NumNodesSide is None: |
74 num_nodes_side = int(cmd.NumNodesSide) |
82 num_nodes_side = int(cmd.NumNodesSide) |
75 |
83 |
76 for xi in range(num_nodes_side): |
84 for xi in range(num_nodes_side): |
77 for yi in range(num_nodes_side): |
85 for yi in range(num_nodes_side): |
78 |
86 |
79 node = ns3.Node() |
87 node = ns.network.Node() |
80 nodes.append(node) |
88 nodes.append(node) |
81 |
89 |
82 internet.Install(ns3.NodeContainer(node)) |
90 internet.Install(ns.network.NodeContainer(node)) |
83 |
91 |
84 mobility = ns3.ConstantPositionMobilityModel() |
92 mobility = ns.mobility.ConstantPositionMobilityModel() |
85 mobility.SetPosition(ns3.Vector(xi*DISTANCE, yi*DISTANCE, 0)) |
93 mobility.SetPosition(ns.core.Vector(xi*DISTANCE, yi*DISTANCE, 0)) |
86 node.AggregateObject(mobility) |
94 node.AggregateObject(mobility) |
87 |
95 |
88 devices = wifi.Install(wifiPhy, wifiMac, node) |
96 devices = wifi.Install(wifiPhy, wifiMac, node) |
89 ipv4_interfaces = ipv4Addresses.Assign(devices) |
97 ipv4_interfaces = ipv4Addresses.Assign(devices) |
90 addresses.append(ipv4_interfaces.GetAddress(0)) |
98 addresses.append(ipv4_interfaces.GetAddress(0)) |
91 |
99 |
92 for i, node in enumerate(nodes): |
100 for i, node in enumerate(nodes): |
93 destaddr = addresses[(len(addresses) - 1 - i) % len(addresses)] |
101 destaddr = addresses[(len(addresses) - 1 - i) % len(addresses)] |
94 #print i, destaddr |
102 #print i, destaddr |
95 onOffHelper.SetAttribute("Remote", ns3.AddressValue(ns3.InetSocketAddress(destaddr, port))) |
103 onOffHelper.SetAttribute("Remote", ns.network.AddressValue(ns.network.InetSocketAddress(destaddr, port))) |
96 app = onOffHelper.Install(ns3.NodeContainer(node)) |
104 app = onOffHelper.Install(ns.network.NodeContainer(node)) |
97 app.Start(ns3.Seconds(ns3.UniformVariable(20, 30).GetValue())) |
105 app.Start(ns.core.Seconds(ns.core.UniformVariable(20, 30).GetValue())) |
98 |
106 |
99 #internet.EnablePcapAll("wifi-olsr") |
107 #internet.EnablePcapAll("wifi-olsr") |
100 flowmon_helper = ns3.FlowMonitorHelper() |
108 flowmon_helper = ns.flow_monitor.FlowMonitorHelper() |
101 #flowmon_helper.SetMonitorAttribute("StartTime", ns3.TimeValue(ns3.Seconds(31))) |
109 #flowmon_helper.SetMonitorAttribute("StartTime", ns.core.TimeValue(ns.core.Seconds(31))) |
102 monitor = flowmon_helper.InstallAll() |
110 monitor = flowmon_helper.InstallAll() |
103 monitor.SetAttribute("DelayBinWidth", ns3.DoubleValue(0.001)) |
111 monitor.SetAttribute("DelayBinWidth", ns.core.DoubleValue(0.001)) |
104 monitor.SetAttribute("JitterBinWidth", ns3.DoubleValue(0.001)) |
112 monitor.SetAttribute("JitterBinWidth", ns.core.DoubleValue(0.001)) |
105 monitor.SetAttribute("PacketSizeBinWidth", ns3.DoubleValue(20)) |
113 monitor.SetAttribute("PacketSizeBinWidth", ns.core.DoubleValue(20)) |
106 |
114 |
107 ns3.Simulator.Stop(ns3.Seconds(44.0)) |
115 ns.core.Simulator.Stop(ns.core.Seconds(44.0)) |
108 ns3.Simulator.Run() |
116 ns.core.Simulator.Run() |
109 |
117 |
110 def print_stats(os, st): |
118 def print_stats(os, st): |
111 print >> os, " Tx Bytes: ", st.txBytes |
119 print >> os, " Tx Bytes: ", st.txBytes |
112 print >> os, " Rx Bytes: ", st.rxBytes |
120 print >> os, " Rx Bytes: ", st.rxBytes |
113 print >> os, " Tx Packets: ", st.txPackets |
121 print >> os, " Tx Packets: ", st.txPackets |