A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Portuguese
Docs ▼
Wiki
Manual
Models
Develop ▼
API
Bugs
API
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
ipv4-l3-protocol.h
Go to the documentation of this file.
1
// -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*-
2
//
3
// Copyright (c) 2006 Georgia Tech Research Corporation
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: George F. Riley<riley@ece.gatech.edu>
19
//
20
21
#ifndef IPV4_L3_PROTOCOL_H
22
#define IPV4_L3_PROTOCOL_H
23
24
#include <list>
25
#include <map>
26
#include <vector>
27
#include <stdint.h>
28
#include "ns3/ipv4-address.h"
29
#include "ns3/ptr.h"
30
#include "ns3/net-device.h"
31
#include "ns3/ipv4.h"
32
#include "ns3/traced-callback.h"
33
#include "ns3/ipv4-header.h"
34
#include "ns3/ipv4-routing-protocol.h"
35
#include "ns3/nstime.h"
36
#include "ns3/simulator.h"
37
38
namespace
ns3 {
39
40
class
Packet;
41
class
NetDevice;
42
class
Ipv4Interface;
43
class
Ipv4Address;
44
class
Ipv4Header;
45
class
Ipv4RoutingTableEntry;
46
class
Ipv4Route;
47
class
Node;
48
class
Socket;
49
class
Ipv4RawSocketImpl;
50
class
IpL4Protocol;
51
class
Icmpv4L4Protocol;
52
53
77
class
Ipv4L3Protocol
:
public
Ipv4
78
{
79
public
:
80
static
TypeId
GetTypeId
(
void
);
81
static
const
uint16_t
PROT_NUMBER
;
82
83
Ipv4L3Protocol
();
84
virtual
~Ipv4L3Protocol
();
85
90
enum
DropReason
91
{
92
DROP_TTL_EXPIRED
= 1,
93
DROP_NO_ROUTE
,
94
DROP_BAD_CHECKSUM
,
95
DROP_INTERFACE_DOWN
,
96
DROP_ROUTE_ERROR
,
97
DROP_FRAGMENT_TIMEOUT
98
};
99
100
void
SetNode
(
Ptr<Node>
node);
101
102
// functions defined in base class Ipv4
103
104
void
SetRoutingProtocol
(
Ptr<Ipv4RoutingProtocol>
routingProtocol);
105
Ptr<Ipv4RoutingProtocol>
GetRoutingProtocol
(
void
)
const
;
106
107
Ptr<Socket>
CreateRawSocket
(
void
);
108
void
DeleteRawSocket
(
Ptr<Socket>
socket);
109
120
void
Insert
(
Ptr<IpL4Protocol>
protocol);
129
Ptr<IpL4Protocol>
GetProtocol
(
int
protocolNumber)
const
;
136
void
Remove
(
Ptr<IpL4Protocol>
protocol);
137
144
void
SetDefaultTtl
(uint8_t ttl);
145
159
void
Receive
(
Ptr<NetDevice>
device,
Ptr<const Packet>
p, uint16_t protocol,
const
Address
&from,
160
const
Address
&to,
NetDevice::PacketType
packetType);
161
172
void
Send
(
Ptr<Packet>
packet,
Ipv4Address
source,
173
Ipv4Address
destination, uint8_t protocol,
Ptr<Ipv4Route>
route);
182
void
SendWithHeader
(
Ptr<Packet>
packet,
Ipv4Header
ipHeader,
Ptr<Ipv4Route>
route);
183
184
uint32_t
AddInterface
(
Ptr<NetDevice>
device);
185
Ptr<Ipv4Interface>
GetInterface
(uint32_t i)
const
;
186
uint32_t
GetNInterfaces
(
void
)
const
;
187
188
int32_t
GetInterfaceForAddress
(
Ipv4Address
addr)
const
;
189
int32_t
GetInterfaceForPrefix
(
Ipv4Address
addr,
Ipv4Mask
mask)
const
;
190
int32_t
GetInterfaceForDevice
(
Ptr<const NetDevice>
device)
const
;
191
bool
IsDestinationAddress
(
Ipv4Address
address
, uint32_t iif)
const
;
192
193
bool
AddAddress
(uint32_t i,
Ipv4InterfaceAddress
address
);
194
Ipv4InterfaceAddress
GetAddress
(uint32_t interfaceIndex, uint32_t addressIndex)
const
;
195
uint32_t
GetNAddresses
(uint32_t interface)
const
;
196
bool
RemoveAddress
(uint32_t interfaceIndex, uint32_t addressIndex);
197
bool
RemoveAddress
(uint32_t interface,
Ipv4Address
address
);
198
Ipv4Address
SelectSourceAddress
(
Ptr<const NetDevice>
device,
199
Ipv4Address
dst,
Ipv4InterfaceAddress::InterfaceAddressScope_e
scope);
200
201
202
void
SetMetric
(uint32_t i, uint16_t metric);
203
uint16_t
GetMetric
(uint32_t i)
const
;
204
uint16_t
GetMtu
(uint32_t i)
const
;
205
bool
IsUp
(uint32_t i)
const
;
206
void
SetUp
(uint32_t i);
207
void
SetDown
(uint32_t i);
208
bool
IsForwarding
(uint32_t i)
const
;
209
void
SetForwarding
(uint32_t i,
bool
val);
210
211
Ptr<NetDevice>
GetNetDevice
(uint32_t i);
212
213
protected
:
214
215
virtual
void
DoDispose
(
void
);
220
virtual
void
NotifyNewAggregate
();
221
private
:
222
friend
class
Ipv4L3ProtocolTestCase
;
223
Ipv4L3Protocol
(
const
Ipv4L3Protocol
&);
224
Ipv4L3Protocol
&
operator =
(
const
Ipv4L3Protocol
&);
225
226
// class Ipv4 attributes
227
virtual
void
SetIpForward
(
bool
forward);
228
virtual
bool
GetIpForward
(
void
)
const
;
229
virtual
void
SetWeakEsModel
(
bool
model);
230
virtual
bool
GetWeakEsModel
(
void
)
const
;
231
232
Ipv4Header
BuildHeader
(
233
Ipv4Address
source,
234
Ipv4Address
destination,
235
uint8_t protocol,
236
uint16_t payloadSize,
237
uint8_t ttl,
238
uint8_t tos,
239
bool
mayFragment);
240
241
void
242
SendRealOut
(
Ptr<Ipv4Route>
route,
243
Ptr<Packet>
packet,
244
Ipv4Header
const
&ipHeader);
245
246
void
247
IpForward
(
Ptr<Ipv4Route>
rtentry,
248
Ptr<const Packet>
p,
249
const
Ipv4Header
&header);
250
251
void
252
IpMulticastForward
(
Ptr<Ipv4MulticastRoute>
mrtentry,
253
Ptr<const Packet>
p,
254
const
Ipv4Header
&header);
255
256
void
LocalDeliver
(
Ptr<const Packet>
p,
Ipv4Header
const
&ip, uint32_t iif);
257
void
RouteInputError
(
Ptr<const Packet>
p,
const
Ipv4Header
& ipHeader,
Socket::SocketErrno
sockErrno);
258
259
uint32_t
AddIpv4Interface
(
Ptr<Ipv4Interface>
interface);
260
void
SetupLoopback
(
void
);
261
266
Ptr<Icmpv4L4Protocol>
GetIcmp
(
void
)
const
;
267
bool
IsUnicast
(
Ipv4Address
ad,
Ipv4Mask
interfaceMask)
const
;
268
275
void
DoFragmentation
(
Ptr<Packet>
packet, uint32_t outIfaceMtu,
std::list
<
Ptr<Packet>
>& listFragments);
276
284
bool
ProcessFragment
(
Ptr<Packet>
& packet,
Ipv4Header
& ipHeader, uint32_t iif);
285
292
void
HandleFragmentsTimeout
( std::pair<uint64_t, uint32_t> key,
Ipv4Header
& ipHeader, uint32_t iif);
293
294
typedef
std::vector<Ptr<Ipv4Interface> >
Ipv4InterfaceList
;
295
typedef
std::list<Ptr<Ipv4RawSocketImpl> >
SocketList
;
296
typedef
std::list<Ptr<IpL4Protocol> >
L4List_t
;
297
298
bool
m_ipForward
;
299
bool
m_weakEsModel
;
300
L4List_t
m_protocols
;
301
Ipv4InterfaceList
m_interfaces
;
302
uint8_t
m_defaultTos
;
303
uint8_t
m_defaultTtl
;
304
uint16_t
m_identification
;
305
Ptr<Node>
m_node
;
306
307
TracedCallback<const Ipv4Header &, Ptr<const Packet>
, uint32_t>
m_sendOutgoingTrace
;
308
TracedCallback<const Ipv4Header &, Ptr<const Packet>
, uint32_t>
m_unicastForwardTrace
;
309
TracedCallback<const Ipv4Header &, Ptr<const Packet>
, uint32_t>
m_localDeliverTrace
;
310
311
// The following two traces pass a packet with an IP header
312
TracedCallback<Ptr<const Packet>
,
Ptr<Ipv4>
, uint32_t>
m_txTrace
;
313
TracedCallback<Ptr<const Packet>
,
Ptr<Ipv4>
, uint32_t>
m_rxTrace
;
314
// <ip-header, payload, reason, ifindex> (ifindex not valid if reason is DROP_NO_ROUTE)
315
TracedCallback<const Ipv4Header &, Ptr<const Packet>
,
DropReason
,
Ptr<Ipv4>
, uint32_t>
m_dropTrace
;
316
317
Ptr<Ipv4RoutingProtocol>
m_routingProtocol
;
318
319
SocketList
m_sockets
;
320
325
class
Fragments
:
public
SimpleRefCount
<Fragments>
326
{
327
public
:
331
Fragments
();
332
336
~Fragments
();
337
344
void
AddFragment
(
Ptr<Packet>
fragment, uint16_t fragmentOffset,
bool
moreFragment);
345
350
bool
IsEntire
()
const
;
351
356
Ptr<Packet>
GetPacket
()
const
;
357
362
Ptr<Packet>
GetPartialPacket
()
const
;
363
364
private
:
368
bool
m_moreFragment
;
369
373
std::list<std::pair<Ptr<Packet>, uint16_t> >
m_fragments
;
374
375
};
376
377
typedef
std::map< std::pair<uint64_t, uint32_t>,
Ptr<Fragments>
>
MapFragments_t
;
378
typedef
std::map< std::pair<uint64_t, uint32_t>,
EventId
>
MapFragmentsTimers_t
;
379
383
MapFragments_t
m_fragments
;
384
Time
m_fragmentExpirationTimeout
;
385
MapFragmentsTimers_t
m_fragmentsTimers
;
386
387
};
388
389
}
// Namespace ns3
390
391
#endif
/* IPV4_L3_PROTOCOL_H */
src
internet
model
ipv4-l3-protocol.h
Generated on Fri Aug 30 2013 01:42:51 for ns-3 by
1.8.1.2