diff --git a/examples/wireless/wifi-ap.py b/examples/wireless/wifi-ap.py index fe67d460b..271c2ff53 100644 --- a/examples/wireless/wifi-ap.py +++ b/examples/wireless/wifi-ap.py @@ -95,6 +95,8 @@ def AdvancePosition(node): def main(argv): + ns.core.CommandLine().Parse(argv) + ns.network.Packet.EnablePrinting(); # enable rts cts all the time. diff --git a/src/visualizer/visualizer/base.py b/src/visualizer/visualizer/base.py index acbe3e28b..9e81ebdbd 100644 --- a/src/visualizer/visualizer/base.py +++ b/src/visualizer/visualizer/base.py @@ -1,4 +1,12 @@ -import ns3 +import ns.point_to_point +import ns.csma +import ns.wifi +import ns.bridge +import ns.internet +import ns.mesh +import ns.wimax +import ns.wimax + import gobject import os.path import sys @@ -26,14 +34,14 @@ class NetDeviceTraits(object): self.is_virtual = is_virtual netdevice_traits = { - ns3.PointToPointNetDevice: NetDeviceTraits(is_wireless=False), - ns3.CsmaNetDevice: NetDeviceTraits(is_wireless=False), - ns3.WifiNetDevice: NetDeviceTraits(is_wireless=True), - ns3.BridgeNetDevice: NetDeviceTraits(is_virtual=True), - ns3.LoopbackNetDevice: NetDeviceTraits(is_virtual=True, is_wireless=False), - ns3.MeshPointDevice: NetDeviceTraits(is_virtual=True), - ns3.SubscriberStationNetDevice: NetDeviceTraits(is_wireless=True), - ns3.BaseStationNetDevice: NetDeviceTraits(is_wireless=True), + ns.point_to_point.PointToPointNetDevice: NetDeviceTraits(is_wireless=False), + ns.csma.CsmaNetDevice: NetDeviceTraits(is_wireless=False), + ns.wifi.WifiNetDevice: NetDeviceTraits(is_wireless=True), + ns.bridge.BridgeNetDevice: NetDeviceTraits(is_virtual=True), + ns.internet.LoopbackNetDevice: NetDeviceTraits(is_virtual=True, is_wireless=False), + ns.mesh.MeshPointDevice: NetDeviceTraits(is_virtual=True), + ns.wimax.SubscriberStationNetDevice: NetDeviceTraits(is_wireless=True), + ns.wimax.BaseStationNetDevice: NetDeviceTraits(is_wireless=True), } def lookup_netdevice_traits(class_type): diff --git a/src/visualizer/visualizer/core.py b/src/visualizer/visualizer/core.py index 63a91444f..2eed9bd4c 100644 --- a/src/visualizer/visualizer/core.py +++ b/src/visualizer/visualizer/core.py @@ -20,7 +20,12 @@ else: SHELL_FONT = "Luxi Mono 10" -import ns3 +import ns.core +import ns.network +import ns.visualizer +import ns.internet +import ns.mobility + import math import os import sys @@ -154,15 +159,15 @@ class Node(PyVizObject): def tooltip_query(self, tooltip): self.visualizer.simulation.lock.acquire() try: - ns3_node = ns3.NodeList.GetNode(self.node_index) - ipv4 = ns3_node.GetObject(ns3.Ipv4.GetTypeId()) - ipv6 = ns3_node.GetObject(ns3.Ipv6.GetTypeId()) + ns3_node = ns.network.NodeList.GetNode(self.node_index) + ipv4 = ns3_node.GetObject(ns.internet.Ipv4.GetTypeId()) + ipv6 = ns3_node.GetObject(ns.internet.Ipv6.GetTypeId()) lines = ['Node %i' % self.node_index] lines.append('') self.emit("query-extra-tooltip-info", lines) - mob = ns3_node.GetObject(ns3.MobilityModel.GetTypeId()) + mob = ns3_node.GetObject(ns.mobility.MobilityModel.GetTypeId()) if mob is not None: lines.append(' Mobility Model: %s' % mob.GetInstanceTypeId().GetName()) @@ -170,7 +175,7 @@ class Node(PyVizObject): lines.append('') lines.append(' NetDevice %i:' % devI) dev = ns3_node.GetDevice(devI) - name = ns3.Names.FindName(dev) + name = ns.core.Names.FindName(dev) if name: lines.append(' Name: %s' % name) devname = dev.GetInstanceTypeId().GetName() @@ -296,8 +301,8 @@ class Node(PyVizObject): @property def has_mobility(self): if self._has_mobility is None: - node = ns3.NodeList.GetNode(self.node_index) - mobility = node.GetObject(ns3.MobilityModel.GetTypeId()) + node = ns.network.NodeList.GetNode(self.node_index) + mobility = node.GetObject(ns.mobility.MobilityModel.GetTypeId()) self._has_mobility = (mobility is not None) return self._has_mobility @@ -352,7 +357,7 @@ class SimulationThread(threading.Thread): self.go.clear() self.target_time = 0 # in seconds self.quit = False - self.sim_helper = ns3.PyViz() + self.sim_helper = ns.visualizer.PyViz() self.pause_messages = [] def set_nodes_of_interest(self, nodes): @@ -374,13 +379,13 @@ class SimulationThread(threading.Thread): self.lock.acquire() try: if 0: - if ns3.Simulator.IsFinished(): + if ns3.core.Simulator.IsFinished(): self.viz.play_button.set_sensitive(False) break #print "sim: Current time is %f; Run until: %f" % (ns3.Simulator.Now ().GetSeconds (), self.target_time) #if ns3.Simulator.Now ().GetSeconds () > self.target_time: # print "skipping, model is ahead of view!" - self.sim_helper.SimulatorRunUntil(ns3.Seconds(self.target_time)) + self.sim_helper.SimulatorRunUntil(ns.core.Seconds(self.target_time)) #print "sim: Run until ended at current time: ", ns3.Simulator.Now ().GetSeconds () self.pause_messages.extend(self.sim_helper.GetPauseMessages()) gobject.idle_add(self.viz.update_model, priority=PRIORITY_UPDATE_MODEL) @@ -462,7 +467,7 @@ class Visualizer(gobject.GObject): assert isinstance(mode, ShowTransmissionsMode) self._show_transmissions_mode = mode if self._show_transmissions_mode == ShowTransmissionsMode.ALL: - self.simulation.set_nodes_of_interest(range(ns3.NodeList.GetNNodes())) + self.simulation.set_nodes_of_interest(range(ns.network.NodeList.GetNNodes())) elif self._show_transmissions_mode == ShowTransmissionsMode.NONE: self.simulation.set_nodes_of_interest([]) elif self._show_transmissions_mode == ShowTransmissionsMode.SELECTED: @@ -738,19 +743,19 @@ class Visualizer(gobject.GObject): self.window.show() def scan_topology(self): - print "scanning topology: %i nodes..." % (ns3.NodeList.GetNNodes(),) + print "scanning topology: %i nodes..." % (ns.network.NodeList.GetNNodes(),) graph = pygraphviz.AGraph() seen_nodes = 0 - for nodeI in range(ns3.NodeList.GetNNodes()): + for nodeI in range(ns.network.NodeList.GetNNodes()): seen_nodes += 1 if seen_nodes == 100: - print "scan topology... %i nodes visited (%.1f%%)" % (nodeI, 100*nodeI/ns3.NodeList.GetNNodes()) + print "scan topology... %i nodes visited (%.1f%%)" % (nodeI, 100*nodeI/ns.network.NodeList.GetNNodes()) seen_nodes = 0 - node = ns3.NodeList.GetNode(nodeI) + node = ns.network.NodeList.GetNode(nodeI) node_name = "Node %i" % nodeI node_view = self.get_node(nodeI) - mobility = node.GetObject(ns3.MobilityModel.GetTypeId()) + mobility = node.GetObject(ns.mobility.MobilityModel.GetTypeId()) if mobility is not None: node_view.set_color("red") pos = mobility.GetPosition() @@ -840,7 +845,7 @@ class Visualizer(gobject.GObject): def update_view(self): #print "update_view" - self.time_label.set_text("Time: %f s" % ns3.Simulator.Now().GetSeconds()) + self.time_label.set_text("Time: %f s" % ns.core.Simulator.Now().GetSeconds()) self._update_node_positions() @@ -856,8 +861,8 @@ class Visualizer(gobject.GObject): def _update_node_positions(self): for node in self.nodes.itervalues(): if node.has_mobility: - ns3_node = ns3.NodeList.GetNode(node.node_index) - mobility = ns3_node.GetObject(ns3.MobilityModel.GetTypeId()) + ns3_node = ns.network.NodeList.GetNode(node.node_index) + mobility = ns3_node.GetObject(ns.mobility.MobilityModel.GetTypeId()) if mobility is not None: pos = mobility.GetPosition() x, y = transform_point_simulation_to_canvas(pos.x, pos.y) @@ -870,14 +875,14 @@ class Visualizer(gobject.GObject): vadj.value = py - vadj.page_size/2 def center_on_node(self, node): - if isinstance(node, ns3.Node): + if isinstance(node, ns.network.Node): node = self.nodes[node.GetId()] elif isinstance(node, (int, long)): node = self.nodes[node] elif isinstance(node, Node): pass else: - raise TypeError("expected int, viz.Node or ns3.Node, not %r" % node) + raise TypeError("expected int, viz.Node or ns.network.Node, not %r" % node) x, y = node.get_position() hadj = self._scrolled_window.get_hadjustment() @@ -913,7 +918,7 @@ class Visualizer(gobject.GObject): bounds_x1, bounds_y1 = self.canvas.convert_from_pixels(hadj.value, vadj.value) bounds_x2, bounds_y2 = self.canvas.convert_from_pixels(hadj.value + hadj.page_size, vadj.value + vadj.page_size) - pos1_x, pos1_y, pos2_x, pos2_y = ns3.PyViz.LineClipping(bounds_x1, bounds_y1, + pos1_x, pos1_y, pos2_x, pos2_y = ns.visualizer.PyViz.LineClipping(bounds_x1, bounds_y1, bounds_x2, bounds_y2, pos1_x, pos1_y, pos2_x, pos2_y) @@ -1059,7 +1064,7 @@ class Visualizer(gobject.GObject): self.simulation.pause_messages = [] try: self.update_view() - self.simulation.target_time = ns3.Simulator.Now ().GetSeconds () + self.sample_period + self.simulation.target_time = ns.core.Simulator.Now ().GetSeconds () + self.sample_period #print "view: target time set to %f" % self.simulation.target_time finally: self.simulation.lock.release() @@ -1209,8 +1214,8 @@ class Visualizer(gobject.GObject): def begin_node_drag(self, node): self.simulation.lock.acquire() try: - ns3_node = ns3.NodeList.GetNode(node.node_index) - mob = ns3_node.GetObject(ns3.MobilityModel.GetTypeId()) + ns3_node = ns.network.NodeList.GetNode(node.node_index) + mob = ns3_node.GetObject(ns.mobility.MobilityModel.GetTypeId()) if mob is None: return if self.node_drag_state is not None: @@ -1226,8 +1231,8 @@ class Visualizer(gobject.GObject): def node_drag_motion(self, item, targe_item, event, node): self.simulation.lock.acquire() try: - ns3_node = ns3.NodeList.GetNode(node.node_index) - mob = ns3_node.GetObject(ns3.MobilityModel.GetTypeId()) + ns3_node = ns.network.NodeList.GetNode(node.node_index) + mob = ns3_node.GetObject(ns.mobility.MobilityModel.GetTypeId()) if mob is None: return False if self.node_drag_state is None: @@ -1271,14 +1276,14 @@ class Visualizer(gobject.GObject): else: self.simulation.lock.acquire() try: - ns3_node = ns3.NodeList.GetNode(self.selected_node.node_index) + ns3_node = ns.network.NodeList.GetNode(self.selected_node.node_index) finally: self.simulation.lock.release() __IPYTHON__.user_ns['selected_node'] = ns3_node def select_node(self, node): - if isinstance(node, ns3.Node): + if isinstance(node, ns.network.Node): node = self.nodes[node.GetId()] elif isinstance(node, (int, long)): node = self.nodes[node] @@ -1287,7 +1292,7 @@ class Visualizer(gobject.GObject): elif node is None: pass else: - raise TypeError("expected None, int, viz.Node or ns3.Node, not %r" % node) + raise TypeError("expected None, int, viz.Node or ns.network.Node, not %r" % node) if node is self.selected_node: return @@ -1414,7 +1419,7 @@ class Visualizer(gobject.GObject): surface.finish() def set_follow_node(self, node): - if isinstance(node, ns3.Node): + if isinstance(node, ns.network.Node): node = self.nodes[node.GetId()] self.follow_node = node @@ -1473,11 +1478,11 @@ def start(): if _import_error is not None: import sys print >> sys.stderr, "No visualization support (%s)." % (str(_import_error),) - ns3.Simulator.Run() + ns.core.Simulator.Run() return load_plugins() viz = Visualizer() for hook, args in initialization_hooks: gobject.idle_add(hook, viz, *args) - ns3.Packet.EnablePrinting() + ns.network.Packet.EnablePrinting() viz.start() diff --git a/src/visualizer/visualizer/plugins/interface_statistics.py b/src/visualizer/visualizer/plugins/interface_statistics.py index 0124ab8c3..1cb0ef573 100644 --- a/src/visualizer/visualizer/plugins/interface_statistics.py +++ b/src/visualizer/visualizer/plugins/interface_statistics.py @@ -1,5 +1,6 @@ import gtk -import ns3 +import ns.core +import ns.network from visualizer.base import InformationWindow NODE_STATISTICS_MEMORY = 10 @@ -125,13 +126,13 @@ class ShowInterfaceStatistics(InformationWindow): self.visualizer.remove_information_window(self) def update(self): - node = ns3.NodeList.GetNode(self.node_index) + node = ns.network.NodeList.GetNode(self.node_index) stats_list = self.statistics_collector.get_interface_statistics(self.node_index) self.table_model.clear() for iface, stats in enumerate(stats_list): tree_iter = self.table_model.append() netdevice = node.GetDevice(iface) - interface_name = ns3.Names.FindName(netdevice) + interface_name = ns.core.Names.FindName(netdevice) if not interface_name: interface_name = "(interface %i)" % iface self.table_model.set(tree_iter, diff --git a/src/visualizer/visualizer/plugins/ipv4_routing_table.py b/src/visualizer/visualizer/plugins/ipv4_routing_table.py index 91ed41f5e..134e7d795 100644 --- a/src/visualizer/visualizer/plugins/ipv4_routing_table.py +++ b/src/visualizer/visualizer/plugins/ipv4_routing_table.py @@ -1,5 +1,9 @@ import gtk -import ns3 + +import ns.core +import ns.network +import ns.internet + from visualizer.base import InformationWindow class ShowIpv4RoutingTable(InformationWindow): @@ -66,23 +70,23 @@ class ShowIpv4RoutingTable(InformationWindow): self.visualizer.remove_information_window(self) def update(self): - node = ns3.NodeList.GetNode(self.node_index) - ipv4 = node.GetObject(ns3.Ipv4.GetTypeId()) + node = ns.network.NodeList.GetNode(self.node_index) + ipv4 = node.GetObject(ns.internet.Ipv4.GetTypeId()) routing = ipv4.GetRoutingProtocol() if routing is None: return routing_protocols = [] # list of (protocol, type_string, priority) - if isinstance(routing, ns3.Ipv4StaticRouting): + if isinstance(routing, ns.internet.Ipv4StaticRouting): ipv4_routing = routing_protocols.append((routing, "static", 0)) - elif isinstance(routing, ns3.Ipv4ListRouting): + elif isinstance(routing, ns.internet.Ipv4ListRouting): list_routing = routing for rI in range(list_routing.GetNRoutingProtocols()): routing, prio = list_routing.GetRoutingProtocol(rI) - if isinstance(routing, ns3.Ipv4StaticRouting): + if isinstance(routing, ns.internet.Ipv4StaticRouting): routing_protocols.append((routing, "static", prio)) - elif isinstance(routing, ns3.Ipv4GlobalRouting): + elif isinstance(routing, ns.internet.Ipv4GlobalRouting): routing_protocols.append((routing, "global", prio)) if not routing_protocols: return @@ -96,7 +100,7 @@ class ShowIpv4RoutingTable(InformationWindow): if netdevice is None: interface_name = 'lo' else: - interface_name = ns3.Names.FindName(netdevice) + interface_name = ns.core.Names.FindName(netdevice) if not interface_name: interface_name = "(interface %i)" % route.GetInterface() self.table_model.set(tree_iter, diff --git a/src/visualizer/visualizer/plugins/olsr.py b/src/visualizer/visualizer/plugins/olsr.py index f74023417..b5752c8f3 100644 --- a/src/visualizer/visualizer/plugins/olsr.py +++ b/src/visualizer/visualizer/plugins/olsr.py @@ -1,5 +1,10 @@ import gtk -import ns3 + +import ns.core +import ns.network +import ns.internet +import ns.olsr + from visualizer.base import InformationWindow class ShowOlsrRoutingTable(InformationWindow): @@ -60,9 +65,9 @@ class ShowOlsrRoutingTable(InformationWindow): self.visualizer.remove_information_window(self) def update(self): - node = ns3.NodeList.GetNode(self.node_index) - olsr = node.GetObject(ns3.olsr.RoutingProtocol.GetTypeId()) - ipv4 = node.GetObject(ns3.Ipv4.GetTypeId()) + node = ns.network.NodeList.GetNode(self.node_index) + olsr = node.GetObject(ns.olsr.olsr.RoutingProtocol.GetTypeId()) + ipv4 = node.GetObject(ns.internet.Ipv4.GetTypeId()) if olsr is None: return self.table_model.clear() @@ -72,7 +77,7 @@ class ShowOlsrRoutingTable(InformationWindow): if netdevice is None: interface_name = 'lo' else: - interface_name = ns3.Names.FindName(netdevice) + interface_name = ns.core.Names.FindName(netdevice) if not interface_name: interface_name = "(interface %i)" % route.interface self.table_model.set(tree_iter, @@ -83,8 +88,8 @@ class ShowOlsrRoutingTable(InformationWindow): def populate_node_menu(viz, node, menu): - ns3_node = ns3.NodeList.GetNode(node.node_index) - olsr = ns3_node.GetObject(ns3.olsr.RoutingProtocol.GetTypeId()) + ns3_node = ns.network.NodeList.GetNode(node.node_index) + olsr = ns3_node.GetObject(ns.olsr.olsr.RoutingProtocol.GetTypeId()) if olsr is None: print "No OLSR" return diff --git a/src/visualizer/visualizer/plugins/show_last_packets.py b/src/visualizer/visualizer/plugins/show_last_packets.py index 78ae288cd..8971dfc18 100644 --- a/src/visualizer/visualizer/plugins/show_last_packets.py +++ b/src/visualizer/visualizer/plugins/show_last_packets.py @@ -1,6 +1,10 @@ import gobject import gtk -import ns3 + +import ns.core +import ns.network +import ns.visualizer + from visualizer.base import InformationWindow from visualizer.higcontainer import HIGContainer from kiwi.ui.objectlist import ObjectList, Column @@ -39,7 +43,7 @@ class ShowLastPackets(InformationWindow): if sample.device is None: interface_name = "(unknown)" else: - interface_name = ns3.Names.FindName(sample.device) + interface_name = ns.core.Names.FindName(sample.device) if not interface_name: interface_name = "(interface %i)" % sample.device.GetIfIndex() self.table_model.set(tree_iter, @@ -59,7 +63,7 @@ class ShowLastPackets(InformationWindow): self.win.set_title("Last packets for node %i" % node_index) self.visualizer = visualizer self.viz_node = visualizer.get_node(node_index) - self.node = ns3.NodeList.GetNode(node_index) + self.node = ns.network.NodeList.GetNode(node_index) def smart_expand(expander, vbox): if expander.get_expanded(): @@ -102,7 +106,7 @@ class ShowLastPackets(InformationWindow): # Packet Filter # - options - self.packet_capture_options = ns3.PyViz.PacketCaptureOptions() + self.packet_capture_options = ns.visualizer.PyViz.PacketCaptureOptions() self.packet_capture_options.numLastPackets = 100 packet_filter_vbox = gtk.VBox(False, 4) @@ -129,10 +133,10 @@ class ShowLastPackets(InformationWindow): self.packet_filter_list = [] # list of TypeIdConfig instances - Header = ns3.TypeId.LookupByName("ns3::Header") - Trailer = ns3.TypeId.LookupByName("ns3::Trailer") - for typeid_i in range(ns3.TypeId.GetRegisteredN()): - typeid = ns3.TypeId.GetRegistered(typeid_i) + Header = ns.core.TypeId.LookupByName("ns3::Header") + Trailer = ns.core.TypeId.LookupByName("ns3::Trailer") + for typeid_i in range(ns.core.TypeId.GetRegisteredN()): + typeid = ns.core.TypeId.GetRegistered(typeid_i) # check if this is a header or trailer subtype typeid_tmp = typeid type_is_good = False @@ -157,9 +161,9 @@ class ShowLastPackets(InformationWindow): def update_capture_options(): if self.op_AND_button.props.active: - self.packet_capture_options.mode = ns3.PyViz.PACKET_CAPTURE_FILTER_HEADERS_AND + self.packet_capture_options.mode = ns.visualizer.PyViz.PACKET_CAPTURE_FILTER_HEADERS_AND else: - self.packet_capture_options.mode = ns3.PyViz.PACKET_CAPTURE_FILTER_HEADERS_OR + self.packet_capture_options.mode = ns.visualizer.PyViz.PACKET_CAPTURE_FILTER_HEADERS_OR self.packet_capture_options.numLastPackets = 100 self.packet_capture_options.headers = [c.typeid for c in self.packet_filter_list if c.selected] self.visualizer.simulation.lock.acquire() diff --git a/src/visualizer/visualizer/plugins/wifi_intrastructure_link.py b/src/visualizer/visualizer/plugins/wifi_intrastructure_link.py index 866803af1..f48df8e8c 100644 --- a/src/visualizer/visualizer/plugins/wifi_intrastructure_link.py +++ b/src/visualizer/visualizer/plugins/wifi_intrastructure_link.py @@ -1,5 +1,6 @@ import math -import ns3 +import ns.wifi +import ns.network import goocanvas from visualizer.base import Link, transform_distance_canvas_to_simulation @@ -77,17 +78,17 @@ class WifiLinkMonitor(object): self.stations = [] for node in viz.nodes.itervalues(): - ns3_node = ns3.NodeList.GetNode(node.node_index) + ns3_node = ns.network.NodeList.GetNode(node.node_index) for devI in range(ns3_node.GetNDevices()): dev = ns3_node.GetDevice(devI) - if not isinstance(dev, ns3.WifiNetDevice): + if not isinstance(dev, ns.wifi.WifiNetDevice): continue wifi_mac = dev.GetMac() - if isinstance(wifi_mac, ns3.StaWifiMac): + if isinstance(wifi_mac, ns.wifi.StaWifiMac): wifi_link = WifiLink(viz.links_group, node, dev) self.stations.append((dev, node, wifi_link)) - elif isinstance(wifi_mac, ns3.ApWifiMac): - bssid = ns3.Mac48Address.ConvertFrom(dev.GetAddress()) + elif isinstance(wifi_mac, ns.wifi.ApWifiMac): + bssid = ns.network.Mac48Address.ConvertFrom(dev.GetAddress()) self.access_points[str(bssid)] = node #print "APs: ", self.access_points #print "STAs: ", self.stations