A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
base.py
1 import ns.point_to_point
2 import ns.csma
3 import ns.wifi
4 import ns.bridge
5 import ns.internet
6 import ns.mesh
7 import ns.wimax
8 import ns.wimax
9 import ns.lte
10 
11 import gobject
12 import os.path
13 import sys
14 
15 PIXELS_PER_METER = 3.0 # pixels-per-meter, at 100% zoom level
16 
17 class PyVizObject(gobject.GObject):
18  __gtype_name__ = "PyVizObject"
19 
20  def tooltip_query(self, tooltip):
21  tooltip.set_text("TODO: tooltip for %r" % self)
22 
24  pass
25 
26 
27 class InformationWindow(object):
28  def update(self):
29  raise NotImplementedError
30 
31 class NetDeviceTraits(object):
32  def __init__(self, is_wireless=None, is_virtual=False):
33  assert is_virtual or is_wireless is not None
34  self.is_wireless = is_wireless
35  self.is_virtual = is_virtual
36 
37 netdevice_traits = {
38  ns.point_to_point.PointToPointNetDevice: NetDeviceTraits(is_wireless=False),
39  ns.csma.CsmaNetDevice: NetDeviceTraits(is_wireless=False),
40  ns.wifi.WifiNetDevice: NetDeviceTraits(is_wireless=True),
41  ns.bridge.BridgeNetDevice: NetDeviceTraits(is_virtual=True),
42  ns.internet.LoopbackNetDevice: NetDeviceTraits(is_virtual=True, is_wireless=False),
43  ns.mesh.MeshPointDevice: NetDeviceTraits(is_virtual=True),
44  ns.wimax.SubscriberStationNetDevice: NetDeviceTraits(is_wireless=True),
45  ns.wimax.BaseStationNetDevice: NetDeviceTraits(is_wireless=True),
46  ns.lte.LteUeNetDevice: NetDeviceTraits(is_wireless=True),
47  ns.lte.LteEnbNetDevice: NetDeviceTraits(is_wireless=True),
48 }
49 
50 def lookup_netdevice_traits(class_type):
51  try:
52  return netdevice_traits[class_type]
53  except KeyError:
54  sys.stderr.write("WARNING: no NetDeviceTraits registered for device type %r; "
55  "I will assume this is a non-virtual wireless device, "
56  "but you should edit %r, variable 'netdevice_traits',"
57  " to make sure.\n" % (class_type.__name__, __file__))
58  t = NetDeviceTraits(is_virtual=False, is_wireless=True)
59  netdevice_traits[class_type] = t
60  return t
61 
62 def transform_distance_simulation_to_canvas(d):
63  return d*PIXELS_PER_METER
64 
65 def transform_point_simulation_to_canvas(x, y):
66  return x*PIXELS_PER_METER, y*PIXELS_PER_METER
67 
68 def transform_distance_canvas_to_simulation(d):
69  return d/PIXELS_PER_METER
70 
71 def transform_point_canvas_to_simulation(x, y):
72  return x/PIXELS_PER_METER, y/PIXELS_PER_METER
73 
74 
75 
76 
77 plugins = []
78 plugin_modules = {}
79 
80 def register_plugin(plugin_init_func, plugin_name=None, plugin_module=None):
81  """
82  Register a plugin.
83 
84  @param plugin: a callable object that will be invoked whenever a
85  Visualizer object is created, like this: plugin(visualizer)
86  """
87  assert callable(plugin_init_func)
88  plugins.append(plugin_init_func)
89  if plugin_module is not None:
90  plugin_modules[plugin_name] = plugin_module
91 
92 plugins_loaded = False
93 def load_plugins():
94  global plugins_loaded
95  if plugins_loaded:
96  return
97  plugins_loaded = True
98  plugins_dir = os.path.join(os.path.dirname(__file__), 'plugins')
99  old_path = list(sys.path)
100  sys.path.insert(0, plugins_dir)
101  for filename in os.listdir(plugins_dir):
102  name, ext = os.path.splitext(filename)
103  if ext != '.py':
104  continue
105  try:
106  plugin_module = __import__(name)
107  except ImportError, ex:
108  print >> sys.stderr, "Could not load plugin %r: %s" % (filename, str(ex))
109  continue
110  try:
111  plugin_func = plugin_module.register
112  except AttributeError:
113  print >> sys.stderr, "Plugin %r has no 'register' function" % name
114  else:
115  #print >> sys.stderr, "Plugin %r registered" % name
116  register_plugin(plugin_func, name, plugin_module)
117  sys.path = old_path
118