src/flow-monitor/examples/wifi-olsr-flowmon.py
changeset 7106 2939fecb7029
parent 6939 9fe35f79fd8f
child 7291 d39c09dbc3d9
equal deleted inserted replaced
7105:b8c76878fbdf 7106:2939fecb7029
    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