A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
ipv6-interface-address.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2007-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 */
19
20#ifndef IPV6_INTERFACE_ADDRESS_H
21#define IPV6_INTERFACE_ADDRESS_H
22
23#include "ns3/ipv6-address.h"
24
25#include <stdint.h>
26
27namespace ns3
28{
29
30/**
31 * \ingroup address
32 * \ingroup ipv6
33 *
34 * \brief IPv6 address associated with an interface.
35 */
37{
38 public:
39 /**
40 * \enum State_e
41 * \brief State of an address associated with an interface.
42 */
44 {
45 TENTATIVE, /**< Address is tentative, no packet can be sent unless DAD finished */
46 DEPRECATED, /**< Address is deprecated and should not be used */
47 PREFERRED, /**< Preferred address */
48 PERMANENT, /**< Permanent address */
49 HOMEADDRESS, /**< Address is a HomeAddress */
50 TENTATIVE_OPTIMISTIC, /**< Address is tentative but we are optimistic so we can send packet
51 even if DAD is not yet finished */
52 INVALID, /**< Invalid state (after a DAD failed) */
53 };
54
55 /**
56 * \enum Scope_e
57 * \brief Address scope.
58 */
60 {
61 HOST, /**< Localhost (::1/128) */
62 LINKLOCAL, /**< Link-local address (fe80::/64) */
63 GLOBAL, /**< Global address (2000::/3) */
64 };
65
66 /**
67 * \brief Default constructor.
68 */
70
71 /**
72 * \brief Constructor. Prefix is 64 by default.
73 * \param address the IPv6 address to set
74 */
76
77 /**
78 * \brief Constructor.
79 * \param address IPv6 address to set
80 * \param prefix IPv6 prefix
81 */
83
84 /**
85 * \brief Constructor.
86 * \param address IPv6 address to set
87 * \param prefix IPv6 prefix
88 * \param onLink on-link property
89 */
90 Ipv6InterfaceAddress(Ipv6Address address, Ipv6Prefix prefix, bool onLink);
91
92 /**
93 * \brief Copy constructor.
94 * \param o object to copy
95 */
97
98 /**
99 * \brief Destructor.
100 */
102
103 /**
104 * \brief Set IPv6 address (and scope).
105 * \param address IPv6 address to set
106 */
107 void SetAddress(Ipv6Address address);
108
109 /**
110 * \brief Get the IPv6 address.
111 * \return IPv6 address
112 */
113 Ipv6Address GetAddress() const;
114
115 /**
116 * \brief Get the IPv6 prefix.
117 * \return IPv6 prefix
118 */
119 Ipv6Prefix GetPrefix() const;
120
121 /**
122 * \brief Set the state.
123 * \param state the state
124 */
126
127 /**
128 * \brief Get the address state.
129 * \return address state
130 */
132
133 /**
134 * \brief Set the scope.
135 * \param scope the scope of address
136 */
138
139 /**
140 * \brief Get address scope.
141 * \return scope
142 */
144
145 /**
146 * \brief Checks if the address is in the same subnet.
147 * \param b the address to check
148 * \return true if the address is in the same subnet.
149 */
150 bool IsInSameSubnet(Ipv6Address b) const;
151
152 /**
153 * \brief Set the latest DAD probe packet UID.
154 * \param uid packet uid
155 */
156 void SetNsDadUid(uint32_t uid);
157
158 /**
159 * \brief Get the latest DAD probe packet UID.
160 * \return uid
161 */
162 uint32_t GetNsDadUid() const;
163
164 /**
165 * \brief Get the on-link property.
166 * \param onLink the on-link property
167 */
168 void SetOnLink(bool onLink);
169
170 /**
171 * \brief Get the on-link property.
172 * \return on-link flag
173 */
174 bool GetOnLink() const;
175
176#if 0
177 /**
178 * \brief Start the DAD timer.
179 * \param interface interface
180 */
181 void StartDadTimer (Ptr<Ipv6Interface> interface);
182
183 /**
184 * \brief Stop the DAD timer.
185 */
186 void StopDadTimer ();
187#endif
188
189 private:
190 /**
191 * \brief The IPv6 address.
192 */
194
195 /**
196 * \brief The IPv6 prefix.
197 */
199
200 /**
201 * \brief State of the address.
202 */
204
205 /**
206 * \brief Scope of the address.
207 */
209
210 /**
211 * \brief The address belongs to an on-link network.
212 */
214
215 /**
216 * \brief Equal to operator.
217 *
218 * \param a the first operand
219 * \param b the first operand
220 * \returns true if the operands are equal
221 */
222 friend bool operator==(const Ipv6InterfaceAddress& a, const Ipv6InterfaceAddress& b);
223
224 /**
225 * \brief Not equal to operator.
226 *
227 * \param a the first operand
228 * \param b the first operand
229 * \returns true if the operands are not equal
230 */
231 friend bool operator!=(const Ipv6InterfaceAddress& a, const Ipv6InterfaceAddress& b);
232
233 /**
234 * \brief Last DAD probe packet UID.
235 */
237};
238
239/**
240 * \brief Stream insertion operator.
241 *
242 * \param os the reference to the output stream
243 * \param addr the Ipv6InterfaceAddress
244 * \returns the reference to the output stream
245 */
246std::ostream& operator<<(std::ostream& os, const Ipv6InterfaceAddress& addr);
247
248/* follow Ipv4InterfaceAddress way, maybe not inline them */
249inline bool
251{
252 return (a.m_address == b.m_address && a.m_prefix == b.m_prefix && a.m_state == b.m_state &&
253 a.m_scope == b.m_scope);
254}
255
256inline bool
258{
259 return (a.m_address != b.m_address || a.m_prefix != b.m_prefix || a.m_state != b.m_state ||
260 a.m_scope != b.m_scope);
261}
262
263} /* namespace ns3 */
264
265#endif /* IPV6_INTERFACE_ADDRESS_H */
Describes an IPv6 address.
Definition: ipv6-address.h:49
IPv6 address associated with an interface.
void SetScope(Ipv6InterfaceAddress::Scope_e scope)
Set the scope.
Ipv6Address m_address
The IPv6 address.
uint32_t m_nsDadUid
Last DAD probe packet UID.
friend bool operator==(const Ipv6InterfaceAddress &a, const Ipv6InterfaceAddress &b)
Equal to operator.
friend bool operator!=(const Ipv6InterfaceAddress &a, const Ipv6InterfaceAddress &b)
Not equal to operator.
void SetAddress(Ipv6Address address)
Set IPv6 address (and scope).
Ipv6Address GetAddress() const
Get the IPv6 address.
Ipv6InterfaceAddress()
Default constructor.
uint32_t GetNsDadUid() const
Get the latest DAD probe packet UID.
void SetState(Ipv6InterfaceAddress::State_e state)
Set the state.
Ipv6InterfaceAddress::Scope_e GetScope() const
Get address scope.
void SetNsDadUid(uint32_t uid)
Set the latest DAD probe packet UID.
Ipv6Prefix GetPrefix() const
Get the IPv6 prefix.
bool GetOnLink() const
Get the on-link property.
void SetOnLink(bool onLink)
Get the on-link property.
Ipv6InterfaceAddress::State_e GetState() const
Get the address state.
bool m_onLink
The address belongs to an on-link network.
State_e
State of an address associated with an interface.
@ TENTATIVE_OPTIMISTIC
Address is tentative but we are optimistic so we can send packet even if DAD is not yet finished.
@ INVALID
Invalid state (after a DAD failed)
@ HOMEADDRESS
Address is a HomeAddress.
@ DEPRECATED
Address is deprecated and should not be used.
@ TENTATIVE
Address is tentative, no packet can be sent unless DAD finished.
bool IsInSameSubnet(Ipv6Address b) const
Checks if the address is in the same subnet.
Scope_e m_scope
Scope of the address.
State_e m_state
State of the address.
Ipv6Prefix m_prefix
The IPv6 prefix.
@ LINKLOCAL
Link-local address (fe80::/64)
@ GLOBAL
Global address (2000::/3)
Describes an IPv6 prefix.
Definition: ipv6-address.h:455
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:77
Every class exported by the ns3 library is enclosed in the ns3 namespace.
bool operator!=(Callback< R, Args... > a, Callback< R, Args... > b)
Inequality test.
Definition: callback.h:680
bool operator==(const EventId &a, const EventId &b)
Definition: event-id.h:157
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:159