A Discrete-Event Network Simulator
API
olsr.py
Go to the documentation of this file.
1 import gtk
2 
3 import ns.core
4 import ns.network
5 import ns.internet
6 import ns.olsr
7 
8 from visualizer.base import InformationWindow
9 
11  (
12  COLUMN_DESTINATION,
13  COLUMN_NEXT_HOP,
14  COLUMN_INTERFACE,
15  COLUMN_NUM_HOPS,
16  ) = range(4)
17 
18  def __init__(self, visualizer, node_index):
19  InformationWindow.__init__(self)
20  self.win = gtk.Dialog(parent=visualizer.window,
21  flags=gtk.DIALOG_DESTROY_WITH_PARENT|gtk.DIALOG_NO_SEPARATOR,
22  buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE))
23  self.win.set_default_size(gtk.gdk.screen_width()/2, gtk.gdk.screen_height()/2)
24  self.win.connect("response", self._response_cb)
25  self.win.set_title("OLSR routing table for node %i" % node_index)
26  self.visualizer = visualizer
27  self.node_index = node_index
28 
29  self.table_model = gtk.ListStore(str, str, str, int)
30 
31  treeview = gtk.TreeView(self.table_model)
32  treeview.show()
33  sw = gtk.ScrolledWindow()
34  sw.set_properties(hscrollbar_policy=gtk.POLICY_AUTOMATIC,
35  vscrollbar_policy=gtk.POLICY_AUTOMATIC)
36  sw.show()
37  sw.add(treeview)
38  self.win.vbox.add(sw)
39 
40  # Dest.
41  column = gtk.TreeViewColumn('Destination', gtk.CellRendererText(),
42  text=self.COLUMN_DESTINATION)
43  treeview.append_column(column)
44 
45  # Next hop
46  column = gtk.TreeViewColumn('Next hop', gtk.CellRendererText(),
47  text=self.COLUMN_NEXT_HOP)
48  treeview.append_column(column)
49 
50  # Interface
51  column = gtk.TreeViewColumn('Interface', gtk.CellRendererText(),
52  text=self.COLUMN_INTERFACE)
53  treeview.append_column(column)
54 
55  # Num. Hops
56  column = gtk.TreeViewColumn('Num. Hops', gtk.CellRendererText(),
57  text=self.COLUMN_NUM_HOPS)
58  treeview.append_column(column)
59 
60  self.visualizer.add_information_window(self)
61  self.win.show()
62 
63  def _response_cb(self, win, response):
64  self.win.destroy()
65  self.visualizer.remove_information_window(self)
66 
67  def update(self):
68  node = ns.network.NodeList.GetNode(self.node_index)
69  olsr = node.GetObject(ns.olsr.olsr.RoutingProtocol.GetTypeId())
70  ipv4 = node.GetObject(ns.internet.Ipv4.GetTypeId())
71  if olsr is None:
72  return
73  self.table_model.clear()
74  for route in olsr.GetRoutingTableEntries():
75  tree_iter = self.table_model.append()
76  netdevice = ipv4.GetNetDevice(route.interface)
77  if netdevice is None:
78  interface_name = 'lo'
79  else:
80  interface_name = ns.core.Names.FindName(netdevice)
81  if not interface_name:
82  interface_name = "(interface %i)" % route.interface
83  self.table_model.set(tree_iter,
84  self.COLUMN_DESTINATION, str(route.destAddr),
85  self.COLUMN_NEXT_HOP, str(route.nextAddr),
86  self.COLUMN_INTERFACE, interface_name,
87  self.COLUMN_NUM_HOPS, route.distance)
88 
89 
90 def populate_node_menu(viz, node, menu):
91  ns3_node = ns.network.NodeList.GetNode(node.node_index)
92  olsr = ns3_node.GetObject(ns.olsr.olsr.RoutingProtocol.GetTypeId())
93  if olsr is None:
94  print "No OLSR"
95  return
96 
97  menu_item = gtk.MenuItem("Show OLSR Routing Table")
98  menu_item.show()
99 
100  def _show_ipv4_routing_table(dummy_menu_item):
101  ShowOlsrRoutingTable(viz, node.node_index)
102 
103  menu_item.connect("activate", _show_ipv4_routing_table)
104  menu.add(menu_item)
105 
106 def register(viz):
107  viz.connect("populate-node-menu", populate_node_menu)
def update(self)
Definition: olsr.py:67
def register(viz)
Definition: olsr.py:106
def __init__(self, visualizer, node_index)
Definition: olsr.py:18
def _response_cb(self, win, response)
Definition: olsr.py:63
def populate_node_menu(viz, node, menu)
Definition: olsr.py:90