A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Documentation ▼
Installation
Manual
Models
Contributing
Wiki
Development ▼
API Docs
Issue Tracker
Merge Requests
API
Loading...
Searching...
No Matches
ipv6-address-helper.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2008-2009 Strasbourg University
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
* Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
18
* modified by Tom Henderson for ns-3.14 release
19
*/
20
21
#ifndef IPV6_ADDRESS_HELPER_H
22
#define IPV6_ADDRESS_HELPER_H
23
24
#include "
ipv6-interface-container.h
"
25
26
#include "ns3/ipv6-address.h"
27
#include "ns3/net-device-container.h"
28
29
#include <vector>
30
31
namespace
ns3
32
{
33
34
/**
35
* \ingroup ipv6Helpers
36
*
37
* \brief Helper class to auto-assign global IPv6 unicast addresses
38
*
39
* Assign global unicast IPv6 addresses based on \RFC{4291} definition.
40
*
41
* | n bits | 64-n bits | 64 bits |
42
* +-------------------------+-----------+----------------------------+
43
* | global routing prefix | subnet ID | interface ID |
44
* +-------------------------+-----------+----------------------------+
45
* <-------------network---------------->
46
*
47
* 11111111111111111111111111000000000000
48
* <---prefix of length n--->
49
*
50
* This class handles the following quantities.
51
* 1) The "network" which covers the 64 bit union of the global routing
52
* prefix and the subnet ID
53
* 2) the "prefix" length "n" which demarcates the global routing prefix
54
* and the subnet ID
55
* 3) the "base" which is the initial 64-bit interface ID.
56
*
57
* The names "network", "prefix" and "base" are chosen to be consistent
58
* with a similar address helper for IPv4.
59
*
60
* This helper class allows users to set or reset the network and
61
* interface components, and call "NewAddress ()" to sequentially increment
62
* the interface ID, and call "NewNetwork ()" to allocate a new subnet
63
* (until the subnet ID quantity rolls over). A call to NewNetwork ()
64
* that causes the subnet ID to roll over will trigger an assertion.
65
*
66
* By default, the prefix is 32 bits and the network is '2001:db8::/32'
67
* (\RFC{5156} section 2.6 Documentation prefix). The prefix may range
68
* from length 0 to 64, with the value 64 having a special meaning that
69
* no subnet ID boundary is enforced (equivalent to value 0).
70
*
71
* There are two variants of interface ID supported (\RFC{4291}, Sec. 2.5.1)
72
* The default is a "local" scope, but a "universal" scoped ID may be
73
* formed by calling "NewAddress (Address addr)" with a 48-bit MAC address.
74
* If this method is called, the addressed returned will include a
75
* modified EUI-64-format identifier created from the MAC address as
76
* specified in \RFC{4291}.
77
*
78
* BEWARE: the underlying implementation acts as a Singleton.
79
* In other terms, two different instances of Ipv6AddressHelper will
80
* pick IPv6 numbers from the same pool. Changing the network in one of them
81
* will also change the network in the other instances.
82
*/
83
class
Ipv6AddressHelper
84
{
85
public
:
86
/**
87
* \brief Constructor.
88
*/
89
Ipv6AddressHelper
();
90
91
/**
92
* \brief Constructor.
93
* \param network The IPv6 network
94
* \param prefix The prefix
95
* \param base The base interface ID
96
*/
97
Ipv6AddressHelper
(
Ipv6Address
network,
98
Ipv6Prefix
prefix,
99
Ipv6Address
base =
Ipv6Address
(
"::1"
));
100
101
/**
102
* \brief Set the base network number, network prefix, and base interface ID
103
*
104
* \param network The IPv6 network
105
* \param prefix The prefix
106
* \param base The base interface ID
107
*/
108
void
SetBase
(
Ipv6Address
network,
Ipv6Prefix
prefix,
Ipv6Address
base =
Ipv6Address
(
"::1"
));
109
110
/**
111
* \brief Allocate a new network.
112
*
113
* This method will cause the subnet prefix to increment, for future
114
* network IDs, and resets the interface ID to the previously used
115
* base.
116
*/
117
void
NewNetwork
();
118
119
/**
120
* \brief Allocate a new Ipv6Address.
121
*
122
* If a Mac48Address is passed in, an Ipv6 autoconfigured address
123
* according to the current subnet prefix is returned. If something
124
* other than Mac48 address is passed in, the program will terminate.
125
*
126
* \param addr address used to generate the interface ID of the IPv6 address
127
* \return newly created Ipv6Address
128
*/
129
Ipv6Address
NewAddress
(
Address
addr);
130
131
/**
132
* \brief Allocate a new Ipv6Address with interface ID equal to the
133
* next one in the underlying generator.
134
*
135
* \return newly created Ipv6Address
136
*/
137
Ipv6Address
NewAddress
();
138
139
/**
140
* \brief Allocate an Ipv6InterfaceContainer with auto-assigned addresses.
141
* \param c netdevice container
142
* \return newly created Ipv6InterfaceContainer
143
*/
144
Ipv6InterfaceContainer
Assign
(
const
NetDeviceContainer
& c);
145
146
/**
147
* \brief Allocate an Ipv6InterfaceContainer, and control whether the
148
* interfaces have addresses auto-assigned to them
149
*
150
* \param c netdevice container
151
* \param withConfiguration a vector of values for which, for a
152
* given device, true : interface automatically addressed,
153
* false : no automatic address
154
* \return newly created Ipv6InterfaceContainer
155
*/
156
Ipv6InterfaceContainer
Assign
(
const
NetDeviceContainer
& c, std::vector<bool> withConfiguration);
157
158
/**
159
* \brief Allocate an Ipv6InterfaceContainer, and control whether the
160
* interfaces have addresses auto-assigned to them
161
*
162
* \param c netdevice container
163
* \param withConfiguration a vector of values for which, for a
164
* given device, true : interface automatically addressed,
165
* false : no automatic address
166
* \param onLink a vector of values for which, for a
167
* given device, true : on-link property added,
168
* false : network is not on-link
169
* Meaningful only if the address is automatically assigned.
170
* \return newly created Ipv6InterfaceContainer
171
*/
172
Ipv6InterfaceContainer
Assign
(
const
NetDeviceContainer
& c,
173
std::vector<bool> withConfiguration,
174
std::vector<bool> onLink);
175
176
/**
177
* \brief Allocate an Ipv6InterfaceContainer but do not assign any IPv6 addresses
178
*
179
* This method is used when IPv6 address assignment may occur later
180
* (such as dynamic address assignment)
181
*
182
* Equivalent to AssignWithoutAddress (c, std::vector<bool> of false);
183
*
184
* \param c netdevice container
185
* \return newly created Ipv6InterfaceContainer
186
*/
187
Ipv6InterfaceContainer
AssignWithoutAddress
(
const
NetDeviceContainer
& c);
188
189
/**
190
* \brief Allocate an Ipv6InterfaceContainer with auto-assigned addresses,
191
* but do not set the on-link property for the network.
192
*
193
* This method will assign a valid global address to the interface but
194
* the routing will not consider the network as "on-link".
195
*
196
* \param c netdevice container
197
* \return newly created Ipv6InterfaceContainer
198
*/
199
Ipv6InterfaceContainer
AssignWithoutOnLink
(
const
NetDeviceContainer
& c);
200
201
private
:
202
Ipv6Address
m_network
;
//!< network address
203
Ipv6Prefix
m_prefix
;
//!< prefix length
204
Ipv6Address
m_address
;
//!< host address
205
Ipv6Address
m_base
;
//!< host base address
206
};
207
208
}
/* namespace ns3 */
209
210
#endif
/* IPV6_ADDRESS_STATIC_H */
ns3::Address
a polymophic address class
Definition:
address.h:101
ns3::Ipv6AddressHelper
Helper class to auto-assign global IPv6 unicast addresses.
Definition:
ipv6-address-helper.h:84
ns3::Ipv6AddressHelper::AssignWithoutAddress
Ipv6InterfaceContainer AssignWithoutAddress(const NetDeviceContainer &c)
Allocate an Ipv6InterfaceContainer but do not assign any IPv6 addresses.
Definition:
ipv6-address-helper.cc:304
ns3::Ipv6AddressHelper::SetBase
void SetBase(Ipv6Address network, Ipv6Prefix prefix, Ipv6Address base=Ipv6Address("::1"))
Set the base network number, network prefix, and base interface ID.
Definition:
ipv6-address-helper.cc:70
ns3::Ipv6AddressHelper::m_base
Ipv6Address m_base
host base address
Definition:
ipv6-address-helper.h:205
ns3::Ipv6AddressHelper::NewNetwork
void NewNetwork()
Allocate a new network.
Definition:
ipv6-address-helper.cc:179
ns3::Ipv6AddressHelper::m_network
Ipv6Address m_network
network address
Definition:
ipv6-address-helper.h:202
ns3::Ipv6AddressHelper::m_address
Ipv6Address m_address
host address
Definition:
ipv6-address-helper.h:204
ns3::Ipv6AddressHelper::AssignWithoutOnLink
Ipv6InterfaceContainer AssignWithoutOnLink(const NetDeviceContainer &c)
Allocate an Ipv6InterfaceContainer with auto-assigned addresses, but do not set the on-link property ...
Definition:
ipv6-address-helper.cc:312
ns3::Ipv6AddressHelper::m_prefix
Ipv6Prefix m_prefix
prefix length
Definition:
ipv6-address-helper.h:203
ns3::Ipv6AddressHelper::Assign
Ipv6InterfaceContainer Assign(const NetDeviceContainer &c)
Allocate an Ipv6InterfaceContainer with auto-assigned addresses.
Definition:
ipv6-address-helper.cc:220
ns3::Ipv6AddressHelper::Ipv6AddressHelper
Ipv6AddressHelper()
Constructor.
Definition:
ipv6-address-helper.cc:42
ns3::Ipv6AddressHelper::NewAddress
Ipv6Address NewAddress()
Allocate a new Ipv6Address with interface ID equal to the next one in the underlying generator.
Definition:
ipv6-address-helper.cc:129
ns3::Ipv6Address
Describes an IPv6 address.
Definition:
ipv6-address.h:49
ns3::Ipv6InterfaceContainer
Keep track of a set of IPv6 interfaces.
Definition:
ipv6-interface-container.h:40
ns3::Ipv6Prefix
Describes an IPv6 prefix.
Definition:
ipv6-address.h:455
ns3::NetDeviceContainer
holds a vector of ns3::NetDevice pointers
Definition:
net-device-container.h:43
ipv6-interface-container.h
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
src
internet
helper
ipv6-address-helper.h
Generated on Tue May 28 2024 23:35:38 for ns-3 by
1.9.6