author | Pavel Boyko <boyko@iitp.ru> |
Wed, 18 Nov 2009 13:01:17 +0300 | |
changeset 5749 | 1c6600743c9e |
parent 5735 | src/routing/manet/aodv/aodv-routing-protocol.cc@0d93fe37cdf5 |
child 5843 | aa227ef4f60f |
permissions | -rw-r--r-- |
5560 | 1 |
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
2 |
/* |
|
5591
e0448da5da14
AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents:
5590
diff
changeset
|
3 |
* Copyright (c) 2009 IITP RAS |
5560 | 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 |
* |
|
5591
e0448da5da14
AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents:
5590
diff
changeset
|
18 |
* Based on |
e0448da5da14
AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents:
5590
diff
changeset
|
19 |
* NS-2 AODV model developed by the CMU/MONARCH group and optimized and |
e0448da5da14
AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents:
5590
diff
changeset
|
20 |
* tuned by Samir Das and Mahesh Marina, University of Cincinnati; |
e0448da5da14
AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents:
5590
diff
changeset
|
21 |
* |
e0448da5da14
AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents:
5590
diff
changeset
|
22 |
* AODV-UU implementation by Erik Nordström of Uppsala University |
e0448da5da14
AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents:
5590
diff
changeset
|
23 |
* http://core.it.uu.se/core/index.php/AODV-UU |
5560 | 24 |
* |
5722 | 25 |
* Authors: Elena Buchatskaia <borovkovaes@iitp.ru> |
5591
e0448da5da14
AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents:
5590
diff
changeset
|
26 |
* Pavel Boyko <boyko@iitp.ru> |
5560 | 27 |
*/ |
28 |
#include "aodv-routing-protocol.h" |
|
29 |
#include "ns3/log.h" |
|
30 |
#include "ns3/random-variable.h" |
|
31 |
#include "ns3/inet-socket-address.h" |
|
32 |
#include "ns3/trace-source-accessor.h" |
|
5677 | 33 |
#include "ns3/udp-socket-factory.h" |
5681
795c049199c5
Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents:
5677
diff
changeset
|
34 |
#include "ns3/wifi-net-device.h" |
795c049199c5
Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents:
5677
diff
changeset
|
35 |
#include "ns3/adhoc-wifi-mac.h" |
5622
aa34a270824c
route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5621
diff
changeset
|
36 |
#include <algorithm> |
5613
c2e4bad4affc
Raw socket nearly work
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5612
diff
changeset
|
37 |
|
5560 | 38 |
NS_LOG_COMPONENT_DEFINE ("AodvRoutingProtocol"); |
39 |
||
40 |
namespace ns3 |
|
41 |
{ |
|
42 |
namespace aodv |
|
43 |
{ |
|
44 |
NS_OBJECT_ENSURE_REGISTERED (RoutingProtocol); |
|
45 |
||
5647
b5e2bb381517
#define AODV_PORT killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5645
diff
changeset
|
46 |
/// UDP Port for AODV control traffic |
b5e2bb381517
#define AODV_PORT killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5645
diff
changeset
|
47 |
const uint32_t RoutingProtocol::AODV_PORT = 654; |
5606
e6248d1eea81
handle active neighbors added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5605
diff
changeset
|
48 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
49 |
RoutingProtocol::RoutingProtocol () : |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
50 |
RreqRetries (2), |
5688
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
51 |
RreqRateLimit (10), |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
52 |
ActiveRouteTimeout (Seconds (3)), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
53 |
NetDiameter (35), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
54 |
NodeTraversalTime (MilliSeconds (40)), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
55 |
NetTraversalTime (Scalar (2 * NetDiameter) * NodeTraversalTime), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
56 |
PathDiscoveryTime ( Scalar (2) * NetTraversalTime), |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
57 |
MyRouteTimeout (Scalar (2) * std::max (PathDiscoveryTime, ActiveRouteTimeout)), |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
58 |
HelloInterval(Seconds (1)), |
5688
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
59 |
AllowedHelloLoss (2), |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
60 |
DeletePeriod (Scalar(5) * std::max(ActiveRouteTimeout, HelloInterval)), |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
61 |
NextHopWait (NodeTraversalTime + MilliSeconds (10)), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
62 |
TimeoutBuffer (2), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
63 |
BlackListTimeout(Scalar (RreqRetries) * NetTraversalTime), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
64 |
MaxQueueLen (64), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
65 |
MaxQueueTime (Seconds(30)), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
66 |
DestinationOnly (false), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
67 |
GratuitousReply (true), |
5658 | 68 |
EnableHello (true), |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
69 |
m_routingTable (DeletePeriod), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
70 |
m_queue (MaxQueueLen, MaxQueueTime), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
71 |
m_requestId (0), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
72 |
m_seqNo (0), |
5717 | 73 |
m_rreqIdCache (PathDiscoveryTime), |
74 |
m_dpd (PathDiscoveryTime), |
|
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
75 |
m_nb(HelloInterval), |
5688
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
76 |
m_rreqCount (0), |
5720
92594e167a58
[aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents:
5719
diff
changeset
|
77 |
m_htimer (Timer::CANCEL_ON_DESTROY), |
5688
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
78 |
m_rreqRateLimitTimer (Timer::CANCEL_ON_DESTROY) |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
79 |
{ |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
80 |
if (EnableHello) |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
81 |
{ |
5664
90aae51a4227
local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5662
diff
changeset
|
82 |
m_nb.SetCallback (MakeCallback (&RoutingProtocol::SendRerrWhenBreaksLinkToNextHop, this)); |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
83 |
} |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
84 |
} |
5560 | 85 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
86 |
TypeId |
5560 | 87 |
RoutingProtocol::GetTypeId (void) |
88 |
{ |
|
5619 | 89 |
static TypeId tid = TypeId ("ns3::aodv::RoutingProtocol") |
90 |
.SetParent<Ipv4RoutingProtocol> () |
|
91 |
.AddConstructor<RoutingProtocol> () |
|
92 |
.AddAttribute ("HelloInterval", "HELLO messages emission interval.", |
|
93 |
TimeValue (Seconds (1)), |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
94 |
MakeTimeAccessor (&RoutingProtocol::HelloInterval), |
5619 | 95 |
MakeTimeChecker ()) |
96 |
.AddAttribute ("RreqRetries", "Maximum number of retransmissions of RREQ to discover a route", |
|
97 |
UintegerValue (2), |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
98 |
MakeUintegerAccessor (&RoutingProtocol::RreqRetries), |
5619 | 99 |
MakeUintegerChecker<uint32_t> ()) |
5688
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
100 |
.AddAttribute ("RreqRateLimit", "Maximum number of RREQ per second.", |
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
101 |
UintegerValue (10), |
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
102 |
MakeUintegerAccessor (&RoutingProtocol::RreqRateLimit), |
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
103 |
MakeUintegerChecker<uint32_t> ()) |
5625 | 104 |
.AddAttribute ("NodeTraversalTime", "Conservative estimate of the average one hop traversal time for packets and should include " |
5619 | 105 |
"queuing delays, interrupt processing times and transfer times.", |
106 |
TimeValue (MilliSeconds (40)), |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
107 |
MakeTimeAccessor (&RoutingProtocol::NodeTraversalTime), |
5619 | 108 |
MakeTimeChecker ()) |
5701 | 109 |
.AddAttribute ("NextHopWait", "Period of our waiting for the neighbour's RREP_ACK = 10 ms + NodeTraversalTime", |
110 |
TimeValue (MilliSeconds (50)), |
|
111 |
MakeTimeAccessor (&RoutingProtocol::NextHopWait), |
|
112 |
MakeTimeChecker ()) |
|
5619 | 113 |
.AddAttribute ("ActiveRouteTimeout", "Period of time during which the route is considered to be valid", |
114 |
TimeValue (Seconds (3)), |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
115 |
MakeTimeAccessor (&RoutingProtocol::ActiveRouteTimeout), |
5619 | 116 |
MakeTimeChecker ()) |
5701 | 117 |
.AddAttribute ("MyRouteTimeout", "Value of lifetime field in RREP generating by this node = 2 * max(ActiveRouteTimeout, PathDiscoveryTime)", |
118 |
TimeValue (Seconds (11.2)), |
|
119 |
MakeTimeAccessor (&RoutingProtocol::MyRouteTimeout), |
|
120 |
MakeTimeChecker ()) |
|
121 |
.AddAttribute ("BlackListTimeout", "Time for which the node is put into the blacklist = RreqRetries * NetTraversalTime", |
|
122 |
TimeValue (Seconds (5.6)), |
|
123 |
MakeTimeAccessor (&RoutingProtocol::BlackListTimeout), |
|
124 |
MakeTimeChecker ()) |
|
125 |
.AddAttribute ("DeletePeriod", "DeletePeriod is intended to provide an upper bound on the time for which an upstream node A " |
|
126 |
"can have a neighbor B as an active next hop for destination D, while B has invalidated the route to D." |
|
127 |
" = 5 * max (HelloInterval, ActiveRouteTimeout)", |
|
128 |
TimeValue (Seconds (15)), |
|
129 |
MakeTimeAccessor (&RoutingProtocol::DeletePeriod), |
|
130 |
MakeTimeChecker ()) |
|
131 |
.AddAttribute ("TimeoutBuffer", "Its purpose is to provide a buffer for the timeout so that if the RREP is delayed" |
|
132 |
" due to congestion, a timeout is less likely to occur while the RREP is still en route back to the source.", |
|
133 |
UintegerValue (2), |
|
134 |
MakeUintegerAccessor (&RoutingProtocol::TimeoutBuffer), |
|
135 |
MakeUintegerChecker<uint16_t> ()) |
|
5619 | 136 |
.AddAttribute ("NetDiameter", "Net diameter measures the maximum possible number of hops between two nodes in the network", |
137 |
UintegerValue (35), |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
138 |
MakeUintegerAccessor (&RoutingProtocol::NetDiameter), |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
139 |
MakeUintegerChecker<uint32_t> ()) |
5701 | 140 |
.AddAttribute ("NetTraversalTime", "Estimate of the average net traversal time = 2 * NodeTraversalTime * NetDiameter", |
141 |
TimeValue (Seconds (2.8)), |
|
142 |
MakeTimeAccessor (&RoutingProtocol::NetTraversalTime), |
|
143 |
MakeTimeChecker ()) |
|
144 |
.AddAttribute ("PathDiscoveryTime", "Estimate of maximum time needed to find route in network = 2 * NetTraversalTime", |
|
145 |
TimeValue (Seconds (5.6)), |
|
146 |
MakeTimeAccessor (&RoutingProtocol::PathDiscoveryTime), |
|
147 |
MakeTimeChecker ()) |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
148 |
.AddAttribute ("MaxQueueLen", "Maximum number of packets that we allow a routing protocol to buffer.", |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
149 |
UintegerValue (64), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
150 |
MakeUintegerAccessor (&RoutingProtocol::MaxQueueLen), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
151 |
MakeUintegerChecker<uint32_t> ()) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
152 |
.AddAttribute ("MaxQueueTime", "Maximum time packets can be queued (in seconds)", |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
153 |
TimeValue (Seconds (30)), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
154 |
MakeTimeAccessor (&RoutingProtocol::MaxQueueTime), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
155 |
MakeTimeChecker ()) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
156 |
.AddAttribute ("AllowedHelloLoss", "Number of hello messages which may be loss for valid link.", |
5688
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
157 |
UintegerValue (2), |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
158 |
MakeUintegerAccessor (&RoutingProtocol::AllowedHelloLoss), |
5619 | 159 |
MakeUintegerChecker<uint16_t> ()) |
5654 | 160 |
.AddAttribute ("GratuitousReply", "Indicates whether a gratuitous RREP should be unicast to the node originated route discovery.", |
5634
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
161 |
BooleanValue (true), |
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
162 |
MakeBooleanAccessor (&RoutingProtocol::SetGratuitousReplyFlag, |
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
163 |
&RoutingProtocol::GetGratuitousReplyFlag), |
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
164 |
MakeBooleanChecker ()) |
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
165 |
.AddAttribute ("DestinationOnly", "Indicates only the destination may respond to this RREQ.", |
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
166 |
BooleanValue (false), |
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
167 |
MakeBooleanAccessor (&RoutingProtocol::SetDesinationOnlyFlag, |
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
168 |
&RoutingProtocol::GetDesinationOnlyFlag), |
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
169 |
MakeBooleanChecker ()) |
5654 | 170 |
.AddAttribute ("EnableHello", "Indicates whether a hello messages enable.", |
5658 | 171 |
BooleanValue (true), |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
172 |
MakeBooleanAccessor (&RoutingProtocol::SetHelloEnable, |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
173 |
&RoutingProtocol::GetHelloEnable), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
174 |
MakeBooleanChecker ()) |
5717 | 175 |
.AddAttribute ("EnableBroadcast", "Indicates whether a broadcast data packets forwarding enable.", |
176 |
BooleanValue (true), |
|
177 |
MakeBooleanAccessor (&RoutingProtocol::SetBroadcastEnable, |
|
178 |
&RoutingProtocol::GetBroadcastEnable), |
|
179 |
MakeBooleanChecker ()) |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
180 |
; |
5560 | 181 |
return tid; |
182 |
} |
|
5674 | 183 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
184 |
RoutingProtocol::~RoutingProtocol () |
5560 | 185 |
{ |
186 |
} |
|
187 |
||
188 |
void |
|
189 |
RoutingProtocol::DoDispose () |
|
190 |
{ |
|
191 |
m_ipv4 = 0; |
|
5699 | 192 |
for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::iterator iter = |
193 |
m_socketAddresses.begin (); iter != m_socketAddresses.end (); iter++) |
|
194 |
{ |
|
195 |
iter->first->Close (); |
|
196 |
} |
|
5560 | 197 |
m_socketAddresses.clear (); |
198 |
Ipv4RoutingProtocol::DoDispose (); |
|
199 |
} |
|
200 |
||
5582 | 201 |
void |
202 |
RoutingProtocol::Start () |
|
203 |
{ |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
204 |
m_scb = MakeCallback (&RoutingProtocol::Send, this); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
205 |
m_ecb = MakeCallback (&RoutingProtocol::Drop, this); |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
206 |
|
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
207 |
if (EnableHello) |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
208 |
{ |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
209 |
m_nb.ScheduleTimer (); |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
210 |
} |
5699 | 211 |
m_rreqRateLimitTimer.SetFunction (&RoutingProtocol::RreqRateLimitTimerExpire, |
212 |
this); |
|
5688
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
213 |
m_rreqRateLimitTimer.Schedule (Seconds (1)); |
5582 | 214 |
} |
215 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
216 |
Ptr<Ipv4Route> |
5699 | 217 |
RoutingProtocol::RouteOutput (Ptr<Packet> p, const Ipv4Header &header, |
218 |
uint32_t oif, Socket::SocketErrno &sockerr) |
|
5560 | 219 |
{ |
5692
4cc0291326c6
udp traffic added into aodv script + problem with remove fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5690
diff
changeset
|
220 |
NS_LOG_FUNCTION (this << header.GetDestination ()); |
5667
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
221 |
if (m_socketAddresses.empty ()) |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
222 |
{ |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
223 |
sockerr = Socket::ERROR_NOROUTETOHOST; |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
224 |
NS_LOG_LOGIC ("No aodv interfaces"); |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
225 |
Ptr<Ipv4Route> route; |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
226 |
return route; |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
227 |
} |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
228 |
sockerr = Socket::ERROR_NOTERROR; |
5607 | 229 |
Ptr<Ipv4Route> route; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
230 |
Ipv4Address dst = header.GetDestination (); |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
231 |
RoutingTableEntry rt; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
232 |
if (m_routingTable.LookupRoute (dst, rt)) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
233 |
{ |
5664
90aae51a4227
local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5662
diff
changeset
|
234 |
if (rt.GetFlag () == VALID) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
235 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
236 |
route = rt.GetRoute (); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
237 |
NS_ASSERT (route != 0); |
5699 | 238 |
NS_LOG_LOGIC("exist route to " << route->GetDestination() << " from interface " << route->GetSource()); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
239 |
UpdateRouteLifeTime (dst, ActiveRouteTimeout); |
5699 | 240 |
UpdateRouteLifeTime (route->GetGateway (), ActiveRouteTimeout); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
241 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
242 |
else |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
243 |
{ |
5680
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
244 |
bool result = true; |
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
245 |
// May be null pointer (e.g. tcp-socket give null pointer) |
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
246 |
if (p != Ptr<Packet> ()) |
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
247 |
{ |
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
248 |
QueueEntry newEntry (p, header, m_scb, m_ecb); |
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
249 |
result = m_queue.Enqueue (newEntry); |
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
250 |
if (result) |
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
251 |
NS_LOG_LOGIC ("Add packet " << p->GetUid() << " to queue"); |
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
252 |
|
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
253 |
} |
5688
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
254 |
if ((rt.GetFlag () == INVALID) && result) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
255 |
{ |
5675
d323064dd02f
expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5674
diff
changeset
|
256 |
SendRequest (dst); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
257 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
258 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
259 |
} |
5578
020a5aa8b40c
SendRequeat in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5577
diff
changeset
|
260 |
else |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
261 |
{ |
5680
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
262 |
bool result = true; |
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
263 |
if (p != Ptr<Packet> ()) |
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
264 |
{ |
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
265 |
QueueEntry newEntry (p, header, m_scb, m_ecb); |
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
266 |
// Some protocols may ask route several times for a single packet. |
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
267 |
result = m_queue.Enqueue (newEntry); |
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
268 |
if (result) |
5688
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
269 |
NS_LOG_LOGIC ("Add packet " << p->GetUid() << " to queue. Protocol " << (uint16_t) header.GetProtocol ()); |
5680
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
270 |
} |
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
271 |
if (result) |
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
272 |
SendRequest (dst); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
273 |
} |
5625 | 274 |
return route; |
5560 | 275 |
} |
276 |
||
277 |
bool |
|
5699 | 278 |
RoutingProtocol::RouteInput (Ptr<const Packet> p, const Ipv4Header &header, |
279 |
Ptr<const NetDevice> idev, UnicastForwardCallback ucb, |
|
280 |
MulticastForwardCallback mcb, LocalDeliverCallback lcb, ErrorCallback ecb) |
|
5560 | 281 |
{ |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
282 |
NS_LOG_FUNCTION (this << p->GetUid() << header.GetDestination() << idev->GetAddress()); |
5667
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
283 |
if (m_socketAddresses.empty ()) |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
284 |
{ |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
285 |
NS_LOG_LOGIC ("No aodv interfaces"); |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
286 |
return false; |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
287 |
} |
5579 | 288 |
NS_ASSERT (m_ipv4 != 0); |
289 |
// Check if input device supports IP |
|
290 |
NS_ASSERT (m_ipv4->GetInterfaceForDevice (idev) >= 0); |
|
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
291 |
int32_t iif = m_ipv4->GetInterfaceForDevice (idev); |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
292 |
|
5582 | 293 |
Ipv4Address dst = header.GetDestination (); |
5609 | 294 |
Ipv4Address origin = header.GetSource (); |
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
295 |
|
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
296 |
if (IsMyOwnAddress (origin)) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
297 |
return true; |
5579 | 298 |
|
5582 | 299 |
// Local delivery to AODV interfaces |
5699 | 300 |
for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j = |
301 |
m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j) |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
302 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
303 |
Ipv4InterfaceAddress iface = j->second; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
304 |
if (m_ipv4->GetInterfaceForAddress (iface.GetLocal ()) == iif) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
305 |
if (dst == iface.GetBroadcast ()) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
306 |
{ |
5717 | 307 |
if (!EnableBroadcast) |
308 |
{ |
|
309 |
return true; |
|
310 |
} |
|
5721 | 311 |
if (m_dpd.IsDuplicate (p, header)) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
312 |
{ |
5699 | 313 |
NS_LOG_DEBUG ("Duplicated packet " << p->GetUid () << " from " << origin << ". Drop."); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
314 |
return true; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
315 |
} |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
316 |
UpdateRouteLifeTime (origin, ActiveRouteTimeout); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
317 |
NS_LOG_LOGIC ("Broadcast local delivery to " << iface.GetLocal ()); |
5699 | 318 |
Ptr<Packet> packet = p->Copy (); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
319 |
lcb (p, header, iif); |
5690 | 320 |
if (header.GetTtl () > 1) |
5689
56aac7757f06
bcast forwarding seems to be fixed
Pavel Boyko <boyko@iitp.ru>
parents:
5687
diff
changeset
|
321 |
{ |
5694
a1da0ba7d1a8
broadcast UDP traffic in aodv script
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5692
diff
changeset
|
322 |
NS_LOG_LOGIC ("Forward broadcast. TTL " << (uint16_t) header.GetTtl ()); |
5697
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
323 |
RoutingTableEntry toBroadcast; |
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
324 |
if (m_routingTable.LookupRoute (dst, toBroadcast)) |
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
325 |
{ |
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
326 |
Ptr<Ipv4Route> route = toBroadcast.GetRoute (); |
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
327 |
ucb (route, packet, header); |
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
328 |
} |
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
329 |
else |
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
330 |
{ |
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
331 |
NS_LOG_DEBUG ("No route to forward broadcast. Drop packet " << p->GetUid ()); |
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
332 |
} |
5689
56aac7757f06
bcast forwarding seems to be fixed
Pavel Boyko <boyko@iitp.ru>
parents:
5687
diff
changeset
|
333 |
} |
5692
4cc0291326c6
udp traffic added into aodv script + problem with remove fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5690
diff
changeset
|
334 |
else |
4cc0291326c6
udp traffic added into aodv script + problem with remove fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5690
diff
changeset
|
335 |
{ |
5699 | 336 |
NS_LOG_DEBUG ("TTL exceeded. Drop packet " << p->GetUid ()); |
5692
4cc0291326c6
udp traffic added into aodv script + problem with remove fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5690
diff
changeset
|
337 |
} |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
338 |
return true; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
339 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
340 |
} |
5699 | 341 |
for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j = |
342 |
m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j) |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
343 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
344 |
Ipv4InterfaceAddress iface = j->second; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
345 |
if (dst == iface.GetLocal ()) |
5615
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
346 |
{ |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
347 |
UpdateRouteLifeTime (origin, ActiveRouteTimeout); |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
348 |
RoutingTableEntry toOrigin; |
5686
7dcbf7db5610
Broken link monitoring fixed, now it works in aodv-with-interface-down test
Pavel Boyko <boyko@iitp.ru>
parents:
5683
diff
changeset
|
349 |
if (m_routingTable.LookupRoute (origin, toOrigin)) |
7dcbf7db5610
Broken link monitoring fixed, now it works in aodv-with-interface-down test
Pavel Boyko <boyko@iitp.ru>
parents:
5683
diff
changeset
|
350 |
{ |
7dcbf7db5610
Broken link monitoring fixed, now it works in aodv-with-interface-down test
Pavel Boyko <boyko@iitp.ru>
parents:
5683
diff
changeset
|
351 |
UpdateRouteLifeTime (toOrigin.GetNextHop (), ActiveRouteTimeout); |
7dcbf7db5610
Broken link monitoring fixed, now it works in aodv-with-interface-down test
Pavel Boyko <boyko@iitp.ru>
parents:
5683
diff
changeset
|
352 |
m_nb.Update (toOrigin.GetNextHop (), ActiveRouteTimeout); |
7dcbf7db5610
Broken link monitoring fixed, now it works in aodv-with-interface-down test
Pavel Boyko <boyko@iitp.ru>
parents:
5683
diff
changeset
|
353 |
} |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
354 |
NS_LOG_LOGIC ("Unicast local delivery to " << iface.GetLocal ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
355 |
lcb (p, header, iif); |
5615
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
356 |
return true; |
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
357 |
} |
5579 | 358 |
} |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
359 |
|
5648
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
360 |
// Forwarding |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
361 |
return Forwarding (p, header, ucb, ecb); |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
362 |
} |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
363 |
|
5648
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
364 |
bool |
5699 | 365 |
RoutingProtocol::Forwarding (Ptr<const Packet> p, const Ipv4Header & header, |
366 |
UnicastForwardCallback ucb, ErrorCallback ecb) |
|
5648
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
367 |
{ |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
368 |
Ipv4Address dst = header.GetDestination (); |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
369 |
Ipv4Address origin = header.GetSource (); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
370 |
m_routingTable.Purge (); |
5609 | 371 |
RoutingTableEntry toDst; |
372 |
if (m_routingTable.LookupRoute (dst, toDst)) |
|
5622
aa34a270824c
route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5621
diff
changeset
|
373 |
{ |
5676 | 374 |
if (toDst.GetFlag () == VALID) |
5648
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
375 |
{ |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
376 |
Ptr<Ipv4Route> route = toDst.GetRoute (); |
5699 | 377 |
NS_LOG_LOGIC (route->GetSource()<<" forwarding to " << dst << " from " << origin << " packet " << p->GetUid ()); |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
378 |
|
5699 | 379 |
/* |
5648
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
380 |
* Each time a route is used to forward a data packet, its Active Route |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
381 |
* Lifetime field of the source, destination and the next hop on the |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
382 |
* path to the destination is updated to be no less than the current |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
383 |
* time plus ActiveRouteTimeout. |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
384 |
*/ |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
385 |
UpdateRouteLifeTime (origin, ActiveRouteTimeout); |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
386 |
UpdateRouteLifeTime (dst, ActiveRouteTimeout); |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
387 |
UpdateRouteLifeTime (route->GetGateway (), ActiveRouteTimeout); |
5699 | 388 |
/* |
5648
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
389 |
* Since the route between each originator and destination pair is expected to be symmetric, the |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
390 |
* Active Route Lifetime for the previous hop, along the reverse path back to the IP source, is also updated |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
391 |
* to be no less than the current time plus ActiveRouteTimeout |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
392 |
*/ |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
393 |
RoutingTableEntry toOrigin; |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
394 |
m_routingTable.LookupRoute (origin, toOrigin); |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
395 |
UpdateRouteLifeTime (toOrigin.GetNextHop (), ActiveRouteTimeout); |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
396 |
|
5699 | 397 |
m_nb.Update (route->GetGateway (), ActiveRouteTimeout); |
5648
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
398 |
m_nb.Update (toOrigin.GetNextHop (), ActiveRouteTimeout); |
5609 | 399 |
|
5648
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
400 |
ucb (route, p, header); |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
401 |
return true; |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
402 |
} |
5672
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
403 |
else |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
404 |
{ |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
405 |
if (toDst.GetValidSeqNo ()) |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
406 |
{ |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
407 |
SendRerrWhenNoRouteToForward (dst, toDst.GetSeqNo (), origin); |
5699 | 408 |
NS_LOG_DEBUG ("Drop packet " << p->GetUid () << " because no route to forward it."); |
5672
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
409 |
return false; |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
410 |
} |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
411 |
} |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
412 |
} |
5699 | 413 |
NS_LOG_LOGIC ("route not found to "<< dst << ". Send RERR message."); |
414 |
NS_LOG_DEBUG ("Drop packet " << p->GetUid () << " because no route to forward it."); |
|
5672
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
415 |
SendRerrWhenNoRouteToForward (dst, 0, origin); |
5578
020a5aa8b40c
SendRequeat in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5577
diff
changeset
|
416 |
return false; |
5560 | 417 |
} |
418 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
419 |
void |
5560 | 420 |
RoutingProtocol::SetIpv4 (Ptr<Ipv4> ipv4) |
421 |
{ |
|
5616
9d22b787ea7c
RawSocketImpl::ForwardUp fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5615
diff
changeset
|
422 |
NS_ASSERT (ipv4 != 0); |
9d22b787ea7c
RawSocketImpl::ForwardUp fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5615
diff
changeset
|
423 |
NS_ASSERT (m_ipv4 == 0); |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
424 |
|
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
425 |
if (EnableHello) |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
426 |
{ |
5720
92594e167a58
[aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents:
5719
diff
changeset
|
427 |
m_htimer.SetFunction (&RoutingProtocol::HelloTimerExpire, this); |
92594e167a58
[aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents:
5719
diff
changeset
|
428 |
m_htimer.Schedule (MilliSeconds (UniformVariable ().GetInteger (0, 100))); |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
429 |
} |
5571
b82fbde6cf8d
BroadcastIdCache methods and SendRequest() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5562
diff
changeset
|
430 |
|
5560 | 431 |
m_ipv4 = ipv4; |
432 |
Simulator::ScheduleNow (&RoutingProtocol::Start, this); |
|
433 |
} |
|
434 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
435 |
void |
5699 | 436 |
RoutingProtocol::NotifyInterfaceUp (uint32_t i) |
5560 | 437 |
{ |
5669
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
438 |
NS_LOG_FUNCTION (this << m_ipv4->GetAddress (i, 0).GetLocal ()); |
5668
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
439 |
Ptr<Ipv4L3Protocol> l3 = m_ipv4->GetObject<Ipv4L3Protocol> (); |
5700
7c93ecc5a430
use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5699
diff
changeset
|
440 |
if (l3->GetNAddresses (i) > 1) |
5668
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
441 |
{ |
5729
3fe43de9a826
[aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents:
5722
diff
changeset
|
442 |
NS_LOG_WARN ("AODV does not work with more then one address per each interface."); |
5668
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
443 |
} |
5700
7c93ecc5a430
use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5699
diff
changeset
|
444 |
Ipv4InterfaceAddress iface = l3->GetAddress (i, 0); |
5666
e22f5d735495
RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5665
diff
changeset
|
445 |
if (iface.GetLocal () == Ipv4Address ("127.0.0.1")) |
e22f5d735495
RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5665
diff
changeset
|
446 |
return; |
5681
795c049199c5
Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents:
5677
diff
changeset
|
447 |
|
5666
e22f5d735495
RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5665
diff
changeset
|
448 |
// Create a socket to listen only on this interface |
5699 | 449 |
Ptr<Socket> socket = Socket::CreateSocket (GetObject<Node> (), |
450 |
UdpSocketFactory::GetTypeId ()); |
|
5666
e22f5d735495
RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5665
diff
changeset
|
451 |
NS_ASSERT (socket != 0); |
e22f5d735495
RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5665
diff
changeset
|
452 |
socket->SetRecvCallback (MakeCallback (&RoutingProtocol::RecvAodv, this)); |
5699 | 453 |
socket->Bind (InetSocketAddress (iface.GetLocal (), AODV_PORT)); |
454 |
socket->Connect (InetSocketAddress (iface.GetBroadcast (), AODV_PORT)); |
|
455 |
socket->SetAttribute ("IpTtl", UintegerValue (1)); |
|
5666
e22f5d735495
RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5665
diff
changeset
|
456 |
m_socketAddresses.insert (std::make_pair (socket, iface)); |
e22f5d735495
RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5665
diff
changeset
|
457 |
|
e22f5d735495
RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5665
diff
changeset
|
458 |
// Add local broadcast record to the routing table |
e22f5d735495
RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5665
diff
changeset
|
459 |
Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (iface.GetLocal ())); |
e22f5d735495
RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5665
diff
changeset
|
460 |
RoutingTableEntry rt (/*device=*/dev, /*dst=*/iface.GetBroadcast (), /*know seqno=*/true, /*seqno=*/0, /*iface=*/iface, |
5711 | 461 |
/*hops=*/1, /*next hop=*/iface.GetBroadcast (), /*lifetime=*/Simulator::GetMaximumSimulationTime ()); |
5666
e22f5d735495
RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5665
diff
changeset
|
462 |
m_routingTable.AddRoute (rt); |
5681
795c049199c5
Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents:
5677
diff
changeset
|
463 |
|
795c049199c5
Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents:
5677
diff
changeset
|
464 |
// Allow neighbor manager use this interface for layer 2 feedback if possible |
795c049199c5
Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents:
5677
diff
changeset
|
465 |
Ptr<WifiNetDevice> wifi = dev->GetObject<WifiNetDevice> (); |
5699 | 466 |
if (wifi == 0) |
467 |
return; |
|
5735 | 468 |
Ptr<WifiMac> mac = wifi->GetMac (); |
5699 | 469 |
if (mac == 0) |
470 |
return; |
|
5681
795c049199c5
Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents:
5677
diff
changeset
|
471 |
|
5699 | 472 |
mac->TraceConnectWithoutContext ("TxErrHeader", m_nb.GetTxErrorCallback ()); |
5700
7c93ecc5a430
use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5699
diff
changeset
|
473 |
m_nb.AddArpCache (l3->GetInterface (i)->GetArpCache ()); |
5560 | 474 |
} |
475 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
476 |
void |
5699 | 477 |
RoutingProtocol::NotifyInterfaceDown (uint32_t i) |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
478 |
{ |
5569 | 479 |
NS_LOG_FUNCTION (this << m_ipv4->GetAddress (i, 0).GetLocal ()); |
5681
795c049199c5
Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents:
5677
diff
changeset
|
480 |
|
5699 | 481 |
// Disable layer 2 link state monitoring (if possible) |
5681
795c049199c5
Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents:
5677
diff
changeset
|
482 |
Ptr<Ipv4L3Protocol> l3 = m_ipv4->GetObject<Ipv4L3Protocol> (); |
5700
7c93ecc5a430
use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5699
diff
changeset
|
483 |
Ptr<NetDevice> dev = l3->GetNetDevice (i); |
5681
795c049199c5
Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents:
5677
diff
changeset
|
484 |
Ptr<WifiNetDevice> wifi = dev->GetObject<WifiNetDevice> (); |
5699 | 485 |
if (wifi != 0) |
5681
795c049199c5
Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents:
5677
diff
changeset
|
486 |
{ |
795c049199c5
Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents:
5677
diff
changeset
|
487 |
Ptr<WifiMac> mac = wifi->GetMac ()->GetObject<AdhocWifiMac> (); |
795c049199c5
Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents:
5677
diff
changeset
|
488 |
if (mac != 0) |
795c049199c5
Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents:
5677
diff
changeset
|
489 |
{ |
5699 | 490 |
mac->TraceDisconnectWithoutContext ("TxErrHeader", |
491 |
m_nb.GetTxErrorCallback ()); |
|
5700
7c93ecc5a430
use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5699
diff
changeset
|
492 |
m_nb.DelArpCache (l3->GetInterface (i)->GetArpCache ()); |
5681
795c049199c5
Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents:
5677
diff
changeset
|
493 |
} |
795c049199c5
Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents:
5677
diff
changeset
|
494 |
} |
795c049199c5
Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents:
5677
diff
changeset
|
495 |
|
795c049199c5
Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents:
5677
diff
changeset
|
496 |
// Close socket |
5667
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
497 |
Ptr<Socket> socket = FindSocketWithInterfaceAddress (m_ipv4->GetAddress (i, 0)); |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
498 |
NS_ASSERT (socket); |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
499 |
socket->Close (); |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
500 |
m_socketAddresses.erase (socket); |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
501 |
if (m_socketAddresses.empty ()) |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
502 |
{ |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
503 |
NS_LOG_LOGIC ("No aodv interfaces"); |
5720
92594e167a58
[aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents:
5719
diff
changeset
|
504 |
m_htimer.Cancel (); |
5667
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
505 |
m_nb.Clear (); |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
506 |
m_routingTable.Clear (); |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
507 |
return; |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
508 |
} |
2a81f8bf0199
RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5666
diff
changeset
|
509 |
m_routingTable.DeleteAllRoutesFromInterface (m_ipv4->GetAddress (i, 0)); |
5560 | 510 |
} |
511 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
512 |
void |
5699 | 513 |
RoutingProtocol::NotifyAddAddress (uint32_t i, Ipv4InterfaceAddress address) |
5560 | 514 |
{ |
5669
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
515 |
NS_LOG_FUNCTION (this << " interface " << i << " address " << address); |
5668
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
516 |
Ptr<Ipv4L3Protocol> l3 = m_ipv4->GetObject<Ipv4L3Protocol> (); |
5700
7c93ecc5a430
use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5699
diff
changeset
|
517 |
if (!l3->IsUp (i)) |
5699 | 518 |
return; |
5700
7c93ecc5a430
use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5699
diff
changeset
|
519 |
if (l3->GetNAddresses (i) == 1) |
5668
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
520 |
{ |
5700
7c93ecc5a430
use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5699
diff
changeset
|
521 |
Ipv4InterfaceAddress iface = l3->GetAddress (i, 0); |
5668
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
522 |
Ptr<Socket> socket = FindSocketWithInterfaceAddress (iface); |
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
523 |
if (!socket) |
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
524 |
{ |
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
525 |
if (iface.GetLocal () == Ipv4Address ("127.0.0.1")) |
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
526 |
return; |
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
527 |
// Create a socket to listen only on this interface |
5699 | 528 |
Ptr<Socket> socket = Socket::CreateSocket (GetObject<Node> (), |
529 |
UdpSocketFactory::GetTypeId ()); |
|
5668
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
530 |
NS_ASSERT (socket != 0); |
5699 | 531 |
socket->SetRecvCallback (MakeCallback (&RoutingProtocol::RecvAodv,this)); |
5668
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
532 |
socket->Bind (InetSocketAddress (iface.GetLocal (), AODV_PORT)); |
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
533 |
socket->Connect (InetSocketAddress (iface.GetBroadcast (), AODV_PORT)); |
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
534 |
m_socketAddresses.insert (std::make_pair (socket, iface)); |
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
535 |
|
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
536 |
// Add local broadcast record to the routing table |
5699 | 537 |
Ptr<NetDevice> dev = m_ipv4->GetNetDevice ( |
538 |
m_ipv4->GetInterfaceForAddress (iface.GetLocal ())); |
|
539 |
RoutingTableEntry rt (/*device=*/dev, /*dst=*/iface.GetBroadcast (), /*know seqno=*/true, |
|
540 |
/*seqno=*/0, /*iface=*/iface, /*hops=*/1, |
|
5711 | 541 |
/*next hop=*/iface.GetBroadcast (), /*lifetime=*/Simulator::GetMaximumSimulationTime ()); |
5668
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
542 |
m_routingTable.AddRoute (rt); |
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
543 |
} |
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
544 |
} |
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
545 |
else |
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
546 |
{ |
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
547 |
NS_LOG_LOGIC ("AODV does not work with more then one address per each interface. Ignore added address"); |
01d09aa60c45
RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5667
diff
changeset
|
548 |
} |
5560 | 549 |
} |
550 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
551 |
void |
5699 | 552 |
RoutingProtocol::NotifyRemoveAddress (uint32_t i, Ipv4InterfaceAddress address) |
5560 | 553 |
{ |
5669
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
554 |
NS_LOG_FUNCTION (this); |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
555 |
Ptr<Socket> socket = FindSocketWithInterfaceAddress (address); |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
556 |
if (socket) |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
557 |
{ |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
558 |
m_routingTable.DeleteAllRoutesFromInterface (address); |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
559 |
m_socketAddresses.erase (socket); |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
560 |
Ptr<Ipv4L3Protocol> l3 = m_ipv4->GetObject<Ipv4L3Protocol> (); |
5700
7c93ecc5a430
use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5699
diff
changeset
|
561 |
if (l3->GetNAddresses (i)) |
5669
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
562 |
{ |
5700
7c93ecc5a430
use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5699
diff
changeset
|
563 |
Ipv4InterfaceAddress iface = l3->GetAddress (i, 0); |
5669
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
564 |
// Create a socket to listen only on this interface |
5699 | 565 |
Ptr<Socket> socket = Socket::CreateSocket (GetObject<Node> (), |
566 |
UdpSocketFactory::GetTypeId ()); |
|
5669
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
567 |
NS_ASSERT (socket != 0); |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
568 |
socket->SetRecvCallback (MakeCallback (&RoutingProtocol::RecvAodv, this)); |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
569 |
socket->Bind (InetSocketAddress (iface.GetLocal (), AODV_PORT)); |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
570 |
socket->Connect (InetSocketAddress (iface.GetBroadcast (), AODV_PORT)); |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
571 |
m_socketAddresses.insert (std::make_pair (socket, iface)); |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
572 |
|
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
573 |
// Add local broadcast record to the routing table |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
574 |
Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (iface.GetLocal ())); |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
575 |
RoutingTableEntry rt (/*device=*/dev, /*dst=*/iface.GetBroadcast (), /*know seqno=*/true, /*seqno=*/0, /*iface=*/iface, |
5711 | 576 |
/*hops=*/1, /*next hop=*/iface.GetBroadcast (), /*lifetime=*/Simulator::GetMaximumSimulationTime ()); |
5669
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
577 |
m_routingTable.AddRoute (rt); |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
578 |
} |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
579 |
if (m_socketAddresses.empty ()) |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
580 |
{ |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
581 |
NS_LOG_LOGIC ("No aodv interfaces"); |
5720
92594e167a58
[aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents:
5719
diff
changeset
|
582 |
m_htimer.Cancel (); |
5669
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
583 |
m_nb.Clear (); |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
584 |
m_routingTable.Clear (); |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
585 |
return; |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
586 |
} |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
587 |
} |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
588 |
else |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
589 |
{ |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
590 |
NS_LOG_LOGIC ("Remove address not participating in AODV operation"); |
cdacd9c46201
RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5668
diff
changeset
|
591 |
} |
5560 | 592 |
} |
593 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
594 |
bool |
5699 | 595 |
RoutingProtocol::IsMyOwnAddress (Ipv4Address src) |
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
596 |
{ |
5699 | 597 |
for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j = |
598 |
m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j) |
|
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
599 |
{ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
600 |
Ipv4InterfaceAddress iface = j->second; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
601 |
if (src == iface.GetLocal ()) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
602 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
603 |
return true; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
604 |
} |
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
605 |
} |
5594
106389f6d383
Duplicate detection fixed in RREQ forwarding
Pavel Boyko <boyko@iitp.ru>
parents:
5593
diff
changeset
|
606 |
return false; |
106389f6d383
Duplicate detection fixed in RREQ forwarding
Pavel Boyko <boyko@iitp.ru>
parents:
5593
diff
changeset
|
607 |
} |
106389f6d383
Duplicate detection fixed in RREQ forwarding
Pavel Boyko <boyko@iitp.ru>
parents:
5593
diff
changeset
|
608 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
609 |
void |
5675
d323064dd02f
expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5674
diff
changeset
|
610 |
RoutingProtocol::SendRequest (Ipv4Address dst) |
5582 | 611 |
{ |
5614
e4ac62d42079
BuildHeader added + support of raw socket in ipv4-l3-protol added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5613
diff
changeset
|
612 |
NS_LOG_FUNCTION ( this << dst); |
5688
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
613 |
// A node SHOULD NOT originate more than RREQ_RATELIMIT RREQ messages per second. |
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
614 |
if (m_rreqCount == RreqRateLimit) |
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
615 |
{ |
5708
55abd6e61f17
MilliSeconds(double) fixed to MilliSeconds(int)
Pavel Boyko <boyko@iitp.ru>
parents:
5704
diff
changeset
|
616 |
Simulator::Schedule (m_rreqRateLimitTimer.GetDelayLeft () + MicroSeconds (100), |
5699 | 617 |
&RoutingProtocol::SendRequest, this, dst); |
5688
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
618 |
return; |
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
619 |
} |
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
620 |
else |
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
621 |
m_rreqCount++; |
5582 | 622 |
// Create RREQ header |
623 |
RreqHeader rreqHeader; |
|
624 |
rreqHeader.SetDst (dst); |
|
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
625 |
|
5609 | 626 |
RoutingTableEntry rt; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
627 |
if (m_routingTable.LookupRoute (dst, rt)) |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
628 |
{ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
629 |
rreqHeader.SetHopCount (rt.GetHop ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
630 |
if (rt.GetValidSeqNo ()) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
631 |
rreqHeader.SetDstSeqno (rt.GetSeqNo ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
632 |
else |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
633 |
rreqHeader.SetUnknownSeqno (true); |
5688
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
634 |
rt.SetFlag (IN_SEARCH); |
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
635 |
m_routingTable.AddRoute (rt); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
636 |
} |
5582 | 637 |
else |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
638 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
639 |
rreqHeader.SetUnknownSeqno (true); |
5699 | 640 |
RoutingTableEntry newEntry; |
5664
90aae51a4227
local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5662
diff
changeset
|
641 |
newEntry.SetFlag (IN_SEARCH); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
642 |
m_routingTable.AddRoute (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
643 |
} |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
644 |
|
5634
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
645 |
if (GratuitousReply) |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
646 |
rreqHeader.SetGratiousRrep (true); |
5634
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
647 |
if (DestinationOnly) |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
648 |
rreqHeader.SetDestinationOnly (true); |
5601 | 649 |
|
5597
8e4c7f2aaead
mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5594
diff
changeset
|
650 |
m_seqNo++; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
651 |
rreqHeader.SetOriginSeqno (m_seqNo); |
5615
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
652 |
m_requestId++; |
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
653 |
rreqHeader.SetId (m_requestId); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
654 |
rreqHeader.SetHopCount (0); |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
655 |
|
5625 | 656 |
// Send RREQ as subnet directed broadcast from each interface used by aodv |
5699 | 657 |
for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j = |
658 |
m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j) |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
659 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
660 |
Ptr<Socket> socket = j->first; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
661 |
Ipv4InterfaceAddress iface = j->second; |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
662 |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
663 |
rreqHeader.SetOrigin (iface.GetLocal ()); |
5721 | 664 |
m_rreqIdCache.IsDuplicate (iface.GetLocal (), m_requestId); |
5582 | 665 |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
666 |
Ptr<Packet> packet = Create<Packet> (); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
667 |
packet->AddHeader (rreqHeader); |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
668 |
TypeHeader tHeader (AODVTYPE_RREQ); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
669 |
packet->AddHeader (tHeader); |
5699 | 670 |
socket->Send (packet); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
671 |
} |
5675
d323064dd02f
expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5674
diff
changeset
|
672 |
ScheduleRreqRetry (dst); |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
673 |
if (EnableHello) |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
674 |
{ |
5720
92594e167a58
[aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents:
5719
diff
changeset
|
675 |
m_htimer.Cancel (); |
92594e167a58
[aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents:
5719
diff
changeset
|
676 |
m_htimer.Schedule (HelloInterval - Scalar (0.01) * MilliSeconds (UniformVariable ().GetInteger (0, 10))); |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
677 |
} |
5582 | 678 |
} |
679 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
680 |
void |
5675
d323064dd02f
expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5674
diff
changeset
|
681 |
RoutingProtocol::ScheduleRreqRetry (Ipv4Address dst) |
5641
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
682 |
{ |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
683 |
if (m_addressReqTimer.find (dst) == m_addressReqTimer.end ()) |
5675
d323064dd02f
expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5674
diff
changeset
|
684 |
{ |
d323064dd02f
expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5674
diff
changeset
|
685 |
Timer timer (Timer::CANCEL_ON_DESTROY); |
d323064dd02f
expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5674
diff
changeset
|
686 |
m_addressReqTimer[dst] = timer; |
d323064dd02f
expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5674
diff
changeset
|
687 |
} |
d323064dd02f
expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5674
diff
changeset
|
688 |
m_addressReqTimer[dst].SetFunction (&RoutingProtocol::RouteRequestTimerExpire, this); |
5699 | 689 |
m_addressReqTimer[dst].Remove (); |
5675
d323064dd02f
expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5674
diff
changeset
|
690 |
m_addressReqTimer[dst].SetArguments (dst); |
d323064dd02f
expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5674
diff
changeset
|
691 |
RoutingTableEntry rt; |
d323064dd02f
expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5674
diff
changeset
|
692 |
m_routingTable.LookupRoute (dst, rt); |
d323064dd02f
expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5674
diff
changeset
|
693 |
rt.IncrementRreqCnt (); |
d323064dd02f
expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5674
diff
changeset
|
694 |
m_routingTable.Update (rt); |
d323064dd02f
expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5674
diff
changeset
|
695 |
m_addressReqTimer[dst].Schedule (Scalar (rt.GetRreqCnt ()) * NetTraversalTime); |
5641
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
696 |
} |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
697 |
|
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
698 |
void |
5699 | 699 |
RoutingProtocol::RecvAodv (Ptr<Socket> socket) |
5560 | 700 |
{ |
5579 | 701 |
NS_LOG_FUNCTION (this); |
5560 | 702 |
Address sourceAddress; |
5615
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
703 |
Ptr<Packet> packet = socket->RecvFrom (sourceAddress); |
5677 | 704 |
InetSocketAddress inetSourceAddr = InetSocketAddress::ConvertFrom (sourceAddress); |
705 |
Ipv4Address sender = inetSourceAddr.GetIpv4 (); |
|
5612 | 706 |
Ipv4Address receiver = m_socketAddresses[socket].GetLocal (); |
707 |
NS_LOG_DEBUG ("AODV node " << this << " received a AODV packet from " << sender << " to " << receiver); |
|
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
708 |
|
5612 | 709 |
UpdateRouteToNeighbor (sender, receiver); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
710 |
TypeHeader tHeader (AODVTYPE_RREQ); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
711 |
packet->RemoveHeader (tHeader); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
712 |
if (!tHeader.IsValid ()) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
713 |
{ |
5699 | 714 |
NS_LOG_DEBUG ("AODV message " << packet->GetUid() << " with unknown type received: " << tHeader.Get() << ". Drop"); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
715 |
return; // drop |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
716 |
} |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
717 |
switch (tHeader.Get ()) |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
718 |
{ |
5583 | 719 |
case AODVTYPE_RREQ: |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
720 |
{ |
5677 | 721 |
RecvRequest (packet, receiver, sender); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
722 |
break; |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
723 |
} |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
724 |
case AODVTYPE_RREP: |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
725 |
{ |
5677 | 726 |
RecvReply (packet, receiver, sender); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
727 |
break; |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
728 |
} |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
729 |
case AODVTYPE_RERR: |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
730 |
{ |
5612 | 731 |
RecvError (packet, sender); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
732 |
break; |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
733 |
} |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
734 |
case AODVTYPE_RREP_ACK: |
5612 | 735 |
{ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
736 |
RecvReplyAck (sender); |
5612 | 737 |
break; |
738 |
} |
|
5583 | 739 |
} |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
740 |
} |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
741 |
|
5607 | 742 |
bool |
5699 | 743 |
RoutingProtocol::UpdateRouteLifeTime (Ipv4Address addr, Time lifetime) |
5607 | 744 |
{ |
5609 | 745 |
RoutingTableEntry rt; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
746 |
if (m_routingTable.LookupRoute (addr, rt)) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
747 |
{ |
5664
90aae51a4227
local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5662
diff
changeset
|
748 |
rt.SetFlag (VALID); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
749 |
rt.SetRreqCnt (0); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
750 |
rt.SetLifeTime (std::max (lifetime, rt.GetLifeTime ())); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
751 |
m_routingTable.Update (rt); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
752 |
return true; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
753 |
} |
5607 | 754 |
return false; |
755 |
} |
|
756 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
757 |
void |
5699 | 758 |
RoutingProtocol::UpdateRouteToNeighbor (Ipv4Address sender, Ipv4Address receiver) |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
759 |
{ |
5699 | 760 |
NS_LOG_FUNCTION (this << "sender " << sender << " receiver " << receiver); |
5609 | 761 |
RoutingTableEntry toNeighbor; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
762 |
if (!m_routingTable.LookupRoute (sender, toNeighbor)) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
763 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
764 |
Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver)); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
765 |
RoutingTableEntry newEntry (/*device=*/dev, /*dst=*/sender, /*know seqno=*/false, /*seqno=*/0, |
5658 | 766 |
/*iface=*/m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0), |
767 |
/*hops=*/1, /*next hop=*/sender, /*lifetime=*/ActiveRouteTimeout); |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
768 |
m_routingTable.AddRoute (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
769 |
} |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
770 |
else |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
771 |
{ |
5657
5983e16013d9
UpdateRouteToNeighbor changed to take into account case, when route to node exists in routing table with hop count != 1
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5656
diff
changeset
|
772 |
Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver)); |
5983e16013d9
UpdateRouteToNeighbor changed to take into account case, when route to node exists in routing table with hop count != 1
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5656
diff
changeset
|
773 |
RoutingTableEntry newEntry (/*device=*/dev, /*dst=*/sender, /*know seqno=*/false, /*seqno=*/0, |
5658 | 774 |
/*iface=*/m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0), |
775 |
/*hops=*/1, /*next hop=*/sender, /*lifetime=*/std::max (ActiveRouteTimeout, toNeighbor.GetLifeTime ())); |
|
5657
5983e16013d9
UpdateRouteToNeighbor changed to take into account case, when route to node exists in routing table with hop count != 1
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5656
diff
changeset
|
776 |
m_routingTable.Update (newEntry); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
777 |
} |
5583 | 778 |
} |
5578
020a5aa8b40c
SendRequeat in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5577
diff
changeset
|
779 |
|
5583 | 780 |
void |
5677 | 781 |
RoutingProtocol::RecvRequest (Ptr<Packet> p, Ipv4Address receiver, Ipv4Address src) |
5560 | 782 |
{ |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
783 |
NS_LOG_FUNCTION (this); |
5575 | 784 |
RreqHeader rreqHeader; |
5699 | 785 |
p->RemoveHeader (rreqHeader); |
5621
e6e336252f25
finding duplicated broadcast packet by packet uid
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5619
diff
changeset
|
786 |
|
e6e336252f25
finding duplicated broadcast packet by packet uid
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5619
diff
changeset
|
787 |
// A node ignores all RREQs received from any node in its blacklist |
e6e336252f25
finding duplicated broadcast packet by packet uid
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5619
diff
changeset
|
788 |
RoutingTableEntry toPrev; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
789 |
if (m_routingTable.LookupRoute (src, toPrev)) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
790 |
{ |
5632 | 791 |
if (toPrev.IsUnidirectional ()) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
792 |
return; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
793 |
} |
5621
e6e336252f25
finding duplicated broadcast packet by packet uid
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5619
diff
changeset
|
794 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
795 |
uint32_t id = rreqHeader.GetId (); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
796 |
Ipv4Address origin = rreqHeader.GetOrigin (); |
5575 | 797 |
|
5609 | 798 |
/* |
799 |
* Node checks to determine whether it has received a RREQ with the same Originator IP Address and RREQ ID. |
|
800 |
* If such a RREQ has been received, the node silently discards the newly received RREQ. |
|
801 |
*/ |
|
5721 | 802 |
if (m_rreqIdCache.IsDuplicate (origin, id)) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
803 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
804 |
return; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
805 |
} |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
806 |
|
5583 | 807 |
// Increment RREQ hop count |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
808 |
uint8_t hop = rreqHeader.GetHopCount () + 1; |
5583 | 809 |
rreqHeader.SetHopCount (hop); |
5584 | 810 |
|
5609 | 811 |
/* |
812 |
* When the reverse route is created or updated, the following actions on the route are also carried out: |
|
813 |
* 1. the Originator Sequence Number from the RREQ is compared to the corresponding destination sequence number |
|
814 |
* in the route table entry and copied if greater than the existing value there |
|
815 |
* 2. the valid sequence number field is set to true; |
|
816 |
* 3. the next hop in the routing table becomes the node from which the RREQ was received |
|
817 |
* 4. the hop count is copied from the Hop Count in the RREQ message; |
|
818 |
* 5. the Lifetime is set to be the maximum of (ExistingLifetime, MinimalLifetime), where |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
819 |
* MinimalLifetime = current time + 2*NetTraversalTime - 2*HopCount*NodeTraversalTime |
5609 | 820 |
*/ |
821 |
RoutingTableEntry toOrigin; |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
822 |
if (!m_routingTable.LookupRoute (origin, toOrigin)) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
823 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
824 |
Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver)); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
825 |
RoutingTableEntry newEntry (/*device=*/dev, /*dst=*/origin, /*validSeno=*/true, /*seqNo=*/rreqHeader.GetOriginSeqno (), |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
826 |
/*iface=*/m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0), /*hops=*/hop, |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
827 |
/*nextHop*/src, /*timeLife=*/Scalar (2) * NetTraversalTime - Scalar (2 * hop) * NodeTraversalTime); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
828 |
m_routingTable.AddRoute (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
829 |
} |
5599
5069c4c46ddb
SendReplyByIntermediateNode added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5598
diff
changeset
|
830 |
else |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
831 |
{ |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
832 |
if (toOrigin.GetValidSeqNo ()) |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
833 |
{ |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
834 |
if (int32_t (rreqHeader.GetOriginSeqno ()) - int32_t (toOrigin.GetSeqNo ()) > 0) |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
835 |
toOrigin.SetSeqNo (rreqHeader.GetOriginSeqno ()); |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
836 |
} |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
837 |
else |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
838 |
toOrigin.SetSeqNo (rreqHeader.GetOriginSeqno ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
839 |
toOrigin.SetValidSeqNo (true); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
840 |
toOrigin.SetNextHop (src); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
841 |
toOrigin.SetOutputDevice (m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver))); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
842 |
toOrigin.SetInterface (m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0)); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
843 |
toOrigin.SetHop (hop); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
844 |
toOrigin.SetLifeTime (std::max (Scalar (2) * NetTraversalTime - Scalar (2 * hop) * NodeTraversalTime, toOrigin.GetLifeTime ())); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
845 |
m_routingTable.Update (toOrigin); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
846 |
} |
5699 | 847 |
NS_LOG_LOGIC (receiver << " receive RREQ to destination " << rreqHeader.GetDst ()); |
5575 | 848 |
|
849 |
// A node generates a RREP if either: |
|
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
850 |
// (i) it is itself the destination, |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
851 |
if (IsMyOwnAddress (rreqHeader.GetDst ())) |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
852 |
{ |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
853 |
m_routingTable.LookupRoute (origin, toOrigin); |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
854 |
SendReply (rreqHeader, toOrigin); |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
855 |
return; |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
856 |
} |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
857 |
/* |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
858 |
* (ii) or it has an active route to the destination, the destination sequence number in the node's existing route table entry for the destination |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
859 |
* is valid and greater than or equal to the Destination Sequence Number of the RREQ, and the "destination only" flag is NOT set. |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
860 |
*/ |
5609 | 861 |
RoutingTableEntry toDst; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
862 |
Ipv4Address dst = rreqHeader.GetDst (); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
863 |
if (m_routingTable.LookupRoute (dst, toDst)) |
5575 | 864 |
{ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
865 |
/* |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
866 |
* The Destination Sequence number for the requested destination is set to the maximum of the corresponding value |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
867 |
* received in the RREQ message, and the destination sequence value currently maintained by the node for the requested destination. |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
868 |
* However, the forwarding node MUST NOT modify its maintained value for the destination sequence number, even if the value |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
869 |
* received in the incoming RREQ is larger than the value currently maintained by the forwarding node. |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
870 |
*/ |
5699 | 871 |
if (rreqHeader.GetUnknownSeqno () || ( (int32_t (toDst.GetSeqNo ()) - int32_t (rreqHeader.GetDstSeqno ()) > 0) |
872 |
&& toDst.GetValidSeqNo () )) |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
873 |
{ |
5664
90aae51a4227
local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5662
diff
changeset
|
874 |
if (!rreqHeader.GetDestinationOnly () && toDst.GetFlag() == VALID) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
875 |
{ |
5653 | 876 |
m_routingTable.LookupRoute (origin, toOrigin); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
877 |
SendReplyByIntermediateNode (toDst, toOrigin, rreqHeader.GetGratiousRrep ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
878 |
return; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
879 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
880 |
rreqHeader.SetDstSeqno (toDst.GetSeqNo ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
881 |
rreqHeader.SetUnknownSeqno (false); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
882 |
} |
5575 | 883 |
} |
5655 | 884 |
|
5699 | 885 |
for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j = |
886 |
m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j) |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
887 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
888 |
Ptr<Socket> socket = j->first; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
889 |
Ipv4InterfaceAddress iface = j->second; |
5677 | 890 |
Ptr<Packet> packet = Create<Packet> (); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
891 |
packet->AddHeader (rreqHeader); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
892 |
TypeHeader tHeader (AODVTYPE_RREQ); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
893 |
packet->AddHeader (tHeader); |
5677 | 894 |
socket->Send (packet); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
895 |
} |
5609 | 896 |
|
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
897 |
if (EnableHello) |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
898 |
{ |
5720
92594e167a58
[aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents:
5719
diff
changeset
|
899 |
m_htimer.Cancel (); |
92594e167a58
[aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents:
5719
diff
changeset
|
900 |
m_htimer.Schedule (HelloInterval - Scalar(0.1)*MilliSeconds(UniformVariable().GetInteger (0, 10))); |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
901 |
} |
5583 | 902 |
} |
5573
040121bb814c
BroadcastId methods and SendRequest() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5572
diff
changeset
|
903 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
904 |
void |
5699 | 905 |
RoutingProtocol::SendReply (RreqHeader const & rreqHeader, RoutingTableEntry const & toOrigin) |
5583 | 906 |
{ |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
907 |
NS_LOG_FUNCTION (this << toOrigin.GetDestination ()); |
5610
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
908 |
/* |
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
909 |
* Destination node MUST increment its own sequence number by one if the sequence number in the RREQ packet is equal to that |
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
910 |
* incremented value. Otherwise, the destination does not change its sequence number before generating the RREP message. |
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
911 |
*/ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
912 |
if (!rreqHeader.GetUnknownSeqno () && (rreqHeader.GetDstSeqno () == m_seqNo + 1)) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
913 |
m_seqNo++; |
5730
f530c4943146
time diagram + fixed hop count
Elena Buchatskaia <borovkovaes@iitp.ru>
parents:
5729
diff
changeset
|
914 |
RrepHeader rrepHeader ( /*prefixSize=*/0, /*hops=*/0, /*dst=*/rreqHeader.GetDst (), |
5699 | 915 |
/*dstSeqNo=*/m_seqNo, /*origin=*/toOrigin.GetDestination (), /*lifeTime=*/MyRouteTimeout); |
5610
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
916 |
Ptr<Packet> packet = Create<Packet> (); |
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
917 |
packet->AddHeader (rrepHeader); |
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
918 |
TypeHeader tHeader (AODVTYPE_RREP); |
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
919 |
packet->AddHeader (tHeader); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
920 |
Ptr<Socket> socket = FindSocketWithInterfaceAddress (toOrigin.GetInterface ()); |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
921 |
NS_ASSERT (socket); |
5677 | 922 |
socket->SendTo (packet, 0, InetSocketAddress (toOrigin.GetNextHop (), AODV_PORT)); |
5610
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
923 |
} |
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
924 |
|
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
925 |
void |
5699 | 926 |
RoutingProtocol::SendReplyByIntermediateNode (RoutingTableEntry & toDst, RoutingTableEntry & toOrigin, bool gratRep) |
5610
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
927 |
{ |
5653 | 928 |
NS_LOG_FUNCTION(this); |
5610
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
929 |
RrepHeader rrepHeader (/*prefix size=*/0, /*hops=*/toDst.GetHop (), /*dst=*/toDst.GetDestination (), /*dst seqno=*/toDst.GetSeqNo (), |
5656
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
930 |
/*origin=*/toOrigin.GetDestination (), /*lifetime=*/toDst.GetLifeTime ()); |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
931 |
/* If the node we received a RREQ for is a neighbor we are |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
932 |
* probably facing a unidirectional link... Better request a RREP-ack |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
933 |
*/ |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
934 |
if (toDst.GetHop () == 1) |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
935 |
{ |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
936 |
rrepHeader.SetAckRequired (true); |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
937 |
RoutingTableEntry toNextHop; |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
938 |
m_routingTable.LookupRoute (toOrigin.GetNextHop (), toNextHop); |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
939 |
toNextHop.m_ackTimer.SetFunction (&RoutingProtocol::AckTimerExpire, this); |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
940 |
toNextHop.m_ackTimer.SetArguments (toNextHop.GetDestination (), BlackListTimeout); |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
941 |
toNextHop.m_ackTimer.SetDelay (NextHopWait); |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
942 |
} |
5610
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
943 |
toDst.InsertPrecursor (toOrigin.GetNextHop ()); |
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
944 |
toOrigin.InsertPrecursor (toDst.GetNextHop ()); |
5627
3fb6bda728ad
unit test for routing table updated
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5626
diff
changeset
|
945 |
m_routingTable.Update (toDst); |
3fb6bda728ad
unit test for routing table updated
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5626
diff
changeset
|
946 |
m_routingTable.Update (toOrigin); |
5587 | 947 |
|
5583 | 948 |
Ptr<Packet> packet = Create<Packet> (); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
949 |
packet->AddHeader (rrepHeader); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
950 |
TypeHeader tHeader (AODVTYPE_RREP); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
951 |
packet->AddHeader (tHeader); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
952 |
Ptr<Socket> socket = FindSocketWithInterfaceAddress (toOrigin.GetInterface ()); |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
953 |
NS_ASSERT (socket); |
5677 | 954 |
socket->SendTo (packet, 0, InetSocketAddress (toOrigin.GetNextHop (), AODV_PORT)); |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
955 |
|
5610
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
956 |
// Generating gratuitous RREPs |
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
957 |
if (gratRep) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
958 |
{ |
5699 | 959 |
RrepHeader gratRepHeader (/*prefix size=*/0, /*hops=*/toOrigin.GetHop (), /*dst=*/toOrigin.GetDestination (), |
960 |
/*dst seqno=*/toOrigin.GetSeqNo (), /*origin=*/toDst.GetDestination (), |
|
961 |
/*lifetime=*/toOrigin.GetLifeTime ()); |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
962 |
Ptr<Packet> packetToDst = Create<Packet> (); |
5659
af1e766370c6
sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5658
diff
changeset
|
963 |
packetToDst->AddHeader (gratRepHeader); |
af1e766370c6
sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5658
diff
changeset
|
964 |
TypeHeader type (AODVTYPE_RREP); |
af1e766370c6
sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5658
diff
changeset
|
965 |
packetToDst->AddHeader (type); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
966 |
Ptr<Socket> socket = FindSocketWithInterfaceAddress (toDst.GetInterface ()); |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
967 |
NS_ASSERT (socket); |
5659
af1e766370c6
sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5658
diff
changeset
|
968 |
NS_LOG_LOGIC ("Send gratuitous RREP " << packet->GetUid()); |
5677 | 969 |
socket->SendTo (packetToDst, 0, InetSocketAddress (toDst.GetNextHop (), AODV_PORT)); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
970 |
} |
5560 | 971 |
} |
972 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
973 |
void |
5699 | 974 |
RoutingProtocol::SendReplyAck (Ipv4Address neighbor) |
5560 | 975 |
{ |
5679 | 976 |
NS_LOG_FUNCTION (this << " to " << neighbor); |
5611
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
977 |
RrepAckHeader h; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
978 |
TypeHeader typeHeader (AODVTYPE_RREP_ACK); |
5611
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
979 |
Ptr<Packet> packet = Create<Packet> (); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
980 |
packet->AddHeader (h); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
981 |
packet->AddHeader (typeHeader); |
5612 | 982 |
RoutingTableEntry toNeighbor; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
983 |
m_routingTable.LookupRoute (neighbor, toNeighbor); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
984 |
Ptr<Socket> socket = FindSocketWithInterfaceAddress (toNeighbor.GetInterface ()); |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
985 |
NS_ASSERT (socket); |
5677 | 986 |
socket->SendTo (packet, 0, InetSocketAddress (neighbor, AODV_PORT)); |
5611
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
987 |
} |
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
988 |
|
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
989 |
void |
5677 | 990 |
RoutingProtocol::RecvReply (Ptr<Packet> p, Ipv4Address receiver, Ipv4Address sender) |
5611
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
991 |
{ |
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
992 |
NS_LOG_FUNCTION(this << " src " << sender); |
5576 | 993 |
RrepHeader rrepHeader; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
994 |
p->RemoveHeader (rrepHeader); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
995 |
Ipv4Address dst = rrepHeader.GetDst (); |
5623
8c5b97aff720
expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5622
diff
changeset
|
996 |
NS_LOG_LOGIC("RREP destination " << dst << " RREP origin " << rrepHeader.GetOrigin()); |
5576 | 997 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
998 |
uint8_t hop = rrepHeader.GetHopCount () + 1; |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
999 |
rrepHeader.SetHopCount (hop); |
5600
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
1000 |
|
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
1001 |
// If RREP is Hello message |
5623
8c5b97aff720
expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5622
diff
changeset
|
1002 |
if (dst == rrepHeader.GetOrigin ()) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1003 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1004 |
ProcessHello (rrepHeader, receiver); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1005 |
return; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1006 |
} |
5600
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
1007 |
|
5611
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
1008 |
/* |
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
1009 |
* If the route table entry to the destination is created or updated, then the following actions occur: |
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
1010 |
* - the route is marked as active, |
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
1011 |
* - the destination sequence number is marked as valid, |
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
1012 |
* - the next hop in the route entry is assigned to be the node from which the RREP is received, |
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
1013 |
* which is indicated by the source IP address field in the IP header, |
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
1014 |
* - the hop count is set to the value of the hop count from RREP message + 1 |
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
1015 |
* - the expiry time is set to the current time plus the value of the Lifetime in the RREP message, |
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
1016 |
* - and the destination sequence number is the Destination Sequence Number in the RREP message. |
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
1017 |
*/ |
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
1018 |
Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver)); |
5623
8c5b97aff720
expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5622
diff
changeset
|
1019 |
RoutingTableEntry newEntry (/*device=*/dev, /*dst=*/dst, /*validSeqNo=*/true, /*seqno=*/rrepHeader.GetDstSeqno (), |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1020 |
/*iface=*/m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0),/*hop=*/hop, |
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1021 |
/*nextHop=*/sender, /*lifeTime=*/rrepHeader.GetLifeTime ()); |
5609 | 1022 |
RoutingTableEntry toDst; |
5623
8c5b97aff720
expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5622
diff
changeset
|
1023 |
if (m_routingTable.LookupRoute (dst, toDst)) |
5576 | 1024 |
{ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1025 |
/* |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1026 |
* The existing entry is updated only in the following circumstances: |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1027 |
* (i) the sequence number in the routing table is marked as invalid in route table entry. |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1028 |
*/ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1029 |
if (!toDst.GetValidSeqNo ()) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1030 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1031 |
m_routingTable.Update (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1032 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1033 |
// (ii)the Destination Sequence Number in the RREP is greater than the node's copy of the destination sequence number and the known value is valid, |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1034 |
else if ((int32_t (rrepHeader.GetDstSeqno ()) - int32_t (toDst.GetSeqNo ())) > 0) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1035 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1036 |
m_routingTable.Update (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1037 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1038 |
else |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1039 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1040 |
// (iii) the sequence numbers are the same, but the route is marked as inactive. |
5664
90aae51a4227
local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5662
diff
changeset
|
1041 |
if ((rrepHeader.GetDstSeqno () == toDst.GetSeqNo ()) && (toDst.GetFlag () != VALID)) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1042 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1043 |
m_routingTable.Update (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1044 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1045 |
// (iv) the sequence numbers are the same, and the New Hop Count is smaller than the hop count in route table entry. |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1046 |
else if ((rrepHeader.GetDstSeqno () == toDst.GetSeqNo ()) && (hop < toDst.GetHop ())) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1047 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1048 |
m_routingTable.Update (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1049 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1050 |
} |
5576 | 1051 |
} |
5601 | 1052 |
else |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1053 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1054 |
// The forward route for this destination is created if it does not already exist. |
5729
3fe43de9a826
[aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents:
5722
diff
changeset
|
1055 |
NS_LOG_LOGIC ("add new route"); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1056 |
m_routingTable.AddRoute (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1057 |
} |
5612 | 1058 |
// Acknowledge receipt of the RREP by sending a RREP-ACK message back |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1059 |
if (rrepHeader.GetAckRequired ()) |
5659
af1e766370c6
sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5658
diff
changeset
|
1060 |
{ |
af1e766370c6
sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5658
diff
changeset
|
1061 |
SendReplyAck (sender); |
af1e766370c6
sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5658
diff
changeset
|
1062 |
rrepHeader.SetAckRequired (false); |
af1e766370c6
sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5658
diff
changeset
|
1063 |
} |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1064 |
NS_LOG_LOGIC ("receiver " << receiver << " origin " << rrepHeader.GetOrigin ()); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
1065 |
if (IsMyOwnAddress (rrepHeader.GetOrigin ())) |
5623
8c5b97aff720
expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5622
diff
changeset
|
1066 |
{ |
5664
90aae51a4227
local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5662
diff
changeset
|
1067 |
if (toDst.GetFlag () == IN_SEARCH) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1068 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1069 |
m_routingTable.Update (newEntry); |
5697
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
1070 |
m_addressReqTimer[dst].Remove (); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1071 |
m_addressReqTimer.erase (dst); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1072 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1073 |
SendPacketFromQueue (rrepHeader.GetDst (), newEntry.GetRoute ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1074 |
return; |
5623
8c5b97aff720
expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5622
diff
changeset
|
1075 |
} |
5576 | 1076 |
|
5609 | 1077 |
RoutingTableEntry toOrigin; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1078 |
if (!m_routingTable.LookupRoute (rrepHeader.GetOrigin (), toOrigin)) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1079 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1080 |
return; // Impossible! drop. |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1081 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1082 |
toOrigin.SetLifeTime (std::max (ActiveRouteTimeout, toOrigin.GetLifeTime ())); |
5627
3fb6bda728ad
unit test for routing table updated
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5626
diff
changeset
|
1083 |
m_routingTable.Update (toOrigin); |
5622
aa34a270824c
route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5621
diff
changeset
|
1084 |
|
5603
46f56ea8e7b9
buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5602
diff
changeset
|
1085 |
// Update information about precursors |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1086 |
m_routingTable.LookupRoute (rrepHeader.GetDst (), toDst); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1087 |
toDst.InsertPrecursor (toOrigin.GetNextHop ()); |
5627
3fb6bda728ad
unit test for routing table updated
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5626
diff
changeset
|
1088 |
m_routingTable.Update (toDst); |
5665
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1089 |
|
5609 | 1090 |
RoutingTableEntry toNextHopToDst; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1091 |
m_routingTable.LookupRoute (toDst.GetNextHop (), toNextHopToDst); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1092 |
toNextHopToDst.InsertPrecursor (toOrigin.GetNextHop ()); |
5627
3fb6bda728ad
unit test for routing table updated
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5626
diff
changeset
|
1093 |
m_routingTable.Update (toNextHopToDst); |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
1094 |
|
5665
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1095 |
toOrigin.InsertPrecursor (toDst.GetNextHop ()); |
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1096 |
m_routingTable.Update (toOrigin); |
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1097 |
|
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1098 |
RoutingTableEntry toNextHopToOrigin; |
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1099 |
m_routingTable.LookupRoute (toOrigin.GetNextHop (), toNextHopToOrigin); |
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1100 |
toNextHopToOrigin.InsertPrecursor (toDst.GetNextHop ()); |
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1101 |
m_routingTable.Update (toNextHopToOrigin); |
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1102 |
|
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
1103 |
Ptr<Packet> packet = Create<Packet> (); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1104 |
packet->AddHeader (rrepHeader); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1105 |
TypeHeader tHeader (AODVTYPE_RREP); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1106 |
packet->AddHeader (tHeader); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
1107 |
Ptr<Socket> socket = FindSocketWithInterfaceAddress (toOrigin.GetInterface ()); |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1108 |
NS_ASSERT (socket); |
5677 | 1109 |
socket->SendTo (packet, 0, InetSocketAddress (toOrigin.GetNextHop (), AODV_PORT)); |
5600
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
1110 |
} |
5586 | 1111 |
|
5612 | 1112 |
void |
5677 | 1113 |
RoutingProtocol::RecvReplyAck (Ipv4Address neighbor) |
5612 | 1114 |
{ |
5679 | 1115 |
NS_LOG_FUNCTION (this); |
1116 |
RoutingTableEntry rt; |
|
1117 |
if(m_routingTable.LookupRoute(neighbor, rt)) |
|
1118 |
{ |
|
1119 |
rt.m_ackTimer.Cancel (); |
|
1120 |
rt.SetFlag (VALID); |
|
1121 |
m_routingTable.Update(rt); |
|
1122 |
} |
|
5612 | 1123 |
} |
1124 |
||
5600
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
1125 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1126 |
RoutingProtocol::ProcessHello (RrepHeader const & rrepHeader, Ipv4Address receiver ) |
5600
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
1127 |
{ |
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
1128 |
NS_LOG_FUNCTION(this << "from " << rrepHeader.GetDst ()); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1129 |
/* |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1130 |
* Whenever a node receives a Hello message from a neighbor, the node |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1131 |
* SHOULD make sure that it has an active route to the neighbor, and |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1132 |
* create one if necessary. |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1133 |
*/ |
5609 | 1134 |
RoutingTableEntry toNeighbor; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1135 |
if (!m_routingTable.LookupRoute (rrepHeader.GetDst (), toNeighbor)) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1136 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1137 |
Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver)); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1138 |
RoutingTableEntry newEntry (/*device=*/dev, /*dst=*/rrepHeader.GetDst (), /*validSeqNo=*/true, /*seqno=*/rrepHeader.GetDstSeqno (), |
5653 | 1139 |
/*iface=*/m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0), |
1140 |
/*hop=*/1, /*nextHop=*/rrepHeader.GetDst (), /*lifeTime=*/rrepHeader.GetLifeTime ()); |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1141 |
m_routingTable.AddRoute (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1142 |
} |
5600
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
1143 |
else |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1144 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1145 |
toNeighbor.SetLifeTime (std::max (Scalar (AllowedHelloLoss) * HelloInterval, toNeighbor.GetLifeTime ())); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1146 |
toNeighbor.SetSeqNo (rrepHeader.GetDstSeqno ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1147 |
toNeighbor.SetValidSeqNo (true); |
5664
90aae51a4227
local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5662
diff
changeset
|
1148 |
toNeighbor.SetFlag (VALID); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1149 |
toNeighbor.SetOutputDevice (m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver))); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1150 |
toNeighbor.SetInterface (m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0)); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1151 |
m_routingTable.Update (toNeighbor); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1152 |
} |
5658 | 1153 |
if (EnableHello) |
1154 |
{ |
|
1155 |
m_nb.Update (rrepHeader.GetDst (), Scalar (AllowedHelloLoss) * HelloInterval); |
|
1156 |
} |
|
5560 | 1157 |
} |
1158 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1159 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1160 |
RoutingProtocol::RecvError (Ptr<Packet> p, Ipv4Address src ) |
5560 | 1161 |
{ |
5665
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1162 |
NS_LOG_FUNCTION (this << " from " << src); |
5607 | 1163 |
RerrHeader rerrHeader; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1164 |
p->RemoveHeader (rerrHeader); |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1165 |
std::map<Ipv4Address, uint32_t> dstWithNextHopSrc; |
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1166 |
std::map<Ipv4Address, uint32_t> unreachable; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1167 |
m_routingTable.GetListOfDestinationWithNextHop (src, dstWithNextHopSrc); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1168 |
std::pair<Ipv4Address, uint32_t> un; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1169 |
while (rerrHeader.RemoveUnDestination (un)) |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1170 |
{ |
5638
1b5112aa7de4
neighbors moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5635
diff
changeset
|
1171 |
if (m_nb.IsNeighbor (un.first)) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1172 |
SendRerrWhenBreaksLinkToNextHop (un.first); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1173 |
else |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1174 |
{ |
5699 | 1175 |
for (std::map<Ipv4Address, uint32_t>::const_iterator i = |
1176 |
dstWithNextHopSrc.begin (); i != dstWithNextHopSrc.end (); ++i) |
|
5729
3fe43de9a826
[aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents:
5722
diff
changeset
|
1177 |
{ |
3fe43de9a826
[aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents:
5722
diff
changeset
|
1178 |
if (i->first == un.first) |
3fe43de9a826
[aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents:
5722
diff
changeset
|
1179 |
{ |
3fe43de9a826
[aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents:
5722
diff
changeset
|
1180 |
Ipv4Address dst = un.first; |
3fe43de9a826
[aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents:
5722
diff
changeset
|
1181 |
unreachable.insert (un); |
3fe43de9a826
[aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents:
5722
diff
changeset
|
1182 |
} |
3fe43de9a826
[aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents:
5722
diff
changeset
|
1183 |
} |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1184 |
} |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1185 |
} |
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1186 |
|
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1187 |
std::vector<Ipv4Address> precursors; |
5699 | 1188 |
for (std::map<Ipv4Address, uint32_t>::const_iterator i = unreachable.begin (); |
1189 |
i != unreachable.end ();) |
|
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1190 |
{ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1191 |
if (!rerrHeader.AddUnDestination (i->first, i->second)) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1192 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1193 |
TypeHeader typeHeader (AODVTYPE_RERR); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1194 |
Ptr<Packet> packet = Create<Packet> (); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1195 |
packet->AddHeader (rerrHeader); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1196 |
packet->AddHeader (typeHeader); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1197 |
SendRerrMessage (packet, precursors); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1198 |
rerrHeader.Clear (); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1199 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1200 |
else |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1201 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1202 |
RoutingTableEntry toDst; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1203 |
m_routingTable.LookupRoute (i->first, toDst); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1204 |
toDst.GetPrecursors (precursors); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1205 |
++i; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1206 |
} |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1207 |
} |
5673
7288363ba82f
forwarding RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5672
diff
changeset
|
1208 |
if (rerrHeader.GetDestCount () != 0) |
7288363ba82f
forwarding RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5672
diff
changeset
|
1209 |
{ |
7288363ba82f
forwarding RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5672
diff
changeset
|
1210 |
TypeHeader typeHeader (AODVTYPE_RERR); |
7288363ba82f
forwarding RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5672
diff
changeset
|
1211 |
Ptr<Packet> packet = Create<Packet> (); |
7288363ba82f
forwarding RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5672
diff
changeset
|
1212 |
packet->AddHeader (rerrHeader); |
7288363ba82f
forwarding RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5672
diff
changeset
|
1213 |
packet->AddHeader (typeHeader); |
7288363ba82f
forwarding RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5672
diff
changeset
|
1214 |
SendRerrMessage (packet, precursors); |
7288363ba82f
forwarding RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5672
diff
changeset
|
1215 |
} |
5677 | 1216 |
m_routingTable.InvalidateRoutesWithDst (unreachable); |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1217 |
} |
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1218 |
|
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1219 |
void |
5675
d323064dd02f
expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5674
diff
changeset
|
1220 |
RoutingProtocol::RouteRequestTimerExpire (Ipv4Address dst) |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1221 |
{ |
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1222 |
NS_LOG_LOGIC(this); |
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1223 |
RoutingTableEntry toDst; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1224 |
m_routingTable.LookupRoute (dst, toDst); |
5664
90aae51a4227
local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5662
diff
changeset
|
1225 |
if (toDst.GetFlag () == VALID) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1226 |
{ |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1227 |
SendPacketFromQueue (dst, toDst.GetRoute ()); |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1228 |
NS_LOG_LOGIC ("route to " << dst << " found"); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1229 |
return; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1230 |
} |
5699 | 1231 |
/* |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1232 |
* If a route discovery has been attempted RreqRetries times at the maximum TTL without |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1233 |
* receiving any RREP, all data packets destined for the corresponding destination SHOULD be |
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1234 |
* dropped from the buffer and a Destination Unreachable message SHOULD be delivered to the application. |
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1235 |
*/ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1236 |
if (toDst.GetRreqCnt () == RreqRetries) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1237 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1238 |
NS_LOG_LOGIC("route discovery to " << dst << " has been attempted RreqRetries times"); |
5699 | 1239 |
m_addressReqTimer.erase (dst); |
1240 |
m_routingTable.DeleteRoute (dst); |
|
1241 |
NS_LOG_DEBUG ("Route not found. Drop packet with dst " << dst); |
|
1242 |
m_queue.DropPacketWithDst (dst); |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1243 |
return; |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1244 |
} |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1245 |
|
5664
90aae51a4227
local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5662
diff
changeset
|
1246 |
if (toDst.GetFlag () == IN_SEARCH) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1247 |
{ |
5675
d323064dd02f
expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5674
diff
changeset
|
1248 |
NS_LOG_LOGIC ("Send new RREQ to " << dst << " ttl " << NetDiameter); |
d323064dd02f
expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5674
diff
changeset
|
1249 |
SendRequest (dst); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1250 |
} |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1251 |
else |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1252 |
{ |
5699 | 1253 |
NS_LOG_DEBUG ("Route down. Stop search. Drop packet with destination " << dst); |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1254 |
m_addressReqTimer.erase(dst); |
5654 | 1255 |
m_routingTable.DeleteRoute(dst); |
5660
ed22e758b5f5
RoutingProtocol::DropFromQueue killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5659
diff
changeset
|
1256 |
m_queue.DropPacketWithDst(dst); |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1257 |
} |
5561
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1258 |
} |
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1259 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1260 |
void |
5561
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1261 |
RoutingProtocol::HelloTimerExpire () |
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1262 |
{ |
5607 | 1263 |
NS_LOG_FUNCTION(this); |
5562
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1264 |
SendHello (); |
5720
92594e167a58
[aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents:
5719
diff
changeset
|
1265 |
m_htimer.Cancel (); |
5708
55abd6e61f17
MilliSeconds(double) fixed to MilliSeconds(int)
Pavel Boyko <boyko@iitp.ru>
parents:
5704
diff
changeset
|
1266 |
Time t = Scalar(0.01)*MilliSeconds(UniformVariable().GetInteger (0, 100)); |
5720
92594e167a58
[aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents:
5719
diff
changeset
|
1267 |
m_htimer.Schedule (HelloInterval - t); |
5561
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1268 |
} |
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1269 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1270 |
void |
5688
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
1271 |
RoutingProtocol::RreqRateLimitTimerExpire () |
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
1272 |
{ |
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
1273 |
m_rreqCount = 0; |
5699 | 1274 |
m_rreqRateLimitTimer.Schedule (Seconds (1)); |
5688
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
1275 |
} |
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
1276 |
|
d30f52fc3aa5
RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5687
diff
changeset
|
1277 |
void |
5699 | 1278 |
RoutingProtocol::AckTimerExpire (Ipv4Address neighbor, Time blacklistTimeout) |
5612 | 1279 |
{ |
1280 |
NS_LOG_FUNCTION(this); |
|
5729
3fe43de9a826
[aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents:
5722
diff
changeset
|
1281 |
m_routingTable.MarkLinkAsUnidirectional (neighbor, blacklistTimeout); |
5612 | 1282 |
} |
1283 |
||
1284 |
void |
|
5562
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1285 |
RoutingProtocol::SendHello () |
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1286 |
{ |
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
1287 |
NS_LOG_FUNCTION(this); |
5600
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
1288 |
/* Broadcast a RREP with TTL = 1 with the RREP message fields set as follows: |
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
1289 |
* Destination IP Address The node's IP address. |
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
1290 |
* Destination Sequence Number The node's latest sequence number. |
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
1291 |
* Hop Count 0 |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1292 |
* Lifetime AllowedHelloLoss * HelloInterval |
5600
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
1293 |
*/ |
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
1294 |
for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j = m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1295 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1296 |
Ptr<Socket> socket = j->first; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1297 |
Ipv4InterfaceAddress iface = j->second; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1298 |
RrepHeader helloHeader (/*prefix size=*/0, /*hops=*/0, /*dst=*/iface.GetLocal (), /*dst seqno=*/m_seqNo, |
5677 | 1299 |
/*origin=*/iface.GetLocal (),/*lifetime=*/Scalar (AllowedHelloLoss) * HelloInterval); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1300 |
Ptr<Packet> packet = Create<Packet> (); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1301 |
packet->AddHeader (helloHeader); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1302 |
TypeHeader tHeader (AODVTYPE_RREP); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1303 |
packet->AddHeader (tHeader); |
5677 | 1304 |
socket->Send (packet); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1305 |
} |
5562
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1306 |
} |
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1307 |
|
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1308 |
void |
5699 | 1309 |
RoutingProtocol::SendPacketFromQueue (Ipv4Address dst, Ptr<Ipv4Route> route) |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1310 |
{ |
5617
23f363019fd1
RecvReply changed to respond properly to receive RREP with origin address != receiver address, but == local address of another interface
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5616
diff
changeset
|
1311 |
NS_LOG_FUNCTION(this); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1312 |
QueueEntry queueEntry; |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1313 |
while (m_queue.Dequeue (dst, queueEntry)) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1314 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1315 |
UnicastForwardCallback ucb = queueEntry.GetUnicastForwardCallback (); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1316 |
ucb (route, queueEntry.GetPacket (), queueEntry.GetIpv4Header ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1317 |
} |
5561
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1318 |
} |
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1319 |
|
5603
46f56ea8e7b9
buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5602
diff
changeset
|
1320 |
void |
5699 | 1321 |
RoutingProtocol::Send (Ptr<Ipv4Route> route, Ptr<const Packet> packet, |
1322 |
const Ipv4Header & header) |
|
5603
46f56ea8e7b9
buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5602
diff
changeset
|
1323 |
{ |
5680
25c3039f4144
problem with protocol number fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5679
diff
changeset
|
1324 |
NS_LOG_FUNCTION (this << packet->GetUid() << (uint16_t) header.GetProtocol()); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1325 |
Ptr<Ipv4L3Protocol> l3 = m_ipv4->GetObject<Ipv4L3Protocol> (); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1326 |
NS_ASSERT(l3 != 0); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1327 |
Ptr<Packet> p = packet->Copy (); |
5699 | 1328 |
l3->Send (p, route->GetSource (), header.GetDestination (), |
1329 |
header.GetProtocol (), route); |
|
5603
46f56ea8e7b9
buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5602
diff
changeset
|
1330 |
} |
46f56ea8e7b9
buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5602
diff
changeset
|
1331 |
|
46f56ea8e7b9
buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5602
diff
changeset
|
1332 |
void |
5699 | 1333 |
RoutingProtocol::SendRerrWhenBreaksLinkToNextHop (Ipv4Address nextHop) |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1334 |
{ |
5665
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1335 |
NS_LOG_FUNCTION (this << nextHop); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1336 |
RerrHeader rerrHeader; |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1337 |
std::vector<Ipv4Address> precursors; |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1338 |
std::map<Ipv4Address, uint32_t> unreachable; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1339 |
|
5609 | 1340 |
RoutingTableEntry toNextHop; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1341 |
if (!m_routingTable.LookupRoute (nextHop, toNextHop)) |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1342 |
return; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1343 |
toNextHop.GetPrecursors (precursors); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1344 |
rerrHeader.AddUnDestination (nextHop, toNextHop.GetSeqNo ()); |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1345 |
m_routingTable.GetListOfDestinationWithNextHop (nextHop, unreachable); |
5699 | 1346 |
for (std::map<Ipv4Address, uint32_t>::const_iterator i = unreachable.begin (); i |
1347 |
!= unreachable.end ();) |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1348 |
{ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1349 |
if (!rerrHeader.AddUnDestination (i->first, i->second)) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1350 |
{ |
5672
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1351 |
NS_LOG_LOGIC ("Send RERR message with maximum size."); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1352 |
TypeHeader typeHeader (AODVTYPE_RERR); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1353 |
Ptr<Packet> packet = Create<Packet> (); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1354 |
packet->AddHeader (rerrHeader); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1355 |
packet->AddHeader (typeHeader); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1356 |
SendRerrMessage (packet, precursors); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1357 |
rerrHeader.Clear (); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1358 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1359 |
else |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1360 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1361 |
RoutingTableEntry toDst; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1362 |
m_routingTable.LookupRoute (i->first, toDst); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1363 |
toDst.GetPrecursors (precursors); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1364 |
++i; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1365 |
} |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1366 |
} |
5665
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1367 |
if (rerrHeader.GetDestCount () != 0) |
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1368 |
{ |
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1369 |
TypeHeader typeHeader (AODVTYPE_RERR); |
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1370 |
Ptr<Packet> packet = Create<Packet> (); |
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1371 |
packet->AddHeader (rerrHeader); |
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1372 |
packet->AddHeader (typeHeader); |
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1373 |
SendRerrMessage (packet, precursors); |
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1374 |
} |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1375 |
unreachable.insert (std::make_pair (nextHop, toNextHop.GetSeqNo ())); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1376 |
m_routingTable.InvalidateRoutesWithDst (unreachable); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1377 |
} |
5607 | 1378 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1379 |
void |
5699 | 1380 |
RoutingProtocol::SendRerrWhenNoRouteToForward (Ipv4Address dst, |
1381 |
uint32_t dstSeqNo, Ipv4Address origin) |
|
5672
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1382 |
{ |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1383 |
NS_LOG_FUNCTION (this); |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1384 |
RerrHeader rerrHeader; |
5699 | 1385 |
rerrHeader.AddUnDestination (dst, dstSeqNo); |
5672
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1386 |
RoutingTableEntry toOrigin; |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1387 |
Ptr<Packet> packet = Create<Packet> (); |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1388 |
packet->AddHeader (rerrHeader); |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1389 |
packet->AddHeader (TypeHeader (AODVTYPE_RERR)); |
5699 | 1390 |
if (m_routingTable.LookupRoute (origin, toOrigin)) |
5672
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1391 |
{ |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1392 |
if (toOrigin.GetFlag () == VALID) |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1393 |
{ |
5699 | 1394 |
Ptr<Socket> socket = FindSocketWithInterfaceAddress ( |
1395 |
toOrigin.GetInterface ()); |
|
5672
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1396 |
NS_ASSERT (socket); |
5699 | 1397 |
NS_LOG_LOGIC ("Unicast RERR to the source of the data transmission"); |
1398 |
socket->SendTo (packet, 0, InetSocketAddress (toOrigin.GetNextHop (), AODV_PORT)); |
|
5672
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1399 |
} |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1400 |
|
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1401 |
} |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1402 |
else |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1403 |
{ |
5699 | 1404 |
for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator i = |
1405 |
m_socketAddresses.begin (); i != m_socketAddresses.end (); ++i) |
|
5672
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1406 |
{ |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1407 |
Ptr<Socket> socket = i->first; |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1408 |
Ipv4InterfaceAddress iface = i->second; |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1409 |
NS_ASSERT (socket); |
5699 | 1410 |
NS_LOG_LOGIC ("Broadcast RERR message from interface " << iface.GetLocal()); |
5677 | 1411 |
socket->Send (packet); |
5672
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1412 |
} |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1413 |
} |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1414 |
} |
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1415 |
|
3c1ac1338476
Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5669
diff
changeset
|
1416 |
void |
5699 | 1417 |
RoutingProtocol::SendRerrMessage (Ptr<Packet> packet, std::vector<Ipv4Address> precursors) |
5603
46f56ea8e7b9
buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5602
diff
changeset
|
1418 |
{ |
5653 | 1419 |
NS_LOG_FUNCTION(this); |
1420 |
||
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
1421 |
if (precursors.empty ()) |
5665
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1422 |
{ |
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1423 |
NS_LOG_LOGIC ("No precursors"); |
5699 | 1424 |
return; |
5665
787190c03dd0
sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5664
diff
changeset
|
1425 |
} |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1426 |
// If there is only one precursor, RERR SHOULD be unicast toward that precursor |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1427 |
if (precursors.size () == 1) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1428 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1429 |
RoutingTableEntry toPrecursor; |
5697
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
1430 |
if (!m_routingTable.LookupRoute (precursors.front (), toPrecursor)) |
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
1431 |
return; |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
1432 |
Ptr<Socket> socket = FindSocketWithInterfaceAddress (toPrecursor.GetInterface ()); |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1433 |
NS_ASSERT (socket); |
5697
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
1434 |
if (toPrecursor.GetFlag () == VALID) |
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
1435 |
{ |
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
1436 |
NS_LOG_LOGIC ("one precursor => unicast RERR to " << toPrecursor.GetDestination() << " from " << toPrecursor.GetInterface ().GetLocal ()); |
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
1437 |
socket->SendTo (packet, 0, InetSocketAddress (precursors.front (), AODV_PORT)); |
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
1438 |
} |
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
1439 |
else |
acf61aefb10f
forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5696
diff
changeset
|
1440 |
NS_LOG_LOGIC ("One precursor, but no valid route to this precursor"); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1441 |
return; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1442 |
} |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1443 |
|
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1444 |
// Should only transmit RERR on those interfaces which have precursor nodes for the broken route |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
1445 |
std::vector<Ipv4InterfaceAddress> ifaces; |
5609 | 1446 |
RoutingTableEntry toPrecursor; |
5699 | 1447 |
for (std::vector<Ipv4Address>::const_iterator i = precursors.begin (); i |
1448 |
!= precursors.end (); ++i) |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1449 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1450 |
if (!m_routingTable.LookupRoute (*i, toPrecursor)) |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1451 |
break; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1452 |
bool result = true; |
5699 | 1453 |
for (std::vector<Ipv4InterfaceAddress>::const_iterator i = |
1454 |
ifaces.begin (); i != ifaces.end (); ++i) |
|
5729
3fe43de9a826
[aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents:
5722
diff
changeset
|
1455 |
{ |
3fe43de9a826
[aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents:
5722
diff
changeset
|
1456 |
if (*i == toPrecursor.GetInterface ()) |
3fe43de9a826
[aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents:
5722
diff
changeset
|
1457 |
{ |
3fe43de9a826
[aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents:
5722
diff
changeset
|
1458 |
result = false; |
3fe43de9a826
[aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents:
5722
diff
changeset
|
1459 |
break; |
3fe43de9a826
[aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents:
5722
diff
changeset
|
1460 |
} |
3fe43de9a826
[aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents:
5722
diff
changeset
|
1461 |
} |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1462 |
if (result) |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
1463 |
ifaces.push_back (toPrecursor.GetInterface ()); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1464 |
} |
5603
46f56ea8e7b9
buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5602
diff
changeset
|
1465 |
|
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
1466 |
for (std::vector<Ipv4InterfaceAddress>::const_iterator i = ifaces.begin (); i != ifaces.end (); ++i) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1467 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1468 |
Ptr<Socket> socket = FindSocketWithInterfaceAddress (*i); |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1469 |
NS_ASSERT (socket); |
5699 | 1470 |
NS_LOG_LOGIC ("Broadcast RERR message from interface " << i->GetLocal()); |
5677 | 1471 |
socket->Send (packet); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1472 |
} |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1473 |
|
5603
46f56ea8e7b9
buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5602
diff
changeset
|
1474 |
} |
5576 | 1475 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1476 |
Ptr<Socket> |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
1477 |
RoutingProtocol::FindSocketWithInterfaceAddress (Ipv4InterfaceAddress addr ) const |
5562
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1478 |
{ |
5699 | 1479 |
for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j = |
1480 |
m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j) |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1481 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1482 |
Ptr<Socket> socket = j->first; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1483 |
Ipv4InterfaceAddress iface = j->second; |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
1484 |
if (iface == addr) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1485 |
return socket; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1486 |
} |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1487 |
Ptr<Socket> socket; |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1488 |
return socket; |
5562
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1489 |
} |
5561
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1490 |
|
5661
917c6c7be9f9
RoutingProtocol::Drop added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5660
diff
changeset
|
1491 |
void |
917c6c7be9f9
RoutingProtocol::Drop added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5660
diff
changeset
|
1492 |
RoutingProtocol::Drop(Ptr<const Packet> packet, const Ipv4Header & header, Socket::SocketErrno err) |
917c6c7be9f9
RoutingProtocol::Drop added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5660
diff
changeset
|
1493 |
{ |
5699 | 1494 |
NS_LOG_DEBUG (this <<" drop own packet " << packet->GetUid() << " to " << header.GetDestination () << " from queue. Error " << err); |
5661
917c6c7be9f9
RoutingProtocol::Drop added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5660
diff
changeset
|
1495 |
} |
917c6c7be9f9
RoutingProtocol::Drop added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5660
diff
changeset
|
1496 |
|
5562
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1497 |
} |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1498 |
} |