A Discrete-Event Network Simulator
API
olsr.py
Go to the documentation of this file.
1 from __future__ import print_function
2 from gi.repository import Gtk
3 from gi.repository import Gdk
4 
5 import ns.core
6 import ns.network
7 import ns.internet
8 import ns.olsr
9 
10 from visualizer.base import InformationWindow
11 
12 
14 
22  (
23  COLUMN_DESTINATION,
24  COLUMN_NEXT_HOP,
25  COLUMN_INTERFACE,
26  COLUMN_NUM_HOPS,
27  ) = range(4)
28 
29  def __init__(self, visualizer, node_index):
30  """!
31  Initializer
32  @param self this object
33  @param visualizer visualizer object
34  @param node_index the node index
35  @return none
36  """
37  InformationWindow.__init__(self)
38  self.win = Gtk.Dialog(parent=visualizer.window,
39  flags=Gtk.DialogFlags.DESTROY_WITH_PARENT|Gtk.DialogFlags.NO_SEPARATOR,
40  buttons=(Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE))
41  self.win.set_default_size(Gdk.Screen.width()/2, Gdk.Screen.height()/2)
42  self.win.connect("response", self._response_cb)
43  self.win.set_title("OLSR routing table for node %i" % node_index)
44  self.visualizer = visualizer
45  self.node_index = node_index
46 
47  self.table_model = Gtk.ListStore(str, str, str, int)
48 
49  treeview = Gtk.TreeView(self.table_model)
50  treeview.show()
51  sw = Gtk.ScrolledWindow()
52  sw.set_properties(hscrollbar_policy=Gtk.PolicyType.AUTOMATIC,
53  vscrollbar_policy=Gtk.PolicyType.AUTOMATIC)
54  sw.show()
55  sw.add(treeview)
56  self.win.vbox.add(sw)
57 
58  # Dest.
59  column = Gtk.TreeViewColumn('Destination', Gtk.CellRendererText(),
60  text=self.COLUMN_DESTINATION)
61  treeview.append_column(column)
62 
63  # Next hop
64  column = Gtk.TreeViewColumn('Next hop', Gtk.CellRendererText(),
65  text=self.COLUMN_NEXT_HOP)
66  treeview.append_column(column)
67 
68  # Interface
69  column = Gtk.TreeViewColumn('Interface', Gtk.CellRendererText(),
70  text=self.COLUMN_INTERFACE)
71  treeview.append_column(column)
72 
73  # Num. Hops
74  column = Gtk.TreeViewColumn('Num. Hops', Gtk.CellRendererText(),
75  text=self.COLUMN_NUM_HOPS)
76  treeview.append_column(column)
77 
78  self.visualizer.add_information_window(self)
79  self.win.show()
80 
81  def _response_cb(self, win, response):
82  """!
83  Initializer
84  @param self this object
85  @param win the window
86  @param response the response
87  @return none
88  """
89  self.win.destroy()
90  self.visualizer.remove_information_window(self)
91 
92  def update(self):
93  """!
94  Update function
95  @param self this object
96  @return none
97  """
98  node = ns.network.NodeList.GetNode(self.node_index)
99  olsr = node.GetObject(ns.olsr.olsr.RoutingProtocol.GetTypeId())
100  ipv4 = node.GetObject(ns.internet.Ipv4.GetTypeId())
101  if olsr is None:
102  return
103  self.table_model.clear()
104  for route in olsr.GetRoutingTableEntries():
105  tree_iter = self.table_model.append()
106  netdevice = ipv4.GetNetDevice(route.interface)
107  if netdevice is None:
108  interface_name = 'lo'
109  else:
110  interface_name = ns.core.Names.FindName(netdevice)
111  if not interface_name:
112  interface_name = "(interface %i)" % route.interface
113  self.table_model.set(tree_iter,
114  self.COLUMN_DESTINATION, str(route.destAddr),
115  self.COLUMN_NEXT_HOP, str(route.nextAddr),
116  self.COLUMN_INTERFACE, interface_name,
117  self.COLUMN_NUM_HOPS, route.distance)
118 
119 
120 def populate_node_menu(viz, node, menu):
121  ns3_node = ns.network.NodeList.GetNode(node.node_index)
122  olsr = ns3_node.GetObject(ns.olsr.olsr.RoutingProtocol.GetTypeId())
123  if olsr is None:
124  print("No OLSR")
125  return
126 
127  menu_item = Gtk.MenuItem("Show OLSR Routing Table")
128  menu_item.show()
129 
130  def _show_ipv4_routing_table(dummy_menu_item):
131  ShowOlsrRoutingTable(viz, node.node_index)
132 
133  menu_item.connect("activate", _show_ipv4_routing_table)
134  menu.add(menu_item)
135 
136 def register(viz):
137  viz.connect("populate-node-menu", populate_node_menu)
def update(self)
Update function.
Definition: olsr.py:92
def register(viz)
Definition: olsr.py:136
table_model
table model
Definition: olsr.py:47
visualizer
visualizer
Definition: olsr.py:44
def __init__(self, visualizer, node_index)
Initializer.
Definition: olsr.py:29
node_index
node index
Definition: olsr.py:45
def _response_cb(self, win, response)
Initializer.
Definition: olsr.py:81
ShowOlsrRoutingTable class.
Definition: olsr.py:13
InformationWindow class.
Definition: base.py:35
def populate_node_menu(viz, node, menu)
Definition: olsr.py:120