A Discrete-Event Network Simulator
API
ipv6-address-helper-test-suite.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2012 University of Washington
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation;
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16  */
17 
18 #include "ns3/internet-stack-helper.h"
19 #include "ns3/ipv4-address-helper.h"
20 #include "ns3/ipv6-address-generator.h"
21 #include "ns3/ipv6-address-helper.h"
22 #include "ns3/log.h"
23 #include "ns3/net-device-container.h"
24 #include "ns3/node-container.h"
25 #include "ns3/simple-net-device.h"
26 #include "ns3/test.h"
27 
28 using namespace ns3;
29 
36 {
37  public:
39  ~IpAddressHelperTestCasev6() override;
40 
41  private:
42  void DoRun() override;
43  void DoTeardown() override;
44 };
45 
47  : TestCase("IpAddressHelper Ipv6 test case")
48 {
49 }
50 
52 {
53 }
54 
55 void
57 {
59  Ipv6Address ipAddr1;
60  ipAddr1 = ip1.NewAddress();
61  // Ipv6AddressHelper that is unconfigured
62  NS_TEST_ASSERT_MSG_EQ(ipAddr1, Ipv6Address("2001:db8::1"), "Ipv6AddressHelper failure");
63  ipAddr1 = ip1.NewAddress();
64  NS_TEST_ASSERT_MSG_EQ(ipAddr1, Ipv6Address("2001:db8::2"), "Ipv6AddressHelper failure");
65  ip1.NewNetwork();
66  ipAddr1 = ip1.NewAddress();
67  NS_TEST_ASSERT_MSG_EQ(ipAddr1,
68  Ipv6Address("2001:db8:0:1:0:0:0:1"),
69  "Ipv6AddressHelper failure");
70 
71  // Reset
72  ip1.SetBase(Ipv6Address("2001:db81::"), Ipv6Prefix(32), Ipv6Address("::1"));
73  ipAddr1 = ip1.NewAddress();
74  NS_TEST_ASSERT_MSG_EQ(ipAddr1, Ipv6Address("2001:db81::1"), "Ipv6AddressHelper failure");
75  // Skip a few addresses
76  ip1.SetBase(Ipv6Address("2001:db81::"), Ipv6Prefix(32), Ipv6Address("::15"));
77  ipAddr1 = ip1.NewAddress();
78  NS_TEST_ASSERT_MSG_EQ(ipAddr1, Ipv6Address("2001:db81::15"), "Ipv6AddressHelper failure");
79  ipAddr1 = ip1.NewAddress();
80  NS_TEST_ASSERT_MSG_EQ(ipAddr1, Ipv6Address("2001:db81::16"), "Ipv6AddressHelper failure");
81  // Skip a some more addresses
82  ip1.SetBase(Ipv6Address("2001:db81::"), Ipv6Prefix(32), Ipv6Address("::ff"));
83  ipAddr1 = ip1.NewAddress();
84  NS_TEST_ASSERT_MSG_EQ(ipAddr1, Ipv6Address("2001:db81::ff"), "Ipv6AddressHelper failure");
85  ipAddr1 = ip1.NewAddress();
86  NS_TEST_ASSERT_MSG_EQ(ipAddr1, Ipv6Address("2001:db81::100"), "Ipv6AddressHelper failure");
87  // Increment network
88  ip1.NewNetwork();
89  ipAddr1 = ip1.NewAddress();
90  NS_TEST_ASSERT_MSG_EQ(ipAddr1, Ipv6Address("2001:db82::ff"), "Ipv6AddressHelper failure");
91 
92  // Reset
93  ip1.SetBase(Ipv6Address("2001:dddd::"), Ipv6Prefix(64), Ipv6Address("::1"));
94  ipAddr1 = ip1.NewAddress(); // ::1
95  ipAddr1 = ip1.NewAddress(); // ::2
96  ipAddr1 = ip1.NewAddress(); // ::3
97  ip1.NewNetwork(); // 0:1
98  ip1.NewNetwork(); // 0:2
99  ipAddr1 = ip1.NewAddress(); // ::1 again
100  NS_TEST_ASSERT_MSG_EQ(ipAddr1, Ipv6Address("2001:dddd:0:2::1"), "Ipv6AddressHelper failure");
101 
102  // Set again
103  ip1.SetBase(Ipv6Address("2001:db82::"), Ipv6Prefix(32));
104  ipAddr1 = ip1.NewAddress();
105  NS_TEST_ASSERT_MSG_EQ(ipAddr1, Ipv6Address("2001:db82::1"), "Ipv6AddressHelper failure");
106 
107  // Reset again
108  ip1.SetBase(Ipv6Address("2001:f00d:cafe:00ff::"), Ipv6Prefix(64), Ipv6Address("::1"));
109  ip1.NewNetwork(); // "2001:f00d:cafe:0100::"
110  ipAddr1 = ip1.NewAddress(); // ::1 again
111  NS_TEST_ASSERT_MSG_EQ(ipAddr1,
112  Ipv6Address("2001:f00d:cafe:0100::1"),
113  "Ipv6AddressHelper failure");
114 
115  // Test container assignment
116  NodeContainer n;
117  n.Create(2);
118 
119  /* Install IPv4/IPv6 stack */
120  InternetStackHelper internetv6;
121  internetv6.SetIpv4StackInstall(false);
122  internetv6.Install(n);
123 
125  Ptr<SimpleNetDevice> s1 = CreateObject<SimpleNetDevice>();
126  s1->SetAddress(Mac48Address::Allocate());
127  n.Get(0)->AddDevice(s1);
128 
129  Ptr<SimpleNetDevice> s2 = CreateObject<SimpleNetDevice>();
130  s2->SetAddress(Mac48Address::Allocate());
131  n.Get(1)->AddDevice(s2);
132  d.Add(s1);
133  d.Add(s2);
134 
135  ip1.SetBase(Ipv6Address("2001:00aa::"), Ipv6Prefix(56));
137  ic = ip1.Assign(d);
138 
139  // Check that d got intended addresses
140  Ipv6InterfaceAddress d1addr;
141  Ipv6InterfaceAddress d2addr;
142  // Interface 0 is loopback, interface 1 is s1, and the 0th addr is linklocal
143  // so we look at address (1,1)
144  d1addr = n.Get(0)->GetObject<Ipv6>()->GetAddress(1, 1);
146  Ipv6Address("2001:00aa:0000:0000:0200:00ff:fe00:0001"),
147  "Ipv6AddressHelper failure");
148  // Look also at the interface container (device 0, address 1)
150  Ipv6Address("2001:00aa:0000:0000:0200:00ff:fe00:0001"),
151  "Ipv6AddressHelper failure");
152  d2addr = n.Get(1)->GetObject<Ipv6>()->GetAddress(1, 1);
153  // Look at second container
155  Ipv6Address("2001:00aa:0000:0000:0200:00ff:fe00:0002"),
156  "Ipv6AddressHelper failure");
157  // Look also at the interface container (device 0, address 1)
159  Ipv6Address("2001:00aa:0000:0000:0200:00ff:fe00:0002"),
160  "Ipv6AddressHelper failure");
161 }
162 
163 void
165 {
167  Simulator::Destroy();
168 }
169 
176 {
177  public:
179 };
180 
182  : TestSuite("ipv6-address-helper", UNIT)
183 {
184  AddTestCase(new IpAddressHelperTestCasev6, TestCase::QUICK);
185 }
186 
void DoRun() override
Implementation to actually run this TestCase.
void DoTeardown() override
Implementation to do any local setup required for this TestCase.
aggregate IP/TCP/UDP functionality to existing Nodes.
void SetIpv4StackInstall(bool enable)
Enable/disable IPv4 stack install.
void Install(std::string nodeName) const
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
Helper class to auto-assign global IPv6 unicast addresses.
Ipv6Address NewAddress(Address addr)
Allocate a new Ipv6Address.
void SetBase(Ipv6Address network, Ipv6Prefix prefix, Ipv6Address base=Ipv6Address("::1"))
Set the base network number, network prefix, and base interface ID.
void NewNetwork()
Allocate a new network.
Ipv6InterfaceContainer Assign(const NetDeviceContainer &c)
Allocate an Ipv6InterfaceContainer with auto-assigned addresses.
Describes an IPv6 address.
Definition: ipv6-address.h:49
Access to the IPv6 forwarding table, interfaces, and configuration.
Definition: ipv6.h:82
IPv6 address associated with an interface.
Ipv6Address GetAddress() const
Get the IPv6 address.
Keep track of a set of IPv6 interfaces.
Ipv6Address GetAddress(uint32_t i, uint32_t j) const
Get the address for the specified index.
Describes an IPv6 prefix.
Definition: ipv6-address.h:455
holds a vector of ns3::NetDevice pointers
void Add(NetDeviceContainer other)
Append the contents of another NetDeviceContainer to the end of this container.
keep track of a set of node pointers.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
uint32_t AddDevice(Ptr< NetDevice > device)
Associate a NetDevice to this node.
Definition: node.cc:138
Ptr< T > GetObject() const
Get a pointer to the requested aggregated Object.
Definition: object.h:471
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:77
encapsulates test code
Definition: test.h:1060
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Definition: test.cc:301
A suite of tests to run.
Definition: test.h:1256
void Reset()
Reset the initial value of every attribute as well as the value of every global to what they were bef...
Definition: config.cc:855
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
Definition: test.h:144
static Ipv6AddressHelperTestSuite ipv6AddressHelperTestSuite
Static variable for test initialization.
Every class exported by the ns3 library is enclosed in the ns3 namespace.