utils/flowmon/flowmon-bench.py
changeset 3974 e07e80606b90
parent 3949 6304adcb5326
child 3976 d875e681c296
--- 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