1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2008 INRIA
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  *
18  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
19  */
20 
21 #include "ipv4-interface-container.h"
22 #include "ns3/node-list.h"
23 #include "ns3/names.h"
24 
25 namespace ns3 {
26 
Ipv4InterfaceContainer()27 Ipv4InterfaceContainer::Ipv4InterfaceContainer ()
28 {
29 }
30 
31 void
Add(const Ipv4InterfaceContainer & other)32 Ipv4InterfaceContainer::Add (const Ipv4InterfaceContainer& other)
33 {
34   for (InterfaceVector::const_iterator i = other.m_interfaces.begin (); i != other.m_interfaces.end (); i++)
35     {
36       m_interfaces.push_back (*i);
37     }
38 }
39 
40 Ipv4InterfaceContainer::Iterator
Begin(void) const41 Ipv4InterfaceContainer::Begin (void) const
42 {
43   return m_interfaces.begin ();
44 }
45 
46 Ipv4InterfaceContainer::Iterator
End(void) const47 Ipv4InterfaceContainer::End (void) const
48 {
49   return m_interfaces.end ();
50 }
51 
52 uint32_t
GetN(void) const53 Ipv4InterfaceContainer::GetN (void) const
54 {
55   return m_interfaces.size ();
56 }
57 
58 Ipv4Address
GetAddress(uint32_t i,uint32_t j) const59 Ipv4InterfaceContainer::GetAddress (uint32_t i, uint32_t j) const
60 {
61   Ptr<Ipv4> ipv4 = m_interfaces[i].first;
62   uint32_t interface = m_interfaces[i].second;
63   return ipv4->GetAddress (interface, j).GetLocal ();
64 }
65 
66 void
SetMetric(uint32_t i,uint16_t metric)67 Ipv4InterfaceContainer::SetMetric (uint32_t i, uint16_t metric)
68 {
69   Ptr<Ipv4> ipv4 = m_interfaces[i].first;
70   uint32_t interface = m_interfaces[i].second;
71   ipv4->SetMetric (interface, metric);
72 }
73 void
Add(Ptr<Ipv4> ipv4,uint32_t interface)74 Ipv4InterfaceContainer::Add (Ptr<Ipv4> ipv4, uint32_t interface)
75 {
76   m_interfaces.push_back (std::make_pair (ipv4, interface));
77 }
Add(std::pair<Ptr<Ipv4>,uint32_t> a)78 void Ipv4InterfaceContainer::Add (std::pair<Ptr<Ipv4>, uint32_t> a)
79 {
80   Add (a.first, a.second);
81 }
82 void
Add(std::string ipv4Name,uint32_t interface)83 Ipv4InterfaceContainer::Add (std::string ipv4Name, uint32_t interface)
84 {
85   Ptr<Ipv4> ipv4 = Names::Find<Ipv4> (ipv4Name);
86   m_interfaces.push_back (std::make_pair (ipv4, interface));
87 }
88 
89 std::pair<Ptr<Ipv4>, uint32_t>
Get(uint32_t i) const90 Ipv4InterfaceContainer::Get (uint32_t i) const
91 {
92   return m_interfaces[i];
93 }
94 
95 
96 } // namespace ns3
97