Update pyviz to the new modular bindings namespace

This commit is contained in:
Gustavo J. A. M. Carneiro
2011-09-01 18:32:23 +01:00
parent 0cc663db91
commit dbf390ad90
8 changed files with 107 additions and 77 deletions

View File

@@ -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.

View File

@@ -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):

View File

@@ -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 = ['<b><u>Node %i</u></b>' % 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(' <b>Mobility Model</b>: %s' % mob.GetInstanceTypeId().GetName())
@@ -170,7 +175,7 @@ class Node(PyVizObject):
lines.append('')
lines.append(' <u>NetDevice %i:</u>' % devI)
dev = ns3_node.GetDevice(devI)
name = ns3.Names.FindName(dev)
name = ns.core.Names.FindName(dev)
if name:
lines.append(' <b>Name:</b> %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()

View File

@@ -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,

View File

@@ -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,

View File

@@ -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

View File

@@ -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()

View File

@@ -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