author | Tom Henderson <tomh@tomh.org> |
Thu, 23 Dec 2010 11:32:36 -0800 | |
changeset 6723 | fff5c512f345 |
parent 6347 | fe4800b06445 |
permissions | -rw-r--r-- |
236
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1 |
// -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
2 |
// |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
3 |
// Copyright (c) 2006 Georgia Tech Research Corporation |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
4 |
// |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
5 |
// This program is free software; you can redistribute it and/or modify |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
6 |
// it under the terms of the GNU General Public License version 2 as |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
7 |
// published by the Free Software Foundation; |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
8 |
// |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
9 |
// This program is distributed in the hope that it will be useful, |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
10 |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
11 |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
12 |
// GNU General Public License for more details. |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
13 |
// |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
14 |
// You should have received a copy of the GNU General Public License |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
15 |
// along with this program; if not, write to the Free Software |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
16 |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
17 |
// |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
18 |
// Author: George F. Riley<riley@ece.gatech.edu> |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
19 |
// |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
20 |
|
752
a4febfb8416f
IIpv4 -> Ipv4
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
734
diff
changeset
|
21 |
#ifndef IPV4_L3_PROTOCOL_H |
a4febfb8416f
IIpv4 -> Ipv4
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
734
diff
changeset
|
22 |
#define IPV4_L3_PROTOCOL_H |
236
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
23 |
|
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
24 |
#include <list> |
5487
9485bee6b7eb
Ipv4L3Protocol::GetInterface optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5374
diff
changeset
|
25 |
#include <vector> |
236
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
26 |
#include <stdint.h> |
524
082ffdd8fbd7
move code around
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
513
diff
changeset
|
27 |
#include "ns3/ipv4-address.h" |
555
4d3b2a77bc92
convert Node * to Ptr<Node>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
551
diff
changeset
|
28 |
#include "ns3/ptr.h" |
3448
0bd851bb1225
Simplify promiscuous mode API: NetDevices always operate in promiscuous mode, normal receive callbacks receive extra destination address and packet type.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3266
diff
changeset
|
29 |
#include "ns3/net-device.h" |
983
47c42bd66fb7
Support dynamic routing and multiple routing protocols; static routing table is refactored as a "routing protocol".
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
752
diff
changeset
|
30 |
#include "ns3/ipv4.h" |
2498
e01570293b98
convert InternetNode to Attributes.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2251
diff
changeset
|
31 |
#include "ns3/traced-callback.h" |
3216
b36bb98d766e
bug 207: ipv4-header.h needed in src/node module.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2961
diff
changeset
|
32 |
#include "ns3/ipv4-header.h" |
4472
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
33 |
#include "ns3/ipv4-routing-protocol.h" |
236
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
34 |
|
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
35 |
namespace ns3 { |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
36 |
|
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
37 |
class Packet; |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
38 |
class NetDevice; |
551
12ed30c77cab
revert Ipv4Interface * -> Ptr<Ipv4Interface>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
548
diff
changeset
|
39 |
class Ipv4Interface; |
236
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
40 |
class Ipv4Address; |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
41 |
class Ipv4Header; |
4472
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
42 |
class Ipv4RoutingTableEntry; |
236
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
43 |
class Ipv4Route; |
728
95c426b1cb60
rename INode to Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
639
diff
changeset
|
44 |
class Node; |
3820 | 45 |
class Socket; |
46 |
class Ipv4RawSocketImpl; |
|
3588
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
47 |
class Ipv4L4Protocol; |
3820 | 48 |
class Icmpv4L4Protocol; |
1229
e4cfe4094c10
build with the new TraceContextElement API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1195
diff
changeset
|
49 |
|
236
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
50 |
|
2961
2bcb3435483b
improve documentation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2834
diff
changeset
|
51 |
/** |
2bcb3435483b
improve documentation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2834
diff
changeset
|
52 |
* \brief Implement the Ipv4 layer. |
3266
1ae7df5cf87b
Update the internet-stack documentation
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
3260
diff
changeset
|
53 |
* |
1ae7df5cf87b
Update the internet-stack documentation
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
3260
diff
changeset
|
54 |
* This is the actual implementation of IP. It contains APIs to send and |
1ae7df5cf87b
Update the internet-stack documentation
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
3260
diff
changeset
|
55 |
* receive packets at the IP layer, as well as APIs for IP routing. |
5373
97402b61fb82
Gustavo patch for bug 676
Craig Dowell <craigdo@ee.washington.edu>
parents:
5339
diff
changeset
|
56 |
* |
97402b61fb82
Gustavo patch for bug 676
Craig Dowell <craigdo@ee.washington.edu>
parents:
5339
diff
changeset
|
57 |
* This class contains two distinct groups of trace sources. The |
97402b61fb82
Gustavo patch for bug 676
Craig Dowell <craigdo@ee.washington.edu>
parents:
5339
diff
changeset
|
58 |
* trace sources 'Rx' and 'Tx' are called, respectively, immediately |
97402b61fb82
Gustavo patch for bug 676
Craig Dowell <craigdo@ee.washington.edu>
parents:
5339
diff
changeset
|
59 |
* after receiving from the NetDevice and immediately before sending |
97402b61fb82
Gustavo patch for bug 676
Craig Dowell <craigdo@ee.washington.edu>
parents:
5339
diff
changeset
|
60 |
* to a NetDevice for transmitting a packet. These are low level |
97402b61fb82
Gustavo patch for bug 676
Craig Dowell <craigdo@ee.washington.edu>
parents:
5339
diff
changeset
|
61 |
* trace sources that include the Ipv4Header already serialized into |
97402b61fb82
Gustavo patch for bug 676
Craig Dowell <craigdo@ee.washington.edu>
parents:
5339
diff
changeset
|
62 |
* the packet. In contrast, the Drop, SendOutgoing, UnicastForward, |
97402b61fb82
Gustavo patch for bug 676
Craig Dowell <craigdo@ee.washington.edu>
parents:
5339
diff
changeset
|
63 |
* and LocalDeliver trace sources are slightly higher-level and pass |
97402b61fb82
Gustavo patch for bug 676
Craig Dowell <craigdo@ee.washington.edu>
parents:
5339
diff
changeset
|
64 |
* around the Ipv4Header as an explicit parameter and not as part of |
97402b61fb82
Gustavo patch for bug 676
Craig Dowell <craigdo@ee.washington.edu>
parents:
5339
diff
changeset
|
65 |
* the packet. |
2961
2bcb3435483b
improve documentation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2834
diff
changeset
|
66 |
*/ |
4377 | 67 |
class Ipv4L3Protocol : public Ipv4 |
293
007bc9e735f3
remove Ipv4L3Protocol class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
242
diff
changeset
|
68 |
{ |
236
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
69 |
public: |
2251
04963d8cca51
iid (void) -> GetTypeId (void)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2250
diff
changeset
|
70 |
static TypeId GetTypeId (void); |
293
007bc9e735f3
remove Ipv4L3Protocol class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
242
diff
changeset
|
71 |
static const uint16_t PROT_NUMBER; |
007bc9e735f3
remove Ipv4L3Protocol class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
242
diff
changeset
|
72 |
|
2498
e01570293b98
convert InternetNode to Attributes.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2251
diff
changeset
|
73 |
Ipv4L3Protocol(); |
734
039fb338b6e9
Ipv4 -> Ipv4L3Protocol
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
733
diff
changeset
|
74 |
virtual ~Ipv4L3Protocol (); |
236
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
75 |
|
5225
9c612cb88d6b
Doxygenize.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
5204
diff
changeset
|
76 |
/** |
9c612cb88d6b
Doxygenize.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
5204
diff
changeset
|
77 |
* \enum DropReason |
9c612cb88d6b
Doxygenize.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
5204
diff
changeset
|
78 |
* \brief Reason why a packet has been dropped. |
9c612cb88d6b
Doxygenize.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
5204
diff
changeset
|
79 |
*/ |
5204
cb3087d8f330
Ipv4L3Protocol::Drop trace source enhanced, and add new SendOutgoing, UnicastForward, and LocalDeliver trace sources, for the FlowMonitor.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4616
diff
changeset
|
80 |
enum DropReason |
cb3087d8f330
Ipv4L3Protocol::Drop trace source enhanced, and add new SendOutgoing, UnicastForward, and LocalDeliver trace sources, for the FlowMonitor.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4616
diff
changeset
|
81 |
{ |
5225
9c612cb88d6b
Doxygenize.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
5204
diff
changeset
|
82 |
DROP_TTL_EXPIRED = 1, /**< Packet TTL has expired */ |
9c612cb88d6b
Doxygenize.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
5204
diff
changeset
|
83 |
DROP_NO_ROUTE, /**< No route to host */ |
9c612cb88d6b
Doxygenize.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
5204
diff
changeset
|
84 |
DROP_BAD_CHECKSUM, /**< Bad checksum */ |
9c612cb88d6b
Doxygenize.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
5204
diff
changeset
|
85 |
DROP_INTERFACE_DOWN, /**< Interface is down so can not send packet */ |
9c612cb88d6b
Doxygenize.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
5204
diff
changeset
|
86 |
DROP_ROUTE_ERROR, /**< Route error */ |
5204
cb3087d8f330
Ipv4L3Protocol::Drop trace source enhanced, and add new SendOutgoing, UnicastForward, and LocalDeliver trace sources, for the FlowMonitor.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4616
diff
changeset
|
87 |
}; |
cb3087d8f330
Ipv4L3Protocol::Drop trace source enhanced, and add new SendOutgoing, UnicastForward, and LocalDeliver trace sources, for the FlowMonitor.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4616
diff
changeset
|
88 |
|
2592
3ebf97150166
get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2498
diff
changeset
|
89 |
void SetNode (Ptr<Node> node); |
3ebf97150166
get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2498
diff
changeset
|
90 |
|
4472
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
91 |
// functions defined in base class Ipv4 |
4481 | 92 |
|
93 |
void SetRoutingProtocol (Ptr<Ipv4RoutingProtocol> routingProtocol); |
|
4472
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
94 |
Ptr<Ipv4RoutingProtocol> GetRoutingProtocol (void) const; |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
95 |
|
3820 | 96 |
Ptr<Socket> CreateRawSocket (void); |
97 |
void DeleteRawSocket (Ptr<Socket> socket); |
|
98 |
||
406
c3f72daa6430
doxygen for Ipv4 class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
345
diff
changeset
|
99 |
/** |
3588
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
100 |
* \param protocol a template for the protocol to add to this L4 Demux. |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
101 |
* \returns the L4Protocol effectively added. |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
102 |
* |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
103 |
* Invoke Copy on the input template to get a copy of the input |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
104 |
* protocol which can be used on the Node on which this L4 Demux |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
105 |
* is running. The new L4Protocol is registered internally as |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
106 |
* a working L4 Protocol and returned from this method. |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
107 |
* The caller does not get ownership of the returned pointer. |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
108 |
*/ |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
109 |
void Insert(Ptr<Ipv4L4Protocol> protocol); |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
110 |
/** |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
111 |
* \param protocolNumber number of protocol to lookup |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
112 |
* in this L4 Demux |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
113 |
* \returns a matching L4 Protocol |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
114 |
* |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
115 |
* This method is typically called by lower layers |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
116 |
* to forward packets up the stack to the right protocol. |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
117 |
* It is also called from NodeImpl::GetUdp for example. |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
118 |
*/ |
3744 | 119 |
Ptr<Ipv4L4Protocol> GetProtocol(int protocolNumber) const; |
3588
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
120 |
/** |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
121 |
* \param protocol protocol to remove from this demux. |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
122 |
* |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
123 |
* The input value to this method should be the value |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
124 |
* returned from the Ipv4L4Protocol::Insert method. |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
125 |
*/ |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
126 |
void Remove (Ptr<Ipv4L4Protocol> protocol); |
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
127 |
|
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
128 |
/** |
406
c3f72daa6430
doxygen for Ipv4 class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
345
diff
changeset
|
129 |
* \param ttl default ttl to use |
c3f72daa6430
doxygen for Ipv4 class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
345
diff
changeset
|
130 |
* |
c3f72daa6430
doxygen for Ipv4 class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
345
diff
changeset
|
131 |
* When we need to send an ipv4 packet, we use this default |
c3f72daa6430
doxygen for Ipv4 class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
345
diff
changeset
|
132 |
* ttl value. |
c3f72daa6430
doxygen for Ipv4 class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
345
diff
changeset
|
133 |
*/ |
236
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
134 |
void SetDefaultTtl (uint8_t ttl); |
406
c3f72daa6430
doxygen for Ipv4 class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
345
diff
changeset
|
135 |
|
c3f72daa6430
doxygen for Ipv4 class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
345
diff
changeset
|
136 |
/** |
236
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
137 |
* Lower layer calls this method after calling L3Demux::Lookup |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
138 |
* The ARP subclass needs to know from which NetDevice this |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
139 |
* packet is coming to: |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
140 |
* - implement a per-NetDevice ARP cache |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
141 |
* - send back arp replies on the right device |
5227
ecb08c1fc273
Fix some doxygen warnings revealed by WARN_NO_PARAMDOC=YES in doc/doxygen.conf.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
5225
diff
changeset
|
142 |
* \param device network device |
ecb08c1fc273
Fix some doxygen warnings revealed by WARN_NO_PARAMDOC=YES in doc/doxygen.conf.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
5225
diff
changeset
|
143 |
* \param p the packet |
ecb08c1fc273
Fix some doxygen warnings revealed by WARN_NO_PARAMDOC=YES in doc/doxygen.conf.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
5225
diff
changeset
|
144 |
* \param protocol protocol value |
ecb08c1fc273
Fix some doxygen warnings revealed by WARN_NO_PARAMDOC=YES in doc/doxygen.conf.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
5225
diff
changeset
|
145 |
* \param from address of the correspondant |
ecb08c1fc273
Fix some doxygen warnings revealed by WARN_NO_PARAMDOC=YES in doc/doxygen.conf.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
5225
diff
changeset
|
146 |
* \param to address of the destination |
ecb08c1fc273
Fix some doxygen warnings revealed by WARN_NO_PARAMDOC=YES in doc/doxygen.conf.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
5225
diff
changeset
|
147 |
* \param packetType type of the packet |
236
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
148 |
*/ |
3548
e5ab96db540e
bug 273: constify packet pointers.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3448
diff
changeset
|
149 |
void Receive( Ptr<NetDevice> device, Ptr<const Packet> p, uint16_t protocol, const Address &from, |
3448
0bd851bb1225
Simplify promiscuous mode API: NetDevices always operate in promiscuous mode, normal receive callbacks receive extra destination address and packet type.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3266
diff
changeset
|
150 |
const Address &to, NetDevice::PacketType packetType); |
236
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
151 |
|
406
c3f72daa6430
doxygen for Ipv4 class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
345
diff
changeset
|
152 |
/** |
c3f72daa6430
doxygen for Ipv4 class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
345
diff
changeset
|
153 |
* \param packet packet to send |
c3f72daa6430
doxygen for Ipv4 class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
345
diff
changeset
|
154 |
* \param source source address of packet |
c3f72daa6430
doxygen for Ipv4 class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
345
diff
changeset
|
155 |
* \param destination address of packet |
c3f72daa6430
doxygen for Ipv4 class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
345
diff
changeset
|
156 |
* \param protocol number of packet |
4472
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
157 |
* \param route route entry |
406
c3f72daa6430
doxygen for Ipv4 class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
345
diff
changeset
|
158 |
* |
c3f72daa6430
doxygen for Ipv4 class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
345
diff
changeset
|
159 |
* Higher-level layers call this method to send a packet |
c3f72daa6430
doxygen for Ipv4 class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
345
diff
changeset
|
160 |
* down the stack to the MAC and PHY layers. |
c3f72daa6430
doxygen for Ipv4 class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
345
diff
changeset
|
161 |
*/ |
1866
e7dbcc4df546
do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1524
diff
changeset
|
162 |
void Send (Ptr<Packet> packet, Ipv4Address source, |
4472
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
163 |
Ipv4Address destination, uint8_t protocol, Ptr<Ipv4Route> route); |
6334
c9373f264dfe
Bug 932 - Support IP_HDRINCL option for Ipv4RawSocket
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
6015
diff
changeset
|
164 |
/** |
c9373f264dfe
Bug 932 - Support IP_HDRINCL option for Ipv4RawSocket
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
6015
diff
changeset
|
165 |
* \param packet packet to send |
6336
464e8093700d
update Bug 932 (Support IP_HDRINCL option for Ipv4RawSocket) again: regarding w/ Tom's comments.
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
6334
diff
changeset
|
166 |
* \param ipHeader IP Header |
6334
c9373f264dfe
Bug 932 - Support IP_HDRINCL option for Ipv4RawSocket
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
6015
diff
changeset
|
167 |
* \param route route entry |
c9373f264dfe
Bug 932 - Support IP_HDRINCL option for Ipv4RawSocket
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
6015
diff
changeset
|
168 |
* |
c9373f264dfe
Bug 932 - Support IP_HDRINCL option for Ipv4RawSocket
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
6015
diff
changeset
|
169 |
* Higher-level layers call this method to send a packet with IPv4 Header |
c9373f264dfe
Bug 932 - Support IP_HDRINCL option for Ipv4RawSocket
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
6015
diff
changeset
|
170 |
* (Intend to be used with IpHeaderInclude attribute.) |
c9373f264dfe
Bug 932 - Support IP_HDRINCL option for Ipv4RawSocket
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
6015
diff
changeset
|
171 |
*/ |
6723
fff5c512f345
bug 967: decouple Ipv4L4Protocols from Ipv4L3Protocol::Send() via a new callback
Tom Henderson <tomh@tomh.org>
parents:
6347
diff
changeset
|
172 |
void SendWithHeader (Ptr<Packet> packet, Ipv4Header ipHeader, Ptr<Ipv4Route> route); |
1428
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
1229
diff
changeset
|
173 |
|
639
4e3a1dc4b1e4
cleanup old dox and reorg header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
633
diff
changeset
|
174 |
uint32_t AddInterface (Ptr<NetDevice> device); |
1341
f685d4bf320f
use the Object::GetTraceResolver tracing support rather than the old adhoc tracing code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1333
diff
changeset
|
175 |
Ptr<Ipv4Interface> GetInterface (uint32_t i) const; |
639
4e3a1dc4b1e4
cleanup old dox and reorg header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
633
diff
changeset
|
176 |
uint32_t GetNInterfaces (void) const; |
4e3a1dc4b1e4
cleanup old dox and reorg header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
633
diff
changeset
|
177 |
|
4472
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
178 |
int32_t GetInterfaceForAddress (Ipv4Address addr) const; |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
179 |
int32_t GetInterfaceForPrefix (Ipv4Address addr, Ipv4Mask mask) const; |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
180 |
int32_t GetInterfaceForDevice (Ptr<const NetDevice> device) const; |
5760
4f08a0837018
Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents:
5739
diff
changeset
|
181 |
bool IsDestinationAddress (Ipv4Address address, uint32_t iif) const; |
639
4e3a1dc4b1e4
cleanup old dox and reorg header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
633
diff
changeset
|
182 |
|
4563 | 183 |
bool AddAddress (uint32_t i, Ipv4InterfaceAddress address); |
4373
e493e80274bd
implementation and plumbing of Ipv4InterfaceAddress class
Tom Henderson <tomh@tomh.org>
parents:
4372
diff
changeset
|
184 |
Ipv4InterfaceAddress GetAddress (uint32_t interfaceIndex, uint32_t addressIndex) const; |
e493e80274bd
implementation and plumbing of Ipv4InterfaceAddress class
Tom Henderson <tomh@tomh.org>
parents:
4372
diff
changeset
|
185 |
uint32_t GetNAddresses (uint32_t interface) const; |
4563 | 186 |
bool RemoveAddress (uint32_t interfaceIndex, uint32_t addressIndex); |
5850
1a6375ac5431
Fix bug 606: Arp depends on IP routing system
Tom Henderson <tomh@tomh.org>
parents:
5760
diff
changeset
|
187 |
Ipv4Address SelectSourceAddress (Ptr<const NetDevice> device, |
1a6375ac5431
Fix bug 606: Arp depends on IP routing system
Tom Henderson <tomh@tomh.org>
parents:
5760
diff
changeset
|
188 |
Ipv4Address dst, Ipv4InterfaceAddress::InterfaceAddressScope_e scope); |
1a6375ac5431
Fix bug 606: Arp depends on IP routing system
Tom Henderson <tomh@tomh.org>
parents:
5760
diff
changeset
|
189 |
|
4373
e493e80274bd
implementation and plumbing of Ipv4InterfaceAddress class
Tom Henderson <tomh@tomh.org>
parents:
4372
diff
changeset
|
190 |
|
1776
0d5be0c3d229
Add support for non-unit-cost metrics for Ipv4Interfaces (for use in routing); add example script simple-alternate-routing.cc
Tom Henderson <tomh@tomh.org>
parents:
1524
diff
changeset
|
191 |
void SetMetric (uint32_t i, uint16_t metric); |
0d5be0c3d229
Add support for non-unit-cost metrics for Ipv4Interfaces (for use in routing); add example script simple-alternate-routing.cc
Tom Henderson <tomh@tomh.org>
parents:
1524
diff
changeset
|
192 |
uint16_t GetMetric (uint32_t i) const; |
444
1647ca57f19d
remove ipv4 interface from public API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
415
diff
changeset
|
193 |
uint16_t GetMtu (uint32_t i) const; |
1647ca57f19d
remove ipv4 interface from public API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
415
diff
changeset
|
194 |
bool IsUp (uint32_t i) const; |
1647ca57f19d
remove ipv4 interface from public API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
415
diff
changeset
|
195 |
void SetUp (uint32_t i); |
1647ca57f19d
remove ipv4 interface from public API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
415
diff
changeset
|
196 |
void SetDown (uint32_t i); |
4607
0e15594f67f3
bug 63: allow enabling or disabling ip forwarding on a per-interface basis
Tom Henderson <tomh@tomh.org>
parents:
4573
diff
changeset
|
197 |
bool IsForwarding (uint32_t i) const; |
0e15594f67f3
bug 63: allow enabling or disabling ip forwarding on a per-interface basis
Tom Henderson <tomh@tomh.org>
parents:
4573
diff
changeset
|
198 |
void SetForwarding (uint32_t i, bool val); |
444
1647ca57f19d
remove ipv4 interface from public API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
415
diff
changeset
|
199 |
|
4377 | 200 |
Ptr<NetDevice> GetNetDevice (uint32_t i); |
201 |
||
513
b7c7ea629de9
make L3Demux an NsUnknown object.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
504
diff
changeset
|
202 |
protected: |
983
47c42bd66fb7
Support dynamic routing and multiple routing protocols; static routing table is refactored as a "routing protocol".
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
752
diff
changeset
|
203 |
|
513
b7c7ea629de9
make L3Demux an NsUnknown object.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
504
diff
changeset
|
204 |
virtual void DoDispose (void); |
4472
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
205 |
/** |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
206 |
* This function will notify other components connected to the node that a new stack member is now connected |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
207 |
* This will be used to notify Layer 3 protocol of layer 4 protocol stack to connect them together. |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
208 |
*/ |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
209 |
virtual void NotifyNewAggregate (); |
513
b7c7ea629de9
make L3Demux an NsUnknown object.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
504
diff
changeset
|
210 |
private: |
5339 | 211 |
friend class Ipv4L3ProtocolTestCase; |
3820 | 212 |
Ipv4L3Protocol(const Ipv4L3Protocol &); |
213 |
Ipv4L3Protocol &operator = (const Ipv4L3Protocol &); |
|
4472
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
214 |
|
5760
4f08a0837018
Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents:
5739
diff
changeset
|
215 |
// class Ipv4 attributes |
4472
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
216 |
virtual void SetIpForward (bool forward); |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
217 |
virtual bool GetIpForward (void) const; |
5760
4f08a0837018
Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents:
5739
diff
changeset
|
218 |
virtual void SetWeakEsModel (bool model); |
4f08a0837018
Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents:
5739
diff
changeset
|
219 |
virtual bool GetWeakEsModel (void) const; |
4472
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
220 |
|
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
221 |
Ipv4Header BuildHeader ( |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
222 |
Ipv4Address source, |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
223 |
Ipv4Address destination, |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
224 |
uint8_t protocol, |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
225 |
uint16_t payloadSize, |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
226 |
uint8_t ttl, |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
227 |
bool mayFragment); |
983
47c42bd66fb7
Support dynamic routing and multiple routing protocols; static routing table is refactored as a "routing protocol".
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
752
diff
changeset
|
228 |
|
4472
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
229 |
void |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
230 |
SendRealOut (Ptr<Ipv4Route> route, |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
231 |
Ptr<Packet> packet, |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
232 |
Ipv4Header const &ipHeader); |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
233 |
|
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
234 |
void |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
235 |
IpForward (Ptr<Ipv4Route> rtentry, |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
236 |
Ptr<const Packet> p, |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
237 |
const Ipv4Header &header); |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
238 |
|
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
239 |
void |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
240 |
IpMulticastForward (Ptr<Ipv4MulticastRoute> mrtentry, |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
241 |
Ptr<const Packet> p, |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
242 |
const Ipv4Header &header); |
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
243 |
|
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
244 |
void LocalDeliver (Ptr<const Packet> p, Ipv4Header const&ip, uint32_t iif); |
4607
0e15594f67f3
bug 63: allow enabling or disabling ip forwarding on a per-interface basis
Tom Henderson <tomh@tomh.org>
parents:
4573
diff
changeset
|
245 |
void RouteInputError (Ptr<const Packet> p, const Ipv4Header & ipHeader, Socket::SocketErrno sockErrno); |
0e15594f67f3
bug 63: allow enabling or disabling ip forwarding on a per-interface basis
Tom Henderson <tomh@tomh.org>
parents:
4573
diff
changeset
|
246 |
|
1341
f685d4bf320f
use the Object::GetTraceResolver tracing support rather than the old adhoc tracing code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1333
diff
changeset
|
247 |
uint32_t AddIpv4Interface (Ptr<Ipv4Interface> interface); |
444
1647ca57f19d
remove ipv4 interface from public API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
415
diff
changeset
|
248 |
void SetupLoopback (void); |
3820 | 249 |
Ptr<Icmpv4L4Protocol> GetIcmp (void) const; |
250 |
bool IsUnicast (Ipv4Address ad, Ipv4Mask interfaceMask) const; |
|
236
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
251 |
|
5487
9485bee6b7eb
Ipv4L3Protocol::GetInterface optimization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
5374
diff
changeset
|
252 |
typedef std::vector<Ptr<Ipv4Interface> > Ipv4InterfaceList; |
3820 | 253 |
typedef std::list<Ptr<Ipv4RawSocketImpl> > SocketList; |
254 |
typedef std::list<Ptr<Ipv4L4Protocol> > L4List_t; |
|
236
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
255 |
|
4472
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
256 |
bool m_ipForward; |
5760
4f08a0837018
Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents:
5739
diff
changeset
|
257 |
bool m_weakEsModel; |
3588
ad0a36bfdb62
bug 282: remove Ipv4L4Demux
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3548
diff
changeset
|
258 |
L4List_t m_protocols; |
236
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
259 |
Ipv4InterfaceList m_interfaces; |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
260 |
uint8_t m_defaultTtl; |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
261 |
uint16_t m_identification; |
728
95c426b1cb60
rename INode to Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
639
diff
changeset
|
262 |
Ptr<Node> m_node; |
5204
cb3087d8f330
Ipv4L3Protocol::Drop trace source enhanced, and add new SendOutgoing, UnicastForward, and LocalDeliver trace sources, for the FlowMonitor.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4616
diff
changeset
|
263 |
|
cb3087d8f330
Ipv4L3Protocol::Drop trace source enhanced, and add new SendOutgoing, UnicastForward, and LocalDeliver trace sources, for the FlowMonitor.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4616
diff
changeset
|
264 |
TracedCallback<const Ipv4Header &, Ptr<const Packet>, uint32_t> m_sendOutgoingTrace; |
cb3087d8f330
Ipv4L3Protocol::Drop trace source enhanced, and add new SendOutgoing, UnicastForward, and LocalDeliver trace sources, for the FlowMonitor.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4616
diff
changeset
|
265 |
TracedCallback<const Ipv4Header &, Ptr<const Packet>, uint32_t> m_unicastForwardTrace; |
cb3087d8f330
Ipv4L3Protocol::Drop trace source enhanced, and add new SendOutgoing, UnicastForward, and LocalDeliver trace sources, for the FlowMonitor.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4616
diff
changeset
|
266 |
TracedCallback<const Ipv4Header &, Ptr<const Packet>, uint32_t> m_localDeliverTrace; |
cb3087d8f330
Ipv4L3Protocol::Drop trace source enhanced, and add new SendOutgoing, UnicastForward, and LocalDeliver trace sources, for the FlowMonitor.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4616
diff
changeset
|
267 |
|
5374
825478d4cf10
Tom's update to Gustavo's patch for bug 676.
Craig Dowell <craigdo@ee.washington.edu>
parents:
5373
diff
changeset
|
268 |
// The following two traces pass a packet with an IP header |
6015
e9e4575cb6f3
clean up internet stack helper tracing
Craig Dowell <craigdo@ee.washington.edu>
parents:
5850
diff
changeset
|
269 |
TracedCallback<Ptr<const Packet>, Ptr<Ipv4>, uint32_t> m_txTrace; |
e9e4575cb6f3
clean up internet stack helper tracing
Craig Dowell <craigdo@ee.washington.edu>
parents:
5850
diff
changeset
|
270 |
TracedCallback<Ptr<const Packet>, Ptr<Ipv4>, uint32_t> m_rxTrace; |
5204
cb3087d8f330
Ipv4L3Protocol::Drop trace source enhanced, and add new SendOutgoing, UnicastForward, and LocalDeliver trace sources, for the FlowMonitor.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4616
diff
changeset
|
271 |
// <ip-header, payload, reason, ifindex> (ifindex not valid if reason is DROP_NO_ROUTE) |
6015
e9e4575cb6f3
clean up internet stack helper tracing
Craig Dowell <craigdo@ee.washington.edu>
parents:
5850
diff
changeset
|
272 |
TracedCallback<const Ipv4Header &, Ptr<const Packet>, DropReason, Ptr<Ipv4>, uint32_t> m_dropTrace; |
983
47c42bd66fb7
Support dynamic routing and multiple routing protocols; static routing table is refactored as a "routing protocol".
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
752
diff
changeset
|
273 |
|
4472
e20a31541404
src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
4377
diff
changeset
|
274 |
Ptr<Ipv4RoutingProtocol> m_routingProtocol; |
3820 | 275 |
|
276 |
SocketList m_sockets; |
|
236
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
277 |
}; |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
278 |
|
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
279 |
} // Namespace ns3 |
5673656dc2e7
a basic untested ipv4 implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
280 |
|
983
47c42bd66fb7
Support dynamic routing and multiple routing protocols; static routing table is refactored as a "routing protocol".
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
752
diff
changeset
|
281 |
#endif /* IPV4_L3_PROTOCOL_H */ |