Adding necessary patches to run NDN module
diff --git a/patches/0004-visualizer-Adding-plugin-to-display-a-CCNx-FIB-state.patch b/patches/0004-visualizer-Adding-plugin-to-display-a-CCNx-FIB-state.patch
new file mode 100644
index 0000000..450c374
--- /dev/null
+++ b/patches/0004-visualizer-Adding-plugin-to-display-a-CCNx-FIB-state.patch
@@ -0,0 +1,108 @@
+From 84d6db685c4ee5cbce89b4424c68f5d40c2b976b Mon Sep 17 00:00:00 2001
+From: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+Date: Wed, 29 Feb 2012 16:59:59 -0800
+Subject: [PATCH] visualizer: Adding plugin to display a CCNx FIB state
+
+---
+ src/visualizer/visualizer/plugins/ccnx_fib.py | 89 +++++++++++++++++++++++++
+ 1 file changed, 89 insertions(+)
+ create mode 100644 src/visualizer/visualizer/plugins/ccnx_fib.py
+
+diff --git a/src/visualizer/visualizer/plugins/ccnx_fib.py b/src/visualizer/visualizer/plugins/ccnx_fib.py
+new file mode 100644
+index 0000000..3f09212
+--- /dev/null
++++ b/src/visualizer/visualizer/plugins/ccnx_fib.py
+@@ -0,0 +1,89 @@
++import gtk
++
++import ns.core
++import ns.network
++import ns.internet
++import ns.NDNabstraction
++
++from visualizer.base import InformationWindow
++
++class ShowCcnxFib(InformationWindow):
++ (
++ COLUMN_PREFIX,
++ COLUMN_FACE
++ ) = range(2)
++
++ def __init__(self, visualizer, node_index):
++ InformationWindow.__init__(self)
++ self.win = gtk.Dialog(parent=visualizer.window,
++ flags=gtk.DIALOG_DESTROY_WITH_PARENT|gtk.DIALOG_NO_SEPARATOR,
++ buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE))
++ self.win.connect("response", self._response_cb)
++
++ self.node = ns.network.NodeList.GetNode (node_index)
++ node_name = ns.core.Names.FindName (self.node)
++
++ title = "CCNx FIB for node %i" % node_index
++ if len(node_name) != 0:
++ title += " (" + str(node_name) + ")"
++
++ self.win.set_title (title)
++ self.visualizer = visualizer
++ self.node_index = node_index
++
++ self.table_model = gtk.ListStore(str, str, int)
++
++ treeview = gtk.TreeView(self.table_model)
++ treeview.show()
++ sw = gtk.ScrolledWindow()
++ sw.set_properties(hscrollbar_policy=gtk.POLICY_AUTOMATIC,
++ vscrollbar_policy=gtk.POLICY_AUTOMATIC)
++ sw.show()
++ sw.add(treeview)
++ self.win.vbox.add(sw)
++ self.win.set_default_size(600, 300)
++
++ # Dest.
++ column = gtk.TreeViewColumn('Destination', gtk.CellRendererText(),
++ text=self.COLUMN_PREFIX)
++ treeview.append_column(column)
++
++ # Interface
++ column = gtk.TreeViewColumn('faceType[nodeId](routingCost,status,metric)', gtk.CellRendererText(),
++ text=self.COLUMN_FACE)
++ treeview.append_column(column)
++
++ self.visualizer.add_information_window(self)
++ self.win.show()
++
++ def _response_cb(self, win, response):
++ self.win.destroy()
++ self.visualizer.remove_information_window(self)
++
++ def update(self):
++ ccnxFib = self.node.GetObject(ns.NDNabstraction.CcnxFib.GetTypeId())
++
++ if ccnxFib is None:
++ return
++
++ self.table_model.clear()
++
++ for fibI in range(ccnxFib.GetCcnxFibEntryCount()):
++ entry = ccnxFib.GetCcnxFibEntry(fibI)
++ tree_iter = self.table_model.append()
++ self.table_model.set(tree_iter,
++ self.COLUMN_PREFIX, str(entry.GetPrefix()),
++ self.COLUMN_FACE, str(entry))
++
++def populate_node_menu(viz, node, menu):
++ menu_item = gtk.MenuItem("Show CCNx FIB")
++ menu_item.show()
++
++ def _show_ccnx_fib(dummy_menu_item):
++ ShowCcnxFib(viz, node.node_index)
++
++ menu_item.connect("activate", _show_ccnx_fib)
++ menu.add(menu_item)
++
++def register(viz):
++ viz.connect("populate-node-menu", populate_node_menu)
+--
+1.7.10.2
+