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
Ipv4Address
SelectSourceAddress
(
Ptr<const NetDevice>
device,
198
Ipv4Address
dst,
Ipv4InterfaceAddress::InterfaceAddressScope_e
scope);
199
200
201
void
SetMetric
(uint32_t i, uint16_t metric);
202
uint16_t
GetMetric
(uint32_t i)
const
;
203
uint16_t
GetMtu
(uint32_t i)
const
;
204
bool
IsUp
(uint32_t i)
const
;
205
void
SetUp
(uint32_t i);
206
void
SetDown
(uint32_t i);
207
bool
IsForwarding
(uint32_t i)
const
;
208
void
SetForwarding
(uint32_t i,
bool
val);
209
210
Ptr<NetDevice>
GetNetDevice
(uint32_t i);
211
212
protected
:
213
214
virtual
void
DoDispose
(
void
);
219
virtual
void
NotifyNewAggregate
();
220
private
:
221
friend
class
Ipv4L3ProtocolTestCase
;
222
Ipv4L3Protocol
(
const
Ipv4L3Protocol
&);
223
Ipv4L3Protocol
&
operator =
(
const
Ipv4L3Protocol
&);
224
225
// class Ipv4 attributes
226
virtual
void
SetIpForward
(
bool
forward);
227
virtual
bool
GetIpForward
(
void
)
const
;
228
virtual
void
SetWeakEsModel
(
bool
model);
229
virtual
bool
GetWeakEsModel
(
void
)
const
;
230
231
Ipv4Header
BuildHeader
(
232
Ipv4Address
source,
233
Ipv4Address
destination,
234
uint8_t protocol,
235
uint16_t payloadSize,
236
uint8_t ttl,
237
bool
mayFragment);
238
239
void
240
SendRealOut
(
Ptr<Ipv4Route>
route,
241
Ptr<Packet>
packet,
242
Ipv4Header
const
&ipHeader);
243
244
void
245
IpForward
(
Ptr<Ipv4Route>
rtentry,
246
Ptr<const Packet>
p,
247
const
Ipv4Header
&header);
248
249
void
250
IpMulticastForward
(
Ptr<Ipv4MulticastRoute>
mrtentry,
251
Ptr<const Packet>
p,
252
const
Ipv4Header
&header);
253
254
void
LocalDeliver
(
Ptr<const Packet>
p,
Ipv4Header
const
&ip, uint32_t iif);
255
void
RouteInputError
(
Ptr<const Packet>
p,
const
Ipv4Header
& ipHeader,
Socket::SocketErrno
sockErrno);
256
257
uint32_t
AddIpv4Interface
(
Ptr<Ipv4Interface>
interface);
258
void
SetupLoopback
(
void
);
259
264
Ptr<Icmpv4L4Protocol>
GetIcmp
(
void
)
const
;
265
bool
IsUnicast
(
Ipv4Address
ad,
Ipv4Mask
interfaceMask)
const
;
266
273
void
DoFragmentation
(
Ptr<Packet>
packet, uint32_t outIfaceMtu,
std::list
<
Ptr<Packet>
>& listFragments);
274
282
bool
ProcessFragment
(
Ptr<Packet>
& packet,
Ipv4Header
& ipHeader, uint32_t iif);
283
290
void
HandleFragmentsTimeout
( std::pair<uint64_t, uint32_t> key,
Ipv4Header
& ipHeader, uint32_t iif);
291
292
typedef
std::vector<Ptr<Ipv4Interface> >
Ipv4InterfaceList
;
293
typedef
std::list<Ptr<Ipv4RawSocketImpl> >
SocketList
;
294
typedef
std::list<Ptr<IpL4Protocol> >
L4List_t
;
295
296
bool
m_ipForward
;
297
bool
m_weakEsModel
;
298
L4List_t
m_protocols
;
299
Ipv4InterfaceList
m_interfaces
;
300
uint8_t
m_defaultTtl
;
301
uint16_t
m_identification
;
302
Ptr<Node>
m_node
;
303
304
TracedCallback<const Ipv4Header &, Ptr<const Packet>
, uint32_t>
m_sendOutgoingTrace
;
305
TracedCallback<const Ipv4Header &, Ptr<const Packet>
, uint32_t>
m_unicastForwardTrace
;
306
TracedCallback<const Ipv4Header &, Ptr<const Packet>
, uint32_t>
m_localDeliverTrace
;
307
308
// The following two traces pass a packet with an IP header
309
TracedCallback<Ptr<const Packet>
,
Ptr<Ipv4>
, uint32_t>
m_txTrace
;
310
TracedCallback<Ptr<const Packet>
,
Ptr<Ipv4>
, uint32_t>
m_rxTrace
;
311
// <ip-header, payload, reason, ifindex> (ifindex not valid if reason is DROP_NO_ROUTE)
312
TracedCallback<const Ipv4Header &, Ptr<const Packet>
,
DropReason
,
Ptr<Ipv4>
, uint32_t>
m_dropTrace
;
313
314
Ptr<Ipv4RoutingProtocol>
m_routingProtocol
;
315
316
SocketList
m_sockets
;
317
322
class
Fragments
:
public
SimpleRefCount
<Fragments>
323
{
324
public
:
328
Fragments
();
329
333
~Fragments
();
334
341
void
AddFragment
(
Ptr<Packet>
fragment, uint16_t fragmentOffset,
bool
moreFragment);
342
347
bool
IsEntire
()
const
;
348
353
Ptr<Packet>
GetPacket
()
const
;
354
359
Ptr<Packet>
GetPartialPacket
()
const
;
360
361
private
:
365
bool
m_moreFragment
;
366
370
std::list<std::pair<Ptr<Packet>, uint16_t> >
m_fragments
;
371
372
};
373
374
typedef
std::map< std::pair<uint64_t, uint32_t>,
Ptr<Fragments>
>
MapFragments_t
;
375
typedef
std::map< std::pair<uint64_t, uint32_t>,
EventId
>
MapFragmentsTimers_t
;
376
380
MapFragments_t
m_fragments
;
381
Time
m_fragmentExpirationTimeout
;
382
MapFragmentsTimers_t
m_fragmentsTimers
;
383
384
};
385
386
}
// Namespace ns3
387
388
#endif
/* IPV4_L3_PROTOCOL_H */
src
internet
model
ipv4-l3-protocol.h
Generated on Tue Oct 9 2012 16:45:38 for ns-3 by
1.8.1.2