View | Details | Raw Unified | Return to bug 2145
Collapse All | Expand All

(-)a/src/internet/model/arp-cache.cc (-4 / +24 lines)
 Lines 99-105    Link Here 
99
ArpCache::DoDispose (void)
99
ArpCache::DoDispose (void)
100
{
100
{
101
  NS_LOG_FUNCTION (this);
101
  NS_LOG_FUNCTION (this);
102
  Flush ();
102
  for (CacheI i = m_arpCache.begin (); i != m_arpCache.end (); i++)
103
    {
104
      delete (*i).second;
105
    }
106
  m_arpCache.erase (m_arpCache.begin (), m_arpCache.end ());
107
  if (m_waitReplyTimer.IsRunning ())
108
    {
109
      NS_LOG_LOGIC ("Stopping WaitReplyTimer at " << Simulator::Now ().GetSeconds () << " due to ArpCache flush");
110
      m_waitReplyTimer.Cancel ();
111
    }
103
  m_device = 0;
112
  m_device = 0;
104
  m_interface = 0;
113
  m_interface = 0;
105
  if (!m_waitReplyTimer.IsRunning ())
114
  if (!m_waitReplyTimer.IsRunning ())
 Lines 241-251    Link Here 
241
ArpCache::Flush (void)
250
ArpCache::Flush (void)
242
{
251
{
243
  NS_LOG_FUNCTION (this);
252
  NS_LOG_FUNCTION (this);
253
  std::vector<Ipv4Address> keysToErase;
254
  // First delete the entry
244
  for (CacheI i = m_arpCache.begin (); i != m_arpCache.end (); i++) 
255
  for (CacheI i = m_arpCache.begin (); i != m_arpCache.end (); i++) 
245
    {
256
    {
246
      delete (*i).second;
257
      if (!(*i).second->IsPermanent ())
258
         {
259
            delete (*i).second;
260
            keysToErase.push_back ((*i).first);
261
         }
247
    }
262
    }
248
  m_arpCache.erase (m_arpCache.begin (), m_arpCache.end ());
263
  // Now erase the entries from the cache.  Doing it outside of the above 
264
  // for loop since erasing invalidates the iterator
265
  for(std::vector<Ipv4Address>::size_type i = 0; i != keysToErase.size(); i++) 
266
    {
267
      m_arpCache.erase (keysToErase[i]);
268
    }
249
  if (m_waitReplyTimer.IsRunning ())
269
  if (m_waitReplyTimer.IsRunning ())
250
    {
270
    {
251
      NS_LOG_LOGIC ("Stopping WaitReplyTimer at " << Simulator::Now ().GetSeconds () << " due to ArpCache flush");
271
      NS_LOG_LOGIC ("Stopping WaitReplyTimer at " << Simulator::Now ().GetSeconds () << " due to ArpCache flush");
 Lines 388-394    Link Here 
388
void
408
void
389
ArpCache::Entry::MarkPermanent (Address macAddress)
409
ArpCache::Entry::MarkPermanent (Address macAddress)
390
{
410
{
391
  NS_LOG_FUNCTION (this);
411
  NS_LOG_FUNCTION (this << macAddress);
392
  m_macAddress = macAddress;
412
  m_macAddress = macAddress;
393
  m_state = PERMANENT;
413
  m_state = PERMANENT;
394
  ClearRetries ();
414
  ClearRetries ();

Return to bug 2145