Another set of refactoring
diff --git a/model/ndn-l3-protocol.cc b/model/ndn-l3-protocol.cc
index 62c6241..315ad63 100644
--- a/model/ndn-l3-protocol.cc
+++ b/model/ndn-l3-protocol.cc
@@ -40,43 +40,41 @@
 #include "ns3/ndn-face.h"
 #include "ns3/ndn-forwarding-strategy.h"
 
-// #include "fib/ndn-fib-impl.h"
-
 #include "ndn-net-device-face.h"
 
 #include <boost/foreach.hpp>
 
-NS_LOG_COMPONENT_DEFINE ("NdnL3Protocol");
+NS_LOG_COMPONENT_DEFINE ("ndn.L3Protocol");
 
 namespace ns3 {
+namespace ndn {
 
-const uint16_t NdnL3Protocol::ETHERNET_FRAME_TYPE = 0x7777;
+const uint16_t L3Protocol::ETHERNET_FRAME_TYPE = 0x7777;
 
 
-NS_OBJECT_ENSURE_REGISTERED (NdnL3Protocol);
+NS_OBJECT_ENSURE_REGISTERED (L3Protocol);
 
 TypeId 
-NdnL3Protocol::GetTypeId (void)
+L3Protocol::GetTypeId (void)
 {
-  static TypeId tid = TypeId ("ns3::NdnL3Protocol")
-    .SetParent<Ndn> ()
+  static TypeId tid = TypeId ("ns3::ndn::L3Protocol")
     .SetGroupName ("ndn")
-    .AddConstructor<NdnL3Protocol> ()
+    .AddConstructor<L3Protocol> ()
     .AddAttribute ("FaceList", "List of faces associated with ndn stack",
                    ObjectVectorValue (),
-                   MakeObjectVectorAccessor (&NdnL3Protocol::m_faces),
-                   MakeObjectVectorChecker<NdnFace> ())
+                   MakeObjectVectorAccessor (&L3Protocol::m_faces),
+                   MakeObjectVectorChecker<Face> ())
   ;
   return tid;
 }
 
-NdnL3Protocol::NdnL3Protocol()
+L3Protocol::L3Protocol()
 : m_faceCounter (0)
 {
   NS_LOG_FUNCTION (this);
 }
 
-NdnL3Protocol::~NdnL3Protocol ()
+L3Protocol::~L3Protocol ()
 {
   NS_LOG_FUNCTION (this);
 }
@@ -86,7 +84,7 @@
  * by setting the node in the ndn stack
  */
 void
-NdnL3Protocol::NotifyNewAggregate ()
+L3Protocol::NotifyNewAggregate ()
 {
   // not really efficient, but this will work only once
   if (m_node == 0)
@@ -95,37 +93,37 @@
       if (m_node != 0)
         {
           // NS_ASSERT_MSG (m_pit != 0 && m_fib != 0 && m_contentStore != 0 && m_forwardingStrategy != 0,
-          //                "PIT, FIB, and ContentStore should be aggregated before NdnL3Protocol");
+          //                "PIT, FIB, and ContentStore should be aggregated before L3Protocol");
           NS_ASSERT_MSG (m_forwardingStrategy != 0,
-                         "Forwarding strategy should be aggregated before NdnL3Protocol");
+                         "Forwarding strategy should be aggregated before L3Protocol");
         }
     }
   // if (m_pit == 0)
   //   {
-  //     m_pit = GetObject<NdnPit> ();
+  //     m_pit = GetObject<Pit> ();
   //   }
   // if (m_fib == 0)
   //   {
-  //     m_fib = GetObject<NdnFib> ();
+  //     m_fib = GetObject<Fib> ();
   //   }
   if (m_forwardingStrategy == 0)
     {
-      m_forwardingStrategy = GetObject<NdnForwardingStrategy> ();
+      m_forwardingStrategy = GetObject<ForwardingStrategy> ();
     }
   // if (m_contentStore == 0)
   //   {
-  //     m_contentStore = GetObject<NdnContentStore> ();
+  //     m_contentStore = GetObject<ContentStore> ();
   //   }
 
-  Ndn::NotifyNewAggregate ();
+  Object::NotifyNewAggregate ();
 }
 
 void 
-NdnL3Protocol::DoDispose (void)
+L3Protocol::DoDispose (void)
 {
   NS_LOG_FUNCTION (this);
 
-  for (NdnFaceList::iterator i = m_faces.begin (); i != m_faces.end (); ++i)
+  for (FaceList::iterator i = m_faces.begin (); i != m_faces.end (); ++i)
     {
       *i = 0;
     }
@@ -135,18 +133,18 @@
   // Force delete on objects
   m_forwardingStrategy = 0; // there is a reference to PIT stored in here
 
-  Ndn::DoDispose ();
+  Object::DoDispose ();
 }
 
 uint32_t 
-NdnL3Protocol::AddFace (const Ptr<NdnFace> &face)
+L3Protocol::AddFace (const Ptr<Face> &face)
 {
   NS_LOG_FUNCTION (this << &face);
 
   face->SetId (m_faceCounter); // sets a unique ID of the face. This ID serves only informational purposes
 
   // ask face to register in lower-layer stack
-  face->RegisterProtocolHandler (MakeCallback (&NdnL3Protocol::Receive, this));
+  face->RegisterProtocolHandler (MakeCallback (&L3Protocol::Receive, this));
 
   m_faces.push_back (face);
   m_faceCounter++;
@@ -154,15 +152,15 @@
 }
 
 void
-NdnL3Protocol::RemoveFace (Ptr<NdnFace> face)
+L3Protocol::RemoveFace (Ptr<Face> face)
 {
   // ask face to register in lower-layer stack
-  face->RegisterProtocolHandler (MakeNullCallback<void,const Ptr<NdnFace>&,const Ptr<const Packet>&> ());
-  Ptr<NdnPit> pit = GetObject<NdnPit> ();
+  face->RegisterProtocolHandler (MakeNullCallback<void,const Ptr<Face>&,const Ptr<const Packet>&> ());
+  Ptr<Pit> pit = GetObject<Pit> ();
 
   // just to be on a safe side. Do the process in two steps
-  std::list< Ptr<NdnPitEntry> > entriesToRemoves;
-  for (Ptr<NdnPitEntry> pitEntry = pit->Begin (); pitEntry != 0; pitEntry = pit->Next (pitEntry))
+  std::list< Ptr<pit::Entry> > entriesToRemoves;
+  for (Ptr<pit::Entry> pitEntry = pit->Begin (); pitEntry != 0; pitEntry = pit->Next (pitEntry))
     {
       pitEntry->RemoveAllReferencesToFace (face);
       
@@ -174,20 +172,20 @@
           entriesToRemoves.push_back (pitEntry);
         }
     }
-  BOOST_FOREACH (Ptr<NdnPitEntry> removedEntry, entriesToRemoves)
+  BOOST_FOREACH (Ptr<pit::Entry> removedEntry, entriesToRemoves)
     {
       pit->MarkErased (removedEntry);
     }
 
-  NdnFaceList::iterator face_it = find (m_faces.begin(), m_faces.end(), face);
+  FaceList::iterator face_it = find (m_faces.begin(), m_faces.end(), face);
   NS_ASSERT_MSG (face_it != m_faces.end (), "Attempt to remove face that doesn't exist");
   m_faces.erase (face_it);
 }
 
-Ptr<NdnFace>
-NdnL3Protocol::GetFace (uint32_t index) const
+Ptr<Face>
+L3Protocol::GetFace (uint32_t index) const
 {
-  BOOST_FOREACH (const Ptr<NdnFace> &face, m_faces) // this function is not supposed to be called often, so linear search is fine
+  BOOST_FOREACH (const Ptr<Face> &face, m_faces) // this function is not supposed to be called often, so linear search is fine
     {
       if (face->GetId () == index)
         return face;
@@ -195,12 +193,12 @@
   return 0;
 }
 
-Ptr<NdnFace>
-NdnL3Protocol::GetFaceByNetDevice (Ptr<NetDevice> netDevice) const
+Ptr<Face>
+L3Protocol::GetFaceByNetDevice (Ptr<NetDevice> netDevice) const
 {
-  BOOST_FOREACH (const Ptr<NdnFace> &face, m_faces) // this function is not supposed to be called often, so linear search is fine
+  BOOST_FOREACH (const Ptr<Face> &face, m_faces) // this function is not supposed to be called often, so linear search is fine
     {
-      Ptr<NdnNetDeviceFace> netDeviceFace = DynamicCast<NdnNetDeviceFace> (face);
+      Ptr<NetDeviceFace> netDeviceFace = DynamicCast<NetDeviceFace> (face);
       if (netDeviceFace == 0) continue;
 
       if (netDeviceFace->GetNetDevice () == netDevice)
@@ -210,14 +208,14 @@
 }
 
 uint32_t 
-NdnL3Protocol::GetNFaces (void) const
+L3Protocol::GetNFaces (void) const
 {
   return m_faces.size ();
 }
 
 // Callback from lower layer
 void 
-NdnL3Protocol::Receive (const Ptr<NdnFace> &face, const Ptr<const Packet> &p)
+L3Protocol::Receive (const Ptr<Face> &face, const Ptr<const Packet> &p)
 {
   if (!face->IsUp ())
     return;
@@ -229,12 +227,12 @@
   Ptr<Packet> packet = p->Copy (); // give upper layers a rw copy of the packet
   try
     {
-      NdnHeaderHelper::Type type = NdnHeaderHelper::GetNdnHeaderType (p);
+      HeaderHelper::Type type = HeaderHelper::GetNdnHeaderType (p);
       switch (type)
         {
-        case NdnHeaderHelper::INTEREST:
+        case HeaderHelper::INTEREST:
           {
-            Ptr<NdnInterestHeader> header = Create<NdnInterestHeader> ();
+            Ptr<InterestHeader> header = Create<InterestHeader> ();
 
             // Deserialization. Exception may be thrown
             packet->RemoveHeader (*header);
@@ -247,11 +245,11 @@
             //   OnInterest (face, header, p/*original packet*/);  
             break;
           }
-        case NdnHeaderHelper::CONTENT_OBJECT:
+        case HeaderHelper::CONTENT_OBJECT:
           {
-            Ptr<NdnContentObjectHeader> header = Create<NdnContentObjectHeader> ();
+            Ptr<ContentObjectHeader> header = Create<ContentObjectHeader> ();
             
-            static NdnContentObjectTail contentObjectTrailer; //there is no data in this object
+            static ContentObjectTail contentObjectTrailer; //there is no data in this object
 
             // Deserialization. Exception may be thrown
             packet->RemoveHeader (*header);
@@ -264,413 +262,14 @@
       
       // exception will be thrown if packet is not recognized
     }
-  catch (NdnUnknownHeaderException)
+  catch (UnknownHeaderException)
     {
-      NS_ASSERT_MSG (false, "Unknown Ndn header. Should not happen");
-      NS_LOG_ERROR ("Unknown Ndn header. Should not happen");
+      NS_ASSERT_MSG (false, "Unknown NDN header. Should not happen");
+      NS_LOG_ERROR ("Unknown NDN header. Should not happen");
       return;
     }
 }
 
-// void
-// NdnL3Protocol::OnNack (const Ptr<NdnFace> &incomingFace,
-//                         Ptr<NdnInterestHeader> &header,
-//                         const Ptr<const Packet> &packet)
-// {
-//   NS_LOG_FUNCTION (incomingFace << header << packet);
-//   m_inNacks (header, incomingFace);
 
-//   Ptr<NdnPitEntry> pitEntry = m_pit->Lookup (*header);
-//   if (pitEntry == 0)
-//     {
-//       // somebody is doing something bad
-//       m_dropNacks (header, NON_DUPLICATED, incomingFace);
-//       return;
-//     }
-  
-//   // NdnPitEntryIncomingFaceContainer::type::iterator inFace = pitEntry->GetIncoming ().find (incomingFace);
-//   NdnPitEntryOutgoingFaceContainer::type::iterator outFace = pitEntry->GetOutgoing ().find (incomingFace);
-
-//   if (outFace == pitEntry->GetOutgoing ().end ())
-//     {
-// //      NS_ASSERT_MSG (false,
-// //                     "Node " << GetObject<Node> ()->GetId () << ", outgoing entry should exist for face " << boost::cref(*incomingFace) << "\n" <<
-// //                     "size: " << pitEntry.GetOutgoing ().size ());
-      
-//       // m_dropNacks (header, NON_DUPLICATE, incomingFace);
-//       return;
-//     }
-
-//   // This was done in error. Never, never do anything, except normal leakage. This way we ensure that we will not have losses,
-//   // at least when there is only one client
-//   //
-//   // incomingFace->LeakBucketByOnePacket ();
-
-//   NS_LOG_ERROR ("Nack on " << boost::cref(*incomingFace));
-  
-//   pitEntry->SetWaitingInVain (outFace);
-
-//   // If NACK is NACK_GIVEUP_PIT, then neighbor gave up trying to and removed it's PIT entry.
-//   // So, if we had an incoming entry to this neighbor, then we can remove it now
-
-//   if (header->GetNack () == NdnInterestHeader::NACK_GIVEUP_PIT)
-//     {
-//       pitEntry->RemoveIncoming (incomingFace);
-//     }
-
-//   pitEntry->GetFibEntry ()->UpdateStatus (incomingFace, NdnFibFaceMetric::NDN_FIB_YELLOW);
-//   // StaticCast<NdnFibImpl> (m_fib)->modify (pitEntry->GetFibEntry (),
-//   //                                           ll::bind (&NdnFibEntry::UpdateStatus,
-//   //                                                     ll::_1, incomingFace, NdnFibFaceMetric::NDN_FIB_YELLOW));
-
-//   if (pitEntry->GetIncoming ().size () == 0) // interest was actually satisfied
-//     {
-//       // no need to do anything
-//       m_dropNacks (header, AFTER_SATISFIED, incomingFace);
-//       return;
-//     }
-
-//   if (!pitEntry->AreAllOutgoingInVain ()) // not all ougtoing are in vain
-//     {
-//       NS_LOG_DEBUG ("Not all outgoing are in vain");
-//       // suppress
-//       // Don't do anything, we are still expecting data from some other face
-//       m_dropNacks (header, SUPPRESSED, incomingFace);
-//       return;
-//     }
-  
-//   Ptr<Packet> nonNackInterest = Create<Packet> ();
-//   header->SetNack (NdnInterestHeader::NORMAL_INTEREST);
-//   nonNackInterest->AddHeader (*header);
-  
-//   bool propagated = m_forwardingStrategy->
-//     PropagateInterest (pitEntry, incomingFace, header, nonNackInterest);
-
-//   // // ForwardingStrategy will try its best to forward packet to at least one interface.
-//   // // If no interests was propagated, then there is not other option for forwarding or
-//   // // ForwardingStrategy failed to find it. 
-//   if (!propagated)
-//     {
-//       m_dropNacks (header, NO_FACES, incomingFace); // this headers doesn't have NACK flag set
-//       GiveUpInterest (pitEntry, header);
-//     }
-// }
-
-// Processing Interests
-//
-// // !!! Key point.
-// // !!! All interests should be answerred!!! Either later with data, immediately with data, or immediately with NACK
-// void NdnL3Protocol::OnInterest (const Ptr<NdnFace> &incomingFace,
-//                                  Ptr<NdnInterestHeader> &header,
-//                                  const Ptr<const Packet> &packet)
-// {
-//   m_inInterests (header, incomingFace);
-
-//   Ptr<NdnPitEntry> pitEntry = m_pit->Lookup (*header);
-//   if (pitEntry == 0)
-//     {
-//       pitEntry = m_pit->Create (header);
-//     }
-
-//   if (pitEntry == 0)
-//     {
-//       // if it is still not created, then give up processing
-//       m_dropInterests (header, PIT_LIMIT, incomingFace);
-//       return;
-//     }
-  
-//   bool isNew = pitEntry->GetIncoming ().size () == 0 && pitEntry->GetOutgoing ().size () == 0;
-//   bool isDuplicated = true;
-//   if (!pitEntry->IsNonceSeen (header->GetNonce ()))
-//     {
-//       pitEntry->AddSeenNonce (header->GetNonce ());
-//       isDuplicated = false;
-//     }
-
-//   NS_LOG_FUNCTION (header->GetName () << header->GetNonce () << boost::cref (*incomingFace) << isDuplicated);
-
-//   /////////////////////////////////////////////////////////////////////////////////////////
-//   /////////////////////////////////////////////////////////////////////////////////////////
-//   /////////////////////////////////////////////////////////////////////////////////////////
-//   //                                                                                     //
-//   // !!!! IMPORTANT CHANGE !!!! Duplicate interests will create incoming face entry !!!! //
-//   //                                                                                     //
-//   /////////////////////////////////////////////////////////////////////////////////////////
-//   /////////////////////////////////////////////////////////////////////////////////////////
-//   /////////////////////////////////////////////////////////////////////////////////////////
-  
-//   // Data is not in cache
-//   NdnPitEntry::in_iterator inFace   = pitEntry->GetIncoming ().find (incomingFace);
-//   NdnPitEntry::out_iterator outFace = pitEntry->GetOutgoing ().find (incomingFace);
-
-//   bool isRetransmitted = false;
-  
-//   if (inFace != pitEntry->GetIncoming ().end ())
-//     {
-//       // NdnPitEntryIncomingFace.m_arrivalTime keeps track arrival time of the first packet... why?
-
-//       isRetransmitted = true;
-//       // this is almost definitely a retransmission. But should we trust the user on that?
-//     }
-//   else
-//     {
-//       inFace = pitEntry->AddIncoming (incomingFace);
-//     }
-//   //////////////////////////////////////////////////////////////////////////////////
-//   //////////////////////////////////////////////////////////////////////////////////
-//   //////////////////////////////////////////////////////////////////////////////////
-  
-//   if (isDuplicated) 
-//     {
-//       NS_LOG_DEBUG ("Received duplicatie interest on " << *incomingFace);
-//       m_dropInterests (header, DUPLICATED, incomingFace);
-
-//       /**
-//        * This condition will handle "routing" loops and also recently satisfied interests.
-//        * Every time interest is satisfied, PIT entry (with empty incoming and outgoing faces)
-//        * is kept for another small chunk of time.
-//        */
-
-//       if (m_nacksEnabled)
-//         {
-//           NS_LOG_DEBUG ("Sending NACK_LOOP");
-//           header->SetNack (NdnInterestHeader::NACK_LOOP);
-//           Ptr<Packet> nack = Create<Packet> ();
-//           nack->AddHeader (*header);
-
-//           incomingFace->Send (nack);
-//           m_outNacks (header, incomingFace);
-//         }
-      
-//       return;
-//     }
-
-//   Ptr<Packet> contentObject;
-//   Ptr<const NdnContentObjectHeader> contentObjectHeader; // used for tracing
-//   Ptr<const Packet> payload; // used for tracing
-//   tie (contentObject, contentObjectHeader, payload) = m_contentStore->Lookup (header);
-//   if (contentObject != 0)
-//     {
-//       NS_ASSERT (contentObjectHeader != 0);      
-//       NS_LOG_LOGIC("Found in cache");
-
-//       OnDataDelayed (contentObjectHeader, payload, contentObject);
-//       return;
-//     }
-
-//   // update PIT entry lifetime
-//   pitEntry->UpdateLifetime (header->GetInterestLifetime ());
-  
-//   if (outFace != pitEntry->GetOutgoing ().end ())
-//     {
-//       NS_LOG_DEBUG ("Non duplicate interests from the face we have sent interest to. Don't suppress");
-//       // got a non-duplicate interest from the face we have sent interest to
-//       // Probably, there is no point in waiting data from that face... Not sure yet
-
-//       // If we're expecting data from the interface we got the interest from ("producer" asks us for "his own" data)
-//       // Mark interface YELLOW, but keep a small hope that data will come eventually.
-
-//       // ?? not sure if we need to do that ?? ...
-      
-//       pitEntry->GetFibEntry ()->UpdateStatus (incomingFace, NdnFibFaceMetric::NDN_FIB_YELLOW);
-//       // StaticCast<NdnFibImpl> (m_fib)->modify(pitEntry->GetFibEntry (),
-//       //                                          ll::bind (&NdnFibEntry::UpdateStatus,
-//       //                                                    ll::_1, incomingFace, NdnFibFaceMetric::NDN_FIB_YELLOW));
-//     }
-//   else
-//     if (!isNew && !isRetransmitted)
-//       {
-//         // Suppress this interest if we're still expecting data from some other face
-//         NS_LOG_DEBUG ("Suppress interests");
-//         m_dropInterests (header, SUPPRESSED, incomingFace);
-//         return;
-//       }
-  
-//   /////////////////////////////////////////////////////////////////////
-//   // Propagate
-//   /////////////////////////////////////////////////////////////////////
-  
-//   bool propagated = m_forwardingStrategy->
-//     PropagateInterest (pitEntry, incomingFace, header, packet);
-
-//   if (!propagated && isRetransmitted) //give another chance if retransmitted
-//     {
-//       // increase max number of allowed retransmissions
-//       pitEntry->IncreaseAllowedRetxCount ();
-
-//       // try again
-//       propagated = m_forwardingStrategy->
-//         PropagateInterest (pitEntry, incomingFace, header, packet);
-//     }
-  
-//   // ForwardingStrategy will try its best to forward packet to at least one interface.
-//   // If no interests was propagated, then there is not other option for forwarding or
-//   // ForwardingStrategy failed to find it. 
-//   if (!propagated)
-//     {
-//       NS_LOG_DEBUG ("Not propagated");
-//       m_dropInterests (header, NO_FACES, incomingFace);
-//       GiveUpInterest (pitEntry, header);
-//     }
-// }
-
-// void
-// NdnL3Protocol::OnDataDelayed (Ptr<const NdnContentObjectHeader> header,
-//                                Ptr<const Packet> payload,
-//                                const Ptr<const Packet> &packet)
-// {
-//   // 1. Lookup PIT entry
-//   Ptr<NdnPitEntry> pitEntry = m_pit->Lookup (*header);
-//   if (pitEntry != 0)
-//     {
-//       //satisfy all pending incoming Interests
-//       BOOST_FOREACH (const NdnPitEntryIncomingFace &incoming, pitEntry->GetIncoming ())
-//         {
-//           incoming.m_face->Send (packet->Copy ());
-//           m_outData (header, payload, false, incoming.m_face);
-//           NS_LOG_DEBUG ("Satisfy " << *incoming.m_face);
-          
-//           // successfull forwarded data trace
-//         }
-
-//       if (pitEntry->GetIncoming ().size () > 0)
-//         {
-//           // All incoming interests are satisfied. Remove them
-//           pitEntry->ClearIncoming ();
-
-//           // Remove all outgoing faces
-//           pitEntry->ClearOutgoing ();
-          
-//           // Set pruning timout on PIT entry (instead of deleting the record)
-//           m_pit->MarkErased (pitEntry);
-//         }
-//     }
-//   else
-//     {
-//       NS_LOG_DEBUG ("Pit entry not found (was satisfied and removed before)");
-//       return; // do not process unsoliced data packets
-//     }
-// }
-
-// // Processing ContentObjects
-// void
-// NdnL3Protocol::OnData (const Ptr<NdnFace> &incomingFace,
-//                         Ptr<NdnContentObjectHeader> &header,
-//                         Ptr<Packet> &payload,
-//                         const Ptr<const Packet> &packet)
-// {
-    
-//   NS_LOG_FUNCTION (incomingFace << header->GetName () << payload << packet);
-//   m_inData (header, payload, incomingFace);
-  
-//   // 1. Lookup PIT entry
-//   Ptr<NdnPitEntry> pitEntry = m_pit->Lookup (*header);
-//   if (pitEntry != 0)
-//     {
-//       // Note that with MultiIndex we need to modify entries indirectly
-
-//       NdnPitEntry::out_iterator out = pitEntry->GetOutgoing ().find (incomingFace);
-  
-//       // If we have sent interest for this data via this face, then update stats.
-//       if (out != pitEntry->GetOutgoing ().end ())
-//         {
-//           pitEntry->GetFibEntry ()->UpdateFaceRtt (incomingFace, Simulator::Now () - out->m_sendTime);
-//           // StaticCast<NdnFibImpl> (m_fib)->modify (pitEntry->GetFibEntry (),
-//           //                                          ll::bind (&NdnFibEntry::UpdateFaceRtt,
-//           //                                                    ll::_1,
-//           //                                                    incomingFace,
-//           //                                                    Simulator::Now () - out->m_sendTime));
-//         }
-//       else
-//         {
-//           // Unsolicited data, but we're interested in it... should we get it?
-//           // Potential hole for attacks
-
-//           if (m_cacheUnsolicitedData)
-//             {
-//               // Optimistically add or update entry in the content store
-//               m_contentStore->Add (header, payload);
-//             }
-//           else
-//             {
-//               NS_LOG_ERROR ("Node "<< m_node->GetId() <<
-//                             ". PIT entry for "<< header->GetName ()<<" is valid, "
-//                             "but outgoing entry for interface "<< boost::cref(*incomingFace) <<" doesn't exist\n");
-//             }
-//           // ignore unsolicited data
-//           return;
-//         }
-
-//       // Update metric status for the incoming interface in the corresponding FIB entry
-//       pitEntry->GetFibEntry ()->UpdateStatus (incomingFace, NdnFibFaceMetric::NDN_FIB_GREEN);
-//       // StaticCast<NdnFibImpl>(m_fib)->modify (pitEntry->GetFibEntry (),
-//       //                                          ll::bind (&NdnFibEntry::UpdateStatus, ll::_1,
-//       //                                                    incomingFace, NdnFibFaceMetric::NDN_FIB_GREEN));
-  
-//       // Add or update entry in the content store
-//       m_contentStore->Add (header, payload);
-
-//       pitEntry->RemoveIncoming (incomingFace);
-
-//       if (pitEntry->GetIncoming ().size () == 0)
-//         {
-//           // Set pruning timout on PIT entry (instead of deleting the record)
-//           m_pit->MarkErased (pitEntry);
-//         }
-//       else
-//         {
-//           OnDataDelayed (header, payload, packet);
-//         }
-//     }
-//   else
-//     {
-//       NS_LOG_DEBUG ("Pit entry not found");
-//       if (m_cacheUnsolicitedData)
-//         {
-//           // Optimistically add or update entry in the content store
-//           m_contentStore->Add (header, payload);
-//         }
-//       else
-//         {
-//           // Drop data packet if PIT entry is not found
-//           // (unsolicited data packets should not "poison" content store)
-      
-//           //drop dulicated or not requested data packet
-//           m_dropData (header, payload, UNSOLICITED, incomingFace);
-//         }
-//       return; // do not process unsoliced data packets
-//     }
-// }
-
-// void
-// NdnL3Protocol::GiveUpInterest (Ptr<NdnPitEntry> pitEntry,
-//                                 Ptr<NdnInterestHeader> header)
-// {
-//   NS_LOG_FUNCTION (this);
-
-//   if (m_nacksEnabled)
-//     {
-//       Ptr<Packet> packet = Create<Packet> ();
-//       header->SetNack (NdnInterestHeader::NACK_GIVEUP_PIT);
-//       packet->AddHeader (*header);
-
-//       BOOST_FOREACH (const NdnPitEntryIncomingFace &incoming, pitEntry->GetIncoming ())
-//         {
-//           NS_LOG_DEBUG ("Send NACK for " << boost::cref (header->GetName ()) << " to " << boost::cref (*incoming.m_face));
-//           incoming.m_face->Send (packet->Copy ());
-
-//           m_outNacks (header, incoming.m_face);
-//         }
-  
-//       // All incoming interests cannot be satisfied. Remove them
-//       pitEntry->ClearIncoming ();
-
-//       // Remove also outgoing
-//       pitEntry->ClearOutgoing ();
-  
-//       // Set pruning timout on PIT entry (instead of deleting the record)
-//       m_pit->MarkErased (pitEntry);
-//     }
-// }
-
+} //namespace ndn
 } //namespace ns3