author | Borovkova Elena <borovkovaes@iitp.ru> |
Thu, 13 Aug 2009 18:42:13 +0400 | |
changeset 5658 | b4e2a9fa80dc |
parent 5657 | 5983e16013d9 |
child 5659 | af1e766370c6 |
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 |
* |
5591
e0448da5da14
AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents:
5590
diff
changeset
|
25 |
* Authors: Elena Borovkova <borovkovaes@iitp.ru> |
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" |
|
5579 | 29 |
#include "ns3/socket.h" |
5560 | 30 |
#include "ns3/simulator.h" |
31 |
#include "ns3/log.h" |
|
32 |
#include "ns3/random-variable.h" |
|
33 |
#include "ns3/inet-socket-address.h" |
|
34 |
#include "ns3/ipv4-routing-protocol.h" |
|
35 |
#include "ns3/ipv4-route.h" |
|
36 |
#include "ns3/boolean.h" |
|
37 |
#include "ns3/uinteger.h" |
|
38 |
#include "ns3/enum.h" |
|
39 |
#include "ns3/trace-source-accessor.h" |
|
40 |
#include "ns3/ipv4-header.h" |
|
5580 | 41 |
#include "ns3/udp-header.h" |
5575 | 42 |
#include "ns3/nstime.h" |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
43 |
#include "ns3/net-device.h" |
5579 | 44 |
|
5613
c2e4bad4affc
Raw socket nearly work
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5612
diff
changeset
|
45 |
#include "ns3/raw-socket-factory.h" |
5614
e4ac62d42079
BuildHeader added + support of raw socket in ipv4-l3-protol added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5613
diff
changeset
|
46 |
#include "src/internet-stack/udp-l4-protocol.h" |
5622
aa34a270824c
route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5621
diff
changeset
|
47 |
#include <algorithm> |
5613
c2e4bad4affc
Raw socket nearly work
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5612
diff
changeset
|
48 |
|
5560 | 49 |
NS_LOG_COMPONENT_DEFINE ("AodvRoutingProtocol"); |
50 |
||
51 |
namespace ns3 |
|
52 |
{ |
|
53 |
namespace aodv |
|
54 |
{ |
|
55 |
NS_OBJECT_ENSURE_REGISTERED (RoutingProtocol); |
|
56 |
||
5647
b5e2bb381517
#define AODV_PORT killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5645
diff
changeset
|
57 |
/// UDP Port for AODV control traffic |
b5e2bb381517
#define AODV_PORT killed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5645
diff
changeset
|
58 |
const uint32_t RoutingProtocol::AODV_PORT = 654; |
5606
e6248d1eea81
handle active neighbors added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5605
diff
changeset
|
59 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
60 |
RoutingProtocol::RoutingProtocol () : |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
61 |
RreqRetries (2), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
62 |
ActiveRouteTimeout (Seconds (3)), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
63 |
NetDiameter (35), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
64 |
NodeTraversalTime (MilliSeconds (40)), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
65 |
NetTraversalTime (Scalar (2 * NetDiameter) * NodeTraversalTime), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
66 |
PathDiscoveryTime ( Scalar (2) * NetTraversalTime), |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
67 |
MyRouteTimeout (Scalar (2) * std::max (PathDiscoveryTime, ActiveRouteTimeout)), |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
68 |
HelloInterval(Seconds (1)), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
69 |
AllowedHelloLoss (2), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
70 |
DeletePeriod (Scalar(5) * std::max(ActiveRouteTimeout, HelloInterval)), |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
71 |
NextHopWait (NodeTraversalTime + MilliSeconds (10)), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
72 |
TtlStart (2), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
73 |
TtlIncrement (2), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
74 |
TtlThreshold (7), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
75 |
MaxRepairTtl (0.3* NetDiameter), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
76 |
LocalAddTtl (2), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
77 |
TimeoutBuffer (2), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
78 |
BlackListTimeout(Scalar (RreqRetries) * NetTraversalTime), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
79 |
MaxQueueLen (64), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
80 |
MaxQueueTime (Seconds(30)), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
81 |
DestinationOnly (false), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
82 |
GratuitousReply (true), |
5653 | 83 |
EnableExpandingRingSearch (false), |
5658 | 84 |
EnableHello (true), |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
85 |
EnableLocalRepair (true), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
86 |
m_routingTable (DeletePeriod), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
87 |
m_queue (MaxQueueLen, MaxQueueTime), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
88 |
m_requestId (0), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
89 |
m_seqNo (0), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
90 |
m_nb(HelloInterval), |
5641
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
91 |
htimer (Timer::CANCEL_ON_DESTROY), |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
92 |
rtimer (Timer::CANCEL_ON_DESTROY), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
93 |
lrtimer (Timer::CANCEL_ON_DESTROY) |
5571
b82fbde6cf8d
BroadcastIdCache methods and SendRequest() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5562
diff
changeset
|
94 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
95 |
{ |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
96 |
if (EnableHello) |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
97 |
{ |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
98 |
m_nb.SetCallback (MakeCallback (&RoutingProtocol::HandleLinkFailure, this)); |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
99 |
} |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
100 |
/* BlackListTimeout should be suitably increased if an expanding ring search is used. In such cases, it should be |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
101 |
* {[(TtlThreshold - TtlStart)/TtlIncrement] + 1 + RreqRetries} *NetTraversalTime. |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
102 |
* This is to account for possible additional route discovery attempts. |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
103 |
*/ |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
104 |
if (EnableExpandingRingSearch) |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
105 |
{ |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
106 |
BlackListTimeout = Scalar ((((TtlThreshold - TtlStart) / TtlIncrement) + 1 + RreqRetries)) * NetTraversalTime; |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
107 |
} |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
108 |
} |
5560 | 109 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
110 |
TypeId |
5560 | 111 |
RoutingProtocol::GetTypeId (void) |
112 |
{ |
|
5619 | 113 |
static TypeId tid = TypeId ("ns3::aodv::RoutingProtocol") |
114 |
.SetParent<Ipv4RoutingProtocol> () |
|
115 |
.AddConstructor<RoutingProtocol> () |
|
116 |
.AddAttribute ("HelloInterval", "HELLO messages emission interval.", |
|
117 |
TimeValue (Seconds (1)), |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
118 |
MakeTimeAccessor (&RoutingProtocol::HelloInterval), |
5619 | 119 |
MakeTimeChecker ()) |
120 |
.AddAttribute ("RreqRetries", "Maximum number of retransmissions of RREQ to discover a route", |
|
121 |
UintegerValue (2), |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
122 |
MakeUintegerAccessor (&RoutingProtocol::RreqRetries), |
5619 | 123 |
MakeUintegerChecker<uint32_t> ()) |
5625 | 124 |
.AddAttribute ("NodeTraversalTime", "Conservative estimate of the average one hop traversal time for packets and should include " |
5619 | 125 |
"queuing delays, interrupt processing times and transfer times.", |
126 |
TimeValue (MilliSeconds (40)), |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
127 |
MakeTimeAccessor (&RoutingProtocol::NodeTraversalTime), |
5619 | 128 |
MakeTimeChecker ()) |
129 |
.AddAttribute ("ActiveRouteTimeout", "Period of time during which the route is considered to be valid", |
|
130 |
TimeValue (Seconds (3)), |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
131 |
MakeTimeAccessor (&RoutingProtocol::ActiveRouteTimeout), |
5619 | 132 |
MakeTimeChecker ()) |
133 |
.AddAttribute ("NetDiameter", "Net diameter measures the maximum possible number of hops between two nodes in the network", |
|
134 |
UintegerValue (35), |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
135 |
MakeUintegerAccessor (&RoutingProtocol::NetDiameter), |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
136 |
MakeUintegerChecker<uint32_t> ()) |
5619 | 137 |
.AddAttribute ("TtlStart", "Initial value of TTL in RREQ when use an expanding ring search " |
138 |
"(should be set to at least 2 if Hello messages are used for local connectivity information.)", |
|
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
139 |
UintegerValue (2), |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
140 |
MakeUintegerAccessor (&RoutingProtocol::TtlStart), |
5619 | 141 |
MakeUintegerChecker<uint16_t> ()) |
142 |
.AddAttribute ("TtlIncrement", "Increment value of RREQ TTL when use an expanding ring search", |
|
143 |
UintegerValue (2), |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
144 |
MakeUintegerAccessor (&RoutingProtocol::TtlIncrement), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
145 |
MakeUintegerChecker<uint16_t> ()) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
146 |
.AddAttribute ("TtlThreshold", "Threshold, beyond which TTL = NetDiameter is used for each attempt in RREQ.", |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
147 |
UintegerValue (7), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
148 |
MakeUintegerAccessor (&RoutingProtocol::TtlThreshold), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
149 |
MakeUintegerChecker<uint16_t> ()) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
150 |
.AddAttribute ("LocalAddTtl", "Value used in calculation RREQ TTL when use local repair.", |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
151 |
UintegerValue (7), |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
152 |
MakeUintegerAccessor (&RoutingProtocol::LocalAddTtl), |
5619 | 153 |
MakeUintegerChecker<uint16_t> ()) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
154 |
.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
|
155 |
UintegerValue (64), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
156 |
MakeUintegerAccessor (&RoutingProtocol::MaxQueueLen), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
157 |
MakeUintegerChecker<uint32_t> ()) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
158 |
.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
|
159 |
TimeValue (Seconds (30)), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
160 |
MakeTimeAccessor (&RoutingProtocol::MaxQueueTime), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
161 |
MakeTimeChecker ()) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
162 |
.AddAttribute ("AllowedHelloLoss", "Number of hello messages which may be loss for valid link.", |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
163 |
UintegerValue (2), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
164 |
MakeUintegerAccessor (&RoutingProtocol::AllowedHelloLoss), |
5619 | 165 |
MakeUintegerChecker<uint16_t> ()) |
5654 | 166 |
.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
|
167 |
BooleanValue (true), |
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
168 |
MakeBooleanAccessor (&RoutingProtocol::SetGratuitousReplyFlag, |
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
169 |
&RoutingProtocol::GetGratuitousReplyFlag), |
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
170 |
MakeBooleanChecker ()) |
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
171 |
.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
|
172 |
BooleanValue (false), |
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
173 |
MakeBooleanAccessor (&RoutingProtocol::SetDesinationOnlyFlag, |
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
174 |
&RoutingProtocol::GetDesinationOnlyFlag), |
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
175 |
MakeBooleanChecker ()) |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
176 |
.AddAttribute ("EnableExpandingRingSearch", "Enable expanding ring search technique.", |
5653 | 177 |
BooleanValue (false), |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
178 |
MakeBooleanAccessor (&RoutingProtocol::SetExpandingRingSearchEnable, |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
179 |
&RoutingProtocol::GetExpandingRingSearchEnable), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
180 |
MakeBooleanChecker ()) |
5654 | 181 |
.AddAttribute ("EnableHello", "Indicates whether a hello messages enable.", |
5658 | 182 |
BooleanValue (true), |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
183 |
MakeBooleanAccessor (&RoutingProtocol::SetHelloEnable, |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
184 |
&RoutingProtocol::GetHelloEnable), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
185 |
MakeBooleanChecker ()) |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
186 |
.AddAttribute ("EnableLocalRepair", "Enable local repair.", |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
187 |
BooleanValue (true), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
188 |
MakeBooleanAccessor (&RoutingProtocol::SetLocalRepairEnable, |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
189 |
&RoutingProtocol::GetLocalRepairEnable), |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
190 |
MakeBooleanChecker ()) |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
191 |
; |
5560 | 192 |
return tid; |
193 |
} |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
194 |
RoutingProtocol::~RoutingProtocol () |
5560 | 195 |
{ |
196 |
} |
|
197 |
||
198 |
void |
|
199 |
RoutingProtocol::DoDispose () |
|
200 |
{ |
|
201 |
m_ipv4 = 0; |
|
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
202 |
for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::iterator iter = m_socketAddresses.begin (); iter != m_socketAddresses.end (); iter++) |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
203 |
{ |
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
204 |
iter->first->Close (); |
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
205 |
} |
5560 | 206 |
m_socketAddresses.clear (); |
207 |
Ipv4RoutingProtocol::DoDispose (); |
|
208 |
} |
|
209 |
||
5582 | 210 |
void |
211 |
RoutingProtocol::Start () |
|
212 |
{ |
|
5625 | 213 |
// Open sockets for control traffic on each IP interface |
5582 | 214 |
const Ipv4Address loopback ("127.0.0.1"); |
215 |
for (uint32_t i = 0; i < m_ipv4->GetNInterfaces (); i++) |
|
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
216 |
{ |
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
217 |
Ipv4InterfaceAddress iface = m_ipv4->GetAddress (i, 0); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
218 |
if (iface.GetLocal () == loopback) |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
219 |
continue; |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
220 |
|
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
221 |
// Create a socket to listen only on this interface |
5615
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
222 |
|
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
223 |
Ptr<Ipv4L3Protocol> l3 = m_ipv4->GetObject<Ipv4L3Protocol> (); |
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
224 |
Ptr<Socket> socket = l3->CreateRawSocket2(); |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
225 |
NS_ASSERT (socket != 0); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
226 |
socket->SetRecvCallback (MakeCallback (&RoutingProtocol::RecvAodv, this)); |
5615
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
227 |
socket->Bind(InetSocketAddress (iface.GetLocal(), AODV_PORT)); |
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
228 |
socket->Connect (InetSocketAddress (iface.GetBroadcast(), AODV_PORT)); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
229 |
m_socketAddresses.insert (std::make_pair (socket, iface)); |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
230 |
|
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
231 |
// Add local broadcast record to the routing table |
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
232 |
Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (iface.GetLocal ())); |
5615
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
233 |
RoutingTableEntry rt (/*device=*/dev, /*dst=*/iface.GetBroadcast (), /*know seqno=*/true, /*seqno=*/0, /*iface=*/iface, |
5622
aa34a270824c
route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5621
diff
changeset
|
234 |
/*hops=*/1, /*next hop=*/iface.GetBroadcast (), /*lifetime=*/Seconds (1e9)); // TODO use infty |
5597
8e4c7f2aaead
mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5594
diff
changeset
|
235 |
m_routingTable.AddRoute (rt); |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
236 |
} |
5601 | 237 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
238 |
m_scb = MakeCallback (&RoutingProtocol::Send, this); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
239 |
m_ecb = MakeCallback (&RoutingProtocol::Drop, this); |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
240 |
|
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
241 |
if (EnableHello) |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
242 |
{ |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
243 |
m_nb.ScheduleTimer (); |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
244 |
} |
5582 | 245 |
} |
246 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
247 |
Ptr<Ipv4Route> |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
248 |
RoutingProtocol::RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr ) |
5560 | 249 |
{ |
5579 | 250 |
NS_LOG_FUNCTION (this << p->GetUid() << header.GetDestination()); |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
251 |
sockerr = Socket::ERROR_NOTERROR; |
5607 | 252 |
Ptr<Ipv4Route> route; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
253 |
Ipv4Address dst = header.GetDestination (); |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
254 |
RoutingTableEntry rt; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
255 |
if (m_routingTable.LookupRoute (dst, rt)) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
256 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
257 |
if (rt.GetFlag () == RTF_UP) |
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 |
route = rt.GetRoute (); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
260 |
NS_ASSERT (route != 0); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
261 |
NS_LOG_LOGIC("exist route to " << route->GetDestination() << " from iface " << route->GetSource()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
262 |
UpdateRouteLifeTime (dst, ActiveRouteTimeout); |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
263 |
UpdateRouteLifeTime (route->GetGateway(), ActiveRouteTimeout); |
5658 | 264 |
// m_nb.Update (route->GetGateway(), ActiveRouteTimeout); //? |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
265 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
266 |
else |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
267 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
268 |
QueueEntry newEntry (p, header, m_scb, m_ecb); |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
269 |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
270 |
m_queue.Enqueue (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
271 |
if (rt.GetFlag () == RTF_DOWN) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
272 |
{ |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
273 |
m_routingTable.SetEntryState (dst, RTF_IN_SEARCH); |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
274 |
if (EnableExpandingRingSearch) |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
275 |
SendRequest (dst, rt.GetHop () + TtlIncrement); |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
276 |
else |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
277 |
SendRequest (dst, NetDiameter); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
278 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
279 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
280 |
} |
5578
020a5aa8b40c
SendRequeat in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5577
diff
changeset
|
281 |
else |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
282 |
{ |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
283 |
QueueEntry newEntry (p, header, m_scb, m_ecb); |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
284 |
m_queue.Enqueue (newEntry); |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
285 |
if (EnableExpandingRingSearch) |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
286 |
SendRequest (dst, TtlStart); |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
287 |
else |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
288 |
SendRequest (dst, NetDiameter); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
289 |
} |
5625 | 290 |
return route; |
5560 | 291 |
} |
292 |
||
293 |
bool |
|
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
294 |
RoutingProtocol::RouteInput (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev, UnicastForwardCallback ucb, |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
295 |
MulticastForwardCallback mcb, LocalDeliverCallback lcb, ErrorCallback ecb ) |
5560 | 296 |
{ |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
297 |
NS_LOG_FUNCTION (this << p->GetUid() << header.GetDestination() << idev->GetAddress()); |
5582 | 298 |
|
5579 | 299 |
NS_ASSERT (m_ipv4 != 0); |
300 |
// Check if input device supports IP |
|
301 |
NS_ASSERT (m_ipv4->GetInterfaceForDevice (idev) >= 0); |
|
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
302 |
int32_t iif = m_ipv4->GetInterfaceForDevice (idev); |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
303 |
|
5582 | 304 |
Ipv4Address dst = header.GetDestination (); |
5609 | 305 |
Ipv4Address origin = header.GetSource (); |
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
306 |
|
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
307 |
if (IsMyOwnAddress (origin)) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
308 |
return true; |
5579 | 309 |
|
5582 | 310 |
// Local delivery to AODV interfaces |
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
311 |
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
|
312 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
313 |
Ipv4InterfaceAddress iface = j->second; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
314 |
if (m_ipv4->GetInterfaceForAddress (iface.GetLocal ()) == iif) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
315 |
if (dst == iface.GetBroadcast ()) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
316 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
317 |
if (m_idCache.LookupId (origin, p->GetUid ())) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
318 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
319 |
NS_LOG_LOGIC("Duplicated packet from " << origin); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
320 |
return true; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
321 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
322 |
m_idCache.InsertId (origin, p->GetUid (), PathDiscoveryTime); |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
323 |
UpdateRouteLifeTime (origin, ActiveRouteTimeout); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
324 |
NS_LOG_LOGIC ("Broadcast local delivery to " << iface.GetLocal ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
325 |
lcb (p, header, iif); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
326 |
// TODO has TTL, forward |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
327 |
return true; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
328 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
329 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
330 |
for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j = m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
331 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
332 |
Ipv4InterfaceAddress iface = j->second; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
333 |
if (dst == iface.GetLocal ()) |
5615
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
334 |
{ |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
335 |
UpdateRouteLifeTime (origin, ActiveRouteTimeout); |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
336 |
RoutingTableEntry toOrigin; |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
337 |
m_routingTable.LookupRoute (origin, toOrigin); |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
338 |
UpdateRouteLifeTime (toOrigin.GetNextHop (), ActiveRouteTimeout); |
5638
1b5112aa7de4
neighbors moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5635
diff
changeset
|
339 |
m_nb.Update (toOrigin.GetNextHop (), ActiveRouteTimeout); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
340 |
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
|
341 |
lcb (p, header, iif); |
5615
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
342 |
return true; |
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
343 |
} |
5579 | 344 |
} |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
345 |
|
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
346 |
// TODO: local delivery to non-AODV interfaces |
5648
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
347 |
// Forwarding |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
348 |
return Forwarding (p, header, ucb, ecb); |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
349 |
} |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
350 |
|
5648
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
351 |
bool |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
352 |
RoutingProtocol::Forwarding (Ptr<const Packet> p, const Ipv4Header & header, UnicastForwardCallback ucb, ErrorCallback ecb) |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
353 |
{ |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
354 |
Ipv4Address dst = header.GetDestination (); |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
355 |
Ipv4Address origin = header.GetSource (); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
356 |
m_routingTable.Purge (); |
5609 | 357 |
RoutingTableEntry toDst; |
358 |
if (m_routingTable.LookupRoute (dst, toDst)) |
|
5622
aa34a270824c
route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5621
diff
changeset
|
359 |
{ |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
360 |
if (toDst.GetFlag () == RTF_DOWN && EnableLocalRepair) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
361 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
362 |
if (toDst.GetHop () > MaxRepairTtl) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
363 |
return false; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
364 |
LocalRouteRepair (dst, origin); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
365 |
QueueEntry newEntry (p, header, ucb, ecb, MaxQueueTime); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
366 |
m_queue.Enqueue (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
367 |
NS_LOG_LOGIC("Local repair "<< dst); |
5648
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
368 |
return true; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
369 |
} |
5648
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
370 |
else if (toDst.GetFlag () == RTF_IN_REPAIR) |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
371 |
{ |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
372 |
QueueEntry newEntry (p, header, ucb, ecb, MaxQueueTime); |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
373 |
m_queue.Enqueue (newEntry); |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
374 |
return true; |
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 |
else if (toDst.GetFlag () == RTF_UP) |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
377 |
{ |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
378 |
Ptr<Ipv4Route> route = toDst.GetRoute (); |
5655 | 379 |
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
|
380 |
|
5648
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
381 |
/** |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
382 |
* 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
|
383 |
* 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
|
384 |
* 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
|
385 |
* time plus ActiveRouteTimeout. |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
386 |
*/ |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
387 |
UpdateRouteLifeTime (origin, ActiveRouteTimeout); |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
388 |
UpdateRouteLifeTime (dst, ActiveRouteTimeout); |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
389 |
UpdateRouteLifeTime (route->GetGateway (), ActiveRouteTimeout); |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
390 |
/** |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
391 |
* 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
|
392 |
* 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
|
393 |
* to be no less than the current time plus ActiveRouteTimeout |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
394 |
*/ |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
395 |
RoutingTableEntry toOrigin; |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
396 |
m_routingTable.LookupRoute (origin, toOrigin); |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
397 |
UpdateRouteLifeTime (toOrigin.GetNextHop (), ActiveRouteTimeout); |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
398 |
|
5648
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
399 |
m_nb.Update (route->GetGateway (), ActiveRouteTimeout); //? |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
400 |
m_nb.Update (toOrigin.GetNextHop (), ActiveRouteTimeout); |
5609 | 401 |
|
5653 | 402 |
NS_LOG_LOGIC ("Forwarding"); |
403 |
m_routingTable.Print(std::cout); |
|
5648
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
404 |
ucb (route, p, header); |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
405 |
return true; |
85aae1523c46
forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5647
diff
changeset
|
406 |
} |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
407 |
} |
5607 | 408 |
NS_LOG_LOGIC("route not found to "<< dst); |
5578
020a5aa8b40c
SendRequeat in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5577
diff
changeset
|
409 |
return false; |
5560 | 410 |
} |
411 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
412 |
void |
5560 | 413 |
RoutingProtocol::SetIpv4 (Ptr<Ipv4> ipv4) |
414 |
{ |
|
5616
9d22b787ea7c
RawSocketImpl::ForwardUp fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5615
diff
changeset
|
415 |
NS_ASSERT (ipv4 != 0); |
9d22b787ea7c
RawSocketImpl::ForwardUp fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5615
diff
changeset
|
416 |
NS_ASSERT (m_ipv4 == 0); |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
417 |
|
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
418 |
if (EnableLocalRepair) |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
419 |
{ |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
420 |
lrtimer.SetFunction (&RoutingProtocol::LocalRepairTimerExpire, this); |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
421 |
} |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
422 |
if (EnableHello) |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
423 |
{ |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
424 |
htimer.SetFunction (&RoutingProtocol::HelloTimerExpire, this); |
5654 | 425 |
htimer.Schedule(MilliSeconds(UniformVariable().GetValue (0.0, 10.0))); |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
426 |
} |
5571
b82fbde6cf8d
BroadcastIdCache methods and SendRequest() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5562
diff
changeset
|
427 |
|
5560 | 428 |
m_ipv4 = ipv4; |
429 |
Simulator::ScheduleNow (&RoutingProtocol::Start, this); |
|
430 |
} |
|
431 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
432 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
433 |
RoutingProtocol::NotifyInterfaceUp (uint32_t i ) |
5560 | 434 |
{ |
435 |
// TODO |
|
436 |
} |
|
437 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
438 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
439 |
RoutingProtocol::NotifyInterfaceDown (uint32_t i ) |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
440 |
{ |
5569 | 441 |
NS_LOG_FUNCTION (this << m_ipv4->GetAddress (i, 0).GetLocal ()); |
5560 | 442 |
// TODO |
443 |
} |
|
444 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
445 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
446 |
RoutingProtocol::NotifyAddAddress (uint32_t interface, Ipv4InterfaceAddress address ) |
5560 | 447 |
{ |
448 |
} |
|
449 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
450 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
451 |
RoutingProtocol::NotifyRemoveAddress (uint32_t interface, Ipv4InterfaceAddress address ) |
5560 | 452 |
{ |
453 |
} |
|
454 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
455 |
bool |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
456 |
RoutingProtocol::IsMyOwnAddress (Ipv4Address src ) |
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
457 |
{ |
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
458 |
for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j = m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j) |
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
459 |
{ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
460 |
Ipv4InterfaceAddress iface = j->second; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
461 |
if (src == iface.GetLocal ()) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
462 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
463 |
return true; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
464 |
} |
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
465 |
} |
5594
106389f6d383
Duplicate detection fixed in RREQ forwarding
Pavel Boyko <boyko@iitp.ru>
parents:
5593
diff
changeset
|
466 |
return false; |
106389f6d383
Duplicate detection fixed in RREQ forwarding
Pavel Boyko <boyko@iitp.ru>
parents:
5593
diff
changeset
|
467 |
} |
106389f6d383
Duplicate detection fixed in RREQ forwarding
Pavel Boyko <boyko@iitp.ru>
parents:
5593
diff
changeset
|
468 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
469 |
void |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
470 |
RoutingProtocol::SendRequest (Ipv4Address dst, uint16_t ttl) |
5582 | 471 |
{ |
5614
e4ac62d42079
BuildHeader added + support of raw socket in ipv4-l3-protol added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5613
diff
changeset
|
472 |
NS_LOG_FUNCTION ( this << dst); |
5582 | 473 |
// Create RREQ header |
474 |
RreqHeader rreqHeader; |
|
475 |
rreqHeader.SetDst (dst); |
|
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
476 |
|
5609 | 477 |
RoutingTableEntry rt; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
478 |
if (m_routingTable.LookupRoute (dst, rt)) |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
479 |
{ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
480 |
rreqHeader.SetHopCount (rt.GetHop ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
481 |
if (rt.GetValidSeqNo ()) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
482 |
rreqHeader.SetDstSeqno (rt.GetSeqNo ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
483 |
else |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
484 |
rreqHeader.SetUnknownSeqno (true); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
485 |
} |
5582 | 486 |
else |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
487 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
488 |
Ptr<NetDevice> dev; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
489 |
rreqHeader.SetUnknownSeqno (true); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
490 |
RoutingTableEntry newEntry (dev, dst, false, 0, Ipv4InterfaceAddress (), 0, Ipv4Address (), Seconds (0)); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
491 |
newEntry.SetFlag (RTF_IN_SEARCH); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
492 |
m_routingTable.AddRoute (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
493 |
} |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
494 |
|
5634
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
495 |
if (GratuitousReply) |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
496 |
rreqHeader.SetGratiousRrep (true); |
5634
0638143639ad
D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5632
diff
changeset
|
497 |
if (DestinationOnly) |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
498 |
rreqHeader.SetDestinationOnly (true); |
5601 | 499 |
|
5597
8e4c7f2aaead
mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5594
diff
changeset
|
500 |
m_seqNo++; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
501 |
rreqHeader.SetOriginSeqno (m_seqNo); |
5615
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
502 |
m_requestId++; |
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
503 |
rreqHeader.SetId (m_requestId); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
504 |
rreqHeader.SetHopCount (0); |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
505 |
|
5625 | 506 |
// Send RREQ as subnet directed broadcast from each interface used by aodv |
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
507 |
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
|
508 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
509 |
Ptr<Socket> socket = j->first; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
510 |
Ipv4InterfaceAddress iface = j->second; |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
511 |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
512 |
rreqHeader.SetOrigin (iface.GetLocal ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
513 |
m_idCache.InsertId (iface.GetLocal (), m_requestId, PathDiscoveryTime); |
5582 | 514 |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
515 |
Ptr<Packet> packet = Create<Packet> (); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
516 |
packet->AddHeader (rreqHeader); |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
517 |
TypeHeader tHeader (AODVTYPE_RREQ); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
518 |
packet->AddHeader (tHeader); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
519 |
SendPacketViaRawSocket (/*packet*/packet, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ *j, /*dst*/iface.GetBroadcast (), /*TTL*/ ttl, /*id*/0); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
520 |
} |
5641
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
521 |
ScheduleRreqRetry (dst, ttl); |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
522 |
if (EnableHello) |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
523 |
{ |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
524 |
htimer.Cancel (); |
5654 | 525 |
htimer.Schedule (HelloInterval - Scalar(0.01)*MilliSeconds(UniformVariable().GetValue (0, 10))); |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
526 |
} |
5582 | 527 |
} |
528 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
529 |
void |
5641
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
530 |
RoutingProtocol::ScheduleRreqRetry (Ipv4Address dst, uint16_t ttl) |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
531 |
{ |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
532 |
if (m_addressReqTimer.find (dst) == m_addressReqTimer.end ()) |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
533 |
{ |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
534 |
Timer timer (Timer::CANCEL_ON_DESTROY); |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
535 |
m_addressReqTimer[dst] = timer; |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
536 |
} |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
537 |
m_addressReqTimer[dst].SetFunction (&RoutingProtocol::RouteRequestTimerExpire, this); |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
538 |
m_addressReqTimer[dst].Cancel (); |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
539 |
m_addressReqTimer[dst].SetArguments (dst, ttl); |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
540 |
RoutingTableEntry rt; |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
541 |
m_routingTable.LookupRoute (dst, rt); |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
542 |
if (ttl == NetDiameter) |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
543 |
{ |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
544 |
rt.IncrementRreqCnt (); |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
545 |
m_routingTable.Update (rt); |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
546 |
m_addressReqTimer[dst].Schedule (Scalar (rt.GetRreqCnt ()) * NetTraversalTime); |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
547 |
} |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
548 |
else |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
549 |
m_addressReqTimer[dst].Schedule (Scalar (2) * NodeTraversalTime * Scalar (ttl + TimeoutBuffer)); |
5641
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
550 |
} |
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
551 |
|
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
552 |
|
3e119b71a445
neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5639
diff
changeset
|
553 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
554 |
RoutingProtocol::RecvAodv (Ptr<Socket> socket ) |
5560 | 555 |
{ |
5579 | 556 |
NS_LOG_FUNCTION (this); |
5560 | 557 |
Address sourceAddress; |
5615
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
558 |
Ptr<Packet> packet = socket->RecvFrom (sourceAddress); |
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
559 |
|
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
560 |
Ipv4Header ipv4Header; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
561 |
packet->RemoveHeader (ipv4Header); |
5578
020a5aa8b40c
SendRequeat in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5577
diff
changeset
|
562 |
|
5615
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
563 |
UdpHeader udpHeader; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
564 |
packet->RemoveHeader (udpHeader); |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
565 |
NS_ASSERT (udpHeader.GetDestinationPort () == AODV_PORT); |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
566 |
NS_ASSERT (udpHeader.GetSourcePort () == AODV_PORT); |
5615
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
567 |
|
5612 | 568 |
Ipv4Address receiver = m_socketAddresses[socket].GetLocal (); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
569 |
Ipv4Address sender = ipv4Header.GetSource (); |
5612 | 570 |
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
|
571 |
|
5612 | 572 |
UpdateRouteToNeighbor (sender, receiver); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
573 |
TypeHeader tHeader (AODVTYPE_RREQ); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
574 |
packet->RemoveHeader (tHeader); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
575 |
if (!tHeader.IsValid ()) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
576 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
577 |
NS_LOG_WARN ("AODV message with unknown type received: " << tHeader.Get()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
578 |
return; // drop |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
579 |
} |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
580 |
switch (tHeader.Get ()) |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
581 |
{ |
5583 | 582 |
case AODVTYPE_RREQ: |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
583 |
{ |
5615
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
584 |
RecvRequest (packet, receiver, sender, ipv4Header); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
585 |
break; |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
586 |
} |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
587 |
case AODVTYPE_RREP: |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
588 |
{ |
5615
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
589 |
RecvReply (packet, receiver, sender, ipv4Header); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
590 |
break; |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
591 |
} |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
592 |
case AODVTYPE_RERR: |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
593 |
{ |
5612 | 594 |
RecvError (packet, sender); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
595 |
break; |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
596 |
} |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
597 |
case AODVTYPE_RREP_ACK: |
5612 | 598 |
{ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
599 |
RecvReplyAck (sender); |
5612 | 600 |
break; |
601 |
} |
|
5583 | 602 |
} |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
603 |
} |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
604 |
|
5607 | 605 |
bool |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
606 |
RoutingProtocol::UpdateRouteLifeTime (Ipv4Address addr, Time lifetime ) |
5607 | 607 |
{ |
5609 | 608 |
RoutingTableEntry rt; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
609 |
if (m_routingTable.LookupRoute (addr, rt)) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
610 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
611 |
rt.SetFlag (RTF_UP); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
612 |
rt.SetRreqCnt (0); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
613 |
rt.SetLifeTime (std::max (lifetime, rt.GetLifeTime ())); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
614 |
m_routingTable.Update (rt); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
615 |
return true; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
616 |
} |
5607 | 617 |
return false; |
618 |
} |
|
619 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
620 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
621 |
RoutingProtocol::UpdateRouteToNeighbor (Ipv4Address sender, Ipv4Address receiver ) |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
622 |
{ |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
623 |
NS_LOG_FUNCTION (this << "sender " << sender << " receiver " << receiver ); |
5609 | 624 |
RoutingTableEntry toNeighbor; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
625 |
if (!m_routingTable.LookupRoute (sender, toNeighbor)) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
626 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
627 |
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
|
628 |
RoutingTableEntry newEntry (/*device=*/dev, /*dst=*/sender, /*know seqno=*/false, /*seqno=*/0, |
5658 | 629 |
/*iface=*/m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0), |
630 |
/*hops=*/1, /*next hop=*/sender, /*lifetime=*/ActiveRouteTimeout); |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
631 |
m_routingTable.AddRoute (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
632 |
} |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
633 |
else |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
634 |
{ |
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
|
635 |
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
|
636 |
RoutingTableEntry newEntry (/*device=*/dev, /*dst=*/sender, /*know seqno=*/false, /*seqno=*/0, |
5658 | 637 |
/*iface=*/m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0), |
638 |
/*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
|
639 |
m_routingTable.Update (newEntry); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
640 |
} |
5583 | 641 |
} |
5578
020a5aa8b40c
SendRequeat in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5577
diff
changeset
|
642 |
|
5583 | 643 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
644 |
RoutingProtocol::RecvRequest (Ptr<Packet> p, Ipv4Address receiver, Ipv4Address src, Ipv4Header ipv4Header ) |
5560 | 645 |
{ |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
646 |
NS_LOG_FUNCTION (this); |
5575 | 647 |
RreqHeader rreqHeader; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
648 |
p->RemoveHeader (rreqHeader); // TODO check that header correctly found |
5621
e6e336252f25
finding duplicated broadcast packet by packet uid
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5619
diff
changeset
|
649 |
|
e6e336252f25
finding duplicated broadcast packet by packet uid
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5619
diff
changeset
|
650 |
// 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
|
651 |
RoutingTableEntry toPrev; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
652 |
if (m_routingTable.LookupRoute (src, toPrev)) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
653 |
{ |
5632 | 654 |
if (toPrev.IsUnidirectional ()) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
655 |
return; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
656 |
} |
5621
e6e336252f25
finding duplicated broadcast packet by packet uid
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5619
diff
changeset
|
657 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
658 |
uint32_t id = rreqHeader.GetId (); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
659 |
Ipv4Address origin = rreqHeader.GetOrigin (); |
5575 | 660 |
|
5609 | 661 |
/* |
662 |
* Node checks to determine whether it has received a RREQ with the same Originator IP Address and RREQ ID. |
|
663 |
* If such a RREQ has been received, the node silently discards the newly received RREQ. |
|
664 |
*/ |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
665 |
if (m_idCache.LookupId (origin, id)) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
666 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
667 |
return; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
668 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
669 |
m_idCache.InsertId (origin, id, PathDiscoveryTime); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
670 |
|
5583 | 671 |
// Increment RREQ hop count |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
672 |
uint8_t hop = rreqHeader.GetHopCount () + 1; |
5583 | 673 |
rreqHeader.SetHopCount (hop); |
5584 | 674 |
|
5609 | 675 |
/* |
676 |
* When the reverse route is created or updated, the following actions on the route are also carried out: |
|
677 |
* 1. the Originator Sequence Number from the RREQ is compared to the corresponding destination sequence number |
|
678 |
* in the route table entry and copied if greater than the existing value there |
|
679 |
* 2. the valid sequence number field is set to true; |
|
680 |
* 3. the next hop in the routing table becomes the node from which the RREQ was received |
|
681 |
* 4. the hop count is copied from the Hop Count in the RREQ message; |
|
682 |
* 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
|
683 |
* MinimalLifetime = current time + 2*NetTraversalTime - 2*HopCount*NodeTraversalTime |
5609 | 684 |
*/ |
685 |
RoutingTableEntry toOrigin; |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
686 |
if (!m_routingTable.LookupRoute (origin, toOrigin)) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
687 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
688 |
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
|
689 |
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
|
690 |
/*iface=*/m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0), /*hops=*/hop, |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
691 |
/*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
|
692 |
m_routingTable.AddRoute (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
693 |
} |
5599
5069c4c46ddb
SendReplyByIntermediateNode added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5598
diff
changeset
|
694 |
else |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
695 |
{ |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
696 |
if (toOrigin.GetValidSeqNo ()) |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
697 |
{ |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
698 |
if (int32_t (rreqHeader.GetOriginSeqno ()) - int32_t (toOrigin.GetSeqNo ()) > 0) |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
699 |
toOrigin.SetSeqNo (rreqHeader.GetOriginSeqno ()); |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
700 |
} |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
701 |
else |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
702 |
toOrigin.SetSeqNo (rreqHeader.GetOriginSeqno ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
703 |
toOrigin.SetValidSeqNo (true); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
704 |
toOrigin.SetNextHop (src); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
705 |
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
|
706 |
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
|
707 |
toOrigin.SetHop (hop); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
708 |
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
|
709 |
m_routingTable.Update (toOrigin); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
710 |
} |
5575 | 711 |
|
5655 | 712 |
NS_LOG_LOGIC ("After recieve request"); |
713 |
m_routingTable.Print (std::cout); |
|
714 |
||
5575 | 715 |
// A node generates a RREP if either: |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
716 |
// (i) it is itself the destination, |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
717 |
if (IsMyOwnAddress (rreqHeader.GetDst ())) |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
718 |
{ |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
719 |
m_routingTable.LookupRoute (origin, toOrigin); |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
720 |
SendReply (rreqHeader, toOrigin); |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
721 |
return; |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
722 |
} |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
723 |
/* |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
724 |
* (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
|
725 |
* 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
|
726 |
*/ |
5609 | 727 |
RoutingTableEntry toDst; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
728 |
Ipv4Address dst = rreqHeader.GetDst (); |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
729 |
NS_LOG_LOGIC (receiver << " recieve RREQ to destination " << dst << " with ttl " << (uint16_t) ipv4Header.GetTtl ()); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
730 |
if (m_routingTable.LookupRoute (dst, toDst)) |
5575 | 731 |
{ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
732 |
/* |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
733 |
* 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
|
734 |
* 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
|
735 |
* 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
|
736 |
* 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
|
737 |
*/ |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
738 |
if (rreqHeader.GetUnknownSeqno () || ( (int32_t (toDst.GetSeqNo ()) - int32_t (rreqHeader.GetDstSeqno ()) > 0) && toDst.GetValidSeqNo () )) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
739 |
{ |
5653 | 740 |
if (!rreqHeader.GetDestinationOnly () && toDst.GetFlag() == RTF_UP) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
741 |
{ |
5653 | 742 |
m_routingTable.LookupRoute (origin, toOrigin); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
743 |
SendReplyByIntermediateNode (toDst, toOrigin, rreqHeader.GetGratiousRrep ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
744 |
return; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
745 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
746 |
rreqHeader.SetDstSeqno (toDst.GetSeqNo ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
747 |
rreqHeader.SetUnknownSeqno (false); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
748 |
} |
5575 | 749 |
} |
5655 | 750 |
|
5609 | 751 |
/* |
752 |
* If a node does not generate a RREP the incoming IP header has TTL larger than 1, the node updates |
|
753 |
* and broadcasts the RREQ on each of its configured interfaces. |
|
754 |
*/ |
|
5653 | 755 |
if (ipv4Header.GetTtl () < 2) |
5615
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
756 |
return; |
5618
7a2006fc4a04
sending broadcast aodv packet fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5617
diff
changeset
|
757 |
|
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
758 |
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
|
759 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
760 |
Ptr<Socket> socket = j->first; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
761 |
Ipv4InterfaceAddress iface = j->second; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
762 |
Ptr<Packet> packet = p->Copy (); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
763 |
packet->AddHeader (rreqHeader); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
764 |
TypeHeader tHeader (AODVTYPE_RREQ); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
765 |
packet->AddHeader (tHeader); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
766 |
SendPacketViaRawSocket (/*packet*/packet, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ *j, /*dst*/iface.GetBroadcast (), |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
767 |
/*TTL*/ ipv4Header.GetTtl () - 1, /*id*/ipv4Header.GetIdentification ()); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
768 |
} |
5609 | 769 |
|
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
770 |
if (EnableHello) |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
771 |
{ |
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
772 |
htimer.Cancel (); |
5653 | 773 |
htimer.Schedule (HelloInterval - Scalar(0.1)*MilliSeconds(UniformVariable().GetValue (0.0, 10.0))); |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
774 |
} |
5583 | 775 |
} |
5573
040121bb814c
BroadcastId methods and SendRequest() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5572
diff
changeset
|
776 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
777 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
778 |
RoutingProtocol::SendReply (RreqHeader const & rreqHeader, RoutingTableEntry const & toOrigin ) |
5583 | 779 |
{ |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
780 |
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
|
781 |
/* |
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
782 |
* 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
|
783 |
* 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
|
784 |
*/ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
785 |
if (!rreqHeader.GetUnknownSeqno () && (rreqHeader.GetDstSeqno () == m_seqNo + 1)) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
786 |
m_seqNo++; |
5610
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
787 |
RrepHeader rrepHeader ( /*prefixSize=*/0, /*hops=*/toOrigin.GetHop (), /*dst=*/rreqHeader.GetDst (), |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
788 |
/*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
|
789 |
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
|
790 |
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
|
791 |
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
|
792 |
packet->AddHeader (tHeader); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
793 |
Ptr<Socket> socket = FindSocketWithInterfaceAddress (toOrigin.GetInterface ()); |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
794 |
NS_ASSERT (socket); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
795 |
SendPacketViaRawSocket (/*packet*/packet, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ std::make_pair(socket, toOrigin.GetInterface ()), |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
796 |
/*dst*/toOrigin.GetNextHop (), /*TTL*/ toOrigin.GetHop (), /*id*/0); |
5610
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
797 |
} |
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
798 |
|
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
799 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
800 |
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
|
801 |
{ |
5653 | 802 |
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
|
803 |
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
|
804 |
/*origin=*/toOrigin.GetDestination (), /*lifetime=*/toDst.GetLifeTime ()); |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
805 |
/* 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
|
806 |
* 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
|
807 |
*/ |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
808 |
if (toDst.GetHop () == 1) |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
809 |
{ |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
810 |
rrepHeader.SetAckRequired (true); |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
811 |
RoutingTableEntry toNextHop; |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
812 |
m_routingTable.LookupRoute (toOrigin.GetNextHop (), toNextHop); |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
813 |
toNextHop.m_ackTimer.SetFunction (&RoutingProtocol::AckTimerExpire, this); |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
814 |
toNextHop.m_ackTimer.SetArguments (toNextHop.GetDestination (), BlackListTimeout); |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
815 |
toNextHop.m_ackTimer.SetDelay (NextHopWait); |
a50bf07ed462
heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5655
diff
changeset
|
816 |
} |
5610
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
817 |
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
|
818 |
toOrigin.InsertPrecursor (toDst.GetNextHop ()); |
5627
3fb6bda728ad
unit test for routing table updated
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5626
diff
changeset
|
819 |
m_routingTable.Update (toDst); |
3fb6bda728ad
unit test for routing table updated
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5626
diff
changeset
|
820 |
m_routingTable.Update (toOrigin); |
5587 | 821 |
|
5583 | 822 |
Ptr<Packet> packet = Create<Packet> (); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
823 |
packet->AddHeader (rrepHeader); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
824 |
TypeHeader tHeader (AODVTYPE_RREP); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
825 |
packet->AddHeader (tHeader); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
826 |
Ptr<Socket> socket = FindSocketWithInterfaceAddress (toOrigin.GetInterface ()); |
5653 | 827 |
NS_LOG_LOGIC ("interface" << toOrigin.GetInterface ().GetLocal ()); |
828 |
m_routingTable.Print(std::cout); |
|
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
829 |
NS_ASSERT (socket); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
830 |
SendPacketViaRawSocket (/*packet*/packet, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ std::make_pair(socket, toOrigin.GetInterface ()), |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
831 |
/*dst*/toOrigin.GetNextHop (), /*TTL*/ toOrigin.GetHop (), /*id*/0); |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
832 |
|
5610
88070a214cb7
Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5609
diff
changeset
|
833 |
// 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
|
834 |
if (gratRep) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
835 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
836 |
RrepHeader gratRepHeader (/*prefix size=*/0, /*hops=*/toOrigin.GetHop (), /*dst=*/toOrigin.GetDestination (), /*dst seqno=*/ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
837 |
toOrigin.GetSeqNo (), |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
838 |
/*origin=*/toDst.GetDestination (), /*lifetime=*/toOrigin.GetLifeTime ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
839 |
Ptr<Packet> packetToDst = Create<Packet> (); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
840 |
packetToDst->AddHeader (rrepHeader); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
841 |
packetToDst->AddHeader (tHeader); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
842 |
Ptr<Socket> socket = FindSocketWithInterfaceAddress (toDst.GetInterface ()); |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
843 |
NS_ASSERT (socket); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
844 |
SendPacketViaRawSocket (/*packet*/packet, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ std::make_pair(socket, toDst.GetInterface ()), |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
845 |
/*dst*/toDst.GetNextHop (), /*TTL*/ toDst.GetHop (), /*id*/0); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
846 |
} |
5560 | 847 |
} |
848 |
||
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
849 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
850 |
RoutingProtocol::SendReplyAck (Ipv4Address neighbor ) |
5560 | 851 |
{ |
5612 | 852 |
NS_LOG_FUNCTION(this); |
5611
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
853 |
RrepAckHeader h; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
854 |
TypeHeader typeHeader (AODVTYPE_RREP_ACK); |
5611
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
855 |
Ptr<Packet> packet = Create<Packet> (); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
856 |
packet->AddHeader (h); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
857 |
packet->AddHeader (typeHeader); |
5612 | 858 |
RoutingTableEntry toNeighbor; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
859 |
m_routingTable.LookupRoute (neighbor, toNeighbor); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
860 |
Ptr<Socket> socket = FindSocketWithInterfaceAddress (toNeighbor.GetInterface ()); |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
861 |
NS_ASSERT (socket); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
862 |
SendPacketViaRawSocket (/*packet*/packet, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ std::make_pair(socket, toNeighbor.GetInterface ()), |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
863 |
/*dst*/neighbor, /*TTL*/ 1, /*id*/0); |
5611
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
864 |
} |
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
865 |
|
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
866 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
867 |
RoutingProtocol::RecvReply (Ptr<Packet> p, Ipv4Address receiver, Ipv4Address sender, Ipv4Header ipv4Header ) |
5611
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
868 |
{ |
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
869 |
NS_LOG_FUNCTION(this << " src " << sender); |
5576 | 870 |
RrepHeader rrepHeader; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
871 |
p->RemoveHeader (rrepHeader); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
872 |
Ipv4Address dst = rrepHeader.GetDst (); |
5623
8c5b97aff720
expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5622
diff
changeset
|
873 |
NS_LOG_LOGIC("RREP destination " << dst << " RREP origin " << rrepHeader.GetOrigin()); |
5576 | 874 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
875 |
uint8_t hop = rrepHeader.GetHopCount () + 1; |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
876 |
rrepHeader.SetHopCount (hop); |
5600
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
877 |
|
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
878 |
// If RREP is Hello message |
5623
8c5b97aff720
expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5622
diff
changeset
|
879 |
if (dst == rrepHeader.GetOrigin ()) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
880 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
881 |
ProcessHello (rrepHeader, receiver); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
882 |
return; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
883 |
} |
5600
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
884 |
|
5611
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
885 |
/* |
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
886 |
* 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
|
887 |
* - the route is marked as active, |
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
888 |
* - the destination sequence number is marked as valid, |
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
889 |
* - 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
|
890 |
* 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
|
891 |
* - 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
|
892 |
* - 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
|
893 |
* - 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
|
894 |
*/ |
f051337ca99d
SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5610
diff
changeset
|
895 |
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
|
896 |
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
|
897 |
/*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
|
898 |
/*nextHop=*/sender, /*lifeTime=*/rrepHeader.GetLifeTime ()); |
5609 | 899 |
RoutingTableEntry toDst; |
5623
8c5b97aff720
expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5622
diff
changeset
|
900 |
if (m_routingTable.LookupRoute (dst, toDst)) |
5576 | 901 |
{ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
902 |
/* |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
903 |
* 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
|
904 |
* (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
|
905 |
*/ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
906 |
if (!toDst.GetValidSeqNo ()) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
907 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
908 |
m_routingTable.Update (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
909 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
910 |
// (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
|
911 |
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
|
912 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
913 |
m_routingTable.Update (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
914 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
915 |
else |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
916 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
917 |
// (iii) the sequence numbers are the same, but the route is marked as inactive. |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
918 |
if ((rrepHeader.GetDstSeqno () == toDst.GetSeqNo ()) && (toDst.GetFlag () != RTF_UP)) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
919 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
920 |
m_routingTable.Update (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
921 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
922 |
// (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
|
923 |
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
|
924 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
925 |
m_routingTable.Update (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
926 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
927 |
} |
5576 | 928 |
} |
5601 | 929 |
else |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
930 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
931 |
// The forward route for this destination is created if it does not already exist. |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
932 |
NS_LOG_LOGIC("add new route"); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
933 |
m_routingTable.AddRoute (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
934 |
} |
5655 | 935 |
NS_LOG_LOGIC ("After receive RREP"); |
936 |
m_routingTable.Print(std::cout); |
|
5612 | 937 |
// 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
|
938 |
if (rrepHeader.GetAckRequired ()) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
939 |
SendReplyAck (sender); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
940 |
NS_LOG_LOGIC ("receiver " << receiver << " origin " << rrepHeader.GetOrigin ()); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
941 |
if (IsMyOwnAddress (rrepHeader.GetOrigin ())) |
5623
8c5b97aff720
expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5622
diff
changeset
|
942 |
{ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
943 |
if (toDst.GetFlag () == RTF_IN_SEARCH) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
944 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
945 |
m_routingTable.Update (newEntry); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
946 |
m_addressReqTimer[dst].Cancel (); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
947 |
m_addressReqTimer.erase (dst); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
948 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
949 |
SendPacketFromQueue (rrepHeader.GetDst (), newEntry.GetRoute ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
950 |
return; |
5623
8c5b97aff720
expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5622
diff
changeset
|
951 |
} |
5576 | 952 |
|
5609 | 953 |
RoutingTableEntry toOrigin; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
954 |
if (!m_routingTable.LookupRoute (rrepHeader.GetOrigin (), toOrigin)) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
955 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
956 |
return; // Impossible! drop. |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
957 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
958 |
toOrigin.SetLifeTime (std::max (ActiveRouteTimeout, toOrigin.GetLifeTime ())); |
5627
3fb6bda728ad
unit test for routing table updated
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5626
diff
changeset
|
959 |
m_routingTable.Update (toOrigin); |
5622
aa34a270824c
route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5621
diff
changeset
|
960 |
|
5603
46f56ea8e7b9
buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5602
diff
changeset
|
961 |
// Update information about precursors |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
962 |
m_routingTable.LookupRoute (rrepHeader.GetDst (), toDst); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
963 |
toDst.InsertPrecursor (toOrigin.GetNextHop ()); |
5627
3fb6bda728ad
unit test for routing table updated
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5626
diff
changeset
|
964 |
m_routingTable.Update (toDst); |
5609 | 965 |
RoutingTableEntry toNextHopToDst; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
966 |
m_routingTable.LookupRoute (toDst.GetNextHop (), toNextHopToDst); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
967 |
toNextHopToDst.InsertPrecursor (toOrigin.GetNextHop ()); |
5627
3fb6bda728ad
unit test for routing table updated
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5626
diff
changeset
|
968 |
m_routingTable.Update (toNextHopToDst); |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
969 |
|
5622
aa34a270824c
route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5621
diff
changeset
|
970 |
// TODO add operation over unidirectional links |
5592
b74806ad2935
Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5590
diff
changeset
|
971 |
Ptr<Packet> packet = Create<Packet> (); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
972 |
packet->AddHeader (rrepHeader); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
973 |
TypeHeader tHeader (AODVTYPE_RREP); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
974 |
packet->AddHeader (tHeader); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
975 |
Ptr<Socket> socket = FindSocketWithInterfaceAddress (toOrigin.GetInterface ()); |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
976 |
NS_ASSERT (socket); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
977 |
SendPacketViaRawSocket (/*packet*/packet, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ std::make_pair(socket, toOrigin.GetInterface ()), |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
978 |
/*dst*/toOrigin.GetNextHop (), /*TTL*/ ipv4Header.GetTtl () - 1, /*id*/0); |
5600
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
979 |
} |
5586 | 980 |
|
5612 | 981 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
982 |
RoutingProtocol::RecvReplyAck (Ipv4Address neighbor ) |
5612 | 983 |
{ |
5615
85bb591dc8ad
routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5614
diff
changeset
|
984 |
NS_LOG_LOGIC(this); |
5612 | 985 |
// TODO |
986 |
} |
|
987 |
||
5600
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
988 |
// TODO may be used for determining connectivity |
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
989 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
990 |
RoutingProtocol::ProcessHello (RrepHeader const & rrepHeader, Ipv4Address receiver ) |
5600
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
991 |
{ |
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
992 |
NS_LOG_FUNCTION(this << "from " << rrepHeader.GetDst ()); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
993 |
/* |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
994 |
* 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
|
995 |
* 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
|
996 |
* create one if necessary. |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
997 |
*/ |
5609 | 998 |
RoutingTableEntry toNeighbor; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
999 |
if (!m_routingTable.LookupRoute (rrepHeader.GetDst (), toNeighbor)) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1000 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1001 |
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
|
1002 |
RoutingTableEntry newEntry (/*device=*/dev, /*dst=*/rrepHeader.GetDst (), /*validSeqNo=*/true, /*seqno=*/rrepHeader.GetDstSeqno (), |
5653 | 1003 |
/*iface=*/m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0), |
1004 |
/*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
|
1005 |
m_routingTable.AddRoute (newEntry); |
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 |
else |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1008 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1009 |
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
|
1010 |
toNeighbor.SetSeqNo (rrepHeader.GetDstSeqno ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1011 |
toNeighbor.SetValidSeqNo (true); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1012 |
toNeighbor.SetFlag (RTF_UP); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1013 |
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
|
1014 |
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
|
1015 |
m_routingTable.Update (toNeighbor); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1016 |
} |
5658 | 1017 |
if (EnableHello) |
1018 |
{ |
|
1019 |
m_nb.Update (rrepHeader.GetDst (), Scalar (AllowedHelloLoss) * HelloInterval); |
|
1020 |
NS_LOG_LOGIC ("After recieve Hello"); |
|
1021 |
m_routingTable.Print (std::cout); |
|
1022 |
} |
|
5560 | 1023 |
} |
1024 |
||
5607 | 1025 |
// TODO process RERR with 'N' flag |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1026 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1027 |
RoutingProtocol::RecvError (Ptr<Packet> p, Ipv4Address src ) |
5560 | 1028 |
{ |
5607 | 1029 |
RerrHeader rerrHeader; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1030 |
p->RemoveHeader (rerrHeader); |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1031 |
std::map<Ipv4Address, uint32_t> dstWithNextHopSrc; |
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1032 |
std::map<Ipv4Address, uint32_t> unreachable; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1033 |
m_routingTable.GetListOfDestinationWithNextHop (src, dstWithNextHopSrc); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1034 |
std::pair<Ipv4Address, uint32_t> un; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1035 |
while (rerrHeader.RemoveUnDestination (un)) |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1036 |
{ |
5638
1b5112aa7de4
neighbors moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5635
diff
changeset
|
1037 |
if (m_nb.IsNeighbor (un.first)) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1038 |
SendRerrWhenBreaksLinkToNextHop (un.first); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1039 |
else |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1040 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1041 |
for (std::map<Ipv4Address, uint32_t>::const_iterator i = dstWithNextHopSrc.begin (); i != dstWithNextHopSrc.end (); ++i) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1042 |
if (i->first == un.first) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1043 |
unreachable.insert (un); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1044 |
} |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1045 |
} |
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1046 |
|
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1047 |
std::vector<Ipv4Address> precursors; |
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1048 |
for (std::map<Ipv4Address, uint32_t>::const_iterator i = unreachable.begin (); i != unreachable.end ();) |
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1049 |
{ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1050 |
if (!rerrHeader.AddUnDestination (i->first, i->second)) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1051 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1052 |
TypeHeader typeHeader (AODVTYPE_RERR); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1053 |
Ptr<Packet> packet = Create<Packet> (); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1054 |
packet->AddHeader (rerrHeader); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1055 |
packet->AddHeader (typeHeader); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1056 |
SendRerrMessage (packet, precursors); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1057 |
rerrHeader.Clear (); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1058 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1059 |
else |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1060 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1061 |
RoutingTableEntry toDst; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1062 |
m_routingTable.LookupRoute (i->first, toDst); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1063 |
toDst.GetPrecursors (precursors); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1064 |
++i; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1065 |
} |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1066 |
} |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1067 |
m_routingTable.InvalidateRoutesWithDst (unreachable); |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1068 |
} |
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1069 |
|
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1070 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1071 |
RoutingProtocol::RouteRequestTimerExpire (Ipv4Address dst, uint16_t lastTtl ) |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1072 |
{ |
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1073 |
NS_LOG_LOGIC(this); |
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1074 |
RoutingTableEntry toDst; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1075 |
m_routingTable.LookupRoute (dst, toDst); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1076 |
if (toDst.GetFlag () == RTF_UP) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1077 |
{ |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1078 |
SendPacketFromQueue (dst, toDst.GetRoute ()); |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1079 |
NS_LOG_LOGIC ("route to " << dst << " found"); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1080 |
return; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1081 |
} |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1082 |
/** |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1083 |
* 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
|
1084 |
* 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
|
1085 |
* 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
|
1086 |
*/ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1087 |
if (toDst.GetRreqCnt () == RreqRetries) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1088 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1089 |
NS_LOG_LOGIC("route discovery to " << dst << " has been attempted RreqRetries times"); |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1090 |
m_addressReqTimer.erase(dst); |
5654 | 1091 |
m_routingTable.DeleteRoute(dst); |
5639
f39f45cddd86
unit test for neighbors added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5638
diff
changeset
|
1092 |
NS_LOG_LOGIC ("Route not found. Drop packet with dst " << dst); |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1093 |
DropFromQueue (dst); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1094 |
// TODO drop packet from queue and deliver Destination Unreachable message to the application. |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1095 |
return; |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1096 |
} |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1097 |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1098 |
if (toDst.GetFlag () == RTF_IN_SEARCH) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1099 |
{ |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1100 |
|
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1101 |
if (lastTtl + TtlIncrement > TtlThreshold) |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1102 |
{ |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1103 |
NS_LOG_LOGIC ("Send new RREQ to " << dst << " ttl " << NetDiameter); |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1104 |
SendRequest (dst, NetDiameter); |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1105 |
} |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1106 |
else |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1107 |
{ |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1108 |
NS_LOG_LOGIC ("Send new RREQ to " << dst << " ttl " << lastTtl + TtlIncrement); |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1109 |
SendRequest (dst, lastTtl + TtlIncrement); |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1110 |
} |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1111 |
} |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1112 |
else |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1113 |
{ |
5639
f39f45cddd86
unit test for neighbors added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5638
diff
changeset
|
1114 |
NS_LOG_LOGIC ("Route down. Stop search. Drop packet with destination " << dst); |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1115 |
m_addressReqTimer.erase(dst); |
5654 | 1116 |
m_routingTable.DeleteRoute(dst); |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1117 |
DropFromQueue (dst); |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1118 |
} |
5561
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1119 |
} |
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1120 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1121 |
void |
5561
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1122 |
RoutingProtocol::HelloTimerExpire () |
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1123 |
{ |
5607 | 1124 |
NS_LOG_FUNCTION(this); |
5562
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1125 |
SendHello (); |
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1126 |
// TODO select random time for the next hello |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1127 |
htimer.Cancel (); |
5654 | 1128 |
htimer.Schedule (HelloInterval - Scalar(0.01)*MilliSeconds(UniformVariable().GetValue (0.0, 10.0)) ); |
5561
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1129 |
} |
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1130 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1131 |
void |
5561
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1132 |
RoutingProtocol::LocalRepairTimerExpire () |
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1133 |
{ |
5562
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1134 |
// TODO start local repair procedure |
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1135 |
} |
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1136 |
|
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1137 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1138 |
RoutingProtocol::AckTimerExpire (Ipv4Address neighbor, Time blacklistTimeout ) |
5612 | 1139 |
{ |
1140 |
NS_LOG_FUNCTION(this); |
|
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1141 |
m_routingTable.MarkLinkAsUinidirectional (neighbor, blacklistTimeout); |
5612 | 1142 |
} |
1143 |
||
1144 |
void |
|
5562
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1145 |
RoutingProtocol::SendHello () |
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1146 |
{ |
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
1147 |
NS_LOG_FUNCTION(this); |
5600
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
1148 |
/* 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
|
1149 |
* Destination IP Address The node's IP address. |
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
1150 |
* Destination Sequence Number The node's latest sequence number. |
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
1151 |
* Hop Count 0 |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1152 |
* Lifetime AllowedHelloLoss * HelloInterval |
5600
0a591bcae2b3
hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5599
diff
changeset
|
1153 |
*/ |
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
1154 |
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
|
1155 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1156 |
Ptr<Socket> socket = j->first; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1157 |
Ipv4InterfaceAddress iface = j->second; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1158 |
RrepHeader helloHeader (/*prefix size=*/0, /*hops=*/0, /*dst=*/iface.GetLocal (), /*dst seqno=*/m_seqNo, |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1159 |
/*origin=*/iface.GetLocal (),/*lifetime=*/Scalar (AllowedHelloLoss) * HelloInterval); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1160 |
Ptr<Packet> packet = Create<Packet> (); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1161 |
packet->AddHeader (helloHeader); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1162 |
TypeHeader tHeader (AODVTYPE_RREP); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1163 |
packet->AddHeader (tHeader); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
1164 |
SendPacketViaRawSocket (/*packet*/packet, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ *j, |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1165 |
/*dst*/iface.GetBroadcast (), /*TTL*/ 1, /*id*/0); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1166 |
} |
5562
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1167 |
} |
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1168 |
|
5575 | 1169 |
void |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
1170 |
RoutingProtocol::SendPacketViaRawSocket (Ptr<Packet> packet, std::pair<Ptr<Socket> , Ipv4InterfaceAddress> socketAddress, Ipv4Address dst, |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1171 |
uint16_t ttl, uint16_t id ) |
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1172 |
{ |
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1173 |
UdpHeader udpHeader; |
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1174 |
udpHeader.SetDestinationPort (AODV_PORT); |
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1175 |
udpHeader.SetSourcePort (AODV_PORT); |
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1176 |
packet->AddHeader (udpHeader); |
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1177 |
|
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1178 |
Ipv4Header ipv4Header; |
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1179 |
ipv4Header.SetSource (socketAddress.second.GetLocal ()); |
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1180 |
ipv4Header.SetDestination (dst); |
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1181 |
ipv4Header.SetIdentification (id); |
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1182 |
ipv4Header.EnableChecksum (); |
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1183 |
ipv4Header.SetProtocol (UdpL4Protocol::PROT_NUMBER); |
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1184 |
ipv4Header.SetTtl (ttl); |
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1185 |
ipv4Header.SetPayloadSize (packet->GetSize ()); |
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1186 |
packet->AddHeader (ipv4Header); |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
1187 |
NS_LOG_LOGIC ("Send packet " << packet->GetUid() << " from " << socketAddress.second.GetLocal () << " to " << dst); |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1188 |
socketAddress.first->SendTo (packet, 0, InetSocketAddress (dst, AODV_PORT)); |
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1189 |
} |
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1190 |
|
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1191 |
|
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1192 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1193 |
RoutingProtocol::SendPacketFromQueue (Ipv4Address dst, Ptr<Ipv4Route> route ) |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1194 |
{ |
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
|
1195 |
NS_LOG_FUNCTION(this); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1196 |
QueueEntry queueEntry; |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1197 |
while (m_queue.Dequeue (dst, queueEntry)) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1198 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1199 |
UnicastForwardCallback ucb = queueEntry.GetUnicastForwardCallback (); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1200 |
ucb (route, queueEntry.GetPacket (), queueEntry.GetIpv4Header ()); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1201 |
} |
5561
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1202 |
} |
5635
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1203 |
void |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1204 |
RoutingProtocol::DropFromQueue (Ipv4Address dst) |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1205 |
{ |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1206 |
NS_LOG_FUNCTION(this); |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1207 |
m_queue.DropPacketWithDst(dst); |
41c9c1b2008d
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5634
diff
changeset
|
1208 |
} |
5561
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1209 |
|
5603
46f56ea8e7b9
buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5602
diff
changeset
|
1210 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1211 |
RoutingProtocol::Send (Ptr<Ipv4Route> route, Ptr<const Packet> packet, const Ipv4Header & header ) |
5603
46f56ea8e7b9
buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5602
diff
changeset
|
1212 |
{ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1213 |
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
|
1214 |
Ptr<Ipv4L3Protocol> l3 = m_ipv4->GetObject<Ipv4L3Protocol> (); |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1215 |
NS_ASSERT(l3 != 0); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1216 |
Ptr<Packet> p = packet->Copy (); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1217 |
// TODO know protocol number |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1218 |
l3->Send (p, route->GetSource (), header.GetDestination (), 1, route); |
5603
46f56ea8e7b9
buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5602
diff
changeset
|
1219 |
} |
46f56ea8e7b9
buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5602
diff
changeset
|
1220 |
|
46f56ea8e7b9
buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5602
diff
changeset
|
1221 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1222 |
RoutingProtocol::SendRerrWhenBreaksLinkToNextHop (Ipv4Address nextHop ) |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1223 |
{ |
5653 | 1224 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1225 |
RerrHeader rerrHeader; |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1226 |
std::vector<Ipv4Address> precursors; |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1227 |
std::map<Ipv4Address, uint32_t> unreachable; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1228 |
|
5609 | 1229 |
RoutingTableEntry toNextHop; |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1230 |
if (!m_routingTable.LookupRoute (nextHop, toNextHop)) |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1231 |
return; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1232 |
toNextHop.GetPrecursors (precursors); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1233 |
rerrHeader.AddUnDestination (nextHop, toNextHop.GetSeqNo ()); |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1234 |
m_routingTable.GetListOfDestinationWithNextHop (nextHop, unreachable); |
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1235 |
for (std::map<Ipv4Address, uint32_t>::const_iterator i = unreachable.begin (); i != unreachable.end ();) |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1236 |
{ |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1237 |
if (!rerrHeader.AddUnDestination (i->first, i->second)) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1238 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1239 |
TypeHeader typeHeader (AODVTYPE_RERR); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1240 |
Ptr<Packet> packet = Create<Packet> (); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1241 |
packet->AddHeader (rerrHeader); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1242 |
packet->AddHeader (typeHeader); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1243 |
SendRerrMessage (packet, precursors); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1244 |
rerrHeader.Clear (); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1245 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1246 |
else |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1247 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1248 |
RoutingTableEntry toDst; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1249 |
m_routingTable.LookupRoute (i->first, toDst); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1250 |
toDst.GetPrecursors (precursors); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1251 |
++i; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1252 |
} |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1253 |
} |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1254 |
unreachable.insert (std::make_pair (nextHop, toNextHop.GetSeqNo ())); |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1255 |
m_routingTable.InvalidateRoutesWithDst (unreachable); |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1256 |
} |
5607 | 1257 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1258 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1259 |
RoutingProtocol::SendRerrMessage (Ptr<Packet> packet, std::vector<Ipv4Address> precursors ) |
5603
46f56ea8e7b9
buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5602
diff
changeset
|
1260 |
{ |
5653 | 1261 |
NS_LOG_FUNCTION(this); |
1262 |
||
5605
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
1263 |
if (precursors.empty ()) |
cc68f3766bcd
control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5604
diff
changeset
|
1264 |
return; // TODO too many unreachable destinations, but no precursors |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1265 |
// 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
|
1266 |
if (precursors.size () == 1) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1267 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1268 |
RoutingTableEntry toPrecursor; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1269 |
m_routingTable.LookupRoute (precursors.front (), toPrecursor); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
1270 |
Ptr<Socket> socket = FindSocketWithInterfaceAddress (toPrecursor.GetInterface ()); |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1271 |
NS_ASSERT (socket); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
1272 |
SendPacketViaRawSocket (/*packet*/packet, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ std::make_pair(socket, toPrecursor.GetInterface ()), |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1273 |
/*dst*/precursors.front (), /*TTL*/ 1, /*id*/0); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1274 |
return; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1275 |
} |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1276 |
|
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1277 |
// 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
|
1278 |
std::vector<Ipv4InterfaceAddress> ifaces; |
5609 | 1279 |
RoutingTableEntry toPrecursor; |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1280 |
for (std::vector<Ipv4Address>::const_iterator i = precursors.begin (); i != precursors.end (); ++i) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1281 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1282 |
if (!m_routingTable.LookupRoute (*i, toPrecursor)) |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1283 |
break; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1284 |
bool result = true; |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
1285 |
for (std::vector<Ipv4InterfaceAddress>::const_iterator i = ifaces.begin (); i != ifaces.end (); ++i) |
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
1286 |
if (*i == toPrecursor.GetInterface ()) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1287 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1288 |
result = false; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1289 |
break; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1290 |
} |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1291 |
if (result) |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
1292 |
ifaces.push_back (toPrecursor.GetInterface ()); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1293 |
} |
5603
46f56ea8e7b9
buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5602
diff
changeset
|
1294 |
|
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
1295 |
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
|
1296 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1297 |
Ptr<Socket> socket = FindSocketWithInterfaceAddress (*i); |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1298 |
NS_ASSERT (socket); |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
1299 |
SendPacketViaRawSocket (/*packet*/packet, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ std::make_pair(socket, toPrecursor.GetInterface ()), |
5649
4915054ebfb2
SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5648
diff
changeset
|
1300 |
/*dst*/m_socketAddresses[socket].GetBroadcast (), /*TTL*/ 1, /*id*/0); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1301 |
} |
5608
d88d191ec33b
logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5607
diff
changeset
|
1302 |
|
5603
46f56ea8e7b9
buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5602
diff
changeset
|
1303 |
} |
5576 | 1304 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1305 |
Ptr<Socket> |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
1306 |
RoutingProtocol::FindSocketWithInterfaceAddress (Ipv4InterfaceAddress addr ) const |
5562
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1307 |
{ |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1308 |
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
|
1309 |
{ |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1310 |
Ptr<Socket> socket = j->first; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1311 |
Ipv4InterfaceAddress iface = j->second; |
5650
0379b99f18f4
change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5649
diff
changeset
|
1312 |
if (iface == addr) |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1313 |
return socket; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1314 |
} |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1315 |
Ptr<Socket> socket; |
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1316 |
return socket; |
5562
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1317 |
} |
5561
f74c7723afd3
AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents:
5560
diff
changeset
|
1318 |
|
5614
e4ac62d42079
BuildHeader added + support of raw socket in ipv4-l3-protol added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5613
diff
changeset
|
1319 |
|
e4ac62d42079
BuildHeader added + support of raw socket in ipv4-l3-protol added
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5613
diff
changeset
|
1320 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1321 |
RoutingProtocol::LocalRouteRepair (Ipv4Address dst, Ipv4Address origin ) |
5562
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1322 |
{ |
5653 | 1323 |
NS_LOG_FUNCTION(this << " from " << origin << " to " << dst); |
1324 |
||
5622
aa34a270824c
route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5621
diff
changeset
|
1325 |
RoutingTableEntry toDst; |
aa34a270824c
route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5621
diff
changeset
|
1326 |
RoutingTableEntry toOrigin; |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1327 |
if (!m_routingTable.LookupRoute (dst, toDst)) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1328 |
return; |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1329 |
if (!m_routingTable.LookupRoute (origin, toOrigin)) |
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1330 |
return; |
5651
26deb6597b42
optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5650
diff
changeset
|
1331 |
uint16_t ttl = std::max (toOrigin.GetHop () * 0.5, (double) toDst.GetHop ()) + LocalAddTtl; |
5622
aa34a270824c
route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5621
diff
changeset
|
1332 |
ttl++; |
aa34a270824c
route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5621
diff
changeset
|
1333 |
|
5562
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1334 |
} |
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1335 |
|
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1336 |
void |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1337 |
RoutingProtocol::HandleLinkFailure (Ipv4Address addr ) |
5562
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1338 |
{ |
5607 | 1339 |
NS_LOG_FUNCTION(this << addr); |
5629
782756bbd870
id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5628
diff
changeset
|
1340 |
SendRerrWhenBreaksLinkToNextHop (addr); |
5562
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1341 |
// TODO |
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1342 |
} |
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1343 |
|
2fc3138b5622
AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents:
5561
diff
changeset
|
1344 |
} |
5604
a7febbd71e42
send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents:
5603
diff
changeset
|
1345 |
} |