A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
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
28using namespace ns3;
29
36{
37 public:
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
55void
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();
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
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
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
163void
165{
168}
169
176{
177 public:
179};
180
182 : TestSuite("ipv6-address-helper", Type::UNIT)
183{
184 AddTestCase(new IpAddressHelperTestCasev6, TestCase::Duration::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...
static void Reset()
Reset the networks and Ipv6Address to zero.
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
static Mac48Address Allocate()
Allocate a new Mac48Address.
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:522
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:77
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
Definition: simulator.cc:142
encapsulates test code
Definition: test.h:1061
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
Definition: test.cc:301
A suite of tests to run.
Definition: test.h:1268
Type
Type of test.
Definition: test.h:1275
#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:145
static Ipv6AddressHelperTestSuite ipv6AddressHelperTestSuite
Static variable for test initialization.
Every class exported by the ns3 library is enclosed in the ns3 namespace.