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

(-)a/src/internet/model/arp-cache.cc (+60 lines)
 Lines 25-30    Link Here 
25
#include "ns3/node.h"
25
#include "ns3/node.h"
26
#include "ns3/trace-source-accessor.h"
26
#include "ns3/trace-source-accessor.h"
27
#include "ns3/names.h"
27
#include "ns3/names.h"
28
#include "ns3/node-list.h"
29
#include "ns3/ipv4-l3-protocol.h"
30
#include "ns3/object-vector.h"
31
#include "ns3/pointer.h"
28
32
29
#include "arp-cache.h"
33
#include "arp-cache.h"
30
#include "arp-header.h"
34
#include "arp-header.h"
 Lines 535-539    Link Here 
535
  m_retries = 0;
539
  m_retries = 0;
536
}
540
}
537
541
542
void
543
ArpCache::PopulateArpCache ()
544
{
545
  Ptr<Packet> dummy = Create<Packet> ();
546
  Ptr<ArpCache> arp = CreateObject<ArpCache> ();
547
  arp->SetAliveTimeout (Seconds (3600 * 24 * 365));
548
  for (NodeList::Iterator i = NodeList::Begin (); i != NodeList::End ();
549
++i)
550
    {
551
      Ptr<Ipv4L3Protocol> ip = (*i)->GetObject<Ipv4L3Protocol> ();
552
      NS_ASSERT (ip != 0);
553
      ObjectVectorValue interfaces;
554
      ip->GetAttribute ("InterfaceList", interfaces);
555
      for (ObjectVectorValue::Iterator j = interfaces.Begin (); j !=
556
interfaces.End (); j++)
557
        {
558
          Ptr<Ipv4Interface> ipIface =
559
j->second->GetObject<Ipv4Interface> ();
560
          NS_ASSERT (ipIface != 0);
561
          Ptr<NetDevice> device = ipIface->GetDevice ();
562
          NS_ASSERT (device != 0);
563
          Mac48Address addr = Mac48Address::ConvertFrom
564
(device->GetAddress ());
565
          for (uint32_t k = 0; k < ipIface->GetNAddresses (); k ++)
566
            {
567
              Ipv4Address ipAddr = ipIface->GetAddress (k).GetLocal ();
568
              if (ipAddr == Ipv4Address::GetLoopback ())
569
                {
570
                  continue;
571
                }
572
              Ipv4Header ipHeader;
573
              ArpCache::Entry *entry = arp->Add (ipAddr);
574
              entry->MarkWaitReply (Ipv4PayloadHeaderPair(dummy,ipHeader));
575
              entry->MarkAlive (addr);
576
              entry->ClearPendingPacket();
577
              entry->MarkPermanent ();
578
            }
579
        }
580
    }
581
  for (NodeList::Iterator i = NodeList::Begin (); i != NodeList::End ();
582
++i)
583
    {
584
      Ptr<Ipv4L3Protocol> ip = (*i)->GetObject<Ipv4L3Protocol> ();
585
      NS_ASSERT (ip != 0);
586
      ObjectVectorValue interfaces;
587
      ip->GetAttribute ("InterfaceList", interfaces);
588
      for (ObjectVectorValue::Iterator j = interfaces.Begin (); j !=
589
interfaces.End (); j ++)
590
        {
591
          Ptr<Ipv4Interface> ipIface =
592
j->second->GetObject<Ipv4Interface> ();
593
          ipIface->SetAttribute ("ArpCache", PointerValue (arp));
594
        }
595
    }
596
}
597
538
} // namespace ns3
598
} // namespace ns3
539
599
(-)a/src/internet/model/arp-cache.h (+6 lines)
 Lines 173-178    Link Here 
173
   */
173
   */
174
  typedef std::pair<Ptr<Packet>, Ipv4Header> Ipv4PayloadHeaderPair;
174
  typedef std::pair<Ptr<Packet>, Ipv4Header> Ipv4PayloadHeaderPair;
175
175
176
177
  /**
178
   * \brief Statically populate ARP cache at all nodes.
179
   */
180
  static void PopulateArpCache ();
181
176
  /**
182
  /**
177
   * \brief A record that that holds information about an ArpCache entry
183
   * \brief A record that that holds information about an ArpCache entry
178
   */
184
   */

Return to bug 187