A Discrete-Event Network Simulator
API
ipv6-routing-table-entry.cc
Go to the documentation of this file.
1/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2007-2009 Strasbourg University
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: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
19 */
20
21#include "ns3/assert.h"
22
24
25namespace ns3
26{
27
29{
30}
31
33 : m_dest (route.m_dest),
34 m_destNetworkPrefix (route.m_destNetworkPrefix),
35 m_gateway (route.m_gateway),
36 m_interface (route.m_interface),
37 m_prefixToUse (route.m_prefixToUse)
38{
39}
40
42 : m_dest (route->m_dest),
43 m_destNetworkPrefix (route->m_destNetworkPrefix),
44 m_gateway (route->m_gateway),
45 m_interface (route->m_interface),
46 m_prefixToUse (route->m_prefixToUse)
47{
48}
49
51 : m_dest (dest),
52 m_destNetworkPrefix (Ipv6Prefix::GetZero ()),
53 m_gateway (gateway),
54 m_interface (interface),
55 m_prefixToUse (Ipv6Address ("::"))
56{
57}
58
60 : m_dest (dest),
61 m_destNetworkPrefix (Ipv6Prefix::GetOnes ()),
62 m_gateway (Ipv6Address::GetZero ()),
63 m_interface (interface),
64 m_prefixToUse (Ipv6Address ("::"))
65{
66}
67
69 : m_dest (network),
70 m_destNetworkPrefix (networkPrefix),
71 m_gateway (gateway),
72 m_interface (interface),
73 m_prefixToUse (prefixToUse)
74{
75}
76
78 : m_dest (network),
79 m_destNetworkPrefix (networkPrefix),
80 m_gateway (gateway),
81 m_interface (interface),
82 m_prefixToUse (Ipv6Address::GetZero ())
83{
84}
85
86
88 : m_dest (network),
89 m_destNetworkPrefix (networkPrefix),
90 m_gateway (Ipv6Address::GetZero ()),
91 m_interface (interface),
92 m_prefixToUse (prefixToUse)
93{
94}
95
97 : m_dest (network),
98 m_destNetworkPrefix (networkPrefix),
99 m_gateway (Ipv6Address::GetZero ()),
100 m_interface (interface),
101 m_prefixToUse (Ipv6Address ("::"))
102{
103}
104
106{
107}
108
110{
112 {
113 return true;
114 }
115 return false;
116}
117
119{
120 return m_dest;
121}
122
124{
125 return m_prefixToUse;
126}
127
129{
130 m_prefixToUse = prefix;
131}
132
134{
135 return !IsHost ();
136}
137
139{
141 {
142 return true;
143 }
144 return false;
145}
146
148{
149 return m_dest;
150}
151
153{
154 return m_destNetworkPrefix;
155}
156
158{
160 {
161 return false;
162 }
163 return true;
164}
165
167{
168 return m_gateway;
169}
170
172{
173 return Ipv6RoutingTableEntry (dest, Ipv6Prefix::GetOnes (), nextHop, interface, prefixToUse);
174}
175
177{
178 return Ipv6RoutingTableEntry (dest, interface);
179}
180
182{
183 return Ipv6RoutingTableEntry (network, networkPrefix, nextHop, interface);
184}
185
187{
188 return Ipv6RoutingTableEntry (network, networkPrefix, nextHop, interface, prefixToUse);
189}
190
192{
193 return Ipv6RoutingTableEntry (network, networkPrefix, interface, network);
194}
195
197{
198 return Ipv6RoutingTableEntry (Ipv6Address::GetZero (), nextHop, interface);
199}
200
202{
203 return m_interface;
204}
205
206std::ostream& operator<< (std::ostream& os, Ipv6RoutingTableEntry const& route)
207{
208 if (route.IsDefault ())
209 {
210 NS_ASSERT (route.IsGateway ());
211 os << "default out: " << route.GetInterface () << ", next hop: " << route.GetGateway ();
212 }
213 else if (route.IsHost ())
214 {
215 if (route.IsGateway ())
216 {
217 os << "host: "<< route.GetDest () <<
218 ", out: " << route.GetInterface () <<
219 ", next hop: " << route.GetGateway ();
220 }
221 else
222 {
223 os << "host: " << route.GetDest () <<
224 ", out: " << route.GetInterface ();
225 }
226 }
227 else if (route.IsNetwork ())
228 {
229 if (route.IsGateway ())
230 {
231 os << "network: " << route.GetDestNetwork () <<
232 "/ " << int(route.GetDestNetworkPrefix ().GetPrefixLength ()) <<
233 ", out: " << route.GetInterface () <<
234 ", next hop: " << route.GetGateway ();
235 }
236 else
237 {
238 os << "network: " << route.GetDestNetwork () <<
239 "/" << int(route.GetDestNetworkPrefix ().GetPrefixLength ()) <<
240 ", out: " << route.GetInterface ();
241 }
242 }
243 else
244 {
245 NS_ASSERT (false);
246 }
247 return os;
248}
249
251{
252}
253
255 : m_origin (route.m_origin),
256 m_group (route.m_group),
257 m_inputInterface (route.m_inputInterface),
258 m_outputInterfaces (route.m_outputInterfaces)
259{
260}
261
263 : m_origin (route->m_origin),
264 m_group (route->m_group),
265 m_inputInterface (route->m_inputInterface),
266 m_outputInterfaces (route->m_outputInterfaces)
267{
268}
269
270Ipv6MulticastRoutingTableEntry::Ipv6MulticastRoutingTableEntry (Ipv6Address origin, Ipv6Address group, uint32_t inputInterface, std::vector<uint32_t> outputInterfaces)
271 : m_origin (origin),
272 m_group (group),
273 m_inputInterface (inputInterface),
274 m_outputInterfaces (outputInterfaces)
275{
276}
277
279{
280 return m_origin;
281}
282
284{
285 return m_group;
286}
287
289{
290 return m_inputInterface;
291}
292
294{
295 return m_outputInterfaces.size ();
296}
297
299{
300 NS_ASSERT_MSG (n < m_outputInterfaces.size (), "Ipv6MulticastRoutingTableEntry::GetOutputInterface () : index out of bounds");
301
302 return m_outputInterfaces[n];
303}
304
306{
307 return m_outputInterfaces;
308}
309
311{
312 return Ipv6MulticastRoutingTableEntry (origin, group, inputInterface, outputInterfaces);
313}
314
315std::ostream& operator<< (std::ostream& os, Ipv6MulticastRoutingTableEntry const& route)
316{
317 os << "origin: " << route.GetOrigin () <<
318 ", group: " << route.GetGroup () <<
319 ", input interface: " << route.GetInputInterface () <<
320 ", output interfaces: ";
321
322 for (uint32_t i = 0; i < route.GetNOutputInterfaces (); ++i)
323 {
324 os << route.GetOutputInterface (i) << " ";
325 }
326
327 return os;
328}
329
330} /* namespace ns3 */
331
Describes an IPv6 address.
Definition: ipv6-address.h:50
static Ipv6Address GetZero()
Get the 0 (::) Ipv6Address.
A record of an IPv6 multicast route.
uint32_t GetInputInterface() const
Get the input interface address.
uint32_t GetOutputInterface(uint32_t n) const
Get a specified output interface.
Ipv6Address GetGroup() const
Get the group.
uint32_t m_inputInterface
The input interface.
Ipv6MulticastRoutingTableEntry()
Constructor.
std::vector< uint32_t > GetOutputInterfaces() const
Get all of the output interfaces of this route.
static Ipv6MulticastRoutingTableEntry CreateMulticastRoute(Ipv6Address origin, Ipv6Address group, uint32_t inputInterface, std::vector< uint32_t > outputInterfaces)
Create a multicast route.
std::vector< uint32_t > m_outputInterfaces
The output interfaces.
uint32_t GetNOutputInterfaces() const
Get the number of output interfaces of this route.
Ipv6Address GetOrigin() const
Get the source of this route.
Ipv6Address m_group
The IPv6 address of the group.
Ipv6Address m_origin
The IPv6 address of the source.
Describes an IPv6 prefix.
Definition: ipv6-address.h:456
uint8_t GetPrefixLength() const
Get prefix length.
static Ipv6Prefix GetOnes()
Get the "all-1" IPv6 mask (ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff).
A record of an IPv6 route.
bool IsNetwork() const
Is the route entry correspond to a network ?
static Ipv6RoutingTableEntry CreateDefaultRoute(Ipv6Address nextHop, uint32_t interface)
Create a default route.
Ipv6Address m_gateway
IPv6 address of the gateway.
bool IsDefault() const
Is it the default route ?
Ipv6RoutingTableEntry()
Constructor.
Ipv6Address GetDest() const
Get the destination.
Ipv6Address GetDestNetwork() const
Get the destination network.
Ipv6Address GetPrefixToUse() const
Get the prefix to use (for multihomed link).
Ipv6Address m_dest
IPv6 address of the destination.
static Ipv6RoutingTableEntry CreateHostRouteTo(Ipv6Address dest, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse=Ipv6Address())
Create a route to a host.
bool IsHost() const
Is the route entry correspond to a host ?
void SetPrefixToUse(Ipv6Address prefix)
Set the prefix to use.
uint32_t GetInterface() const
Get the interface index.
Ipv6Address m_prefixToUse
Prefix to use.
Ipv6Prefix m_destNetworkPrefix
IPv6 prefix of the destination.
virtual ~Ipv6RoutingTableEntry()
Destructor.
uint32_t m_interface
The interface index.
Ipv6Prefix GetDestNetworkPrefix() const
Get the destination prefix.
static Ipv6RoutingTableEntry CreateNetworkRouteTo(Ipv6Address network, Ipv6Prefix networkPrefix, Ipv6Address nextHop, uint32_t interface)
Create a route to a network.
Ipv6Address GetGateway() const
Get the gateway.
bool IsGateway() const
Is it the gateway ?
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
Definition: assert.h:67
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Definition: assert.h:88
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:139