A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
olsr.py
Go to the documentation of this file.
1from gi.repository import Gtk
2from gi.repository import Gdk
3
4from 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.win = Gtk.Dialog(parent=visualizer.window,
32 flags=Gtk.DialogFlags.DESTROY_WITH_PARENT,
33 buttons=("_Close", Gtk.ResponseType.CLOSE))
34 self.win.set_default_size(Gdk.Screen.width()/2, Gdk.Screen.height()/2)
35 self.win.connect("response", self._response_cb)
36 self.win.set_title("OLSR routing table for node %i" % node_index)
37 self.visualizer = visualizer
38 self.node_index = node_index
39
40 self.table_model = Gtk.ListStore(str, str, str, int)
41
42 treeview = Gtk.TreeView(self.table_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.win.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.visualizer.add_information_window(self)
72 self.win.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.win.destroy()
83 self.visualizer.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_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_model.clear()
98 for route in olsr.GetRoutingTableEntries():
99 tree_iter = self.table_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_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
114def 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
129def 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