32 #include "dsr-maintain-buff.h" 
   35 #include "ns3/ipv4-route.h" 
   36 #include "ns3/socket.h" 
   45 MaintainBuffer::GetSize ()
 
   48   return m_maintainBuffer.size ();
 
   52 MaintainBuffer::Enqueue (MaintainBuffEntry & entry)
 
   55   for (std::vector<MaintainBuffEntry>::const_iterator i = m_maintainBuffer.begin (); i
 
   56        != m_maintainBuffer.end (); ++i)
 
   63       if ((i->GetNextHop () == entry.GetNextHop ()) && (i->GetOurAdd () == entry.GetOurAdd ()) && (i->GetSrc () == entry.GetSrc ())
 
   64           && (i->GetDst () == entry.GetDst ()) && (i->GetAckId () == entry.GetAckId ()) && (i->GetSegsLeft () == entry.GetSegsLeft ()))
 
   71   entry.SetExpireTime (m_maintainBufferTimeout);
 
   72   if (m_maintainBuffer.size () >= m_maxLen)
 
   75       m_maintainBuffer.erase (m_maintainBuffer.begin ());        
 
   77   m_maintainBuffer.push_back (entry);
 
   82 MaintainBuffer::DropPacketWithNextHop (Ipv4Address nextHop)
 
   86   NS_LOG_INFO (
"Drop Packet With next hop " << nextHop);
 
   87   m_maintainBuffer.erase (std::remove_if (m_maintainBuffer.begin (), m_maintainBuffer.end (),
 
   88                                           std::bind2nd (std::ptr_fun (MaintainBuffer::IsEqual), nextHop)), m_maintainBuffer.end ());
 
   92 MaintainBuffer::Dequeue (Ipv4Address nextHop, MaintainBuffEntry & entry)
 
   95   for (std::vector<MaintainBuffEntry>::iterator i = m_maintainBuffer.begin (); i != m_maintainBuffer.end (); ++i)
 
   97       if (i->GetNextHop () == nextHop)
 
  100           m_maintainBuffer.erase (i);
 
  101           NS_LOG_DEBUG (
"Packet size while dequeuing " << entry.GetPacket ()->GetSize ());
 
  109 MaintainBuffer::Find (Ipv4Address nextHop)
 
  111   for (std::vector<MaintainBuffEntry>::const_iterator i = m_maintainBuffer.begin (); i
 
  112        != m_maintainBuffer.end (); ++i)
 
  114       if (i->GetNextHop () == nextHop)
 
  116           NS_LOG_DEBUG (
"Found the packet in maintenance buffer");
 
  124 MaintainBuffer::AllEqual (MaintainBuffEntry & entry)
 
  126   for (std::vector<MaintainBuffEntry>::iterator i = m_maintainBuffer.begin (); i
 
  127        != m_maintainBuffer.end (); ++i)
 
  133       if ((i->GetOurAdd () == entry.GetOurAdd ()) && (i->GetNextHop () == entry.GetNextHop ())
 
  134           && (i->GetSrc () == entry.GetSrc ()) && (i->GetDst () == entry.GetDst ())
 
  135           && (i->GetAckId () == entry.GetAckId ()) && (i->GetSegsLeft () == entry.GetSegsLeft ()))
 
  137           m_maintainBuffer.erase (i);   
 
  145 MaintainBuffer::NetworkEqual (MaintainBuffEntry & entry)
 
  147   for (std::vector<MaintainBuffEntry>::iterator i = m_maintainBuffer.begin (); i
 
  148        != m_maintainBuffer.end (); ++i)
 
  154       if ((i->GetOurAdd () == entry.GetOurAdd ()) && (i->GetNextHop () == entry.GetNextHop ())
 
  155           && (i->GetSrc () == entry.GetSrc ()) && (i->GetDst () == entry.GetDst ())
 
  156           && (i->GetAckId () == entry.GetAckId ()))
 
  158           m_maintainBuffer.erase (i);   
 
  166 MaintainBuffer::PromiscEqual (MaintainBuffEntry & entry)
 
  168   NS_LOG_DEBUG (
"The maintenance buffer size " << m_maintainBuffer.size ());
 
  169   for (std::vector<MaintainBuffEntry>::iterator i = m_maintainBuffer.begin (); i
 
  170        != m_maintainBuffer.end (); ++i)
 
  177       if ((i->GetSrc () == entry.GetSrc ()) && (i->GetDst () == entry.GetDst ())
 
  178           && (i->GetSegsLeft () == entry.GetSegsLeft ()) && (i->GetAckId () == entry.GetAckId ())
 
  181           m_maintainBuffer.erase (i);   
 
  189 MaintainBuffer::LinkEqual (MaintainBuffEntry & entry)
 
  191   NS_LOG_DEBUG (
"The maintenance buffer size " << m_maintainBuffer.size ());
 
  192   for (std::vector<MaintainBuffEntry>::iterator i = m_maintainBuffer.begin (); i
 
  193        != m_maintainBuffer.end (); ++i)
 
  200       if ((i->GetSrc () == entry.GetSrc ()) && (i->GetDst () == entry.GetDst ()) && (i->GetOurAdd () == entry.GetOurAdd ())
 
  201           && (i->GetNextHop () == entry.GetNextHop ())
 
  204           m_maintainBuffer.erase (i);   
 
  214   operator() (MaintainBuffEntry 
const & e)
 const 
  217     return (e.GetExpireTime () < 
Seconds (0));
 
  222 MaintainBuffer::Purge ()
 
  226   m_maintainBuffer.erase (std::remove_if (m_maintainBuffer.begin (), m_maintainBuffer.end (), pred),
 
  227                           m_maintainBuffer.end ());
 
#define NS_LOG_FUNCTION(parameters)
 
#define NS_LOG_COMPONENT_DEFINE(name)
 
Time Seconds(double seconds)
create ns3::Time instances in units of seconds. 
 
#define NS_LOG_DEBUG(msg)