OLD | NEW |
(Empty) | |
| 1 import gtk |
| 2 import ns3 |
| 3 from visualizer.base import InformationWindow |
| 4 |
| 5 class ShowIpv4RoutingTable(InformationWindow): |
| 6 ( |
| 7 COLUMN_DESTINATION, |
| 8 COLUMN_NEXT_HOP, |
| 9 COLUMN_INTERFACE, |
| 10 ) = range(3) |
| 11 |
| 12 def __init__(self, visualizer, node_index): |
| 13 InformationWindow.__init__(self) |
| 14 self.win = gtk.Dialog(parent=visualizer.window, |
| 15 flags=gtk.DIALOG_DESTROY_WITH_PARENT|gtk.DIALOG_NO
_SEPARATOR, |
| 16 buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)) |
| 17 self.win.connect("response", self._response_cb) |
| 18 self.win.set_title("IPv4 routing table for node %i" % node_index)· |
| 19 self.visualizer = visualizer |
| 20 self.node_index = node_index |
| 21 |
| 22 self.table_model = gtk.ListStore(str, str, str) |
| 23 |
| 24 treeview = gtk.TreeView(self.table_model) |
| 25 treeview.show() |
| 26 self.win.vbox.add(treeview) |
| 27 ········ |
| 28 # Dest. |
| 29 column = gtk.TreeViewColumn('Destination', gtk.CellRendererText(), |
| 30 text=self.COLUMN_DESTINATION) |
| 31 treeview.append_column(column) |
| 32 |
| 33 # Next hop |
| 34 column = gtk.TreeViewColumn('Next hop', gtk.CellRendererText(), |
| 35 text=self.COLUMN_NEXT_HOP) |
| 36 treeview.append_column(column) |
| 37 |
| 38 # Interface |
| 39 column = gtk.TreeViewColumn('Interface', gtk.CellRendererText(), |
| 40 text=self.COLUMN_INTERFACE) |
| 41 treeview.append_column(column) |
| 42 |
| 43 self.visualizer.add_information_window(self) |
| 44 self.win.show() |
| 45 |
| 46 def _response_cb(self, win, response): |
| 47 self.win.destroy() |
| 48 self.visualizer.remove_information_window(self) |
| 49 ···· |
| 50 def update(self): |
| 51 node = ns3.NodeList.GetNode(self.node_index) |
| 52 ipv4 = node.GetObject(ns3.Ipv4.GetTypeId()) |
| 53 routing = ipv4.GetRoutingProtocol() |
| 54 if routing is None: |
| 55 return |
| 56 if isinstance(routing, ns3.Ipv4StaticRouting): |
| 57 ipv4_routing = routing |
| 58 elif isinstance(routing, ns3.Ipv4ListRouting): |
| 59 for rI in range(routing.GetNRoutingProtocols()): |
| 60 ipv4_routing, prio = routing.GetRoutingProtocol(rI) |
| 61 if isinstance(ipv4_routing, ns3.Ipv4StaticRouting): |
| 62 break |
| 63 else: |
| 64 return |
| 65 else: |
| 66 return |
| 67 self.table_model.clear() |
| 68 for routeI in range(ipv4_routing.GetNRoutes()): |
| 69 route = ipv4_routing.GetRoute(routeI) |
| 70 tree_iter = self.table_model.append() |
| 71 netdevice = ipv4.GetNetDevice(route.GetInterface()) |
| 72 if netdevice is None: |
| 73 interface_name = 'lo' |
| 74 else: |
| 75 interface_name = ns3.Names.FindName(netdevice) |
| 76 if not interface_name: |
| 77 interface_name = "(interface %i)" % route.GetInterface() |
| 78 self.table_model.set(tree_iter, |
| 79 self.COLUMN_DESTINATION, str(route.GetDest()), |
| 80 self.COLUMN_NEXT_HOP, str(route.GetGateway()), |
| 81 self.COLUMN_INTERFACE, interface_name) |
| 82 |
| 83 |
| 84 def populate_node_menu(viz, node, menu): |
| 85 menu_item = gtk.MenuItem("Show IPv4 Routing Table") |
| 86 menu_item.show() |
| 87 |
| 88 def _show_ipv4_routing_table(dummy_menu_item): |
| 89 ShowIpv4RoutingTable(viz, node.node_index) |
| 90 |
| 91 menu_item.connect("activate", _show_ipv4_routing_table) |
| 92 menu.add(menu_item) |
| 93 |
| 94 def register(viz): |
| 95 viz.connect("populate-node-menu", populate_node_menu) |
OLD | NEW |