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)