Adding necessary patches to run NDN module
diff --git a/patches/0001-point-to-point-Add-support-of-PPP-Ethernet-and-Ether.patch b/patches/0001-point-to-point-Add-support-of-PPP-Ethernet-and-Ether.patch
new file mode 100644
index 0000000..2af712e
--- /dev/null
+++ b/patches/0001-point-to-point-Add-support-of-PPP-Ethernet-and-Ether.patch
@@ -0,0 +1,49 @@
+From 4a928511196fd80e9e9c43646d916e2d6fbc3190 Mon Sep 17 00:00:00 2001
+From: Ilya Moiseenko <iliamo@ucla.edu>
+Date: Thu, 1 Sep 2011 17:41:00 -0700
+Subject: [PATCH] point-to-point: Add support of PPP->Ethernet and
+ Ethernet->PPP frame type conversion for CCNx protocol
+
+point-to-point: Adding support for CCNx payload in PppHeader::Print method
+---
+ src/point-to-point/model/point-to-point-net-device.cc | 2 ++
+ src/point-to-point/model/ppp-header.cc | 3 +++
+ 2 files changed, 5 insertions(+)
+
+diff --git a/src/point-to-point/model/point-to-point-net-device.cc b/src/point-to-point/model/point-to-point-net-device.cc
+index ca81c53..775ef00 100644
+--- a/src/point-to-point/model/point-to-point-net-device.cc
++++ b/src/point-to-point/model/point-to-point-net-device.cc
+@@ -607,6 +607,7 @@ PointToPointNetDevice::PppToEther (uint16_t proto)
+ {
+ case 0x0021: return 0x0800; //IPv4
+ case 0x0057: return 0x86DD; //IPv6
++ case 0x0077: return 0x7777; //CCNx
+ default: NS_ASSERT_MSG (false, "PPP Protocol number not defined!");
+ }
+ return 0;
+@@ -619,6 +620,7 @@ PointToPointNetDevice::EtherToPpp (uint16_t proto)
+ {
+ case 0x0800: return 0x0021; //IPv4
+ case 0x86DD: return 0x0057; //IPv6
++ case 0x7777: return 0x0077; //CCNx
+ default: NS_ASSERT_MSG (false, "PPP Protocol number not defined!");
+ }
+ return 0;
+diff --git a/src/point-to-point/model/ppp-header.cc b/src/point-to-point/model/ppp-header.cc
+index 4650fb0..7e000bd 100644
+--- a/src/point-to-point/model/ppp-header.cc
++++ b/src/point-to-point/model/ppp-header.cc
+@@ -66,6 +66,9 @@ PppHeader::Print (std::ostream &os) const
+ case 0x0057: /* IPv6 */
+ proto = "IPv6 (0x0057)";
+ break;
++ case 0x0077: /* CCNx */
++ proto = "CCNx (0x0077)";
++ break;
+ default:
+ NS_ASSERT_MSG (false, "PPP Protocol number not defined!");
+ }
+--
+1.7.10.2
+
diff --git a/patches/0001-point-to-point-netanim-Adding-ChannelID-to-PointToPo.patch b/patches/0001-point-to-point-netanim-Adding-ChannelID-to-PointToPo.patch
new file mode 100644
index 0000000..f327f6a
--- /dev/null
+++ b/patches/0001-point-to-point-netanim-Adding-ChannelID-to-PointToPo.patch
@@ -0,0 +1,72 @@
+From 9ed23508a72afd3780b041b2fd00a50e1ff91b4c Mon Sep 17 00:00:00 2001
+From: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+Date: Mon, 23 Apr 2012 13:49:37 -0700
+Subject: [PATCH] point-to-point, netanim: Adding ChannelID to
+ PointToPointChannel trace
+
+---
+ src/netanim/model/animation-interface.cc | 4 +++-
+ src/netanim/model/animation-interface.h | 3 ++-
+ src/point-to-point/model/point-to-point-channel.cc | 2 +-
+ src/point-to-point/model/point-to-point-channel.h | 3 ++-
+ 4 files changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/src/netanim/model/animation-interface.cc b/src/netanim/model/animation-interface.cc
+index d6a3551..9215abf 100644
+--- a/src/netanim/model/animation-interface.cc
++++ b/src/netanim/model/animation-interface.cc
+@@ -676,7 +676,9 @@ void AnimationInterface::WriteDummyPacket ()
+
+
+ }
+-void AnimationInterface::DevTxTrace (std::string context, Ptr<const Packet> p,
++void AnimationInterface::DevTxTrace (std::string context,
++ uint32_t, // channel
++ Ptr<const Packet> p,
+ Ptr<NetDevice> tx, Ptr<NetDevice> rx,
+ Time txTime, Time rxTime)
+ {
+diff --git a/src/netanim/model/animation-interface.h b/src/netanim/model/animation-interface.h
+index 4a3ffb9..db58d89 100644
+--- a/src/netanim/model/animation-interface.h
++++ b/src/netanim/model/animation-interface.h
+@@ -288,7 +288,8 @@ private:
+ bool ServerPortSet;
+
+ void DevTxTrace (std::string context,
+- Ptr<const Packet> p,
++ uint32_t,
++ Ptr<const Packet> p,
+ Ptr<NetDevice> tx,
+ Ptr<NetDevice> rx,
+ Time txTime,
+diff --git a/src/point-to-point/model/point-to-point-channel.cc b/src/point-to-point/model/point-to-point-channel.cc
+index d6a6938..5bc4c9c 100644
+--- a/src/point-to-point/model/point-to-point-channel.cc
++++ b/src/point-to-point/model/point-to-point-channel.cc
+@@ -98,7 +98,7 @@ PointToPointChannel::TransmitStart (
+ m_link[wire].m_dst, p);
+
+ // Call the tx anim callback on the net device
+- m_txrxPointToPoint (p, src, m_link[wire].m_dst, txTime, txTime + m_delay);
++ m_txrxPointToPoint (GetId (), p, src, m_link[wire].m_dst, txTime, txTime + m_delay);
+ return true;
+ }
+
+diff --git a/src/point-to-point/model/point-to-point-channel.h b/src/point-to-point/model/point-to-point-channel.h
+index 4b0b777..a364ab9 100644
+--- a/src/point-to-point/model/point-to-point-channel.h
++++ b/src/point-to-point/model/point-to-point-channel.h
+@@ -137,7 +137,8 @@ private:
+ *
+ * @see class CallBackTraceSource
+ */
+- TracedCallback<Ptr<const Packet>, // Packet being transmitted
++ TracedCallback<uint32_t, // channel ID
++ Ptr<const Packet>, // Packet being transmitted
+ Ptr<NetDevice>, // Transmitting NetDevice
+ Ptr<NetDevice>, // Receiving NetDevice
+ Time, // Amount of time to transmit the pkt
+--
+1.7.10.2
+
diff --git a/patches/0002-core-openflow-Moving-boost-related-configuration-to-.patch b/patches/0002-core-openflow-Moving-boost-related-configuration-to-.patch
new file mode 100644
index 0000000..0e226e3
--- /dev/null
+++ b/patches/0002-core-openflow-Moving-boost-related-configuration-to-.patch
@@ -0,0 +1,73 @@
+From 63e2f7d75601540169f62dea0b8aa17fda34812a Mon Sep 17 00:00:00 2001
+From: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+Date: Wed, 29 Feb 2012 10:07:08 -0800
+Subject: [PATCH] core+openflow: Moving `boost`-related configuration to main
+ wscript.
+
+There is a problem when two different modules require different boost
+libs. Only requirements of the last module are actually picked up by
+the build system.
+---
+ src/openflow/wscript | 10 +---------
+ wscript | 9 +++++++++
+ 2 files changed, 10 insertions(+), 9 deletions(-)
+
+diff --git a/src/openflow/wscript b/src/openflow/wscript
+index b18d2c1..21c483a 100644
+--- a/src/openflow/wscript
++++ b/src/openflow/wscript
+@@ -2,23 +2,15 @@
+
+ import os
+ import Options
++import Logs
+ from waflib.Errors import WafError
+
+ def options(opt):
+ opt.add_option('--with-openflow',
+ help=('Path to OFSID source for NS-3 OpenFlow Integration support'),
+ default='', dest='with_openflow')
+- opt.tool_options('boost', tooldir=["waf-tools"])
+
+ def configure(conf):
+- try:
+- conf.check_tool('boost')
+- conf.check_boost(lib='signals filesystem')
+- if not conf.env.LIB_BOOST:
+- conf.check_boost(lib='signals filesystem', libpath="/usr/lib64")
+- except WafError:
+- conf.env['LIB_BOOST'] = []
+-
+ if not conf.env.LIB_BOOST:
+ conf.report_optional_feature("openflow", "NS-3 OpenFlow Integration", False,
+ "Required boost libraries not found")
+diff --git a/wscript b/wscript
+index 05440fa..c60fd18 100644
+--- a/wscript
++++ b/wscript
+@@ -125,6 +125,7 @@ def options(opt):
+ opt.load('compiler_cxx')
+ opt.load('cflags')
+ opt.load('gnu_dirs')
++ opt.tool_options('boost', tooldir=["waf-tools"])
+
+ opt.add_option('--cwd',
+ help=('Set the working directory for a program.'),
+@@ -364,6 +365,14 @@ def configure(conf):
+ conf.report_optional_feature("static", "Static build", False,
+ "Link flag -Wl,--whole-archive,-Bstatic does not work")
+
++ try:
++ conf.check_tool('boost')
++ conf.check_boost(lib='signals filesystem iostreams regex')
++ if not conf.env.LIB_BOOST:
++ conf.check_boost(lib='signals filesystem iostreams regex', libpath="/usr/lib64")
++ except WafError:
++ conf.env['LIB_BOOST'] = []
++
+ # Set this so that the lists won't be printed at the end of this
+ # configure command.
+ conf.env['PRINT_BUILT_MODULES_AT_END'] = False
+--
+1.7.10.2
+
diff --git a/patches/0003-internet-Making-rtt-estimator.h-of-the-Internet-modu.patch b/patches/0003-internet-Making-rtt-estimator.h-of-the-Internet-modu.patch
new file mode 100644
index 0000000..67072de
--- /dev/null
+++ b/patches/0003-internet-Making-rtt-estimator.h-of-the-Internet-modu.patch
@@ -0,0 +1,25 @@
+From 55b3eea8f073c83e1dfccdf7e43c5746aea0af68 Mon Sep 17 00:00:00 2001
+From: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+Date: Mon, 9 Jan 2012 18:39:26 -0800
+Subject: [PATCH] internet: Making rtt-estimator.h of the Internet module
+ accessible to other modules
+
+---
+ src/internet/wscript | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/internet/wscript b/src/internet/wscript
+index e250a1e..0090ae3 100644
+--- a/src/internet/wscript
++++ b/src/internet/wscript
+@@ -279,6 +279,7 @@ def build(bld):
+ 'helper/ipv6-interface-container.h',
+ 'helper/ipv6-routing-helper.h',
+ 'model/ipv6-address-generator.h',
++ 'model/rtt-estimator.h',
+ ]
+
+ if bld.env['NSC_ENABLED']:
+--
+1.7.10.2
+
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
+
diff --git a/patches/0005-visualizer-temporary-fix-for-the-visualizer-related-.patch b/patches/0005-visualizer-temporary-fix-for-the-visualizer-related-.patch
new file mode 100644
index 0000000..b30ac72
--- /dev/null
+++ b/patches/0005-visualizer-temporary-fix-for-the-visualizer-related-.patch
@@ -0,0 +1,44 @@
+From ebfeccd51ba1259e01a5bef3925719a88c3ac040 Mon Sep 17 00:00:00 2001
+From: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+Date: Mon, 23 Apr 2012 13:45:51 -0700
+Subject: [PATCH] visualizer: temporary fix for the visualizer-related bugs
+ (asserts)
+
+---
+ src/core/model/type-id.cc | 3 ++-
+ src/visualizer/model/pyviz.cc | 5 +++--
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/src/core/model/type-id.cc b/src/core/model/type-id.cc
+index e51e1e9..1368b85 100644
+--- a/src/core/model/type-id.cc
++++ b/src/core/model/type-id.cc
+@@ -149,7 +149,8 @@ IidManager::AddConstructor (uint16_t uid, ns3::Callback<ns3::ObjectBase *> callb
+ struct IidInformation *information = LookupInformation (uid);
+ if (information->hasConstructor)
+ {
+- NS_FATAL_ERROR (information->name<<" already has a constructor.");
++ return;
++ // NS_FATAL_ERROR (information->name<<" already has a constructor.");
+ }
+ information->hasConstructor = true;
+ information->constructor = callback;
+diff --git a/src/visualizer/model/pyviz.cc b/src/visualizer/model/pyviz.cc
+index 1e500b2..739d8c4 100644
+--- a/src/visualizer/model/pyviz.cc
++++ b/src/visualizer/model/pyviz.cc
+@@ -317,8 +317,9 @@ PyViz::SimulatorRunUntil (Time time)
+ // events just appear to "jump" big chunks of time.
+ NS_LOG_LOGIC ("Schedule dummy callback to be called in " << (time - Simulator::Now ()));
+ m_stop = false;
+- Simulator::Cancel (m_stopCallbackEvent);
+- m_stopCallbackEvent = Simulator::Schedule (time - Simulator::Now (), &PyViz::CallbackStopSimulation, this);
++ // Simulator::Cancel (m_stopCallbackEvent);
++ // m_stopCallbackEvent =
++ Simulator::ScheduleWithContext (-1, time - Simulator::Now (), &PyViz::CallbackStopSimulation, this);
+
+ Ptr<SimulatorImpl> impl = Simulator::GetImplementation ();
+ Ptr<VisualSimulatorImpl> visualImpl = DynamicCast<VisualSimulatorImpl> (impl);
+--
+1.7.10.2
+