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