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