--- a/utils/flowmon/flowmon-bench.py Fri May 08 15:42:38 2009 +0100
+++ b/utils/flowmon/flowmon-bench.py Fri May 08 18:15:13 2009 +0100
@@ -95,9 +95,11 @@
cmd.AddValue("RunNumber", "Run number (statistics)")
cmd.AddValue("Results", "Write results to the given file")
cmd.AddValue("StopTime", "Simulation stop time")
+ cmd.AddValue("FlowHops", "Number of hops each flow will traverse (default 2, must be <= NumNodesSide-1)")
cmd.Parse(argv)
+
enable_monitor = int(cmd.EnableMonitor)
run_number = int(cmd.RunNumber)
if cmd.NumNodesSide is None:
@@ -105,26 +107,31 @@
else:
num_nodes_side = int(cmd.NumNodesSide)
+ flow_hops = int(getattr(cmd, "FlowHops", "2"))
+ assert flow_hops < num_nodes_side
ns3.RandomVariable.UseGlobalSeed(1, 1, 2, 3, 5, 8)
ns3.RandomVariable.SetRunNumber(run_number)
+
+ # -- create the topology --
+
p2p = ns3.PointToPointHelper()
- p2p.SetDeviceAttribute("DataRate", ns3.StringValue("5Mbps"))
- p2p.SetChannelAttribute("Delay", ns3.StringValue("2ms"))
+ p2p.SetDeviceAttribute("DataRate", ns3.StringValue("100kbps"))
+ p2p.SetChannelAttribute("Delay", ns3.StringValue("0ms"))
internet = ns3.InternetStackHelper()
ipv4Addresses = ns3.Ipv4AddressHelper()
ipv4Addresses.SetBase(ns3.Ipv4Address("10.0.0.0"), ns3.Ipv4Mask("255.255.255.255"))
- olsrHelper = ns3.OlsrHelper()
+ #olsrHelper = ns3.OlsrHelper()
port = 9 # Discard port(RFC 863)
onOffHelper = ns3.OnOffHelper("ns3::UdpSocketFactory",
ns3.Address(ns3.InetSocketAddress(ns3.Ipv4Address("10.0.0.1"), port)))
- onOffHelper.SetAttribute("DataRate", ns3.DataRateValue(ns3.DataRate("100kbps")))
- onOffHelper.SetAttribute("OnTime", ns3.RandomVariableValue(ns3.ConstantVariable(1)))
- onOffHelper.SetAttribute("OffTime", ns3.RandomVariableValue(ns3.ConstantVariable(0)))
+ onOffHelper.SetAttribute("DataRate", ns3.DataRateValue(ns3.DataRate("101.01010101kbps")))
+ onOffHelper.SetAttribute("OnTime", ns3.RandomVariableValue(ns3.ConstantVariable(0.9)))
+ onOffHelper.SetAttribute("OffTime", ns3.RandomVariableValue(ns3.UniformVariable(0, 0.02)))
nodes = []
for yi in range(num_nodes_side):
@@ -141,8 +148,6 @@
mobility.SetPosition(ns3.Vector(xi*DISTANCE, yi*DISTANCE, 0))
node.AggregateObject(mobility)
- node_main_address = None
-
if xi > 0:
node_left = nodes[yi][xi-1]
devices = p2p.Install(ns3.NodeContainer(ns3.NodeContainer(node), ns3.NodeContainer(node_left)))
@@ -157,21 +162,35 @@
return node.GetObject(ns3.Ipv4.GetTypeId()).GetAddress(1)
- for yi, nodes_row in enumerate(nodes):
- for xi, node in enumerate(nodes_row):
- olsrHelper.Install(ns3.NodeContainer(node))
- destaddr = get_node_address(nodes[(yi-1)%num_nodes_side][(xi-1)%num_nodes_side])
+ # -- compute the static routes --
+ ns3.GlobalRouteManager.PopulateRoutingTables()
+
+ # -- create the flows --
+ for yi in xrange(num_nodes_side):
+ for xi in xrange(num_nodes_side-flow_hops):
+ #olsrHelper.Install(ns3.NodeContainer(node))
+
+ # flow from node (yi, xi) to (yi, xi+flow_hops)
+ destaddr = get_node_address(nodes[yi][xi+flow_hops])
onOffHelper.SetAttribute("Remote", ns3.AddressValue(ns3.InetSocketAddress(destaddr, port)))
- app = onOffHelper.Install(ns3.NodeContainer(node))
- app.Start(ns3.Seconds(ns3.UniformVariable(20, 30).GetValue()))
+ app = onOffHelper.Install(ns3.NodeContainer(nodes[yi][xi]))
+ app.Start(ns3.Seconds(0))
+ # flow from node (yi, xi+flow_hops) to (yi, xi)
+ destaddr = get_node_address(nodes[yi][xi])
+ onOffHelper.SetAttribute("Remote", ns3.AddressValue(ns3.InetSocketAddress(destaddr, port)))
+ app = onOffHelper.Install(ns3.NodeContainer(nodes[yi][xi+flow_hops]))
+ app.Start(ns3.Seconds(0))
+
+ # -- create the flow monitor, if requested --
if enable_monitor:
flowmon_helper = ns3.FlowMonitorHelper()
flowmon_helper.SetMonitorAttribute("StartTime", ns3.TimeValue(ns3.Seconds(31)))
monitor = flowmon_helper.InstallAll()
classifier = flowmon_helper.GetClassifier()
+ # -- run the simulation --
ns3.Simulator.Stop(ns3.Seconds(float(getattr(cmd, "StopTime", "100"))))
if cmd.Viz is not None:
import visualizer
@@ -179,6 +198,8 @@
else:
ns3.Simulator.Run()
+ # -- output the results --
+
def print_stats(os, monitor, classifier):
def print_flow_stats(os, st):
print >> os, " Tx Bytes: ", st.txBytes